aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood
diff options
context:
space:
mode:
Diffstat (limited to 'engines/neverhood')
-rw-r--r--engines/neverhood/gamemodule.cpp64
-rw-r--r--engines/neverhood/gamemodule.h1
-rw-r--r--engines/neverhood/gamevars.h18
-rw-r--r--engines/neverhood/module1000.cpp6
-rw-r--r--engines/neverhood/module1200.cpp23
-rw-r--r--engines/neverhood/module1200.h2
-rw-r--r--engines/neverhood/module1400.cpp6
-rw-r--r--engines/neverhood/module1600.cpp2
-rw-r--r--engines/neverhood/module1900.cpp2
-rw-r--r--engines/neverhood/module2000.cpp2
-rw-r--r--engines/neverhood/module2700.cpp4
-rw-r--r--engines/neverhood/module2800.cpp132
-rw-r--r--engines/neverhood/module2800.h8
-rw-r--r--engines/neverhood/module2900.cpp24
-rw-r--r--engines/neverhood/module2900.h2
15 files changed, 161 insertions, 135 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index da432c5dbb..1c8a2d9a6d 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -276,29 +276,31 @@ void GameModule::initScene2401Vars() {
}
-void GameModule::initScene2808Vars1() {
-
- // Exit if it's already initialized
- if (getSubVar(VA_IS_PUZZLE_INIT, 0x20479010))
- return;
-
- for (uint i = 0; i < 3; i++)
- setSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, i, _vm->_rnd->getRandomNumber(3 - 1) + 1);
-
- setSubVar(VA_IS_PUZZLE_INIT, 0x20479010, 1);
+void GameModule::initScene2801Vars() {
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x08C80800)) {
+ int currMusicIndex = _vm->_rnd->getRandomNumber(5 - 1) + 3;
+ setGlobalVar(V_GOOD_RADIO_MUSIC_INDEX, 5 * currMusicIndex);
+ setGlobalVar(V_GOOD_RADIO_MUSIC_NAME, kScene2801MusicFileHashes[currMusicIndex]);
+ setGlobalVar(V_RADIO_ROOM_LEFT_DOOR, 1);
+ setGlobalVar(V_RADIO_ROOM_RIGHT_DOOR, 0);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x08C80800, 1);
+ }
+}
+void GameModule::initScene2808Vars1() {
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x20479010)) {
+ for (uint i = 0; i < 3; i++)
+ setSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, i, _vm->_rnd->getRandomNumber(3 - 1) + 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x20479010, 1);
+ }
}
void GameModule::initScene2808Vars2() {
-
- // Exit if it's already initialized
- if (getSubVar(VA_IS_PUZZLE_INIT, 0x66059818))
- return;
-
- for (uint i = 0; i < 3; i++)
- setSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, i, _vm->_rnd->getRandomNumber(6 - 1) + 1);
-
- setSubVar(VA_IS_PUZZLE_INIT, 0x66059818, 1);
+ if (!getSubVar(VA_IS_PUZZLE_INIT, 0x66059818)) {
+ for (uint i = 0; i < 3; i++)
+ setSubVar(VA_GOOD_TEST_TUBES_LEVEL_2, i, _vm->_rnd->getRandomNumber(6 - 1) + 1);
+ setSubVar(VA_IS_PUZZLE_INIT, 0x66059818, 1);
+ }
}
void GameModule::initScene3009Vars() {
@@ -312,8 +314,8 @@ void GameModule::initScene3009Vars() {
}
uint32 GameModule::getScene2802MusicFileHash() {
- uint musicNum = getGlobalVar(0x08CC0828);
- return (musicNum % 5 != 0) ? 0 : kScene2801MusicFileHashes[CLIP<uint>(musicNum / 5, 0, 17)];
+ uint musicIndex = getGlobalVar(V_CURR_RADIO_MUSIC_INDEX);
+ return (musicIndex % 5 != 0) ? 0 : kScene2801MusicFileHashes[CLIP<uint>(musicIndex / 5, 0, 17)];
}
@@ -347,19 +349,21 @@ void GameModule::startup() {
// DEBUG>>>
/*
setGlobalVar(V_SEEN_MUSIC_BOX, 1);
- setGlobalVar(0x0A18CA33, 0);
- setGlobalVar(0x0112090A, 0);
- //setGlobalVar(0x000CF819, 1);
+ setGlobalVar(V_CREATURE_EXPLODED, 0);
+ setGlobalVar(V_MATCH_STATUS, 0);
setGlobalVar(V_PROJECTOR_LOCATION, 2);
*/
//setGlobalVar(V_ENTRANCE_OPEN, 0);
//setGlobalVar(V_DOOR_SPIKES_OPEN, 1);
+ setGlobalVar(V_CREATURE_ANGRY, 1);
+ setGlobalVar(V_RADIO_ENABLED, 1);
+ setGlobalVar(V_TNT_DUMMY_BUILT, 1);
// <<<DEBUG
#if 1
_vm->gameState().which = 0;
- _vm->gameState().sceneNum = 2;
- createModule(2800, -1);
+ _vm->gameState().sceneNum = 0;
+ createModule(1200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -503,7 +507,7 @@ void GameModule::createModule(int moduleNum, int which) {
case 2900:
setGlobalVar(V_MODULE_NAME, 0x81100020);
if (which >= 0)
- setGlobalVar(0x0152899A, which);
+ setGlobalVar(V_TELEPORTER_CURR_LOCATION, which);
_childObject = new Module2900(_vm, this, which);
break;
case 3000:
@@ -719,7 +723,7 @@ void GameModule::updateModule() {
createModule(1100, 1);
break;
case 3:
- setSubVar(0x2C145A98, 2, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 2, 1);
createModule(1700, 1);
break;
case 4:
@@ -731,7 +735,7 @@ void GameModule::updateModule() {
break;
}
} else {
- switch (getGlobalVar(0x0152899A)) {
+ switch (getGlobalVar(V_TELEPORTER_CURR_LOCATION)) {
case 0:
createModule(1300, 6);
break;
@@ -753,7 +757,7 @@ void GameModule::updateModule() {
break;
}
}
- setGlobalVar(0x0152899A, 0);
+ setGlobalVar(V_TELEPORTER_CURR_LOCATION, 0);
break;
case 3000:
if (_moduleResult == 1) {
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index 94fafc8796..275e8d3895 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -42,6 +42,7 @@ public:
void initScene1307Vars();
void initScene1405Vars();
void initScene2401Vars();
+ void initScene2801Vars();
void initScene2808Vars1();
void initScene2808Vars2();
void initScene3009Vars();
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index 19a8a8586a..3e32803acc 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -45,7 +45,6 @@ enum {
V_COLUMN_TEXT_NAME = 0xC8C28808,
V_CLICKED_COLUMN_INDEX = 0x48A68852,
V_CLICKED_COLUMN_ROW = 0x49C40058,
- V_MUSIC_NAME = 0x89A82A15,
// Klayman
V_KLAYMAN_SMALL = 0x1860C990, // Is Klayman small?
V_KLAYMAN_FRAMEINDEX = 0x18288913,
@@ -64,10 +63,12 @@ enum {
V_NOTES_PUZZLE_SOLVED = 0x86615030,
V_TILE_PUZZLE_SOLVED = 0x404290D5,
V_STAIRS_PUZZLE_SOLVED = 0xA9035F60,
+ V_CODE_SYMBOLS_SOLVED = 0x2C531AF8,
V_SPIKES_RETRACTED = 0x18890C91,
V_LARGE_DOOR_NUMBER = 0x9A500914, // Number of the currently "large" door
V_LIGHTS_ON = 0x4D080E54,
V_SHRINK_LIGHTS_ON = 0x190A1D18, // Lights on in the room with the shrinking device
+ V_STAIRS_DOWN_ONCE = 0x2050861A, // Stairs have been down once before
V_STAIRS_DOWN = 0x09221A62,
V_LADDER_DOWN = 0x0018CA22, // Is the ladder in the statue room down?
V_LADDER_DOWN_ACTION = 0x00188211,
@@ -88,7 +89,16 @@ enum {
V_TNT_DUMMY_BUILT = 0x000CF819, // Are all TNT parts on the dummy?
V_TNT_DUMMY_FUSE_LIT = 0x20A0C516,
V_RADIO_ENABLED = 0x4DE80AC0,
- V_CREATURE_EXPLODED = 0x2A02C07B,
+ V_SEEN_CREATURE_EXPLODE_VID = 0x2A02C07B,
+ V_CREATURE_EXPLODED = 0x0A18CA33,
+ V_UNUSED = 0x89C669AA, // Seems to be unused, confirmed by checking the exe for this constant value (still left in atm)
+ // Radio
+ V_RADIO_ROOM_LEFT_DOOR = 0x09880D40,
+ V_RADIO_ROOM_RIGHT_DOOR = 0x08180ABC,
+ V_CURR_RADIO_MUSIC_INDEX = 0x08CC0828,
+ V_GOOD_RADIO_MUSIC_INDEX = 0x88880915,
+ V_GOOD_RADIO_MUSIC_NAME = 0x89A82A15,
+ V_RADIO_MOVE_DISH_VIDEO = 0x28D8C940,
// Match
V_MATCH_STATUS = 0x0112090A,
// Venus fly trap
@@ -111,6 +121,10 @@ enum {
V_PROJECTOR_SLOT = 0x04A10F33, // Projector x slot index
V_PROJECTOR_LOCATION = 0x04A105B3, // Projector scene location
V_PROJECTOR_ACTIVE = 0x12A10DB3, // Is the projecor projecting?
+ // Teleporter
+ V_TELEPORTER_CURR_LOCATION = 0x0152899A,
+ V_TELEPORTER_WHICH = 0x60826830,
+ V_TELEPORTER_DEST_AVAILABLE = 0x2C145A98,
// Inventory
V_HAS_NEEDLE = 0x31C63C51, // Has Klayman the needle?
V_HAS_FINAL_KEY = 0xC0780812, // Has Klayman the key from the diskplayer?
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index e718904cb3..461f8738d4 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -1798,11 +1798,11 @@ uint32 Scene1005::getTextIndex1() {
} else if (getGlobalVar(V_BOLT_DOOR_UNLOCKED)) {
if (!getGlobalVar(V_WALL_BROKEN))
textIndex = 12;
- else if (!getGlobalVar(0x2050861A))
+ else if (!getGlobalVar(V_STAIRS_DOWN_ONCE))
textIndex = 13;
else if (!getGlobalVar(V_RADIO_ENABLED))
textIndex = 50;
- else if (!getGlobalVar(0x89C669AA))
+ else if (!getGlobalVar(V_UNUSED))
textIndex = 14;
else if (!getGlobalVar(V_BEEN_SHRINKING_ROOM))
textIndex = 15;
@@ -1812,7 +1812,7 @@ uint32 Scene1005::getTextIndex1() {
textIndex = 17;
} else if (!getGlobalVar(V_FLYTRAP_RING_EATEN)) {
textIndex = 0;
- } else if (getGlobalVar(0x0A18CA33)) {
+ } else if (getGlobalVar(V_CREATURE_EXPLODED)) {
if (!getGlobalVar(V_TILE_PUZZLE_SOLVED))
textIndex = 4;
else if (!getGlobalVar(V_HAS_TEST_TUBE))
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 99d15b970f..d106a85aea 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -60,7 +60,7 @@ void Module1200::createScene(int sceneNum, int which) {
case 2:
_vm->_soundMan->stopMusic(0x62222CAE, 0, 0);
createSmackerScene(0x31890001, true, true, false);
- setGlobalVar(V_CREATURE_EXPLODED, 1);
+ setGlobalVar(V_SEEN_CREATURE_EXPLODE_VID, 1);
break;
}
SetUpdateHandler(&Module1200::updateScene);
@@ -74,7 +74,7 @@ void Module1200::updateScene() {
if (_moduleResult == 1) {
createScene(1, 0);
} else if (_moduleResult == 2) {
- if (getGlobalVar(0x0A18CA33) && !getGlobalVar(V_CREATURE_EXPLODED)) {
+ if (getGlobalVar(V_CREATURE_EXPLODED) && !getGlobalVar(V_SEEN_CREATURE_EXPLODE_VID)) {
createScene(2, -1);
} else {
leaveModule(1);
@@ -714,7 +714,7 @@ void AsScene1201LeftDoor::stCloseDoor() {
}
Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _flag(false), _asMatch(NULL), _asTntMan(NULL),
+ : Scene(vm, parentModule, true), _creatureExploded(false), _asMatch(NULL), _asTntMan(NULL),
_asCreature(NULL), _asTntManRope(NULL), _asLeftDoor(NULL), _asRightDoor(NULL), _asTape(NULL) {
int16 topY1, topY2, topY3, topY4;
@@ -772,7 +772,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1201>(400, 329);
setMessageList(0x004AEC08);
} else if (which == 2) {
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
insertKlayman<KmScene1201>(374, 333);
setMessageList(0x004AEC08);
} else {
@@ -795,7 +795,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(x1, 0, x2, 480);
_klayman->setRepl(64, 0);
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
setBackground(0x4019A2C4);
setPalette(0x4019A2C4);
_asRightDoor = NULL;
@@ -807,7 +807,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
if (getGlobalVar(V_TNT_DUMMY_BUILT)) {
insertStaticSprite(0x10002ED8, 500);
- if (!getGlobalVar(0x0A18CA33)) {
+ if (!getGlobalVar(V_CREATURE_EXPLODED)) {
_asTntMan = insertSprite<AsScene1201TntMan>(this, _asTntManRope, which == 1);
_asTntMan->setClipRect(x1, 0, x2, 480);
_asTntMan->setRepl(64, 0);
@@ -838,7 +838,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tntIndex += 3;
}
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
setRectList(0x004AEE58);
} else {
setRectList(0x004AEDC8);
@@ -866,7 +866,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tntIndex++;
}
- if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(0x0A18CA33)) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) {
setRectList(0x004AEE18);
} else {
setRectList(0x004AED88);
@@ -890,7 +890,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asMatch);
}
- if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(0x0A18CA33) == 0) {
+ if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_CREATURE_EXPLODED) == 0) {
_asCreature = insertSprite<AsScene1201Creature>(this, _klayman);
_asCreature->setClipRect(x1, 0, x2, 480);
}
@@ -898,6 +898,9 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
}
Scene1201::~Scene1201() {
+ if (_creatureExploded)
+ setGlobalVar(V_CREATURE_EXPLODED, 1);
+ setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0);
}
void Scene1201::update() {
@@ -911,7 +914,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam &param, Entit
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x07053000) {
- _flag = true;
+ _creatureExploded = true;
sendMessage(_asCreature, 0x2004, 0);
} else if (param.asInteger() == 0x140E5744) {
sendMessage(_asCreature, 0x2005, 0);
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index bc3281c233..7d4e224a38 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -172,7 +172,7 @@ protected:
Sprite *_asRightDoor;
Sprite *_asTape;
Sprite *_asKlaymanHead;
- bool _flag;
+ bool _creatureExploded;
void update();
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
};
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index eb8f4fed87..b5489a39f9 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -917,15 +917,15 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
if (_asPuzzleBox)
_asPuzzleBox->setClipRect(0, 0, 640, _ssBridgePart3->getDrawRect().y2());
- if (getGlobalVar(0x4A105B3) == 1) {
+ if (getGlobalVar(V_PROJECTOR_LOCATION) == 1) {
_asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_asProjector);
- if (getGlobalVar(0x4A10F33) == 4) {
+ if (getGlobalVar(V_PROJECTOR_SLOT) == 4) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() + 100);
_klayman->processDelta();
setMessageList(0x004B0BD0);
- } else if (getGlobalVar(0x4A10F33) == 0) {
+ } else if (getGlobalVar(V_PROJECTOR_SLOT) == 0) {
sendEntityMessage(_klayman, 0x1014, _asProjector);
_klayman->setX(_asProjector->getX() - 100);
_klayman->processDelta();
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index 22ffaf64ff..b6df7061c2 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -1448,7 +1448,7 @@ uint32 Scene1609::handleMessage(int messageNum, const MessageParam &param, Entit
if (_symbolPosition >= 12) {
if (testVars()) {
playSound(0);
- setGlobalVar(0x2C531AF8, 1);
+ setGlobalVar(V_CODE_SYMBOLS_SOLVED, 1);
_isSolved = true;
} else {
_symbolPosition = 0;
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 7925c46b9a..d90074c2cf 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -105,7 +105,7 @@ Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x40A40168, 100);
} else if (getGlobalVar(V_STAIRS_DOWN)) {
insertStaticSprite(0x124404C4, 100);
- setGlobalVar(0x2050861A, 1);
+ setGlobalVar(V_STAIRS_DOWN_ONCE, 1);
} else {
insertStaticSprite(0x02840064, 100);
}
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 75a6ebe899..bd5597dbf8 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -55,7 +55,7 @@ void Module2000::createScene(int sceneNum, int which) {
break;
case 2:
setGlobalVar(V_WORLDS_JOINED, 1);
- setSubVar(0x2C145A98, 1, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 1, 1);
createSmackerScene(0x204B2031, true, true, false);
break;
}
diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp
index 080f8151b2..19bf9be6cb 100644
--- a/engines/neverhood/module2700.cpp
+++ b/engines/neverhood/module2700.cpp
@@ -458,8 +458,8 @@ void Module2700::updateScene() {
case 21:
if (!_flag1) {
_vm->_soundMan->stopMusic(0x04020210, 0, 1);
- // TODO _vm->gameModule()->initScene2801Vars();
- _musicFileHash = getGlobalVar(V_MUSIC_NAME);
+ _vm->gameModule()->initScene2801Vars();
+ _musicFileHash = getGlobalVar(V_GOOD_RADIO_MUSIC_NAME);
// TODO? GameState_sub_469C50(&field_52, 0);
// TODO MusicMan_create(); // Why?
_vm->_soundMan->addMusic(0x42212411, _musicFileHash);
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index a47d9cb355..b6f56945a0 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -35,7 +35,7 @@ Module2800::Module2800(NeverhoodEngine *vm, Module *parentModule, int which)
_currentMusicFileHash = 0;
_vm->_soundMan->addMusic(0x64210814, 0xD2FA4D14);
- setGlobalVar(0x28D8C940, 1);
+ setGlobalVar(V_RADIO_MOVE_DISH_VIDEO, 1);
if (which < 0) {
createScene(_vm->gameState().sceneNum, which);
@@ -402,7 +402,7 @@ void Module2800::updateMusic(bool halfVolume) {
Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- // TODO _vm->gameModule()->initScene2801Vars();
+ _vm->gameModule()->initScene2801Vars();
_surfaceFlag = true;
SetMessageHandler(&Scene2801::handleMessage);
@@ -432,7 +432,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B6BB0);
}
- if (getGlobalVar(0x09880D40)) {
+ if (getGlobalVar(V_RADIO_ROOM_LEFT_DOOR)) {
setRectList(0x004B6CE0);
setBackground(0x01400666);
setPalette(0x01400666);
@@ -444,7 +444,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x0066201C);
_asTape = insertSprite<AsScene1201Tape>(this, 8, 1100, 302, 437, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- } else if (getGlobalVar(0x08180ABC)) {
+ } else if (getGlobalVar(V_RADIO_ROOM_RIGHT_DOOR)) {
setRectList(0x004B6CD0);
setBackground(0x11E00684);
setPalette(0x11E00684);
@@ -507,10 +507,10 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam &param, Entit
}
Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _countdownType(0), _countdown1(0), _countdown2(0) {
+ : Scene(vm, parentModule, true), _currTuneStatus(0), _countdown1(0), _countdown2(0) {
//DEBUG>>> Disable video
- setGlobalVar(0x28D8C940, 0);
+ setGlobalVar(V_RADIO_MOVE_DISH_VIDEO, 0);
//DEBUG<<<
_surfaceFlag = true;
@@ -518,123 +518,127 @@ Scene2802::Scene2802(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2802::update);
insertMouse435(0x008810A8, 20, 620);
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x8284C100, true, true, true));
- _smackerFrameNumber = getGlobalVar(0x08CC0828);
- _smackerPlayer->gotoFrame(_smackerFrameNumber);
+ _currRadioMusicIndex = getGlobalVar(V_CURR_RADIO_MUSIC_INDEX);
+ _smackerPlayer->gotoFrame(_currRadioMusicIndex);
_vm->_soundMan->addSound(0x04360A18, 0x422630C2);
_vm->_soundMan->addSound(0x04360A18, 0x00632252);
_vm->_soundMan->addSound(0x04360A18, 0x00372241);
_vm->_soundMan->setSoundVolume(0x00372241, 60);
- changeCountdownType(0, 0);
+ changeTuneStatus(0, 0);
_vm->_soundMan->playSoundLooping(0x00372241);
}
Scene2802::~Scene2802() {
_vm->_soundMan->deleteSoundGroup(0x04360A18);
- if (_smackerFrameNumber == 0) {
- setGlobalVar(0x09880D40, 1);
- setGlobalVar(0x08180ABC, 0);
- } else if (_smackerFrameNumber == getGlobalVar(0x88880915)) {
- setGlobalVar(0x09880D40, 0);
- setGlobalVar(0x08180ABC, 1);
+ if (_currRadioMusicIndex == 0) {
+ setGlobalVar(V_RADIO_ROOM_LEFT_DOOR, 1);
+ setGlobalVar(V_RADIO_ROOM_RIGHT_DOOR, 0);
+ } else if (_currRadioMusicIndex == getGlobalVar(V_GOOD_RADIO_MUSIC_INDEX)) {
+ setGlobalVar(V_RADIO_ROOM_LEFT_DOOR, 0);
+ setGlobalVar(V_RADIO_ROOM_RIGHT_DOOR, 1);
} else {
- setGlobalVar(0x09880D40, 0);
- setGlobalVar(0x08180ABC, 0);
+ setGlobalVar(V_RADIO_ROOM_LEFT_DOOR, 0);
+ setGlobalVar(V_RADIO_ROOM_RIGHT_DOOR, 0);
}
- setGlobalVar(0x08CC0828, _smackerFrameNumber);
+ setGlobalVar(V_CURR_RADIO_MUSIC_INDEX, _currRadioMusicIndex);
}
void Scene2802::update() {
- int prevCountdownType = _countdownType;
- uint prevSmackerFrameNumber = _smackerFrameNumber;
+ int prevTuneStatus = _currTuneStatus;
+ uint prevRadioMusicIndex = _currRadioMusicIndex;
Scene::update();
if (_countdown1 > 0)
--_countdown1;
- else if (_countdownType == 1)
- _countdownType = 3;
- else if (_countdownType == 4)
- _countdownType = 6;
+ else if (_currTuneStatus == 1)
+ _currTuneStatus = 3;
+ else if (_currTuneStatus == 4)
+ _currTuneStatus = 6;
- switch (_countdownType) {
+ switch (_currTuneStatus) {
case 2:
- if (_smackerFrameNumber < 90)
- incSmackerFrameNumber(+1);
- _countdownType = 0;
+ if (_currRadioMusicIndex < 90)
+ incRadioMusicIndex(+1);
+ _currTuneStatus = 0;
break;
case 3:
if (_countdown2 > 0)
--_countdown2;
- else if (_smackerFrameNumber < 90) {
- incSmackerFrameNumber(+1);
+ else if (_currRadioMusicIndex < 90) {
+ incRadioMusicIndex(+1);
_countdown2 = 1;
} else
- _countdownType = 0;
+ _currTuneStatus = 0;
break;
case 5:
- if (_smackerFrameNumber > 0)
- incSmackerFrameNumber(-1);
- _countdownType = 0;
+ if (_currRadioMusicIndex > 0)
+ incRadioMusicIndex(-1);
+ _currTuneStatus = 0;
break;
case 6:
if (_countdown2 > 0)
--_countdown2;
- else if (_smackerFrameNumber > 0) {
- incSmackerFrameNumber(-1);
+ else if (_currRadioMusicIndex > 0) {
+ incRadioMusicIndex(-1);
_countdown2 = 1;
} else
- _countdownType = 0;
+ _currTuneStatus = 0;
break;
}
- if (prevSmackerFrameNumber != _smackerFrameNumber)
- _smackerPlayer->gotoFrame(_smackerFrameNumber);
+ if (prevRadioMusicIndex != _currRadioMusicIndex)
+ _smackerPlayer->gotoFrame(_currRadioMusicIndex);
- if (prevCountdownType != _countdownType)
- changeCountdownType(prevCountdownType, _countdownType);
+ if (prevTuneStatus != _currTuneStatus)
+ changeTuneStatus(prevTuneStatus, _currTuneStatus);
+
+ //DEBUG>>>
+ debug("_currRadioMusicIndex = %d; V_GOOD_RADIO_MUSIC_INDEX = %d", _currRadioMusicIndex, getGlobalVar(V_GOOD_RADIO_MUSIC_INDEX));
+ //DEBUG<<<
- if (getGlobalVar(0x28D8C940) && prevCountdownType != _countdownType && _smackerFrameNumber != 0) {
- setGlobalVar(0x28D8C940, 0);
+ if (getGlobalVar(V_RADIO_MOVE_DISH_VIDEO) && prevTuneStatus != _currTuneStatus && _currRadioMusicIndex != 0) {
+ setGlobalVar(V_RADIO_MOVE_DISH_VIDEO, 0);
leaveScene(1);
}
}
uint32 Scene2802::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
- int prevCountdownType = _countdownType;
+ int prevTuneStatus = _currTuneStatus;
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
leaveScene(0);
- } else if (_countdownType == 0) {
+ } else if (_currTuneStatus == 0) {
if (param.asPoint().x > 180 && param.asPoint().x < 300 &&
param.asPoint().y > 130 && param.asPoint().y < 310) {
- _countdownType = 4;
+ _currTuneStatus = 4;
} else if (param.asPoint().x > 300 && param.asPoint().x < 400 &&
param.asPoint().y > 130 && param.asPoint().y < 310) {
- _countdownType = 1;
+ _currTuneStatus = 1;
}
- if (_countdownType == 1 || _countdownType == 4) {
+ if (_currTuneStatus == 1 || _currTuneStatus == 4) {
_countdown1 = 8;
- changeCountdownType(0, _countdownType);
+ changeTuneStatus(0, _currTuneStatus);
}
}
break;
case 0x0002:
if (_countdown1 == 0)
- _countdownType = 0;
+ _currTuneStatus = 0;
else {
- if (_countdownType == 1)
- _countdownType = 2;
- else if (_countdownType == 4)
- _countdownType = 5;
+ if (_currTuneStatus == 1)
+ _currTuneStatus = 2;
+ else if (_currTuneStatus == 4)
+ _currTuneStatus = 5;
else
- _countdownType = 0;
+ _currTuneStatus = 0;
_countdown1 = 0;
}
- if (prevCountdownType != _countdownType)
- changeCountdownType(prevCountdownType, _countdownType);
+ if (prevTuneStatus != _currTuneStatus)
+ changeTuneStatus(prevTuneStatus, _currTuneStatus);
break;
case 0x000D:
// DEBUG message
@@ -643,25 +647,25 @@ uint32 Scene2802::handleMessage(int messageNum, const MessageParam &param, Entit
return 0;
}
-void Scene2802::incSmackerFrameNumber(int delta) {
- _smackerFrameNumber += delta;
- setGlobalVar(0x08CC0828, _smackerFrameNumber);
+void Scene2802::incRadioMusicIndex(int delta) {
+ _currRadioMusicIndex += delta;
+ setGlobalVar(V_CURR_RADIO_MUSIC_INDEX, _currRadioMusicIndex);
}
-void Scene2802::changeCountdownType(int prevCountdownType, int newCountdownType) {
+void Scene2802::changeTuneStatus(int prevTuneStatus, int newTuneStatus) {
- if (prevCountdownType == 3 || prevCountdownType == 6) {
+ if (prevTuneStatus == 3 || prevTuneStatus == 6) {
_vm->_soundMan->stopSound(0x422630C2);
_vm->_soundMan->stopSound(0x00632252);
}
- if (newCountdownType == 0) {
+ if (newTuneStatus == 0) {
if (_vm->_gameModule->getScene2802MusicFileHash() != 0) {
_vm->_soundMan->stopSound(0x00632252);
}
else
_vm->_soundMan->playSoundLooping(0x00632252);
- } else if (newCountdownType == 3 || newCountdownType == 6) {
+ } else if (newTuneStatus == 3 || newTuneStatus == 6) {
_vm->_soundMan->playSoundLooping(0x422630C2);
_vm->_soundMan->playSoundLooping(0x00632252);
}
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index ca8b058ca1..bdcb1ee080 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -62,14 +62,14 @@ public:
virtual ~Scene2802();
protected:
SmackerPlayer *_smackerPlayer;
- uint _smackerFrameNumber;
- int _countdownType;
+ uint _currRadioMusicIndex;
+ int _currTuneStatus;
int _countdown1;
int _countdown2;
void update();
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
- void incSmackerFrameNumber(int delta);
- void changeCountdownType(int prevCountdownType, int newCountdownType);
+ void incRadioMusicIndex(int delta);
+ void changeTuneStatus(int prevTuneStatus, int newTuneStatus);
};
class AsScene2803LightCord : public AnimatedSprite {
diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp
index 2ebdb094a3..0a033a8120 100644
--- a/engines/neverhood/module2900.cpp
+++ b/engines/neverhood/module2900.cpp
@@ -35,7 +35,7 @@ Module2900::Module2900(NeverhoodEngine *vm, Module *parentModule, int which)
: Module(vm, parentModule) {
if (which >= 0)
- setGlobalVar(0x60826830, which);
+ setGlobalVar(V_TELEPORTER_WHICH, which);
createScene(0, 0);
@@ -47,7 +47,7 @@ void Module2900::createScene(int sceneNum, int which) {
switch (_sceneNum) {
case 0:
_vm->gameState().sceneNum = 0;
- _childObject = new Scene2901(_vm, this, getGlobalVar(0x60826830));
+ _childObject = new Scene2901(_vm, this, getGlobalVar(V_TELEPORTER_WHICH));
break;
case 1:
_vm->gameState().sceneNum = 0;
@@ -85,8 +85,8 @@ void Module2900::updateScene() {
if (_moduleResult == 0xFFFFFFFF) {
leaveModule(0xFFFFFFFF);
} else {
- _field2C = _moduleResult;
- switch (getGlobalVar(0x60826830)) {
+ _teleporterModuleResult = _moduleResult;
+ switch (getGlobalVar(V_TELEPORTER_WHICH)) {
case 0:
createScene(3, 4);
break;
@@ -117,7 +117,7 @@ void Module2900::updateScene() {
case 4:
case 5:
case 6:
- leaveModule(_field2C);
+ leaveModule(_teleporterModuleResult);
break;
}
}
@@ -391,15 +391,15 @@ Scene2901::Scene2901(NeverhoodEngine *vm, Module *parentModule, int which)
//DEBUG>>> Enable all locations
for (int i = 0; i < 6; i++)
- setSubVar(0x2C145A98, i, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, i, 1);
//DEBUG<<<
- setSubVar(0x2C145A98, which, 1);
- setSubVar(0x2C145A98, 5, 1);
- setSubVar(0x2C145A98, 4, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, which, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 5, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 4, 1);
if (_currLocationButtonNum == 3)
- setSubVar(0x2C145A98, 2, 1);
+ setSubVar(V_TELEPORTER_DEST_AVAILABLE, 2, 1);
_surfaceFlag = true;
setBackground(kScene2901FileHashes1[_currLocationButtonNum]);
@@ -432,7 +432,7 @@ void Scene2901::update() {
if (_currLocationButtonNum == _selectedButtonNum) {
_ssLocationButtonLights[_currWhirlButtonNum]->hide();
++_currWhirlButtonNum;
- while (!getSubVar(0x2C145A98, _currWhirlButtonNum) || (_currWhirlButtonNum == 2 && _isButton2Broken) || _currLocationButtonNum == _currWhirlButtonNum) {
+ while (!getSubVar(V_TELEPORTER_DEST_AVAILABLE, _currWhirlButtonNum) || (_currWhirlButtonNum == 2 && _isButton2Broken) || _currLocationButtonNum == _currWhirlButtonNum) {
++_currWhirlButtonNum;
if (_currWhirlButtonNum >= 6)
_currWhirlButtonNum = 0;
@@ -474,7 +474,7 @@ uint32 Scene2901::handleMessage(int messageNum, const MessageParam &param, Entit
_selectedButtonNum = _currWhirlButtonNum;
_ssLocationButtonLights[_selectedButtonNum]->hide();
_selectedButtonNum = param.asInteger();
- if (!getSubVar(0x2C145A98, _selectedButtonNum))
+ if (!getSubVar(V_TELEPORTER_DEST_AVAILABLE, _selectedButtonNum))
_selectedButtonNum = _currLocationButtonNum;
break;
}
diff --git a/engines/neverhood/module2900.h b/engines/neverhood/module2900.h
index 7d4e1e4d9f..19514399e5 100644
--- a/engines/neverhood/module2900.h
+++ b/engines/neverhood/module2900.h
@@ -36,7 +36,7 @@ public:
Module2900(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
int _sceneNum;
- int _field2C;
+ int _teleporterModuleResult;
void createScene(int sceneNum, int which);
void updateScene();
void updateMusic(bool halfVolume);