From 02df998be90158d6d603f0cf3d337787f1014b1c Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Thu, 15 May 2014 11:13:46 +0300 Subject: MADS: Bugfixes and cleanup for scene 202 --- engines/mads/nebular/nebular_scenes.cpp | 14 ++-- engines/mads/nebular/nebular_scenes.h | 2 + engines/mads/nebular/nebular_scenes2.cpp | 122 +++++++++++++++---------------- engines/mads/nebular/nebular_scenes2.h | 2 +- 4 files changed, 70 insertions(+), 70 deletions(-) (limited to 'engines') diff --git a/engines/mads/nebular/nebular_scenes.cpp b/engines/mads/nebular/nebular_scenes.cpp index 64511a39d9..df193262e0 100644 --- a/engines/mads/nebular/nebular_scenes.cpp +++ b/engines/mads/nebular/nebular_scenes.cpp @@ -425,7 +425,7 @@ void SceneTeleporter::teleporterHandleKey() { _scene->_sequences.addSubEntry(_handSequenceId, SEQUENCE_TRIGGER_LOOP, 0, 1); _scene->_sequences.addSubEntry(_handSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 2); - if (_globals[kMeteorologistWatch] == 0) + if (_globals[kMeteorologistWatch] == METEOROLOGIST_NORMAL) _vm->_events->hideCursor(); } @@ -477,7 +477,7 @@ void SceneTeleporter::teleporterHandleKey() { if (_finishedCodeCounter == 1) { _finishedCodeCounter++; - if (_globals[kMeteorologistWatch] != 0) + if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) _scene->_nextSceneId = 202; else { _vm->_events->showCursor(); @@ -492,14 +492,14 @@ void SceneTeleporter::teleporterHandleKey() { _scene->_nextSceneId = _teleporterSceneId; } } - } else if (_globals[kMeteorologistWatch] != 0) + } else if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) _scene->_sequences.addTimer(30, 230 + _meteorologistCurPlace); break; case 3: if (!_finishedCodeCounter) { - if (_globals[kMeteorologistWatch] == 0) { + if (_globals[kMeteorologistWatch] == METEOROLOGIST_NORMAL) { _game._player._stepEnabled = true; _vm->_events->showCursor(); } @@ -513,7 +513,7 @@ void SceneTeleporter::teleporterHandleKey() { void SceneTeleporter::teleporterEnter() { _game._player._visible = false; - _game._player._stepEnabled = (_globals[kMeteorologistWatch] == 0); + _game._player._stepEnabled = (_globals[kMeteorologistWatch] == METEOROLOGIST_NORMAL); _scene->_kernelMessages._talkFont = _vm->_font->getFont(FONT_TELE); _scene->_textSpacing = 0; _curCode = 0; @@ -553,7 +553,7 @@ void SceneTeleporter::teleporterEnter() { _meteorologistCurPlace = 0; - if (_globals[kMeteorologistWatch] != 0) + if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) _scene->_sequences.addTimer(30, 230); _vm->_sound->command(36); @@ -582,7 +582,7 @@ bool SceneTeleporter::teleporterActions() { } void SceneTeleporter::teleporterStep() { - if ((_globals[kMeteorologistWatch] != 0) && (_game._trigger >= 230)) { + if ((_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) && (_game._trigger >= 230)) { int place = _game._trigger - 230; int digit; diff --git a/engines/mads/nebular/nebular_scenes.h b/engines/mads/nebular/nebular_scenes.h index 3534613431..60526f7115 100644 --- a/engines/mads/nebular/nebular_scenes.h +++ b/engines/mads/nebular/nebular_scenes.h @@ -66,6 +66,7 @@ enum Verb { enum Noun { NOUN_BIG_LEAVES = 0x23, + NOUN_BINOCULARS = 0x27, NOUN_BLOWGUN = 0x29, NOUN_BOMB = 0x2A, NOUN_BOMBS = 0x2B, @@ -109,6 +110,7 @@ enum Noun { NOUN_HUGE_LEGS = 0x1A8, NOUN_LEAF_COVERED_PIT = 0x1A9, NOUN_PILE_OF_LEAVES = 0x1AA, + NOUN_STRANGE_DEVICE = 0x1B6, NOUN_CAPTIVE_CREATURE = 0x1C3, NOUN_NATIVE_WOMAN = 0x1DC, NOUN_PLATFORM = 0x22C, diff --git a/engines/mads/nebular/nebular_scenes2.cpp b/engines/mads/nebular/nebular_scenes2.cpp index 39437045f7..b38aaceec1 100644 --- a/engines/mads/nebular/nebular_scenes2.cpp +++ b/engines/mads/nebular/nebular_scenes2.cpp @@ -99,7 +99,7 @@ void Scene2xx::sceneEntrySound() { _vm->_sound->command(10); break; case 213: - if (_globals[kMeteorologistWatch] == 0) + if (_globals[kMeteorologistWatch] == METEOROLOGIST_NORMAL) _vm->_sound->command(1); else _vm->_sound->command(9); @@ -419,26 +419,23 @@ void Scene202::enter() { if (_scene->_roomChanged) _game._objects.addToInventory(OBJ_BINOCULARS); - if (_globals[kMeteorologistWatch]) { + if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) { _game._player._visible = false; _game._player._stepEnabled = false; - if (_globals[kMeteorologistWatch] == 2) - _ladderTopFl = true; - else - _ladderTopFl = false; - - if (_globals[kMeteorologistWatch] < 1) - _globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 6); - else - _globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 8); - _scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1); + _ladderTopFl = (_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER); if (_ladderTopFl) { + _globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 8); + _scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1); + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[10], Common::Point(247, 82)); _game._player._playerPos = Common::Point(246, 124); _game._player._facing = FACING_NORTH; _globals[kTeleporterUnderstood] = true; } else { + _globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 6); + _scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1); + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[10], Common::Point(172, 123)); _game._player._playerPos = Common::Point(171, 122); _game._player._facing = FACING_NORTH; @@ -447,15 +444,17 @@ void Scene202::enter() { _scene->loadAnimation(formAnimName('M', -1), 71); _scene->_activeAnimation->setCurrentFrame(200); } else { - _game._player._visible = false; - _scene->_sequences.startCycle(_globals._sequenceIndexes[9], true, 1); - _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1); - _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[9], Common::Point(247, 82)); - _game._player._playerPos = Common::Point(246, 124); - _game._player._facing = FACING_NORTH; + if (_ladderTopFl) { + _game._player._visible = false; + _scene->_sequences.startCycle(_globals._sequenceIndexes[9], true, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1); + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[9], Common::Point(247, 82)); + _game._player._playerPos = Common::Point(246, 124); + _game._player._facing = FACING_NORTH; + } } - _meteorologistSpecial = 0; + _meteorologistSpecial = false; } void Scene202::setRandomKernelMessage() { @@ -480,30 +479,35 @@ void Scene202::step() { if (_game._trigger == 71) { _vm->_sound->command(3); _vm->_sound->command(9); - _meteoClock1 = 900 + _scene->_frameStartTime; - Common::Point msgPos; - int msgFlag; - if (!_ladderTopFl) { - msgPos = Common::Point(0, 0); - msgFlag = 2; - } else { - msgPos = Common::Point(248, 15); - msgFlag = 0; - } - int msgIndex = _scene->_kernelMessages.add(msgPos, 0x1110, msgFlag | 32, 0, 120, _game.getQuote(102)); - _scene->_kernelMessages.setQuoted(msgIndex, 4, true); - if (_globals[kMeteorologistWatch] == 1) { - _action._activeAction._verbId = VERB_LOOK; - _action._activeAction._objectNameId = 39; - _action._activeAction._indirectObjectId = 438; - _game._triggerSetupMode = SEQUENCE_TRIGGER_PARSER; - _scene->_sequences.addTimer(120, 2); - _meteorologistSpecial = -1; - } else if (_globals[kMeteorologistWatch] == 2) { - _scene->_sequences.addTimer(120, 90); + _meteoClock1 = _scene->_frameStartTime + 15 * 60; + + if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) { + Common::Point msgPos; + int msgFlag; + if (!_ladderTopFl) { + msgPos = Common::Point(0, 0); + msgFlag = 2; + } else { + msgPos = Common::Point(248, 15); + msgFlag = 0; + } + int msgIndex = _scene->_kernelMessages.add(msgPos, 0x1110, msgFlag | 32, 0, 120, _game.getQuote(102)); + _scene->_kernelMessages.setQuoted(msgIndex, 4, true); + + if (_globals[kMeteorologistWatch] == METEOROLOGIST_GROUND) { + _action._activeAction._verbId = VERB_LOOK; + _action._activeAction._objectNameId = NOUN_BINOCULARS; + _action._activeAction._indirectObjectId = NOUN_STRANGE_DEVICE; + _game._triggerSetupMode = SEQUENCE_TRIGGER_PARSER; + _scene->_sequences.addTimer(2 * 60, 2); + _meteorologistSpecial = true; + } else if (_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER) { + _scene->_sequences.addTimer(2 * 60, 90); + } } - _globals[kMeteorologistWatch] = 0; + + _globals[kMeteorologistWatch] = METEOROLOGIST_NORMAL; } switch (_game._trigger) { @@ -550,7 +554,7 @@ void Scene202::step() { break; } - if (!_scene->_activeAnimation && (_globals[kMeteorologistStatus] != 2) && (_meteoClock2 <= _scene->_frameStartTime) && (_meteoClock1 <= _scene->_frameStartTime)) { + if (!_scene->_activeAnimation && (_globals[kMeteorologistStatus] != METEOROLOGIST_GONE) && (_meteoClock2 <= _scene->_frameStartTime) && (_meteoClock1 <= _scene->_frameStartTime)) { int randVal = _vm->getRandomNumber(1, 500); int threshold = 1; if (_ladderTopFl) @@ -574,10 +578,10 @@ void Scene202::step() { if (_waitingMeteoFl) { if (_scene->_activeAnimation->getCurrentFrame() >= 200) { - if ((_globals[kMeteorologistWatch] == 2) || _globals[kLadderBroken]) { + if ((_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER) || _globals[kLadderBroken]) { _scene->_nextSceneId = 213; } else { - _vm->_dialogs->show(0x4EE9); + _vm->_dialogs->show(20201); _scene->_reloadSceneFlag = true; } } @@ -597,7 +601,7 @@ void Scene202::step() { } } - if (_meteoClock2 + 7200 <= _scene->_frameStartTime) { + if (_meteoClock2 + 120 * 60 <= _scene->_frameStartTime) { _toTeleportFl = true; } @@ -613,10 +617,12 @@ void Scene202::step() { case 42: case 77: case 96: + _stationCounter = 0; frameStep = subStep1(randVal); break; case 51: case 74: + _toStationFl = false; frameStep = subStep2(randVal); break; case 27: @@ -645,19 +651,13 @@ void Scene202::step() { break; } - if (frameStep < 0) - return; - - int nextFrame = 1 + _scene->_activeAnimation->getCurrentFrame() - frameStep; - if (nextFrame) { - _scene->_activeAnimation->setCurrentFrame(nextFrame); - _meteoFrame = nextFrame; + if (frameStep >= 0 && frameStep != _scene->_activeAnimation->getCurrentFrame() + 1) { + _scene->_activeAnimation->setCurrentFrame(frameStep); + _meteoFrame = frameStep; } } int Scene202::subStep1(int randVal) { - _stationCounter = 0; - if ((randVal <= 100) || _toStationFl) return 42; @@ -671,8 +671,6 @@ int Scene202::subStep1(int randVal) { } int Scene202::subStep2(int randVal) { - _toStationFl = false; - if ((randVal <= 150) && (_stationCounter < 5)) return 51; @@ -849,7 +847,7 @@ void Scene202::actions() { _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[10], Common::Point(172, 123)); if (_scene->_activeAnimation) { _waitingMeteoFl = true; - _globals[kMeteorologistWatch] = 1; + _globals[kMeteorologistWatch] = METEOROLOGIST_GROUND; } else { _scene->_sequences.addTimer(120, 2); } @@ -894,7 +892,7 @@ void Scene202::actions() { _scene->_sequences.addTimer(120, 2); } else { _waitingMeteoFl = true; - _globals[kMeteorologistWatch] = 2; + _globals[kMeteorologistWatch] = METEOROLOGIST_GONE; if ((_scene->_activeAnimation->getCurrentFrame() >= 44) && (_scene->_activeAnimation->getCurrentFrame() <= 75)) { _scene->_kernelMessages.reset(); int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, _game.getQuote(100)); @@ -911,7 +909,7 @@ void Scene202::actions() { case 2: if (!_scene->_activeAnimation) _vm->_dialogs->show(0x4EFE); - _meteorologistSpecial = 0; + _meteorologistSpecial = false; _scene->_sequences.remove(_globals._sequenceIndexes[10]); _globals._sequenceIndexes[9] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0); _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[9], Common::Point(247, 82)); @@ -1000,7 +998,7 @@ void Scene202::synchronize(Common::Serializer &s) { s.syncAsUint32LE(_meteoClock2); s.syncAsUint32LE(_startTime); - s.syncAsSint32LE(_meteorologistSpecial); + s.syncAsByte(_meteorologistSpecial); } /*****************************************************************************/ @@ -4863,7 +4861,7 @@ void Scene213::setup() { } void Scene213::enter() { - if (_globals[kMeteorologistWatch] != 0) + if (_globals[kMeteorologistWatch] != METEOROLOGIST_ABSENT) _handSpriteId = _scene->_sprites.addSprites("*METHAND"); else if (_globals[kSexOfRex] == REX_MALE) _handSpriteId = _scene->_sprites.addSprites("*REXHAND"); @@ -4874,7 +4872,7 @@ void Scene213::enter() { // The original is calling Scene2xx::sceneEntrySound() if (_vm->_musicFlag) { - if (_globals[kMeteorologistWatch] == 0) + if (_globals[kMeteorologistWatch] == METEOROLOGIST_ABSENT) _vm->_sound->command(1); else _vm->_sound->command(9); diff --git a/engines/mads/nebular/nebular_scenes2.h b/engines/mads/nebular/nebular_scenes2.h index 14a5d75d34..b4f4866b6b 100644 --- a/engines/mads/nebular/nebular_scenes2.h +++ b/engines/mads/nebular/nebular_scenes2.h @@ -67,7 +67,7 @@ private: bool _activeMsgFl, _ladderTopFl, _waitingMeteoFl, _toStationFl, _toTeleportFl; int _ladderHotspotId, _lastRoute, _stationCounter, _meteoFrame; uint32 _meteoClock1, _meteoClock2, _startTime; - int _meteorologistSpecial; + bool _meteorologistSpecial; int subStep1(int randVal); int subStep2(int randVal); -- cgit v1.2.3