aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/neverhood/gamemodule.cpp7
-rw-r--r--engines/neverhood/module2200.cpp645
-rw-r--r--engines/neverhood/module2200.h39
-rw-r--r--engines/neverhood/staticdata.cpp32
-rw-r--r--engines/neverhood/staticdata.h6
5 files changed, 337 insertions, 392 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index adf2c49b88..5fec376464 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -307,6 +307,7 @@ void GameModule::startup() {
setSubVar(V_TELEPORTER_DEST_AVAILABLE, i, 1);
//setGlobalVar(V_PROJECTOR_LOCATION, 4);
setGlobalVar(V_KEYDOOR_UNLOCKED, 1);
+ setGlobalVar(V_LIGHTS_ON, 1);
// <<<DEBUG
#if 1
@@ -317,9 +318,9 @@ void GameModule::startup() {
//DEBUG<<<
*/
- _vm->gameState().which = 3;
- _vm->gameState().sceneNum = 0;
- createModule(2100, -1);
+ _vm->gameState().which = 2;
+ _vm->gameState().sceneNum = 41;
+ createModule(2200, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 102704af2c..8616592c18 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -35,11 +35,10 @@ Module2200::Module2200(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_soundMan->addMusic(0x11391412, 0x601C908C);
- if (which < 0) {
+ if (which < 0)
createScene(_vm->gameState().sceneNum, -1);
- } else {
+ else
createScene(0, 0);
- }
}
@@ -48,158 +47,205 @@ Module2200::~Module2200() {
}
void Module2200::createScene(int sceneNum, int which) {
- // CHECKME if this can be used regardless of the new sceneNum
- if (sceneNum == 7 && which >= 0)
- _vm->gameState().which = _vm->gameState().sceneNum;
- _vm->gameState().sceneNum = sceneNum;
- switch (_vm->gameState().sceneNum) {
+ _sceneNum = sceneNum;
+ switch (_sceneNum) {
case 0:
+ _vm->gameState().sceneNum = 0;
_childObject = new Scene2201(_vm, this, which);
break;
case 1:
+ _vm->gameState().sceneNum = 1;
_vm->_soundMan->startMusic(0x601C908C, 0, 2);
_childObject = new Scene2202(_vm, this, which);
break;
case 2:
+ _vm->gameState().sceneNum = 2;
_vm->_soundMan->startMusic(0x601C908C, 0, 2);
_childObject = new Scene2203(_vm, this, which);
break;
case 3:
+ _vm->gameState().sceneNum = 3;
_vm->_soundMan->stopMusic(0x601C908C, 0, 2);
_childObject = new DiskplayerScene(_vm, this, 3);
break;
case 4:
+ _vm->gameState().sceneNum = 4;
_vm->_soundMan->stopMusic(0x601C908C, 0, 2);
_childObject = new Scene2205(_vm, this, which);
break;
case 5:
+ _vm->gameState().sceneNum = 5;
_vm->_soundMan->stopMusic(0x601C908C, 0, 2);
_childObject = new Scene2206(_vm, this, which);
break;
case 6:
- _childObject = new Scene2207(_vm, this, which);
+ _vm->gameState().sceneNum = 6;
+ _childObject = new Scene2207(_vm, this);
break;
case 7:
+ if (which >= 0)
+ _vm->gameState().which = _vm->gameState().sceneNum;
+ _vm->gameState().sceneNum = 7;
_childObject = new Scene2208(_vm, this, which);
break;
case 8:
+ _vm->gameState().sceneNum = 8;
_childObject = new Scene2208(_vm, this, which);
break;
case 9:
+ _vm->gameState().sceneNum = 9;
createHallOfRecordsScene(which, 0x004B7180);
break;
case 10:
+ _vm->gameState().sceneNum = 10;
createHallOfRecordsScene(which, 0x004B7198);
break;
case 11:
+ _vm->gameState().sceneNum = 11;
createHallOfRecordsScene(which, 0x004B71B0);
break;
case 12:
+ _vm->gameState().sceneNum = 12;
createHallOfRecordsScene(which, 0x004B71C8);
break;
case 13:
+ _vm->gameState().sceneNum = 13;
createHallOfRecordsScene(which, 0x004B71E0);
break;
case 14:
+ _vm->gameState().sceneNum = 14;
createHallOfRecordsScene(which, 0x004B71F8);
break;
case 15:
+ _vm->gameState().sceneNum = 15;
createHallOfRecordsScene(which, 0x004B7210);
break;
case 16:
+ _vm->gameState().sceneNum = 16;
createHallOfRecordsScene(which, 0x004B7228);
break;
case 17:
+ _vm->gameState().sceneNum = 17;
createHallOfRecordsScene(which, 0x004B7240);
break;
case 18:
+ _vm->gameState().sceneNum = 18;
createHallOfRecordsScene(which, 0x004B7258);
break;
case 19:
+ _vm->gameState().sceneNum = 19;
createHallOfRecordsScene(which, 0x004B7270);
break;
case 20:
+ _vm->gameState().sceneNum = 20;
createHallOfRecordsScene(which, 0x004B7288);
break;
case 21:
+ _vm->gameState().sceneNum = 21;
createHallOfRecordsScene(which, 0x004B72A0);
break;
case 22:
+ _vm->gameState().sceneNum = 22;
createHallOfRecordsScene(which, 0x004B72B8);
break;
case 23:
+ _vm->gameState().sceneNum = 23;
createHallOfRecordsScene(which, 0x004B72D0);
break;
case 24:
+ _vm->gameState().sceneNum = 24;
createHallOfRecordsScene(which, 0x004B72E8);
break;
case 25:
+ _vm->gameState().sceneNum = 25;
createHallOfRecordsScene(which, 0x004B7300);
break;
case 26:
+ _vm->gameState().sceneNum = 26;
createHallOfRecordsScene(which, 0x004B7318);
break;
case 27:
+ _vm->gameState().sceneNum = 27;
createHallOfRecordsScene(which, 0x004B7330);
break;
case 28:
+ _vm->gameState().sceneNum = 28;
createHallOfRecordsScene(which, 0x004B7348);
break;
case 29:
+ _vm->gameState().sceneNum = 29;
createHallOfRecordsScene(which, 0x004B7360);
break;
case 30:
+ _vm->gameState().sceneNum = 30;
createHallOfRecordsScene(which, 0x004B7378);
break;
case 31:
+ _vm->gameState().sceneNum = 31;
createHallOfRecordsScene(which, 0x004B7390);
break;
case 32:
+ _vm->gameState().sceneNum = 32;
createHallOfRecordsScene(which, 0x004B73A8);
break;
case 33:
+ _vm->gameState().sceneNum = 33;
createHallOfRecordsScene(which, 0x004B73C0);
break;
case 34:
+ _vm->gameState().sceneNum = 34;
createHallOfRecordsScene(which, 0x004B73D8);
break;
case 35:
+ _vm->gameState().sceneNum = 35;
createHallOfRecordsScene(which, 0x004B73F0);
break;
case 36:
+ _vm->gameState().sceneNum = 36;
createHallOfRecordsScene(which, 0x004B7408);
break;
case 37:
+ _vm->gameState().sceneNum = 37;
createHallOfRecordsScene(which, 0x004B7420);
break;
case 38:
+ _vm->gameState().sceneNum = 38;
createHallOfRecordsScene(which, 0x004B7438);
break;
case 39:
+ _vm->gameState().sceneNum = 39;
createHallOfRecordsScene(which, 0x004B7450);
break;
case 40:
+ _vm->gameState().sceneNum = 40;
createHallOfRecordsScene(which, 0x004B7468);
break;
case 41:
+ _vm->gameState().sceneNum = 41;
_childObject = new Scene2242(_vm, this, which);
break;
case 42:
+ _vm->gameState().sceneNum = 42;
createHallOfRecordsScene(which, 0x004B7480);
break;
case 43:
+ _vm->gameState().sceneNum = 43;
createHallOfRecordsScene(which, 0x004B7498);
break;
case 44:
+ _vm->gameState().sceneNum = 44;
createHallOfRecordsScene(which, 0x004B74B0);
break;
case 45:
+ _vm->gameState().sceneNum = 45;
createHallOfRecordsScene(which, 0x004B74C8);
break;
case 46:
+ _vm->gameState().sceneNum = 46;
_childObject = new Scene2247(_vm, this, which);
break;
case 47:
+ _vm->gameState().sceneNum = 47;
if (!getGlobalVar(V_WORLDS_JOINED)) {
if (getGlobalVar(V_LIGHTS_ON))
createStaticScene(0x83110287, 0x10283839);
@@ -222,50 +268,46 @@ void Module2200::createScene(int sceneNum, int which) {
void Module2200::updateScene() {
if (!updateChild()) {
- switch (_vm->gameState().sceneNum) {
+ switch (_sceneNum) {
case 0:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(2, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(1, 0);
- } else {
+ else
leaveModule(0);
- }
break;
case 1:
createScene(0, 2);
break;
case 2:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(4, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(3, 0);
- } else {
+ else
createScene(0, 1);
- }
break;
case 3:
createScene(2, 2);
break;
case 4:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(5, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(4, 2);
- } else {
+ else
createScene(2, 1);
- }
break;
case 5:
- if (_moduleResult == 1) {
+ if (_moduleResult == 1)
createScene(46, 0);
- } else if (_moduleResult == 2) {
+ else if (_moduleResult == 2)
createScene(6, 0);
- } else if (_moduleResult == 3) {
+ else if (_moduleResult == 3)
createScene(8, 0);
- } else {
+ else
createScene(4, 1);
- }
break;
case 6:
createScene(5, 2);
@@ -399,8 +441,8 @@ void Module2200::updateScene() {
#undef HallOfRecordsSceneLink
-void Module2200::createHallOfRecordsScene(int which, uint32 sceneInfo140Id) {
- _childObject = new HallOfRecordsScene(_vm, this, which, sceneInfo140Id);
+void Module2200::createHallOfRecordsScene(int which, uint32 hallOfRecordsInfoId) {
+ _childObject = new HallOfRecordsScene(_vm, this, which, hallOfRecordsInfoId);
}
// Scene2201
@@ -415,15 +457,15 @@ AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm)
SetUpdateHandler(&AnimatedSprite::update);
}
-AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool flag1)
- : AnimatedSprite(vm, 1100), _klayman(klayman), _ssDoorLight(ssDoorLight), _countdown(0), _doorOpen(flag1) {
+AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool isOpen)
+ : AnimatedSprite(vm, 1100), _klayman(klayman), _ssDoorLight(ssDoorLight), _countdown(0), _isOpen(isOpen) {
_x = 408;
_y = 290;
createSurface(900, 63, 266);
SetUpdateHandler(&AsScene2201Door::update);
SetMessageHandler(&AsScene2201Door::handleMessage);
- if (_doorOpen) {
+ if (_isOpen) {
startAnimation(0xE2CB0412, -1, -1);
_countdown = 48;
_newStickFrameIndex = STICK_LAST_FRAME;
@@ -435,9 +477,8 @@ AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *
}
void AsScene2201Door::update() {
- if (_countdown != 0 && _doorOpen && (--_countdown == 0)) {
+ if (_countdown != 0 && _isOpen && (--_countdown == 0))
stCloseDoor();
- }
AnimatedSprite::update();
}
@@ -446,24 +487,24 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam &param,
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x11001090) {
- if (_doorOpen)
+ if (_isOpen)
_ssDoorLight->setVisible(true);
} else if (param.asInteger() == 0x11283090) {
- if (!_doorOpen)
+ if (!_isOpen)
_ssDoorLight->setVisible(false);
}
break;
case 0x2000:
- if (_doorOpen)
+ if (_isOpen)
_countdown = 144;
- messageResult = _doorOpen ? 1 : 0;
+ messageResult = _isOpen ? 1 : 0;
break;
case 0x3002:
gotoNextState();
break;
case 0x4808:
_countdown = 144;
- if (!_doorOpen)
+ if (!_isOpen)
stOpenDoor();
break;
}
@@ -471,14 +512,14 @@ uint32 AsScene2201Door::handleMessage(int messageNum, const MessageParam &param,
}
void AsScene2201Door::stOpenDoor() {
- _doorOpen = true;
+ _isOpen = true;
startAnimation(0xE2CB0412, 0, -1);
_newStickFrameIndex = STICK_LAST_FRAME;
playSound(0, calcHash("fxDoorOpen33"));
}
void AsScene2201Door::stCloseDoor() {
- _doorOpen = false;
+ _isOpen = false;
startAnimation(0xE2CB0412, -1, -1);
_playBackwards = true;
_newStickFrameIndex = 0;
@@ -507,14 +548,12 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
loadDataResource(0x04104242);
loadHitRectList();
-
setBackground(0x40008208);
setPalette(0x40008208);
insertMouse433(0x0820C408);
_asTape = insertSprite<AsScene1201Tape>(this, 7, 1100, 459, 432, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
-
_ssDoorButton = insertSprite<SsCommonPressButton>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
for (uint32 cubeIndex = 0; cubeIndex < 9; cubeIndex++)
@@ -526,42 +565,40 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_clipRects[1].x2 = 640;
_clipRects[1].y2 = 480;
- if (!getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
+ if (!getGlobalVar(V_TILE_PUZZLE_SOLVED))
insertStaticSprite(0x00026027, 900);
- }
tempSprite = insertStaticSprite(0x030326A0, 1100);
_clipRects[0].x1 = tempSprite->getDrawRect().x;
-
insertStaticSprite(0x811DA061, 1100);
-
tempSprite = insertStaticSprite(0x11180022, 1100);
_clipRects[1].x1 = tempSprite->getDrawRect().x;
-
tempSprite = insertStaticSprite(0x0D411130, 1100);
_clipRects[0].y2 = tempSprite->getDrawRect().y2();
_clipRects[1].y1 = tempSprite->getDrawRect().y2();
-
_ssDoorLight = insertStaticSprite(0xA4062212, 900);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2201>(300, 427, _clipRects, 2);
setMessageList(0x004B8118);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else if (which == 1) {
+ // Klaymen entering from the back
insertKlayman<KmScene2201>(412, 393, _clipRects, 2);
setMessageList(0x004B8130);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else if (which == 2) {
+ // Klaymen returning from the puzzle
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene2201>(379, 427, _clipRects, 2);
_klayman->setDoDeltaX(1);
- } else {
+ } else
insertKlayman<KmScene2201>(261, 427, _clipRects, 2);
- }
setMessageList(0x004B8178);
_asDoor = insertSprite<AsScene2201Door>(_klayman, _ssDoorLight, false);
} else {
+ // Klaymen entering from the left
NPoint pt = _dataResource.getPoint(0x0304D8DC);
insertKlayman<KmScene2201>(pt.x, pt.y, _clipRects, 2);
setMessageList(0x004B8120);
@@ -591,34 +628,30 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam &param, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x402064D8) {
+ if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssDoorButton);
- } else if (param.asInteger() == 0x35803198) {
- if (sendMessage(_asDoor, 0x2000, 0)) {
+ else if (param.asInteger() == 0x35803198) {
+ if (sendMessage(_asDoor, 0x2000, 0))
setMessageList(0x004B81A0);
- } else {
+ else
setMessageList(0x004B81B8);
- }
} else if (param.asInteger() == 0x51445010) {
- if (getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
+ if (getGlobalVar(V_TILE_PUZZLE_SOLVED))
setMessageList(0x004B8108);
- } else {
+ else
setMessageList(0x004B8150);
- }
- } else if (param.asInteger() == 0x1D203082) {
+ } else if (param.asInteger() == 0x1D203082)
setMessageList(0x004B8180);
- } else if (param.asInteger() == 0x00049091) {
- if (getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
+ else if (param.asInteger() == 0x00049091) {
+ if (getGlobalVar(V_TILE_PUZZLE_SOLVED))
setMessageList(0x004B8138);
- } else {
+ else
setMessageList(0x004B8108);
- }
}
break;
case 0x480B:
- if (sender == _ssDoorButton) {
+ if (sender == _ssDoorButton)
sendMessage(_asDoor, 0x4808, 0);
- }
break;
case 0x4826:
if (sender == _asTape) {
@@ -630,82 +663,65 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam &param, Entit
return 0;
}
-static const NPoint kSsScene2202PuzzleTilePoints[] = {
- {196, 105},
- {323, 102},
- {445, 106},
- {192, 216},
- {319, 220},
- {446, 216},
- {188, 320},
- {319, 319},
- {443, 322}
+static const NPoint kSsScene2202PuzzleCubePoints[] = {
+ {196, 105}, {323, 102}, {445, 106},
+ {192, 216}, {319, 220}, {446, 216},
+ {188, 320}, {319, 319}, {443, 322}
};
-static const uint32 kSsScene2202PuzzleTileFileHashes1[] = {
- 0xA500800C,
- 0x2182910C,
- 0x2323980C,
- 0x23049084,
- 0x21008080,
- 0x2303900C,
- 0x6120980C,
- 0x2504D808
+static const uint32 kSsScene2202PuzzleCubeFileHashes1[] = {
+ 0xA500800C, 0x2182910C, 0x2323980C,
+ 0x23049084, 0x21008080, 0x2303900C,
+ 0x6120980C, 0x2504D808
};
-static const uint32 kSsScene2202PuzzleTileFileHashes2[] = {
- 0x0AAD8080,
- 0x0A290291,
- 0x0A2BA398,
- 0x822B8490,
- 0x86298080,
- 0x0A2B8390,
- 0x0A69A098,
- 0x0E2D84D8
+static const uint32 kSsScene2202PuzzleCubeFileHashes2[] = {
+ 0x0AAD8080, 0x0A290291, 0x0A2BA398,
+ 0x822B8490, 0x86298080, 0x0A2B8390,
+ 0x0A69A098, 0x0E2D84D8
};
-SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value)
- : StaticSprite(vm, 900), _parentScene(parentScene), _value(value), _tileIndex(tileIndex), _isMoving(false) {
+SsScene2202PuzzleCube::SsScene2202PuzzleCube(NeverhoodEngine *vm, Scene *parentScene, int16 cubePosition, int16 cubeSymbol)
+ : StaticSprite(vm, 900), _parentScene(parentScene), _cubeSymbol(cubeSymbol), _cubePosition(cubePosition), _isMoving(false) {
int surfacePriority;
- SetUpdateHandler(&SsScene2202PuzzleTile::update);
- SetMessageHandler(&SsScene2202PuzzleTile::handleMessage);
- if (_tileIndex >= 0 && _tileIndex <= 2)
+ SetUpdateHandler(&SsScene2202PuzzleCube::update);
+ SetMessageHandler(&SsScene2202PuzzleCube::handleMessage);
+ if (_cubePosition >= 0 && _cubePosition <= 2)
surfacePriority = 100;
- else if (_tileIndex >= 3 && _tileIndex <= 5)
+ else if (_cubePosition >= 3 && _cubePosition <= 5)
surfacePriority = 300;
else
surfacePriority = 500;
- loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset | kSLFSetPosition | kSLFDefCollisionBoundsOffset, 0,
- kSsScene2202PuzzleTilePoints[_tileIndex].x, kSsScene2202PuzzleTilePoints[_tileIndex].y);
+ loadSprite(kSsScene2202PuzzleCubeFileHashes2[_cubeSymbol], kSLFCenteredDrawOffset | kSLFSetPosition | kSLFDefCollisionBoundsOffset, 0,
+ kSsScene2202PuzzleCubePoints[_cubePosition].x, kSsScene2202PuzzleCubePoints[_cubePosition].y);
loadSound(0, 0x40958621);
loadSound(1, 0x51108241);
}
-void SsScene2202PuzzleTile::update() {
+void SsScene2202PuzzleCube::update() {
handleSpriteUpdate();
updatePosition();
}
-uint32 SsScene2202PuzzleTile::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
+uint32 SsScene2202PuzzleCube::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
- if (!_isMoving && !getGlobalVar(V_TILE_PUZZLE_SOLVED)) {
- sendMessage(_parentScene, 0x2000, _tileIndex);
- }
+ if (!_isMoving && !getGlobalVar(V_TILE_PUZZLE_SOLVED))
+ sendMessage(_parentScene, 0x2000, _cubePosition);
messageResult = 1;
break;
case 0x2001:
_isMoving = true;
- moveTile(param.asInteger());
+ moveCube(param.asInteger());
break;
}
return messageResult;
}
-void SsScene2202PuzzleTile::suMoveTileX() {
+void SsScene2202PuzzleCube::suMoveCubeX() {
bool done = false;
@@ -732,15 +748,14 @@ void SsScene2202PuzzleTile::suMoveTileX() {
_counterDirection = true;
}
- if (done) {
+ if (done)
stopMoving();
- }
updateBounds();
}
-void SsScene2202PuzzleTile::suMoveTileY() {
+void SsScene2202PuzzleCube::suMoveCubeY() {
bool done = false;
@@ -767,29 +782,26 @@ void SsScene2202PuzzleTile::suMoveTileY() {
_counterDirection = true;
}
- if (done) {
+ if (done)
stopMoving();
- }
updateBounds();
}
-void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
+void SsScene2202PuzzleCube::moveCube(int16 newCubePosition) {
- loadSprite(kSsScene2202PuzzleTileFileHashes1[_value], kSLFCenteredDrawOffset);
+ loadSprite(kSsScene2202PuzzleCubeFileHashes1[_cubeSymbol], kSLFCenteredDrawOffset);
- setSubVar(VA_CUBE_POSITIONS, _tileIndex, (uint32)-1);
- setSubVar(VA_CUBE_POSITIONS, newTileIndex, (uint32)_value);
-
- _tileIndex = newTileIndex;
+ setSubVar(VA_CUBE_POSITIONS, _cubePosition, (uint32)-1);
+ setSubVar(VA_CUBE_POSITIONS, newCubePosition, (uint32)_cubeSymbol);
+ _cubePosition = newCubePosition;
_errValue = 0;
_counterDirection = false;
_counter = 0;
-
- _newX = kSsScene2202PuzzleTilePoints[newTileIndex].x;
- _newY = kSsScene2202PuzzleTilePoints[newTileIndex].y;
+ _newX = kSsScene2202PuzzleCubePoints[newCubePosition].x;
+ _newY = kSsScene2202PuzzleCubePoints[newCubePosition].y;
if (_x == _newX && _y == _newY)
return;
@@ -821,7 +833,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
}
if (_xDelta > _yDelta) {
- SetSpriteUpdate(&SsScene2202PuzzleTile::suMoveTileX);
+ SetSpriteUpdate(&SsScene2202PuzzleCube::suMoveCubeX);
if (_xIncr > 0) {
if (_newX - _x >= 180)
_xFlagPos = _newX - 90;
@@ -835,7 +847,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
}
playSound(0);
} else {
- SetSpriteUpdate(&SsScene2202PuzzleTile::suMoveTileY);
+ SetSpriteUpdate(&SsScene2202PuzzleCube::suMoveCubeY);
if (_yIncr > 0) {
if (_newY - _y >= 180)
_xFlagPos = _newY - 90;
@@ -852,16 +864,16 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) {
}
-void SsScene2202PuzzleTile::stopMoving() {
- loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset);
+void SsScene2202PuzzleCube::stopMoving() {
+ loadSprite(kSsScene2202PuzzleCubeFileHashes2[_cubeSymbol], kSLFCenteredDrawOffset);
SetSpriteUpdate(NULL);
_isMoving = false;
- sendMessage(_parentScene, 0x2002, _tileIndex);
+ sendMessage(_parentScene, 0x2002, _cubePosition);
}
Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
- : Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isTileMoving(false),
- _ssMovingTile(NULL), _ssDoneMovingTile(NULL) {
+ : Scene(vm, parentModule, true), _isSolved(false), _leaveScene(false), _isCubeMoving(false),
+ _ssMovingCube(NULL), _ssDoneMovingCube(NULL) {
// TODO initScene2201Vars();
SetMessageHandler(&Scene2202::handleMessage);
@@ -872,11 +884,11 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
addEntity(_palette);
insertMouse435(0x00A08089, 20, 620);
- for (uint32 index = 0; index < 9; index++) {
- int16 value = (int16)getSubVar(VA_CUBE_POSITIONS, index);
- if (value >= 0) {
- Sprite *puzzleTileSprite = insertSprite<SsScene2202PuzzleTile>(this, index, value);
- _vm->_collisionMan->addSprite(puzzleTileSprite);
+ for (uint32 cubePosition = 0; cubePosition < 9; cubePosition++) {
+ int16 cubeSymbol = (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition);
+ if (cubeSymbol >= 0) {
+ Sprite *puzzleCubeSprite = insertSprite<SsScene2202PuzzleCube>(this, cubePosition, cubeSymbol);
+ _vm->_collisionMan->addSprite(puzzleCubeSprite);
}
}
@@ -899,9 +911,8 @@ Scene2202::~Scene2202() {
void Scene2202::update() {
Scene::update();
- if (_leaveScene && !isSoundPlaying(1)) {
+ if (_leaveScene && !isSoundPlaying(1))
leaveScene(0);
- }
if (_isSolved && !isSoundPlaying(0)) {
playSound(1);
@@ -909,19 +920,19 @@ void Scene2202::update() {
_leaveScene = true;
}
- if (_ssMovingTile && !_isTileMoving) {
- int16 freeTileIndex = getFreeTileIndex(_movingTileIndex);
- if (freeTileIndex != -1) {
- setSurfacePriority(_ssMovingTile->getSurface(), 700);
- sendMessage(_ssMovingTile, 0x2001, freeTileIndex);
- _ssMovingTile = NULL;
- _isTileMoving = true;
+ if (_ssMovingCube && !_isCubeMoving) {
+ int16 freeCubePosition = getFreeCubePosition(_movingCubePosition);
+ if (freeCubePosition != -1) {
+ setSurfacePriority(_ssMovingCube->getSurface(), 700);
+ sendMessage(_ssMovingCube, 0x2001, freeCubePosition);
+ _ssMovingCube = NULL;
+ _isCubeMoving = true;
}
}
- if (_ssDoneMovingTile) {
- setSurfacePriority(_ssDoneMovingTile->getSurface(), _surfacePriority);
- _ssDoneMovingTile = NULL;
+ if (_ssDoneMovingCube) {
+ setSurfacePriority(_ssDoneMovingCube->getSurface(), _surfacePriority);
+ _ssDoneMovingCube = NULL;
if (testIsSolved()) {
playSound(0);
setGlobalVar(V_TILE_PUZZLE_SOLVED, 1);
@@ -935,39 +946,37 @@ uint32 Scene2202::handleMessage(int messageNum, const MessageParam &param, Entit
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x <= 20 || param.asPoint().x >= 620) {
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
leaveScene(0);
- }
break;
case 0x2000:
- _movingTileIndex = (int16)param.asInteger();
- _ssMovingTile = (Sprite*)sender;
+ _movingCubePosition = (int16)param.asInteger();
+ _ssMovingCube = (Sprite*)sender;
break;
case 0x2002:
- _isTileMoving = false;
- _ssDoneMovingTile = (Sprite*)sender;
- if (param.asInteger() <= 2) {
+ _isCubeMoving = false;
+ _ssDoneMovingCube = (Sprite*)sender;
+ if (param.asInteger() <= 2)
_surfacePriority = 100;
- } else if (param.asInteger() >= 3 && param.asInteger() <= 5) {
+ else if (param.asInteger() >= 3 && param.asInteger() <= 5)
_surfacePriority = 300;
- } else {
+ else
_surfacePriority = 500;
- }
break;
}
return 0;
}
-int16 Scene2202::getFreeTileIndex(int16 index) {
- if (index >= 3 && (int16)getSubVar(VA_CUBE_POSITIONS, index - 3) == -1) {
- return index - 3;
- } else if (index <= 5 && (int16)getSubVar(VA_CUBE_POSITIONS, index + 3) == -1) {
- return index + 3;
- } else if (index != 0 && index != 3 && index != 6 && (int16)getSubVar(VA_CUBE_POSITIONS, index - 1) == -1) {
- return index - 1;
- } else if (index != 2 && index != 5 && index != 8 && (int16)getSubVar(VA_CUBE_POSITIONS, index + 1) == -1) {
- return index + 1;
- } else
+int16 Scene2202::getFreeCubePosition(int16 cubePosition) {
+ if (cubePosition >= 3 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition - 3) == -1)
+ return cubePosition - 3;
+ else if (cubePosition <= 5 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition + 3) == -1)
+ return cubePosition + 3;
+ else if (cubePosition != 0 && cubePosition != 3 && cubePosition != 6 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition - 1) == -1)
+ return cubePosition - 1;
+ else if (cubePosition != 2 && cubePosition != 5 && cubePosition != 8 && (int16)getSubVar(VA_CUBE_POSITIONS, cubePosition + 1) == -1)
+ return cubePosition + 1;
+ else
return -1;
}
@@ -1087,8 +1096,8 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setBackground(0x82C80334);
setPalette(0x82C80334);
insertMouse433(0x80330824);
-
setHitRects(0x004B8320);
+ setRectList(0x004B8420);
if (getGlobalVar(V_KEY3_LOCATION) == 1) {
_asKey = insertSprite<AsCommonKey>(this, 2, 1100, 282, 432);
@@ -1097,37 +1106,35 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape = insertSprite<AsScene1201Tape>(this, 1, 1100, 435, 432, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
-
_asLeftDoor = insertSprite<AsScene2203Door>(this, 0);
_asRightDoor = insertSprite<AsScene2203Door>(this, 1);
-
_ssSmallLeftDoor = insertStaticSprite(0x542CC072, 1100);
_ssSmallRightDoor = insertStaticSprite(0x0A2C0432, 1100);
-
_leftDoorClipRect.set(_ssSmallLeftDoor->getDrawRect().x, 0, 640, 480);
_rightDoorClipRect.set(0, 0, _ssSmallRightDoor->getDrawRect().x2(), 480);
-
sendEntityMessage(_asLeftDoor, 0x2000, _asRightDoor);
sendEntityMessage(_asRightDoor, 0x2000, _asLeftDoor);
-
_vm->_collisionMan->addSprite(_asLeftDoor);
_vm->_collisionMan->addSprite(_asRightDoor);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2203>(200, 427);
setMessageList(0x004B8340);
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2203>(640, 427);
setMessageList(0x004B8350);
} else if (which == 2) {
+ // Klaymen returning from the displayer
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) {
insertKlayman<KmScene2203>(362, 427);
_klayman->setDoDeltaX(1);
- } else {
+ } else
insertKlayman<KmScene2203>(202, 427);
- }
setMessageList(0x004B8358);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2203>(0, 427);
setMessageList(0x004B8348);
}
@@ -1140,8 +1147,6 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_leftDoorClipRect);
}
- setRectList(0x004B8420);
-
}
Scene2203::~Scene2203() {
@@ -1153,25 +1158,22 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam &param, Entit
switch (messageNum) {
case 0x2001:
sendEntityMessage(_klayman, 0x1014, sender);
- if (sender == _asLeftDoor) {
+ if (sender == _asLeftDoor)
setMessageList2(0x004B83B0);
- } else {
+ else
setMessageList2(0x004B83C8);
- }
break;
case 0x2002:
- if (sender == _asLeftDoor) {
+ if (sender == _asLeftDoor)
setMessageList2(0x004B8370);
- } else {
+ else
setMessageList2(0x004B8360);
- }
break;
case 0x2003:
- if (sender == _asLeftDoor) {
+ if (sender == _asLeftDoor)
_ssSmallLeftDoor->setVisible(false);
- } else {
+ else
_ssSmallRightDoor->setVisible(false);
- }
break;
case 0x4808:
if (sender == _asLeftDoor) {
@@ -1220,7 +1222,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2205::update);
setHitRects(0x004B0620);
-
+ loadDataResource(0x00144822);
if (getGlobalVar(V_LIGHTS_ON)) {
_isLightOn = true;
setBackground(0x0008028D);
@@ -1236,41 +1238,36 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xA0289D08);
_ssLightSwitch = insertSprite<SsCommonPressButton>(this, 0x2D339030, 0xDAC86E84, 100, 0);
}
-
_palette->addBasePalette(0xD00A028D, 0, 256, 0);
-
_ssDoorFrame = insertSprite<SsScene2205DoorFrame>();
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2205>(320, 417);
setMessageList(0x004B0658);
- if (!getGlobalVar(V_LIGHTS_ON)) {
+ if (!getGlobalVar(V_LIGHTS_ON))
_palette->addPalette(0x68033B1C, 0, 65, 0);
- }
_isKlaymanInLight = false;
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2205>(640, 417);
setMessageList(0x004B0648);
- if (!getGlobalVar(V_LIGHTS_ON)) {
+ if (!getGlobalVar(V_LIGHTS_ON))
_palette->addPalette(0x68033B1C, 0, 65, 0);
- }
_isKlaymanInLight = false;
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2205>(0, 417);
setMessageList(0x004B0640);
_isKlaymanInLight = true;
}
_klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 640, 480);
-
- loadDataResource(0x00144822);
_klayman->setSoundFlag(true);
-
}
void Scene2205::update() {
Scene::update();
-
if (!_isLightOn && getGlobalVar(V_LIGHTS_ON)) {
_palette->addPalette(0x0008028D, 0, 256, 0);
changeBackground(0x0008028D);
@@ -1291,7 +1288,6 @@ void Scene2205::update() {
}
_isLightOn = false;
}
-
if (!getGlobalVar(V_LIGHTS_ON)) {
if (_isKlaymanInLight && _klayman->getX() > 85) {
_palette->addBasePalette(0x68033B1C, 0, 65, 0);
@@ -1303,20 +1299,18 @@ void Scene2205::update() {
_isKlaymanInLight = true;
}
}
-
}
uint32 Scene2205::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x6449569A) {
+ if (param.asInteger() == 0x6449569A)
setMessageList(0x004B0690);
- } else if (param.asInteger() == 0x2841369C) {
+ else if (param.asInteger() == 0x2841369C)
setMessageList(0x004B0630);
- } else if (param.asInteger() == 0x402064D8) {
+ else if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssLightSwitch);
- }
break;
case 0x480B:
setGlobalVar(V_LIGHTS_ON, getGlobalVar(V_LIGHTS_ON) ? 0 : 1);
@@ -1326,21 +1320,15 @@ uint32 Scene2205::handleMessage(int messageNum, const MessageParam &param, Entit
}
static const int16 kScene2206XPositions[] = {
- 384,
- 480,
- 572
+ 384, 480, 572
};
static const uint32 kScene2206MessageIds1[] = {
- 0x004B8998,
- 0x004B89B8,
- 0x004B89D8
+ 0x004B8998, 0x004B89B8, 0x004B89D8
};
static const uint32 kScene2206MessageIds2[] = {
- 0x004B89F8,
- 0x004B8A20,
- 0x004B8A48
+ 0x004B89F8, 0x004B8A20, 0x004B8A48
};
static const int16 kAsScene2206DoorSpikesXDeltasOpen[] = {
@@ -1371,15 +1359,15 @@ uint32 AsScene2206DoorSpikes::handleMessage(int messageNum, const MessageParam &
switch (messageNum) {
case 0x4808:
_deltaIndex = 0;
+ playSound(0, 0x032746E0);
SetMessageHandler(NULL);
SetSpriteUpdate(&AsScene2206DoorSpikes::suOpen);
- playSound(0, 0x032746E0);
break;
case 0x4809:
_deltaIndex = 0;
+ playSound(0, 0x002642C0);
SetMessageHandler(NULL);
SetSpriteUpdate(&AsScene2206DoorSpikes::suClose);
- playSound(0, 0x002642C0);
break;
}
return messageResult;
@@ -1422,9 +1410,9 @@ uint32 AsScene2206Platform::handleMessage(int messageNum, const MessageParam &pa
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4803:
+ _yDelta = 0;
SetMessageHandler(NULL);
SetSpriteUpdate(&AsScene2206Platform::suMoveDown);
- _yDelta = 0;
break;
}
return messageResult;
@@ -1441,9 +1429,8 @@ SsScene2206TestTube::SsScene2206TestTube(NeverhoodEngine *vm, Scene *parentScene
if (getGlobalVar(V_HAS_TEST_TUBE)) {
setVisible(false);
SetMessageHandler(NULL);
- } else {
+ } else
SetMessageHandler(&SsScene2206TestTube::handleMessage);
- }
_collisionBoundsOffset = _drawOffset;
updateBounds();
}
@@ -1499,38 +1486,37 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
}
_asPlatform->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2());
-
setBackground(fileHash);
-
setPalette(fileHash);
addEntity(_palette);
-
_palette->addBasePalette(fileHash, 0, 256, 0);
-
- if (!getGlobalVar(V_LIGHTS_ON)) {
+ if (!getGlobalVar(V_LIGHTS_ON))
_palette->addPalette(0x0263D144, 0, 65, 0);
- }
-
_vm->_collisionMan->addSprite(_ssTestTube);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2206>(200, 430);
setMessageList(0x004B88A8);
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2206>(640, 430);
setMessageList(0x004B88B8);
} else if (which == 2) {
+ // Klaymen entering from the back
insertKlayman<KmScene2206>(205, 396);
setMessageList(0x004B88C8);
_palette->addPalette(getGlobalVar(V_LIGHTS_ON) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
klaymanBehindSpikes();
playSound(0, 0x53B8284A);
} else if (which == 3) {
+ // Klaymen entering from reading a text column
insertKlayman<KmScene2206>(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)], 430);
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
setMessageList(0x004B8A70);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2206>(0, 430);
setMessageList(0x004B88B0);
}
@@ -1548,11 +1534,11 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam &param, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x800C6694) {
+ if (param.asInteger() == 0x800C6694)
readClickedColumn();
- } else if (param.asInteger() == 0x402064D8) {
+ else if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssButton);
- } else if (param.asInteger() == 0x11C40840) {
+ else if (param.asInteger() == 0x11C40840) {
if (getGlobalVar(V_SPIKES_RETRACTED))
setMessageList(0x004B8948);
else
@@ -1616,26 +1602,17 @@ void Scene2206::readClickedColumn() {
setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 183) / 7);
setGlobalVar(V_COLUMN_TEXT_NAME, calcHash("stLineagex"));
setGlobalVar(V_COLUMN_BACK_NAME, 0);
- if (ABS(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)] - _klayman->getX()) >= 144) {
+ if (ABS(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)] - _klayman->getX()) >= 144)
setMessageList2(kScene2206MessageIds1[getGlobalVar(V_CLICKED_COLUMN_INDEX)]);
- } else {
+ else
setMessageList2(kScene2206MessageIds2[getGlobalVar(V_CLICKED_COLUMN_INDEX)]);
- }
}
static const uint32 kScene2207FileHashes[] = {
- 0x33B1E12E,
- 0x33D1E12E,
- 0x3311E12E,
- 0x3291E12E,
- 0x3191E12E,
- 0x3791E12E,
- 0x3B91E12E,
- 0x2391E12E,
- 0x1391E12E,
- 0x3BB1E12E,
- 0x23B1E12E,
- 0x13B1E12E
+ 0x33B1E12E, 0x33D1E12E, 0x3311E12E,
+ 0x3291E12E, 0x3191E12E, 0x3791E12E,
+ 0x3B91E12E, 0x2391E12E, 0x1391E12E,
+ 0x3BB1E12E, 0x23B1E12E, 0x13B1E12E
};
AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene)
@@ -1650,10 +1627,10 @@ AsScene2207Elevator::AsScene2207Elevator(NeverhoodEngine *vm, Scene *parentScene
_y = pt.y;
createSurface(1100, 129, 103);
startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, 0, 0);
+ _newStickFrameIndex = 0;
SetUpdateHandler(&AsScene2207Elevator::update);
- SetSpriteUpdate(&AsScene2207Elevator::suSetPosition);
SetMessageHandler(&AsScene2207Elevator::handleMessage);
- _newStickFrameIndex = 0;
+ SetSpriteUpdate(&AsScene2207Elevator::suSetPosition);
}
AsScene2207Elevator::~AsScene2207Elevator() {
@@ -1667,9 +1644,9 @@ void AsScene2207Elevator::update() {
startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
_newStickFrameIndex = _pointIndex;
if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
- if (_destPointIndexDelta != 0) {
+ if (_destPointIndexDelta != 0)
_destPointIndexDelta = 0;
- } else {
+ else {
_vm->_soundMan->deleteSound(0xD3B02847);
playSound(0, 0x53B8284A);
}
@@ -1683,20 +1660,19 @@ void AsScene2207Elevator::update() {
startAnimation(getGlobalVar(V_LIGHTS_ON) ? 0xC858CC19 : 0x294B3377, _pointIndex, _pointIndex);
_newStickFrameIndex = _pointIndex;
if (_destPointIndex + _destPointIndexDelta == _pointIndex) {
- if (_destPointIndexDelta != 0) {
+ if (_destPointIndexDelta != 0)
_destPointIndexDelta = 0;
- } else {
+ else {
_vm->_soundMan->deleteSound(0xD3B02847);
playSound(0, 0x53B8284A);
}
}
}
- if (_pointIndex > 20 && _surface->getPriority() != 900) {
+ if (_pointIndex > 20 && _surface->getPriority() != 900)
sendMessage(_parentScene, 0x2002, 900);
- } else if (_pointIndex < 20 && _surface->getPriority() != 1100) {
+ else if (_pointIndex < 20 && _surface->getPriority() != 1100)
sendMessage(_parentScene, 0x2002, 1100);
- }
AnimatedSprite::update();
@@ -1738,13 +1714,12 @@ void AsScene2207Elevator::moveToY(int16 y) {
}
if (_destPointIndex != _pointIndex) {
- if (_destPointIndex == 0 || _destPointIndex == (int)_pointArray->size() - 1) {
+ if (_destPointIndex == 0 || _destPointIndex == (int)_pointArray->size() - 1)
_destPointIndexDelta = 0;
- } else if (_destPointIndex < _pointIndex) {
+ else if (_destPointIndex < _pointIndex)
_destPointIndexDelta = -2;
- } else {
+ else
_destPointIndexDelta = 2;
- }
_vm->_soundMan->addSound(0x02700413, 0xD3B02847);
_vm->_soundMan->playSoundLooping(0xD3B02847);
}
@@ -1756,14 +1731,14 @@ void AsScene2207Elevator::moveToY(int16 y) {
AsScene2207Lever::AsScene2207Lever(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int doDeltaX)
: AnimatedSprite(vm, 1100), _parentScene(parentScene) {
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene2207Lever::handleMessage);
+ _x = x;
+ _y = y;
createSurface(1010, 71, 73);
setDoDeltaX(doDeltaX);
startAnimation(0x80880090, 0, -1);
_newStickFrameIndex = 0;
- _x = x;
- _y = y;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2207Lever::handleMessage);
}
uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
@@ -1795,8 +1770,8 @@ uint32 AsScene2207Lever::handleMessage(int messageNum, const MessageParam &param
void AsScene2207Lever::stLeverDown() {
startAnimation(0x80880090, 1, -1);
- FinalizeState(&AsScene2207Lever::stLeverDownEvent);
playSound(0, 0x40581882);
+ FinalizeState(&AsScene2207Lever::stLeverDownEvent);
}
void AsScene2207Lever::stLeverDownEvent() {
@@ -1805,9 +1780,9 @@ void AsScene2207Lever::stLeverDownEvent() {
void AsScene2207Lever::stLeverUp() {
startAnimation(0x80880090, 6, -1);
- FinalizeState(&AsScene2207Lever::stLeverUpEvent);
_playBackwards = true;
playSound(0, 0x40581882);
+ FinalizeState(&AsScene2207Lever::stLeverUpEvent);
}
void AsScene2207Lever::stLeverUpEvent() {
@@ -1817,16 +1792,16 @@ void AsScene2207Lever::stLeverUpEvent() {
AsScene2207WallRobotAnimation::AsScene2207WallRobotAnimation(NeverhoodEngine *vm, Scene *parentScene)
: AnimatedSprite(vm, 1200), _idle(true) {
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene2207WallRobotAnimation::handleMessage);
- createSurface1(0xCCFD6090, 100);
_x = 309;
_y = 320;
+ createSurface1(0xCCFD6090, 100);
startAnimation(0xCCFD6090, 0, -1);
_newStickFrameIndex = 0;
loadSound(1, 0x40330872);
loadSound(2, 0x72A2914A);
loadSound(3, 0xD4226080);
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2207WallRobotAnimation::handleMessage);
}
AsScene2207WallRobotAnimation::~AsScene2207WallRobotAnimation() {
@@ -1847,15 +1822,14 @@ uint32 AsScene2207WallRobotAnimation::handleMessage(int messageNum, const Messag
stopSound(2);
stopSound(3);
_vm->_soundMan->deleteSound(0x12121943);
- } else if (param.asInteger() == 0x3A980501) {
+ } else if (param.asInteger() == 0x3A980501)
playSound(1);
- } else if (param.asInteger() == 0x2A2AD498) {
+ else if (param.asInteger() == 0x2A2AD498)
playSound(2);
- } else if (param.asInteger() == 0xC4980008) {
+ else if (param.asInteger() == 0xC4980008)
playSound(3);
- } else if (param.asInteger() == 0x06B84228) {
+ else if (param.asInteger() == 0x06B84228)
playSound(0, 0xE0702146);
- }
}
break;
case 0x2006:
@@ -1899,13 +1873,13 @@ void AsScene2207WallRobotAnimation::cbStopAnimation() {
AsScene2207WallCannonAnimation::AsScene2207WallCannonAnimation(NeverhoodEngine *vm)
: AnimatedSprite(vm, 1200), _idle(true) {
- SetUpdateHandler(&AnimatedSprite::update);
- SetMessageHandler(&AsScene2207WallCannonAnimation::handleMessage);
- createSurface1(0x8CAA0099, 100);
_x = 309;
_y = 320;
+ createSurface1(0x8CAA0099, 100);
startAnimation(0x8CAA0099, 0, -1);
_newStickFrameIndex = 0;
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetMessageHandler(&AsScene2207WallCannonAnimation::handleMessage);
}
uint32 AsScene2207WallCannonAnimation::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
@@ -1952,7 +1926,7 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i
updatePosition();
}
-Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
+Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule)
: Scene(vm, parentModule, true), _klaymanAtElevator(true), _elevatorSurfacePriority(0) {
_vm->gameModule()->initCannonSymbolsPuzzle();
@@ -1965,66 +1939,47 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2207>(0, 0);
_klayman->setRepl(64, 0);
-
setMessageList(0x004B38E8);
-
_asElevator = insertSprite<AsScene2207Elevator>(this);
if (getGlobalVar(V_LIGHTS_ON)) {
-
setBackground(0x88C00241);
setPalette(0x88C00241);
insertMouse433(0x00245884);
-
_ssMaskPart1 = insertStaticSprite(0xE20A28A0, 1200);
_ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100);
_ssMaskPart3 = insertStaticSprite(0x0043B038, 1100);
-
_asTape = insertSprite<AsScene1201Tape>(this, 4, 1100, 277, 428, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
-
_asLever = insertSprite<AsScene2207Lever>(this, 527, 333, 0);
_vm->_collisionMan->addSprite(_asLever);
-
_asWallRobotAnimation = insertSprite<AsScene2207WallRobotAnimation>(this);
_asWallCannonAnimation = insertSprite<AsScene2207WallCannonAnimation>();
-
_asWallRobotAnimation->setVisible(false);
_asWallCannonAnimation->setVisible(false);
-
_ssButton = insertSprite<SsCommonButtonSprite>(this, 0x2C4061C4, 100, 0);
-
_asLever->setClipRect(0, 0, _ssMaskPart3->getDrawRect().x2(), 480);
_klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2());
_asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2());
-
} else {
-
setGlobalVar(V_SEEN_SYMBOLS_NO_LIGHT, 1);
-
setBackground(0x05C02A55);
setPalette(0x05C02A55);
insertMouse433(0x02A51054);
-
_ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200);
-
insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 0)], 0);
insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 1)], 1);
insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(VA_GOOD_CANNON_SYMBOLS_1, 2)], 2);
-
_asTape = NULL;
_asLever = NULL;
_asWallRobotAnimation = NULL;
_asWallCannonAnimation = NULL;
_ssButton = NULL;
-
_klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480);
_asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480);
-
}
_dataResource.load(0x00524846);
-
setRectList(0x004B38B8);
sendEntityMessage(_klayman, 0x1014, _asElevator);
@@ -2041,9 +1996,8 @@ void Scene2207::update() {
setSurfacePriority(_asElevator->getSurface(), _elevatorSurfacePriority);
_elevatorSurfacePriority = 0;
}
- if (_klayman->getY() == 423) {
+ if (_klayman->getY() == 423)
_klaymanAtElevator = _klayman->getX() > 459 && _klayman->getX() < 525;
- }
}
uint32 Scene2207::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
@@ -2055,38 +2009,34 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam &param, Entit
sendMessage(_asElevator, 0x2000, _mouseClickPos.y);
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
- } else {
+ } else
cancelMessageList();
- }
} else if (param.asInteger() == 0x34569073) {
if (_klaymanAtElevator) {
_isKlaymanBusy = true;
sendMessage(_asElevator, 0x2000, 0);
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
- } else {
+ } else
cancelMessageList();
- }
} else if (param.asInteger() == 0x4054C877) {
if (_klaymanAtElevator) {
sendMessage(_asElevator, 0x2000, 480);
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
- } else {
+ } else
cancelMessageList();
- }
} else if (param.asInteger() == 0x0CBC6211) {
sendEntityMessage(_klayman, 0x1014, _asElevator);
sendMessage(_klayman, 0x2001, 0);
setRectList(0x004B38B8);
- } else if (param.asInteger() == 0x402064D8) {
+ } else if (param.asInteger() == 0x402064D8)
sendEntityMessage(_klayman, 0x1014, _ssButton);
- } else if (param.asInteger() == 0x231DA241) {
- if (_ssButton) {
+ else if (param.asInteger() == 0x231DA241) {
+ if (_ssButton)
setMessageList(0x004B38F0);
- } else {
+ else
setMessageList(0x004B37D8);
- }
}
break;
case 0x2002:
@@ -2183,14 +2133,11 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
_background->createSurface(0, 640, 528);
_background->getSpriteResource().getPosition().y = 480;
addBackground(_background);
-
setPalette(0x08100289);
- addEntity(_palette); // Why?
-
+ addEntity(_palette);
insertMouse435(0x0028D089, 40, 600);
createFontSurface();
-
_backgroundSurface = new BaseSurface(_vm, 0, 640, 480);
spriteResource.load2(0x08100289);
_backgroundSurface->drawSpriteResourceEx(spriteResource, false, false, 0, 0);
@@ -2207,17 +2154,13 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2208::handleMessage);
_visibleRowsCount = 10;
-
_newRowIndex = (int16)getGlobalVar(V_CLICKED_COLUMN_ROW);
if (_newRowIndex + _visibleRowsCount > _maxRowIndex)
_newRowIndex = _maxRowIndex - _visibleRowsCount;
if (_newRowIndex < 6)
_newRowIndex = 0;
-
_rowScrollY = 0;
-
_backgroundScrollY = 48 * _newRowIndex;
-
_currRowIndex = _newRowIndex;
for (int16 rowIndex = 0; rowIndex < _visibleRowsCount; rowIndex++)
@@ -2253,9 +2196,8 @@ void Scene2208::update() {
}
if (_currRowIndex < _newRowIndex) {
- if (_rowScrollY == 0) {
+ if (_rowScrollY == 0)
drawRow(_currRowIndex + _visibleRowsCount);
- }
_backgroundScrollY += 4;
_rowScrollY += 4;
if (_rowScrollY == 48) {
@@ -2284,9 +2226,8 @@ uint32 Scene2208::handleMessage(int messageNum, const MessageParam &param, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0001:
- if (param.asPoint().x <= 40 || param.asPoint().x >= 600) {
+ if (param.asPoint().x <= 40 || param.asPoint().x >= 600)
leaveScene(0);
- }
break;
}
return messageResult;
@@ -2372,17 +2313,21 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2242>(200, 430);
setMessageList(0x004B3C18);
} else if (which == 1) {
+ // Klaymen entering from looking through the window
insertKlayman<KmScene2242>(530, 430);
setMessageList(0x004B3D60);
} else if (which == 2) {
+ // Klaymen returning from reading a text column
insertKlayman<KmScene2242>(kScene2242XPositions[!getGlobalVar(V_CLICKED_COLUMN_INDEX) ? 0 : 1], 430);
setMessageList(0x004B3D48);
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2242>(0, 430);
setMessageList(0x004B3C20);
}
@@ -2414,9 +2359,8 @@ uint32 Scene2242::handleMessage(int messageNum, const MessageParam &param, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x800C6694) {
+ if (param.asInteger() == 0x800C6694)
readClickedColumn();
- }
break;
case 0x4826:
if (sender == _asTape) {
@@ -2442,11 +2386,10 @@ void Scene2242::readClickedColumn() {
index = 1;
}
setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7);
- if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133) {
+ if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133)
setMessageList2(kScene2242MessageListIds1[index]);
- } else {
+ else
setMessageList2(kScene2242MessageListIds2[index]);
- }
}
static const int16 kHallOfRecordsKlaymanXPos[] = {
@@ -2464,38 +2407,42 @@ static const uint32 kHallOfRecordsSceneMessageListIds1[] = {
0x004B2AF8, 0x004B2B20, 0x004B2B48
};
-HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfo140Id)
+HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 hallOfRecordsInfoId)
: Scene(vm, parentModule, true) {
- _sceneInfo140 = _vm->_staticData->getSceneInfo140Item(sceneInfo140Id);
+ _hallOfRecordsInfo = _vm->_staticData->getHallOfRecordsInfoItem(hallOfRecordsInfoId);
SetMessageHandler(&HallOfRecordsScene::handleMessage);
SetUpdateHandler(&Scene::update);
- if (!getGlobalVar(V_LIGHTS_ON) && _sceneInfo140->bgFilename2) {
+ if (!getGlobalVar(V_LIGHTS_ON) && _hallOfRecordsInfo->bgFilename2) {
setRectList(0x004B2BF8);
- setBackground(_sceneInfo140->bgFilename2);
- setPalette(_sceneInfo140->bgFilename2);
+ setBackground(_hallOfRecordsInfo->bgFilename2);
+ setPalette(_hallOfRecordsInfo->bgFilename2);
insertMouse433(0x14320138);
} else {
setRectList(0x004B2BB8);
- setBackground(_sceneInfo140->bgFilename1);
- setPalette(_sceneInfo140->bgFilename1);
+ setBackground(_hallOfRecordsInfo->bgFilename1);
+ setPalette(_hallOfRecordsInfo->bgFilename1);
insertMouse433(0x63A40028);
}
if (which < 0) {
+ // Restoring game
insertKlayman<KmHallOfRecords>(200, 430);
setMessageList(0x004B2900);
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmHallOfRecords>(640, 430);
setMessageList(0x004B2910);
} else if (which == 2) {
- insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(V_CLICKED_COLUMN_INDEX) - _sceneInfo140->xPosIndex], 430);
+ // Klaymen returning from reading a text column
+ insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(V_CLICKED_COLUMN_INDEX) - _hallOfRecordsInfo->xPosIndex], 430);
setMessageList(0x004B2B70);
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
} else {
+ // Klaymen entering from the left
insertKlayman<KmHallOfRecords>(0, 430);
setMessageList(0x004B2908);
}
@@ -2513,9 +2460,8 @@ uint32 HallOfRecordsScene::handleMessage(int messageNum, const MessageParam &par
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x800C6694) {
+ if (param.asInteger() == 0x800C6694)
readClickedColumn();
- }
break;
}
return messageResult;
@@ -2523,22 +2469,20 @@ uint32 HallOfRecordsScene::handleMessage(int messageNum, const MessageParam &par
void HallOfRecordsScene::readClickedColumn() {
int16 index = (_mouseClickPos.x - 23) / 89;
- if (index >= _sceneInfo140->count) {
+ if (index >= _hallOfRecordsInfo->count)
setMessageList2(0x004B2920);
- } else {
- setGlobalVar(V_CLICKED_COLUMN_INDEX, _sceneInfo140->xPosIndex + index);
+ else {
+ setGlobalVar(V_CLICKED_COLUMN_INDEX, _hallOfRecordsInfo->xPosIndex + index);
setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7);
- setGlobalVar(V_COLUMN_TEXT_NAME, _sceneInfo140->txFilename);
- if (index == 0 && _sceneInfo140->bgFilename3) {
- setGlobalVar(V_COLUMN_BACK_NAME, _sceneInfo140->bgFilename3);
- } else {
+ setGlobalVar(V_COLUMN_TEXT_NAME, _hallOfRecordsInfo->txFilename);
+ if (index == 0 && _hallOfRecordsInfo->bgFilename3)
+ setGlobalVar(V_COLUMN_BACK_NAME, _hallOfRecordsInfo->bgFilename3);
+ else
setGlobalVar(V_COLUMN_BACK_NAME, 0);
- }
- if (ABS(_klayman->getX() - kHallOfRecordsKlaymanXPos[index]) < 133) {
+ if (ABS(_klayman->getX() - kHallOfRecordsKlaymanXPos[index]) < 133)
setMessageList2(kHallOfRecordsSceneMessageListIds1[index]);
- } else {
+ else
setMessageList2(kHallOfRecordsSceneMessageListIds2[index]);
- }
}
}
@@ -2557,9 +2501,6 @@ static const uint32 kScene2247MessageListIds1[] = {
Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true) {
- //DEBUG
- setGlobalVar(V_LIGHTS_ON, 1);
-
SetMessageHandler(&Scene2247::handleMessage);
SetUpdateHandler(&Scene::update);
@@ -2576,17 +2517,21 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (which < 0) {
+ // Restoring game
insertKlayman<KmScene2247>(200, 430);
setMessageList(0x004B5428);
} else if (which == 1) {
+ // Klaymen entering from the right
insertKlayman<KmScene2247>(640, 430);
setMessageList(0x004B5438);
} else if (which == 2) {
+ // Klaymen returning from reading a text column
insertKlayman<KmScene2247>(kScene2247XPositions[getGlobalVar(V_COLUMN_TEXT_NAME) == 0x0008E486 ? 0 : 1], 430);
if (getGlobalVar(V_KLAYMAN_IS_DELTA_X))
_klayman->setDoDeltaX(1);
setMessageList(0x004B5530);
} else {
+ // Klaymen entering from the left
insertKlayman<KmScene2247>(0, 430);
setMessageList(0x004B5430);
}
@@ -2603,9 +2548,8 @@ uint32 Scene2247::handleMessage(int messageNum, const MessageParam &param, Entit
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
- if (param.asInteger() == 0x800C6694) {
+ if (param.asInteger() == 0x800C6694)
readClickedColumn();
- }
break;
}
return messageResult;
@@ -2624,11 +2568,10 @@ void Scene2247::readClickedColumn() {
}
setGlobalVar(V_CLICKED_COLUMN_INDEX, 0);
setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7);
- if (ABS(_klayman->getX() - kScene2247XPositions[index]) < 133) {
+ if (ABS(_klayman->getX() - kScene2247XPositions[index]) < 133)
setMessageList2(kScene2247MessageListIds1[index]);
- } else {
+ else
setMessageList2(kScene2247MessageListIds2[index]);
- }
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h
index 625990bfca..34be267645 100644
--- a/engines/neverhood/module2200.h
+++ b/engines/neverhood/module2200.h
@@ -38,9 +38,10 @@ public:
Module2200(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module2200();
protected:
+ int _sceneNum;
void createScene(int sceneNum, int which);
void updateScene();
- void createHallOfRecordsScene(int which, uint32 sceneInfo140Id);
+ void createHallOfRecordsScene(int which, uint32 hallOfRecordsInfoId);
};
// Scene2201
@@ -63,11 +64,11 @@ public:
class AsScene2201Door : public AnimatedSprite {
public:
- AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool flag1);
+ AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool isOpen);
protected:
Klayman *_klayman;
Sprite *_ssDoorLight;
- bool _doorOpen;
+ bool _isOpen;
int _countdown;
void update();
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
@@ -95,13 +96,13 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
};
-class SsScene2202PuzzleTile : public StaticSprite {
+class SsScene2202PuzzleCube : public StaticSprite {
public:
- SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value);
+ SsScene2202PuzzleCube(NeverhoodEngine *vm, Scene *parentScene, int16 cubePosition, int16 cubeSymbol);
protected:
Scene *_parentScene;
- int16 _value;
- int16 _tileIndex;
+ int16 _cubeSymbol;
+ int16 _cubePosition;
int16 _newX, _newY;
int16 _xDelta, _yDelta;
int16 _xIncr;
@@ -113,9 +114,9 @@ protected:
bool _isMoving;
void update();
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
- void suMoveTileX();
- void suMoveTileY();
- void moveTile(int16 newTileIndex);
+ void suMoveCubeX();
+ void suMoveCubeY();
+ void moveCube(int16 newCubePosition);
void stopMoving();
};
@@ -124,16 +125,16 @@ public:
Scene2202(NeverhoodEngine *vm, Module *parentModule, int which);
~Scene2202();
protected:
- Sprite *_ssMovingTile;
- Sprite *_ssDoneMovingTile;
- bool _isTileMoving;
- int16 _movingTileIndex;
+ Sprite *_ssMovingCube;
+ Sprite *_ssDoneMovingCube;
+ bool _isCubeMoving;
+ int16 _movingCubePosition;
int _surfacePriority;
bool _leaveScene;
bool _isSolved;
void update();
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
- int16 getFreeTileIndex(int16 index);
+ int16 getFreeCubePosition(int16 index);
bool testIsSolved();
};
@@ -298,7 +299,7 @@ public:
class Scene2207 : public Scene {
public:
- Scene2207(NeverhoodEngine *vm, Module *parentModule, int which);
+ Scene2207(NeverhoodEngine *vm, Module *parentModule);
protected:
Sprite *_asElevator;
Sprite *_ssMaskPart1;
@@ -332,7 +333,7 @@ protected:
int16 _rowScrollY;
int16 _maxRowIndex;
int16 _visibleRowsCount;
- Common::Array<const char*> _strings; // TODO: Move to TextResource
+ Common::Array<const char*> _strings;
void update();
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
void createFontSurface();
@@ -353,10 +354,10 @@ protected:
class HallOfRecordsScene : public Scene {
public:
- HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 sceneInfo140Id);
+ HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule, int which, uint32 hallOfRecordsInfoId);
~HallOfRecordsScene();
protected:
- SceneInfo140 *_sceneInfo140;
+ HallOfRecordsInfo *_hallOfRecordsInfo;
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
void readClickedColumn();
};
diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index 147a319d2e..1a633e289a 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -125,19 +125,19 @@ void StaticData::load(const char *filename) {
_navigationLists[id] = navigationList;
}
- // Load SceneInfo140 items
- uint32 sceneInfo140ItemsCount = fd.readUint32LE();
- debug("sceneInfo140ItemsCount: %d", sceneInfo140ItemsCount);
- for (uint32 i = 0; i < sceneInfo140ItemsCount; i++) {
- SceneInfo140 *sceneInfo140 = new SceneInfo140();
+ // Load HallOfRecordsInfo items
+ uint32 hallOfRecordsInfoItemsCount = fd.readUint32LE();
+ debug("hallOfRecordsInfoItemsCount: %d", hallOfRecordsInfoItemsCount);
+ for (uint32 i = 0; i < hallOfRecordsInfoItemsCount; i++) {
+ HallOfRecordsInfo *hallOfRecordsInfo = new HallOfRecordsInfo();
uint32 id = fd.readUint32LE();
- sceneInfo140->bgFilename1 = fd.readUint32LE();
- sceneInfo140->bgFilename2 = fd.readUint32LE();
- sceneInfo140->txFilename = fd.readUint32LE();
- sceneInfo140->bgFilename3 = fd.readUint32LE();
- sceneInfo140->xPosIndex = fd.readByte();
- sceneInfo140->count = fd.readByte();
- _sceneInfo140Items[id] = sceneInfo140;
+ hallOfRecordsInfo->bgFilename1 = fd.readUint32LE();
+ hallOfRecordsInfo->bgFilename2 = fd.readUint32LE();
+ hallOfRecordsInfo->txFilename = fd.readUint32LE();
+ hallOfRecordsInfo->bgFilename3 = fd.readUint32LE();
+ hallOfRecordsInfo->xPosIndex = fd.readByte();
+ hallOfRecordsInfo->count = fd.readByte();
+ _hallOfRecordsInfoItems[id] = hallOfRecordsInfo;
}
// Load SceneInfo2700 items
@@ -185,10 +185,10 @@ NavigationList *StaticData::getNavigationList(uint32 id) {
return _navigationLists[id];
}
-SceneInfo140 *StaticData::getSceneInfo140Item(uint32 id) {
- if (!_sceneInfo140Items[id])
- error("StaticData::getSceneInfo140Item() SceneInfo140 with id %08X not found", id);
- return _sceneInfo140Items[id];
+HallOfRecordsInfo *StaticData::getHallOfRecordsInfoItem(uint32 id) {
+ if (!_hallOfRecordsInfoItems[id])
+ error("StaticData::getHallOfRecordsInfoItem() HallOfRecordsInfo with id %08X not found", id);
+ return _hallOfRecordsInfoItems[id];
}
SceneInfo2700 *StaticData::getSceneInfo2700(uint32 id) {
diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h
index 2a2db556e0..69a407bdcb 100644
--- a/engines/neverhood/staticdata.h
+++ b/engines/neverhood/staticdata.h
@@ -68,7 +68,7 @@ struct NavigationItem {
typedef Common::Array<NavigationItem> NavigationList;
-struct SceneInfo140 {
+struct HallOfRecordsInfo {
uint32 bgFilename1;
uint32 bgFilename2;
uint32 txFilename;
@@ -100,14 +100,14 @@ public:
RectList *getRectList(uint32 id);
MessageList *getMessageList(uint32 id);
NavigationList *getNavigationList(uint32 id);
- SceneInfo140 *getSceneInfo140Item(uint32 id);
+ HallOfRecordsInfo *getHallOfRecordsInfoItem(uint32 id);
SceneInfo2700 *getSceneInfo2700(uint32 id);
protected:
Common::HashMap<uint32, HitRectList*> _hitRectLists;
Common::HashMap<uint32, RectList*> _rectLists;
Common::HashMap<uint32, MessageList*> _messageLists;
Common::HashMap<uint32, NavigationList*> _navigationLists;
- Common::HashMap<uint32, SceneInfo140*> _sceneInfo140Items;
+ Common::HashMap<uint32, HallOfRecordsInfo*> _hallOfRecordsInfoItems;
Common::HashMap<uint32, SceneInfo2700*> _sceneInfo2700Items;
};