aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2006-04-13 23:34:58 +0000
committerTravis Howell2006-04-13 23:34:58 +0000
commit3407185358347c81672acc370edad18e1ae39011 (patch)
tree7dc62e3318419649e691beb9f1c693d355fe850f
parentfac96dfb34b3f35109394e7a4d41eb2e1c79429e (diff)
downloadscummvm-rg350-3407185358347c81672acc370edad18e1ae39011.tar.gz
scummvm-rg350-3407185358347c81672acc370edad18e1ae39011.tar.bz2
scummvm-rg350-3407185358347c81672acc370edad18e1ae39011.zip
Add invertBox function for FF
svn-id: r21854
-rw-r--r--engines/simon/saveload.cpp4
-rw-r--r--engines/simon/simon.cpp4
-rw-r--r--engines/simon/simon.h13
-rw-r--r--engines/simon/verb.cpp57
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