MADS: Initial cleanup of action/player handling

This commit is contained in:
Paul Gilbert 2014-03-27 22:38:28 -04:00
parent 377cbbe77d
commit 6c85572d76
20 changed files with 199 additions and 181 deletions

View file

@ -47,7 +47,7 @@ MADSAction::MADSAction(MADSEngine *vm) : _vm(vm) {
} }
void MADSAction::clear() { void MADSAction::clear() {
_v83338 = 1; _interAwaiting = AWAITING_COMMAND;
_actionMode = ACTIONMODE_NONE; _actionMode = ACTIONMODE_NONE;
_actionMode2 = ACTIONMODE2_0; _actionMode2 = ACTIONMODE2_0;
_v86F42 = 0; _v86F42 = 0;
@ -269,7 +269,7 @@ void MADSAction::startAction() {
DynamicHotspots &dynHotspots = scene._dynamicHotspots; DynamicHotspots &dynHotspots = scene._dynamicHotspots;
Hotspots &hotspots = scene._hotspots; Hotspots &hotspots = scene._hotspots;
game._player.moveComplete(); game._player.cancelCommand();
_inProgress = true; _inProgress = true;
_v8453A = ABORTMODE_0; _v8453A = ABORTMODE_0;
@ -354,12 +354,12 @@ void MADSAction::checkActionAtMousePos() {
UserInterface &userInterface = scene._userInterface; UserInterface &userInterface = scene._userInterface;
ScreenObjects &screenObjects = _vm->_game->_screenObjects; ScreenObjects &screenObjects = _vm->_game->_screenObjects;
if ((userInterface._category == CAT_ACTION || userInterface._category == CAT_INV_VOCAB) && if ((userInterface._category == CAT_COMMAND || userInterface._category == CAT_INV_VOCAB) &&
_v83338 != 1 && scene._highlightedHotspot >= 0) { _interAwaiting != 1 && scene._highlightedHotspot >= 0) {
if (_v86F4E == userInterface._category || _v86F4C != scene._highlightedHotspot || if (_v86F4E == userInterface._category || _v86F4C != scene._highlightedHotspot ||
(_v83338 != 2 && _v83338 != 3)) (_interAwaiting != 2 && _interAwaiting != 3))
clear(); clear();
else if (_selectedRow != 0 || userInterface._category != CAT_ACTION) else if (_selectedRow != 0 || userInterface._category != CAT_COMMAND)
scene._lookFlag = false; scene._lookFlag = false;
else else
scene._lookFlag = true; scene._lookFlag = true;
@ -367,19 +367,19 @@ void MADSAction::checkActionAtMousePos() {
if (screenObjects._v7FECA && _vm->_events->_mouseButtons) { if (screenObjects._v7FECA && _vm->_events->_mouseButtons) {
switch (userInterface._category) { switch (userInterface._category) {
case CAT_ACTION: case CAT_COMMAND:
case CAT_INV_VOCAB: case CAT_INV_VOCAB:
return; return;
case CAT_INV_LIST: case CAT_INV_LIST:
case CAT_TALK_ENTRY: case CAT_TALK_ENTRY:
if (_v83338 != 3) { if (_interAwaiting != 3) {
if (userInterface._selectedActionIndex >= 0) { if (userInterface._selectedActionIndex >= 0) {
_actionMode = ACTIONMODE_VERB; _actionMode = ACTIONMODE_VERB;
_selectedRow = userInterface._selectedActionIndex; _selectedRow = userInterface._selectedActionIndex;
_flags1 = scene._verbList[_selectedRow]._action1; _flags1 = scene._verbList[_selectedRow]._action1;
_flags2 = scene._verbList[_selectedRow]._action2; _flags2 = scene._verbList[_selectedRow]._action2;
_v83338 = 2; _interAwaiting = AWAITING_THIS;
} else if (userInterface._selectedItemVocabIdx >= 0) { } else if (userInterface._selectedItemVocabIdx >= 0) {
_actionMode = ACTIONMODE_OBJECT; _actionMode = ACTIONMODE_OBJECT;
_selectedRow = userInterface._selectedItemVocabIdx; _selectedRow = userInterface._selectedItemVocabIdx;
@ -393,20 +393,20 @@ void MADSAction::checkActionAtMousePos() {
_articleNumber = _flags2; _articleNumber = _flags2;
if ((_flags1 == 1 && _flags2 == 0) || (_flags1 == 2 && _flags2 != 0)) if ((_flags1 == 1 && _flags2 == 0) || (_flags1 == 2 && _flags2 != 0))
_v83338 = 4; _interAwaiting = AWAITING_RIGHT_MOUSE;
else else
_v83338 = 3; _interAwaiting = AWAITING_THAT;
} }
} }
break; break;
} }
} }
switch (_v83338) { switch (_interAwaiting) {
case 1: case 1:
_articleNumber = 0; _articleNumber = 0;
switch (userInterface._category) { switch (userInterface._category) {
case CAT_ACTION: case CAT_COMMAND:
_actionMode = ACTIONMODE_VERB; _actionMode = ACTIONMODE_VERB;
_selectedRow = scene._highlightedHotspot; _selectedRow = scene._highlightedHotspot;
if (_selectedRow >= 0) { if (_selectedRow >= 0) {
@ -491,13 +491,13 @@ void MADSAction::leftClick() {
ScreenObjects &screenObjects = _vm->_game->_screenObjects; ScreenObjects &screenObjects = _vm->_game->_screenObjects;
bool abortFlag = false; bool abortFlag = false;
if ((userInterface._category == CAT_ACTION || userInterface._category == CAT_INV_VOCAB) && if ((userInterface._category == CAT_COMMAND || userInterface._category == CAT_INV_VOCAB) &&
_v83338 != 1 && scene._highlightedHotspot >= 0 && _interAwaiting != 1 && scene._highlightedHotspot >= 0 &&
_v86F4E == userInterface._category && _v86F4C == scene._highlightedHotspot && _v86F4E == userInterface._category && _v86F4C == scene._highlightedHotspot &&
(_v83338 == 2 || userInterface._category == CAT_INV_VOCAB)) { (_interAwaiting == 2 || userInterface._category == CAT_INV_VOCAB)) {
abortFlag = true; abortFlag = true;
if (_selectedRow == 0 && userInterface._category == CAT_ACTION) { if (_selectedRow == 0 && userInterface._category == CAT_COMMAND) {
_selectedAction = CAT_ACTION; _selectedAction = CAT_COMMAND;
scene._lookFlag = true; scene._lookFlag = true;
} else { } else {
_selectedAction = CAT_NONE; _selectedAction = CAT_NONE;
@ -506,14 +506,14 @@ void MADSAction::leftClick() {
} }
} }
if (abortFlag || (screenObjects._v7FECA && (userInterface._category == CAT_ACTION || if (abortFlag || (screenObjects._v7FECA && (userInterface._category == CAT_COMMAND ||
userInterface._category == CAT_INV_VOCAB))) userInterface._category == CAT_INV_VOCAB)))
return; return;
switch (_v83338) { switch (_interAwaiting) {
case 1: case AWAITING_COMMAND:
switch (userInterface._category) { switch (userInterface._category) {
case CAT_ACTION: case CAT_COMMAND:
if (_selectedRow >= 0) { if (_selectedRow >= 0) {
if (!_flags1) { if (!_flags1) {
_selectedAction = -1; _selectedAction = -1;
@ -521,7 +521,7 @@ void MADSAction::leftClick() {
else { else {
_v86F4C = _selectedRow; _v86F4C = _selectedRow;
_v86F4E = _actionMode; _v86F4E = _actionMode;
_v83338 = 2; _interAwaiting = AWAITING_THIS;
} }
} }
break; break;
@ -536,7 +536,7 @@ void MADSAction::leftClick() {
if (_selectedRow >= 0) { if (_selectedRow >= 0) {
if (_flags1 != 1 || _flags2 != 0) { if (_flags1 != 1 || _flags2 != 0) {
if (_flags1 != 2 || _flags2 == 0) { if (_flags1 != 2 || _flags2 == 0) {
_v83338 = 3; _interAwaiting = AWAITING_THAT;
_articleNumber = _flags2; _articleNumber = _flags2;
} }
else { else {
@ -560,7 +560,7 @@ void MADSAction::leftClick() {
if (_vm->_events->currentPos().y < MADS_SCENE_HEIGHT) { if (_vm->_events->currentPos().y < MADS_SCENE_HEIGHT) {
scene._customDest = _vm->_events->currentPos() + scene._posAdjust; scene._customDest = _vm->_events->currentPos() + scene._posAdjust;
_selectedAction = -1; _selectedAction = -1;
_v86F4A = -1; _v86F4A = true;
} }
break; break;
@ -574,7 +574,7 @@ void MADSAction::leftClick() {
} }
break; break;
case 2: case AWAITING_THIS:
switch (userInterface._category) { switch (userInterface._category) {
case CAT_INV_LIST: case CAT_INV_LIST:
case CAT_HOTSPOT: case CAT_HOTSPOT:
@ -582,7 +582,7 @@ void MADSAction::leftClick() {
if (_hotspotId >= 0) { if (_hotspotId >= 0) {
if (_flags2) { if (_flags2) {
_articleNumber = _flags2; _articleNumber = _flags2;
_v83338 = 3; _interAwaiting = AWAITING_THAT;
} }
else { else {
_selectedAction = -1; _selectedAction = -1;
@ -599,7 +599,7 @@ void MADSAction::leftClick() {
} }
break; break;
case 3: case AWAITING_THAT:
switch (userInterface._category) { switch (userInterface._category) {
case CAT_INV_LIST: case CAT_INV_LIST:
case CAT_HOTSPOT: case CAT_HOTSPOT:

View file

@ -32,6 +32,14 @@ enum ActionMode { ACTIONMODE_NONE = 0, ACTIONMODE_VERB = 1, ACTIONMODE_OBJECT =
enum ActionMode2 { ACTIONMODE2_0 = 0, ACTIONMODE2_2 = 2, ACTIONMODE2_4 = 4, ACTIONMODE2_5 = 5 }; enum ActionMode2 { ACTIONMODE2_0 = 0, ACTIONMODE2_2 = 2, ACTIONMODE2_4 = 4, ACTIONMODE2_5 = 5 };
enum AbortTimerMode { ABORTMODE_0 = 0, ABORTMODE_1 = 1, ABORTMODE_2 = 2 }; enum AbortTimerMode { ABORTMODE_0 = 0, ABORTMODE_1 = 1, ABORTMODE_2 = 2 };
enum InterAwaiting {
AWAITING_NONE = 0,
AWAITING_COMMAND = 1, // Initial state: waiting for a command verb
AWAITING_THIS = 2, // Waiting for object
AWAITING_THAT = 3, // Waiting for a second object
AWAITING_RIGHT_MOUSE = 4 // Waiting for mouse button release
};
enum { enum {
VERB_NONE = 0, VERB_NONE = 0,
VERB_LOOK = 3, VERB_LOOK = 3,
@ -98,7 +106,7 @@ public:
int16 _v86F4E; int16 _v86F4E;
bool _v86F4A; bool _v86F4A;
int16 _v86F4C; int16 _v86F4C;
int _v83338; InterAwaiting _interAwaiting;
bool _inProgress; bool _inProgress;
int _v8453A; int _v8453A;

View file

@ -316,7 +316,7 @@ void Animation::startAnimation(int abortTimers) {
_currentFrame = 0; _currentFrame = 0;
_oldFrameEntry = 0; _oldFrameEntry = 0;
_nextFrameTimer = _vm->_game->_scene._frameStartTime; _nextFrameTimer = _vm->_game->_scene._frameStartTime;
_abortTimers = abortTimers; _trigger = abortTimers;
_abortTimersMode = _vm->_game->_abortTimersMode2; _abortTimersMode = _vm->_game->_abortTimersMode2;
_vm->_game->_scene._action._activeAction = _actionDetails; _vm->_game->_scene._action._activeAction = _actionDetails;
@ -530,8 +530,8 @@ void Animation::update() {
_currentFrame++; _currentFrame++;
if (_currentFrame >= (int)_miscEntries.size()) { if (_currentFrame >= (int)_miscEntries.size()) {
// Animation is complete // Animation is complete
if (_abortTimers != 0) { if (_trigger != 0) {
_vm->_game->_abortTimers = _abortTimers; _vm->_game->_trigger = _trigger;
_vm->_game->_abortTimersMode = _abortTimersMode; _vm->_game->_abortTimersMode = _abortTimersMode;
if (_abortTimersMode != ABORTMODE_1) { if (_abortTimersMode != ABORTMODE_1) {

View file

@ -128,7 +128,7 @@ private:
uint32 _nextFrameTimer; uint32 _nextFrameTimer;
uint32 _nextScrollTimer; uint32 _nextScrollTimer;
int _messageCtr; int _messageCtr;
int _abortTimers; int _trigger;
AbortTimerMode _abortTimersMode; AbortTimerMode _abortTimersMode;
ActionDetails _actionDetails; ActionDetails _actionDetails;

View file

@ -54,7 +54,6 @@ Game::Game(MADSEngine *vm): _vm(vm), _surface(nullptr), _objects(vm),
_quoteEmergency = false; _quoteEmergency = false;
_vocabEmergency = false; _vocabEmergency = false;
_aaName = "*I0.AA"; _aaName = "*I0.AA";
_playerSpritesFlag = false;
_priorFrameTimer = 0; _priorFrameTimer = 0;
_updateSceneFlag = false; _updateSceneFlag = false;
_abortTimersMode = ABORTMODE_0; _abortTimersMode = ABORTMODE_0;
@ -191,7 +190,7 @@ void Game::sectionLoop() {
if (!_player._spritesLoaded && _player._loadsFirst) { if (!_player._spritesLoaded && _player._loadsFirst) {
if (_player.loadSprites("")) if (_player.loadSprites(""))
_vm->quitGame(); _vm->quitGame();
_playerSpritesFlag = true; _player._loadedFirst = true;
} }
_scene.loadScene(_scene._nextSceneId, _aaName, 0); _scene.loadScene(_scene._nextSceneId, _aaName, 0);
@ -200,33 +199,33 @@ void Game::sectionLoop() {
if (!_player._spritesLoaded) { if (!_player._spritesLoaded) {
if (_player.loadSprites("")) if (_player.loadSprites(""))
_vm->quitGame(); _vm->quitGame();
_playerSpritesFlag = false; _player._loadedFirst = false;
} }
_vm->_events->initVars(); _vm->_events->initVars();
_scene._userInterface._highlightedCommandIndex = -1;
_scene._userInterface._highlightedItemIndex = -1;
_scene._userInterface._highlightedActionIndex = -1; _scene._userInterface._highlightedActionIndex = -1;
_scene._userInterface._v1C = -1;
_scene._userInterface._v1E = -1;
_scene._action.clear(); _scene._action.clear();
_player.turnToDestFacing(); _player.setFinalFacing();
_player._facing = _player._turnToFacing; _player._facing = _player._turnToFacing;
_player.moveComplete(); _player.cancelCommand();
_kernelMode = KERNEL_ROOM_INIT;
switch (_vm->_screenFade) { switch (_vm->_screenFade) {
case SCREEN_FADE_SMOOTH: case SCREEN_FADE_SMOOTH:
_abortTimers2 = kTransitionFadeOutIn; _fx = kTransitionFadeOutIn;
break; break;
case SCREEN_FADE_FAST: case SCREEN_FADE_FAST:
_abortTimers2 = kCenterVertTransition; _fx = kCenterVertTransition;
break; break;
default: default:
_abortTimers2 = kTransitionNone; _fx = kTransitionNone;
break; break;
} }
_abortTimers = 0; _trigger = 0;
_abortTimersMode2 = ABORTMODE_1;
_priorFrameTimer = _scene._frameStartTime; _priorFrameTimer = _scene._frameStartTime;
// Call the scene logic for entering the given scene // Call the scene logic for entering the given scene
@ -271,7 +270,7 @@ void Game::sectionLoop() {
warning("TODO: sub_1DD8C, sub_1DD7E"); warning("TODO: sub_1DD8C, sub_1DD7E");
if (!_playerSpritesFlag) { if (!_player._loadedFirst) {
_player._spritesLoaded = false; _player._spritesLoaded = false;
_player._spritesChanged = true; _player._spritesChanged = true;
} }

View file

@ -78,7 +78,6 @@ protected:
bool _quoteEmergency; bool _quoteEmergency;
bool _vocabEmergency; bool _vocabEmergency;
bool _updateSceneFlag; bool _updateSceneFlag;
bool _playerSpritesFlag;
/** /**
* Constructor * Constructor
@ -133,8 +132,8 @@ public:
Scene _scene; Scene _scene;
KernelMode _kernelMode; KernelMode _kernelMode;
int _v2; int _v2;
int _abortTimers; int _trigger;
int _abortTimers2; ScreenTransition _fx;
AbortTimerMode _abortTimersMode; AbortTimerMode _abortTimersMode;
AbortTimerMode _abortTimersMode2; AbortTimerMode _abortTimersMode2;
uint32 _priorFrameTimer; uint32 _priorFrameTimer;

View file

@ -74,7 +74,7 @@ int KernelMessages::add(const Common::Point &pt, uint fontColor, uint8 flags,
rec._textDisplayIndex = -1; rec._textDisplayIndex = -1;
rec._timeout = timeout; rec._timeout = timeout;
rec._frameTimer = _vm->_game->_priorFrameTimer; rec._frameTimer = _vm->_game->_priorFrameTimer;
rec._abortTimers = abortTimers; rec._trigger = abortTimers;
rec._abortMode = _vm->_game->_abortTimersMode2; rec._abortMode = _vm->_game->_abortTimersMode2;
rec._actionDetails = scene._action._activeAction; rec._actionDetails = scene._action._activeAction;
@ -143,7 +143,7 @@ void KernelMessages::reset() {
void KernelMessages::update() { void KernelMessages::update() {
uint32 currentTimer = _vm->_game->_scene._frameStartTime; uint32 currentTimer = _vm->_game->_scene._frameStartTime;
for (uint i = 0; i < _entries.size() && !_vm->_game->_abortTimers; ++i) { for (uint i = 0; i < _entries.size() && !_vm->_game->_trigger; ++i) {
KernelMessage &msg = _entries[i]; KernelMessage &msg = _entries[i];
if (((msg._flags & KMSG_ACTIVE) != 0) && (currentTimer >= msg._frameTimer)) if (((msg._flags & KMSG_ACTIVE) != 0) && (currentTimer >= msg._frameTimer))
@ -173,10 +173,10 @@ void KernelMessages::processText(int msgIndex) {
msg._timeout = 0; msg._timeout = 0;
} }
if ((msg._timeout <= 0) && (_vm->_game->_abortTimers == 0)) { if ((msg._timeout <= 0) && (_vm->_game->_trigger == 0)) {
msg._flags |= KMSG_EXPIRE; msg._flags |= KMSG_EXPIRE;
if (msg._abortTimers != 0) { if (msg._trigger != 0) {
_vm->_game->_abortTimers = msg._abortTimers; _vm->_game->_trigger = msg._trigger;
_vm->_game->_abortTimersMode = msg._abortMode; _vm->_game->_abortTimersMode = msg._abortMode;
if (_vm->_game->_abortTimersMode != ABORTMODE_1) { if (_vm->_game->_abortTimersMode != ABORTMODE_1) {

View file

@ -56,7 +56,7 @@ public:
uint32 _frameTimer2; uint32 _frameTimer2;
uint32 _frameTimer; uint32 _frameTimer;
uint32 _timeout; uint32 _timeout;
int _abortTimers; int _trigger;
AbortTimerMode _abortMode; AbortTimerMode _abortMode;
ActionDetails _actionDetails; ActionDetails _actionDetails;
Common::String _msg; Common::String _msg;

View file

@ -215,7 +215,7 @@ void Scene103::step() {
Common::Point pt; Common::Point pt;
int dist; int dist;
switch (_vm->_game->_abortTimers) { switch (_vm->_game->_trigger) {
case 70: case 70:
_vm->_game->_player._stepEnabled = true; _vm->_game->_player._stepEnabled = true;
break; break;
@ -260,7 +260,7 @@ void Scene103::actions() {
if (_action._savedFields._lookFlag) { if (_action._savedFields._lookFlag) {
_vm->_dialogs->show(10322); _vm->_dialogs->show(10322);
} else if (_action.isAction(395, 110, 0)) { } else if (_action.isAction(395, 110, 0)) {
switch (_vm->_game->_abortTimers) { switch (_vm->_game->_trigger) {
case 0: case 0:
_globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle( _globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(
_globals._spriteIndexes[6], false, 6, 1); _globals._spriteIndexes[6], false, 6, 1);
@ -280,7 +280,7 @@ void Scene103::actions() {
} }
} }
else if (_action.isAction(VERB_TAKE, 371, 0) && _game._objects.isInRoom(OBJ_TIMER_MODULE)) { else if (_action.isAction(VERB_TAKE, 371, 0) && _game._objects.isInRoom(OBJ_TIMER_MODULE)) {
switch (_vm->_game->_abortTimers) { switch (_vm->_game->_trigger) {
case 0: case 0:
_scene->changeDepthSurface(1); _scene->changeDepthSurface(1);
_globals._spriteIndexes[28] = _scene->_sequences.startReverseCycle( _globals._spriteIndexes[28] = _scene->_sequences.startReverseCycle(
@ -312,7 +312,7 @@ void Scene103::actions() {
break; break;
} }
} else if (_action.isAction(VERB_TAKE, 289, 0) && _game._objects.isInRoom(OBJ_REBREATHER)) { } else if (_action.isAction(VERB_TAKE, 289, 0) && _game._objects.isInRoom(OBJ_REBREATHER)) {
switch (_vm->_game->_abortTimers) { switch (_vm->_game->_trigger) {
case 0: case 0:
_scene->changeDepthSurface(1); _scene->changeDepthSurface(1);
_globals._spriteIndexes[27] = _scene->_sequences.startReverseCycle( _globals._spriteIndexes[27] = _scene->_sequences.startReverseCycle(
@ -344,26 +344,26 @@ void Scene103::actions() {
} else if (_action.isAction(VERB_LOOK, 362, 0)) { } else if (_action.isAction(VERB_LOOK, 362, 0)) {
_vm->_dialogs->show(10301); _vm->_dialogs->show(10301);
} else if (_action.isAction(VERB_TAKE, 362, 0)) { } else if (_action.isAction(VERB_TAKE, 362, 0)) {
if (!_vm->_game->_abortTimers) if (!_vm->_game->_trigger)
_vm->_sound->command(31); _vm->_sound->command(31);
if (_vm->_game->_abortTimers2 < 2) { if (_vm->_game->_fx < 2) {
_globals._spriteIndexes[24] = _scene->_sequences.addSpriteCycle( _globals._spriteIndexes[24] = _scene->_sequences.addSpriteCycle(
_globals._spriteIndexes[9], false, 6, _globals._spriteIndexes[9], false, 6,
_vm->_game->_abortTimers < 1 ? 1 : 0); _vm->_game->_trigger < 1 ? 1 : 0);
if (_vm->_game->_abortTimers) { if (_vm->_game->_trigger) {
_scene->_sequences.setAnimRange(_globals._spriteIndexes[24], -1, 0); _scene->_sequences.setAnimRange(_globals._spriteIndexes[24], -1, 0);
Common::String msg = _game.getQuote(51); Common::String msg = _game.getQuote(51);
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 0, 60, msg); _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 0, 60, msg);
_scene->_sequences.addTimer(120, _vm->_game->_abortTimers); _scene->_sequences.addTimer(120, _vm->_game->_trigger);
} else { } else {
_scene->_sequences.addSubEntry(_globals._spriteIndexes[24], _scene->_sequences.addSubEntry(_globals._spriteIndexes[24],
SM_0, 0, 1); SM_0, 0, 1);
} }
_game._player._stepEnabled = _game._abortTimers == 2; _game._player._stepEnabled = _game._trigger == 2;
_globals[kTurkeyExploded] = -1; _globals[kTurkeyExploded] = -1;
if (_game._abortTimers == 2) { if (_game._trigger == 2) {
_vm->_dialogs->show(1030); _vm->_dialogs->show(1030);
_scene->_hotspots.activate(362, false); _scene->_hotspots.activate(362, false);
} }
@ -372,7 +372,7 @@ void Scene103::actions() {
_vm->_dialogs->show(!_globals[kTurkeyExploded] ? 10323 : 10303); _vm->_dialogs->show(!_globals[kTurkeyExploded] ? 10323 : 10303);
} }
else if (_action.isAction(VERB_TALKTO, 27, 0)) { else if (_action.isAction(VERB_TALKTO, 27, 0)) {
switch (_vm->_game->_abortTimers) { switch (_vm->_game->_trigger) {
case 0: { case 0: {
_game._player._stepEnabled = false; _game._player._stepEnabled = false;
Common::String msg = _game.getQuote(71); Common::String msg = _game.getQuote(71);

View file

@ -218,7 +218,7 @@ void Scene201::step() {
_pterodactylFlag = false; _pterodactylFlag = false;
} }
if (_game._abortTimers == 70) { if (_game._trigger == 70) {
_globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0); _globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
_game._player._visible = false; _game._player._visible = false;
_scene->_sequences.setAnimRange(_globals._spriteIndexes[21], 12, 16); _scene->_sequences.setAnimRange(_globals._spriteIndexes[21], 12, 16);
@ -231,24 +231,24 @@ void Scene201::step() {
_scene->_sequences.addSubEntry(_globals._spriteIndexes[21], SM_0, 0, 73); _scene->_sequences.addSubEntry(_globals._spriteIndexes[21], SM_0, 0, 73);
} }
if (_game._abortTimers == 81) { if (_game._trigger == 81) {
_scene->_kernelMessages.reset(); _scene->_kernelMessages.reset();
} }
if (_game._abortTimers == 71) { if (_game._trigger == 71) {
_globals._spriteIndexes[22] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 0, 0, 0); _globals._spriteIndexes[22] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 0, 0, 0);
_scene->_sequences.setAnimRange(_globals._spriteIndexes[22], -2, -2); _scene->_sequences.setAnimRange(_globals._spriteIndexes[22], -2, -2);
_scene->_sequences.setDepth(_globals._spriteIndexes[22], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[22], 1);
} }
if (_game._abortTimers == 73) { if (_game._trigger == 73) {
_globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0); _globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._spriteIndexes[21], 17, -2); _scene->_sequences.setAnimRange(_globals._spriteIndexes[21], 17, -2);
_scene->_sequences.addSubEntry(_globals._spriteIndexes[21], SM_0, 0, 74); _scene->_sequences.addSubEntry(_globals._spriteIndexes[21], SM_0, 0, 74);
_scene->_sequences.setDepth(_globals._spriteIndexes[21], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[21], 1);
} }
if (_game._abortTimers == 74) { if (_game._trigger == 74) {
_vm->_sound->command(40); _vm->_sound->command(40);
_scene->_kernelMessages.add(Common::Point(125, 56), 0xFDFC, 32, 82, 180, _game.getQuote(91)); _scene->_kernelMessages.add(Common::Point(125, 56), 0xFDFC, 32, 82, 180, _game.getQuote(91));
@ -258,24 +258,24 @@ void Scene201::step() {
_scene->_sequences.addTimer(180, 75); _scene->_sequences.addTimer(180, 75);
} }
if (_game._abortTimers == 75) { if (_game._trigger == 75) {
_globals[kMeteorologistEverSeen] = 0; _globals[kMeteorologistEverSeen] = 0;
_scene->_nextSceneId = 202; _scene->_nextSceneId = 202;
} }
if (_game._abortTimers == 76) { if (_game._trigger == 76) {
_game._player._stepEnabled = true; _game._player._stepEnabled = true;
_game._player._visible = true; _game._player._visible = true;
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount; _game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
} }
if (_game._abortTimers == 77) { if (_game._trigger == 77) {
_globals[kTeleporterCommand] = 1; _globals[kTeleporterCommand] = 1;
_scene->_nextSceneId = _globals[kTeleporterDestination]; _scene->_nextSceneId = _globals[kTeleporterDestination];
_scene->_reloadSceneFlag = true; _scene->_reloadSceneFlag = true;
} }
if (_game._abortTimers == 78) { if (_game._trigger == 78) {
_vm->_sound->command(40); _vm->_sound->command(40);
_vm->_dialogs->show(0x4E92); _vm->_dialogs->show(0x4E92);
_scene->_reloadSceneFlag = true; _scene->_reloadSceneFlag = true;
@ -288,12 +288,12 @@ void Scene201::actions() {
if (action->isAction(0x18C, 0x83, 0)) if (action->isAction(0x18C, 0x83, 0))
_scene->_nextSceneId = 202; _scene->_nextSceneId = 202;
else if ((action->isAction(0x50, 0x156, 0)) || (action->isAction(0x188, 0x16C, 0)) || (action->isAction(0x188, 0x1B6, 0))) { else if ((action->isAction(0x50, 0x156, 0)) || (action->isAction(0x188, 0x16C, 0)) || (action->isAction(0x188, 0x1B6, 0))) {
if (_game._abortTimers == 0) { if (_game._trigger == 0) {
_game._player._stepEnabled = false; _game._player._stepEnabled = false;
_game._player._visible = false; _game._player._visible = false;
int sepChar = (_globals[kSexOfRex] == SEX_UNKNOWN) ? 't' : 'u'; int sepChar = (_globals[kSexOfRex] == SEX_UNKNOWN) ? 't' : 'u';
_scene->loadAnimation(formAnimName(sepChar, 0), 1); _scene->loadAnimation(formAnimName(sepChar, 0), 1);
} else if (_game._abortTimers == 1) { } else if (_game._trigger == 1) {
_scene->_nextSceneId = 213; _scene->_nextSceneId = 213;
} }
} else if (action->isAction(0x3, 0x1A6, 0)) { } else if (action->isAction(0x3, 0x1A6, 0)) {
@ -474,10 +474,10 @@ void Scene202::step() {
setRandomKernelMessage(); setRandomKernelMessage();
} }
if (_game._abortTimers == 70) if (_game._trigger == 70)
_activeMsgFl = false; _activeMsgFl = false;
if (_game._abortTimers == 71) { if (_game._trigger == 71) {
_vm->_sound->command(3); _vm->_sound->command(3);
_vm->_sound->command(9); _vm->_sound->command(9);
_globals._v8425C = 900 + _scene->_frameStartTime; _globals._v8425C = 900 + _scene->_frameStartTime;
@ -507,7 +507,7 @@ void Scene202::step() {
_globals[kMeteorologistWatch] = 0; _globals[kMeteorologistWatch] = 0;
} }
switch (_game._abortTimers) { switch (_game._trigger) {
case 90: case 90:
_vm->_sound->command(41); _vm->_sound->command(41);
_scene->_sequences.remove(_globals._spriteIndexes[25]); _scene->_sequences.remove(_globals._spriteIndexes[25]);
@ -717,7 +717,7 @@ void Scene202::preActions() {
_scene->_kernelMessages.reset(); _scene->_kernelMessages.reset();
if (!_ladderTopFl && (action->isAction(0x4E, 0xC7, 0) || !action->_walkFlag)) { if (!_ladderTopFl && (action->isAction(0x4E, 0xC7, 0) || !action->_walkFlag)) {
if (_game._abortTimers == 0) { if (_game._trigger == 0) {
_vm->_sound->command(29); _vm->_sound->command(29);
action->_walkFlag = false; action->_walkFlag = false;
_game._player._stepEnabled = false; _game._player._stepEnabled = false;
@ -725,7 +725,7 @@ void Scene202::preActions() {
_globals._spriteIndexes[23] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0); _globals._spriteIndexes[23] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
_scene->_sequences.setDepth(_globals._spriteIndexes[23], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[23], 1);
_scene->_sequences.addSubEntry(_globals._spriteIndexes[23], SM_0, 0, 1); _scene->_sequences.addSubEntry(_globals._spriteIndexes[23], SM_0, 0, 1);
} else if (_game._abortTimers == 1) { } else if (_game._trigger == 1) {
_scene->_sequences.updateTimeout(-1, _globals._spriteIndexes[23]); _scene->_sequences.updateTimeout(-1, _globals._spriteIndexes[23]);
warning("CHECKME: _scene->_dynamicHotspots.remove(_globals._frameTime);"); warning("CHECKME: _scene->_dynamicHotspots.remove(_globals._frameTime);");
_scene->_dynamicHotspots.remove(_globals._frameTime); _scene->_dynamicHotspots.remove(_globals._frameTime);
@ -765,7 +765,7 @@ void Scene202::actions() {
_scene->_nextSceneId = 201; _scene->_nextSceneId = 201;
} else if (action->isAction(0x4, 0x2C, 0)) { } else if (action->isAction(0x4, 0x2C, 0)) {
if (action->_actionMode2 == 4) { if (action->_actionMode2 == 4) {
if (_game._abortTimers == 0) { if (_game._trigger == 0) {
if (_game._objects.isInInventory(OBJ_BONES)) { if (_game._objects.isInInventory(OBJ_BONES)) {
_vm->_dialogs->show(0x4EFB); _vm->_dialogs->show(0x4EFB);
} else { } else {
@ -776,7 +776,7 @@ void Scene202::actions() {
_scene->_sequences.addSubEntry(_globals._spriteIndexes[22], SM_FRAME_INDEX, 6, 1); _scene->_sequences.addSubEntry(_globals._spriteIndexes[22], SM_FRAME_INDEX, 6, 1);
_scene->_sequences.addSubEntry(_globals._spriteIndexes[22], SM_0, 0, 2); _scene->_sequences.addSubEntry(_globals._spriteIndexes[22], SM_0, 0, 2);
} }
} else if (_game._abortTimers == 1) { } else if (_game._trigger == 1) {
if ((_game._player._playerPos.x == 132) && (_game._player._playerPos.y == 97)) { if ((_game._player._playerPos.x == 132) && (_game._player._playerPos.y == 97)) {
_scene->_sequences.remove(_globals._spriteIndexes[16]); _scene->_sequences.remove(_globals._spriteIndexes[16]);
_globals[kBone202Status] |= 1; _globals[kBone202Status] |= 1;
@ -784,7 +784,7 @@ void Scene202::actions() {
_scene->_sequences.remove(_globals._spriteIndexes[21]); _scene->_sequences.remove(_globals._spriteIndexes[21]);
_globals[kBone202Status] |= 2; _globals[kBone202Status] |= 2;
} }
} else if (_game._abortTimers == 2) { } else if (_game._trigger == 2) {
if (_game._objects.isInInventory(OBJ_BONE)) { if (_game._objects.isInInventory(OBJ_BONE)) {
_game._objects.removeFromInventory(OBJ_BONE, 1); _game._objects.removeFromInventory(OBJ_BONE, 1);
_game._objects.addToInventory(OBJ_BONES); _game._objects.addToInventory(OBJ_BONES);
@ -802,7 +802,7 @@ void Scene202::actions() {
} }
} }
} else if ((action->isAction(0x50, 0xC7, 0)) && (_globals[kLadderBroken] == 0)) { } else if ((action->isAction(0x50, 0xC7, 0)) && (_globals[kLadderBroken] == 0)) {
if (_game._abortTimers == 0) { if (_game._trigger == 0) {
_vm->_sound->command(29); _vm->_sound->command(29);
_globals._v8425C = _scene->_frameStartTime; _globals._v8425C = _scene->_frameStartTime;
_game._player._visible = false; _game._player._visible = false;
@ -814,7 +814,7 @@ void Scene202::actions() {
_globals._spriteIndexes[23] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0); _globals._spriteIndexes[23] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
_scene->_sequences.setDepth(_globals._spriteIndexes[23], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[23], 1);
_scene->_sequences.addSubEntry(_globals._spriteIndexes[23], SM_0, 0, 1); _scene->_sequences.addSubEntry(_globals._spriteIndexes[23], SM_0, 0, 1);
} else if (_game._abortTimers == 1) { } else if (_game._trigger == 1) {
_globals._spriteIndexes[24] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1); _globals._spriteIndexes[24] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1);
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82)); _scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._spriteIndexes[24], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[24], 1);
@ -829,7 +829,7 @@ void Scene202::actions() {
} }
} else if (((action->isAction(0x3, 0x27, 0x82)) || (action->isAction(0x3, 0x27, 0x1B6))) && (_globals[kSexOfRex] == SEX_MALE)) { } else if (((action->isAction(0x3, 0x27, 0x82)) || (action->isAction(0x3, 0x27, 0x1B6))) && (_globals[kSexOfRex] == SEX_MALE)) {
if (!_ladderTopFl) { if (!_ladderTopFl) {
if (_game._abortTimers == 0) { if (_game._trigger == 0) {
_game._player._stepEnabled = false; _game._player._stepEnabled = false;
_game._player._visible= false; _game._player._visible= false;
_globals._spriteIndexes[25] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0); _globals._spriteIndexes[25] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
@ -838,7 +838,7 @@ void Scene202::actions() {
_scene->_sequences.setDepth(_globals._spriteIndexes[25], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[25], 1);
_scene->_sequences.updateTimeout(-1, _globals._spriteIndexes[25]); _scene->_sequences.updateTimeout(-1, _globals._spriteIndexes[25]);
_scene->_sequences.addSubEntry(_globals._spriteIndexes[25], SM_0, 0, 1); _scene->_sequences.addSubEntry(_globals._spriteIndexes[25], SM_0, 0, 1);
} else if (_game._abortTimers == 1) { } else if (_game._trigger == 1) {
_globals._spriteIndexes[25] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 6); _globals._spriteIndexes[25] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 6);
_scene->_sequences.setDepth(_globals._spriteIndexes[25], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[25], 1);
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[25], Common::Point(172, 123)); _scene->_sequences.setMsgPosition(_globals._spriteIndexes[25], Common::Point(172, 123));
@ -848,7 +848,7 @@ void Scene202::actions() {
} else { } else {
_scene->_sequences.addTimer(120, 2); _scene->_sequences.addTimer(120, 2);
} }
} else if (_game._abortTimers == 2) { } else if (_game._trigger == 2) {
if (!_scene->_activeAnimation && (_globals._abortVal == 0)) { if (!_scene->_activeAnimation && (_globals._abortVal == 0)) {
_vm->_dialogs->show(0x4EFE); _vm->_dialogs->show(0x4EFE);
} }
@ -858,7 +858,7 @@ void Scene202::actions() {
_scene->_sequences.setAnimRange(_globals._spriteIndexes[25], 1, 6); _scene->_sequences.setAnimRange(_globals._spriteIndexes[25], 1, 6);
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[25], Common::Point(172, 123)); _scene->_sequences.setMsgPosition(_globals._spriteIndexes[25], Common::Point(172, 123));
_scene->_sequences.addSubEntry(_globals._spriteIndexes[25], SM_0, 0, 3); _scene->_sequences.addSubEntry(_globals._spriteIndexes[25], SM_0, 0, 3);
} else if (_game._abortTimers == 3) { } else if (_game._trigger == 3) {
_scene->_sequences.updateTimeout(-1, _globals._spriteIndexes[25]); _scene->_sequences.updateTimeout(-1, _globals._spriteIndexes[25]);
_game._player._stepEnabled = true; _game._player._stepEnabled = true;
_game._player._visible = true; _game._player._visible = true;
@ -867,7 +867,7 @@ void Scene202::actions() {
return; return;
} }
} else { } else {
if (_game._abortTimers == 0) { if (_game._trigger == 0) {
_globals._v84268 = 1; _globals._v84268 = 1;
_game._player._stepEnabled = false; _game._player._stepEnabled = false;
_scene->_sequences.remove(_globals._spriteIndexes[24]); _scene->_sequences.remove(_globals._spriteIndexes[24]);
@ -875,7 +875,7 @@ void Scene202::actions() {
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82)); _scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._spriteIndexes[24], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[24], 1);
_scene->_sequences.addSubEntry(_globals._spriteIndexes[24], SM_0, 0, 1); _scene->_sequences.addSubEntry(_globals._spriteIndexes[24], SM_0, 0, 1);
} else if (_game._abortTimers == 1) { } else if (_game._trigger == 1) {
_globals._spriteIndexes[25] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, -2); _globals._spriteIndexes[25] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, -2);
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[25], Common::Point(247, 82)); _scene->_sequences.setMsgPosition(_globals._spriteIndexes[25], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._spriteIndexes[25], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[25], 1);
@ -897,7 +897,7 @@ void Scene202::actions() {
} else { } else {
_scene->_sequences.addTimer(120, 2); _scene->_sequences.addTimer(120, 2);
} }
} else if (_game._abortTimers == 2) { } else if (_game._trigger == 2) {
if (!_scene->_activeAnimation) if (!_scene->_activeAnimation)
_vm->_dialogs->show(0x4EFE); _vm->_dialogs->show(0x4EFE);
_globals._abortVal = 0; _globals._abortVal = 0;
@ -906,7 +906,7 @@ void Scene202::actions() {
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82)); _scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._spriteIndexes[24], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[24], 1);
_scene->_sequences.addSubEntry(_globals._spriteIndexes[24], SM_0, 0, 3); _scene->_sequences.addSubEntry(_globals._spriteIndexes[24], SM_0, 0, 3);
} else if (_game._abortTimers == 3) { } else if (_game._trigger == 3) {
_globals._spriteIndexes[24] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1); _globals._spriteIndexes[24] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1);
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82)); _scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._spriteIndexes[24], 1); _scene->_sequences.setDepth(_globals._spriteIndexes[24], 1);
@ -1024,7 +1024,7 @@ void Scene203::step() {
if (_globals._v0 == 0) if (_globals._v0 == 0)
return; return;
if ((_game._abortTimers == 0) && (_globals._frameTime != 0)) if ((_game._trigger == 0) && (_globals._frameTime != 0))
return; return;
if ((_game._player._playerPos != Common::Point(158, 136)) || (_game._player._facing != 2)) if ((_game._player._playerPos != Common::Point(158, 136)) || (_game._player._facing != 2))
@ -1032,7 +1032,7 @@ void Scene203::step() {
_globals._frameTime = 0xFFFF; _globals._frameTime = 0xFFFF;
if (_game._abortTimers == 0) { if (_game._trigger == 0) {
_game._player._visible = false; _game._player._visible = false;
_game._player._stepEnabled = false; _game._player._stepEnabled = false;
_vm->_palette->sub7BBF8(); _vm->_palette->sub7BBF8();
@ -1040,7 +1040,7 @@ void Scene203::step() {
_scene->resetScene(); _scene->resetScene();
_vm->_events->setCursor2(CURSOR_WAIT); _vm->_events->setCursor2(CURSOR_WAIT);
_scene->loadAnimation(Resources::formatName(203, 'a', -1, EXT_AA, ""), 81); _scene->loadAnimation(Resources::formatName(203, 'a', -1, EXT_AA, ""), 81);
} else if (_game._abortTimers == 81) { } else if (_game._trigger == 81) {
_scene->_nextSceneId = 208; _scene->_nextSceneId = 208;
_scene->_reloadSceneFlag = true; _scene->_reloadSceneFlag = true;
} }
@ -1257,13 +1257,13 @@ void Scene207::step() {
warning("TODO: sub3ADD6(...)"); warning("TODO: sub3ADD6(...)");
} }
if (_game._abortTimers == 70) { if (_game._trigger == 70) {
_globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 10, 0, 0, 0); _globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 10, 0, 0, 0);
_scene->_sequences.setAnimRange(_globals._spriteIndexes[21], 23, 34); _scene->_sequences.setAnimRange(_globals._spriteIndexes[21], 23, 34);
_scene->_sequences.setDepth(_globals._spriteIndexes[21], 6); _scene->_sequences.setDepth(_globals._spriteIndexes[21], 6);
} }
if (_game._abortTimers == 71) if (_game._trigger == 71)
_globals._v2 = 0; _globals._v2 = 0;
if (_globals._v2) if (_globals._v2)
@ -1419,21 +1419,21 @@ void Scene208::step() {
if ((_game._player._playerPos != Common::Point(20, 148)) || (_game._player._facing != 6)) if ((_game._player._playerPos != Common::Point(20, 148)) || (_game._player._facing != 6))
return; return;
if ((_game._abortTimers == 0) && ((_globals._frameTime & 0xFFFF) != 0)) if ((_game._trigger == 0) && ((_globals._frameTime & 0xFFFF) != 0))
return; return;
_globals._frameTime |= 0xFFFF; _globals._frameTime |= 0xFFFF;
if (_game._abortTimers == 82) { if (_game._trigger == 82) {
_game._player._stepEnabled = true; _game._player._stepEnabled = true;
return; return;
} }
if (_game._abortTimers > 82) if (_game._trigger > 82)
return; return;
if (_game._abortTimers & 0xFF) { if (_game._trigger & 0xFF) {
if ((_game._abortTimers & 0xFF) == 81) { if ((_game._trigger & 0xFF) == 81) {
_scene->_sequences.remove(_globals._spriteIndexes[15]); _scene->_sequences.remove(_globals._spriteIndexes[15]);
_globals[kRhotundaStatus] = 1; _globals[kRhotundaStatus] = 1;
warning("TODO: sub34648(...)"); warning("TODO: sub34648(...)");
@ -1459,20 +1459,20 @@ void Scene208::actions() {
if (_action.isAction(0x18C, 0x19F, 0)) { if (_action.isAction(0x18C, 0x19F, 0)) {
if (_globals[kRhotundaStatus]) if (_globals[kRhotundaStatus])
_scene->_nextSceneId = 203; _scene->_nextSceneId = 203;
else if (_game._abortTimers == 0) { else if (_game._trigger == 0) {
_game._player._stepEnabled = false; _game._player._stepEnabled = false;
int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, _game.getQuote(70)); int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, _game.getQuote(70));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true); _scene->_kernelMessages.setQuoted(msgIndex, 4, true);
} else if (_game._abortTimers == 1) { } else if (_game._trigger == 1) {
_scene->_nextSceneId = 203; _scene->_nextSceneId = 203;
} }
} else if (_action.isAction(0x18C, 0x83, 0)) { } else if (_action.isAction(0x18C, 0x83, 0)) {
_scene->_nextSceneId = 212; _scene->_nextSceneId = 212;
} else if (_action.isAction(0x4, 0x1AA, 0) && (!_globals[kLeavesStatus] || _game._abortTimers)) { } else if (_action.isAction(0x4, 0x1AA, 0) && (!_globals[kLeavesStatus] || _game._trigger)) {
warning("TODO: sub3B282(1);"); warning("TODO: sub3B282(1);");
if (_game._player._stepEnabled) if (_game._player._stepEnabled)
_vm->_dialogs->showPicture(OBJ_BIG_LEAVES, 0x326, 0); _vm->_dialogs->showPicture(OBJ_BIG_LEAVES, 0x326, 0);
} else if (_action.isAction(0x7, 0x23, 0x19E) && (_globals[kLeavesStatus] == 1 || _game._abortTimers)) { } else if (_action.isAction(0x7, 0x23, 0x19E) && (_globals[kLeavesStatus] == 1 || _game._trigger)) {
warning("TODO: sub3B282(2);"); warning("TODO: sub3B282(2);");
} else if (_action.isAction(0x7, 0x17A, 0x1A9)) { } else if (_action.isAction(0x7, 0x17A, 0x1A9)) {
warning("TODO: sub3B282(3);"); warning("TODO: sub3B282(3);");

View file

@ -181,7 +181,7 @@ void Scene804::step() {
_globals._v2 = 0; _globals._v2 = 0;
} }
if (_game._abortTimers == 70) if (_game._trigger == 70)
_globals._v5 = 42; _globals._v5 = 42;
if (_scene->_activeAnimation->getCurrentFrame() == 65) if (_scene->_activeAnimation->getCurrentFrame() == 65)
_scene->_sequences.remove(_globals._spriteIndexes[22]); _scene->_sequences.remove(_globals._spriteIndexes[22]);
@ -222,7 +222,7 @@ void Scene804::step() {
_scene->_sequences.addTimer(60, 80); _scene->_sequences.addTimer(60, 80);
} }
if (_game._abortTimers == 80) if (_game._trigger == 80)
_scene->_nextSceneId = 803; _scene->_nextSceneId = 803;
if (_scene->_activeAnimation->getCurrentFrame() == 7 && !_globals[kWindowFixed]) { if (_scene->_activeAnimation->getCurrentFrame() == 7 && !_globals[kWindowFixed]) {
@ -267,9 +267,9 @@ void Scene804::step() {
} }
} }
if (_game._abortTimers == 120) if (_game._trigger == 120)
_vm->_dialogs->show(0x13a26); _vm->_dialogs->show(0x13a26);
if (_game._abortTimers == 110) if (_game._trigger == 110)
_vm->_dialogs->show(0x13a2a); _vm->_dialogs->show(0x13a2a);
if (_globals._v6) { if (_globals._v6) {
@ -281,7 +281,7 @@ void Scene804::step() {
_globals._v5 = -1; _globals._v5 = -1;
} }
if (_game._abortTimers == 90) if (_game._trigger == 90)
_scene->_nextSceneId = 803; _scene->_nextSceneId = 803;
if (_scene->_activeAnimation->getCurrentFrame() == 7 &&!_globals._v8) { if (_scene->_activeAnimation->getCurrentFrame() == 7 &&!_globals._v8) {

View file

@ -46,6 +46,7 @@ Player::Player(MADSEngine *vm): _vm(vm) {
_priorVisible = false; _priorVisible = false;
_visible3 = false; _visible3 = false;
_loadsFirst = false; _loadsFirst = false;
_loadedFirst = false;
_walkAnywhere = false; _walkAnywhere = false;
_special = 0; _special = 0;
_ticksAmount = 0; _ticksAmount = 0;
@ -71,7 +72,7 @@ Player::Player(MADSEngine *vm): _vm(vm) {
Common::fill(&_spriteSetsPresent[0], &_spriteSetsPresent[PLAYER_SPRITES_FILE_COUNT], false); Common::fill(&_spriteSetsPresent[0], &_spriteSetsPresent[PLAYER_SPRITES_FILE_COUNT], false);
} }
void Player::reset() { void Player::cancelWalk() {
_action = &_vm->_game->_scene._action; _action = &_vm->_game->_scene._action;
_destPos = _playerPos; _destPos = _playerPos;
_targetFacing = FACING_NONE; _targetFacing = FACING_NONE;
@ -133,8 +134,8 @@ bool Player::loadSprites(const Common::String &prefix) {
} }
} }
void Player::turnToDestFacing() { void Player::setFinalFacing() {
if (_targetFacing != 5) if (_targetFacing != FACING_NONE)
_turnToFacing = _targetFacing; _turnToFacing = _targetFacing;
} }
@ -176,8 +177,8 @@ void Player::dirChanged() {
_priorTimer += 1; _priorTimer += 1;
} }
void Player::moveComplete() { void Player::cancelCommand() {
reset(); cancelWalk();
_action->_inProgress = false; _action->_inProgress = false;
} }
@ -365,7 +366,7 @@ void Player::setDest(const Common::Point &pt, Facing facing) {
void Player::startWalking(const Common::Point &pos, Facing direction) { void Player::startWalking(const Common::Point &pos, Facing direction) {
Scene &scene = _vm->_game->_scene; Scene &scene = _vm->_game->_scene;
reset(); cancelWalk();
scene._action._startWalkFlag = true; scene._action._startWalkFlag = true;
scene._action._walkFlag = true; scene._action._walkFlag = true;
scene._destPos = pos; scene._destPos = pos;
@ -406,7 +407,7 @@ void Player::move() {
// End of walking path // End of walking path
_routeCount = 0; _routeCount = 0;
_moving = false; _moving = false;
turnToDestFacing(); setFinalFacing();
routeFlag = true; routeFlag = true;
idx = _routeCount; idx = _routeCount;
} }
@ -475,7 +476,7 @@ void Player::move() {
_v8452E -= var1; _v8452E -= var1;
if (routeFlag) if (routeFlag)
moveComplete(); cancelCommand();
else { else {
if (!_newSceneId) { if (!_newSceneId) {
// If the move is complete, make sure the position is exactly on the given destination // If the move is complete, make sure the position is exactly on the given destination

View file

@ -64,8 +64,6 @@ private:
int _actionList2[12]; int _actionList2[12];
int _hypotenuse; int _hypotenuse;
void reset();
void resetActionList(); void resetActionList();
void move(); void move();
@ -121,6 +119,7 @@ public:
bool _walkAnywhere; bool _walkAnywhere;
int _frameNum; int _frameNum;
bool _loadsFirst; bool _loadsFirst;
bool _loadedFirst;
Common::Point _playerPos; Common::Point _playerPos;
Common::Point _destPos; Common::Point _destPos;
Common::Point _posChange; Common::Point _posChange;
@ -152,9 +151,21 @@ public:
*/ */
bool loadSprites(const Common::String &prefix); bool loadSprites(const Common::String &prefix);
void turnToDestFacing(); /**
* Called when the player has reached the given destination, start him
* turning to the specified facing
*/
void setFinalFacing();
void moveComplete(); /**
* Stops the player walking
*/
void cancelWalk();
/**
* Cancels any oustanding player action
*/
void cancelCommand();
void setupFrame(); void setupFrame();

View file

@ -275,7 +275,7 @@ void Scene::loop() {
// TODO: Verify correctness of frame wait // TODO: Verify correctness of frame wait
_vm->_events->waitForNextFrame(); _vm->_events->waitForNextFrame();
if (_vm->_dialogs->_pendingDialog != DIALOG_NONE && !_vm->_game->_abortTimers if (_vm->_dialogs->_pendingDialog != DIALOG_NONE && !_vm->_game->_trigger
&& _vm->_game->_player._stepEnabled) && _vm->_game->_player._stepEnabled)
_reloadSceneFlag = true; _reloadSceneFlag = true;
} }
@ -290,18 +290,18 @@ void Scene::doFrame() {
_action._selectedAction = 0; _action._selectedAction = 0;
} }
if (!_vm->_game->_abortTimers && !player._unk3) { if (!_vm->_game->_trigger && !player._unk3) {
// Refresh the dynamic hotspots if they've changed // Refresh the dynamic hotspots if they've changed
if (_dynamicHotspots._changed) if (_dynamicHotspots._changed)
_dynamicHotspots.refresh(); _dynamicHotspots.refresh();
// Check all on-screen visual objects // Check all on-screen visual objects
_vm->_game->_screenObjects.check(player._stepEnabled && !_action._startWalkFlag && _vm->_game->_screenObjects.check(player._stepEnabled && !_action._startWalkFlag &&
!_vm->_game->_abortTimers2); !_vm->_game->_fx);
} }
if (_action._selectedAction && player._stepEnabled && !_action._startWalkFlag && if (_action._selectedAction && player._stepEnabled && !_action._startWalkFlag &&
!_vm->_game->_abortTimers && !player._unk3) { !_vm->_game->_trigger && !player._unk3) {
_action.startAction(); _action.startAction();
if (_action._activeAction._verbId == Nebular::NOUN_LOOK_AT) { if (_action._activeAction._verbId == Nebular::NOUN_LOOK_AT) {
_action._activeAction._verbId = VERB_LOOK; _action._activeAction._verbId = VERB_LOOK;
@ -311,17 +311,17 @@ void Scene::doFrame() {
flag = true; flag = true;
} }
if (flag || (_vm->_game->_abortTimers && _vm->_game->_abortTimersMode == ABORTMODE_2)) { if (flag || (_vm->_game->_trigger && _vm->_game->_abortTimersMode == ABORTMODE_2)) {
doPreactions(); doPreactions();
} }
checkStartWalk(); checkStartWalk();
if (!_vm->_game->_abortTimers2) if (!_vm->_game->_fx)
_frameStartTime = _vm->_events->getFrameCounter(); _frameStartTime = _vm->_events->getFrameCounter();
if ((_action._inProgress && !player._moving && !_action._startWalkFlag && if ((_action._inProgress && !player._moving && !_action._startWalkFlag &&
player._turnToFacing == player._facing) || player._turnToFacing == player._facing) ||
(_vm->_game->_abortTimers && _vm->_game->_abortTimersMode == ABORTMODE_0)) { (_vm->_game->_trigger && _vm->_game->_abortTimersMode == ABORTMODE_0)) {
doAction(); doAction();
} }
@ -339,7 +339,7 @@ void Scene::doFrame() {
// Cursor update code // Cursor update code
updateCursor(); updateCursor();
if (!_vm->_game->_abortTimers) { if (!_vm->_game->_trigger) {
// Handle any active sequences // Handle any active sequences
_sequences.tick(); _sequences.tick();
@ -357,24 +357,24 @@ void Scene::doFrame() {
0x203, 0, 0, 1, msg); 0x203, 0, 0, 1, msg);
} }
if (!_vm->_game->_abortTimers) { if (!_vm->_game->_trigger) {
if (_reloadSceneFlag || _currentSceneId != _nextSceneId) if (_reloadSceneFlag || _currentSceneId != _nextSceneId)
_kernelMessages.reset(); _kernelMessages.reset();
_kernelMessages.update(); _kernelMessages.update();
} }
_userInterface._uiSlots.draw(_vm->_game->_abortTimers2 == 0, _userInterface._uiSlots.draw(_vm->_game->_fx == 0,
_vm->_game->_abortTimers2 != 0); _vm->_game->_fx != 0);
// Write any text needed by the interface // Write any text needed by the interface
if (_vm->_game->_abortTimers2) if (_vm->_game->_fx)
_userInterface.drawTextElements(); _userInterface.drawTextElements();
// Draw any elements // Draw any elements
drawElements((ScreenTransition)_vm->_game->_abortTimers2, _vm->_game->_abortTimers2); drawElements((ScreenTransition)_vm->_game->_fx, _vm->_game->_fx);
// Handle message updates // Handle message updates
if (_vm->_game->_abortTimers2) { if (_vm->_game->_fx) {
uint32 priorTime = _vm->_game->_priorFrameTimer; uint32 priorTime = _vm->_game->_priorFrameTimer;
uint32 newTime = _vm->_events->getFrameCounter(); uint32 newTime = _vm->_events->getFrameCounter();
_sequences.delay(newTime, priorTime); _sequences.delay(newTime, priorTime);
@ -390,9 +390,9 @@ void Scene::doFrame() {
} }
} }
if (_vm->_game->_abortTimers2) if (_vm->_game->_fx)
_animFlag = true; _animFlag = true;
_vm->_game->_abortTimers2 = 0; _vm->_game->_fx = kTransitionNone;
if (_freeAnimationFlag) { if (_freeAnimationFlag) {
_activeAnimation->free(); _activeAnimation->free();
@ -450,7 +450,7 @@ void Scene::doPreactions() {
_sceneLogic->preActions(); _sceneLogic->preActions();
if (_vm->_game->_abortTimersMode == ABORTMODE_2) if (_vm->_game->_abortTimersMode == ABORTMODE_2)
_vm->_game->_abortTimers = 0; _vm->_game->_trigger = 0;
} }
} }
@ -458,7 +458,7 @@ void Scene::doAction() {
int flag = 0; int flag = 0;
_vm->_game->_abortTimersMode2 = ABORTMODE_0; _vm->_game->_abortTimersMode2 = ABORTMODE_0;
if ((_action._inProgress || _vm->_game->_abortTimers) && !_action._v8453A) { if ((_action._inProgress || _vm->_game->_trigger) && !_action._v8453A) {
_sceneLogic->actions(); _sceneLogic->actions();
_action._inProgress = true; _action._inProgress = true;
flag = -1; flag = -1;
@ -467,14 +467,14 @@ void Scene::doAction() {
if (_vm->_game->_screenObjects._v832EC == 1) { if (_vm->_game->_screenObjects._v832EC == 1) {
_action._inProgress = false; _action._inProgress = false;
} else { } else {
if ((_action._inProgress || _vm->_game->_abortTimers) || if ((_action._inProgress || _vm->_game->_trigger) ||
(!flag && _action._v8453A == flag)) { (!flag && _action._v8453A == flag)) {
_vm->_game->_sectionHandler->sectionPtr2(); _vm->_game->_sectionHandler->sectionPtr2();
_action._inProgress = true; _action._inProgress = true;
flag = -1; flag = -1;
} }
if ((_action._inProgress || _vm->_game->_abortTimers) && (!flag || _action._v8453A == flag)) { if ((_action._inProgress || _vm->_game->_trigger) && (!flag || _action._v8453A == flag)) {
_vm->_game->doObjectAction(); _vm->_game->doObjectAction();
} }
@ -496,7 +496,7 @@ void Scene::doAction() {
_action._inProgress = false; _action._inProgress = false;
if (_vm->_game->_abortTimersMode == ABORTMODE_0) if (_vm->_game->_abortTimersMode == ABORTMODE_0)
_vm->_game->_abortTimers = 0; _vm->_game->_trigger = 0;
} }
void Scene::checkStartWalk() { void Scene::checkStartWalk() {
@ -515,7 +515,7 @@ void Scene::doSceneStep() {
_vm->_game->_player._unk3 = 0; _vm->_game->_player._unk3 = 0;
if (_vm->_game->_abortTimersMode == ABORTMODE_1) if (_vm->_game->_abortTimersMode == ABORTMODE_1)
_vm->_game->_abortTimers = 0; _vm->_game->_trigger = 0;
} }
void Scene::checkKeyboard() { void Scene::checkKeyboard() {
@ -537,7 +537,7 @@ void Scene::updateCursor() {
Player &player = _vm->_game->_player; Player &player = _vm->_game->_player;
CursorType cursorId = CURSOR_ARROW; CursorType cursorId = CURSOR_ARROW;
if (_action._v83338 == 1 && !_vm->_game->_screenObjects._v7FECA && if (_action._interAwaiting == 1 && !_vm->_game->_screenObjects._v7FECA &&
_vm->_game->_screenObjects._category == CAT_HOTSPOT) { _vm->_game->_screenObjects._category == CAT_HOTSPOT) {
int idx = _vm->_game->_screenObjects._selectedObject - int idx = _vm->_game->_screenObjects._selectedObject -
_userInterface._categoryIndexes[CAT_HOTSPOT - 1]; _userInterface._categoryIndexes[CAT_HOTSPOT - 1];

View file

@ -49,7 +49,7 @@ KernelMessage::KernelMessage() {
_frameTimer2 = 0; _frameTimer2 = 0;
_frameTimer = 0; _frameTimer = 0;
_timeout = 0; _timeout = 0;
_abortTimers = 0; _trigger = 0;
_abortMode = ABORTMODE_0; _abortMode = ABORTMODE_0;
_actionDetails._verbId = 0; _actionDetails._verbId = 0;
_actionDetails._objectNameId = 0; _actionDetails._objectNameId = 0;

View file

@ -303,7 +303,7 @@ void ScreenObjects::check(bool scanFlag) {
if (_vm->_easyMouse && _vm->_events->_mouseButtons && category != _category if (_vm->_easyMouse && _vm->_events->_mouseButtons && category != _category
&& scene._userInterface._category != CAT_NONE) { && scene._userInterface._category != CAT_NONE) {
_released = true; _released = true;
if (category >= CAT_ACTION && category <= CAT_TALK_ENTRY) { if (category >= CAT_COMMAND && category <= CAT_TALK_ENTRY) {
elementHighlighted(); elementHighlighted();
} }
@ -315,12 +315,12 @@ void ScreenObjects::check(bool scanFlag) {
scene._userInterface._category = _category; scene._userInterface._category = _category;
if (!_vm->_events->_mouseButtons || _vm->_easyMouse) { if (!_vm->_events->_mouseButtons || _vm->_easyMouse) {
if (userInterface._category >= CAT_ACTION && userInterface._category <= CAT_TALK_ENTRY) { if (userInterface._category >= CAT_COMMAND && userInterface._category <= CAT_TALK_ENTRY) {
elementHighlighted(); elementHighlighted();
} }
} }
if (_vm->_events->_mouseButtons || (_vm->_easyMouse && scene._action._v83338 > 1 if (_vm->_events->_mouseButtons || (_vm->_easyMouse && scene._action._interAwaiting > 1
&& scene._userInterface._category == CAT_INV_LIST) || && scene._userInterface._category == CAT_INV_LIST) ||
(_vm->_easyMouse && scene._userInterface._category == CAT_HOTSPOT)) { (_vm->_easyMouse && scene._userInterface._category == CAT_HOTSPOT)) {
scene._action.checkActionAtMousePos(); scene._action.checkActionAtMousePos();
@ -465,12 +465,12 @@ void ScreenObjects::elementHighlighted() {
int uiCount; int uiCount;
switch (userInterface._category) { switch (userInterface._category) {
case CAT_ACTION: case CAT_COMMAND:
index = 10; index = 10;
indexEnd = 9; indexEnd = 9;
varA = 5; varA = 5;
topIndex = 0; topIndex = 0;
idxP = !_v7FECA ? &userInterface._highlightedActionIndex : idxP = !_v7FECA ? &userInterface._highlightedCommandIndex :
&userInterface._selectedActionIndex; &userInterface._selectedActionIndex;
if (_v7FECA && userInterface._selectedItemVocabIdx >= 0) if (_v7FECA && userInterface._selectedItemVocabIdx >= 0)
@ -486,8 +486,8 @@ void ScreenObjects::elementHighlighted() {
indexEnd = invList.size() - 1; indexEnd = invList.size() - 1;
varA = 0; varA = 0;
topIndex = userInterface._inventoryTopIndex; topIndex = userInterface._inventoryTopIndex;
idxP = &userInterface._v1C; idxP = &userInterface._highlightedItemIndex;
var4 = (!_released || (_vm->_events->_mouseButtons && action._v83338 == 1)) ? 0 : 1; var4 = (!_released || (_vm->_events->_mouseButtons && action._interAwaiting == 1)) ? 0 : 1;
break; break;
case CAT_INV_VOCAB: case CAT_INV_VOCAB:
@ -502,10 +502,10 @@ void ScreenObjects::elementHighlighted() {
varA = 0; varA = 0;
topIndex = 0; topIndex = 0;
idxP = _v7FECA ? &userInterface._selectedItemVocabIdx : &userInterface._v1E; idxP = _v7FECA ? &userInterface._selectedItemVocabIdx : &userInterface._highlightedActionIndex;
if (_v7FECA && userInterface._selectedActionIndex >= 0) if (_v7FECA && userInterface._selectedActionIndex >= 0)
userInterface.updateSelection(CAT_ACTION, -1, &userInterface._selectedActionIndex); userInterface.updateSelection(CAT_COMMAND, -1, &userInterface._selectedActionIndex);
var4 = _released && !_v7FECA ? 1 : 0; var4 = _released && !_v7FECA ? 1 : 0;
break; break;
@ -529,7 +529,7 @@ void ScreenObjects::elementHighlighted() {
indexEnd = index - 1; indexEnd = index - 1;
varA = 0; varA = 0;
topIndex = 0; topIndex = 0;
idxP = &userInterface._highlightedActionIndex; idxP = &userInterface._highlightedCommandIndex;
var4 = -1; var4 = -1;
break; break;
@ -597,7 +597,7 @@ void ScreenObjects::elementHighlighted() {
_vm->_game->_scene._highlightedHotspot = newIndex; _vm->_game->_scene._highlightedHotspot = newIndex;
if (_category == CAT_INV_LIST || _category == CAT_INV_ANIM) { if (_category == CAT_INV_LIST || _category == CAT_INV_ANIM) {
if (action._v83338 == 1 && newIndex >= 0 && _released && if (action._interAwaiting == 1 && newIndex >= 0 && _released &&
(!_vm->_events->_mouseReleased || !_vm->_easyMouse)) (!_vm->_events->_mouseReleased || !_vm->_easyMouse))
newIndex = -1; newIndex = -1;
} }

View file

@ -33,7 +33,7 @@ namespace MADS {
#define MADS_SCREEN_HEIGHT 200 #define MADS_SCREEN_HEIGHT 200
enum ScrCategory { enum ScrCategory {
CAT_NONE = 0, CAT_ACTION = 1, CAT_INV_LIST = 2, CAT_INV_VOCAB = 3, CAT_NONE = 0, CAT_COMMAND = 1, CAT_INV_LIST = 2, CAT_INV_VOCAB = 3,
CAT_HOTSPOT = 4, CAT_INV_ANIM = 5, CAT_TALK_ENTRY = 6, CAT_INV_SCROLLER = 7, CAT_HOTSPOT = 4, CAT_INV_ANIM = 5, CAT_TALK_ENTRY = 6, CAT_INV_SCROLLER = 7,
CAT_12 = 12 CAT_12 = 12
}; };

View file

@ -327,7 +327,7 @@ bool SequenceList::loadSprites(int seqIndex) {
} }
if (idx >= 0) { if (idx >= 0) {
_vm->_game->_abortTimers = seqEntry._entries._abortVal[idx]; _vm->_game->_trigger = seqEntry._entries._abortVal[idx];
_vm->_game->_abortTimersMode = seqEntry._abortMode; _vm->_game->_abortTimersMode = seqEntry._abortMode;
if (seqEntry._abortMode == ABORTMODE_1) if (seqEntry._abortMode == ABORTMODE_1)
@ -343,7 +343,7 @@ bool SequenceList::loadSprites(int seqIndex) {
void SequenceList::tick() { void SequenceList::tick() {
Scene &scene = _vm->_game->_scene; Scene &scene = _vm->_game->_scene;
for (uint idx = 0; idx < _entries.size(); ++idx) { for (uint idx = 0; idx < _entries.size(); ++idx) {
if ((_vm->_game->_abortTimers2 == 0) && (_vm->_game->_abortTimers != 0)) if ((_vm->_game->_fx == 0) && (_vm->_game->_trigger != 0))
break; break;
SequenceEntry &seqEntry = _entries[idx]; SequenceEntry &seqEntry = _entries[idx];

View file

@ -199,9 +199,9 @@ UserInterface::UserInterface(MADSEngine *vm) : _vm(vm), _dirtyAreas(vm),
_selectedActionIndex = 0; _selectedActionIndex = 0;
_selectedItemVocabIdx = -1; _selectedItemVocabIdx = -1;
_scrollerY = 0; _scrollerY = 0;
_highlightedCommandIndex = -1;
_highlightedItemIndex = -1;
_highlightedActionIndex = -1; _highlightedActionIndex = -1;
_v1C = -1;
_v1E = -1;
_dirtyAreas.resize(50); _dirtyAreas.resize(50);
_inventoryChanged = false; _inventoryChanged = false;
Common::fill(&_categoryIndexes[0], &_categoryIndexes[7], 0); Common::fill(&_categoryIndexes[0], &_categoryIndexes[7], 0);
@ -265,9 +265,9 @@ void UserInterface::setup(int id) {
scene._userInterface._uiSlots.clear(); scene._userInterface._uiSlots.clear();
scene._userInterface._uiSlots.fullRefresh(); scene._userInterface._uiSlots.fullRefresh();
_vm->_game->_ticksExpiry = _vm->_events->getFrameCounter(); _vm->_game->_ticksExpiry = _vm->_events->getFrameCounter();
_highlightedCommandIndex = -1;
_highlightedActionIndex = -1; _highlightedActionIndex = -1;
_v1E = -1; _highlightedItemIndex = -1;
_v1C = -1;
if (_vm->_game->_kernelMode == KERNEL_ACTIVE_CODE) if (_vm->_game->_kernelMode == KERNEL_ACTIVE_CODE)
scene._userInterface._uiSlots.draw(false, false); scene._userInterface._uiSlots.draw(false, false);
@ -291,7 +291,7 @@ void UserInterface::drawTextElements() {
void UserInterface::drawActions() { void UserInterface::drawActions() {
for (int idx = 0; idx < 10; ++idx) { for (int idx = 0; idx < 10; ++idx) {
writeVocab(CAT_ACTION, idx); writeVocab(CAT_COMMAND, idx);
} }
} }
@ -329,10 +329,10 @@ void UserInterface::writeVocab(ScrCategory category, int id) {
int vocabId; int vocabId;
Common::String vocabStr; Common::String vocabStr;
switch (category) { switch (category) {
case CAT_ACTION: case CAT_COMMAND:
font = _vm->_font->getFont(FONT_INTERFACE); font = _vm->_font->getFont(FONT_INTERFACE);
vocabId = scene._verbList[id]._id; vocabId = scene._verbList[id]._id;
if (id == _highlightedActionIndex) { if (id == _highlightedCommandIndex) {
_vm->_font->setColorMode(SELMODE_HIGHLIGHTED); _vm->_font->setColorMode(SELMODE_HIGHLIGHTED);
} else { } else {
_vm->_font->setColorMode(id == _selectedActionIndex ? SELMODE_SELECTED : SELMODE_UNSELECTED); _vm->_font->setColorMode(id == _selectedActionIndex ? SELMODE_SELECTED : SELMODE_UNSELECTED);
@ -345,7 +345,7 @@ void UserInterface::writeVocab(ScrCategory category, int id) {
case CAT_INV_LIST: case CAT_INV_LIST:
font = _vm->_font->getFont(FONT_INTERFACE); font = _vm->_font->getFont(FONT_INTERFACE);
vocabId = _vm->_game->_objects.getItem(id)._descId; vocabId = _vm->_game->_objects.getItem(id)._descId;
if (id == _v1C) { if (id == _highlightedItemIndex) {
_vm->_font->setColorMode(SELMODE_HIGHLIGHTED); _vm->_font->setColorMode(SELMODE_HIGHLIGHTED);
} else { } else {
_vm->_font->setColorMode(id == _selectedInvIndex ? SELMODE_SELECTED : SELMODE_UNSELECTED); _vm->_font->setColorMode(id == _selectedInvIndex ? SELMODE_SELECTED : SELMODE_UNSELECTED);
@ -386,7 +386,7 @@ void UserInterface::writeVocab(ScrCategory category, int id) {
// Item specific verbs // Item specific verbs
font = _vm->_font->getFont(FONT_INTERFACE); font = _vm->_font->getFont(FONT_INTERFACE);
vocabId = _vm->_game->_objects.getItem(_selectedInvIndex)._vocabList[id]._vocabId; vocabId = _vm->_game->_objects.getItem(_selectedInvIndex)._vocabList[id]._vocabId;
if (id == _v1E) { if (id == _highlightedActionIndex) {
_vm->_font->setColorMode(SELMODE_HIGHLIGHTED); _vm->_font->setColorMode(SELMODE_HIGHLIGHTED);
} else { } else {
_vm->_font->setColorMode(id == _selectedInvIndex ? SELMODE_SELECTED : SELMODE_UNSELECTED); _vm->_font->setColorMode(id == _selectedInvIndex ? SELMODE_SELECTED : SELMODE_UNSELECTED);
@ -418,12 +418,12 @@ void UserInterface::loadElements() {
} }
// Set up actions // Set up actions
_categoryIndexes[CAT_ACTION - 1] = _vm->_game->_screenObjects.size() + 1; _categoryIndexes[CAT_COMMAND - 1] = _vm->_game->_screenObjects.size() + 1;
for (int idx = 0; idx < 10; ++idx) { for (int idx = 0; idx < 10; ++idx) {
getBounds(CAT_ACTION, idx, bounds); getBounds(CAT_COMMAND, idx, bounds);
moveRect(bounds); moveRect(bounds);
_vm->_game->_screenObjects.add(bounds, LAYER_GUI, CAT_ACTION, idx); _vm->_game->_screenObjects.add(bounds, LAYER_GUI, CAT_COMMAND, idx);
} }
// Set up inventory list // Set up inventory list
@ -478,7 +478,7 @@ bool UserInterface::getBounds(ScrCategory category, int v, Common::Rect &bounds)
int leftStart, yOffset, widthAmt; int leftStart, yOffset, widthAmt;
switch (category) { switch (category) {
case CAT_ACTION: case CAT_COMMAND:
heightMultiplier = v % 5; heightMultiplier = v % 5;
widthMultiplier = v / 5; widthMultiplier = v / 5;
leftStart = 2; leftStart = 2;
@ -635,7 +635,7 @@ void UserInterface::inventoryAnim() {
} }
void UserInterface::categoryChanged() { void UserInterface::categoryChanged() {
_v1C = -1; _highlightedItemIndex = -1;
_vm->_events->initVars(); _vm->_events->initVars();
_category = CAT_NONE; _category = CAT_NONE;
} }

View file

@ -143,9 +143,9 @@ public:
int _selectedActionIndex; int _selectedActionIndex;
int _selectedItemVocabIdx; int _selectedItemVocabIdx;
int _scrollerY; int _scrollerY;
int _highlightedCommandIndex;
int _highlightedItemIndex;
int _highlightedActionIndex; int _highlightedActionIndex;
int _v1C;
int _v1E;
bool _inventoryChanged; bool _inventoryChanged;
int _categoryIndexes[8]; int _categoryIndexes[8];
Common::StringArray _talkStrings; Common::StringArray _talkStrings;