MADS: Initial cleanup of action/player handling
This commit is contained in:
parent
377cbbe77d
commit
6c85572d76
20 changed files with 199 additions and 181 deletions
|
@ -47,7 +47,7 @@ MADSAction::MADSAction(MADSEngine *vm) : _vm(vm) {
|
|||
}
|
||||
|
||||
void MADSAction::clear() {
|
||||
_v83338 = 1;
|
||||
_interAwaiting = AWAITING_COMMAND;
|
||||
_actionMode = ACTIONMODE_NONE;
|
||||
_actionMode2 = ACTIONMODE2_0;
|
||||
_v86F42 = 0;
|
||||
|
@ -269,7 +269,7 @@ void MADSAction::startAction() {
|
|||
DynamicHotspots &dynHotspots = scene._dynamicHotspots;
|
||||
Hotspots &hotspots = scene._hotspots;
|
||||
|
||||
game._player.moveComplete();
|
||||
game._player.cancelCommand();
|
||||
|
||||
_inProgress = true;
|
||||
_v8453A = ABORTMODE_0;
|
||||
|
@ -354,12 +354,12 @@ void MADSAction::checkActionAtMousePos() {
|
|||
UserInterface &userInterface = scene._userInterface;
|
||||
ScreenObjects &screenObjects = _vm->_game->_screenObjects;
|
||||
|
||||
if ((userInterface._category == CAT_ACTION || userInterface._category == CAT_INV_VOCAB) &&
|
||||
_v83338 != 1 && scene._highlightedHotspot >= 0) {
|
||||
if ((userInterface._category == CAT_COMMAND || userInterface._category == CAT_INV_VOCAB) &&
|
||||
_interAwaiting != 1 && scene._highlightedHotspot >= 0) {
|
||||
if (_v86F4E == userInterface._category || _v86F4C != scene._highlightedHotspot ||
|
||||
(_v83338 != 2 && _v83338 != 3))
|
||||
(_interAwaiting != 2 && _interAwaiting != 3))
|
||||
clear();
|
||||
else if (_selectedRow != 0 || userInterface._category != CAT_ACTION)
|
||||
else if (_selectedRow != 0 || userInterface._category != CAT_COMMAND)
|
||||
scene._lookFlag = false;
|
||||
else
|
||||
scene._lookFlag = true;
|
||||
|
@ -367,19 +367,19 @@ void MADSAction::checkActionAtMousePos() {
|
|||
|
||||
if (screenObjects._v7FECA && _vm->_events->_mouseButtons) {
|
||||
switch (userInterface._category) {
|
||||
case CAT_ACTION:
|
||||
case CAT_COMMAND:
|
||||
case CAT_INV_VOCAB:
|
||||
return;
|
||||
|
||||
case CAT_INV_LIST:
|
||||
case CAT_TALK_ENTRY:
|
||||
if (_v83338 != 3) {
|
||||
if (_interAwaiting != 3) {
|
||||
if (userInterface._selectedActionIndex >= 0) {
|
||||
_actionMode = ACTIONMODE_VERB;
|
||||
_selectedRow = userInterface._selectedActionIndex;
|
||||
_flags1 = scene._verbList[_selectedRow]._action1;
|
||||
_flags2 = scene._verbList[_selectedRow]._action2;
|
||||
_v83338 = 2;
|
||||
_interAwaiting = AWAITING_THIS;
|
||||
} else if (userInterface._selectedItemVocabIdx >= 0) {
|
||||
_actionMode = ACTIONMODE_OBJECT;
|
||||
_selectedRow = userInterface._selectedItemVocabIdx;
|
||||
|
@ -393,20 +393,20 @@ void MADSAction::checkActionAtMousePos() {
|
|||
_articleNumber = _flags2;
|
||||
|
||||
if ((_flags1 == 1 && _flags2 == 0) || (_flags1 == 2 && _flags2 != 0))
|
||||
_v83338 = 4;
|
||||
_interAwaiting = AWAITING_RIGHT_MOUSE;
|
||||
else
|
||||
_v83338 = 3;
|
||||
_interAwaiting = AWAITING_THAT;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (_v83338) {
|
||||
switch (_interAwaiting) {
|
||||
case 1:
|
||||
_articleNumber = 0;
|
||||
switch (userInterface._category) {
|
||||
case CAT_ACTION:
|
||||
case CAT_COMMAND:
|
||||
_actionMode = ACTIONMODE_VERB;
|
||||
_selectedRow = scene._highlightedHotspot;
|
||||
if (_selectedRow >= 0) {
|
||||
|
@ -491,13 +491,13 @@ void MADSAction::leftClick() {
|
|||
ScreenObjects &screenObjects = _vm->_game->_screenObjects;
|
||||
bool abortFlag = false;
|
||||
|
||||
if ((userInterface._category == CAT_ACTION || userInterface._category == CAT_INV_VOCAB) &&
|
||||
_v83338 != 1 && scene._highlightedHotspot >= 0 &&
|
||||
if ((userInterface._category == CAT_COMMAND || userInterface._category == CAT_INV_VOCAB) &&
|
||||
_interAwaiting != 1 && scene._highlightedHotspot >= 0 &&
|
||||
_v86F4E == userInterface._category && _v86F4C == scene._highlightedHotspot &&
|
||||
(_v83338 == 2 || userInterface._category == CAT_INV_VOCAB)) {
|
||||
(_interAwaiting == 2 || userInterface._category == CAT_INV_VOCAB)) {
|
||||
abortFlag = true;
|
||||
if (_selectedRow == 0 && userInterface._category == CAT_ACTION) {
|
||||
_selectedAction = CAT_ACTION;
|
||||
if (_selectedRow == 0 && userInterface._category == CAT_COMMAND) {
|
||||
_selectedAction = CAT_COMMAND;
|
||||
scene._lookFlag = true;
|
||||
} else {
|
||||
_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)))
|
||||
return;
|
||||
|
||||
switch (_v83338) {
|
||||
case 1:
|
||||
switch (_interAwaiting) {
|
||||
case AWAITING_COMMAND:
|
||||
switch (userInterface._category) {
|
||||
case CAT_ACTION:
|
||||
case CAT_COMMAND:
|
||||
if (_selectedRow >= 0) {
|
||||
if (!_flags1) {
|
||||
_selectedAction = -1;
|
||||
|
@ -521,7 +521,7 @@ void MADSAction::leftClick() {
|
|||
else {
|
||||
_v86F4C = _selectedRow;
|
||||
_v86F4E = _actionMode;
|
||||
_v83338 = 2;
|
||||
_interAwaiting = AWAITING_THIS;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -536,7 +536,7 @@ void MADSAction::leftClick() {
|
|||
if (_selectedRow >= 0) {
|
||||
if (_flags1 != 1 || _flags2 != 0) {
|
||||
if (_flags1 != 2 || _flags2 == 0) {
|
||||
_v83338 = 3;
|
||||
_interAwaiting = AWAITING_THAT;
|
||||
_articleNumber = _flags2;
|
||||
}
|
||||
else {
|
||||
|
@ -560,7 +560,7 @@ void MADSAction::leftClick() {
|
|||
if (_vm->_events->currentPos().y < MADS_SCENE_HEIGHT) {
|
||||
scene._customDest = _vm->_events->currentPos() + scene._posAdjust;
|
||||
_selectedAction = -1;
|
||||
_v86F4A = -1;
|
||||
_v86F4A = true;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -574,7 +574,7 @@ void MADSAction::leftClick() {
|
|||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
case AWAITING_THIS:
|
||||
switch (userInterface._category) {
|
||||
case CAT_INV_LIST:
|
||||
case CAT_HOTSPOT:
|
||||
|
@ -582,7 +582,7 @@ void MADSAction::leftClick() {
|
|||
if (_hotspotId >= 0) {
|
||||
if (_flags2) {
|
||||
_articleNumber = _flags2;
|
||||
_v83338 = 3;
|
||||
_interAwaiting = AWAITING_THAT;
|
||||
}
|
||||
else {
|
||||
_selectedAction = -1;
|
||||
|
@ -599,7 +599,7 @@ void MADSAction::leftClick() {
|
|||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case AWAITING_THAT:
|
||||
switch (userInterface._category) {
|
||||
case CAT_INV_LIST:
|
||||
case CAT_HOTSPOT:
|
||||
|
|
|
@ -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 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 {
|
||||
VERB_NONE = 0,
|
||||
VERB_LOOK = 3,
|
||||
|
@ -98,7 +106,7 @@ public:
|
|||
int16 _v86F4E;
|
||||
bool _v86F4A;
|
||||
int16 _v86F4C;
|
||||
int _v83338;
|
||||
InterAwaiting _interAwaiting;
|
||||
bool _inProgress;
|
||||
int _v8453A;
|
||||
|
||||
|
|
|
@ -316,7 +316,7 @@ void Animation::startAnimation(int abortTimers) {
|
|||
_currentFrame = 0;
|
||||
_oldFrameEntry = 0;
|
||||
_nextFrameTimer = _vm->_game->_scene._frameStartTime;
|
||||
_abortTimers = abortTimers;
|
||||
_trigger = abortTimers;
|
||||
_abortTimersMode = _vm->_game->_abortTimersMode2;
|
||||
_vm->_game->_scene._action._activeAction = _actionDetails;
|
||||
|
||||
|
@ -530,8 +530,8 @@ void Animation::update() {
|
|||
_currentFrame++;
|
||||
if (_currentFrame >= (int)_miscEntries.size()) {
|
||||
// Animation is complete
|
||||
if (_abortTimers != 0) {
|
||||
_vm->_game->_abortTimers = _abortTimers;
|
||||
if (_trigger != 0) {
|
||||
_vm->_game->_trigger = _trigger;
|
||||
_vm->_game->_abortTimersMode = _abortTimersMode;
|
||||
|
||||
if (_abortTimersMode != ABORTMODE_1) {
|
||||
|
|
|
@ -128,7 +128,7 @@ private:
|
|||
uint32 _nextFrameTimer;
|
||||
uint32 _nextScrollTimer;
|
||||
int _messageCtr;
|
||||
int _abortTimers;
|
||||
int _trigger;
|
||||
AbortTimerMode _abortTimersMode;
|
||||
ActionDetails _actionDetails;
|
||||
|
||||
|
|
|
@ -54,7 +54,6 @@ Game::Game(MADSEngine *vm): _vm(vm), _surface(nullptr), _objects(vm),
|
|||
_quoteEmergency = false;
|
||||
_vocabEmergency = false;
|
||||
_aaName = "*I0.AA";
|
||||
_playerSpritesFlag = false;
|
||||
_priorFrameTimer = 0;
|
||||
_updateSceneFlag = false;
|
||||
_abortTimersMode = ABORTMODE_0;
|
||||
|
@ -191,7 +190,7 @@ void Game::sectionLoop() {
|
|||
if (!_player._spritesLoaded && _player._loadsFirst) {
|
||||
if (_player.loadSprites(""))
|
||||
_vm->quitGame();
|
||||
_playerSpritesFlag = true;
|
||||
_player._loadedFirst = true;
|
||||
}
|
||||
|
||||
_scene.loadScene(_scene._nextSceneId, _aaName, 0);
|
||||
|
@ -200,33 +199,33 @@ void Game::sectionLoop() {
|
|||
if (!_player._spritesLoaded) {
|
||||
if (_player.loadSprites(""))
|
||||
_vm->quitGame();
|
||||
_playerSpritesFlag = false;
|
||||
_player._loadedFirst = false;
|
||||
}
|
||||
|
||||
_vm->_events->initVars();
|
||||
_scene._userInterface._highlightedCommandIndex = -1;
|
||||
_scene._userInterface._highlightedItemIndex = -1;
|
||||
_scene._userInterface._highlightedActionIndex = -1;
|
||||
_scene._userInterface._v1C = -1;
|
||||
_scene._userInterface._v1E = -1;
|
||||
|
||||
_scene._action.clear();
|
||||
_player.turnToDestFacing();
|
||||
_player.setFinalFacing();
|
||||
_player._facing = _player._turnToFacing;
|
||||
_player.moveComplete();
|
||||
_player.cancelCommand();
|
||||
_kernelMode = KERNEL_ROOM_INIT;
|
||||
|
||||
switch (_vm->_screenFade) {
|
||||
case SCREEN_FADE_SMOOTH:
|
||||
_abortTimers2 = kTransitionFadeOutIn;
|
||||
_fx = kTransitionFadeOutIn;
|
||||
break;
|
||||
case SCREEN_FADE_FAST:
|
||||
_abortTimers2 = kCenterVertTransition;
|
||||
_fx = kCenterVertTransition;
|
||||
break;
|
||||
default:
|
||||
_abortTimers2 = kTransitionNone;
|
||||
_fx = kTransitionNone;
|
||||
break;
|
||||
}
|
||||
|
||||
_abortTimers = 0;
|
||||
_abortTimersMode2 = ABORTMODE_1;
|
||||
_trigger = 0;
|
||||
_priorFrameTimer = _scene._frameStartTime;
|
||||
|
||||
// Call the scene logic for entering the given scene
|
||||
|
@ -271,7 +270,7 @@ void Game::sectionLoop() {
|
|||
|
||||
warning("TODO: sub_1DD8C, sub_1DD7E");
|
||||
|
||||
if (!_playerSpritesFlag) {
|
||||
if (!_player._loadedFirst) {
|
||||
_player._spritesLoaded = false;
|
||||
_player._spritesChanged = true;
|
||||
}
|
||||
|
|
|
@ -78,7 +78,6 @@ protected:
|
|||
bool _quoteEmergency;
|
||||
bool _vocabEmergency;
|
||||
bool _updateSceneFlag;
|
||||
bool _playerSpritesFlag;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@ -133,8 +132,8 @@ public:
|
|||
Scene _scene;
|
||||
KernelMode _kernelMode;
|
||||
int _v2;
|
||||
int _abortTimers;
|
||||
int _abortTimers2;
|
||||
int _trigger;
|
||||
ScreenTransition _fx;
|
||||
AbortTimerMode _abortTimersMode;
|
||||
AbortTimerMode _abortTimersMode2;
|
||||
uint32 _priorFrameTimer;
|
||||
|
|
|
@ -74,7 +74,7 @@ int KernelMessages::add(const Common::Point &pt, uint fontColor, uint8 flags,
|
|||
rec._textDisplayIndex = -1;
|
||||
rec._timeout = timeout;
|
||||
rec._frameTimer = _vm->_game->_priorFrameTimer;
|
||||
rec._abortTimers = abortTimers;
|
||||
rec._trigger = abortTimers;
|
||||
rec._abortMode = _vm->_game->_abortTimersMode2;
|
||||
|
||||
rec._actionDetails = scene._action._activeAction;
|
||||
|
@ -143,7 +143,7 @@ void KernelMessages::reset() {
|
|||
void KernelMessages::update() {
|
||||
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];
|
||||
|
||||
if (((msg._flags & KMSG_ACTIVE) != 0) && (currentTimer >= msg._frameTimer))
|
||||
|
@ -173,10 +173,10 @@ void KernelMessages::processText(int msgIndex) {
|
|||
msg._timeout = 0;
|
||||
}
|
||||
|
||||
if ((msg._timeout <= 0) && (_vm->_game->_abortTimers == 0)) {
|
||||
if ((msg._timeout <= 0) && (_vm->_game->_trigger == 0)) {
|
||||
msg._flags |= KMSG_EXPIRE;
|
||||
if (msg._abortTimers != 0) {
|
||||
_vm->_game->_abortTimers = msg._abortTimers;
|
||||
if (msg._trigger != 0) {
|
||||
_vm->_game->_trigger = msg._trigger;
|
||||
_vm->_game->_abortTimersMode = msg._abortMode;
|
||||
|
||||
if (_vm->_game->_abortTimersMode != ABORTMODE_1) {
|
||||
|
|
|
@ -56,7 +56,7 @@ public:
|
|||
uint32 _frameTimer2;
|
||||
uint32 _frameTimer;
|
||||
uint32 _timeout;
|
||||
int _abortTimers;
|
||||
int _trigger;
|
||||
AbortTimerMode _abortMode;
|
||||
ActionDetails _actionDetails;
|
||||
Common::String _msg;
|
||||
|
|
|
@ -215,7 +215,7 @@ void Scene103::step() {
|
|||
Common::Point pt;
|
||||
int dist;
|
||||
|
||||
switch (_vm->_game->_abortTimers) {
|
||||
switch (_vm->_game->_trigger) {
|
||||
case 70:
|
||||
_vm->_game->_player._stepEnabled = true;
|
||||
break;
|
||||
|
@ -260,7 +260,7 @@ void Scene103::actions() {
|
|||
if (_action._savedFields._lookFlag) {
|
||||
_vm->_dialogs->show(10322);
|
||||
} else if (_action.isAction(395, 110, 0)) {
|
||||
switch (_vm->_game->_abortTimers) {
|
||||
switch (_vm->_game->_trigger) {
|
||||
case 0:
|
||||
_globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(
|
||||
_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)) {
|
||||
switch (_vm->_game->_abortTimers) {
|
||||
switch (_vm->_game->_trigger) {
|
||||
case 0:
|
||||
_scene->changeDepthSurface(1);
|
||||
_globals._spriteIndexes[28] = _scene->_sequences.startReverseCycle(
|
||||
|
@ -312,7 +312,7 @@ void Scene103::actions() {
|
|||
break;
|
||||
}
|
||||
} else if (_action.isAction(VERB_TAKE, 289, 0) && _game._objects.isInRoom(OBJ_REBREATHER)) {
|
||||
switch (_vm->_game->_abortTimers) {
|
||||
switch (_vm->_game->_trigger) {
|
||||
case 0:
|
||||
_scene->changeDepthSurface(1);
|
||||
_globals._spriteIndexes[27] = _scene->_sequences.startReverseCycle(
|
||||
|
@ -344,26 +344,26 @@ void Scene103::actions() {
|
|||
} else if (_action.isAction(VERB_LOOK, 362, 0)) {
|
||||
_vm->_dialogs->show(10301);
|
||||
} else if (_action.isAction(VERB_TAKE, 362, 0)) {
|
||||
if (!_vm->_game->_abortTimers)
|
||||
if (!_vm->_game->_trigger)
|
||||
_vm->_sound->command(31);
|
||||
|
||||
if (_vm->_game->_abortTimers2 < 2) {
|
||||
if (_vm->_game->_fx < 2) {
|
||||
_globals._spriteIndexes[24] = _scene->_sequences.addSpriteCycle(
|
||||
_globals._spriteIndexes[9], false, 6,
|
||||
_vm->_game->_abortTimers < 1 ? 1 : 0);
|
||||
if (_vm->_game->_abortTimers) {
|
||||
_vm->_game->_trigger < 1 ? 1 : 0);
|
||||
if (_vm->_game->_trigger) {
|
||||
_scene->_sequences.setAnimRange(_globals._spriteIndexes[24], -1, 0);
|
||||
Common::String msg = _game.getQuote(51);
|
||||
_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 {
|
||||
_scene->_sequences.addSubEntry(_globals._spriteIndexes[24],
|
||||
SM_0, 0, 1);
|
||||
}
|
||||
|
||||
_game._player._stepEnabled = _game._abortTimers == 2;
|
||||
_game._player._stepEnabled = _game._trigger == 2;
|
||||
_globals[kTurkeyExploded] = -1;
|
||||
if (_game._abortTimers == 2) {
|
||||
if (_game._trigger == 2) {
|
||||
_vm->_dialogs->show(1030);
|
||||
_scene->_hotspots.activate(362, false);
|
||||
}
|
||||
|
@ -372,7 +372,7 @@ void Scene103::actions() {
|
|||
_vm->_dialogs->show(!_globals[kTurkeyExploded] ? 10323 : 10303);
|
||||
}
|
||||
else if (_action.isAction(VERB_TALKTO, 27, 0)) {
|
||||
switch (_vm->_game->_abortTimers) {
|
||||
switch (_vm->_game->_trigger) {
|
||||
case 0: {
|
||||
_game._player._stepEnabled = false;
|
||||
Common::String msg = _game.getQuote(71);
|
||||
|
|
|
@ -218,7 +218,7 @@ void Scene201::step() {
|
|||
_pterodactylFlag = false;
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 70) {
|
||||
if (_game._trigger == 70) {
|
||||
_globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
|
||||
_game._player._visible = false;
|
||||
_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);
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 81) {
|
||||
if (_game._trigger == 81) {
|
||||
_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);
|
||||
_scene->_sequences.setAnimRange(_globals._spriteIndexes[22], -2, -2);
|
||||
_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);
|
||||
_scene->_sequences.setAnimRange(_globals._spriteIndexes[21], 17, -2);
|
||||
_scene->_sequences.addSubEntry(_globals._spriteIndexes[21], SM_0, 0, 74);
|
||||
_scene->_sequences.setDepth(_globals._spriteIndexes[21], 1);
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 74) {
|
||||
if (_game._trigger == 74) {
|
||||
_vm->_sound->command(40);
|
||||
|
||||
_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);
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 75) {
|
||||
if (_game._trigger == 75) {
|
||||
_globals[kMeteorologistEverSeen] = 0;
|
||||
_scene->_nextSceneId = 202;
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 76) {
|
||||
if (_game._trigger == 76) {
|
||||
_game._player._stepEnabled = true;
|
||||
_game._player._visible = true;
|
||||
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 77) {
|
||||
if (_game._trigger == 77) {
|
||||
_globals[kTeleporterCommand] = 1;
|
||||
_scene->_nextSceneId = _globals[kTeleporterDestination];
|
||||
_scene->_reloadSceneFlag = true;
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 78) {
|
||||
if (_game._trigger == 78) {
|
||||
_vm->_sound->command(40);
|
||||
_vm->_dialogs->show(0x4E92);
|
||||
_scene->_reloadSceneFlag = true;
|
||||
|
@ -288,12 +288,12 @@ void Scene201::actions() {
|
|||
if (action->isAction(0x18C, 0x83, 0))
|
||||
_scene->_nextSceneId = 202;
|
||||
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._visible = false;
|
||||
int sepChar = (_globals[kSexOfRex] == SEX_UNKNOWN) ? 't' : 'u';
|
||||
_scene->loadAnimation(formAnimName(sepChar, 0), 1);
|
||||
} else if (_game._abortTimers == 1) {
|
||||
} else if (_game._trigger == 1) {
|
||||
_scene->_nextSceneId = 213;
|
||||
}
|
||||
} else if (action->isAction(0x3, 0x1A6, 0)) {
|
||||
|
@ -474,10 +474,10 @@ void Scene202::step() {
|
|||
setRandomKernelMessage();
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 70)
|
||||
if (_game._trigger == 70)
|
||||
_activeMsgFl = false;
|
||||
|
||||
if (_game._abortTimers == 71) {
|
||||
if (_game._trigger == 71) {
|
||||
_vm->_sound->command(3);
|
||||
_vm->_sound->command(9);
|
||||
_globals._v8425C = 900 + _scene->_frameStartTime;
|
||||
|
@ -507,7 +507,7 @@ void Scene202::step() {
|
|||
_globals[kMeteorologistWatch] = 0;
|
||||
}
|
||||
|
||||
switch (_game._abortTimers) {
|
||||
switch (_game._trigger) {
|
||||
case 90:
|
||||
_vm->_sound->command(41);
|
||||
_scene->_sequences.remove(_globals._spriteIndexes[25]);
|
||||
|
@ -717,7 +717,7 @@ void Scene202::preActions() {
|
|||
_scene->_kernelMessages.reset();
|
||||
|
||||
if (!_ladderTopFl && (action->isAction(0x4E, 0xC7, 0) || !action->_walkFlag)) {
|
||||
if (_game._abortTimers == 0) {
|
||||
if (_game._trigger == 0) {
|
||||
_vm->_sound->command(29);
|
||||
action->_walkFlag = 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);
|
||||
_scene->_sequences.setDepth(_globals._spriteIndexes[23], 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]);
|
||||
warning("CHECKME: _scene->_dynamicHotspots.remove(_globals._frameTime);");
|
||||
_scene->_dynamicHotspots.remove(_globals._frameTime);
|
||||
|
@ -765,7 +765,7 @@ void Scene202::actions() {
|
|||
_scene->_nextSceneId = 201;
|
||||
} else if (action->isAction(0x4, 0x2C, 0)) {
|
||||
if (action->_actionMode2 == 4) {
|
||||
if (_game._abortTimers == 0) {
|
||||
if (_game._trigger == 0) {
|
||||
if (_game._objects.isInInventory(OBJ_BONES)) {
|
||||
_vm->_dialogs->show(0x4EFB);
|
||||
} 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_0, 0, 2);
|
||||
}
|
||||
} else if (_game._abortTimers == 1) {
|
||||
} else if (_game._trigger == 1) {
|
||||
if ((_game._player._playerPos.x == 132) && (_game._player._playerPos.y == 97)) {
|
||||
_scene->_sequences.remove(_globals._spriteIndexes[16]);
|
||||
_globals[kBone202Status] |= 1;
|
||||
|
@ -784,7 +784,7 @@ void Scene202::actions() {
|
|||
_scene->_sequences.remove(_globals._spriteIndexes[21]);
|
||||
_globals[kBone202Status] |= 2;
|
||||
}
|
||||
} else if (_game._abortTimers == 2) {
|
||||
} else if (_game._trigger == 2) {
|
||||
if (_game._objects.isInInventory(OBJ_BONE)) {
|
||||
_game._objects.removeFromInventory(OBJ_BONE, 1);
|
||||
_game._objects.addToInventory(OBJ_BONES);
|
||||
|
@ -802,7 +802,7 @@ void Scene202::actions() {
|
|||
}
|
||||
}
|
||||
} else if ((action->isAction(0x50, 0xC7, 0)) && (_globals[kLadderBroken] == 0)) {
|
||||
if (_game._abortTimers == 0) {
|
||||
if (_game._trigger == 0) {
|
||||
_vm->_sound->command(29);
|
||||
_globals._v8425C = _scene->_frameStartTime;
|
||||
_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);
|
||||
_scene->_sequences.setDepth(_globals._spriteIndexes[23], 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);
|
||||
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82));
|
||||
_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)) {
|
||||
if (!_ladderTopFl) {
|
||||
if (_game._abortTimers == 0) {
|
||||
if (_game._trigger == 0) {
|
||||
_game._player._stepEnabled = false;
|
||||
_game._player._visible= false;
|
||||
_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.updateTimeout(-1, _globals._spriteIndexes[25]);
|
||||
_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);
|
||||
_scene->_sequences.setDepth(_globals._spriteIndexes[25], 1);
|
||||
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[25], Common::Point(172, 123));
|
||||
|
@ -848,7 +848,7 @@ void Scene202::actions() {
|
|||
} else {
|
||||
_scene->_sequences.addTimer(120, 2);
|
||||
}
|
||||
} else if (_game._abortTimers == 2) {
|
||||
} else if (_game._trigger == 2) {
|
||||
if (!_scene->_activeAnimation && (_globals._abortVal == 0)) {
|
||||
_vm->_dialogs->show(0x4EFE);
|
||||
}
|
||||
|
@ -858,7 +858,7 @@ void Scene202::actions() {
|
|||
_scene->_sequences.setAnimRange(_globals._spriteIndexes[25], 1, 6);
|
||||
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[25], Common::Point(172, 123));
|
||||
_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]);
|
||||
_game._player._stepEnabled = true;
|
||||
_game._player._visible = true;
|
||||
|
@ -867,7 +867,7 @@ void Scene202::actions() {
|
|||
return;
|
||||
}
|
||||
} else {
|
||||
if (_game._abortTimers == 0) {
|
||||
if (_game._trigger == 0) {
|
||||
_globals._v84268 = 1;
|
||||
_game._player._stepEnabled = false;
|
||||
_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.setDepth(_globals._spriteIndexes[24], 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);
|
||||
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[25], Common::Point(247, 82));
|
||||
_scene->_sequences.setDepth(_globals._spriteIndexes[25], 1);
|
||||
|
@ -897,7 +897,7 @@ void Scene202::actions() {
|
|||
} else {
|
||||
_scene->_sequences.addTimer(120, 2);
|
||||
}
|
||||
} else if (_game._abortTimers == 2) {
|
||||
} else if (_game._trigger == 2) {
|
||||
if (!_scene->_activeAnimation)
|
||||
_vm->_dialogs->show(0x4EFE);
|
||||
_globals._abortVal = 0;
|
||||
|
@ -906,7 +906,7 @@ void Scene202::actions() {
|
|||
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82));
|
||||
_scene->_sequences.setDepth(_globals._spriteIndexes[24], 1);
|
||||
_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);
|
||||
_scene->_sequences.setMsgPosition(_globals._spriteIndexes[24], Common::Point(247, 82));
|
||||
_scene->_sequences.setDepth(_globals._spriteIndexes[24], 1);
|
||||
|
@ -1024,7 +1024,7 @@ void Scene203::step() {
|
|||
if (_globals._v0 == 0)
|
||||
return;
|
||||
|
||||
if ((_game._abortTimers == 0) && (_globals._frameTime != 0))
|
||||
if ((_game._trigger == 0) && (_globals._frameTime != 0))
|
||||
return;
|
||||
|
||||
if ((_game._player._playerPos != Common::Point(158, 136)) || (_game._player._facing != 2))
|
||||
|
@ -1032,7 +1032,7 @@ void Scene203::step() {
|
|||
|
||||
_globals._frameTime = 0xFFFF;
|
||||
|
||||
if (_game._abortTimers == 0) {
|
||||
if (_game._trigger == 0) {
|
||||
_game._player._visible = false;
|
||||
_game._player._stepEnabled = false;
|
||||
_vm->_palette->sub7BBF8();
|
||||
|
@ -1040,7 +1040,7 @@ void Scene203::step() {
|
|||
_scene->resetScene();
|
||||
_vm->_events->setCursor2(CURSOR_WAIT);
|
||||
_scene->loadAnimation(Resources::formatName(203, 'a', -1, EXT_AA, ""), 81);
|
||||
} else if (_game._abortTimers == 81) {
|
||||
} else if (_game._trigger == 81) {
|
||||
_scene->_nextSceneId = 208;
|
||||
_scene->_reloadSceneFlag = true;
|
||||
}
|
||||
|
@ -1257,13 +1257,13 @@ void Scene207::step() {
|
|||
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);
|
||||
_scene->_sequences.setAnimRange(_globals._spriteIndexes[21], 23, 34);
|
||||
_scene->_sequences.setDepth(_globals._spriteIndexes[21], 6);
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 71)
|
||||
if (_game._trigger == 71)
|
||||
_globals._v2 = 0;
|
||||
|
||||
if (_globals._v2)
|
||||
|
@ -1419,21 +1419,21 @@ void Scene208::step() {
|
|||
if ((_game._player._playerPos != Common::Point(20, 148)) || (_game._player._facing != 6))
|
||||
return;
|
||||
|
||||
if ((_game._abortTimers == 0) && ((_globals._frameTime & 0xFFFF) != 0))
|
||||
if ((_game._trigger == 0) && ((_globals._frameTime & 0xFFFF) != 0))
|
||||
return;
|
||||
|
||||
_globals._frameTime |= 0xFFFF;
|
||||
|
||||
if (_game._abortTimers == 82) {
|
||||
if (_game._trigger == 82) {
|
||||
_game._player._stepEnabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (_game._abortTimers > 82)
|
||||
if (_game._trigger > 82)
|
||||
return;
|
||||
|
||||
if (_game._abortTimers & 0xFF) {
|
||||
if ((_game._abortTimers & 0xFF) == 81) {
|
||||
if (_game._trigger & 0xFF) {
|
||||
if ((_game._trigger & 0xFF) == 81) {
|
||||
_scene->_sequences.remove(_globals._spriteIndexes[15]);
|
||||
_globals[kRhotundaStatus] = 1;
|
||||
warning("TODO: sub34648(...)");
|
||||
|
@ -1459,20 +1459,20 @@ void Scene208::actions() {
|
|||
if (_action.isAction(0x18C, 0x19F, 0)) {
|
||||
if (_globals[kRhotundaStatus])
|
||||
_scene->_nextSceneId = 203;
|
||||
else if (_game._abortTimers == 0) {
|
||||
else if (_game._trigger == 0) {
|
||||
_game._player._stepEnabled = false;
|
||||
int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, _game.getQuote(70));
|
||||
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
|
||||
} else if (_game._abortTimers == 1) {
|
||||
} else if (_game._trigger == 1) {
|
||||
_scene->_nextSceneId = 203;
|
||||
}
|
||||
} else if (_action.isAction(0x18C, 0x83, 0)) {
|
||||
_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);");
|
||||
if (_game._player._stepEnabled)
|
||||
_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);");
|
||||
} else if (_action.isAction(0x7, 0x17A, 0x1A9)) {
|
||||
warning("TODO: sub3B282(3);");
|
||||
|
|
|
@ -181,7 +181,7 @@ void Scene804::step() {
|
|||
_globals._v2 = 0;
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 70)
|
||||
if (_game._trigger == 70)
|
||||
_globals._v5 = 42;
|
||||
if (_scene->_activeAnimation->getCurrentFrame() == 65)
|
||||
_scene->_sequences.remove(_globals._spriteIndexes[22]);
|
||||
|
@ -222,7 +222,7 @@ void Scene804::step() {
|
|||
_scene->_sequences.addTimer(60, 80);
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 80)
|
||||
if (_game._trigger == 80)
|
||||
_scene->_nextSceneId = 803;
|
||||
|
||||
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);
|
||||
if (_game._abortTimers == 110)
|
||||
if (_game._trigger == 110)
|
||||
_vm->_dialogs->show(0x13a2a);
|
||||
|
||||
if (_globals._v6) {
|
||||
|
@ -281,7 +281,7 @@ void Scene804::step() {
|
|||
_globals._v5 = -1;
|
||||
}
|
||||
|
||||
if (_game._abortTimers == 90)
|
||||
if (_game._trigger == 90)
|
||||
_scene->_nextSceneId = 803;
|
||||
|
||||
if (_scene->_activeAnimation->getCurrentFrame() == 7 &&!_globals._v8) {
|
||||
|
|
|
@ -46,6 +46,7 @@ Player::Player(MADSEngine *vm): _vm(vm) {
|
|||
_priorVisible = false;
|
||||
_visible3 = false;
|
||||
_loadsFirst = false;
|
||||
_loadedFirst = false;
|
||||
_walkAnywhere = false;
|
||||
_special = 0;
|
||||
_ticksAmount = 0;
|
||||
|
@ -71,7 +72,7 @@ Player::Player(MADSEngine *vm): _vm(vm) {
|
|||
Common::fill(&_spriteSetsPresent[0], &_spriteSetsPresent[PLAYER_SPRITES_FILE_COUNT], false);
|
||||
}
|
||||
|
||||
void Player::reset() {
|
||||
void Player::cancelWalk() {
|
||||
_action = &_vm->_game->_scene._action;
|
||||
_destPos = _playerPos;
|
||||
_targetFacing = FACING_NONE;
|
||||
|
@ -133,8 +134,8 @@ bool Player::loadSprites(const Common::String &prefix) {
|
|||
}
|
||||
}
|
||||
|
||||
void Player::turnToDestFacing() {
|
||||
if (_targetFacing != 5)
|
||||
void Player::setFinalFacing() {
|
||||
if (_targetFacing != FACING_NONE)
|
||||
_turnToFacing = _targetFacing;
|
||||
}
|
||||
|
||||
|
@ -176,8 +177,8 @@ void Player::dirChanged() {
|
|||
_priorTimer += 1;
|
||||
}
|
||||
|
||||
void Player::moveComplete() {
|
||||
reset();
|
||||
void Player::cancelCommand() {
|
||||
cancelWalk();
|
||||
_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) {
|
||||
Scene &scene = _vm->_game->_scene;
|
||||
|
||||
reset();
|
||||
cancelWalk();
|
||||
scene._action._startWalkFlag = true;
|
||||
scene._action._walkFlag = true;
|
||||
scene._destPos = pos;
|
||||
|
@ -406,7 +407,7 @@ void Player::move() {
|
|||
// End of walking path
|
||||
_routeCount = 0;
|
||||
_moving = false;
|
||||
turnToDestFacing();
|
||||
setFinalFacing();
|
||||
routeFlag = true;
|
||||
idx = _routeCount;
|
||||
}
|
||||
|
@ -475,7 +476,7 @@ void Player::move() {
|
|||
_v8452E -= var1;
|
||||
|
||||
if (routeFlag)
|
||||
moveComplete();
|
||||
cancelCommand();
|
||||
else {
|
||||
if (!_newSceneId) {
|
||||
// If the move is complete, make sure the position is exactly on the given destination
|
||||
|
|
|
@ -64,8 +64,6 @@ private:
|
|||
int _actionList2[12];
|
||||
int _hypotenuse;
|
||||
|
||||
void reset();
|
||||
|
||||
void resetActionList();
|
||||
|
||||
void move();
|
||||
|
@ -121,6 +119,7 @@ public:
|
|||
bool _walkAnywhere;
|
||||
int _frameNum;
|
||||
bool _loadsFirst;
|
||||
bool _loadedFirst;
|
||||
Common::Point _playerPos;
|
||||
Common::Point _destPos;
|
||||
Common::Point _posChange;
|
||||
|
@ -152,9 +151,21 @@ public:
|
|||
*/
|
||||
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();
|
||||
|
||||
|
|
|
@ -275,7 +275,7 @@ void Scene::loop() {
|
|||
// TODO: Verify correctness of frame wait
|
||||
_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)
|
||||
_reloadSceneFlag = true;
|
||||
}
|
||||
|
@ -290,18 +290,18 @@ void Scene::doFrame() {
|
|||
_action._selectedAction = 0;
|
||||
}
|
||||
|
||||
if (!_vm->_game->_abortTimers && !player._unk3) {
|
||||
if (!_vm->_game->_trigger && !player._unk3) {
|
||||
// Refresh the dynamic hotspots if they've changed
|
||||
if (_dynamicHotspots._changed)
|
||||
_dynamicHotspots.refresh();
|
||||
|
||||
// Check all on-screen visual objects
|
||||
_vm->_game->_screenObjects.check(player._stepEnabled && !_action._startWalkFlag &&
|
||||
!_vm->_game->_abortTimers2);
|
||||
!_vm->_game->_fx);
|
||||
}
|
||||
|
||||
if (_action._selectedAction && player._stepEnabled && !_action._startWalkFlag &&
|
||||
!_vm->_game->_abortTimers && !player._unk3) {
|
||||
!_vm->_game->_trigger && !player._unk3) {
|
||||
_action.startAction();
|
||||
if (_action._activeAction._verbId == Nebular::NOUN_LOOK_AT) {
|
||||
_action._activeAction._verbId = VERB_LOOK;
|
||||
|
@ -311,17 +311,17 @@ void Scene::doFrame() {
|
|||
flag = true;
|
||||
}
|
||||
|
||||
if (flag || (_vm->_game->_abortTimers && _vm->_game->_abortTimersMode == ABORTMODE_2)) {
|
||||
if (flag || (_vm->_game->_trigger && _vm->_game->_abortTimersMode == ABORTMODE_2)) {
|
||||
doPreactions();
|
||||
}
|
||||
|
||||
checkStartWalk();
|
||||
if (!_vm->_game->_abortTimers2)
|
||||
if (!_vm->_game->_fx)
|
||||
_frameStartTime = _vm->_events->getFrameCounter();
|
||||
|
||||
if ((_action._inProgress && !player._moving && !_action._startWalkFlag &&
|
||||
player._turnToFacing == player._facing) ||
|
||||
(_vm->_game->_abortTimers && _vm->_game->_abortTimersMode == ABORTMODE_0)) {
|
||||
(_vm->_game->_trigger && _vm->_game->_abortTimersMode == ABORTMODE_0)) {
|
||||
doAction();
|
||||
}
|
||||
|
||||
|
@ -339,7 +339,7 @@ void Scene::doFrame() {
|
|||
// Cursor update code
|
||||
updateCursor();
|
||||
|
||||
if (!_vm->_game->_abortTimers) {
|
||||
if (!_vm->_game->_trigger) {
|
||||
// Handle any active sequences
|
||||
_sequences.tick();
|
||||
|
||||
|
@ -357,24 +357,24 @@ void Scene::doFrame() {
|
|||
0x203, 0, 0, 1, msg);
|
||||
}
|
||||
|
||||
if (!_vm->_game->_abortTimers) {
|
||||
if (!_vm->_game->_trigger) {
|
||||
if (_reloadSceneFlag || _currentSceneId != _nextSceneId)
|
||||
_kernelMessages.reset();
|
||||
_kernelMessages.update();
|
||||
}
|
||||
|
||||
_userInterface._uiSlots.draw(_vm->_game->_abortTimers2 == 0,
|
||||
_vm->_game->_abortTimers2 != 0);
|
||||
_userInterface._uiSlots.draw(_vm->_game->_fx == 0,
|
||||
_vm->_game->_fx != 0);
|
||||
|
||||
// Write any text needed by the interface
|
||||
if (_vm->_game->_abortTimers2)
|
||||
if (_vm->_game->_fx)
|
||||
_userInterface.drawTextElements();
|
||||
|
||||
// Draw any elements
|
||||
drawElements((ScreenTransition)_vm->_game->_abortTimers2, _vm->_game->_abortTimers2);
|
||||
drawElements((ScreenTransition)_vm->_game->_fx, _vm->_game->_fx);
|
||||
|
||||
// Handle message updates
|
||||
if (_vm->_game->_abortTimers2) {
|
||||
if (_vm->_game->_fx) {
|
||||
uint32 priorTime = _vm->_game->_priorFrameTimer;
|
||||
uint32 newTime = _vm->_events->getFrameCounter();
|
||||
_sequences.delay(newTime, priorTime);
|
||||
|
@ -390,9 +390,9 @@ void Scene::doFrame() {
|
|||
}
|
||||
}
|
||||
|
||||
if (_vm->_game->_abortTimers2)
|
||||
if (_vm->_game->_fx)
|
||||
_animFlag = true;
|
||||
_vm->_game->_abortTimers2 = 0;
|
||||
_vm->_game->_fx = kTransitionNone;
|
||||
|
||||
if (_freeAnimationFlag) {
|
||||
_activeAnimation->free();
|
||||
|
@ -450,7 +450,7 @@ void Scene::doPreactions() {
|
|||
_sceneLogic->preActions();
|
||||
|
||||
if (_vm->_game->_abortTimersMode == ABORTMODE_2)
|
||||
_vm->_game->_abortTimers = 0;
|
||||
_vm->_game->_trigger = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -458,7 +458,7 @@ void Scene::doAction() {
|
|||
int flag = 0;
|
||||
|
||||
_vm->_game->_abortTimersMode2 = ABORTMODE_0;
|
||||
if ((_action._inProgress || _vm->_game->_abortTimers) && !_action._v8453A) {
|
||||
if ((_action._inProgress || _vm->_game->_trigger) && !_action._v8453A) {
|
||||
_sceneLogic->actions();
|
||||
_action._inProgress = true;
|
||||
flag = -1;
|
||||
|
@ -467,14 +467,14 @@ void Scene::doAction() {
|
|||
if (_vm->_game->_screenObjects._v832EC == 1) {
|
||||
_action._inProgress = false;
|
||||
} else {
|
||||
if ((_action._inProgress || _vm->_game->_abortTimers) ||
|
||||
if ((_action._inProgress || _vm->_game->_trigger) ||
|
||||
(!flag && _action._v8453A == flag)) {
|
||||
_vm->_game->_sectionHandler->sectionPtr2();
|
||||
_action._inProgress = true;
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -496,7 +496,7 @@ void Scene::doAction() {
|
|||
|
||||
_action._inProgress = false;
|
||||
if (_vm->_game->_abortTimersMode == ABORTMODE_0)
|
||||
_vm->_game->_abortTimers = 0;
|
||||
_vm->_game->_trigger = 0;
|
||||
}
|
||||
|
||||
void Scene::checkStartWalk() {
|
||||
|
@ -515,7 +515,7 @@ void Scene::doSceneStep() {
|
|||
_vm->_game->_player._unk3 = 0;
|
||||
|
||||
if (_vm->_game->_abortTimersMode == ABORTMODE_1)
|
||||
_vm->_game->_abortTimers = 0;
|
||||
_vm->_game->_trigger = 0;
|
||||
}
|
||||
|
||||
void Scene::checkKeyboard() {
|
||||
|
@ -537,7 +537,7 @@ void Scene::updateCursor() {
|
|||
Player &player = _vm->_game->_player;
|
||||
|
||||
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) {
|
||||
int idx = _vm->_game->_screenObjects._selectedObject -
|
||||
_userInterface._categoryIndexes[CAT_HOTSPOT - 1];
|
||||
|
|
|
@ -49,7 +49,7 @@ KernelMessage::KernelMessage() {
|
|||
_frameTimer2 = 0;
|
||||
_frameTimer = 0;
|
||||
_timeout = 0;
|
||||
_abortTimers = 0;
|
||||
_trigger = 0;
|
||||
_abortMode = ABORTMODE_0;
|
||||
_actionDetails._verbId = 0;
|
||||
_actionDetails._objectNameId = 0;
|
||||
|
|
|
@ -303,7 +303,7 @@ void ScreenObjects::check(bool scanFlag) {
|
|||
if (_vm->_easyMouse && _vm->_events->_mouseButtons && category != _category
|
||||
&& scene._userInterface._category != CAT_NONE) {
|
||||
_released = true;
|
||||
if (category >= CAT_ACTION && category <= CAT_TALK_ENTRY) {
|
||||
if (category >= CAT_COMMAND && category <= CAT_TALK_ENTRY) {
|
||||
elementHighlighted();
|
||||
}
|
||||
|
||||
|
@ -315,12 +315,12 @@ void ScreenObjects::check(bool scanFlag) {
|
|||
scene._userInterface._category = _category;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
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) ||
|
||||
(_vm->_easyMouse && scene._userInterface._category == CAT_HOTSPOT)) {
|
||||
scene._action.checkActionAtMousePos();
|
||||
|
@ -465,12 +465,12 @@ void ScreenObjects::elementHighlighted() {
|
|||
int uiCount;
|
||||
|
||||
switch (userInterface._category) {
|
||||
case CAT_ACTION:
|
||||
case CAT_COMMAND:
|
||||
index = 10;
|
||||
indexEnd = 9;
|
||||
varA = 5;
|
||||
topIndex = 0;
|
||||
idxP = !_v7FECA ? &userInterface._highlightedActionIndex :
|
||||
idxP = !_v7FECA ? &userInterface._highlightedCommandIndex :
|
||||
&userInterface._selectedActionIndex;
|
||||
|
||||
if (_v7FECA && userInterface._selectedItemVocabIdx >= 0)
|
||||
|
@ -486,8 +486,8 @@ void ScreenObjects::elementHighlighted() {
|
|||
indexEnd = invList.size() - 1;
|
||||
varA = 0;
|
||||
topIndex = userInterface._inventoryTopIndex;
|
||||
idxP = &userInterface._v1C;
|
||||
var4 = (!_released || (_vm->_events->_mouseButtons && action._v83338 == 1)) ? 0 : 1;
|
||||
idxP = &userInterface._highlightedItemIndex;
|
||||
var4 = (!_released || (_vm->_events->_mouseButtons && action._interAwaiting == 1)) ? 0 : 1;
|
||||
break;
|
||||
|
||||
case CAT_INV_VOCAB:
|
||||
|
@ -502,10 +502,10 @@ void ScreenObjects::elementHighlighted() {
|
|||
|
||||
varA = 0;
|
||||
topIndex = 0;
|
||||
idxP = _v7FECA ? &userInterface._selectedItemVocabIdx : &userInterface._v1E;
|
||||
idxP = _v7FECA ? &userInterface._selectedItemVocabIdx : &userInterface._highlightedActionIndex;
|
||||
|
||||
if (_v7FECA && userInterface._selectedActionIndex >= 0)
|
||||
userInterface.updateSelection(CAT_ACTION, -1, &userInterface._selectedActionIndex);
|
||||
userInterface.updateSelection(CAT_COMMAND, -1, &userInterface._selectedActionIndex);
|
||||
|
||||
var4 = _released && !_v7FECA ? 1 : 0;
|
||||
break;
|
||||
|
@ -529,7 +529,7 @@ void ScreenObjects::elementHighlighted() {
|
|||
indexEnd = index - 1;
|
||||
varA = 0;
|
||||
topIndex = 0;
|
||||
idxP = &userInterface._highlightedActionIndex;
|
||||
idxP = &userInterface._highlightedCommandIndex;
|
||||
var4 = -1;
|
||||
break;
|
||||
|
||||
|
@ -597,7 +597,7 @@ void ScreenObjects::elementHighlighted() {
|
|||
_vm->_game->_scene._highlightedHotspot = newIndex;
|
||||
|
||||
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))
|
||||
newIndex = -1;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ namespace MADS {
|
|||
#define MADS_SCREEN_HEIGHT 200
|
||||
|
||||
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_12 = 12
|
||||
};
|
||||
|
|
|
@ -327,7 +327,7 @@ bool SequenceList::loadSprites(int seqIndex) {
|
|||
}
|
||||
|
||||
if (idx >= 0) {
|
||||
_vm->_game->_abortTimers = seqEntry._entries._abortVal[idx];
|
||||
_vm->_game->_trigger = seqEntry._entries._abortVal[idx];
|
||||
_vm->_game->_abortTimersMode = seqEntry._abortMode;
|
||||
|
||||
if (seqEntry._abortMode == ABORTMODE_1)
|
||||
|
@ -343,7 +343,7 @@ bool SequenceList::loadSprites(int seqIndex) {
|
|||
void SequenceList::tick() {
|
||||
Scene &scene = _vm->_game->_scene;
|
||||
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;
|
||||
|
||||
SequenceEntry &seqEntry = _entries[idx];
|
||||
|
|
|
@ -199,9 +199,9 @@ UserInterface::UserInterface(MADSEngine *vm) : _vm(vm), _dirtyAreas(vm),
|
|||
_selectedActionIndex = 0;
|
||||
_selectedItemVocabIdx = -1;
|
||||
_scrollerY = 0;
|
||||
_highlightedCommandIndex = -1;
|
||||
_highlightedItemIndex = -1;
|
||||
_highlightedActionIndex = -1;
|
||||
_v1C = -1;
|
||||
_v1E = -1;
|
||||
_dirtyAreas.resize(50);
|
||||
_inventoryChanged = false;
|
||||
Common::fill(&_categoryIndexes[0], &_categoryIndexes[7], 0);
|
||||
|
@ -265,9 +265,9 @@ void UserInterface::setup(int id) {
|
|||
scene._userInterface._uiSlots.clear();
|
||||
scene._userInterface._uiSlots.fullRefresh();
|
||||
_vm->_game->_ticksExpiry = _vm->_events->getFrameCounter();
|
||||
_highlightedCommandIndex = -1;
|
||||
_highlightedActionIndex = -1;
|
||||
_v1E = -1;
|
||||
_v1C = -1;
|
||||
_highlightedItemIndex = -1;
|
||||
|
||||
if (_vm->_game->_kernelMode == KERNEL_ACTIVE_CODE)
|
||||
scene._userInterface._uiSlots.draw(false, false);
|
||||
|
@ -291,7 +291,7 @@ void UserInterface::drawTextElements() {
|
|||
|
||||
void UserInterface::drawActions() {
|
||||
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;
|
||||
Common::String vocabStr;
|
||||
switch (category) {
|
||||
case CAT_ACTION:
|
||||
case CAT_COMMAND:
|
||||
font = _vm->_font->getFont(FONT_INTERFACE);
|
||||
vocabId = scene._verbList[id]._id;
|
||||
if (id == _highlightedActionIndex) {
|
||||
if (id == _highlightedCommandIndex) {
|
||||
_vm->_font->setColorMode(SELMODE_HIGHLIGHTED);
|
||||
} else {
|
||||
_vm->_font->setColorMode(id == _selectedActionIndex ? SELMODE_SELECTED : SELMODE_UNSELECTED);
|
||||
|
@ -345,7 +345,7 @@ void UserInterface::writeVocab(ScrCategory category, int id) {
|
|||
case CAT_INV_LIST:
|
||||
font = _vm->_font->getFont(FONT_INTERFACE);
|
||||
vocabId = _vm->_game->_objects.getItem(id)._descId;
|
||||
if (id == _v1C) {
|
||||
if (id == _highlightedItemIndex) {
|
||||
_vm->_font->setColorMode(SELMODE_HIGHLIGHTED);
|
||||
} else {
|
||||
_vm->_font->setColorMode(id == _selectedInvIndex ? SELMODE_SELECTED : SELMODE_UNSELECTED);
|
||||
|
@ -386,7 +386,7 @@ void UserInterface::writeVocab(ScrCategory category, int id) {
|
|||
// Item specific verbs
|
||||
font = _vm->_font->getFont(FONT_INTERFACE);
|
||||
vocabId = _vm->_game->_objects.getItem(_selectedInvIndex)._vocabList[id]._vocabId;
|
||||
if (id == _v1E) {
|
||||
if (id == _highlightedActionIndex) {
|
||||
_vm->_font->setColorMode(SELMODE_HIGHLIGHTED);
|
||||
} else {
|
||||
_vm->_font->setColorMode(id == _selectedInvIndex ? SELMODE_SELECTED : SELMODE_UNSELECTED);
|
||||
|
@ -418,12 +418,12 @@ void UserInterface::loadElements() {
|
|||
}
|
||||
|
||||
// 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) {
|
||||
getBounds(CAT_ACTION, idx, bounds);
|
||||
getBounds(CAT_COMMAND, idx, 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
|
||||
|
@ -478,7 +478,7 @@ bool UserInterface::getBounds(ScrCategory category, int v, Common::Rect &bounds)
|
|||
int leftStart, yOffset, widthAmt;
|
||||
|
||||
switch (category) {
|
||||
case CAT_ACTION:
|
||||
case CAT_COMMAND:
|
||||
heightMultiplier = v % 5;
|
||||
widthMultiplier = v / 5;
|
||||
leftStart = 2;
|
||||
|
@ -635,7 +635,7 @@ void UserInterface::inventoryAnim() {
|
|||
}
|
||||
|
||||
void UserInterface::categoryChanged() {
|
||||
_v1C = -1;
|
||||
_highlightedItemIndex = -1;
|
||||
_vm->_events->initVars();
|
||||
_category = CAT_NONE;
|
||||
}
|
||||
|
|
|
@ -143,9 +143,9 @@ public:
|
|||
int _selectedActionIndex;
|
||||
int _selectedItemVocabIdx;
|
||||
int _scrollerY;
|
||||
int _highlightedCommandIndex;
|
||||
int _highlightedItemIndex;
|
||||
int _highlightedActionIndex;
|
||||
int _v1C;
|
||||
int _v1E;
|
||||
bool _inventoryChanged;
|
||||
int _categoryIndexes[8];
|
||||
Common::StringArray _talkStrings;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue