diff options
author | Strangerke | 2014-04-21 20:00:32 +0200 |
---|---|---|
committer | Strangerke | 2014-04-21 20:00:32 +0200 |
commit | 034773fda7cab67cd5d5e4446daa1402c4f6054d (patch) | |
tree | e707780b78f4f4d22a52629f261a19ec3cfce82c /engines/mads | |
parent | ed4cedd81675f2ce57356dee90549ef52fb761b3 (diff) | |
download | scummvm-rg350-034773fda7cab67cd5d5e4446daa1402c4f6054d.tar.gz scummvm-rg350-034773fda7cab67cd5d5e4446daa1402c4f6054d.tar.bz2 scummvm-rg350-034773fda7cab67cd5d5e4446daa1402c4f6054d.zip |
MADS: Implement scene 318, some renaming
Diffstat (limited to 'engines/mads')
-rw-r--r-- | engines/mads/nebular/nebular_scenes.cpp | 2 | ||||
-rw-r--r-- | engines/mads/nebular/nebular_scenes3.cpp | 590 | ||||
-rw-r--r-- | engines/mads/nebular/nebular_scenes3.h | 39 | ||||
-rw-r--r-- | engines/mads/sequence.cpp | 6 | ||||
-rw-r--r-- | engines/mads/sequence.h | 2 |
5 files changed, 632 insertions, 7 deletions
diff --git a/engines/mads/nebular/nebular_scenes.cpp b/engines/mads/nebular/nebular_scenes.cpp index 8c75cbdd7b..77146a0773 100644 --- a/engines/mads/nebular/nebular_scenes.cpp +++ b/engines/mads/nebular/nebular_scenes.cpp @@ -125,6 +125,8 @@ SceneLogic *SceneFactory::createScene(MADSEngine *vm) { return new Scene313(vm); case 316: return new Scene316(vm); + case 318: + return new Scene318(vm); // Scene group #8 case 804: diff --git a/engines/mads/nebular/nebular_scenes3.cpp b/engines/mads/nebular/nebular_scenes3.cpp index e1d1180dc4..e828c2857e 100644 --- a/engines/mads/nebular/nebular_scenes3.cpp +++ b/engines/mads/nebular/nebular_scenes3.cpp @@ -485,7 +485,7 @@ void Scene307::handlePrisonerEncounter() { } } -void Scene307::handlePrisonerSpeech(int firstQuoteId, int number, long time) { +void Scene307::handlePrisonerSpeech(int firstQuoteId, int number, long timeout) { int height = number * 14; int posY; @@ -500,7 +500,7 @@ void Scene307::handlePrisonerSpeech(int firstQuoteId, int number, long time) { int quoteId = firstQuoteId; for (int count = 0; count < number; count++) { _game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON; - _scene->_kernelMessages.add(Common::Point(5, posY), 0xFDFC, 0, 81, time, _game.getQuote(quoteId)); + _scene->_kernelMessages.add(Common::Point(5, posY), 0xFDFC, 0, 81, timeout, _game.getQuote(quoteId)); posY += 14; quoteId++; } @@ -2284,5 +2284,591 @@ void Scene316::actions() { /*------------------------------------------------------------------------*/ +void Scene318::setup() { + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene318::handleDialog() { + int temp; + + if (!_game._trigger) { + _game._player._stepEnabled = false; + handleRexDialogs(_action._activeAction._verbId); + } else if (_game._trigger == 2) { + temp = _globals._sequenceIndexes[2]; + _globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[2], Common::Point(142, 121)); + _scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], temp); + _vm->_sound->command(3); + _scene->_userInterface.setup(kInputLimitedSentences); + _game._player._stepEnabled = true; + } else { + if (_action._activeAction._verbId < 0x19C) + warning("TODO: sub71B9E(&dialog1, _action._activeAction._verbId, false);"); + + switch (_action._activeAction._verbId) { + case 0x191: + handleInternDialog(0x19E, 2, 9999999); + warning("TODO: sub71B9E(&dialog1, 0x192, true);"); + break; + + case 0x192: + handleInternDialog(0x1A0, 5, 9999999); + warning("TODO: sub71B9E(&dialog1, 0x193, true);"); + break; + + case 0x193: + handleInternDialog(0x1A5, 4, 9999999); + warning("TODO: sub71B9E(&dialog1, 0x194, true);"); + break; + + case 0x194: + handleInternDialog(0x1A9, 6, 9999999); + warning("TODO: sub71B9E(&dialog1, 0x195, true);"); + warning("TODO: sub71B9E(&dialog1, 0x196, true);"); + warning("TODO: sub71B9E(&dialog1, 0x19D, false);"); + break; + + case 0x195: + handleInternDialog(0x1AF, 7, 9999999); + warning("TODO: if (!sub71C16(&_dialog1, 0x196))"); + warning("TODO: \tsub71B9E(&dialog1, 0x197, true);"); + break; + + case 0x196: + handleInternDialog(0x1B6, 5, 9999999); + warning("TODO: if (!sub71C16(&_dialog1, 0x195))"); + warning("TODO: \tsub71B9E(&dialog1, 0x197, true);"); + break; + + case 0x197: + handleInternDialog(0x1BB, 5, 9999999); + break; + + case 0x198: + handleInternDialog(0x1C0, 5, 9999999); + warning("TODO: sub71B9E(&dialog1, 0x19A, true);"); + break; + + case 0x199: + handleInternDialog(0x1C5, 3, 9999999); + break; + + case 0x19A: + handleInternDialog(0x1C8, 5, 9999999); + warning("TODO: sub71B9E(&dialog1, 0x19B, true);"); + break; + + case 0x19B: + handleInternDialog(0x1CD, 3, 9999999); + break; + + case 0x19C: + case 0x19D: + _scene->_sequences.remove(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[2], Common::Point(142, 121)); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 6, 8); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + + _dialogFl = false; + handleInternDialog(0x1D0, 1, 120); + warning("TODO: if ((sub71C16(&_dialog1, 0) == 1) || (_action._activeAction._verbId == 0x19D)) {"); + _explosionFl = true; + _internCounter = 3420; + // } + break; + } + + if (_action._activeAction._verbId < 0x19C) { + warning("TODO: talk_init(&dialog1);"); + _game._player._stepEnabled = true; + } + + } +} + +void Scene318::handleRexDialogs(int quote) { + _scene->_kernelMessages.reset(); + + Common::String curQuote = _game.getQuote(quote); + if (_vm->_font->getWidth(curQuote, _scene->_textSpacing) > 200) { + Common::String subQuote1; + _game.splitQuote(curQuote, subQuote1, _subQuote2); + _scene->_kernelMessages.add(Common::Point(138, 59), 0x1110, 32, 0, 240, subQuote1); + _scene->_kernelMessages.add(Common::Point(138, 73), 0x1110, 32, 1, 180, _subQuote2); + } else + _scene->_kernelMessages.add(Common::Point(138, 73), 0x1110, 32, 1, 120, curQuote); +} + +void Scene318::handleInternDialog(int quoteId, int quoteNum, uint32 timeout) { + int height = quoteNum * 14; + int posY; + if (height < 85) + posY = 87 - height; + else + posY = 2; + + int curQuoteId= quoteId; + + int maxWidth = 0; + for (int i = 0; i < quoteNum; i++) { + maxWidth = MAX(maxWidth, _vm->_font->getWidth(_game.getQuote(curQuoteId), -1)); + curQuoteId++; + } + + int posX = MIN(319 - maxWidth, 178 - (maxWidth >> 1)); + curQuoteId = quoteId; + + _scene->_kernelMessages.reset(); + _internTalkingFl = true; + + for (int i = 0; i < quoteNum; i++) { + _game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON; + _scene->_sequences.addTimer(180, 63); + _scene->_kernelMessages.add(Common::Point(posX, posY), 0xFDFC, 0, 0, timeout, _game.getQuote(curQuoteId)); + posY += 14; + curQuoteId++; + } +} + +void Scene318::enter() { + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('k', -1)); + + if (_globals[kAfterHavoc]) { + _scene->loadAnimation(formAnimName('f', -1)); + _scene->_activeAnimation->_resetFlag = true; + } else if (!_globals[kHasSeenProfPyro]) { + _scene->_hotspots.activate(0x3A2, false); + _scene->_hotspots.activate(0x3A1, false); + _scene->_hotspots.activate(0x165, false); + } + + if (_game._objects.isInRoom(OBJ_SCALPEL)) { + _globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 120); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4); + _scene->_dynamicHotspots.add(0x12C, VERB_TAKE, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0)); + } + + if (_scene->_priorSceneId == 357) + _game._player._playerPos = Common::Point(15, 110); + else if (_scene->_priorSceneId != -2) + _game._player._playerPos = Common::Point(214, 152); + + warning("TODO: sub71A50(&dialog1, 0x47, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, 0x198, 0x199, 0x19A, 0x19B, 0x19C, 0x19D, 0);"); + + if (!_game._visitedScenes._sceneRevisited) { + warning("TODO: sub71B18(&dialog1, 0x191, 0x198, 0x199, 0x19C, 0);"); + warning("TODO: if (Debugger_widepipe_ctr >= 2)"); + warning("TODO: \tsub71B9E(&dialog1, 0x19D, -1);"); + } + + if (_scene->_priorSceneId == 307) { + _game._player._visible = false; + _game._player._stepEnabled = false; + _scene->loadAnimation(formAnimName('a', -1), 60); + _animMode = 1; + } + + _lastFrame = 0; + _scene->_hotspots.activate(0x307, false); + + if (_scene->_priorSceneId != -2) { + _dialogFl = false; + _internWalkingFl = false; + _counter= 0; + _internCounter= 0; + _internVisibleFl = true; + _explosionFl = false; + } + + _game.loadQuoteSet(0x18C, 0x18D, 0x18E, 0x18F, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, + 0x197, 0x198, 0x199, 0x19A, 0x19B, 0x19C, 0x19E, 0x19E, 0x1A0, 0x1A1, 0x1A2, 0x1A3, + 0x1A4, 0x1A5, 0x1A6, 0x1A7, 0x1A8, 0x1A9, 0x1AA, 0x1AB, 0x1AC, 0x1AD, 0x1AE, 0x1AF, + 0x1B0, 0x1B1, 0x1B2, 0x1B3, 0x1B4, 0x1B5, 0x1B6, 0x1B7, 0x1B8, 0x1B9, 0x1BA, 0x1BB, + 0x1BC, 0x1BD, 0x1BE, 0x1BF, 0x1C0, 0x1C1, 0x1C2, 0x1C3, 0x1C4, 0x1C5, 0x1C6, 0x1C7, + 0x1C8, 0x1C9, 0x1CA, 0x1CB, 0x1CC, 0x1CD, 0x1CE, 0x1CF, 0x1D0, 0x1D1, 0x1D2, 0x1D3, + 0x190, 0x19D, 0); + + if ((_scene->_priorSceneId== -2) || (((_scene->_priorSceneId == 318) || (_scene->_priorSceneId == -1)) && (!_globals[kAfterHavoc]))) { + if (!_globals[kAfterHavoc]) { + _game._player._visible = false; + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('g', -1)); + _animMode = 2; + + if (_game._visitedScenes.exists(319) || !_internVisibleFl) { + _internVisibleFl = false; + _dialogFl = false; + } else { + _scene->loadAnimation(formAnimName('b', -1), 61); + _scene->_hotspots.activate(0x307, true); + } + + if (_dialogFl) { + warning("TODO: talk_init(&dialog1);"); + _globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 8); + } else + _globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1); + + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[2], Common::Point(142, 121)); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + } + } + + if (_scene->_priorSceneId == 319) { + _game._player._stepEnabled = false; + _game._player._visible = false; + _animMode = 4; + if (!_globals[kHasSeenProfPyro]) { + _scene->loadAnimation(formAnimName('d', -1), 64); + _globals[kHasSeenProfPyro] = true; + } else { + _scene->loadAnimation(formAnimName('e', -1), 64); + } + } + + _internTalkingFl = false; + _vm->_palette->setEntry(252, 63, 63, 10); + _vm->_palette->setEntry(253, 45, 45, 05); + + _dropTimer = _globals._frameTime; + sceneEntrySound(); + + if (_dialogFl) + _vm->_sound->command(15); +} + +void Scene318::step() { + if ((_scene->_activeAnimation != nullptr) && (_animMode == 2)) { + if (_lastFrame != _scene->_activeAnimation->getCurrentFrame()) { + _lastFrame = _scene->_activeAnimation->getCurrentFrame(); + int nextFrame = -1; + + switch (_lastFrame) { + case 20: + case 30: + case 40: + case 50: + case 60: + case 70: + case 80: + case 90: + case 100: + case 110: + case 120: + case 130: + case 140: + case 149: + if (_internWalkingFl) { + nextFrame = 149; + } else if (_internTalkingFl) { + nextFrame = 149; + } else if (_lastFrame == 149) { + nextFrame = 4; + } + break; + + case 151: + if (_internWalkingFl) + nextFrame = 183; + break; + + case 167: + case 184: + if (_internWalkingFl) { + nextFrame = 184; + } else if (!_internTalkingFl) { + nextFrame = 0; + } else if (_vm->getRandomNumber(1, 100) <= 50) { + nextFrame = 151; + } else { + nextFrame = 167; + } + + if (nextFrame == 184) { + handleInternDialog(0x1D1, 3, 240); + _scene->_hotspots.activate(0x307, false); + _internVisibleFl = false; + } + break; + } + + if ((nextFrame >= 0) && (nextFrame != _scene->_activeAnimation->getCurrentFrame())) { + _scene->_activeAnimation->setCurrentFrame(nextFrame); + _lastFrame = nextFrame; + } + } + } + + switch (_game._trigger) { + case 60: + _vm->_sound->command(3); + _animMode = 2; + _scene->_reloadSceneFlag= true; + break; + + case 61: + _counter = 0; + break; + + case 62: + _scene->_nextSceneId = 319; + break; + + case 63: + _internTalkingFl = false; + break; + + case 64: + _vm->_sound->command(3); + _scene->_nextSceneId = 307; + break; + } + + uint32 tmpFrame = _vm->_events->getFrameCounter(); + uint32 diffFrame = tmpFrame - _lastFrameCounter; + _lastFrameCounter = tmpFrame; + + if ((_animMode == 2) && !_internVisibleFl && _game._player._stepEnabled) { + if ((diffFrame >= 0) && (diffFrame <= 4)) + _counter += diffFrame; + else + _counter++; + + int extraCounter = _game._objects.isInInventory(OBJ_SCALPEL) ? 900 : 0; + + if (_counter + extraCounter >= 1800) { + _scene->freeAnimation(); + _game._player._stepEnabled = false; + _scene->loadAnimation(formAnimName('c', -1), 62); + _animMode = 3; + } + } else if ((_animMode == 2) && _explosionFl && _internVisibleFl && !_dialogFl + && !_internWalkingFl && (_game._screenObjects._inputMode != 1)) { + if ((diffFrame >= 0) && (diffFrame <= 4)) + _internCounter += diffFrame; + else + _internCounter++; + + if (_internCounter >= 3600) { + _vm->_sound->command(59); + warning("TODO: shake_countdown = 20;"); + _internWalkingFl = true; + } + } + + if ((_globals._frameTime - _dropTimer) > 600) { + _vm->_sound->command(51); + _globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 14, 1, 0, 0); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10); + _dropTimer = _globals._frameTime; + } +} + +void Scene318::preActions() { + if (_game._player._needToWalk) + _game._player._needToWalk = _game._player._visible; + + if (_action.isAction(0x1AD, 0x2BA)) + _game._player._walkOffScreenSceneId = 357; +} + +void Scene318::actions() { + if (_game._screenObjects._inputMode == 1) { + handleDialog(); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALKTO, 0x307)) { + switch (_game._trigger) { + case 0: { + _dialogFl = true; + _vm->_sound->command(15); + _game._player._stepEnabled = false; + handleRexDialogs(_vm->getRandomNumber(0x18C, 0x18E)); + + _scene->_sequences.remove(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 80); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[2], Common::Point(142, 121)); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 6, 8); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + } + break; + + case 1: + _game._player._stepEnabled = true; + handleInternDialog(0x18F, 1, 9999999); + warning("TODO: talk_init(&dialog1);"); + break; + + case 2: { + int oldIdx = _globals._sequenceIndexes[2]; + _globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 8); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[2], Common::Point(142, 121)); + _scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx); + } + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, 0x12C) && (_game._objects.isInRoom(OBJ_SCALPEL) || _game._trigger)) { + switch (_game._trigger) { + case 0: + _game._player._stepEnabled = false; + _scene->_sequences.remove(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 8, 2, 0, 80); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[2], Common::Point(142, 121)); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 2, 5); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 5, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + break; + + case 1: + if (_internVisibleFl) + handleInternDialog(0x190, 1, 120); + else { + _game._objects.addToInventory(OBJ_SCALPEL); + _vm->_dialogs->showItem(OBJ_SCALPEL, 0x7C5D); + _scene->_sequences.remove(_globals._sequenceIndexes[3]); + } + break; + + case 2: { + int oldIdx = _globals._sequenceIndexes[2]; + _globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[2], Common::Point(142, 121)); + _scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx); + _scene->_sequences.addTimer(60, 3); + } + break; + + case 3: + _game._player._stepEnabled = true; + break; + } + _action._inProgress = false; + return; + } + + if (_game._player._visible) { + if (_action.isAction(0x1AD, 0x2B3)) { + _scene->_nextSceneId = 407; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, 0x165)) { + if (_game._objects.isInRoom(OBJ_AUDIO_TAPE)) { + _vm->_dialogs->showItem(OBJ_AUDIO_TAPE, 0x7C5B); + _game._objects.addToInventory(OBJ_AUDIO_TAPE); + } else + _vm->_dialogs->show(0x7C5A); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK, 0x165)) { + if (_game._objects.isInRoom(OBJ_AUDIO_TAPE)) + _vm->_dialogs->show(0x7C59); + else + _vm->_dialogs->show(0x7C5A); + + _action._inProgress = false; + return; + } + + if (_action.isAction(0x242, 0x488)) { + _vm->_dialogs->show(0x7C57); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK, 0x2D9)) { + _vm->_dialogs->show(0x7C4F); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK, 0x308)) { + _vm->_dialogs->show(0x7C51); + _action._inProgress = false; + return; + } + } else { // Not visible + if (_action.isAction(VERB_LOOK, 0x2D9)) { + _vm->_dialogs->show(0x7C4E); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK, 0x308)) { + _vm->_dialogs->show(0x7C50); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_LOOK, 0x18D)) + _vm->_dialogs->show(0x7C42); + else if (_action.isAction(VERB_LOOK, 0x89)) + _vm->_dialogs->show(0x7C43); + else if (_action.isAction(VERB_LOOK, 0x2BA)) + _vm->_dialogs->show(0x7C44); + else if (_action.isAction(VERB_LOOK, 0x2B3)) + _vm->_dialogs->show(0x7C45); + else if (_action.isAction(VERB_LOOK, 0x2CB)) + _vm->_dialogs->show(0x7C46); + else if (_action.isAction(VERB_LOOK, 0x216)) + _vm->_dialogs->show(0x7C47); + else if (_action.isAction(VERB_LOOK, 0x319)) + _vm->_dialogs->show(0x7C48); + else if (_action.isAction(VERB_LOOK, 0x477)) + _vm->_dialogs->show(0x7C49); + else if (_action.isAction(VERB_LOOK, 0xE2)) + _vm->_dialogs->show(0x7C4A); + else if (_action.isAction(VERB_LOOK, 0x2C9)) + _vm->_dialogs->show(0x7C4B); + else if (_action.isAction(VERB_LOOK, 0x2C7)) + _vm->_dialogs->show(0x7C4C); + else if (_action.isAction(VERB_LOOK, 0x2C8)) + _vm->_dialogs->show(0x7C4D); + else if (_action.isAction(VERB_OPEN, 0x2C9)) + _vm->_dialogs->show(0x7C55); + else if (_action.isAction(VERB_LOOK, 0x307)) + _vm->_dialogs->show(0x7C56); + else if (_action.isAction(VERB_LOOK, 0x3A1)) + _vm->_dialogs->show(0x7C58); + else if (_action.isAction(VERB_LOOK, 0x3A2)) + _vm->_dialogs->show(0x7C5C); + else if (_action._lookFlag) { + if (_game._player._visible || _game._objects.isInInventory(OBJ_SCALPEL)) + _vm->_dialogs->show(0x7C54); + else if (_internVisibleFl) + _vm->_dialogs->show(0x7C52); + else + _vm->_dialogs->show(0x7C53); + } else + return; + + _action._inProgress = false; +} + +/*------------------------------------------------------------------------*/ + } // End of namespace Nebular } // End of namespace MADS diff --git a/engines/mads/nebular/nebular_scenes3.h b/engines/mads/nebular/nebular_scenes3.h index 9dd2e12421..c5631022f8 100644 --- a/engines/mads/nebular/nebular_scenes3.h +++ b/engines/mads/nebular/nebular_scenes3.h @@ -142,7 +142,7 @@ private: void handlePrisonerDialog(); void handlePrisonerEncounter(); void setDialogNode(int node); - void handlePrisonerSpeech(int firstQuoteId, int number, long time); + void handlePrisonerSpeech(int firstQuoteId, int number, long timeout); public: Scene307(MADSEngine *vm) : Scene3xx(vm) {} @@ -245,6 +245,43 @@ public: virtual void actions(); virtual void postActions() {}; }; + +class Scene318: public Scene3xx { +private: + uint32 _dropTimer; + + int _lastFrame; + int _animMode; + int _internCounter; + int _counter; + + bool _dialogFl; + bool _internTalkingFl; + bool _internWalkingFl; + bool _internVisibleFl; + bool _explosionFl; + + uint32 _lastFrameCounter; + + Common::String _subQuote2; + + // dialog1 + + void handleDialog(); + void handleRexDialogs(int quote); + void handleInternDialog(int quoteId, int quoteNum, uint32 timeout); + +public: + Scene318(MADSEngine *vm) : Scene3xx(vm) {} + + virtual void setup(); + virtual void enter(); + virtual void step(); + virtual void preActions(); + virtual void actions(); + virtual void postActions() {}; +}; + } // End of namespace Nebular } // End of namespace MADS diff --git a/engines/mads/sequence.cpp b/engines/mads/sequence.cpp index 07f7f9cdce..b46b5c0969 100644 --- a/engines/mads/sequence.cpp +++ b/engines/mads/sequence.cpp @@ -142,7 +142,7 @@ int SequenceList::add(int spriteListIndex, bool flipped, int frameIndex, int tri return seqIndex; } -int SequenceList::addTimer(int time, int abortVal) { +int SequenceList::addTimer(int timeout, int abortVal) { Scene &scene = _vm->_game->_scene; uint seqIndex; for (seqIndex = 0; seqIndex < _entries.size(); ++seqIndex) { @@ -154,9 +154,9 @@ int SequenceList::addTimer(int time, int abortVal) { SequenceEntry &se = _entries[seqIndex]; se._active = true; se._spritesIndex = -1; - se._numTicks = time; + se._numTicks = timeout; se._extraTicks = 0; - se._timeout = scene._frameStartTime + time; + se._timeout = scene._frameStartTime + timeout; se._triggerCountdown = true; se._doneFlag = false; se._entries._count = 0; diff --git a/engines/mads/sequence.h b/engines/mads/sequence.h index 6cef3de02d..5f052e9d0f 100644 --- a/engines/mads/sequence.h +++ b/engines/mads/sequence.h @@ -104,7 +104,7 @@ public: int extraTicks, int numTicks, int msgX, int msgY, bool nonFixed, int scale, int depth, int frameInc, SpriteAnimType animType, int numSprites, int frameStart); - int addTimer(int time, int abortVal); + int addTimer(int timeout, int abortVal); void remove(int seqIndex); void setSpriteSlot(int seqIndex, SpriteSlot &spriteSlot); bool loadSprites(int seqIndex); |