aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/nebular/nebular_scenes6.cpp
diff options
context:
space:
mode:
authorStrangerke2014-05-12 18:55:58 +0200
committerStrangerke2014-05-12 18:56:34 +0200
commit8e728a04e893ebb9efe249715506289f2088ab16 (patch)
treec3527c40d59cb7f147550d1db6e5e9a9be0ca674 /engines/mads/nebular/nebular_scenes6.cpp
parent24243d57e6a3b6fc291b754339aa60e98a76592e (diff)
downloadscummvm-rg350-8e728a04e893ebb9efe249715506289f2088ab16.tar.gz
scummvm-rg350-8e728a04e893ebb9efe249715506289f2088ab16.tar.bz2
scummvm-rg350-8e728a04e893ebb9efe249715506289f2088ab16.zip
MADS: Implement scene 608
Diffstat (limited to 'engines/mads/nebular/nebular_scenes6.cpp')
-rw-r--r--engines/mads/nebular/nebular_scenes6.cpp1016
1 files changed, 988 insertions, 28 deletions
diff --git a/engines/mads/nebular/nebular_scenes6.cpp b/engines/mads/nebular/nebular_scenes6.cpp
index 8cda6ed14d..6c228c1234 100644
--- a/engines/mads/nebular/nebular_scenes6.cpp
+++ b/engines/mads/nebular/nebular_scenes6.cpp
@@ -1022,12 +1022,12 @@ void Scene607::enter() {
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -2);
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
- if (_scene->_priorSceneId == 608) {
- _game._player._playerPos = Common::Point(297, 50);
+ if (_scene->_priorSceneId == 608) {
+ _game._player._playerPos = Common::Point(297, 50);
_game._player._facing = FACING_SOUTHEAST;
} else if (_scene->_priorSceneId != -2) {
_game._player._playerPos = Common::Point(40, 104);
- _game._player._facing = FACING_SOUTHEAST;
+ _game._player._facing = FACING_SOUTHEAST;
_game._player._visible = false;
_game._player._stepEnabled = false;
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
@@ -1038,12 +1038,12 @@ void Scene607::enter() {
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('g', 3));
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('g', 7));
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('g', 0));
- }
+ }
sceneEntrySound();
if (_scene->_roomChanged)
- _game._objects.addToInventory(OBJ_BONES);
+ _game._objects.addToInventory(OBJ_BONES);
_vm->_palette->setEntry(252, 63, 44, 30);
_vm->_palette->setEntry(253, 63, 20, 22);
@@ -1071,18 +1071,18 @@ void Scene607::step() {
_dogTimer = 0;
}
- if (_game._trigger == 91) {
+ if (_game._trigger == 91) {
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 6);
_dogBarking = false;
_globals[kDogStatus] = 1;
_scene->_hotspots.activate(0x471, true);
- }
+ }
if (!_dogEatsRex && (_game._difficulty != DIFFICULTY_EASY) && !_animationActive && (_globals[kDogStatus] == 1)
&& !_dogBarking && (_vm->getRandomNumber(1, 50) == 10)) {
_dogBarking = true;
- _scene->_sequences.remove(_globals._sequenceIndexes[1]);
+ _scene->_sequences.remove(_globals._sequenceIndexes[1]);
_globals._sequenceIndexes[1] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[1], false, 5, 8, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 6);
_scene->_kernelMessages.reset();
@@ -1143,13 +1143,13 @@ void Scene607::step() {
&& (_game._trigger || !_dogEatsRex)) {
_dogEatsRex = true;
switch (_game._trigger) {
- case 91:
+ case 91:
case 0:
_animationActive = 1;
_game._player._visible = false;
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 10, 1, 0, 0);
- _scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], -1, 7);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], -1, 7);
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x2FA));
@@ -1160,7 +1160,7 @@ void Scene607::step() {
case 60: {
int syncIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 5, 1, 0, 0);
- _scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 8, 45);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 8, 45);
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], syncIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 61);
@@ -1170,7 +1170,7 @@ void Scene607::step() {
case 61: {
int syncIdx = _globals._sequenceIndexes[4];
_globals._sequenceIndexes[4] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[4], false, 15, 3, 0, 0);
- _scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 46, -2);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 46, -2);
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], syncIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 62);
@@ -1219,13 +1219,13 @@ void Scene607::step() {
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 1, 0, 0);
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 82);
- break;
+ break;
case 82:
- _globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -2);
+ _globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -2);
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
_game._player._stepEnabled = true;
- break;
+ break;
default:
break;
@@ -1238,12 +1238,12 @@ void Scene607::handleThrowingBone() {
case 0:
_game._player._stepEnabled = false;
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
- _game._player._visible = false;
+ _game._player._visible = false;
_scene->loadAnimation(formAnimName('D', _animationMode), 1);
break;
case 1:
- _game._player._visible = true;
+ _game._player._visible = true;
_game._player._priorTimer = _scene->_activeAnimation->getNextFrameTimer() - _game._player._ticksAmount;
if (_animationMode != 1)
@@ -1258,7 +1258,7 @@ void Scene607::handleThrowingBone() {
_game._objects.setRoom(OBJ_BONE, NOWHERE);
if (_animationMode == 1)
_globals[kBone202Status] = 0;
- } else {
+ } else {
_game._objects.setRoom(OBJ_BONES, NOWHERE);
_game._objects.addToInventory(OBJ_BONE);
}
@@ -1269,7 +1269,7 @@ void Scene607::handleThrowingBone() {
case 2: {
int quoteId = 0x2F8;
if (_animationMode == 1)
- quoteId = 0x2F7;
+ quoteId = 0x2F7;
if (_animationMode == 2) {
_globals[kDogStatus] = 2;
@@ -1299,7 +1299,7 @@ void Scene607::preActions() {
if (_action.isAction(0x18B, 0x478) && (_globals[kDogStatus] == 2) && (_game._difficulty != DIFFICULTY_EASY)) {
_shopAvailable = true;
_dogTimer = 0;
- }
+ }
if (_action.isAction(VERB_THROW, 0x2D, 0x471) || _action.isAction(VERB_THROW, 0x2C, 0x471))
_game._player.walk(Common::Point(193, 100), FACING_NORTHEAST);
@@ -1323,7 +1323,7 @@ void Scene607::actions() {
case 1: {
int syncIdx = _globals._sequenceIndexes[2];
- _globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -1);
+ _globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -1);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], syncIdx);
_scene->_sequences.addTimer(6, 2);
}
@@ -1340,7 +1340,7 @@ void Scene607::actions() {
int syncIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
- _scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], syncIdx);
+ _scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], syncIdx);
_scene->_nextSceneId = 504;
}
break;
@@ -1363,7 +1363,7 @@ void Scene607::actions() {
if (_game._trigger == 0) {
_scene->_kernelMessages.reset();
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x2F6));
- }
+ }
handleThrowingBone();
} else if (_action._lookFlag || _action.isAction(VERB_LOOK, 0x31E)) {
if ((_globals[kDogStatus] == 1) || (_game._difficulty == DIFFICULTY_EASY))
@@ -1418,16 +1418,976 @@ void Scene607::actions() {
/*------------------------------------------------------------------------*/
+void Scene608::setup() {
+ setPlayerSpritesPrefix();
+ setAAName();
+ _scene->addActiveVocab(0xD);
+ _scene->addActiveVocab(0x115);
+ _scene->addActiveVocab(0x324);
+ _scene->addActiveVocab(0x471);
+}
+
+void Scene608::resetDogVariables() {
+ _globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
+ int idx = _scene->_dynamicHotspots.add(0x471, VERB_WALKTO, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
+ _scene->_dynamicHotspots.setPosition(idx, Common::Point(194, 142), FACING_EAST);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 4);
+ _dogBarkingFl = false;
+ _dogFirstEncounter = false;
+}
+
+void Scene608::restoreAnimations() {
+ _scene->freeAnimation();
+ _carMode = 0;
+ _game._player._stepEnabled = true;
+ if (_throwMode == 6)
+ _dogSquashFl = true;
+
+ if (_globals[kCarStatus] == 0) {
+ _scene->_sequences.remove(_globals._sequenceIndexes[6]);
+ _scene->_sequences.remove(_globals._sequenceIndexes[7]);
+ _scene->loadAnimation(formAnimName('A', -1));
+ } else {
+ _scene->_sequences.remove(_globals._sequenceIndexes[8]);
+ _scene->_sequences.remove(_globals._sequenceIndexes[6]);
+ _scene->_sequences.remove(_globals._sequenceIndexes[7]);
+ _scene->loadAnimation(formAnimName('A', -1));
+ _scene->_activeAnimation->setCurrentFrame(6);
+ }
+}
+
+void Scene608::setCarAnimations() {
+ _scene->freeAnimation();
+ if (_globals[kCarStatus] == 0) {
+ _globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 1);
+ _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[6], Common::Point(143, 98));
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[6], 6);
+ _globals._sequenceIndexes[7] = _scene->_sequences.startCycle(_globals._spriteIndexes[7], false, 1);
+ _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[7], Common::Point(141, 67));
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[7], 15);
+ } else {
+ _globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 1);
+ _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[6], Common::Point(143, 128));
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[6], 6);
+ _globals._sequenceIndexes[7] = _scene->_sequences.startCycle(_globals._spriteIndexes[7], false, 1);
+ _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[7], Common::Point(141, 97));
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[7], 15);
+ _globals._sequenceIndexes[8] = _scene->_sequences.startCycle(_globals._spriteIndexes[8], false, 1);
+ _scene->_sequences.setMsgPosition(_globals._sequenceIndexes[8], Common::Point(144, 126));
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[8], 5);
+ }
+}
+
+void Scene608::handleThrowingBone() {
+ switch (_game._trigger) {
+ case 0:
+ _game._player._stepEnabled = false;
+ setCarAnimations();
+ _scene->_sequences.remove(_globals._sequenceIndexes[5]);
+ _animationMode = -1;
+ _game._player._visible = false;
+ _carMode = _throwMode;
+ if (_throwMode == 4)
+ _scene->loadAnimation(formAnimName('X', 2), 1);
+ else if (_throwMode == 5)
+ _scene->loadAnimation(formAnimName('X', 1), 1);
+ else
+ _scene->loadAnimation(formAnimName('X', 3), 1);
+ break;
+
+ case 1:
+ _nextTrigger = 1;
+ _scene->_sequences.addTimer(1, 2);
+ break;
+
+ case 2:
+ if (_nextTrigger != 2)
+ _scene->_sequences.addTimer(1, 2);
+ else {
+ if (_game._objects.isInInventory(OBJ_BONE))
+ _game._objects.setRoom(OBJ_BONE, NOWHERE);
+ else {
+ _game._objects.setRoom(OBJ_BONES, NOWHERE);
+ _game._objects.addToInventory(OBJ_BONE);
+ }
+ _scene->_sequences.addTimer(60, 3);
+ }
+ break;
+
+ case 3:
+ if (_throwMode != 6) {
+ _scene->_kernelMessages.reset();
+ _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x304));
+ _scene->_sequences.addTimer(120, 4);
+ } else
+ restoreAnimations();
+ break;
+
+ case 4:
+ restoreAnimations();
+ break;
+
+ default:
+ break;
+ }
+}
+
+void Scene608::enter() {
+ _globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXMRD_7");
+ _globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RXMRC_9");
+ _globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('c', 2));
+ _globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', 0));
+ _globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('c', 1));
+
+ if (_game._objects.isInRoom(OBJ_POLYCEMENT)) {
+ _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('g', -1));
+ _globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
+ int idx = _scene->_dynamicHotspots.add(0x115, VERB_WALKTO, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+ _polycementHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(249, 129), FACING_NORTHEAST);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 6);
+ }
+
+ if (_game._objects.isInRoom(OBJ_REARVIEW_MIRROR)) {
+ _globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('m', -1));
+ _globals._sequenceIndexes[12] = _scene->_sequences.startCycle(_globals._spriteIndexes[12], false, 1);
+ int idx = _scene->_dynamicHotspots.add(0x120, VERB_WALKTO, _globals._sequenceIndexes[12], Common::Rect(0, 0, 0, 0));
+ _scene->_dynamicHotspots.setPosition(idx, Common::Point(71, 113), FACING_NORTHEAST);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[12], 15);
+ }
+
+ if (_game._difficulty == DIFFICULTY_HARD) {
+ _globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('g', 0));
+ _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('g', 1));
+ _globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('g', 2));
+ _globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('h', 2));
+ _globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('h', 3));
+ _rexBeingEaten = false;
+
+ if (!_game._visitedScenes._sceneRevisited) {
+ _globals[kDogStatus] = 3;
+ _dogActiveFl = true;
+ } else
+ _dogActiveFl = (_globals[kDogStatus] != 4);
+ } else {
+ _globals[kDogStatus] = 4;
+ _dogActiveFl = false;
+ }
+
+ _dogSquashFl = false;
+ _buttonPressedonTimeFl = false;
+ _dogWindowTimer = 0;
+ _dogRunTimer = 0;
+ _dogHitWindow = false;
+ _checkFl = false;
+ _dogUnderCar = false;
+ _dogYelping = false;
+
+
+ if (!_game._visitedScenes._sceneRevisited)
+ _globals[kCarStatus] = 0;
+
+ _animationMode = 0;
+ _carMoveMode = 0;
+ _carFrame = -1;
+
+ if (_globals[kCarStatus] == 0) {
+ _carMode = 0;
+ _dogDeathMode = 0;
+ _resetPositionsFl = false;
+ int idx = _scene->_dynamicHotspots.add(0x324, VERB_WALKTO, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
+ _carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+ _scene->loadAnimation(formAnimName('A', -1));
+ } else if (_globals[kCarStatus] == 3) {
+ _carMode = 0;
+ _dogDeathMode = 0;
+ _resetPositionsFl = false;
+ int idx = _scene->_dynamicHotspots.add(0x324, VERB_WALKTO, -1, Common::Rect(100, 100, 100 + 82, 100 + 25));
+ _carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+ _scene->loadAnimation(formAnimName('A', -1));
+ _scene->_activeAnimation->setCurrentFrame(6);
+ } else if (_globals[kCarStatus] == 1) {
+ _carMode = 2;
+ _dogDeathMode = 0;
+ _resetPositionsFl = false;
+ int idx = _scene->_dynamicHotspots.add(0x324, VERB_WALKTO, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
+ _carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+ _scene->loadAnimation(formAnimName('C', -1));
+ } else if (_globals[kCarStatus] == 2) {
+ _carMode = 1;
+ _dogDeathMode = 2;
+ _resetPositionsFl = true;
+ int idx = _scene->_dynamicHotspots.add(0x324, VERB_WALKTO, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
+ _carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+ _scene->loadAnimation(formAnimName('B', -1));
+ } else {
+ _carMode = 3;
+ _dogDeathMode = 2;
+ _resetPositionsFl = true;
+ int idx = _scene->_dynamicHotspots.add(0x324, VERB_WALKTO, -1, Common::Rect(100, 100, 100 + 82, 100 + 25));
+ _carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+ _scene->loadAnimation(formAnimName('D', -1));
+ }
+
+ _vm->_palette->setEntry(252, 63, 44, 30);
+ _vm->_palette->setEntry(253, 63, 20, 22);
+
+ if (_scene->_priorSceneId != -2) {
+ _game._player._playerPos = Common::Point(46, 132);
+ _game._player._facing = FACING_EAST;
+ if (_game._difficulty == DIFFICULTY_HARD) {
+ if (!_game._visitedScenes._sceneRevisited)
+ _dogFirstEncounter = true;
+ else if (_dogActiveFl)
+ resetDogVariables();
+ }
+ } else if ((_game._difficulty == DIFFICULTY_HARD) && !_dogFirstEncounter && _dogActiveFl) {
+ if (!_dogUnderCar)
+ resetDogVariables();
+ else {
+ _globals._sequenceIndexes[10] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[10], false, 9, 0, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], 10, 11);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[10], 6);
+ }
+ }
+
+ sceneEntrySound();
+
+ if (_scene->_roomChanged)
+ _game._objects.addToInventory(OBJ_BONES);
+
+ _game.loadQuoteSet(0x2FB, 0x2FC, 0x2FE, 0x2FD, 0x2FF, 0x300, 0x301, 0x302, 0x303, 0x304, 0);
+}
+
+void Scene608::step() {
+ if (_dogFirstEncounter) {
+ long diff = _scene->_frameStartTime - _dogTimer1;
+ if ((diff >= 0) && (diff <= 1))
+ _dogWindowTimer += diff;
+ else
+ _dogWindowTimer++;
+
+ _dogTimer1 = _scene->_frameStartTime;
+ }
+
+ if (_dogActiveFl && (_dogWindowTimer >= 2) && !_dogHitWindow) {
+ _dogHitWindow = true;
+ _globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 11, 1, 0, 0);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
+ _vm->_sound->command(14);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+ _dogWindowTimer = 0;
+ }
+
+ if (_game._trigger == 70)
+ resetDogVariables();
+
+ if ((_game._difficulty == DIFFICULTY_HARD) && !_animationMode && _dogActiveFl && !_dogFirstEncounter && !_dogUnderCar) {
+ if (!_dogBarkingFl) {
+ if (_vm->getRandomNumber(1, 50) == 10) {
+ _dogBarkingFl = true;
+ _scene->_sequences.remove(_globals._sequenceIndexes[5]);
+ _globals._sequenceIndexes[5] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[5], false, 5, 8, 0, 0);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 4);
+ int idx = _scene->_dynamicHotspots.add(0x471, VERB_WALKTO, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
+ _scene->_dynamicHotspots.setPosition(idx, Common::Point(194, 142), FACING_EAST);
+ _barkCount = 0;
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_SPRITE, 2, 100);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
+ }
+ } else if (_game._trigger == 60) {
+ int syncIdx = _globals._sequenceIndexes[5];
+ _globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 6);
+ _scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], syncIdx);
+ _scene->_kernelMessages.reset();
+ _dogBarkingFl = false;
+ }
+ }
+
+ if ((_game._trigger == 100) && _dogBarkingFl) {
+ _vm->_sound->command(12);
+ _barkCount++;
+
+ if ((_barkCount >= 1) && (_barkCount <= 4)) {
+ Common::Point _barkPos(0, 0);
+ switch (_barkCount) {
+ case 1:
+ _barkPos = Common::Point(197, 66);
+ break;
+
+ case 2:
+ _barkPos = Common::Point(230, 76);
+ break;
+
+ case 3:
+ _barkPos = Common::Point(197, 86);
+ break;
+
+ case 4:
+ _barkPos = Common::Point(230, 97);
+ break;
+
+ default:
+ break;
+ }
+ _scene->_kernelMessages.add(_barkPos, 0xFDFC, 0, 0, 120, _game.getQuote(0x2FB));
+ }
+ }
+
+ if (_dogSquashFl && !_dogFirstEncounter && _dogUnderCar && _dogActiveFl) {
+ long diff = _scene->_frameStartTime - _dogTimer2;
+ if ((diff >= 0) && (diff <= 4))
+ _dogRunTimer += diff;
+ else
+ _dogRunTimer++;
+
+ _dogTimer2 = _scene->_frameStartTime;
+ }
+
+ // CHECKME: _checkFl is always false?
+ if (_dogRunTimer >= 480 && !_checkFl && !_buttonPressedonTimeFl && !_dogFirstEncounter && _dogUnderCar && _dogActiveFl) {
+ _checkFl = true;
+ _dogSquashFl = false;
+ _dogSafeFl = true;
+ _checkFl = false;
+ _dogRunTimer = 0;
+ } else {
+ _dogSafeFl = false;
+ if (_game._player._moving && (_game._difficulty == DIFFICULTY_HARD) && _dogActiveFl && (_scene->_rails.getNext() > 0) && _dogUnderCar)
+ _dogSafeFl = true;
+ }
+
+ if (_dogActiveFl && _dogSafeFl && !_buttonPressedonTimeFl) {
+ _dogDeathMode = 0;
+ _globals[kCarStatus] = 0;
+ _carMode = 0;
+ _scene->_sequences.remove(_globals._sequenceIndexes[10]);
+ _dogUnderCar = false;
+ _dogYelping = false;
+ _scene->_kernelMessages.reset();
+ _globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 6, 1, 0, 0);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 92);
+ _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x2FF));
+ }
+
+ if (_game._trigger == 92) {
+ resetDogVariables();
+ _animationMode = 0;
+ }
+
+ if ((_carMode == 4) && (_scene->_activeAnimation != nullptr)) {
+ if (_scene->_activeAnimation->getCurrentFrame() != _carFrame) {
+ _carFrame = _scene->_activeAnimation->getCurrentFrame();
+ int nextFrame = -1;
+
+ if (_carFrame == 10) {
+ _game._player._visible = true;
+ _game._player._priorTimer = _scene->_activeAnimation->getNextFrameTimer() - _game._player._ticksAmount;
+ }
+
+ if (_carFrame == 56) {
+ resetDogVariables();
+ _animationMode = 0;
+ _nextTrigger = 2;
+ }
+
+ if ((nextFrame >= 0) && (nextFrame != _scene->_activeAnimation->getCurrentFrame())) {
+ _scene->_activeAnimation->setCurrentFrame(nextFrame);
+ _carFrame = nextFrame;
+ }
+ }
+ }
+
+ if ((_carMode == 5) && (_scene->_activeAnimation != nullptr)) {
+ if (_scene->_activeAnimation->getCurrentFrame() != _carFrame) {
+ _carFrame = _scene->_activeAnimation->getCurrentFrame();
+ int nextFrame = -1;
+
+ if (_carFrame == 10) {
+ _game._player._visible = true;
+ _game._player._priorTimer = _scene->_activeAnimation->getNextFrameTimer() - _game._player._ticksAmount;
+ }
+
+ if (_carFrame == 52) {
+ resetDogVariables();
+ _animationMode = 0;
+ _nextTrigger = 2;
+ }
+
+ if ((nextFrame >= 0) && (nextFrame != _scene->_activeAnimation->getCurrentFrame())) {
+ _scene->_activeAnimation->setCurrentFrame(nextFrame);
+ _carFrame = nextFrame;
+ }
+ }
+ }
+
+
+ if ((_carMode == 6) && (_scene->_activeAnimation != nullptr)) {
+ if (_scene->_activeAnimation->getCurrentFrame() != _carFrame) {
+ _carFrame = _scene->_activeAnimation->getCurrentFrame();
+ int nextFrame = -1;
+
+ if (_carFrame == 11) {
+ _game._player._visible = true;
+ _game._player._priorTimer = _scene->_activeAnimation->getNextFrameTimer() - _game._player._ticksAmount;
+ }
+
+ if (_carFrame == 41) {
+ _globals._sequenceIndexes[10] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[10], false, 9, 0, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], 10, 11);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[10], 6);
+ _dogUnderCar = true;
+ _nextTrigger = 2;
+ }
+
+
+ if ((nextFrame >= 0) && (nextFrame != _scene->_activeAnimation->getCurrentFrame())) {
+ _scene->_activeAnimation->setCurrentFrame(nextFrame);
+ _carFrame = nextFrame;
+ }
+ }
+ }
+
+ if (_dogUnderCar) {
+ if (!_dogYelping) {
+ if (_vm->getRandomNumber(1, 50) == 10) {
+ _dogYelping = true;
+ _barkCount = 0;
+ _scene->_sequences.addTimer(12, 110);
+ _scene->_sequences.addTimer(22, 111);
+ _scene->_sequences.addTimer(120, 112);
+ }
+ _scene->_kernelMessages.reset();
+ }
+ } else
+ _dogYelping = false;
+
+ if (_game._trigger == 110) {
+ _vm->_sound->command(12);
+ _scene->_kernelMessages.add(Common::Point(150, 97), 0xFDFC, 0, 0, 60, _game.getQuote(0x303));
+ }
+
+ if (_game._trigger == 111) {
+ _vm->_sound->command(12);
+ _scene->_kernelMessages.add(Common::Point(183, 93), 0xFDFC, 0, 0, 60, _game.getQuote(0x303));
+ }
+
+ if (_game._trigger == 112)
+ _dogYelping = false;
+
+ if ((_carMode == 0) && (_scene->_activeAnimation != nullptr)) {
+ if (_scene->_activeAnimation->getCurrentFrame() != _carFrame) {
+ _carFrame = _scene->_activeAnimation->getCurrentFrame();
+ int nextFrame = -1;
+
+ if ((_globals[kCarStatus] == 0) || (_globals[kCarStatus] == 3)) {
+ switch (_carMoveMode) {
+ case 0:
+ if (_globals[kCarStatus] == 0)
+ nextFrame = 0;
+ else
+ nextFrame = 6;
+ break;
+
+ case 1:
+ if (_scene->_activeAnimation->getCurrentFrame() >= 12) {
+ nextFrame = 0;
+ _carMoveMode = 0;
+ _globals[kCarStatus] = 0;
+ }
+ break;
+
+ case 2:
+ if (_scene->_activeAnimation->getCurrentFrame() >= 6) {
+ nextFrame = 6;
+ _carMoveMode = 0;
+ _globals[kCarStatus] = 3;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if ((nextFrame >= 0) && (nextFrame != _scene->_activeAnimation->getCurrentFrame())) {
+ _scene->_activeAnimation->setCurrentFrame(nextFrame);
+ _carFrame = nextFrame;
+ }
+ }
+ }
+
+ if ((_carMode == 2) && (_scene->_activeAnimation != nullptr)) {
+ if (_scene->_activeAnimation->getCurrentFrame() != _carFrame) {
+ _carFrame = _scene->_activeAnimation->getCurrentFrame();
+ int nextFrame = -1;
+
+ if (_carMoveMode == 0)
+ nextFrame = 28;
+ else if (_scene->_activeAnimation->getCurrentFrame() >= 28) {
+ nextFrame = 28;
+ _carMoveMode = 0;
+ }
+
+ if ((nextFrame >= 0) && (nextFrame != _scene->_activeAnimation->getCurrentFrame())) {
+ _scene->_activeAnimation->setCurrentFrame(nextFrame);
+ _carFrame = nextFrame;
+ }
+ }
+ }
+
+ if ((_carMode == 3) && (_scene->_activeAnimation != nullptr)) {
+ if (_scene->_activeAnimation->getCurrentFrame() != _carFrame) {
+ _carFrame = _scene->_activeAnimation->getCurrentFrame();
+ int nextFrame = -1;
+
+ if (_resetPositionsFl) {
+ nextFrame = 0;
+ _carMoveMode = 0;
+ } else if (_carMoveMode == 0)
+ nextFrame = 6;
+ else if (_scene->_activeAnimation->getCurrentFrame() >= 6) {
+ nextFrame = 6;
+ _carMoveMode = 0;
+ }
+
+ if ((nextFrame >= 0) && (nextFrame != _scene->_activeAnimation->getCurrentFrame())) {
+ _scene->_activeAnimation->setCurrentFrame(nextFrame);
+ _carFrame = nextFrame;
+ }
+ }
+ }
+
+
+ if ((_carMode == 1) && (_scene->_activeAnimation != nullptr)) {
+ if (_scene->_activeAnimation->getCurrentFrame() != _carFrame) {
+ _carFrame = _scene->_activeAnimation->getCurrentFrame();
+ int nextFrame = -1;
+
+ if (_resetPositionsFl) {
+ nextFrame = 0;
+ _carMoveMode = 0;
+ } else if (_carMoveMode == 0)
+ nextFrame = 6;
+ else if (_scene->_activeAnimation->getCurrentFrame() >= 6) {
+ nextFrame = 6;
+ _carMoveMode = 0;
+ }
+
+ if ((nextFrame >= 0) && (nextFrame != _scene->_activeAnimation->getCurrentFrame())) {
+ _scene->_activeAnimation->setCurrentFrame(nextFrame);
+ _carFrame = nextFrame;
+ }
+ }
+ }
+
+ if (_game._player._moving && (_game._difficulty == DIFFICULTY_HARD) && _dogActiveFl && (_scene->_rails.getNext() > 0)) {
+ _game._player.cancelCommand();
+ _game._player.startWalking(Common::Point(194, 142), FACING_EAST);
+ _scene->_rails.resetNext();
+ if (_dogUnderCar)
+ _dogSafeFl = true;
+ }
+
+ if (_game._player._special > 0 && (_game._difficulty == DIFFICULTY_HARD) && _dogActiveFl && _game._player._stepEnabled)
+ _game._player._stepEnabled = false;
+
+ if ((_game._difficulty == DIFFICULTY_HARD) && _dogActiveFl && (_game._player._playerPos == Common::Point(194, 142))
+ && (_game._trigger || !_rexBeingEaten)) {
+ _rexBeingEaten = true;
+ switch (_game._trigger) {
+ case 0:
+ _scene->_sequences.remove(_globals._sequenceIndexes[5]);
+ _animationMode = 1;
+ _globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 10, 1, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], 1, 2);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 5);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+ _scene->_sequences.addTimer(10, 85);
+ break;
+
+ case 80:
+ _game._player._visible = false;
+ _globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 10, 1, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], 3, 5);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 5);
+ _scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], -1);
+ _scene->_kernelMessages.reset();
+ _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x2FC));
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+ break;
+
+ case 81: {
+ int syncIdx = _globals._sequenceIndexes[9];
+ _globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 5, 1, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], 6, 38);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 5);
+ _scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], syncIdx);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 82);
+ }
+ break;
+
+ case 82: {
+ int syncIdx = _globals._sequenceIndexes[9];
+ _globals._sequenceIndexes[9] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[9], false, 15, 5, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], 39, 40);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 5);
+ _scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], syncIdx);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
+ }
+ break;
+
+ case 83: {
+ _animationMode = 2;
+ int syncIdx = _globals._sequenceIndexes[9];
+ _globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, -2);
+ _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 5);
+ _scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], syncIdx);
+ _scene->_sequences.addTimer(60, 84);
+ }
+ break;
+
+ case 84:
+ _rexBeingEaten = false;
+ _animationMode = 0;
+ _scene->_reloadSceneFlag = true;
+ _game._player._stepEnabled = true;
+ break;
+
+ case 85:
+ if (_rexBeingEaten && (_animationMode == 1)) {
+ _vm->_sound->command(12);
+ _scene->_sequences.addTimer(10, 85);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+void Scene608::preActions() {
+ _game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+
+ if ((_action.isAction(VERB_THROW, 0x2C, 0x410) || _action.isAction(VERB_THROW, 0x2D, 0x410)
+ || _action.isAction(VERB_THROW, 0x2C, 0x411) || _action.isAction(VERB_THROW, 0x2D, 0x411)
+ || _action.isAction(VERB_THROW, 0x2D, 0x471) || _action.isAction(VERB_THROW, 0x2C, 0x471)) && _dogActiveFl) {
+ _game._player._stepEnabled = false;
+ _game._player.walk(Common::Point(56, 146), FACING_EAST);
+ }
+
+ if ((_action.isAction(VERB_THROW, 0x2D, 0x41D) || _action.isAction(VERB_THROW, 0x2C, 0x41D)
+ || _action.isAction(VERB_THROW, 0x2D, 0x41E) || _action.isAction(VERB_THROW, 0x2C, 0x41E)) && _dogActiveFl) {
+ _game._player._stepEnabled = false;
+ _game._player.walk(Common::Point(75, 136), FACING_EAST);
+ }
+
+ if (_action.isAction(VERB_PUSH, 0x403) && _dogUnderCar) {
+ _buttonPressedonTimeFl = true;
+ _dogDeathMode = 1;
+ } else
+ _buttonPressedonTimeFl = false;
+}
+
+void Scene608::actions() {
+ if (_action.isAction(0x18B, 0x70))
+ _scene->_nextSceneId = 607;
+ else if (_action.isAction(VERB_PUSH, 0x403)) {
+ _game._player._stepEnabled = true;
+ switch (_game._trigger) {
+ case 0:
+ if ((_globals[kCarStatus] == 0) || (_globals[kCarStatus] == 1) || (_globals[kCarStatus] == 2)) {
+ _game._player._stepEnabled = false;
+ _game._player._visible = false;
+ _globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], true, 6, 2, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 2);
+ _scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+ } else
+ _vm->_dialogs->show(60839);
+ break;
+
+ case 1:
+ _scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
+ _game._player._visible = true;
+ if (_dogDeathMode == 0)
+ _carMode = 0;
+ else if (_dogDeathMode == 1) {
+ _scene->_kernelMessages.reset();
+ _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x300));
+ _globals[kCarStatus] = 1;
+ _carMode = 2;
+ _globals[kDogStatus] = 4;
+ _dogActiveFl = false;
+ _dogUnderCar = false;
+ _scene->_sequences.remove(_globals._sequenceIndexes[10]);
+ _scene->freeAnimation();
+ _scene->loadAnimation(formAnimName('C', -1));
+ } else {
+ _resetPositionsFl = false;
+ _carMode = 1;
+ _scene->freeAnimation();
+ _scene->loadAnimation(formAnimName('B', -1));
+ }
+
+ _carMoveMode = 2;
+ _scene->_sequences.addTimer(1, 2);
+ break;
+
+ case 2:
+ if (_carMoveMode != 0)
+ _scene->_sequences.addTimer(1, 2);
+ else {
+ _scene->_dynamicHotspots.remove(_carHotspotId);
+ int idx = _scene->_dynamicHotspots.add(0x324, VERB_WALKTO, -1, Common::Rect(100, 100, 100 + 82, 100 + 25));
+ _carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+ if (_globals[kCarStatus] == 1)
+ _scene->_sequences.addTimer(120, 3);
+ else {
+ if (_dogDeathMode == 0)
+ _globals[kCarStatus] = 3;
+ else {
+ _globals[kCarStatus] = 4;
+ _carMode = 3;
+ _dogDeathMode = 2;
+ }
+ _game._player._stepEnabled = true;
+ }
+ }
+ break;
+
+ case 3:
+ _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x302));
+ _globals[kCarStatus] = 4;
+ _carMode = 3;
+ _dogDeathMode = 2;
+ _game._player._stepEnabled = true;
+ break;
+
+ default:
+ break;
+ }
+ } else if (_action.isAction(VERB_PUSH, 0x402)) {
+ switch (_game._trigger) {
+ case 0:
+ if ((_globals[kCarStatus] == 3) || (_globals[kCarStatus] == 4)) {
+ _game._player._stepEnabled = false;
+ _game._player._visible = false;
+ _globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], true, 6, 2, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 3);
+ _scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+ } else
+ _vm->_dialogs->show(60840);
+ break;
+
+ case 1:
+ _scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
+ _game._player._visible = true;
+ if (_dogDeathMode == 0)
+ _carMode = 0;
+ else {
+ _carMode = 3;
+ _resetPositionsFl = false;
+ _scene->freeAnimation();
+ _scene->loadAnimation(formAnimName('D', -1));
+ }
+ _carMoveMode = 1;
+ _scene->_sequences.addTimer(1, 2);
+ break;
+
+ case 2: {
+ if (_carMoveMode != 0)
+ _scene->_sequences.addTimer(1, 2);
+ else if (_dogDeathMode == 0)
+ _globals[kCarStatus] = 0;
+ else if (_dogDeathMode == 2) {
+ _globals[kCarStatus] = 2;
+ _carMode = 3;
+ _dogDeathMode = 2;
+ }
+ _scene->_dynamicHotspots.remove(_carHotspotId);
+ int idx = _scene->_dynamicHotspots.add(0x324, VERB_WALKTO, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
+ _carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+ _game._player._stepEnabled = true;
+ }
+ break;
+
+ default:
+ break;
+ }
+ } else if (_action.isAction(VERB_THROW, 0x2C, 0x410) || _action.isAction(VERB_THROW, 0x2D, 0x410)
+ || _action.isAction(VERB_THROW, 0x2D, 0x471) || _action.isAction(VERB_THROW, 0x2C, 0x471)) {
+ _game._player._stepEnabled = true;
+ if (_dogActiveFl) {
+ if (_game._trigger == 0) {
+ _scene->_kernelMessages.reset();
+ _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x2FE));
+ }
+ _throwMode = 4;
+ handleThrowingBone();
+ } else
+ _vm->_dialogs->show(60841);
+ } else if (_action.isAction(VERB_THROW, 0x2C, 0x411) || _action.isAction(VERB_THROW, 0x2D, 0x411)) {
+ _game._player._stepEnabled = true;
+ if (_dogActiveFl) {
+ if (_game._trigger == 0) {
+ _scene->_kernelMessages.reset();
+ _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x2FD));
+ }
+ _throwMode = 5;
+ handleThrowingBone();
+ } else
+ _vm->_dialogs->show(60841);
+ } else if (_action.isAction(VERB_THROW, 0x2D, 0x41D) || _action.isAction(VERB_THROW, 0x2C, 0x41D)
+ || _action.isAction(VERB_THROW, 0x2D, 0x41E) || _action.isAction(VERB_THROW, 0x2C, 0x41E)) {
+ _game._player._stepEnabled = true;
+ if ((_globals[kCarStatus] == 0) && _dogActiveFl) {
+ if (_dogActiveFl) {
+ if (_game._trigger == 0) {
+ _scene->_kernelMessages.reset();
+ _scene->_kernelMessages.add(Common::Point(0,0), 0x1110, 34, 0, 120, _game.getQuote(0x301));
+ }
+ _throwMode = 6;
+ handleThrowingBone();
+ } else
+ _vm->_dialogs->show(60841);
+ } else
+ _vm->_dialogs->show(60842);
+ } else if (_action.isAction(VERB_TAKE, 0x115) && (_game._trigger || !_game._objects.isInInventory(OBJ_POLYCEMENT))) {
+ switch (_game._trigger) {
+ case 0:
+ _game._player._stepEnabled = false;
+ _game._player._visible = false;
+ _globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], true, 6, 2, 0, 0);
+ _scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 4, 1);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+ break;
+
+ case 1:
+ _vm->_sound->command(9);
+ _scene->_sequences.remove(_globals._sequenceIndexes[1]);
+ _scene->_dynamicHotspots.remove(_polycementHotspotId);
+ break;
+
+ case 2:
+ _game._objects.addToInventory(OBJ_POLYCEMENT);
+ _scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
+ _game._player._visible = true;
+ _game._player._stepEnabled = true;
+ _vm->_dialogs->showItem(OBJ_POLYCEMENT, 60833);
+ break;
+
+ default:
+ break;
+ }
+ } else if (_action.isAction(VERB_TAKE, 0x120) && (_game._trigger || !_game._objects.isInInventory(OBJ_REARVIEW_MIRROR))) {
+ switch (_game._trigger) {
+ case 0:
+ _game._player._stepEnabled = false;
+ _game._player._visible = false;
+ _globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], true, 6, 2, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 2);
+ _scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 2, 1);
+ _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+ break;
+
+ case 1:
+ _vm->_sound->command(9);
+ _scene->_sequences.remove(_globals._sequenceIndexes[12]);
+ _game._objects.addToInventory(OBJ_REARVIEW_MIRROR);
+ _vm->_dialogs->showItem(OBJ_REARVIEW_MIRROR, 60827);
+ break;
+
+ case 2:
+ _scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
+ _game._player._visible = true;
+ _game._player._stepEnabled = true;
+ break;
+
+ default:
+ break;
+ }
+ } else if (_action._lookFlag) {
+ if (_game._difficulty != DIFFICULTY_HARD)
+ _vm->_dialogs->show(60810);
+ else if (_globals[kDogStatus] == 4)
+ _vm->_dialogs->show(60812);
+ else
+ _vm->_dialogs->show(60811);
+ } else if (_action.isAction(VERB_LOOK) && (_action.isAction(0x412) || _action.isAction(0x408) || _action.isAction(0x414)
+ || _action.isAction(0x40D) || _action.isAction(0x41C)))
+ _vm->_dialogs->show(60813);
+ else if (_action.isAction(VERB_TAKE) && (_action.isAction(0x412) || _action.isAction(0x408) || _action.isAction(0x414)
+ || _action.isAction(0x40D) || _action.isAction(0x41C)))
+ _vm->_dialogs->show(60814);
+ else if (_action.isAction(VERB_LOOK, 0x409) || _action.isAction(VERB_LOOK, 0x411) || _action.isAction(VERB_LOOK, 0x410)) {
+ if (_dogActiveFl)
+ _vm->_dialogs->show(60815);
+ else
+ _vm->_dialogs->show(60816);
+ } else if (_action.isAction(VERB_LOOK, 0x495))
+ _vm->_dialogs->show(60817);
+ else if (_action.isAction(VERB_TAKE, 0x495)) {
+ if (_game._difficulty == DIFFICULTY_HARD)
+ _vm->_dialogs->show(60818);
+ else
+ _vm->_dialogs->show(60819);
+ } else if (_action.isAction(VERB_LOOK, 0x402))
+ _vm->_dialogs->show(60820);
+ else if (_action.isAction(VERB_LOOK, 0x403))
+ _vm->_dialogs->show(60821);
+ else if (_action.isAction(VERB_LOOK, 0x41A))
+ _vm->_dialogs->show(60822);
+ else if (_action.isAction(VERB_LOOK, 0x418))
+ _vm->_dialogs->show(60823);
+ else if (_action.isAction(VERB_LOOK, 0x330)) {
+ if (_game._objects[OBJ_REARVIEW_MIRROR]._roomNumber == _scene->_currentSceneId)
+ _vm->_dialogs->show(60825);
+ else
+ _vm->_dialogs->show(60824);
+ } else if (_action.isAction(VERB_OPEN, 0x330))
+ _vm->_dialogs->show(60826);
+ else if (_action.isAction(VERB_LOOK, 0x120) && (_action._mainObjectSource == 4))
+ _vm->_dialogs->show(60828);
+ else if (_action.isAction(VERB_LOOK, 0x406)) {
+ if (_game._objects[OBJ_POLYCEMENT]._roomNumber == _scene->_currentSceneId)
+ _vm->_dialogs->show(60829);
+ else
+ _vm->_dialogs->show(60830);
+ } else if (_action.isAction(VERB_OPEN, 0x406))
+ _vm->_dialogs->show(60831);
+ else if ((_action.isAction(VERB_LOOK, 0x115)) && (_game._objects.isInRoom(OBJ_POLYCEMENT)))
+ _vm->_dialogs->show(60832);
+ else if (_action.isAction(VERB_LOOK, 0x417) || _action.isAction(VERB_LOOK, 0x40E))
+ _vm->_dialogs->show(60834);
+ else if (_action.isAction(VERB_LOOK, 0x407))
+ _vm->_dialogs->show(60835);
+ else if (_action.isAction(VERB_LOOK, 0x47) || _action.isAction(VERB_LOOK, 0x4A0))
+ _vm->_dialogs->show(60836);
+ else if (_action.isAction(VERB_LOOK, 0x41E))
+ _vm->_dialogs->show(60838);
+ else
+ return;
+
+ _action._inProgress = false;
+}
+
+/*------------------------------------------------------------------------*/
+
void Scene620::setup() {
_game._player._spritesPrefix = "";
setAAName();
}
void Scene620::enter() {
- _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('b', 0));
+ _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('b', 0));
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -1);
_game._player._stepEnabled = false;
- _game._player._visible = false;
+ _game._player._visible = false;
_scene->_sequences.addTimer(30, 70);
_scene->_userInterface.setup(kInputLimitedSentences);
sceneEntrySound();
@@ -1435,7 +2395,7 @@ void Scene620::enter() {
void Scene620::step() {
switch (_game._trigger) {
- case 70:
+ case 70:
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
_scene->loadAnimation(formAnimName('E', -1), 71);
break;
@@ -1445,7 +2405,7 @@ void Scene620::step() {
_globals[kCityFlooded] = true;
_globals[kTeleporterRoom + 5] = 0;
_scene->_nextSceneId = 701;
- } else if (_scene->_priorSceneId == 752) {
+ } else if (_scene->_priorSceneId == 752) {
_globals[kCityFlooded] = true;
_globals[kTeleporterRoom + 5] = 0;
_scene->_nextSceneId = 702;
@@ -1455,7 +2415,7 @@ void Scene620::step() {
_scene->_nextSceneId = _scene->_priorSceneId;
} else if (_scene->_priorSceneId >= 501 && _scene->_priorSceneId <= 612) {
_globals[kResurrectRoom] = _globals[kHoverCarLocation];
- _game._objects.addToInventory(OBJ_TIMEBOMB);
+ _game._objects.addToInventory(OBJ_TIMEBOMB);
_globals[kTimebombStatus] = 0;
_globals[kTimebombTimer] = 0;
_scene->_nextSceneId = 605;