aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/nebular
diff options
context:
space:
mode:
authorStrangerke2014-04-11 07:47:38 +0200
committerStrangerke2014-04-11 07:47:38 +0200
commit4225304a34a5fc04280e72206c4d3dea13e29ad8 (patch)
tree976e2b5413625f375828e92678092c07cb16def1 /engines/mads/nebular
parenta30e78137e326c49d7de09f4fb2293bedfdd4a30 (diff)
downloadscummvm-rg350-4225304a34a5fc04280e72206c4d3dea13e29ad8.tar.gz
scummvm-rg350-4225304a34a5fc04280e72206c4d3dea13e29ad8.tar.bz2
scummvm-rg350-4225304a34a5fc04280e72206c4d3dea13e29ad8.zip
MADS: Implement scene 102
Diffstat (limited to 'engines/mads/nebular')
-rw-r--r--engines/mads/nebular/nebular_scenes1.cpp597
-rw-r--r--engines/mads/nebular/nebular_scenes1.h12
2 files changed, 594 insertions, 15 deletions
diff --git a/engines/mads/nebular/nebular_scenes1.cpp b/engines/mads/nebular/nebular_scenes1.cpp
index 5064795d33..c9a6165488 100644
--- a/engines/mads/nebular/nebular_scenes1.cpp
+++ b/engines/mads/nebular/nebular_scenes1.cpp
@@ -134,20 +134,20 @@ void Scene101::sayDang() {
}
void Scene101::enter() {
- _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1), false);
- _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 2), false);
- _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 3), false);
- _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 4), false);
- _globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 5), false);
- _globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('x', 6), false);
- _globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('x', 7), false);
- _globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('m', -1), false);
- _globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('b', 1), false);
- _globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('b', 2), false);
- _globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('a', 0), false);
- _globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('a', 1), false);
- _globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('x', 8), false);
- _globals._spriteIndexes[14] = _scene->_sprites.addSprites(formAnimName('x', 0), false);
+ _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1));
+ _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 2));
+ _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 3));
+ _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 4));
+ _globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 5));
+ _globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('x', 6));
+ _globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('x', 7));
+ _globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('m', -1));
+ _globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('b', 1));
+ _globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('b', 2));
+ _globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('a', 0));
+ _globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('a', 1));
+ _globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('x', 8));
+ _globals._spriteIndexes[14] = _scene->_sprites.addSprites(formAnimName('x', 0));
_globals._spriteIndexes[16] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 0, 0, 25);
_globals._spriteIndexes[17] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 4, 0, 1, 0);
@@ -601,27 +601,594 @@ void Scene101::actions() {
/*------------------------------------------------------------------------*/
void Scene102::setup() {
+ _scene->_animationData->preLoad(formAnimName('A', -1), 3);
+ setPlayerSpritesPrefix();
+ setAAName();
+}
+void Scene102::addRandomMessage() {
+ _scene->_kernelMessages.reset();
+ _game._triggerSetupMode = KERNEL_TRIGGER_DAEMON;
+ int quoteId = _vm->getRandomNumber(65, 69);
+ _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 73, 120, _game.getQuote(quoteId));
+ _activeMsgFl = true;
}
void Scene102::enter() {
+ sceneEntrySound();
+
+ _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1));
+ _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 2));
+ _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 3));
+ _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 4));
+ _globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 5));
+
+ _globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('b', -1));
+ _globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', -1));
+ _globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('e', -1));
+ _globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('n', -1));
+ _globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('g', -1));
+ _globals._spriteIndexes[11] = _scene->_sprites.addSprites("*RXMRC_8");
+ _globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('x', 0));
+
+ _globals._spriteIndexes[15+1] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[1], false, 8, 0, 0, 0);
+ _globals._spriteIndexes[15+2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 170, 0, 1, 6);
+ _globals._spriteIndexes[15+3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 11, 0, 2, 3);
+ _globals._spriteIndexes[15+4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 4, 0, 1, 0);
+ _globals._spriteIndexes[20] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 3, 0, 0, 5);
+
+ if (!_game._objects.isInRoom(OBJ_BINOCULARS))
+ _globals._spriteIndexes[24] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 24, 0, 0, 24);
+ else
+ _scene->_hotspots.activate(0x27, false);
+ _scene->_hotspots.activate(0x35, false);
+
+ if (_globals[kMedicineCabinetOpen]) {
+ _globals._spriteIndexes[23] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._spriteIndexes[23], -2, -2);
+ }
+
+ if (_scene->_priorSceneId == 101) {
+ _game._player._playerPos = Common::Point(229, 109);
+ _game._player._stepEnabled = false;
+ _globals._spriteIndexes[21] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 2, 0);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[21], SM_0, 0, 70);
+ } else if (_scene->_priorSceneId == 103) {
+ _game._player._playerPos = Common::Point(47, 152);
+ } else if (_scene->_priorSceneId != -2) {
+ _game._player._facing = FACING_NORTHWEST;
+ _game._player._playerPos = Common::Point(32, 129);
+ }
+
+ if (_scene->_priorSceneId != 106) {
+ if (_globals[kWaterInAPuddle]) {
+ _globals._spriteIndexes[28] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 0, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._spriteIndexes[28], -2, -2);
+ _scene->_sequences.setDepth(_globals._spriteIndexes[28], 5);
+ }
+ } else {
+ _game._player._stepEnabled = false;
+ _game._player._visible = false;
+ _globals._spriteIndexes[28] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 1, 0, 0);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[28], SM_0, 0, 72);
+ _scene->_sequences.setDepth(_globals._spriteIndexes[28], 5);
+ _vm->_sound->command(24);
+ _vm->_sound->command(28);
+ }
+
+ _fridgeOpenedFl = false;
+ _fridgeOpenedDescr = false;
+ _fridgeCommentCount = 0;
+ _fridgeFirstOpenFl = true;
+ _chairDescrFl = false;
+ _activeMsgFl = false;
+
+ _game.loadQuoteSet(0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x45, 0x43, 0);
+
+ if (_scene->_priorSceneId == 101)
+ _vm->_sound->command(20);
}
void Scene102::step() {
+ if (_game._trigger == 70)
+ _game._player._stepEnabled = true;
+ if (_game._trigger == 72) {
+ _globals._spriteIndexes[28] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 0, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._spriteIndexes[28], -2, -2);
+ _scene->_sequences.setDepth(_globals._spriteIndexes[28], 5);
+ _scene->_sequences.addTimer(48, 90);
+ }
+
+ if (_game._trigger >= 90) {
+ if (_game._trigger >= 94) {
+ _scene->loadAnimation(formAnimName('B', -1), 71);
+ _game._player._stepEnabled = false;
+ _game._player._visible = false;
+
+ _globals[kWaterInAPuddle] = true;
+ _vm->_sound->command(24);
+ } else {
+ _vm->_sound->command(23);
+ _scene->_sequences.addTimer(48, _game._trigger + 1);
+ }
+ }
+
+ if (_game._trigger == 71) {
+ _game._player._stepEnabled = true;
+ _game._player._visible = true;
+ _game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+ }
+
+ if (_fridgeOpenedFl && !_fridgeOpenedDescr) {
+ _fridgeCommentCount++;
+ if (_fridgeCommentCount > 16384) {
+ _fridgeOpenedDescr = true;
+ _vm->_dialogs->show(0x27E5);
+ }
+ }
+
+ if (!_activeMsgFl && (_game._player._playerPos == Common::Point(177, 114)) && (_game._player._facing == FACING_NORTH)
+ && (_vm->getRandomNumber(1, 5000) == 1)) {
+ _scene->_kernelMessages.reset();
+ _activeMsgFl = false;
+ addRandomMessage();
+ }
+
+ if (_game._trigger == 73)
+ _activeMsgFl = false;
}
void Scene102::preActions() {
+ if (_action.isAction(0x122) || _action.isAction(0x117))
+ _game._player._needToWalk = _game._player._readyToWalk;
+
+ if (_fridgeOpenedFl && !_action.isAction(0x122)) {
+ switch (_game._trigger) {
+ case 0:
+ if (_game._player._needToWalk) {
+ _scene->_sequences.remove(_globals._spriteIndexes[22]);
+ _globals._spriteIndexes[22] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[7], false, 6, 1, 0, 0);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[22], SM_0, 0, 1);
+ _scene->_sequences.setDepth(_globals._spriteIndexes[22], 15);
+ _game._player._stepEnabled = false;
+ _vm->_sound->command(20);
+ }
+ break;
+
+ case 1:
+ if (_game._objects.isInRoom(OBJ_BURGER)) {
+ _scene->_sequences.remove(_globals._spriteIndexes[25]);
+ _scene->_hotspots.activate(0x35, false);
+ }
+ _fridgeOpenedFl = false;
+ _game._player._stepEnabled = true;
+ break;
+ }
+ }
+ if (_game._player._needToWalk)
+ _scene->_kernelMessages.reset();
}
void Scene102::actions() {
+ bool justOpenedFl = false;
+
+ if (_action._lookFlag) {
+ _vm->_dialogs->show(0x27FA);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(0x122) && !_fridgeOpenedFl) {
+ switch (_game._trigger) {
+ case 0:
+ _globals._spriteIndexes[22] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 6, 1, 0, 0);
+ _scene->_sequences.setDepth(_globals._spriteIndexes[22], 15);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[22], SM_0, 0, 1);
+ if (_game._objects.isInRoom(OBJ_BURGER)) {
+ _globals._spriteIndexes[25] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 7, 0, 0, 0);
+ _scene->_sequences.setDepth(_globals._spriteIndexes[25], 14);
+ }
+ _game._player._stepEnabled = false;
+ _vm->_sound->command(20);
+ _action._inProgress = false;
+ return;
+
+ case 1:
+ _globals._spriteIndexes[22] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 6, 0, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._spriteIndexes[22], -2, -2);
+ _scene->_sequences.setDepth(_globals._spriteIndexes[22], 15);
+ int delay;
+ if (_action.isAction(VERB_WALKTO) && !_fridgeFirstOpenFl)
+ delay = 0;
+ else
+ delay = 48;
+ _scene->_sequences.addTimer(delay, 2);
+ _action._inProgress = false;
+ return;
+
+ case 2:
+ _fridgeOpenedFl = true;
+ _fridgeOpenedDescr = false;
+ _fridgeCommentCount = 0;
+ _game._player._stepEnabled = true;
+ justOpenedFl = true;
+ if (_game._objects.isInRoom(OBJ_BURGER))
+ _scene->_hotspots.activate(0x35, true);
+ break;
+ }
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x122) || _action.isAction(VERB_OPEN, 0x122)) {
+ if (_game._objects.isInRoom(OBJ_BURGER))
+ _vm->_dialogs->show(0x27F6);
+ else
+ _vm->_dialogs->show(0x27F5);
+
+ _fridgeFirstOpenFl = false;
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_WALKTO, 0x122) && justOpenedFl) {
+ _fridgeFirstOpenFl = false;
+ int quoteId = _vm->getRandomNumber(59, 63);
+ Common::String curQuote = _game.getQuote(quoteId);
+ int width = _vm->_font->getWidth(curQuote, -1);
+ _scene->_kernelMessages.reset();
+ _game._triggerSetupMode = KERNEL_TRIGGER_DAEMON;
+ _scene->_kernelMessages.add(Common::Point(210, 60), 0x1110, 0, 73, 120, curQuote);
+ _scene->_kernelMessages.add(Common::Point(214 + width, 60), 0x1110, 0, 73, 120, _game.getQuote(64));
+ _activeMsgFl = true;
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_CLOSE, 0x122)) {
+ _vm->_dialogs->show(0x27E5);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_TAKE, 0x122)) {
+ _vm->_dialogs->show(0x8);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(0x18B, 0x6E)) {
+ switch (_game._trigger) {
+ case 0:
+ _globals._spriteIndexes[21] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 0, 0);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[21], SM_0, 0, 1);
+ _game._player._stepEnabled = false;
+ _vm->_sound->command(20);
+ break;
+
+ case 1:
+ _scene->_nextSceneId = 101;
+ break;
+ }
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_WALKTO, 0x79)) {
+ _scene->_nextSceneId = 103;
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_WALKTO, 0x117) || _action.isAction(VERB_LOOK, 0x117) || _action.isAction(VERB_WALKTO, 0x27)) {
+ addRandomMessage();
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x194)) {
+ _vm->_dialogs->show(0x27E4);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x79)) {
+ _vm->_dialogs->show(0x27DD);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x6E)) {
+ _vm->_dialogs->show(0x27DC);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(0x155, 0x46) || _action.isAction(VERB_LOOK, 0x46)) {
+ _vm->_dialogs->show(0x27DB);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(0x155, 0xFD) || _action.isAction(VERB_LOOK, 0xFD)) {
+ _vm->_dialogs->show(0x27DA);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x127)) {
+ _vm->_dialogs->show(0x27E7);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_PUT, 0x35, 0x127) && _game._objects.isInInventory(OBJ_BURGER)) {
+ _vm->_dialogs->show(0x27E8);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_PUT, 0x122) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
+ _vm->_dialogs->show(0x27E9);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_PUT, 0x127) && (_action.isAction(0x65) || _action.isAction(0x157))) {
+ _vm->_dialogs->show(0x27F6);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_OPEN, 0x127)) {
+ _vm->_dialogs->show(0x27EA);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x52)) {
+ _vm->_dialogs->show(0x27EB);
+ _action._inProgress = false;
+ return;
+ }
+
+ if ((_action.isAction(0xC7) || _action.isAction(0xA3)) && (_action.isAction(VERB_LOOK) || _action.isAction(0x50) || _action.isAction(0x4F))) {
+ if (_game._objects.isInInventory(OBJ_REBREATHER)) {
+ if (!_action.isAction(0x50) && !_action.isAction(0x4F)) {
+ _vm->_dialogs->show(0x27F7);
+ _action._inProgress = false;
+ return;
+ }
+ } else if (_action.isAction(VERB_LOOK) || (_game._difficulty == DIFFICULTY_IMPOSSIBLE)) {
+ _vm->_dialogs->show(0x27EE);
+ _action._inProgress = false;
+ return;
+ }
+ }
+
+ if ( (_action.isAction(0xC7) || _action.isAction(0xA3)) && (_action.isAction(0x50) || _action.isAction(0x4F)) ) {
+ switch (_game._trigger) {
+ case 0:
+ _scene->loadAnimation(formAnimName('A', -1), 1);
+ _game._player._stepEnabled = false;
+ _game._player._visible = false;
+ break;
+
+ case 1:
+ _vm->_sound->command(24);
+ _scene->_sequences.addTimer(48, 2);
+ break;
+
+ case 2:
+ case 3:
+ case 4:
+ _vm->_sound->command(23);
+ _scene->_sequences.addTimer(48, _game._trigger + 1);
+ break;
+
+ case 5:
+ _vm->_sound->command(24);
+ _scene->_sequences.addTimer(48, _game._trigger + 1);
+ break;
+
+ case 6:
+ if (_game._objects.isInInventory(OBJ_REBREATHER) && !_game._visitedScenes.exists(106))
+ _vm->_dialogs->show(0x27FD);
+ _scene->_nextSceneId = 106;
+ break;
+ }
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x118)) {
+ _vm->_dialogs->show(0x27F2);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x197) || _action.isAction(0xD3, 0x197)) {
+ _vm->_dialogs->show(0x27F3);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x70) || _action.isAction(VERB_WALKTO, 0x70)) {
+ _vm->_dialogs->show(0x27F4);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x71) || ((_action.isAction(VERB_CLOSE, 0x71) || _action.isAction(VERB_PUSH, 0x71)) && !_drawerDescrFl)) {
+ _vm->_dialogs->show(0x27EC);
+ _drawerDescrFl = true;
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_CLOSE, 0x71) || _action.isAction(VERB_PUSH, 0x71)) {
+ _vm->_dialogs->show(0x27ED);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_OPEN, 0x71)) {
+ _vm->_dialogs->show(0x27FC);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x47) || (_action.isAction(0x13F, 0x47) && !_chairDescrFl)) {
+ _chairDescrFl = true;
+ _vm->_dialogs->show(0x27E2);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(0x13F, 0x47)) {
+ _vm->_dialogs->show(0x27E3);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0xDE)) {
+ if (_globals[kMedicineCabinetOpen])
+ _vm->_dialogs->show(0x27DF);
+ else
+ _vm->_dialogs->show(0x27DE);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_CLOSE, 0xDE) && _globals[kMedicineCabinetOpen]) {
+ switch (_game._trigger) {
+ case 0:
+ _scene->_sequences.remove(_globals._spriteIndexes[23]);
+ _globals._spriteIndexes[23] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[23], SM_0, 0, 1);
+ _game._player._stepEnabled = false;
+ _vm->_sound->command(21);
+ break;
+
+ case 1:
+ _scene->_sequences.addTimer(48, 2);
+ break;
+
+ case 2:
+ _game._player._stepEnabled = true;
+ _globals[kMedicineCabinetOpen] = false;
+ _vm->_dialogs->show(0x27E1);
+ break;
+ }
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_OPEN, 0xDE) && !_globals[kMedicineCabinetOpen]) {
+ switch (_game._trigger) {
+ case 0:
+ _globals._spriteIndexes[23] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[23], SM_0, 0, 1);
+ _game._player._stepEnabled = false;
+ _vm->_sound->command(21);
+ break;
+
+ case 1:
+ _globals._spriteIndexes[23] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 0, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._spriteIndexes[23], -2, -2);
+ _scene->_sequences.addTimer(48, 2);
+ break;
+
+ case 2:
+ _game._player._stepEnabled = true;
+ _globals[kMedicineCabinetOpen] = true;
+ if (_globals[kMedicineCabinetVirgin]) {
+ _vm->_dialogs->show(0x27E0);
+ } else {
+ _vm->_dialogs->show(0x27DF);
+ }
+ _globals[kMedicineCabinetVirgin] = false;
+ break;
+ }
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_TAKE, 0x27) && _game._objects.isInRoom(OBJ_BINOCULARS)) {
+ switch (_game._trigger) {
+ case 0:
+ _globals._spriteIndexes[26] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
+ _scene->_sequences.setMsgLayout(_globals._spriteIndexes[26]);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[26], SM_0, 0, 1);
+ _game._player._visible = false;
+ _game._player._stepEnabled = false;
+ break;
+
+ case 1:
+ _game._objects.addToInventory(OBJ_BINOCULARS);
+ _scene->_sequences.remove(_globals._spriteIndexes[15+9]);
+ _scene->_hotspots.activate(0x27, false);
+ _game._player._visible = true;
+ _game._player._stepEnabled = true;
+ _vm->_sound->command(22);
+ _vm->_dialogs->showPicture(OBJ_BINOCULARS, 0x27D9);
+ break;
+ }
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_TAKE, 0x35) && _game._objects.isInRoom(OBJ_BURGER)) {
+ if (_game._trigger == 0) {
+ _vm->_dialogs->showPicture(OBJ_BURGER, 0x27FB);
+ _scene->_sequences.remove(_globals._spriteIndexes[25]);
+ _game._objects.addToInventory(OBJ_BURGER);
+ _scene->_hotspots.activate(0x35, false);
+ _vm->_sound->command(22);
+ _game._player._visible = true;
+ _game._player._stepEnabled = true;
+ }
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_TAKE, 0x117)) {
+ _vm->_dialogs->show(0x27F0);
+ _action._inProgress = false;
+ return;
+ }
+
+ if ((_action.isAction(VERB_PUSH) || _action.isAction(VERB_PULL)) && _action.isAction(0x194)) {
+ _vm->_dialogs->show(0x27F1);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x89)) {
+ _vm->_dialogs->show(0x27F8);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x27) && !_game._objects.isInInventory(OBJ_BINOCULARS)) {
+ _vm->_dialogs->show(0x27F9);
+ _action._inProgress = false;
+ return;
+ }
+
+ if (_action.isAction(VERB_LOOK, 0x35) && (_action._mainObjectSource == 4)) {
+ _vm->_dialogs->show(0x321);
+ _action._inProgress = false;
+ }
}
void Scene102::postActions() {
-
+ if (_action.isAction(VERB_PUT, 0x127) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
+ _vm->_dialogs->show(0x27E9);
+ _action._inProgress = false;
+ }
}
/*------------------------------------------------------------------------*/
diff --git a/engines/mads/nebular/nebular_scenes1.h b/engines/mads/nebular/nebular_scenes1.h
index 3f69223b81..782dbb573b 100644
--- a/engines/mads/nebular/nebular_scenes1.h
+++ b/engines/mads/nebular/nebular_scenes1.h
@@ -77,6 +77,18 @@ public:
};
class Scene102 : public Scene1xx {
+private:
+ bool _fridgeOpenedFl;
+ bool _fridgeOpenedDescr;
+ bool _fridgeFirstOpenFl;
+ bool _chairDescrFl;
+ bool _drawerDescrFl;
+ bool _activeMsgFl;
+
+ int _fridgeCommentCount;
+
+ void addRandomMessage();
+
public:
Scene102(MADSEngine *vm) : Scene1xx(vm) {}