scummvm/engines/mads/nebular/nebular_scenes2.cpp

5381 lines
177 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "common/scummsys.h"
#include "mads/mads.h"
#include "mads/scene.h"
#include "mads/nebular/nebular_scenes.h"
#include "mads/nebular/nebular_scenes2.h"
namespace MADS {
namespace Nebular {
void Scene2xx::setAAName() {
int idx = (_scene->_nextSceneId == 216) ? 4 : 2;
_game._aaName = Resources::formatAAName(idx);
}
void Scene2xx::setPlayerSpritesPrefix() {
_vm->_sound->command(5);
Common::String oldName = _game._player._spritesPrefix;
switch(_scene->_nextSceneId) {
case 213:
case 216:
_game._player._spritesPrefix = "";
break;
default:
if (_globals[kSexOfRex] != SEX_MALE) {
_game._player._spritesPrefix = "ROX";
} else {
_game._player._spritesPrefix = "RXM";
}
break;
}
_game._player._scalingVelocity = (_scene->_nextSceneId <= 212);
if (oldName != _game._player._spritesPrefix)
_game._player._spritesChanged = true;
if ((_scene->_nextSceneId == 203 || _scene->_nextSceneId == 204) && _globals[kRhotundaStatus])
_game._player._loadsFirst = false;
_vm->_palette->setEntry(16, 10, 63, 63);
_vm->_palette->setEntry(17, 10, 45, 45);
}
void Scene2xx::sceneEntrySound() {
if (_vm->_musicFlag) {
switch (_scene->_nextSceneId) {
case 201:
if ((_globals[kTeleporterCommand] == 2) || (_globals[kTeleporterCommand] == 4) || (_globals[kMeteorologistStatus] != 1))
_vm->_sound->command(9);
else
_vm->_sound->command(17);
break;
case 202:
case 203:
case 204:
case 205:
case 208:
case 209:
case 212:
_vm->_sound->command(9);
break;
case 206:
case 211:
case 215:
_vm->_sound->command(10);
break;
case 207:
case 214:
_vm->_sound->command(11);
break;
case 210:
if (_globals[kTwinklesStatus] == 0)
_vm->_sound->command(15);
else
_vm->_sound->command(10);
break;
case 213:
if (_globals[kMeteorologistWatch] == METEOROLOGIST_NORMAL)
_vm->_sound->command(1);
else
_vm->_sound->command(9);
break;
case 216:
_vm->_sound->command(16);
break;
default:
_vm->_sound->command(10);
break;
}
} else
_vm->_sound->command(2);
}
/*------------------------------------------------------------------------*/
Scene201::Scene201(MADSEngine *vm) : Scene2xx(vm) {
_pterodactylFlag = false;
}
void Scene201::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsByte(_pterodactylFlag);
}
void Scene201::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(NOUN_SWOOPING_CREATURE);
_scene->addActiveVocab(NOUN_BIRDS);
_scene->addActiveVocab(VERB_WALKTO);
}
void Scene201::enter() {
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 0));
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 1));
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('m', -1));
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('b', -1));
_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*SC002Z1");
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 1, 0);
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 15, 0, 0, 50);
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 4, 0, 0, 0);
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 0, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 8);
_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(185, 46));
int idx = _scene->_dynamicHotspots.add(NOUN_BIRDS, 209, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(186, 81), FACING_NORTH);
if ((_scene->_priorSceneId == 202) || (_scene->_priorSceneId == RETURNING_FROM_LOADING)) {
_game._player._playerPos = Common::Point(165, 152);
} else {
_game._player._playerPos = Common::Point(223, 149);
_game._player._facing = FACING_SOUTH;
}
if (_globals[kTeleporterCommand]) {
_game._player._visible = false;
_game._player._stepEnabled = false;
int sepChar = (_globals[kSexOfRex] == SEX_MALE) ? 't' : 'u';
// Guess values. What is the default value used by the compiler?
int suffixNum = -1;
int endTrigger = -1;
switch(_globals[kTeleporterCommand]) {
case 1:
suffixNum = 3;
endTrigger = 76;
_globals[kTeleporterUnderstood] = true;
break;
case 2:
suffixNum = 1;
endTrigger = 77;
break;
case 3:
_game._player._visible = true;
_game._player._stepEnabled = true;
suffixNum = -1;
break;
case 4:
suffixNum = 2;
endTrigger = 78;
break;
}
_globals[kTeleporterCommand] = 0;
if (suffixNum >= 0)
_scene->loadAnimation(formAnimName(sepChar, suffixNum), endTrigger);
}
if ((_scene->_priorSceneId == 202) && (_globals[kMeteorologistStatus] == METEOROLOGIST_PRESENT) && !_scene->_roomChanged) {
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('a', 0));
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('a', 1));
_game.loadQuoteSet(90, 91, 0);
_game._player._stepEnabled = false;
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], -1, 12);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_SPRITE, 12, 70);
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
_pterodactylFlag = false;
_game._player.walk(Common::Point(157, 143), FACING_NORTH);
_vm->_palette->setEntry(252, 45, 63, 45);
_vm->_palette->setEntry(253, 20, 45, 20);
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 2, 0, 120, _game.getQuote(90));
} else
_pterodactylFlag = true;
if (_globals[kTeleporterUnderstood])
_scene->_hotspots.activate(NOUN_STRANGE_DEVICE, false);
sceneEntrySound();
}
void Scene201::step() {
if (_pterodactylFlag && (_vm->getRandomNumber(5000) == 9)) {
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 5, 1, 6, 0);
int idx = _scene->_dynamicHotspots.add(351, 13, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(270, 80), FACING_EAST);
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 8);
_vm->_sound->command(14);
_pterodactylFlag = false;
}
if (_game._trigger == 70) {
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
_game._player._visible = false;
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 12, 16);
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 1, 0, 0);
_vm->_sound->command(42);
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_SPRITE, 3, 81);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
}
if (_game._trigger == 81) {
_scene->_kernelMessages.reset();
}
if (_game._trigger == 71) {
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 0, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], -2, -2);
_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1);
}
if (_game._trigger == 73) {
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 17, -2);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
}
if (_game._trigger == 74) {
_vm->_sound->command(40);
_scene->_kernelMessages.add(Common::Point(125, 56), 0xFDFC, 32, 82, 180, _game.getQuote(91));
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 0, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], -2, -2);
_scene->_sequences.addTimer(180, 75);
}
if (_game._trigger == 75) {
_globals[kMeteorologistEverSeen] = 0;
_scene->_nextSceneId = 202;
}
if (_game._trigger == 76) {
_game._player._stepEnabled = true;
_game._player._visible = true;
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
}
if (_game._trigger == 77) {
_globals[kTeleporterCommand] = 1;
_scene->_nextSceneId = _globals[kTeleporterDestination];
_scene->_reloadSceneFlag = true;
}
if (_game._trigger == 78) {
_vm->_sound->command(40);
_vm->_dialogs->show(20114);
_scene->_reloadSceneFlag = true;
}
}
void Scene201::actions() {
if (_action._lookFlag == false) {
if (_action.isAction(VERB_WALK_TOWARDS, NOUN_FIELD_TO_SOUTH))
_scene->_nextSceneId = 202;
else if (_action.isAction(VERB_CLIMB_UP, NOUN_STEPS) || (_action.isAction(VERB_WALK_INSIDE, NOUN_TELEPORTER)) || (_action.isAction(VERB_WALK_INSIDE, NOUN_STRANGE_DEVICE))) {
if (_game._trigger == 0) {
_game._player._stepEnabled = false;
_game._player._visible = false;
int sepChar = (_globals[kSexOfRex] == SEX_MALE) ? 't' : 'u';
_scene->loadAnimation(formAnimName(sepChar, 0), 1);
} else if (_game._trigger == 1) {
_scene->_nextSceneId = 213;
}
} else if (_action.isAction(VERB_LOOK, NOUN_GRASSY_FIELD)) {
_vm->_dialogs->show(20101);
} else if (_action.isAction(VERB_LOOK, NOUN_ROCKS)) {
_vm->_dialogs->show(20102);
} else if (_action.isAction(VERB_LOOK, NOUN_THORNY_BUSH)) {
_vm->_dialogs->show(20103);
} else if (_action.isAction(VERB_LOOK, NOUN_SKY)) {
_vm->_dialogs->show(20104);
} else if (_action.isAction(VERB_LOOK, NOUN_WATER)) {
_vm->_dialogs->show(20105);
} else if (_action.isAction(VERB_LOOK, NOUN_ISLAND_IN_DISTANCE)) {
_vm->_dialogs->show(20106);
} else if (_action.isAction(VERB_LOOK, NOUN_WEATHER_STATION)) {
_vm->_dialogs->show(20107);
} else if (_action.isAction(VERB_LOOK, NOUN_PATH)) {
_vm->_dialogs->show(20108);
} else if (_action.isAction(VERB_LOOK, NOUN_FIELD_TO_SOUTH)) {
_vm->_dialogs->show(20110);
} else if (_action.isAction(VERB_LOOK, NOUN_STRANGE_DEVICE)) {
if (_globals[kMeteorologistEverSeen])
_vm->_dialogs->show(20112);
else
_vm->_dialogs->show(20109);
} else if (_action.isAction(VERB_LOOK, NOUN_TELEPORTER)) {
_vm->_dialogs->show(20113);
} else
return;
} else {
_vm->_dialogs->show(20111);
}
_action._inProgress = false;
}
/*------------------------------------------------------------------------*/
Scene202::Scene202(MADSEngine *vm) : Scene2xx(vm) {
_activeMsgFl = false;
_ladderTopFl = false;
_waitingMeteoFl = false;
_ladderHotspotId = -1;
_meteoClock1 = 0;
_meteoClock2 = 0;
_toStationFl = false;
_toTeleportFl = false;
_lastRoute = 0;
_stationCounter = 0;
_meteoFrame = 0;
_startTime = 0;
_meteorologistSpecial = false;
}
void Scene202::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsByte(_activeMsgFl);
s.syncAsByte(_ladderTopFl);
s.syncAsByte(_waitingMeteoFl);
s.syncAsByte(_toStationFl);
s.syncAsByte(_toTeleportFl);
s.syncAsSint32LE(_ladderHotspotId);
s.syncAsSint32LE(_lastRoute);
s.syncAsSint32LE(_stationCounter);
s.syncAsSint32LE(_meteoFrame);
s.syncAsUint32LE(_meteoClock1);
s.syncAsUint32LE(_meteoClock2);
s.syncAsUint32LE(_startTime);
s.syncAsByte(_meteorologistSpecial);
}
void Scene202::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(NOUN_LADDER);
_scene->addActiveVocab(VERB_CLIMB_DOWN);
_scene->addActiveVocab(VERB_WALKTO);
_scene->addActiveVocab(NOUN_BONE);
_scene->addActiveVocab(NOUN_SKULL);
_scene->addActiveVocab(NOUN_BROKEN_LADDER);
}
void Scene202::enter() {
_game._player._beenVisible = true;
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('b', 0));
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('b', 1));
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('b', 2));
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 0));
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('l', -1));
if (_globals[kSexOfRex] != SEX_MALE) {
_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*ROXBD_2");
} else {
_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*RXMBD_2");
}
_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('a', 0));
_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('a', 1));
_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('a', 2));
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 0);
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(149, 113));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 10);
int idx = _scene->_dynamicHotspots.add(NOUN_SKULL, VERB_WALKTO, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(153, 97), FACING_SOUTH);
if (!(_globals[kBone202Status] & 1)) {
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(130, 108));
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10);
idx = _scene->_dynamicHotspots.add(NOUN_BONE, VERB_WALKTO, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(132, 97), FACING_SOUTH);
}
if (!(_globals[kBone202Status] & 2)) {
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 0, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[6], Common::Point(166, 110));
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 10);
idx = _scene->_dynamicHotspots.add(NOUN_BONE, VERB_WALKTO, _globals._sequenceIndexes[6], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(165, 99), FACING_SOUTH);
}
if (_globals[kBone202Status])
_scene->changeVariant(_globals[kBone202Status]);
if (_scene->_priorSceneId == 201) {
_game._player._playerPos = Common::Point(190, 91);
_game._player._facing = FACING_SOUTH;
} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
_game._player._playerPos = Common::Point(178, 152);
_game._player._facing = FACING_NORTH;
}
if (_globals[kLadderBroken]) {
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 0, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 6);
_scene->_hotspots.activate(NOUN_LADDER, false);
idx = _scene->_dynamicHotspots.add(NOUN_BROKEN_LADDER, VERB_WALKTO, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
}
_game.loadQuoteSet(0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x61, 0);
_activeMsgFl = false;
if (_scene->_priorSceneId == RETURNING_FROM_DIALOG) {
if (_waitingMeteoFl) {
_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
_game._player._visible = false;
}
} else {
_waitingMeteoFl = false;
_ladderTopFl = false;
}
_meteoClock1 = _meteoClock2 = _scene->_frameStartTime;
if (_scene->_roomChanged)
_game._objects.addToInventory(OBJ_BINOCULARS);
if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) {
_game._player._visible = false;
_game._player._stepEnabled = false;
_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.setPosition(_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.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
_game._player._playerPos = Common::Point(171, 122);
_game._player._facing = FACING_NORTH;
}
_scene->loadAnimation(formAnimName('M', -1), 71);
_scene->_activeAnimation->setCurrentFrame(200);
} else {
if (_ladderTopFl) {
_game._player._visible = false;
_scene->_sequences.startCycle(_globals._sequenceIndexes[9], true, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
_game._player._playerPos = Common::Point(246, 124);
_game._player._facing = FACING_NORTH;
}
}
_meteorologistSpecial = false;
}
void Scene202::setRandomKernelMessage() {
int vocabId = _vm->getRandomNumber(92, 96);
_scene->_kernelMessages.reset();
_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 70, 120, _game.getQuote(vocabId));
_activeMsgFl = true;
}
void Scene202::step() {
if (!_activeMsgFl && (_game._player._playerPos == Common::Point(77, 105)) && (_game._player._facing == FACING_NORTH) && (_vm->getRandomNumber(999) == 0)) {
_scene->_kernelMessages.reset();
_activeMsgFl = false;
if (_vm->getRandomNumber(4) == 0)
setRandomKernelMessage();
}
if (_game._trigger == 70)
_activeMsgFl = false;
if (_game._trigger == 71) {
_vm->_sound->command(3);
_vm->_sound->command(9);
_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] = METEOROLOGIST_NORMAL;
}
switch (_game._trigger) {
case 90:
_vm->_sound->command(41);
_scene->_sequences.remove(_globals._sequenceIndexes[10]);
_globals._sequenceIndexes[9] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], true, 6, 1, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 91);
break;
case 91:
_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1);
_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
_scene->_sequences.addTimer(60, 92);
break;
case 92: {
_scene->_sequences.remove(_globals._sequenceIndexes[9]);
_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 6, 1, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
_scene->_kernelMessages.reset();
int msgIndex = _scene->_kernelMessages.add(Common::Point(0, -65), 0x1110, 32, 0, 60, _game.getQuote(98));
_scene->_kernelMessages.setSeqIndex(msgIndex, _globals._sequenceIndexes[11]);
}
break;
case 93: {
_globals[kLadderBroken] = false;
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 0, 0, 0);
_scene->_hotspots.activate(NOUN_LADDER, false);
int idx = _scene->_dynamicHotspots.add(NOUN_BROKEN_LADDER, VERB_WALKTO, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[11], _globals._sequenceIndexes[5]);
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[11]);
_game._player._stepEnabled = true;
_game._player._visible = true;
_ladderTopFl = false;
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(99));
}
break;
default:
break;
}
if (!_scene->_activeAnimation && (_globals[kMeteorologistStatus] != METEOROLOGIST_GONE) && (_meteoClock2 <= _scene->_frameStartTime) && (_meteoClock1 <= _scene->_frameStartTime)) {
int randVal = _vm->getRandomNumber(1, 500);
int threshold = 1;
if (_ladderTopFl)
threshold += 25;
if (!_globals[kMeteorologistEverSeen])
threshold += 25;
if (threshold >= randVal) {
_vm->_sound->command(17);
_scene->loadAnimation(formAnimName('M', -1), 71);
_toStationFl = true;
_toTeleportFl = false;
_globals[kMeteorologistEverSeen] = true;
_lastRoute = 0;
_stationCounter = 0;
_meteoClock2 = _scene->_frameStartTime + 2;
}
}
if (!_scene->_activeAnimation)
return;
if (_waitingMeteoFl) {
if (_scene->_activeAnimation->getCurrentFrame() >= 200) {
if ((_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER) || _globals[kLadderBroken]) {
_scene->_nextSceneId = 213;
} else {
_vm->_dialogs->show(20201);
_scene->_reloadSceneFlag = true;
}
}
if ((_scene->_activeAnimation->getCurrentFrame() == 160) && (_meteoFrame != _scene->_activeAnimation->getCurrentFrame())) {
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(101));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
}
}
if (_meteoClock2 + 120 * 60 <= _scene->_frameStartTime) {
_toTeleportFl = true;
}
if (_scene->_activeAnimation->getCurrentFrame() == _meteoFrame) {
return;
}
_meteoFrame = _scene->_activeAnimation->getCurrentFrame();
int randVal = _vm->getRandomNumber(1, 1000);
int frameStep = -1;
switch (_scene->_activeAnimation->getCurrentFrame()) {
case 42:
case 77:
case 96:
_stationCounter = 0;
frameStep = subStep1(randVal);
break;
case 51:
case 74:
_toStationFl = false;
frameStep = subStep2(randVal);
break;
case 27:
case 119:
case 159:
frameStep = subStep3(randVal);
break;
case 176:
frameStep = subStep4(randVal);
break;
case 59:
_lastRoute = 3;
++_stationCounter;
if (randVal <= 800)
frameStep = 55;
break;
case 89:
_lastRoute = 1;
if (randVal <= 700)
frameStep = 83;
break;
case 137:
_lastRoute = 2;
if (randVal <= 700)
frameStep = 126;
break;
}
if (frameStep >= 0 && frameStep != _scene->_activeAnimation->getCurrentFrame() + 1) {
_scene->_activeAnimation->setCurrentFrame(frameStep);
_meteoFrame = frameStep;
}
}
int Scene202::subStep1(int randVal) {
if ((randVal <= 100) || _toStationFl)
return 42;
if ((randVal <= 200) || _toTeleportFl)
return 96;
if ((randVal <= 300) && (_lastRoute != 1))
return 77;
return 76;
}
int Scene202::subStep2(int randVal) {
if ((randVal <= 150) && (_stationCounter < 5))
return 51;
if ((randVal <= 300) || _toTeleportFl)
return 74;
if (randVal <= 400)
return 64;
return 44;
}
int Scene202::subStep3(int randVal) {
if ((randVal <= 100) || _toStationFl)
return 27;
if ((randVal <= 200) || _toTeleportFl)
return 159;
if ((randVal <= 300) && (_lastRoute != 2))
return 119;
return 110;
}
int Scene202::subStep4(int randVal) {
if ((randVal <= 100) || _toTeleportFl)
return 176;
if (randVal <= 200)
return 19;
return 166;
}
void Scene202::preActions() {
Player &player = _vm->_game->_player;
if (player._needToWalk)
_scene->_kernelMessages.reset();
if (_ladderTopFl && (_action.isAction(VERB_CLIMB_DOWN, NOUN_LADDER) || player._needToWalk)) {
if (_game._trigger == 0) {
_vm->_sound->command(29);
player._readyToWalk = false;
player._stepEnabled = false;
_scene->_sequences.remove(_globals._sequenceIndexes[9]);
_globals._sequenceIndexes[8] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
} else if (_game._trigger == 1) {
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[8]);
_scene->_dynamicHotspots.remove(_ladderHotspotId);
player._visible = true;
player._readyToWalk = true;
player._stepEnabled = true;
_ladderTopFl = false;
}
}
if (_action.isAction(VERB_LOOK, NOUN_BINOCULARS) && (_action._activeAction._indirectObjectId > 0)) {
if (!player._readyToWalk || _ladderTopFl)
player._needToWalk = false;
else
player._needToWalk = true;
if (!_ladderTopFl)
player.walk(Common::Point(171, 122), FACING_NORTH);
}
}
void Scene202::actions() {
if (_action._lookFlag) {
_vm->_dialogs->show(20219);
return;
}
if (_action.isAction(VERB_CLIMB_DOWN, NOUN_LADDER)) {
_action._inProgress = false;
return;
} else if (_action.isAction(VERB_WALK_TOWARDS, NOUN_FIELD_TO_SOUTH)) {
_scene->_nextSceneId = 203;
} else if (_action.isAction(VERB_WALK_TOWARDS, NOUN_FIELD_TO_NORTH)) {
if (_globals[kMeteorologistStatus] != METEOROLOGIST_GONE) {
if (_scene->_activeAnimation)
_globals[kMeteorologistStatus] = METEOROLOGIST_PRESENT;
else
_globals[kMeteorologistStatus] = METEOROLOGIST_ABSENT;
}
_scene->_nextSceneId = 201;
} else if (_action.isAction(VERB_TAKE, NOUN_BONE) && (_action._savedFields._mainObjectSource == 4)) {
switch (_game._trigger) {
case 0:
if (_game._objects.isInInventory(OBJ_BONES)) {
_vm->_dialogs->show(20221);
} else {
_game._player._stepEnabled = false;
_game._player._visible = false;
_globals._sequenceIndexes[7] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[7], false, 3, 2, 0, 0);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[7]);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
}
break;
case 1:
if (_game._player._playerPos == Common::Point(132, 97)) {
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
_globals[kBone202Status] |= BONE_202_LEFT_GONE;
} else {
_scene->_sequences.remove(_globals._sequenceIndexes[6]);
_globals[kBone202Status] |= BONE_202_RIGHT_GONE;
}
break;
case 2:
if (_game._objects.isInInventory(OBJ_BONE)) {
_game._objects.removeFromInventory(OBJ_BONE, NOWHERE);
_game._objects.addToInventory(OBJ_BONES);
_vm->_dialogs->showItem(OBJ_BONES, 20218);
} else {
_game._objects.addToInventory(OBJ_BONE);
_vm->_dialogs->showItem(OBJ_BONE, 20218);
}
_scene->changeVariant(_globals[kBone202Status]);
_game._player._stepEnabled = true;
_game._player._visible = true;
break;
default:
break;
}
_action._inProgress = false;
} else if (_action.isAction(VERB_CLIMB_UP, NOUN_LADDER) && !_globals[kLadderBroken]) {
switch (_game._trigger) {
case 0:
_vm->_sound->command(29);
_meteoClock1 = _scene->_frameStartTime;
_game._player._visible = false;
_game._player._stepEnabled = false;
_ladderHotspotId = _scene->_dynamicHotspots.add(NOUN_LADDER, 78, -1, Common::Rect(241, 68, 241 + 12, 68 + 54));
_scene->_dynamicHotspots.setPosition(_ladderHotspotId, Common::Point(246, 124), FACING_NORTH);
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
break;
case 1: {
_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1);
_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[8], _globals._sequenceIndexes[9]);
_ladderTopFl = true;
_game._player._stepEnabled = true;
int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, _game.getQuote(97));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
}
break;
default:
_action._inProgress = false;
return;
}
} else if ((_action.isAction(VERB_LOOK, NOUN_BINOCULARS, NOUN_FIELD_TO_NORTH) || (_action.isAction(VERB_LOOK, NOUN_BINOCULARS, NOUN_STRANGE_DEVICE))) && (_globals[kSexOfRex] == SEX_MALE)) {
if (!_ladderTopFl) {
switch (_game._trigger) {
case 0:
_game._player._stepEnabled = false;
_game._player._visible= false;
_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], 1, 6);
_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[10]);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
break;
case 1:
_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 6);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
if (_scene->_activeAnimation) {
_waitingMeteoFl = true;
_globals[kMeteorologistWatch] = METEOROLOGIST_GROUND;
} else {
_scene->_sequences.addTimer(120, 2);
}
break;
case 2:
if (!_scene->_activeAnimation && !_meteorologistSpecial) {
_vm->_dialogs->show(20222);
}
_scene->_sequences.remove(_globals._sequenceIndexes[10]);
_globals._sequenceIndexes[10] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], 1, 6);
_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
break;
case 3:
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[10]);
_game._player._stepEnabled = true;
_game._player._visible = true;
break;
default:
_action._inProgress = false;
return;
}
} else {
switch (_game._trigger) {
case 0:
_toTeleportFl = true;
_game._player._stepEnabled = false;
_scene->_sequences.remove(_globals._sequenceIndexes[9]);
_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], true, 6, 1, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
break;
case 1:
_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, -2);
_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
if (_scene->_activeAnimation) {
if (_scene->_activeAnimation->getCurrentFrame() > 200) {
_scene->_sequences.addTimer(120, 2);
} else {
_waitingMeteoFl = true;
_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));
_scene->_kernelMessages.setQuoted(msgIndex, 4, false);
} else {
_action._inProgress = false;
return;
}
}
} else {
_scene->_sequences.addTimer(120, 2);
}
break;
case 2:
if (!_scene->_activeAnimation)
_vm->_dialogs->show(20222);
_meteorologistSpecial = false;
_scene->_sequences.remove(_globals._sequenceIndexes[10]);
_globals._sequenceIndexes[9] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
break;
case 3:
_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1);
_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
_game._player._stepEnabled = true;
break;
default:
_action._inProgress = false;
return;
}
}
} else if (_action.isAction(VERB_WALK_INSIDE, NOUN_HUT)) {
setRandomKernelMessage();
} else if (_action.isAction(VERB_LOOK, NOUN_ROCKS)) {
_vm->_dialogs->show(20202);
} else if (_action.isAction(VERB_LOOK, NOUN_FIRE_PIT)) {
_vm->_dialogs->show(20203);
} else if (_action.isAction(VERB_LOOK, NOUN_GRASS)) {
_vm->_dialogs->show(20204);
} else if (_action.isAction(VERB_LOOK, NOUN_FIELD_TO_NORTH)) {
if ((_globals[kMeteorologistStatus] == METEOROLOGIST_ABSENT) || (_globals[kMeteorologistStatus] == METEOROLOGIST_GONE))
_vm->_dialogs->show(20205);
else if (_globals[kMeteorologistStatus] == METEOROLOGIST_PRESENT)
_vm->_dialogs->show(20220);
} else if (_action.isAction(VERB_LOOK, NOUN_WATCH_TOWER)) {
_vm->_dialogs->show(20206);
} else if (_action.isAction(VERB_LOOK, NOUN_TALL_GRASS)) {
_vm->_dialogs->show(20207);
} else if (_action.isAction(VERB_LOOK, NOUN_TREES)) {
_vm->_dialogs->show(20208);
} else if (_action.isAction(VERB_LOOK, NOUN_TREE)) {
_vm->_dialogs->show(20209);
} else if (_action.isAction(VERB_LOOK, NOUN_SKY)) {
_vm->_dialogs->show(20210);
} else if (_action.isAction(VERB_LOOK, NOUN_HUT)) {
if ((_game._player._playerPos == Common::Point(77, 105)) && (_game._player._facing == FACING_NORTH))
_vm->_dialogs->show(20212);
else
_vm->_dialogs->show(20211);
} else if (_action.isAction(VERB_LOOK, NOUN_STRANGE_DEVICE)) {
_vm->_dialogs->show(20213);
} else if (_action.isAction(VERB_LOOK, NOUN_OCEAN_IN_DISTANCE)) {
_vm->_dialogs->show(20214);
} else if (_action.isAction(VERB_LOOK, NOUN_SKULL)) {
_vm->_dialogs->show(20215);
} else if (_action.isAction(VERB_TAKE, NOUN_SKULL)) {
_vm->_dialogs->show(20216);
} else if (_action.isAction(VERB_LOOK, NOUN_BONES) && _action._commandSource == 4) {
_vm->_dialogs->show(20217);
} else {
return;
}
_action._inProgress = false;
}
/*****************************************************************************/
Scene203::Scene203(MADSEngine *vm) : Scene2xx(vm) {
_rhotundaEat2Fl = false;
_rhotundaEatFl = false;
}
void Scene203::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsByte(_rhotundaEat2Fl);
s.syncAsByte(_rhotundaEatFl);
}
void Scene203::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(477);
}
void Scene203::enter() {
if (_scene->_priorSceneId == 202) {
_game._player._playerPos = Common::Point(187, 99);
_game._player._facing = FACING_SOUTH;
} else if (_scene->_priorSceneId == 209) {
_game._player._playerPos = Common::Point(308, 117);
_game._player._facing = FACING_WEST;
} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
_game._player._playerPos = Common::Point(155, 152);
_game._player._facing = FACING_NORTH;
}
_rhotundaEatFl = false;
_rhotundaEat2Fl = false;
if ((_globals[kRhotundaStatus] == 0) && (!_scene->_roomChanged)) {
_rhotundaEatFl = true;
_game._player.walk(Common::Point(158, 135), FACING_SOUTH);
int idx = _scene->_dynamicHotspots.add(131, 396, 0, Common::Rect(0, 0, 320, 156));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(155, 152), FACING_SOUTH);
_scene->_dynamicHotspots.setCursor(idx, CURSOR_GO_DOWN);
}
if (!_rhotundaEatFl) {
_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('b', -1));
if (_vm->getRandomNumber(1, 3) == 2) {
_globals._spriteIndexes[15] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 9, 1, 0, 0);
int idx = _scene->_dynamicHotspots.add(477, 209, _globals._spriteIndexes[15], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
_vm->_sound->command(14);
}
}
_game.loadQuoteSet(0x67, 0x68, 0x69, 0x6A, 0x5A, 0);
if (_rhotundaEatFl) {
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(_vm->getRandomNumber(103, 106)));
}
sceneEntrySound();
}
void Scene203::step() {
if (!_rhotundaEatFl)
return;
if ((_game._trigger == 0) && _rhotundaEat2Fl)
return;
if ((_game._player._playerPos != Common::Point(158, 136)) || (_game._player._facing != FACING_SOUTH))
return;
_rhotundaEat2Fl = true;
if (_game._trigger == 0) {
_game._player._visible = false;
_game._player._stepEnabled = false;
_vm->_palette->lock();
_scene->_kernelMessages.reset();
_scene->resetScene();
_vm->_events->setCursor2(CURSOR_WAIT);
_scene->loadAnimation(Resources::formatName(203, 'a', -1, EXT_AA, ""), 81);
} else if (_game._trigger == 81) {
_scene->_nextSceneId = 208;
_scene->_reloadSceneFlag = true;
}
}
void Scene203::preActions() {
if (_rhotundaEatFl && !_action.isAction(VERB_WALK_TOWARDS, NOUN_FIELD_TO_SOUTH)) {
_game._player.walk(Common::Point(158, 136), FACING_SOUTH);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_WALKTO, NOUN_OPEN_AREA_TO_EAST))
_game._player._walkOffScreenSceneId = 209;
}
void Scene203::actions() {
if (_action._savedFields._lookFlag) {
_vm->_dialogs->show(20307);
} else if (_action.isAction(VERB_WALK_TOWARDS, NOUN_FIELD_TO_SOUTH)) {
_scene->_nextSceneId = 208;
} else if (_action.isAction(VERB_WALK_TOWARDS, NOUN_FIELD_TO_NORTH)) {
_scene->_nextSceneId = 202;
} else if (_action.isAction(VERB_LOOK, NOUN_SKY)) {
_vm->_dialogs->show(20301);
} else if (_action.isAction(VERB_LOOK, NOUN_CLIFF_FACE)) {
_vm->_dialogs->show(20302);
} else if (_action.isAction(VERB_LOOK, NOUN_PALM_TREE)) {
_vm->_dialogs->show(20303);
} else if (_action.isAction(VERB_LOOK, NOUN_FIELD_TO_NORTH)) {
_vm->_dialogs->show(20304);
} else if (_action.isAction(VERB_LOOK, NOUN_GRASSY_FIELD)) {
_vm->_dialogs->show(20305);
} else if (_action.isAction(VERB_LOOK, NOUN_BOULDERS)) {
_vm->_dialogs->show(20305);
} else
return;
_action._inProgress = false;
}
/*****************************************************************************/
void Scene205::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(VERB_WALKTO);
_scene->addActiveVocab(NOUN_CHICKEN);
_scene->addActiveVocab(NOUN_PIRANHA);
}
Scene205::Scene205(MADSEngine *vm) : Scene2xx(vm) {
_lastFishTime = _scene->_frameStartTime;
_chickenTime = _scene->_frameStartTime;
_beingKicked = false;
_kernelMessage = -1;
}
void Scene205::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsByte(_beingKicked);
s.syncAsSint16LE(_kernelMessage);
}
void Scene205::enter() {
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 0));
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 1));
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 2));
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('f', -1));
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('c', -1));
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('p', -1));
if (_globals[kSexOfRex] == SEX_MALE)
_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('a', 1));
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 10, 0, 0, 3);
int idx = _scene->_dynamicHotspots.add(73, 13, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(162, 120), FACING_NORTHEAST);
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 15, 0, 0, 0);
idx = _scene->_dynamicHotspots.add(73, 13, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(162, 120), FACING_NORTHEAST);
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 0, 0, 0);
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 0, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 11);
if (!_game._visitedScenes._sceneRevisited) {
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 1, 0, 0);
idx = _scene->_dynamicHotspots.add(269, 13, _globals._sequenceIndexes[6], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
}
if (_game._objects[12]._roomNumber == 205) {
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 7, 0, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 11);
} else {
_scene->_hotspots.activate(450, false);
}
_beingKicked = false;
_game.loadQuoteSet(0x6B, 0x70, 0x71, 0x72, 0x5A, 0x74, 0x75, 0x76, 0x77, 0x78, 0x73, 0x79, 0x7A, 0x7B, 0x7C,
0x7D, 0x7E, 0x7F, 0x80, 0xAC, 0xAD, 0xAE, 0x6C, 0x6D, 0x6E, 0x6F, 0x2, 0);
_dialog1.setup(0x2A, 0x5A, 0x78, 0x74, 0x75, 0x76, 0x77, 0);
if (!_game._visitedScenes._sceneRevisited)
_dialog1.set(0x5A, 0x74, 0x75, 0x77, 0);
_vm->_palette->setEntry(250, 63, 50, 20);
_vm->_palette->setEntry(251, 50, 40, 15);
_vm->_palette->setEntry(252, 63, 63, 40);
_vm->_palette->setEntry(253, 50, 50, 30);
_chickenTime = _vm->_game->_scene._frameStartTime;
if (_globals[kSexOfRex] == SEX_FEMALE)
_scene->_kernelMessages.initRandomMessages(3,
Common::Rect(195, 99, 264, 134), 13, 2, 0xFDFC, 60,
108, 108, 109, 109, 110, 110, 111, 108, 0);
if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
_game._player._playerPos = Common::Point(99, 152);
if (_globals[kSexOfRex] != SEX_MALE) {
_scene->loadAnimation(formAnimName('a', -1));
_scene->_activeAnimation->_resetFlag = true;
} else {
_beingKicked = true;
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
_game._player._visible = false;
_game._player._stepEnabled = false;
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 2);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 6, 73);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 11, 74);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
}
sceneEntrySound();
}
void Scene205::step() {
if (_globals[kSexOfRex] == SEX_FEMALE) {
_scene->_kernelMessages.randomServer();
if (_vm->_game->_scene._frameStartTime >= _chickenTime) {
int chanceMinor = _scene->_kernelMessages.checkRandom() + 1;
if (_scene->_kernelMessages.generateRandom(100, chanceMinor))
_vm->_sound->command(28);
_chickenTime = _vm->_game->_scene._frameStartTime + 2;
}
}
if (_vm->_game->_scene._frameStartTime - _lastFishTime > 1300) {
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(
_globals._spriteIndexes[6], false, 5, 1, 0, 0);
int idx = _scene->_dynamicHotspots.add(269, 13, _globals._sequenceIndexes[6],
Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
_lastFishTime = _vm->_game->_scene._frameStartTime;
}
if (_game._trigger == 73)
_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 0, 60, _game.getQuote(112));
if (_game._trigger == 74) {
_vm->_sound->command(26);
_scene->_kernelMessages.add(Common::Point(106, 90), 0x1110, 32, 0, 60, _game.getQuote(113));
}
if (_game._trigger == 71) {
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 0, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 2);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], -2, -2);
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 72, 180, _game.getQuote(114));
}
if (_game._trigger == 72)
_scene->_nextSceneId = 211;
}
void Scene205::handleWomanSpeech(int quote) {
_kernelMessage = _scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 0, 0, 9999999, _game.getQuote(quote));
}
void Scene205::actions() {
if (_game._screenObjects._inputMode == kInputConversation) {
if (_kernelMessage >= 0)
_scene->_kernelMessages.remove(_kernelMessage);
_kernelMessage = -1;
if (_game._trigger == 0) {
_game._player._stepEnabled = false;
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, _game.getQuote(_action._activeAction._verbId));
} else {
if ((_game._trigger > 1) || (_action._activeAction._verbId != 0x76))
_game._player._stepEnabled = true;
switch (_action._activeAction._verbId) {
case 0x5A:
handleWomanSpeech(0x7A);
_dialog1.write(0x78, true);
_dialog1.write(0x5A, false);
break;
case 0x74:
handleWomanSpeech(0x7C);
_dialog1.write(0x74, false);
_dialog1.write(0x76, true);
break;
case 0x75:
case 0x78:
handleWomanSpeech(0x7B);
_dialog1.write(_action._activeAction._verbId, false);
_vm->_dialogs->show(20501);
break;
case 0x76:
if (_game._trigger == 1) {
handleWomanSpeech(0x7D);
_scene->_sequences.addTimer(120, 2);
} else if (_game._trigger == 2) {
handleWomanSpeech(0x7E);
_dialog1.write(0x76, false);
_globals[kChickenPermitted] = true;
}
break;
case 0x77:
_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 0, 0, 120, _game.getQuote(0x7F));
_scene->_userInterface.setup(kInputBuildingSentences);
break;
default:
break;
}
if (_action._activeAction._verbId != 0x77)
_dialog1.start();
}
} else if (_action._lookFlag)
_vm->_dialogs->show(20502);
else if (_action.isAction(VERB_LOOK, NOUN_BINOCULARS, NOUN_OPPOSITE_BANK))
_vm->_dialogs->show(20518);
else if (_action.isAction(VERB_TALKTO, NOUN_NATIVE_WOMAN)) {
if (_game._trigger == 0) {
_game._player._stepEnabled = false;
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, _game.getQuote(0x73));
} else if (_game._trigger == 1) {
_game._player._stepEnabled = true;
handleWomanSpeech (0x79);
_dialog1.write(0x5A, true);
_dialog1.write(0x75, true);
_dialog1.start();
}
} else if (_action.isAction(VERB_GIVE, NOUN_NATIVE_WOMAN) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
if (_game._trigger == 0) {
_game._player._stepEnabled = false;
int rndVal = _vm->getRandomNumber(0xAC, 0xAE);
_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 1, 120, _game.getQuote(rndVal));
} else if (_game._trigger == 1)
_game._player._stepEnabled = true;
} else if (_action.isAction(VERB_WALKTO, NOUN_OPPOSITE_BANK)) {
if (_game._trigger == 0) {
_game._player._visible = false;
_game._player._stepEnabled = false;
_vm->_palette->lock();
_scene->_kernelMessages.reset();
_game._player.removePlayerSprites();
_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('a', 0));
_vm->_palette->refreshSceneColors();
_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], -1);
_vm->_sound->command(27);
} else if (_game._trigger == 1) {
if (_scene->_activeAnimation != nullptr)
_scene->_activeAnimation->resetSpriteSetsCount();
_vm->_dialogs->show(20516);
_scene->_reloadSceneFlag = true;
}
} else {
if (_action.isAction(VERB_WALK_DOWN, NOUN_PATH_TO_SOUTH))
_scene->_nextSceneId = 210;
if (_action.isAction(VERB_WALKTO, NOUN_FIRE_PIT) || _action.isAction(VERB_WALKTO, NOUN_CHICKEN_ON_SPIT)) {
if (_game._objects.isInRoom(OBJ_CHICKEN)) {
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x6B));
}
} else if (_action.isAction(VERB_TAKE, NOUN_CHICKEN_ON_SPIT) && _globals[kChickenPermitted] && _game._objects.isInRoom(OBJ_CHICKEN)) {
_game._objects.addToInventory(OBJ_CHICKEN);
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_scene->_hotspots.activate(NOUN_CHICKEN_ON_SPIT, false);
_vm->_dialogs->showItem(OBJ_CHICKEN, 812);
} else if (_action.isAction(VERB_TAKE, NOUN_CHICKEN_ON_SPIT) && (!_globals[kChickenPermitted]))
_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 0, 120, _game.getQuote(0x80));
else if (_action.isAction(VERB_LOOK, NOUN_NATIVE_WOMAN))
_vm->_dialogs->show(20503);
else if (_action.isAction(VERB_LOOK, NOUN_HUT))
_vm->_dialogs->show(20504);
else if (_action.isAction(VERB_LOOK, NOUN_CHICKEN) && (_action._mainObjectSource == 4))
_vm->_dialogs->show(20505);
else if (_action.isAction(VERB_TAKE, NOUN_CHICKEN) && (_action._mainObjectSource == 4))
_vm->_dialogs->show(20506);
else if (_action.isAction(VERB_LOOK, NOUN_CHICKEN_ON_SPIT))
_vm->_dialogs->show(20507);
else if (_action.isAction(VERB_LOOK, NOUN_FIRE_PIT))
_vm->_dialogs->show(20508);
else if (_action.isAction(VERB_TAKE, NOUN_FIRE_PIT))
_vm->_dialogs->show(20509);
else if (_action.isAction(VERB_LOOK, NOUN_STREAM))
_vm->_dialogs->show(20510);
else if (_action.isAction(VERB_LOOK, NOUN_OPPOSITE_BANK))
_vm->_dialogs->show(20511);
else if (_game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))
&& ( _action.isAction(VERB_GIVE, NOUN_STREAM) || _action.isAction(VERB_THROW, NOUN_STREAM)
|| _action.isAction(VERB_GIVE, NOUN_PIRANHA) || _action.isAction(VERB_THROW, NOUN_PIRANHA)))
_vm->_dialogs->show(20512);
else if (_action.isAction(VERB_LOOK, NOUN_PIRANHA))
_vm->_dialogs->show(20513);
else if (_action.isAction(VERB_LOOK, NOUN_TWINKIFRUIT_BUSH))
_vm->_dialogs->show(20514);
else if (_action.isAction(VERB_TAKE, NOUN_TWINKIFRUIT_BUSH))
_vm->_dialogs->show(20515);
else if (_action.isAction(VERB_TAKE, NOUN_NATIVE_WOMAN))
_vm->_dialogs->show(20517);
else
return;
}
_action._inProgress = false;
}
/*****************************************************************************/
Scene207::Scene207(MADSEngine *vm) : Scene2xx(vm) {
_vultureFl = false;
_spiderFl = false;
_eyeFl = false;
_spiderHotspotId = -1;
_vultureHotspotId = -1;
_spiderTime = _game._player._priorTimer;
_vultureTime = _game._player._priorTimer;
}
void Scene207::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsByte(_vultureFl);
s.syncAsByte(_spiderFl);
s.syncAsByte(_eyeFl);
s.syncAsSint32LE(_spiderHotspotId);
s.syncAsSint32LE(_vultureHotspotId);
}
void Scene207::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(NOUN_VULTURE);
_scene->addActiveVocab(VERB_WALKTO);
_scene->addActiveVocab(NOUN_SPIDER);
_scene->addActiveVocab(VERB_WALKTO);
}
void Scene207::enter() {
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('h', 0));
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('h', 1));
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('c', -1));
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('e', 0));
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('e', 1));
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('g', 1));
_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('g', 0));
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 7, 0, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 7);
int var2;
if (!_game._visitedScenes._sceneRevisited) {
var2 = 1;
} else {
var2 = _vm->getRandomNumber(4) + 1;
}
if (var2 > 2)
_vultureFl = false;
else
_vultureFl = true;
_spiderFl = (var2 & 1);
if (_vultureFl) {
_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], false, 30, 0, 0, 400);
_vultureHotspotId = _scene->_dynamicHotspots.add(389, 13, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(_vultureHotspotId, Common::Point(254, 94), FACING_WEST);
}
if (_spiderFl) {
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 7, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], -1, -1);
_spiderHotspotId = _scene->_dynamicHotspots.add(333, 13, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(_spiderHotspotId, Common::Point(59, 132), FACING_SOUTH);
}
_eyeFl = false;
if (_scene->_priorSceneId == 211) {
_game._player._playerPos = Common::Point(13, 105);
_game._player._facing = FACING_EAST;
} else if (_scene->_priorSceneId == 214) {
_game._player._playerPos = Common::Point(164, 117);
_game._player._facing = FACING_SOUTH;
} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
_game._player._playerPos = Common::Point(305, 131);
}
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 10, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 22);
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 6);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
}
void Scene207::moveVulture() {
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
_vm->_sound->command(43);
_vultureFl = false;
_vultureTime = _game._player._priorTimer;
_scene->_dynamicHotspots.remove(_vultureHotspotId);
}
void Scene207::moveSpider() {
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 5, 1, 0, 0);
_spiderFl = false;
_spiderTime = _game._player._priorTimer;
_scene->_dynamicHotspots.remove(_spiderHotspotId);
}
void Scene207::step() {
Player &player = _game._player;
if (_vultureFl) {
if (((int32)player._priorTimer - _vultureTime) > 1700)
moveVulture();
}
if (_spiderFl) {
if (((int32)player._priorTimer - _spiderTime) > 800)
moveSpider();
}
if (_game._trigger == 70) {
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 10, 0, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 23, 34);
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 6);
}
if (_game._trigger == 71)
_eyeFl = false;
if (_eyeFl)
return;
if ((_game._player._playerPos.x >= 124) && (_game._player._playerPos.x <= 201)) {
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 6);
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 6);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
_eyeFl = true;
}
}
void Scene207::preActions() {
if (_action.isAction(VERB_WALK_DOWN, NOUN_PATH_TO_WEST))
_game._player._walkOffScreenSceneId = 211;
if (_action.isAction(VERB_WALK_TOWARDS, NOUN_OPEN_FIELD_TO_EAST))
_game._player._walkOffScreenSceneId = 208;
if (_action.isAction(VERB_WALKTO) || _action.isAction(VERB_LOOK)) {
if (_action.isObject(NOUN_VULTURE)) {
_vultureTime = -9999;
} else if (_action.isObject(NOUN_SPIDER)) {
_spiderTime = -9999;
}
}
}
void Scene207::actions() {
if (_action._savedFields._lookFlag)
_vm->_dialogs->show(20711);
else if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOORWAY))
_scene->_nextSceneId = 214;
else {
if ((_game._player._playerPos.x > 150) && (_game._player._playerPos.x < 189) &&
(_game._player._playerPos.y > 111) && (_game._player._playerPos.y < 130)) {
if ((_game._player._playerPos.x <= 162) || (_game._player._playerPos.x >= 181) ||
(_game._player._playerPos.y <= 115) || (_game._player._playerPos.y >= 126)) {
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 2, 0, 0);
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 2, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 6);
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 6);
}
} else if (_eyeFl) {
_scene->_sequences.remove(_globals._sequenceIndexes[7]);
_scene->_sequences.remove(_globals._sequenceIndexes[8]);
_eyeFl = false;
}
if (_action.isAction(VERB_LOOK, NOUN_DENSE_FOREST))
_vm->_dialogs->show(20701);
else if (_action.isAction(VERB_LOOK, NOUN_HEDGE))
_vm->_dialogs->show(20702);
else if (_action.isAction(VERB_LOOK, NOUN_SKULL_AND_CROSSBONES))
_vm->_dialogs->show(20703);
else if (_action.isAction(VERB_LOOK, NOUN_CAULDRON))
_vm->_dialogs->show(20704);
else if (_action.isAction(VERB_LOOK, NOUN_WITCHDOCTOR_HUT))
_vm->_dialogs->show(20705);
else if (_action.isAction(VERB_LOOK, NOUN_PATH_TO_WEST))
_vm->_dialogs->show(20706);
else if (_action.isAction(VERB_LOOK, NOUN_MOUNTAINS))
_vm->_dialogs->show(20707);
else if (_action.isAction(VERB_LOOK, NOUN_ALOE_PLANT))
_vm->_dialogs->show(20708);
else if (_action.isAction(VERB_LOOK, NOUN_LAWN))
_vm->_dialogs->show(20709);
else if (_action.isAction(VERB_LOOK, NOUN_VULTURE))
_vm->_dialogs->show(20710);
else if (_action.isAction(VERB_TAKE, NOUN_SKULL_AND_CROSSBONES))
_vm->_dialogs->show(20712);
else if (_action.isAction(VERB_TAKE, NOUN_ALOE_PLANT))
_vm->_dialogs->show(20713);
else if (_action.isAction(VERB_LOOK, NOUN_SPIDER))
_vm->_dialogs->show(20714);
else if (_action.isAction(VERB_TAKE, NOUN_SPIDER))
_vm->_dialogs->show(20715);
else
return;
}
_action._inProgress = false;
}
/*****************************************************************************/
Scene208::Scene208(MADSEngine *vm) : Scene2xx(vm) {
_rhotundaTurnFl = false;
_boundingFl = false;
_rhotundaTime = 0;
}
void Scene208::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsByte(_rhotundaTurnFl);
s.syncAsByte(_boundingFl);
s.syncAsSint32LE(_rhotundaTime);
}
void Scene208::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(NOUN_HUGE_LEGS);
_scene->addActiveVocab(NOUN_LEAF_COVERED_PIT);
_scene->addActiveVocab(NOUN_PILE_OF_LEAVES);
_scene->addActiveVocab(VERB_WALKTO);
}
void Scene208::updateTrap() {
if (_globals[kRhotundaStatus] == 1) {
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 8, 0, 0, 24);
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
int idx = _scene->_dynamicHotspots.add(NOUN_HUGE_LEGS, VERB_WALKTO, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(100, 146), FACING_NORTH);
_scene->_hotspots.activate(414, false);
return;
}
switch (_globals[kLeavesStatus]) {
case LEAVES_ON_GROUND: {
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 15);
int idx = _scene->_dynamicHotspots.add(NOUN_PILE_OF_LEAVES, VERB_WALKTO, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(60, 152), FACING_NORTH);
}
break;
case LEAVES_ON_TRAP: {
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 15);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
_scene->_hotspots.activate(NOUN_DEEP_PIT, false);
int idx = _scene->_dynamicHotspots.add(NOUN_LEAF_COVERED_PIT, VERB_WALKTO, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(100, 146), FACING_NORTH);
_scene->_dynamicHotspots[idx]._articleNumber = PREP_ON;
}
break;
}
}
void Scene208::enter() {
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('a', 1));
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 0));
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 1));
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 2));
_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RXMBD_8");
updateTrap();
_rhotundaTurnFl = false;
_boundingFl = false;
_scene->_kernelMessages._talkFont = _vm->_font->getFont(FONT_INTERFACE);
_scene->_textSpacing = 0;
if (_scene->_priorSceneId == 207) {
_game._player._playerPos = Common::Point(8, 122);
_game._player._facing = FACING_EAST;
} else if (_scene->_priorSceneId == 203) {
_game._player._playerPos = Common::Point(142, 108);
_game._player._facing = FACING_SOUTH;
} else if (_scene->_priorSceneId == 209) {
_game._player._playerPos = Common::Point(307, 123);
_game._player._facing = FACING_WEST;
} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
_game._player._playerPos = Common::Point(162, 149);
_game._player._facing = FACING_NORTH;
}
_game.loadQuoteSet(0x81, 0x46, 0);
if ((_scene->_priorSceneId == 207) && (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(129));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
}
_vm->_palette->setEntry(16, 0, 0, 63);
_vm->_palette->setEntry(17, 0, 0, 45);
sceneEntrySound();
}
void Scene208::step() {
if (_boundingFl && _scene->_activeAnimation &&
(_rhotundaTime <= _scene->_activeAnimation->getCurrentFrame())) {
_rhotundaTime = _scene->_activeAnimation->getCurrentFrame();
if (_rhotundaTime == 125)
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
}
if (!_rhotundaTurnFl)
return;
if ((_game._player._playerPos != Common::Point(20, 148)) || (_game._player._facing != FACING_EAST))
return;
if ((_game._trigger == 0) && _boundingFl)
return;
_boundingFl = true;
switch (_game._trigger) {
case 0:
_scene->loadAnimation(formAnimName('A', -1), 81);
_rhotundaTime = 0;
break;
case 81:
_scene->_sequences.remove(_globals._spriteIndexes[15]);
_globals[kRhotundaStatus] = 1;
updateTrap();
_scene->_sequences.addTimer(90, 82);
break;
case 82:
_game._player._stepEnabled = true;
break;
}
}
void Scene208::preActions() {
Player &player = _vm->_game->_player;
if (_action.isAction(VERB_LOOK) && player._readyToWalk)
player._needToWalk = true;
if (_action.isAction(VERB_WALK_TOWARDS, NOUN_GRASSLAND_TO_EAST))
player._walkOffScreenSceneId = 209;
if (_action.isAction(VERB_WALK_TOWARDS, NOUN_OPEN_AREA_TO_WEST))
player._walkOffScreenSceneId = 207;
}
void Scene208::subAction(int mode) {
switch (_game._trigger) {
case 0: {
_game._player._stepEnabled = false;
_game._player._visible = false;
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 1, 0, 0);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
int endTrigger;
if ((mode == 1) || (mode == 2))
endTrigger = 1;
else
endTrigger = 2;
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, endTrigger);
}
break;
case 1: {
int oldSeq = _globals._sequenceIndexes[5];
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 12, 3, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 3, 4);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldSeq);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
_vm->_sound->command(20);
}
break;
case 2: {
switch (mode) {
case 1:
_game._objects.addToInventory(OBJ_BIG_LEAVES);
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
_globals[kLeavesStatus] = 1;
break;
case 2:
_game._objects.setRoom(OBJ_BIG_LEAVES, 1);
_globals[kLeavesStatus] = 2;
updateTrap();
break;
case 3:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
_game._objects.removeFromInventory(OBJ_TWINKIFRUIT, 1);
_vm->_sound->command(34);
break;
case 4:
_game._objects.removeFromInventory(OBJ_BURGER, 1);
_vm->_sound->command(33);
break;
case 5:
_game._objects.removeFromInventory(OBJ_DEAD_FISH, 1);
_vm->_sound->command(33);
break;
default:
break;
}
int oldVal = _globals._sequenceIndexes[5];
_globals._sequenceIndexes[5] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[5], false, 6, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 3);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldVal);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
}
break;
case 3:
_game._player._visible = true;
_game._player._stepEnabled = true;
break;
default:
break;
}
}
void Scene208::actions() {
if (_action.isAction(VERB_WALK_TOWARDS, NOUN_LOWLANDS_TO_NORTH)) {
if (_globals[kRhotundaStatus])
_scene->_nextSceneId = 203;
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._trigger == 1)
_scene->_nextSceneId = 203;
} else if (_action.isAction(VERB_WALK_TOWARDS, NOUN_FIELD_TO_SOUTH))
_scene->_nextSceneId = 212;
else if (_action.isAction(VERB_TAKE, NOUN_PILE_OF_LEAVES) && (!_globals[kLeavesStatus] || _game._trigger)) {
subAction(1);
if (_game._player._stepEnabled)
_vm->_dialogs->showItem(OBJ_BIG_LEAVES, 0x326, 0);
} else if (_action.isAction(VERB_PUT, NOUN_BIG_LEAVES, NOUN_DEEP_PIT) && (_globals[kLeavesStatus] == 1 || _game._trigger))
subAction(2);
else if (_action.isAction(VERB_PUT, NOUN_TWINKIFRUIT, NOUN_LEAF_COVERED_PIT)) {
subAction(3);
if (_game._player._stepEnabled) {
_game._player._stepEnabled = false;
_rhotundaTurnFl = true;
_game._player.walk(Common::Point(20, 148), FACING_EAST);
}
} else if (_action.isAction(VERB_PUT, NOUN_BURGER, NOUN_LEAF_COVERED_PIT)) {
subAction(4);
if (_game._player._stepEnabled)
_vm->_dialogs->show(20812);
} else if (_action.isAction(VERB_PUT, NOUN_DEAD_FISH, NOUN_LEAF_COVERED_PIT)) {
subAction(5);
if (_game._player._stepEnabled)
_vm->_dialogs->show(20812);
} else if (_action.isAction(VERB_LOOK, NOUN_CUMULOUS_CLOUD))
_vm->_dialogs->show(20801);
else if (_action.isAction(VERB_LOOK, NOUN_OPEN_AREA_TO_WEST))
_vm->_dialogs->show(20802);
else if (_action.isAction(VERB_LOOK, NOUN_THORNY_BUSH))
_vm->_dialogs->show(20803);
else if (_action.isAction(VERB_LOOK, NOUN_ROCKS))
_vm->_dialogs->show(20804);
else if (_action.isAction(VERB_LOOK, NOUN_SMALL_CACTUS))
_vm->_dialogs->show(20805);
else if (_action.isAction(VERB_TAKE, NOUN_SMALL_CACTUS))
_vm->_dialogs->show(20806);
else if (_action.isAction(VERB_LOOK, NOUN_GRASSLAND_TO_EAST))
_vm->_dialogs->show(20807);
else if (_action.isAction(VERB_LOOK, NOUN_DEEP_PIT))
_vm->_dialogs->show(20808);
else if (_action.isAction(VERB_LOOK, NOUN_PILE_OF_LEAVES))
_vm->_dialogs->show(20809);
else if (_action.isAction(VERB_LOOK, NOUN_LEAF_COVERED_PIT)) {
if (_game._difficulty == DIFFICULTY_EASY)
_vm->_dialogs->show(20810);
else
_vm->_dialogs->show(20811);
} else if (_action.isAction(VERB_LOOK, NOUN_TREE) || _action.isAction(VERB_LOOK, NOUN_TREES))
_vm->_dialogs->show(20813);
else if (_action.isAction(VERB_TAKE, NOUN_LEAF_COVERED_PIT))
_vm->_dialogs->show(20814);
else if (_action.isAction(VERB_LOOK, NOUN_HUGE_LEGS))
_vm->_dialogs->show(20815);
else if (_action.isAction(VERB_TAKE, NOUN_HUGE_LEGS) || _action.isAction(VERB_PULL, NOUN_HUGE_LEGS))
_vm->_dialogs->show(20816);
else if (_action._savedFields._lookFlag && (_globals[kRhotundaStatus] == 1))
_vm->_dialogs->show(20819);
else if (_action._savedFields._lookFlag && (_globals[kLeavesStatus] == 2))
_vm->_dialogs->show(20818);
else if (_action._savedFields._lookFlag)
_vm->_dialogs->show(20817);
else
return;
_action._inProgress = false;
}
/*****************************************************************************/
Scene209::Scene209(MADSEngine *vm) : Scene2xx(vm) {
_dodgeFl = false;
_forceDodgeFl = false;
_pitchFl = false;
_fallFl = false;
_forceFallFl = false;
_playingAnimFl = false;
_shouldFallFl = false;
_shouldDodgeFl = false;
_monkeyPosition = 0;
_counter = 0;
_pauseMode = 0;
_binocularsDroppedFl = false;
_startShootingInTimerFl = false;
_dialogAbortVal = 0;
_playingDialogFl = false;
_shootMissedLastFl = false;
_removeMonkeyFl = false;
_shootReadyFl = false;
_pauseCounterThreshold = 0;
_pauseCounter = 0;
}
void Scene209::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsByte(_dodgeFl);
s.syncAsByte(_forceDodgeFl);
s.syncAsByte(_shouldDodgeFl);
s.syncAsByte(_pitchFl);
s.syncAsByte(_fallFl);
s.syncAsByte(_forceFallFl);
s.syncAsByte(_shouldFallFl);
s.syncAsByte(_playingAnimFl);
s.syncAsByte(_playingDialogFl);
s.syncAsSint32LE(_pauseMode);
s.syncAsSint32LE(_pauseCounterThreshold);
s.syncAsSint32LE(_pauseCounter);
s.syncAsByte(_removeMonkeyFl);
s.syncAsSint32LE(_monkeyPosition);
s.syncAsByte(_shootReadyFl);
s.syncAsByte(_startShootingInTimerFl);
s.syncAsByte(_shootMissedLastFl);
s.syncAsByte(_binocularsDroppedFl);
s.syncAsSint32LE(_dialogAbortVal);
s.syncAsSint32LE(_counter);
}
void Scene209::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(NOUN_PLANT_STALK);
}
void Scene209::handlePause() {
switch (_game._trigger) {
case 124:
if (++_pauseCounter <= _pauseCounterThreshold)
_scene->_sequences.addTimer(60, 124);
else
_pauseMode = 0;
break;
}
}
void Scene209::initPauseCounterThreshold() {
switch (_game._trigger) {
case 226:
_scene->_sequences.addTimer(1, 124);
_pauseCounterThreshold = _vm->getRandomNumber(7,12);
_pauseMode = 2;
_pauseCounter = 0;
break;
}
}
void Scene209::handlePeek() {
switch (_game._trigger) {
case 133:
_vm->_sound->command(18);
_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 51, 52);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 134);
break;
case 134: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addTimer(60, 135);
}
break;
case 135:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
_scene->_sequences.addTimer(10, 136);
break;
case 136:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
_scene->_sequences.addTimer(50, 137);
break;
case 137:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 51, 52);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 138);
break;
case 138:
_pauseMode = 1;
_scene->_hotspots.activate(227, false);
_playingAnimFl = false;
break;
}
}
void Scene209::handleVerticalMove() {
switch (_game._trigger) {
case 140:
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 8, 0, 1);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 5);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 141);
break;
case 141: {
_vm->_sound->command(18);
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 5);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addTimer(60, 142);
}
break;
case 142:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 5);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 143);
break;
case 143:
_pauseMode = 1;
_playingAnimFl = false;
_scene->_hotspots.activate(227, false);
break;
}
}
void Scene209::handleLookStay() {
switch (_game._trigger) {
case 145:
_vm->_sound->command(18);
_monkeyPosition = 2;
_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 51, 52);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 146);
break;
case 146: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addTimer(15, 147);
}
break;
case 147:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
_scene->_sequences.addTimer(8, 148);
break;
case 148:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
if (!_dodgeFl) {
_scene->_sequences.addTimer(90, 149);
} else {
_scene->_sequences.addTimer(1, 149);
_shouldDodgeFl = true;
}
break;
case 149:
_playingAnimFl = false;
break;
}
}
void Scene209::handleLookRight() {
switch (_game._trigger) {
case 151:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 2, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 8, 14);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 152);
break;
case 152: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addTimer(60, 153);
}
break;
case 153:
_playingAnimFl = false;
if (_dodgeFl)
_shouldDodgeFl = true;
break;
}
}
void Scene209::handleBlink() {
switch (_game._trigger) {
case 155:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
_scene->_sequences.addTimer(50, 156);
break;
case 156:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
_scene->_sequences.addTimer(10, 157);
break;
case 157:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
_scene->_sequences.addTimer(50, 158);
break;
case 158:
_playingAnimFl = false;
if (_dodgeFl)
_shouldDodgeFl = true;
break;
}
}
void Scene209::handleGetBinoculars() {
switch (_game._trigger) {
case 161:
_vm->_sound->command(18);
_monkeyPosition = 3;
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 8, 24);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 20, 165);
if (!_fallFl && !_dodgeFl) {
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 162);
} else {
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
}
break;
case 162: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 6, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 25);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
}
break;
case 163: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 0, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 24);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addTimer(8, 164);
}
break;
case 164:
_playingAnimFl = false;
if (_fallFl)
_shouldFallFl = true;
break;
case 165:
_vm->_sound->command(18);
break;
}
}
void Scene209::handleBinocularBlink() {
switch (_game._trigger) {
case 167: {
int oldIdx = _globals._sequenceIndexes[3];
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 2, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 25);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 168);
}
break;
case 168: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 0, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 24);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addTimer(30, 169);
}
break;
case 169:
_playingAnimFl = false;
if (_fallFl)
_shouldFallFl = true;
break;
}
}
void Scene209::handleBinocularScan() {
switch (_game._trigger) {
case 171: {
int oldIdx = _globals._sequenceIndexes[3];
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 43, 45);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 172);
}
break;
case 172: {
int oldIdx = _globals._sequenceIndexes[3];
int randAction = _vm->getRandomNumber(1,2);
switch (randAction) {
case 1:
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
break;
case 2:
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 4, 0, 0);
break;
}
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 25);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 173);
}
break;
case 173: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 26, 30);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 174);
}
break;
case 174: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 0, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 24);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addTimer(60, 175);
}
break;
case 175:
_playingAnimFl = false;
if (_fallFl)
_shouldFallFl = true;
break;
}
}
void Scene209::handleJumpInTree() {
switch (_game._trigger) {
case 178: {
int oldIdx = 0;
_monkeyPosition = 1;
if (_removeMonkeyFl)
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
else
oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 46, 49);
if (!_removeMonkeyFl)
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 179);
}
break;
case 179: {
_vm->_sound->command(18);
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 53, 61);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 180);
}
break;
case 180:
_removeMonkeyFl = true;
_pauseMode = 1;
_playingAnimFl = false;
_scene->_hotspots.activate(227, false);
break;
}
}
void Scene209::handleTongue() {
switch (_game._trigger) {
case 182: {
int oldIdx = _globals._sequenceIndexes[3];
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 26, 30);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 183);
}
break;
case 183: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 31, 33);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 184);
}
break;
case 184: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 36, 37);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 185);
}
break;
case 185: {
_vm->_sound->command(18);
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 6, 20, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 38, 39);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 186);
}
break;
case 186: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 40, 41);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 178);
_removeMonkeyFl = false;
}
break;
}
}
void Scene209::handleStandFromPeek() {
switch (_game._trigger) {
case 189:
_monkeyPosition = 4;
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 50);
_scene->_sequences.addTimer(8, 190);
break;
case 190:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
_scene->_sequences.addTimer(8, 191);
break;
case 191:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 5);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 192);
break;
case 192: {
_vm->_sound->command(18);
int oldIdx = _globals._sequenceIndexes[6];
_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldIdx);
_scene->_sequences.addTimer(8, 193);
}
break;
case 193:
_scene->_sequences.remove(_globals._sequenceIndexes[5]);
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
_scene->_sequences.addTimer(5, 194);
break;
case 194:
_playingAnimFl = false;
_counter = 0;
break;
}
}
void Scene209::handleStandBlink() {
switch (_game._trigger) {
case 246:
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
_scene->_sequences.addTimer(10, 247);
break;
case 247:
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 23);
_scene->_sequences.addTimer(8, 248);
break;
case 248:
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
_scene->_sequences.addTimer(10, 249);
break;
case 249:
_playingAnimFl = false;
break;
}
}
void Scene209::handleJumpAndHide() {
switch (_game._trigger) {
case 196:
_vm->_sound->command(18);
_monkeyPosition = 1;
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 16);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 197);
break;
case 197:
_pauseMode = 1;
_scene->_hotspots.activate(227, false);
_playingAnimFl = false;
break;
}
}
void Scene209::handleMonkeyEating() {
switch (_game._trigger) {
case 199:
_vm->_sound->command(18);
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 10, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 14);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 200);
break;
case 200: {
int oldIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 10, 10, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 15, 16);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 201);
}
break;
case 201: {
int oldIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 12);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
_scene->_sequences.addTimer(20, 202);
}
break;
case 202:
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 19);
_scene->_sequences.addTimer(20, 203);
break;
case 203:
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 17);
_scene->_sequences.addTimer(20, 204);
break;
case 204:
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 10, 8, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 18, 19);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 205);
break;
case 205: {
int oldIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 10, 8, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 20, 21);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 206);
}
break;
case 206: {
int oldIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 10, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 22, 25);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
if (!_dodgeFl && !_fallFl)
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 207);
else
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
}
break;
case 207: {
_vm->_sound->command(18);
int msgIndex = _scene->_kernelMessages.add(Common::Point(180, 25), 0xFDFC, 0, 0, 90, _game.getQuote(130));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
int oldIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 15, 4, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 26, 27);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 208);
}
break;
case 208: {
_scene->_kernelMessages.add(Common::Point(180, 39), 0xFDFC, 0, 0, 90, _game.getQuote(131));
int oldIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 10, 4, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 28, 29);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
}
break;
case 209: {
int oldIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
_scene->_sequences.addTimer(1, 210);
}
break;
case 210:
_playingAnimFl = false;
break;
}
}
void Scene209::handleMonkeyFall() {
switch (_game._trigger) {
case 219: {
_vm->_sound->command(25);
_scene->_sprites.remove(_globals._spriteIndexes[7]);
_scene->_sprites.remove(_globals._spriteIndexes[6]);
_scene->_sprites.remove(_globals._spriteIndexes[5]);
_scene->_sprites.remove(_globals._spriteIndexes[4]);
_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('m', 4));
_scene->_kernelMessages.add(Common::Point(180, 26), 0xFDFC, 0, 0, 90, _game.getQuote(151));
_scene->_sequences.addTimer(40, 100);
_scene->_hotspots.activate(227, false);
int oldIdx = _globals._sequenceIndexes[3];
_monkeyPosition = 1;
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 35);
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 6);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 220);
}
break;
case 220: {
_vm->_sound->command(18);
_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 90, _game.getQuote(159));
_scene->_hotspots.activate(227, false);
int oldIdx = _globals._sequenceIndexes[3];
_monkeyPosition = 1;
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 36, 42);
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 6);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 221);
}
break;
case 221: {
_game._objects.setRoom(OBJ_BINOCULARS, 209);
_binocularsDroppedFl = true;
int oldIdx = _globals._sequenceIndexes[8];
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], oldIdx);
_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(201, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[8], oldIdx);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 43, 72);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 222);
int idx = _scene->_dynamicHotspots.add(39, 13, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(200, 133), FACING_NORTH);
}
break;
case 222: {
_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 70, _game.getQuote(160));
int oldIdx = _globals._sequenceIndexes[8];
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 73, 78);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[8], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 223);
}
break;
case 223:
_scene->loadAnimation(Resources::formatName(209, 'e', -1, EXT_AA, ""), 224);
_vm->_sound->command(38);
break;
case 224:
_playingAnimFl = false;
_fallFl = false;
_counter = 0;
_pauseMode = 0;
_vm->_dialogs->show(20910);
_game._player._stepEnabled = true;
break;
}
}
void Scene209::handleMonkey1() {
switch (_game._trigger) {
case 212:
_scene->_sequences.remove(_globals._sequenceIndexes[4]);
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 9, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 13);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 213);
break;
case 213: {
int oldIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 7, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 1, 22);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[7], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 214);
}
break;
case 214: {
int oldIdx = _globals._sequenceIndexes[7];
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 7, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 23, 26);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[7], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 215);
int msgIndex = _scene->_kernelMessages.add(Common::Point(170, 21), 0xFDFC, 0, 0, 90, _game.getQuote(156));
_scene->_kernelMessages.setQuoted(msgIndex, 3, true);
}
break;
case 215: {
_vm->_sound->command(18);
_scene->loadAnimation(Resources::formatName(209, 'a', -1, EXT_AA, ""), 251);
int oldIdx = _globals._sequenceIndexes[7];
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 7, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 27, 35);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[7], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 216);
}
break;
case 216: {
int oldIdx = _globals._sequenceIndexes[7];
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
_scene->_sequences.addTimer(25, 217);
}
break;
case 217:
_pitchFl = false;
_counter = 0;
_pauseMode = 0;
_scene->_sequences.addTimer(1, 196);
break;
}
}
void Scene209::handleMonkey2() {
switch (_game._trigger) {
case 251:
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, _game.getQuote(137));
_vm->_sound->command(22);
_globals._sequenceIndexes[12] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[12], false, 11, 1, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[12], Common::Point(111, 133));
_scene->_sequences.setScale(_globals._sequenceIndexes[12], 79);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[12], 1, 6);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 252);
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
_game._player._visible = false;
break;
case 252: {
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(132));
int oldIdx = _globals._sequenceIndexes[12];
_globals._sequenceIndexes[12] = _scene->_sequences.startCycle(_globals._spriteIndexes[12], false, 7);
_scene->_sequences.setPosition(_globals._sequenceIndexes[12], Common::Point(111, 133));
_scene->_sequences.setScale(_globals._sequenceIndexes[12], 79);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[12], oldIdx);
_scene->_sequences.addTimer(120, 253);
}
break;
case 253:
_scene->_sequences.remove(_globals._sequenceIndexes[12]);
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
_game._player._visible = true;
_game._player._stepEnabled = true;
break;
}
}
void Scene209::handleDodge() {
switch (_game._trigger) {
case 241:
_scene->_hotspots.activate(227, true);
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
_scene->_sequences.addTimer(6, 242);
break;
case 242:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 5);
_scene->_sequences.addTimer(25, 243);
_vm->_sound->command(24);
break;
case 243:
_vm->_sound->command(18);
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
_playingAnimFl = false;
_pauseMode = 0;
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 90, _game.getQuote(155));
if (!_shootMissedLastFl) {
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(135));
_shootMissedLastFl = true;
} else {
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(136));
}
break;
}
}
void Scene209::enter() {
_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('a', 1));
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('e', -1));
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('a', 0));
_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('b', 1));
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('m', 0));
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('m', 1));
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('m', 3));
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('m', 6));
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('m', 8));
_globals._spriteIndexes[11] = _scene->_sprites.addSprites("*RXMBD_2");
_game.loadQuoteSet(0x82, 0x83, 0x84, 0x9C, 0x97, 0x95, 0x99, 0x9E, 0x98, 0x9B, 0xA0, 0x96, 0x9F,
0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x91, 0x92, 0x93, 0x94, 0x89, 0x85, 0x8A, 0x86, 0x87, 0x88, 0);
_vm->_palette->setEntry(252, 63, 44, 30);
_vm->_palette->setEntry(253, 63, 20, 22);
if (_game._objects.isInRoom(OBJ_PLANT_STALK)) {
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
int idx = _scene->_dynamicHotspots.add(271, 13, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(263, 129), FACING_SOUTH);
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 13);
}
if (_scene->_priorSceneId == 208) {
_game._player._playerPos = Common::Point(11, 121);
_game._player._facing = FACING_EAST;
} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
_game._player._playerPos = Common::Point(28, 121);
_game._player._facing = FACING_SOUTH;
}
if (_game._objects.isInRoom(OBJ_BINOCULARS)) {
_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(201, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
int idx = _scene->_dynamicHotspots.add(39, 13, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
_scene->_dynamicHotspots.setPosition(idx, Common::Point(200, 133), FACING_NORTH);
}
if (_scene->_roomChanged) {
_game._objects.addToInventory(OBJ_POISON_DARTS);
_game._objects.addToInventory(OBJ_BLOWGUN);
_globals[kMonkeyStatus] = MONKEY_HAS_BINOCULARS;
}
_pitchFl = false;
_fallFl = false;
_dodgeFl = false;
_playingAnimFl = false;
_monkeyPosition = 1;
_counter = 0;
_pauseMode = 0;
_forceFallFl = false;
_shouldFallFl = false;
_forceDodgeFl = false;
_binocularsDroppedFl = false;
_shouldDodgeFl = false;
_startShootingInTimerFl = false;
_dialogAbortVal = 5;
_playingDialogFl = false;
_shootMissedLastFl = false;
_removeMonkeyFl = true;
_shootReadyFl = false;
_scene->_hotspots.activate(227, false);
sceneEntrySound();
}
void Scene209::step() {
if (!_playingAnimFl && !_pitchFl && !_fallFl && !_dodgeFl && (_pauseMode == 0) && (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
int randAction = _vm->getRandomNumber(1,50);
switch (randAction) {
case 1:
if ((_monkeyPosition == 1) && (_counter < 2)) {
_scene->_sequences.addTimer(1, 133);
_playingAnimFl = true;
_scene->_hotspots.activate(227, true);
++_counter;
}
break;
case 2:
if ((_monkeyPosition == 1) && (_counter < 2)) {
_scene->_sequences.addTimer(1, 140);
_scene->_hotspots.activate(227, true);
_playingAnimFl = true;
++_counter;
}
break;
case 3:
if (_monkeyPosition == 1) {
_scene->_sequences.addTimer(1, 145);
_scene->_hotspots.activate(227, true);
_playingAnimFl = true;
_counter = 0;
}
break;
case 4:
if ((_monkeyPosition == 2) && (_counter < 2)) {
_scene->_sequences.addTimer(1, 151);
_scene->_hotspots.activate(227, true);
++_counter;
_playingAnimFl = true;
}
break;
case 5:
if (_monkeyPosition == 2) {
_scene->_sequences.addTimer(1, 161);
_scene->_hotspots.activate(227, true);
_counter = 0;
_playingAnimFl = true;
}
break;
case 6:
if (_monkeyPosition == 2) {
_scene->_sequences.addTimer(1, 189);
_scene->_hotspots.activate(227, true);
_counter = 0;
_playingAnimFl = true;
}
break;
case 7:
if (_monkeyPosition == 3) {
_scene->_hotspots.activate(227, true);
_scene->_sequences.addTimer(1, 167);
_playingAnimFl = true;
}
break;
case 8:
if (_monkeyPosition == 3) {
_scene->_sequences.addTimer(1, 178);
_playingAnimFl = true;
_scene->_hotspots.activate(227, true);
_counter = 0;
}
break;
case 9:
if ((_monkeyPosition == 3) && (_game._player._playerPos.x<120)) {
_scene->_sequences.addTimer(1, 182);
_scene->_hotspots.activate(227, true);
_counter = 0;
_playingAnimFl = true;
}
break;
case 10:
if (_monkeyPosition == 4) {
_scene->_sequences.addTimer(1, 196);
_scene->_hotspots.activate(227, true);
_playingAnimFl = true;
_counter = 0;
}
break;
case 11:
if ((_monkeyPosition == 4) && (_counter < 3)) {
_scene->_sequences.addTimer(1, 199);
_scene->_hotspots.activate(227, true);
++_counter;
_playingAnimFl = true;
}
break;
case 30:
if (_monkeyPosition == 4) {
_scene->_sequences.addTimer(1, 246);
_scene->_hotspots.activate(227, true);
_counter = 0;
_playingAnimFl = true;
}
break;
default:
if ((randAction >= 12) && (randAction <= 20) && (_monkeyPosition == 2) && (_counter < 5)) {
_scene->_sequences.addTimer(1, 155);
++_counter;
_playingAnimFl = true;
}
if ((randAction >= 21) && (randAction <= 29) && (_monkeyPosition == 3) && (_counter < 3)) {
_scene->_sequences.addTimer(1, 171);
_playingAnimFl = true;
++_counter;
}
break;
}
}
if (!_dodgeFl && !_pitchFl && !_fallFl && (_pauseMode == 1))
_scene->_sequences.addTimer(1, 226);
if (!_dodgeFl && !_pitchFl && !_fallFl && (_pauseMode == 2))
handlePause();
if (!_dodgeFl && !_pitchFl && !_fallFl && (_pauseMode == 1))
initPauseCounterThreshold();
handlePeek();
handleVerticalMove();
handleLookStay();
handleLookRight();
handleBlink();
handleGetBinoculars();
handleStandFromPeek();
handleDodge();
handleBinocularBlink();
handleBinocularScan();
handleJumpInTree();
handleTongue();
handleMonkeyFall();
handleJumpAndHide();
handleMonkeyEating();
handleMonkey1();
handleStandBlink();
handleMonkey2();
if ((_monkeyPosition == 1) && !_playingAnimFl && _fallFl) {
_scene->_sequences.addTimer(1, 145);
_playingAnimFl = true;
}
if ((_monkeyPosition == 2) && !_playingAnimFl && _fallFl) {
_scene->_sequences.addTimer(1, 161);
_playingAnimFl = true;
}
if ((_monkeyPosition == 4) && !_playingAnimFl && _fallFl) {
_scene->_sequences.addTimer(1, 196);
_playingAnimFl = true;
}
if ((_monkeyPosition == 3) && !_playingAnimFl && _fallFl && _forceFallFl) {
_scene->_sequences.addTimer(1, 219);
_playingAnimFl = true;
}
if ((_monkeyPosition == 1) && !_playingAnimFl && _pitchFl) {
_scene->_sequences.addTimer(1, 145);
_playingAnimFl = true;
}
if ((_monkeyPosition == 2) && !_playingAnimFl && _pitchFl) {
_scene->_sequences.addTimer(1, 189);
_playingAnimFl = true;
}
if ((_monkeyPosition == 4) && !_playingAnimFl && _pitchFl) {
_scene->_sequences.addTimer(1, 212);
_playingAnimFl = true;
}
if ((_monkeyPosition == 3) && !_playingAnimFl && _pitchFl) {
_scene->_sequences.addTimer(1, 178);
_playingAnimFl = true;
}
if ((_monkeyPosition == 1) && !_playingAnimFl && _dodgeFl) {
_scene->_sequences.addTimer(1, 145);
_playingAnimFl = true;
}
if ((_monkeyPosition == 4) && !_playingAnimFl && _dodgeFl) {
_scene->_sequences.addTimer(1, 196);
_playingAnimFl = true;
}
if ((_monkeyPosition == 3) && !_playingAnimFl && _dodgeFl) {
_scene->_sequences.addTimer(1, 178);
_playingAnimFl = true;
}
if ((_monkeyPosition == 2) && !_playingAnimFl && _dodgeFl && _forceDodgeFl) {
_scene->_sequences.addTimer(1, 241);
_playingAnimFl = true;
}
if (_dodgeFl || _fallFl) { /* if want to dodge or fall */
if (!_playingAnimFl && (_monkeyPosition == 2))
_shouldDodgeFl = true;
if (!_playingAnimFl && (_monkeyPosition == 3))
_shouldFallFl = true;
switch (_game._trigger) {
case 228:
_game._player._visible = false;
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 7);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 229);
break;
case 229: {
int oldIdx = _globals._sequenceIndexes[2];
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 7);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
_scene->_sequences.addTimer(35, 230);
}
break;
case 230:
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
_globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 7);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 231);
break;
case 231: {
int oldIdx = _globals._sequenceIndexes[2];
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 8, 10);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 232);
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], -1);
_game._player._visible = false;
}
break;
case 232: {
int oldIdx = _globals._sequenceIndexes[2];
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 10);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
_scene->_sequences.addTimer(2, 233);
_scene->_kernelMessages.reset();
if (_dodgeFl && (_monkeyPosition != 1) && (_monkeyPosition != 2))
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 34463, _game.getQuote(138));
if (_fallFl && (_monkeyPosition != 3))
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 34463, _game.getQuote(138));
}
break;
case 233:
_shootReadyFl = true;
break;
case 234:
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
_scene->_kernelMessages.reset();
if (_action.isAction(VERB_HOSE_DOWN, NOUN_BLOWGUN, NOUN_MONKEY)) {
_globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 7, 16, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 11, 12);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 12, 239);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
} else if (_action.isAction(VERB_SHOOT, NOUN_BLOWGUN, NOUN_MONKEY)) {
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 11, 12);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
_vm->_sound->command(23);
}
break;
case 235: {
int oldIdx = _globals._sequenceIndexes[2];
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 13);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
_scene->_sequences.addTimer(12, 236);
_forceFallFl = true;
_forceDodgeFl = true;
}
break;
case 236:
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 14, 16);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 237);
break;
case 237:
_game._player._visible = true;
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
_scene->_sequences.addTimer(1, 238);
break;
case 238:
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
if (_dodgeFl)
_game._player._stepEnabled = true;
_startShootingInTimerFl = false;
if (_fallFl) {
_globals[kMonkeyStatus] = MONKEY_IS_GONE;
_game._objects.setRoom(OBJ_POISON_DARTS, NOWHERE);
}
_dodgeFl = false;
_fallFl = false;
_forceFallFl = false;
_forceDodgeFl = false;
_shouldFallFl = false;
_shouldDodgeFl = false;
break;
case 239:
_vm->_sound->command(23);
break;
}
}
if (_game._trigger == 100)
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(134));
if (_shootReadyFl && (_shouldFallFl || _shouldDodgeFl)) {
_scene->_sequences.addTimer(4, 234);
_shootReadyFl = false;
}
}
void Scene209::preActions() {
if (_action.isAction(VERB_WALK_TOWARDS, NOUN_FIELD_TO_WEST))
_game._player._walkOffScreenSceneId = 208;
if (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
if ((_action.isAction(VERB_SHOOT) || _action.isAction(VERB_HOSE_DOWN)) && _action.isTarget(NOUN_MONKEY)
&& _action.isObject(NOUN_BLOWGUN) && _game._objects.isInInventory(OBJ_BLOWGUN) && _game._objects.isInInventory(OBJ_POISON_DARTS)) {
_game._player._prepareWalkPos = Common::Point(111, 129);
_game._player._prepareWalkFacing = FACING_NORTHEAST;
_game._player._needToWalk = true;
_game._player._readyToWalk = true;
}
if (_action.isAction(VERB_LOOK, NOUN_MONKEY) || _action.isAction(VERB_TALKTO, NOUN_MONKEY)) {
_game._player._prepareWalkPos = Common::Point(111, 129);
_game._player._prepareWalkFacing = FACING_NORTHEAST;
_game._player._needToWalk = true;
_game._player._readyToWalk = true;
}
}
}
void Scene209::actions() {
if (_action._lookFlag) {
_vm->_dialogs->show(20912);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_WALK_TOWARDS, NOUN_ROCKY_AREA_TO_NORTH)) {
_scene->_nextSceneId = 203;
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_TALKTO, NOUN_MONKEY) && !_pitchFl && !_playingDialogFl) {
_scene->_sequences.addTimer(1, _dialogAbortVal);
_playingDialogFl = true;
_game._player._stepEnabled = false;
_action._inProgress = false;
return;
}
switch (_game._trigger) {
case 130:
_game._player._stepEnabled = true;
_playingDialogFl = false;
_action._inProgress = false;
return;
case 5:
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 6, 180, _game.getQuote(139));
_action._inProgress = false;
return;
case 6:
_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, _game.getQuote(151));
_scene->_sequences.addTimer(60, 130);
_dialogAbortVal = 7;
_action._inProgress = false;
return;
case 7:
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 8, 180, _game.getQuote(140));
_action._inProgress = false;
return;
case 8:
_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, _game.getQuote(149));
_scene->_sequences.addTimer(60, 130);
_dialogAbortVal = 9;
_action._inProgress = false;
return;
case 9:
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, _game.getQuote(141));
_scene->_sequences.addTimer(200, 10);
_action._inProgress = false;
return;
case 10:
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 11, 180, _game.getQuote(142));
_action._inProgress = false;
return;
case 11:
_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, _game.getQuote(152));
_scene->_sequences.addTimer(60, 130);
_dialogAbortVal = 12;
_action._inProgress = false;
return;
case 12:
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 130, _game.getQuote(143));
_scene->_sequences.addTimer(150, 13);
_action._inProgress = false;
return;
case 13:
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 14, 180, _game.getQuote(145));
_action._inProgress = false;
return;
case 14:
_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, _game.getQuote(151));
_scene->_sequences.addTimer(60, 130);
_dialogAbortVal = 15;
_action._inProgress = false;
return;
case 15:
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 16, 180, _game.getQuote(146));
_action._inProgress = false;
return;
case 16:
_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 17, 60, _game.getQuote(154));
_action._inProgress = false;
return;
case 17:
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 130, 60, _game.getQuote(147));
_dialogAbortVal = 18;
_action._inProgress = false;
return;
case 18:
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, _game.getQuote(148));
_pitchFl = true;
_playingDialogFl = false;
_dialogAbortVal = 5;
_action._inProgress = false;
return;
}
if (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
if ((_action.isAction(VERB_SHOOT) || _action.isAction(VERB_HOSE_DOWN)) && _action.isTarget(NOUN_MONKEY)
&& _action.isObject(NOUN_BLOWGUN) && _game._objects.isInInventory(OBJ_BLOWGUN) && _game._objects.isInInventory(OBJ_POISON_DARTS)) {
if (_action.isAction(VERB_SHOOT, NOUN_BLOWGUN, NOUN_MONKEY) && !_startShootingInTimerFl) {
_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
_scene->_sequences.addTimer(1, 231);
_startShootingInTimerFl = true;
_game._player._stepEnabled = false;
_dodgeFl = true;
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_HOSE_DOWN, NOUN_BLOWGUN, NOUN_MONKEY) && !_startShootingInTimerFl) {
_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
_scene->_sequences.addTimer(1, 228);
_game._player._stepEnabled = false;
_fallFl = true;
_startShootingInTimerFl = true;
_action._inProgress = false;
return;
}
}
if (_action.isAction(VERB_LOOK, NOUN_MONKEY)) {
_pitchFl = true;
_game._player._stepEnabled = false;
_vm->_dialogs->show(20914);
_action._inProgress = false;
return;
}
}
if (_action.isAction(VERB_TAKE, NOUN_PLANT_STALK) && (_game._trigger || _game._objects.isInRoom(OBJ_PLANT_STALK))) {
switch (_game._trigger) {
case 0:
_game._player._stepEnabled = false;
_game._player._visible = false;
_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], false, 3, 2, 0, 0);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[11]);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_SPRITE, 4, 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
break;
case 1:
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
_game._objects.addToInventory(OBJ_PLANT_STALK);
break;
case 2:
_game._player._visible = true;
_game._player._stepEnabled = true;
_scene->_sequences.addTimer(4, 3);
_vm->_dialogs->showItem(OBJ_PLANT_STALK, 0x328);
break;
case 3:
break;
}
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_TAKE, NOUN_BINOCULARS) && (_game._trigger || _game._objects.isInRoom(OBJ_BINOCULARS))) {
switch (_game._trigger) {
case 0:
_globals._spriteIndexes[10] = _scene->_sprites.addSprites("*RXMBD_8");
_game._player._stepEnabled = false;
_game._player._visible = false;
_globals._sequenceIndexes[10] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[10], false, 3, 2, 0, 0);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[10]);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_SPRITE, 4, 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
break;
case 1:
_scene->_sequences.remove(_globals._sequenceIndexes[9]);
_game._objects.addToInventory(OBJ_BINOCULARS);
break;
case 2:
_game._player._visible = true;
_game._player._stepEnabled = true;
_binocularsDroppedFl = false;
_scene->_sequences.addTimer(4, 3);
break;
case 3:
_vm->_dialogs->showItem (OBJ_BINOCULARS, 0x51AF);
_scene->_sprites.remove(_globals._spriteIndexes[10]);
break;
}
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_SKY)) {
_vm->_dialogs->show(20901);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_BAMBOO_LIKE_PLANT)) {
_vm->_dialogs->show(20902);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_MOUNTAINSIDE)) {
_vm->_dialogs->show(20903);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_GRASSY_FIELD)) {
_vm->_dialogs->show(20904);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_FIELD_TO_WEST)) {
_vm->_dialogs->show(20905);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_ROCKY_AREA_TO_NORTH)) {
_vm->_dialogs->show(20906);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_PLANT_STALK) && (_action._savedFields._mainObjectSource == 4)) {
_vm->_dialogs->show(20907);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_GIVE, NOUN_TWINKIFRUIT, NOUN_MONKEY) || _action.isAction(VERB_THROW, NOUN_TWINKIFRUIT, NOUN_MONKEY)) {
_vm->_dialogs->show(20909);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_TREES)) {
_vm->_dialogs->show(20913);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_THROW, NOUN_MONKEY) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
if (!_action.isObject(NOUN_POISON_DARTS)) {
_vm->_dialogs->show(20915);
}
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_THROW, NOUN_POISON_DARTS, NOUN_MONKEY)) {
_vm->_dialogs->show(20916);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_PALM_TREE)) {
if (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
if (_monkeyPosition == 1)
_vm->_dialogs->show(20917);
else
_vm->_dialogs->show(20918);
} else {
if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
_vm->_dialogs->show(20917);
else
_vm->_dialogs->show(20919);
}
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_MELON_MUSH)) {
_vm->_dialogs->show(20920);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_TAKE, NOUN_MELON_MUSH)) {
_vm->_dialogs->show(20921);
_action._inProgress = false;
return;
}
}
/*****************************************************************************/
Scene210::Scene210(MADSEngine *vm) : Scene2xx(vm) {
_curDialogNode = -1;
_nextHandsPlace = 0;
_twinkleAnimationType = 0;
_twinklesCurrentFrame = 0;
_shouldTalk = false;
_shouldFaceRex = false;
_shouldMoveHead = false;
_stopWalking = false;
_twinklesTalking = false;
_twinklesTalk2 = false;
_doorway = 0;
_subQuote2 = "";
}
void Scene210::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsSint32LE(_curDialogNode);
s.syncAsSint32LE(_nextHandsPlace);
s.syncAsSint32LE(_twinkleAnimationType);
s.syncAsSint32LE(_twinklesCurrentFrame);
s.syncAsByte(_shouldTalk);
s.syncAsByte(_shouldFaceRex);
s.syncAsByte(_shouldMoveHead);
s.syncAsByte(_stopWalking);
s.syncAsByte(_twinklesTalking);
s.syncAsByte(_twinklesTalk2);
s.syncAsSint32LE(_doorway);
s.syncString(_subQuote2);
}
void Scene210::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(NOUN_DOORWAY);
_scene->addActiveVocab(VERB_WALK_THROUGH);
}
void Scene210::handleConversations() {
if (_game._trigger == 0) {
_scene->_kernelMessages.reset();
_game._player._stepEnabled = false;
Common::String curQuote = _game.getQuote(_action._activeAction._verbId);
if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
Common::String subQuote1;
_game.splitQuote(curQuote, subQuote1, _subQuote2);
_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 240, subQuote1);
_scene->_sequences.addTimer(60, 50);
} else {
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, curQuote);
}
} else if (_game._trigger == 50) {
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 240, _subQuote2);
_scene->_sequences.addTimer(180, 1);
} else {
if (_game._trigger == 1)
_scene->_kernelMessages.reset();
switch (_curDialogNode) {
case 1:
handleConversation1();
break;
case 2:
handleConversation2();
break;
case 3:
handleConversation3();
break;
case 5:
handleConversation5();
break;
case 6:
handleConversation6();
break;
case 7:
handleConversation7();
break;
case 8:
handleConversation8();
break;
}
}
}
void Scene210::handleConversation1() {
switch (_action._activeAction._verbId) {
case 180:
setDialogNode(2);
break;
case 181:
setDialogNode(6);
break;
case 182:
setDialogNode(4);
break;
case 183:
setDialogNode(9);
break;
case 184:
setDialogNode(0);
break;
}
}
void Scene210::handleConversation2() {
switch (_action._activeAction._verbId) {
case 187:
setDialogNode(3);
break;
case 188:
setDialogNode(4);
break;
case 189:
setDialogNode(0);
break;
}
}
void Scene210::handleConversation3() {
switch (_action._activeAction._verbId) {
case 193:
setDialogNode(6);
break;
case 194:
setDialogNode(5);
break;
case 195:
setDialogNode(4);
break;
case 196:
setDialogNode(0);
break;
}
}
void Scene210::handleConversation5() {
switch (_action._activeAction._verbId) {
case 204:
setDialogNode(6);
break;
case 205:
case 206:
setDialogNode(4);
break;
case 207:
setDialogNode(0);
break;
}
}
void Scene210::handleConversation6() {
switch (_action._activeAction._verbId) {
case 211:
setDialogNode(7);
break;
case 212:
setDialogNode(4);
break;
case 213:
setDialogNode(0);
break;
}
}
void Scene210::handleConversation7() {
switch (_action._activeAction._verbId) {
case 216:
case 217:
case 219:
setDialogNode(4);
break;
case 218:
setDialogNode(8);
break;
case 220:
setDialogNode(0);
break;
}
}
void Scene210::handleConversation8() {
switch (_action._activeAction._verbId) {
case 223:
case 224:
setDialogNode(4);
break;
case 225:
case 226:
setDialogNode(9);
break;
case 227:
setDialogNode(0);
break;
}
}
void Scene210::setDialogNode(int node) {
switch (node) {
case 0:
_scene->_userInterface.setup(kInputBuildingSentences);
_shouldFaceRex = false;
_shouldTalk = false;
_game._player._stepEnabled = true;
_curDialogNode = 0;
break;
case 2:
switch (_game._trigger) {
case 1:
_nextHandsPlace = 1;
_shouldTalk = true;
_game._player._stepEnabled = false;
if (_twinklesTalking) {
handleTwinklesSpeech(0xB9, -1, 0);
_scene->_sequences.addTimer(180, 2);
} else {
_scene->_sequences.addTimer(6, 1);
}
break;
case 2:
_nextHandsPlace = 0;
handleTwinklesSpeech(186, 0, 0);
_scene->_sequences.addTimer(180, 3);
break;
default:
_nextHandsPlace = 0;
_shouldTalk = false;
_game._player._stepEnabled = true;
newNode(2);
break;
}
break;
case 3:
switch (_game._trigger) {
case 1:
_nextHandsPlace = 0;
_shouldTalk = true;
_game._player._stepEnabled = false;
if (_twinklesTalking) {
handleTwinklesSpeech(0xBE, -2, 0);
_scene->_sequences.addTimer(180, 2);
} else {
_scene->_sequences.addTimer(6, 1);
}
break;
case 2:
_nextHandsPlace = 2;
handleTwinklesSpeech(191, -1, 0);
_scene->_sequences.addTimer(180, 3);
break;
case 3:
_nextHandsPlace = 0;
handleTwinklesSpeech(192, 0, 0);
_scene->_sequences.addTimer(180, 4);
break;
default:
_shouldTalk = false;
_game._player._stepEnabled = true;
newNode(3);
break;
}
break;
case 4:
if (_game._trigger == 1) {
_nextHandsPlace = 1;
_shouldTalk = true;
_game._player._stepEnabled = false;
int quote;
if (_game._storyMode == STORYMODE_NAUGHTY)
quote = _vm->getRandomNumber(199, 201);
else
quote = _vm->getRandomNumber(197, 198);
if (_twinklesTalking) {
handleTwinklesSpeech(quote, 0, 360);
_scene->_sequences.addTimer(120, 2);
} else {
_scene->_sequences.addTimer(6, 1);
}
} else {
_scene->_userInterface.setup(kInputBuildingSentences);
_shouldFaceRex = false;
_shouldTalk = false;
_game._player._stepEnabled = true;
}
break;
case 5:
switch (_game._trigger) {
case 1:
_nextHandsPlace = 2;
_shouldTalk = true;
_game._player._stepEnabled = false;
if (_twinklesTalking) {
handleTwinklesSpeech(0xCA, -1, 0);
_scene->_sequences.addTimer(180, 2);
} else {
_scene->_sequences.addTimer(6, 1);
}
break;
case 2:
_nextHandsPlace = 1;
handleTwinklesSpeech(0xCB, 0, 0);
_scene->_sequences.addTimer(180, 3);
break;
default:
_nextHandsPlace = 2;
_shouldTalk = false;
_game._player._stepEnabled = true;
newNode(5);
break;
}
break;
case 6:
switch (_game._trigger) {
case 1:
_nextHandsPlace = 1;
_shouldTalk = true;
_game._player._stepEnabled = false;
if (_twinklesTalking) {
handleTwinklesSpeech(0xD0, -2, 0);
_scene->_sequences.addTimer(180, 2);
} else {
_scene->_sequences.addTimer(6, 1);
}
break;
case 2:
handleTwinklesSpeech(0xD1, -1, 0);
_scene->_sequences.addTimer(180, 3);
break;
case 3:
_nextHandsPlace = 1;
handleTwinklesSpeech(0xD2, 0, 0);
_scene->_sequences.addTimer(180, 4);
break;
default:
_nextHandsPlace = 0;
_shouldTalk = false;
_game._player._stepEnabled = true;
newNode(6);
break;
}
break;
case 7:
switch (_game._trigger) {
case 1:
_nextHandsPlace = 2;
_shouldTalk = true;
_game._player._stepEnabled = false;
if (_twinklesTalking) {
handleTwinklesSpeech(0xD6, -1, 0);
_scene->_sequences.addTimer(180, 2);
} else {
_scene->_sequences.addTimer(6, 1);
}
break;
case 2:
handleTwinklesSpeech(0xD7, 0, 0);
_scene->_sequences.addTimer(180, 3);
break;
default:
_shouldTalk = false;
_game._player._stepEnabled = true;
newNode(7);
break;
}
break;
case 8:
switch (_game._trigger) {
case 1:
_nextHandsPlace = 2;
_shouldTalk = true;
_game._player._stepEnabled = false;
if (_twinklesTalking) {
handleTwinklesSpeech(0xDD, -1, 0);
_scene->_sequences.addTimer(180, 2);
} else {
_scene->_sequences.addTimer(6, 1);
}
break;
case 2:
handleTwinklesSpeech(0xDE, 0, 0);
_scene->_sequences.addTimer(180, 3);
break;
default:
_shouldTalk = false;
_game._player._stepEnabled = true;
newNode(8);
break;
}
break;
case 9:
switch (_game._trigger) {
case 1:
_nextHandsPlace = 0;
_shouldTalk = true;
_game._player._stepEnabled = false;
if (_twinklesTalking) {
_scene->_userInterface.emptyConversationList();
_scene->_userInterface.setup(kInputConversation);
handleTwinklesSpeech(0xE4, -1, 0);
_scene->_sequences.addTimer(180, 2);
} else {
_scene->_sequences.addTimer(6, 1);
}
break;
case 2:
handleTwinklesSpeech(0xE5, 0, 0);
_scene->_sequences.addTimer(180, 3);
break;
case 3:
_twinkleAnimationType = 2;
_globals[kCurtainOpen] = true;
_game._player._visible = false;
_vm->_palette->lock();
_scene->_kernelMessages.reset();
_scene->freeAnimation();
_scene->_activeAnimation = nullptr;
_scene->resetScene();
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', -1));
_game.loadQuoteSet(0xE6, 0xE9, 0xEA, 0xE7, 0xE8, 0);
_scene->loadAnimation(formAnimName('B', -1), 4);
break;
case 4: {
_globals._spriteIndexes[8] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 5);
_scene->_sequences.setDepth(_globals._spriteIndexes[8], 1);
int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 20), 0x1110, 32, 5, 180, _game.getQuote(231));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
}
break;
case 5: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 40), 0xFDFC, 32, 6, 180, _game.getQuote(233));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
}
break;
case 6: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 60), 0x1110, 32, 7, 180, _game.getQuote(232));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
}
break;
case 7: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 80), 0xFDFC, 32, 8, 180, _game.getQuote(234));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
}
break;
case 8:
_globals[kTwinklesStatus] = TWINKLES_GONE;
_scene->_nextSceneId = 216;
break;
}
break;
}
}
void Scene210::handleTwinklesSpeech(int quoteId, int shiftX, uint32 delay) {
_scene->_kernelMessages.add(Common::Point(10, 70 + (shiftX * 14)), 0xFDFC, 0, 0, (delay == 0) ? 9999999 : delay, _game.getQuote(quoteId));
}
void Scene210::newNode(int node) {
_curDialogNode = node;
switch (_curDialogNode) {
case 1:
_conv1.start();
break;
case 2:
_conv2.start();
break;
case 3:
_conv3.start();
break;
case 5:
_conv5.start();
break;
case 6:
_conv6.start();
break;
case 7:
_conv7.start();
break;
case 8:
_conv8.start();
break;
default:
break;
}
}
void Scene210::restoreDialogNode(int node, int msgId, int posY) {
int curQuoteId = msgId;
int curY = 1 - posY;
for (int count = 0; count < posY; count++) {
handleTwinklesSpeech(curQuoteId, curY, 0);
curY++;
curQuoteId++;
}
newNode(node);
}
void Scene210::enter() {
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', -1));
if (!_game._visitedScenes._sceneRevisited)
_globals[kCurtainOpen] = 0;
if (_scene->_priorSceneId == 205)
_game._player._playerPos = Common::Point(277, 56);
else if (_scene->_priorSceneId == 215) {
_game._player._playerPos = Common::Point(168, 128);
_game._player._facing = FACING_SOUTH;
_globals[kCurtainOpen] = true;
} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
_game._player._playerPos = Common::Point(308, 132);
if (!_globals[kCurtainOpen]) {
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 5);
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
} else {
int idx = _scene->_dynamicHotspots.add(112, 395, -1, Common::Rect(163, 87, 163 + 19, 87 + 36));
_doorway = _scene->_dynamicHotspots.setPosition(idx, Common::Point(168, 127), FACING_NORTH);
_scene->_dynamicHotspots.setCursor(_doorway, CURSOR_GO_UP);
}
_game.loadQuoteSet(0x5A, 0x73, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB8, 0xB7,
0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA,
0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC,
0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0);
_conv1.setup(0x2E, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0);
if (!_game._visitedScenes._sceneRevisited) {
_conv1.set(0x2E, 0xB4, 0xB5, 0xB6, 0xB8, 0);
if (_game._widepipeCtr >= 2)
_conv1.write(0xB7, true);
}
bool sceneRevisited = _game._visitedScenes._sceneRevisited;
_conv2.setup(0x2F, 0xBC, 0xBB, 0xBD, sceneRevisited ? 0 : -1);
_conv3.setup(0x30, 0xC3, 0xC2, 0xC1, 0xC4, sceneRevisited ? 0 : -1);
_conv5.setup(0x31, 0xCD, 0xCC, 0xCE, 0xCF, sceneRevisited ? 0 : -1);
_conv6.setup(0x32, 0xD3, 0xD4, 0xD5, sceneRevisited ? 0 : -1);
_conv7.setup(0x33, 0xD8, 0xDA, 0xD9, 0xDB, 0xDC, sceneRevisited ? 0 : -1);
_conv8.setup(0x34, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, sceneRevisited ? 0 : -1);
_twinkleAnimationType = 0;
_twinklesCurrentFrame = 0;
if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
_shouldMoveHead = false;
_shouldFaceRex = false;
_shouldTalk = false;
_nextHandsPlace = 0;
_twinklesTalking = false;
_curDialogNode = 0;
_stopWalking = false;
_twinklesTalk2 = (_globals[kTwinklesApproached] > 0);
}
if (_globals[kTwinklesStatus] == 0) {
_scene->loadAnimation(formAnimName('A', -1));
_twinkleAnimationType = 1;
} else
_scene->_hotspots.activate(476, false);
if (_curDialogNode) {
int quote = 0;
int number = 0;
switch (_curDialogNode) {
case 1:
quote = 0xB3;
number = 1;
break;
case 2:
quote = 0xB9;
number = 2;
break;
case 3:
quote = 0xBE;
number = 3;
break;
case 5:
quote = 0xCA;
number = 2;
break;
case 6:
quote = 0xD0;
number = 3;
break;
case 7:
quote = 0xD6;
number = 2;
break;
case 8:
quote = 0xDD;
number = 2;
break;
}
restoreDialogNode(_curDialogNode, quote, number);
if (_scene->_activeAnimation)
_scene->_activeAnimation->setCurrentFrame(131);
}
_vm->_palette->setEntry(252, 63, 63, 10);
_vm->_palette->setEntry(253, 45, 45, 5);
sceneEntrySound();
}
void Scene210::step() {
if ((_twinkleAnimationType == 1) && _scene->_activeAnimation) {
if (_twinklesCurrentFrame != _scene->_activeAnimation->getCurrentFrame()) {
_twinklesCurrentFrame = _scene->_activeAnimation->getCurrentFrame();
int reset_frame = -1;
int random = _vm->getRandomNumber(1, 1000);
switch (_twinklesCurrentFrame) {
case 31:
case 58:
case 74:
case 108:
case 190:
if (_shouldFaceRex)
reset_frame = 108;
else if ((random <= 100) || _shouldMoveHead)
reset_frame = 74;
else if (random <= 300)
reset_frame = 58;
else if (random <= 500)
reset_frame = 31;
else
reset_frame = 0;
break;
case 80:
case 90:
_twinklesTalking = false;
if (_shouldMoveHead) {
reset_frame = 90;
} else if (_twinklesCurrentFrame == 90) {
if ((random <= 400) || _shouldFaceRex)
reset_frame = 99;
else
reset_frame = 79;
}
break;
case 98:
if (_shouldMoveHead)
reset_frame = 91;
break;
case 99:
if ((random <= 400) && !_shouldFaceRex)
reset_frame = 79;
break;
case 124:
case 136:
case 174:
case 143:
case 152:
if (_nextHandsPlace == 3)
reset_frame = 174;
else if (!_shouldFaceRex)
reset_frame = 174;
else if (_nextHandsPlace == 1)
reset_frame = 136;
else if (_nextHandsPlace == 2)
reset_frame = 152;
else if (_shouldTalk)
reset_frame = 124;
else
reset_frame = (random <= 200) ? 131 : 143;
break;
case 131:
if (_shouldTalk) {
switch (_nextHandsPlace) {
case 1:
reset_frame = 136;
break;
case 2:
reset_frame = 152;
break;
default:
reset_frame = 124;
break;
}
}
break;
case 138:
case 141:
if ((_nextHandsPlace == 0) || !_shouldFaceRex)
reset_frame = 141;
else if (_nextHandsPlace == 2)
reset_frame = 152;
else if (!_shouldTalk || (_twinklesCurrentFrame == 141))
reset_frame = 137;
break;
case 153:
case 169:
if ((_nextHandsPlace == 0) || !_shouldFaceRex)
reset_frame = 169;
else if (_nextHandsPlace == 1)
reset_frame = 136;
else if (_shouldTalk)
reset_frame = 153;
else
reset_frame = 162;
break;
case 162:
if (_shouldTalk) {
switch (_nextHandsPlace) {
case 0:
reset_frame = 124;
break;
case 1:
reset_frame = 136;
break;
default:
reset_frame = 153;
break;
}
}
break;
}
if (reset_frame >= 0) {
if (reset_frame != _scene->_activeAnimation->getCurrentFrame()) {
_scene->_activeAnimation->setCurrentFrame(reset_frame);
_twinklesCurrentFrame = reset_frame;
}
if ((reset_frame == 90) || (reset_frame == 91) || (reset_frame == 124) || (reset_frame == 153)
|| ((reset_frame == 137) && _shouldTalk)) {
_twinklesTalking = true;
} else {
_twinklesTalking = false;
}
}
}
}
if ((_twinkleAnimationType == 2) && _scene->_activeAnimation) {
if (_twinklesCurrentFrame != _scene->_activeAnimation->getCurrentFrame()) {
_twinklesCurrentFrame = _scene->_activeAnimation->getCurrentFrame();
int reset_frame = -1;
if (_twinklesCurrentFrame == 53) {
_scene->_kernelMessages.add(Common::Point(151, 61), 0xFDFC, 32, 70, 180, _game.getQuote(230));
_shouldTalk = true;
} else if ((_twinklesCurrentFrame == 75) && _shouldTalk)
reset_frame = 60;
if ((reset_frame >= 0) && (reset_frame != _scene->_activeAnimation->getCurrentFrame())) {
_scene->_activeAnimation->setCurrentFrame(reset_frame);
_twinklesCurrentFrame = reset_frame;
}
}
if (_game._trigger == 70)
_shouldTalk = false;
}
if ((_twinkleAnimationType == 1) && (_scene->_rails.getNext() > 0)) {
_game._player.walk(Common::Point(214, 150), FACING_NORTHWEST);
_scene->_rails.resetNext();
_stopWalking = true;
}
}
void Scene210::preActions() {
_stopWalking = false;
if (_action.isAction(VERB_WALK_DOWN, NOUN_PATH_TO_EAST))
_game._player._walkOffScreenSceneId = 211;
}
void Scene210::actions() {
if (_action.isAction(VERB_LOOK, NOUN_BINOCULARS, NOUN_HUT_TO_NORTH)) {
_vm->_dialogs->show(21017);
} else if (_game._screenObjects._inputMode == kInputConversation) {
handleConversations();
} else if (_action.isAction(VERB_TALKTO, NOUN_NATIVE_WOMAN) ||
((_game._player._playerPos == Common::Point(214, 150)) && (_game._player._facing == FACING_NORTHWEST) && (_twinkleAnimationType == 1) && _stopWalking)) {
switch (_game._trigger) {
case 0: {
_game._player._stepEnabled = false;
int quote;
if (_globals[kTwinklesApproached] == 0)
quote = 90;
else if (_globals[kTwinklesApproached] == 1)
quote = 115;
else
quote = 171;
_shouldFaceRex = true;
_nextHandsPlace = 0;
_scene->_kernelMessages.reset();
_scene->_kernelMessages.addQuote(quote, 1, 120);
}
break;
case 1:
_shouldTalk = true;
if (!_twinklesTalking) {
_scene->_sequences.addTimer(6, 1);
} else {
if (_globals[kTwinklesApproached] == 0) {
handleTwinklesSpeech(0xAF, -1, 0);
handleTwinklesSpeech(0xB0, 0, 0);
} else if (_globals[kTwinklesApproached] == 1) {
handleTwinklesSpeech(0xB1, 0, 0);
} else {
int quote = _twinklesTalk2 ? 0xB3 : 0xB2;
_twinklesTalk2 = true;
handleTwinklesSpeech(quote, 0, 0);
}
_scene->_sequences.addTimer(60, 3);
}
break;
case 3:
_game._player._stepEnabled = true;
_shouldMoveHead = false;
_shouldTalk = false;
if (_globals[kTwinklesApproached] < 2)
_globals[kTwinklesApproached]++;
_conv1.start();
_curDialogNode = 1;
break;
}
} else if (_action.isAction(VERB_GIVE, NOUN_NATIVE_WOMAN) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
switch (_game._trigger) {
case 0: {
int quote = _vm->getRandomNumber(172, 174);
_shouldMoveHead = true;
_game._player._stepEnabled = false;
handleTwinklesSpeech(quote, 0, 120);
_scene->_sequences.addTimer(120, 1);
}
break;
case 1:
_game._player._stepEnabled = true;
_shouldMoveHead = false;
break;
}
} else if (_action.isAction(VERB_WALK_DOWN, NOUN_PATH_TO_NORTH) || _action.isAction(VERB_WALK_TOWARDS, NOUN_HUT_TO_NORTH)) {
_scene->_nextSceneId = 205;
} else if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOORWAY)) {
_scene->_nextSceneId = 215;
} else if ((_action.isAction(VERB_PULL, NOUN_CURTAIN) || _action.isAction(VERB_OPEN, NOUN_CURTAIN)) && !_globals[kCurtainOpen]) {
switch (_game._trigger) {
case 0:
_game._player._stepEnabled = false;
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 12, 1, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
break;
case 1:
_game._player._stepEnabled = true;
_globals[kCurtainOpen] = true;
_doorway = _scene->_dynamicHotspots.add(112, 395, -1, Common::Rect(163, 87, 163 + 19, 87 + 36));
_scene->_dynamicHotspots.setPosition(_doorway, Common::Point(168, 127), FACING_NORTH);
_scene->_dynamicHotspots.setCursor(_doorway, CURSOR_GO_UP);
break;
}
} else if ((_action.isAction(VERB_PULL, NOUN_CURTAIN) || _action.isAction(VERB_CLOSE, NOUN_CURTAIN)) && _globals[kCurtainOpen]) {
switch (_game._trigger) {
case 0:
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
_game._player._stepEnabled = false;
_game._player._facing = FACING_NORTH;
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 12, 0, 0, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
_game._player._stepEnabled = false;
break;
case 1:
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 5);
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
_scene->_sequences.addTimer(48, 2);
break;
case 2:
_scene->_dynamicHotspots.remove(_doorway);
_game._player._stepEnabled = true;
_globals[kCurtainOpen] = false;
break;
}
} else if (_action.isAction(VERB_LOOK, NOUN_HUT)) {
if (_globals[kTwinklesStatus] == TWINKLES_GONE) {
if (_game._storyMode == STORYMODE_NAUGHTY)
_vm->_dialogs->show(21003);
else
_vm->_dialogs->show(21002);
} else {
_vm->_dialogs->show(21001);
}
} else if (_action.isAction(VERB_LOOK, NOUN_BRA)) {
_vm->_dialogs->show(21004);
} else if (_action.isAction(VERB_LOOK, NOUN_HOTPANTS)) {
_vm->_dialogs->show(21005);
} else if (_action.isAction(VERB_TAKE, NOUN_HOTPANTS) || _action.isAction(VERB_TAKE, NOUN_BRA)) {
_vm->_dialogs->show(21006);
} else if (_action.isAction(VERB_LOOK, NOUN_STREAM)) {
_vm->_dialogs->show(21007);
} else if (_action.isAction(VERB_LOOK, NOUN_BUSHY_FERN)) {
_vm->_dialogs->show(21008);
} else if (_action.isAction(VERB_LOOK, NOUN_VILLAGE_PATH)) {
_vm->_dialogs->show(21009);
} else if (_action.isAction(VERB_LOOK, NOUN_NATIVE_WOMAN)) {
_vm->_dialogs->show(21010);
} else if (_action.isAction(VERB_SHOOT, NOUN_NATIVE_WOMAN) || _action.isAction(VERB_HOSE_DOWN, NOUN_NATIVE_WOMAN)) {
_vm->_dialogs->show(21011);
} else if (_action.isAction(VERB_LOOK, NOUN_PATH_TO_NORTH)) {
_vm->_dialogs->show(21012);
} else if (_action.isAction(VERB_LOOK, NOUN_CURTAIN)) {
_vm->_dialogs->show(21013);
} else if (_action.isAction(VERB_LOOK, NOUN_CLOTHESLINE)) {
_vm->_dialogs->show(21014);
} else if (_action.isAction(VERB_TAKE, NOUN_CLOTHESLINE)) {
_vm->_dialogs->show(21015);
} else if (_action.isAction(VERB_LOOK, NOUN_HUT_TO_NORTH)) {
_vm->_dialogs->show(21016);
} else {
// Not handled
return;
}
_action._inProgress = false;
}
/*------------------------------------------------------------------------*/
Scene211::Scene211(MADSEngine *vm) : Scene2xx(vm) {
_ambushFl = false;
_wakeFl = false;
_monkeyFrame = 0;
_scrollY = 0;
_monkeyTime = 0;
}
void Scene211::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsByte(_ambushFl);
s.syncAsByte(_wakeFl);
s.syncAsSint32LE(_monkeyFrame);
s.syncAsSint32LE(_scrollY);
s.syncAsUint32LE(_monkeyTime);
}
void Scene211::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(NOUN_SLITHERING_SNAKE);
}
void Scene211::enter() {
_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*SC002Z2");
_wakeFl = false;
if (_scene->_priorSceneId == 210)
_game._player._playerPos = Common::Point(25, 148);
else if (_scene->_priorSceneId == 205) {
_game._player._playerPos = Common::Point(49, 133);
_game._player._facing = FACING_WEST;
_wakeFl = true;
_game._player._stepEnabled = false;
_game._player._visible = false;
_scene->loadAnimation(formAnimName('A', -1), 100);
_scene->_activeAnimation->setCurrentFrame(169);
} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
_game._player._playerPos = Common::Point(310, 31);
_game._player._facing = FACING_SOUTHWEST;
}
if (_vm->getRandomNumber(1, 8) == 1) {
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(202, 126));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 8);
_scene->_sequences.setMotion(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, -200, 0);
_scene->_dynamicHotspots.add(324, 13, _globals._sequenceIndexes[2], Common::Rect(1, 1, 1 + 41, 1 + 10));
}
if (_scene->_roomChanged)
_game._objects.addToInventory(OBJ_BINOCULARS);
_vm->_palette->setEntry(252, 63, 44, 30);
_vm->_palette->setEntry(253, 63, 20, 22);
_game.loadQuoteSet(0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 1, 0);
if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
_scene->_kernelMessages.initRandomMessages(2,
Common::Rect(0, 0, 54, 30), 13, 2, 0xFDFC, 60,
151, 152, 153, 154, 0);
_monkeyTime = _vm->_game->_scene._frameStartTime;
_scrollY = 30;
_ambushFl = false;
_monkeyFrame = 0;
sceneEntrySound();
}
void Scene211::step() {
if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
_scene->_kernelMessages.randomServer();
if (!_ambushFl && !_wakeFl && (_vm->_game->_scene._frameStartTime >= _monkeyTime)) {
int chanceMinor = _scene->_kernelMessages.checkRandom() * 4 + 1;
if (_scene->_kernelMessages.generateRandom(80, chanceMinor))
_vm->_sound->command(18);
_monkeyTime = _vm->_game->_scene._frameStartTime + 2;
}
if ((_game._player._playerPos == Common::Point(52, 132)) && (_game._player._facing == FACING_WEST) && !_game._player._moving &&
(_game._trigger || !_ambushFl)) {
switch (_game._trigger) {
case 0:
if (_game._objects.isInInventory(OBJ_BINOCULARS)) {
_ambushFl = true;
_monkeyFrame = 0;
_game._player._stepEnabled = false;
_game._player._visible = false;
_scene->_kernelMessages.reset();
_scene->loadAnimation(formAnimName('A', -1), 90);
_vm->_sound->command(19);
int count = (int)_game._objects._inventoryList.size();
for (int idx = 0; idx < count; idx++) {
if ((_game._objects._inventoryList[idx] == OBJ_BINOCULARS) && (_scene->_userInterface._selectedInvIndex != idx))
_scene->_userInterface.selectObject(idx);
}
}
break;
case 90:
_vm->_sound->command(10);
_game._player._stepEnabled = true;
_game._player._visible = true;
_game._player._playerPos = Common::Point(49, 133);
_ambushFl = false;
_globals[kMonkeyStatus] = MONKEY_HAS_BINOCULARS;
break;
}
}
}
if (_ambushFl && (_scene->_activeAnimation->getCurrentFrame() > _monkeyFrame)) {
_monkeyFrame = _scene->_activeAnimation->getCurrentFrame();
switch (_monkeyFrame) {
case 2: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(12, 4), 0xFDFC, 0, 0, 60, _game.getQuote(157));
_scene->_kernelMessages.setQuoted(msgIndex, 2, true);
}
break;
case 12: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(35, 20), 0xFDFC, 0, 0, 60, _game.getQuote(155));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
}
break;
case 42: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(60, 45), 0xFDFC, 0, 0, 60, _game.getQuote(156));
_scene->_kernelMessages.setQuoted(msgIndex, 6, true);
}
break;
case 73:
_scene->_kernelMessages.add(Common::Point(102, 95), 0xFDFC, 32, 0, 75, _game.getQuote(157));
break;
case 90: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(102, 95), 0xFDFC, 32, 0, 60, _game.getQuote(158));
_scene->_kernelMessages.setQuoted(msgIndex, 6, true);
}
break;
case 97:
_scene->_userInterface.selectObject(-1);
_game._objects.removeFromInventory(OBJ_BINOCULARS, 1);
break;
case 177: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(63, _scrollY), 0x1110, 0, 0, 180, _game.getQuote(161));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
_scrollY += 14;
}
break;
case 181: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(63, _scrollY), 0x1110, 0, 0, 180, _game.getQuote(162));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
_scrollY += 14;
}
break;
case 188: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(63, _scrollY), 0x1110, 0, 0, 180, _game.getQuote(163));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
_scrollY += 14;
}
break;
case 200: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(63, _scrollY), 0x1110, 0, 0, 180, _game.getQuote(164));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
_scrollY += 14;
}
break;
}
}
if (_wakeFl) {
if (_game._trigger == 100) {
_game._player._visible = true;
_game._player._stepEnabled = true;
_wakeFl = false;
}
if (_scene->_activeAnimation->getCurrentFrame() > _monkeyFrame) {
_monkeyFrame = _scene->_activeAnimation->getCurrentFrame();
switch (_scene->_activeAnimation->getCurrentFrame()) {
case 177: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(63, _scrollY), 0x1110, 0, 0, 180, _game.getQuote(165));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
_scrollY += 14;
}
break;
case 181: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(63, _scrollY), 0x1110, 0, 0, 180, _game.getQuote(166));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
_scrollY += 14;
}
break;
case 188: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(63, _scrollY), 0x1110, 0, 0, 180, _game.getQuote(167));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
_scrollY += 14;
}
break;
case 200: {
int msgIndex = _scene->_kernelMessages.add(Common::Point(63, _scrollY), 0x1110, 0, 0, 180, _game.getQuote(168));
_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
_scrollY += 14;
}
break;
}
}
}
}
void Scene211::preActions() {
if (_action.isAction(VERB_WALK_DOWN, NOUN_JUNGLE_PATH) && _game._objects.isInInventory(OBJ_BINOCULARS) && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
&& (_scene->_customDest.x <= 52) && (_scene->_customDest.y >= 132))
_game._player.walk(Common::Point(52, 132), FACING_WEST);
if (_action.isAction(VERB_WALK_DOWN, NOUN_PATH_TO_WEST)) {
if (_game._objects.isInInventory(OBJ_BINOCULARS) && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY))
_game._player.walk(Common::Point(52, 132), FACING_WEST);
else
_game._player._walkOffScreenSceneId = 210;
}
if (_action.isAction(VERB_WALK_DOWN, NOUN_PATH_TO_NORTHEAST))
_game._player._walkOffScreenSceneId = 207;
}
void Scene211::actions() {
if (_action._lookFlag && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY))
_vm->_dialogs->show(21111);
else if (_action.isAction(VERB_LOOK, NOUN_BINOCULARS, NOUN_PALM_TREE))
_vm->_dialogs->show(21116);
else if (_action.isAction(VERB_LOOK, NOUN_BUSHY_FERN))
_vm->_dialogs->show(21101);
else if (_action.isAction(VERB_LOOK, NOUN_JUNGLE_PATH))
_vm->_dialogs->show(21102);
else if (_action.isAction(VERB_LOOK, NOUN_PALM_TREE)) {
if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
if (_game._storyMode == STORYMODE_NAUGHTY)
_vm->_dialogs->show(21103);
else
_vm->_dialogs->show(21104);
} else {
_vm->_dialogs->show(21105);
}
} else if (_action.isAction(VERB_LOOK, NOUN_THICK_UNDERGROWTH)) {
if (_game._storyMode == STORYMODE_NAUGHTY)
_vm->_dialogs->show(21106);
else
_vm->_dialogs->show(21107);
} else if (_action.isAction(VERB_LOOK, NOUN_JUNGLE))
_vm->_dialogs->show(21108);
else if (_action.isAction(VERB_LOOK, NOUN_PATH_TO_NORTHEAST))
_vm->_dialogs->show(21109);
else if (_action.isAction(VERB_LOOK, NOUN_PATH_TO_WEST))
_vm->_dialogs->show(21110);
else if (_action.isAction(VERB_LOOK, NOUN_SLITHERING_SNAKE))
_vm->_dialogs->show(21113);
else if (_action.isAction(VERB_TAKE, NOUN_SLITHERING_SNAKE))
_vm->_dialogs->show(21114);
else if (_action.isAction(VERB_LOOK, NOUN_ROCKS))
_vm->_dialogs->show(21115);
else
return;
_action._inProgress = false;
}
/*------------------------------------------------------------------------*/
void Scene212::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(NOUN_BOUNCING_REPTILE);
}
void Scene212::enter() {
// CHECKME: Some useless variables have been remove here
if (_scene->_priorSceneId == 208) {
_game._player._playerPos = Common::Point(195, 85);
_game._player._facing = FACING_SOUTH;
} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
_game._player._playerPos = Common::Point(67, 117);
_game._player._facing = FACING_NORTHEAST;
}
sceneEntrySound();
}
void Scene212::step() {
// CHECKME: Could we move the dino?
}
void Scene212::preActions() {
if (_action.isAction(VERB_WALK_THROUGH, NOUN_CAVE_ENTRANCE))
_game._player._walkOffScreenSceneId = 111;
}
void Scene212::actions() {
if (_action._lookFlag)
_vm->_dialogs->show(21209);
else if (_action.isAction(VERB_WALK_TOWARDS) && (_action.isObject(NOUN_FIELD_TO_NORTH) || _action.isObject(NOUN_MOUNTAINS)))
_scene->_nextSceneId = 208;
else if (_action.isAction(VERB_WALK_TOWARDS, NOUN_CAVE))
_scene->_nextSceneId = 111;
else if (_action.isAction(VERB_LOOK, NOUN_GRASS))
_vm->_dialogs->show(21201);
else if (_action.isAction(VERB_LOOK, NOUN_ROCKS))
_vm->_dialogs->show(21202);
else if (_action.isAction(VERB_LOOK, NOUN_CAVE_ENTRANCE))
_vm->_dialogs->show(21203);
else if (_action.isAction(VERB_LOOK, NOUN_SKY))
_vm->_dialogs->show(21204);
else if (_action.isAction(VERB_LOOK, NOUN_FIELD_TO_NORTH))
_vm->_dialogs->show(21205);
else if (_action.isAction(VERB_LOOK, NOUN_TREES))
_vm->_dialogs->show(21206);
else if (_action.isAction(VERB_LOOK, NOUN_PLANTS))
_vm->_dialogs->show(21207);
else if (_action.isAction(VERB_LOOK, NOUN_MOUNTAINS))
_vm->_dialogs->show(21208);
else
return;
_action._inProgress = false;
}
/*------------------------------------------------------------------------*/
void Scene213::setup() {
_game._player._spritesPrefix = "";
// The original is calling Scene2xx::setAAName()
_game._aaName = Resources::formatAAName(2);
}
void Scene213::enter() {
if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL)
_handSpriteId = _scene->_sprites.addSprites("*METHAND");
else if (_globals[kSexOfRex] == REX_MALE)
_handSpriteId = _scene->_sprites.addSprites("*REXHAND");
else
_handSpriteId = _scene->_sprites.addSprites("*ROXHAND");
teleporterEnter();
// The original is calling Scene2xx::sceneEntrySound()
if (_vm->_musicFlag) {
if (_globals[kMeteorologistWatch] == METEOROLOGIST_NORMAL)
_vm->_sound->command(1);
else
_vm->_sound->command(9);
} else {
_vm->_sound->command(2);
}
}
void Scene213::step() {
teleporterStep();
}
void Scene213::actions() {
if (teleporterActions()) {
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK, NOUN_CONTROL_PANEL))
_vm->_dialogs->show(21301);
else if (_action.isAction(VERB_LOOK, NOUN_KEYPAD) || _action.isAction (VERB_INSPECT, NOUN_KEYPAD))
_vm->_dialogs->show(21302);
else if (_action.isAction(VERB_LOOK, NOUN_DISPLAY))
_vm->_dialogs->show(21303);
else if (_action.isAction(VERB_LOOK, NOUN_VIEWPORT) || _action.isAction(VERB_PEER_THROUGH, NOUN_VIEWPORT))
_vm->_dialogs->show(21304);
else if (_action.isAction(VERB_LOOK, NOUN_DEVICE))
_vm->_dialogs->show(21305);
else if (_action.isAction(VERB_LOOK, NOUN_0_KEY) || _action.isAction(VERB_LOOK, NOUN_1_KEY)
|| _action.isAction(VERB_LOOK, NOUN_2_KEY) || _action.isAction(VERB_LOOK, NOUN_3_KEY)
|| _action.isAction(VERB_LOOK, NOUN_4_KEY) || _action.isAction(VERB_LOOK, NOUN_5_KEY)
|| _action.isAction(VERB_LOOK, NOUN_6_KEY) || _action.isAction(VERB_LOOK, NOUN_7_KEY)
|| _action.isAction(VERB_LOOK, NOUN_8_KEY) || _action.isAction(VERB_LOOK, NOUN_9_KEY)
|| _action.isAction(VERB_LOOK, NOUN_SMILE_KEY) || _action.isAction(VERB_LOOK, NOUN_FROWN_KEY)
|| _action.isAction(VERB_LOOK, NOUN_ENTER_KEY))
_vm->_dialogs->show(21306);
else
return;
_action._inProgress = false;
}
/*------------------------------------------------------------------------*/
Scene214::Scene214(MADSEngine *vm) : Scene2xx(vm) {
_devilTime = 0;
_devilRunningFl = false;
}
void Scene214::synchronize(Common::Serializer &s) {
Scene2xx::synchronize(s);
s.syncAsUint32LE(_devilTime);
s.syncAsByte(_devilRunningFl);
}
void Scene214::setup() {
setPlayerSpritesPrefix();
setAAName();
_scene->addActiveVocab(NOUN_CAPTIVE_CREATURE);
_scene->addActiveVocab(VERB_WALKTO);
}
void Scene214::enter() {
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('e', 0));
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('e', 1));
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('t', -1));
_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXMRD_7");
_devilTime = _game._player._priorTimer;
_devilRunningFl = false;
if (_game._objects.isInRoom(OBJ_POISON_DARTS)) {
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(103, 86));
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 11);
} else {
_scene->_hotspots.activate(NOUN_POISON_DARTS, false);
}
if (_game._objects.isInRoom(OBJ_BLOWGUN)) {
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(90, 87));
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 13);
} else {
_scene->_hotspots.activate(NOUN_BLOWGUN, false);
}
if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
_game._player._playerPos = Common::Point(191, 152);
sceneEntrySound();
}
void Scene214::step() {
if ((_game._player._priorTimer - _devilTime > 800) && !_devilRunningFl) {
_devilRunningFl = true;
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 6, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 4);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
_scene->_dynamicHotspots.add(451, 13, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
}
if (_devilRunningFl) {
switch (_game._trigger) {
case 71: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 5, 0, 0);
_scene->_sequences.updateTimeout(oldIdx, _globals._sequenceIndexes[3]);
_scene->_dynamicHotspots.add(451, VERB_WALKTO, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 5, 8);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
}
break;
case 72: {
int oldIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
_scene->_sequences.updateTimeout(oldIdx, _globals._sequenceIndexes[3]);
_scene->_dynamicHotspots.add(451, VERB_WALKTO, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 9, -2);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
_devilTime = _game._player._priorTimer;
_devilRunningFl = false;
}
break;
}
}
}
void Scene214::actions() {
if (_action._lookFlag)
_vm->_dialogs->show(21427);
else if (_action.isAction(VERB_WALK_OUTSIDE, NOUN_HUT))
_scene->_nextSceneId = 207;
else if (_action.isAction(VERB_TAKE, NOUN_POISON_DARTS) && (_game._trigger || _game._objects.isInRoom(OBJ_POISON_DARTS))) {
switch (_game._trigger) {
case 0:
_game._player._stepEnabled = false;
_game._player._visible = false;
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], true, 6, 1, 0, 0);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
break;
case 1:
_globals._sequenceIndexes[4] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[4], true, 6, 1, 0, 0);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
_game._objects.addToInventory(OBJ_POISON_DARTS);
_scene->_hotspots.activate(NOUN_POISON_DARTS, false);
break;
case 2:
_game._player._visible = true;
_scene->_sequences.addTimer(48, 3);
break;
case 3:
_game._player._stepEnabled = true;
_vm->_dialogs->showItem(OBJ_POISON_DARTS, 0x53A5);
break;
}
} else if (_action.isAction(VERB_TAKE, NOUN_BLOWGUN) && (_game._trigger || _game._objects.isInRoom(OBJ_BLOWGUN))) {
switch (_game._trigger) {
case 0:
_game._player._stepEnabled = false;
_game._player._visible = false;
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 1, 0, 0);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
break;
case 1:
_globals._sequenceIndexes[4] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[4], false, 6, 1, 0, 0);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
_game._objects.addToInventory(OBJ_BLOWGUN);
_scene->_hotspots.activate(NOUN_BLOWGUN, false);
break;
case 2:
_game._player._visible = true;
_scene->_sequences.addTimer(48, 3);
break;
case 3:
_game._player._stepEnabled = true;
_vm->_dialogs->showItem(OBJ_BLOWGUN, 0x329);
break;
}
} else if (_action.isAction(VERB_LOOK, NOUN_WINDOW))
_vm->_dialogs->show(21401);
else if (_action.isAction(VERB_LOOK, NOUN_EXPERIMENT_CAGE))
_vm->_dialogs->show(21402);
else if (_action.isAction(VERB_LOOK, NOUN_CAPTIVE_CREATURE))
_vm->_dialogs->show(21403);
else if (_action.isAction(VERB_LOOK, NOUN_BEAR_RUG))
_vm->_dialogs->show(21404);
else if (_action.isAction(VERB_LOOK, NOUN_TROPHY))
_vm->_dialogs->show(21405);
else if (_action.isAction(VERB_LOOK, NOUN_LARGE_BOWL)) {
if (_game._storyMode == STORYMODE_NAUGHTY) {
_vm->_dialogs->show(21406);
} else {
_vm->_dialogs->show(21407);
}
} else if (_action.isAction(VERB_LOOK, NOUN_SPECIMEN_JARS))
_vm->_dialogs->show(21408);
else if (_action.isAction(VERB_TAKE, NOUN_LARGE_BOWL) || _action.isAction(VERB_TAKE, NOUN_SPECIMEN_JARS))
_vm->_dialogs->show(21409);
else if (_action.isAction(VERB_LOOK, NOUN_SHRUNKEN_HEADS))
_vm->_dialogs->show(21410);
else if (_action.isAction(VERB_TAKE, NOUN_SHRUNKEN_HEADS) || _action.isAction(VERB_TAKE, NOUN_LARGE_HEADS))
_vm->_dialogs->show(21411);
else if (_action.isAction(VERB_LOOK, NOUN_LARGE_HEADS))
_vm->_dialogs->show(21428);
else if (_action.isAction(VERB_LOOK, NOUN_POISON_DARTS) && (_action._savedFields._mainObjectSource == 4))
_vm->_dialogs->show(21412);
else if (_action.isAction(VERB_OPEN, NOUN_EXPERIMENT_CAGE))
_vm->_dialogs->show(21414);
else if (_action.isAction(VERB_TALKTO, NOUN_CAPTIVE_CREATURE))
_vm->_dialogs->show(21415);
else if (_action.isAction(VERB_GIVE, NOUN_TWINKIFRUIT, NOUN_CAPTIVE_CREATURE))
_vm->_dialogs->show(21416);
else if (_action.isAction(VERB_SHOOT, NOUN_BLOWGUN, NOUN_CAPTIVE_CREATURE) || _action.isAction(VERB_HOSE_DOWN, NOUN_BLOWGUN, NOUN_CAPTIVE_CREATURE))
_vm->_dialogs->show(21417);
else if (_action.isAction(VERB_LOOK, NOUN_BIG_HEADS))
_vm->_dialogs->show(21418);
else if (_action.isAction(VERB_TAKE, NOUN_BIG_HEADS))
_vm->_dialogs->show(21419);
else if (_action.isAction(VERB_TAKE, NOUN_BEAR_RUG))
_vm->_dialogs->show(21420);
else if (_action.isAction(VERB_LOOK, NOUN_FLOOR_OF_HUT))
_vm->_dialogs->show(21421);
else if (_action.isAction(VERB_LOOK, NOUN_BLOWGUN))
_vm->_dialogs->show(21422);
else if (_action.isAction(VERB_LOOK, NOUN_TABLE)) {
if (_game._objects.isInRoom(OBJ_POISON_DARTS) && _game._objects.isInRoom(OBJ_BLOWGUN)) {
_vm->_dialogs->show(21423);
} else if (_game._objects.isInRoom(OBJ_POISON_DARTS) && !_game._objects.isInRoom(OBJ_BLOWGUN)) {
_vm->_dialogs->show(21424);
} else if (!_game._objects.isInRoom(OBJ_POISON_DARTS) && _game._objects.isInRoom(OBJ_BLOWGUN)) {
_vm->_dialogs->show(21425);
} else {
_vm->_dialogs->show(21426);
}
} else
return;
_action._inProgress = false;
}
/*------------------------------------------------------------------------*/
void Scene215::setup() {
setPlayerSpritesPrefix();
setAAName();
}
void Scene215::enter() {
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('e', 0));
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 0));
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle (_globals._spriteIndexes[1], false, 7, 0, 0, 0);
_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(235, 83));
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
if (_globals[kSexOfRex] == REX_MALE)
_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXMRC_9");
else
_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*ROXRC_9");
if (_scene->_priorSceneId == 216) {
_game._player._playerPos = Common::Point(140, 119);
_game._player._facing = FACING_SOUTHWEST;
_game._player._visible = false;
_game._player._stepEnabled = false;
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
_scene->_sequences.addTimer(120, 70);
} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
_game._player._playerPos = Common::Point(204, 152);
_game._player._facing = FACING_NORTH;
}
_game.loadQuoteSet(0xA9, 0xAA, 0);
sceneEntrySound();
}
void Scene215::step() {
if (_game._trigger == 70) {
_scene->_sequences.remove (_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
}
if (_game._trigger == 71) {
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
_game._player._visible = true;
_game._player._stepEnabled = true;
}
}
void Scene215::actions() {
if (_action._lookFlag)
_vm->_dialogs->show(21509);
else if (_action.isAction(VERB_TAKE, NOUN_TWINKIFRUIT)) {
if (!_game._objects.isInInventory(OBJ_TWINKIFRUIT) || _game._trigger) {
switch (_game._trigger) {
case 0:
if (_globals[kSexOfRex] == REX_MALE) {
_game._player._visible = false;
_game._player._stepEnabled = false;
_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 6, 2, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 4);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_LOOP, 0, 1);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
} else {
_game._objects.addToInventory(OBJ_TWINKIFRUIT);
_vm->_dialogs->showItem(OBJ_TWINKIFRUIT, 0x5404);
}
break;
case 1:
if (!_game._objects.isInInventory(OBJ_TWINKIFRUIT)) {
_game._objects.addToInventory(OBJ_TWINKIFRUIT);
_vm->_dialogs->showItem(OBJ_TWINKIFRUIT, 0x5404);
}
break;
case 2:
_game._player._visible = true;
_game._player._stepEnabled = true;
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
break;
}
} else {
int idx = _vm->getRandomNumber(169, 170);
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(idx));
}
} else if (_action.isAction(VERB_WALK_OUTSIDE, NOUN_HUT))
_scene->_nextSceneId = 210;
else if (_action.isAction(VERB_LOOK, NOUN_BEAR_RUG))
_vm->_dialogs->show(21501);
else if (_action.isAction(VERB_LOOK, NOUN_BED))
_vm->_dialogs->show(21502);
else if (_action.isAction(VERB_LOOK, NOUN_WELCOME_MAT))
_vm->_dialogs->show(21503);
else if (_action.isAction(VERB_LOOK, NOUN_LOVE_ALTAR))
_vm->_dialogs->show(21504);
else if (_action.isAction(VERB_LOOK, NOUN_WINDOW))
_vm->_dialogs->show(21505);
else if (_action.isAction(VERB_LOOK, NOUN_PICTURE))
_vm->_dialogs->show(21506);
else if (_action.isAction(VERB_LOOK, NOUN_TWINKIFRUIT) && (_action._savedFields._mainObjectSource == 4))
_vm->_dialogs->show(21507);
else if (_action.isAction(VERB_TAKE, NOUN_BEAR_RUG))
_vm->_dialogs->show(21510);
else if (_action.isAction(VERB_TAKE, NOUN_LOVE_ALTAR))
_vm->_dialogs->show(21511);
else if (_action.isAction(VERB_LOOK, NOUN_BAG_OF_TWINKIFRUITS))
_vm->_dialogs->show(21512);
else if (_action.isAction(VERB_TAKE, NOUN_BAG_OF_TWINKIFRUITS))
_vm->_dialogs->show(21513);
else if (_action.isAction(VERB_TAKE, NOUN_WELCOME_MAT))
_vm->_dialogs->show(21514);
else
return;
_action._inProgress = false;
}
/*------------------------------------------------------------------------*/
void Scene216::setup() {
setPlayerSpritesPrefix();
setAAName();
}
void Scene216::enter() {
_game._player._stepEnabled = false;
_game._player._visible = false;
_scene->_userInterface.emptyConversationList();
_scene->_userInterface.setup(kInputConversation);
_scene->loadAnimation(formAnimName('A', -1), 60);
sceneEntrySound();
}
void Scene216::step() {
if (_game._trigger == 60)
_scene->_nextSceneId = 215;
}
/*------------------------------------------------------------------------*/
} // End of namespace Nebular
} // End of namespace MADS