From 3407185358347c81672acc370edad18e1ae39011 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Thu, 13 Apr 2006 23:34:58 +0000 Subject: Add invertBox function for FF svn-id: r21854 --- engines/simon/saveload.cpp | 4 ++-- engines/simon/simon.cpp | 4 ++++ engines/simon/simon.h | 13 ++++++----- engines/simon/verb.cpp | 57 +++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 64 insertions(+), 14 deletions(-) diff --git a/engines/simon/saveload.cpp b/engines/simon/saveload.cpp index bdd161bf6c..5ebc0ab3d5 100644 --- a/engines/simon/saveload.cpp +++ b/engines/simon/saveload.cpp @@ -211,8 +211,8 @@ restart:; if_1:; unk132_result = i; - set_hitarea_bit_0x40(0xd0 + i); - leaveHitAreaById(0xd0 + i); + set_hitarea_bit_0x40(208 + i); + leaveHitAreaById(208 + i); // some code here diff --git a/engines/simon/simon.cpp b/engines/simon/simon.cpp index 76af76b783..25a93935bd 100644 --- a/engines/simon/simon.cpp +++ b/engines/simon/simon.cpp @@ -252,10 +252,14 @@ SimonEngine::SimonEngine(OSystem *syst) _speech = true; _subtitles = true; _fade = true; + _animatePointer = 0; _mouseCursor = 0; _mouseAnim = 0; _mouseAnimMax = 0; + _oldMouseCursor = 0; + _oldMouseAnimMax = 0; + _vgaVar9 = 0; _scriptUnk1 = 0; _restoreWindow6 = 0; diff --git a/engines/simon/simon.h b/engines/simon/simon.h index e2795a99ec..f067a716f8 100644 --- a/engines/simon/simon.h +++ b/engines/simon/simon.h @@ -262,10 +262,6 @@ protected: bool _speech; bool _subtitles; bool _fade; - byte _animatePointer; - byte _mouseCursor; - byte _mouseAnim; - byte _mouseAnimMax; bool _vgaVar9; int16 _scriptUnk1; bool _restoreWindow6; @@ -297,7 +293,6 @@ protected: uint _needHitAreaRecalc; uint _verbHitArea; uint16 _defaultVerb; - uint _mouseHideCount; uint _currentBoxNumber; uint _iOverflow; @@ -317,6 +312,11 @@ protected: int _mouseX, _mouseY; int _mouseXOld, _mouseYOld; + byte _animatePointer; + byte _mouseCursor, _mouseAnim, _mouseAnimMax; + byte _oldMouseCursor, _oldMouseAnimMax; + uint _mouseHideCount; + byte _leftButtonDown; byte _rightButtonDown; bool _noRightClick; @@ -568,7 +568,7 @@ protected: HitArea *findEmptyHitArea(); void resetVerbs(); void setVerb(HitArea * ha); - void hitarea_leave(HitArea * ha); + void hitarea_leave(HitArea * ha, bool state = false); void leaveHitAreaById(uint hitarea_id); void waitForSync(uint a); @@ -650,6 +650,7 @@ protected: void displayName(HitArea * ha); void displayBoxStars(); void hitarea_stuff(); + void invertBox(HitArea *ha, bool state); void handleMouseMoved(); void pollMouseXY(); diff --git a/engines/simon/verb.cpp b/engines/simon/verb.cpp index b3e77bc6b6..c0bd3b2ae2 100644 --- a/engines/simon/verb.cpp +++ b/engines/simon/verb.cpp @@ -515,11 +515,13 @@ void SimonEngine::setVerb(HitArea *ha) { } } -void SimonEngine::hitarea_leave(HitArea *ha) { - if (!(getGameType() == GType_SIMON2)) { - video_toggle_colors(ha, 0xdf, 0xd5, 0xda, 5); - } else { +void SimonEngine::hitarea_leave(HitArea *ha, bool state) { + if (getGameType() == GType_FF) { + invertBox(ha, state); + } else if (getGameType() == GType_SIMON2) { video_toggle_colors(ha, 0xe7, 0xe5, 0xe6, 1); + } else { + video_toggle_colors(ha, 0xdf, 0xd5, 0xda, 5); } } @@ -661,7 +663,7 @@ void SimonEngine::setup_hitarea_from_pos(uint x, uint y, uint mode) { best_ha = ha; } else { if (ha->flags & kBFBoxSelected) { - hitarea_leave(ha); + hitarea_leave(ha , true); ha->flags &= ~kBFBoxSelected; } } @@ -693,7 +695,7 @@ void SimonEngine::setup_hitarea_from_pos(uint x, uint y, uint mode) { } if (best_ha->flags & kBFInvertTouch && !(best_ha->flags & kBFBoxSelected)) { - hitarea_leave(best_ha); + hitarea_leave(best_ha, false); best_ha->flags |= kBFBoxSelected; } @@ -742,4 +744,47 @@ void SimonEngine::displayName(HitArea *ha) { _lastNameOn = ha; } +void SimonEngine::invertBox(HitArea *ha, bool state) { + if (getBitFlag(205) && getBitFlag(206)) { + if (state != 0) { + _mouseAnimMax = _oldMouseAnimMax; + _mouseCursor = _oldMouseCursor; + } else if (_mouseCursor != 18) { + _oldMouseCursor = _mouseCursor; + _animatePointer = 0; + _oldMouseAnimMax = _mouseAnimMax; + _mouseAnimMax = 2; + _mouseCursor = 18; + + } + } else { + if (getBitFlag(207)) { + if (state != 0) { + _noRightClick = 0; + resetVerbs(); + } else { + int cursor = ha->id + 9; + if (cursor >= 23) + cursor = 21; + _mouseCursor = cursor; + _mouseAnimMax = 8; + _noRightClick = 1; + } + } else { + VgaSprite *vsp = _vgaSprites; + + int id = ha->id - 43; + while (vsp->id) { + if (vsp->id == id && vsp->zoneNum == 2) { + if (state == 0) + vsp->flags |= kDFShaded; + else + vsp->flags &= ~kDFShaded; + break; + } + } + } + } +} + } // End of namespace Simon -- cgit v1.2.3