diff options
author | johndoe123 | 2012-10-23 10:56:12 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-05-08 20:47:34 +0200 |
commit | ee7d47cb187cbfcc4374acc6161fe6ab0d46598d (patch) | |
tree | 6b79f3a797bdb4280f1bb055ae7dc5fb5ee5d09e /engines/neverhood | |
parent | 097f1f27bbb5c00f0cad7216161b2064a73ebd2b (diff) | |
download | scummvm-rg350-ee7d47cb187cbfcc4374acc6161fe6ab0d46598d.tar.gz scummvm-rg350-ee7d47cb187cbfcc4374acc6161fe6ab0d46598d.tar.bz2 scummvm-rg350-ee7d47cb187cbfcc4374acc6161fe6ab0d46598d.zip |
NEVERHOOD: Clean up Module1300 (like the ones before)
Diffstat (limited to 'engines/neverhood')
-rw-r--r-- | engines/neverhood/gamemodule.cpp | 8 | ||||
-rw-r--r-- | engines/neverhood/module1300.cpp | 443 | ||||
-rw-r--r-- | engines/neverhood/module1300.h | 15 |
3 files changed, 199 insertions, 267 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp index d6da2af3d3..0eeee2ee03 100644 --- a/engines/neverhood/gamemodule.cpp +++ b/engines/neverhood/gamemodule.cpp @@ -305,6 +305,8 @@ void GameModule::startup() { // Enable all locations for (int i = 0; i < 6; i++) setSubVar(V_TELEPORTER_DEST_AVAILABLE, i, 1); + //setGlobalVar(V_PROJECTOR_LOCATION, 4); + setGlobalVar(V_KEYDOOR_UNLOCKED, 1); // <<<DEBUG #if 1 @@ -315,9 +317,9 @@ void GameModule::startup() { //DEBUG<<< */ - _vm->gameState().which = 3; - _vm->gameState().sceneNum = 0; - createModule(1200, -1); + _vm->gameState().which = 5; + _vm->gameState().sceneNum = 6; + createModule(1300, -1); #endif #if 0 _vm->gameState().sceneNum = 0; diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp index 409e554b2b..feebd78485 100644 --- a/engines/neverhood/module1300.cpp +++ b/engines/neverhood/module1300.cpp @@ -110,90 +110,106 @@ Module1300::~Module1300() { void Module1300::createScene(int sceneNum, int which) { debug("Module1300::createScene(%d, %d)", sceneNum, which); - _vm->gameState().sceneNum = sceneNum; + _sceneNum = sceneNum; switch (_vm->gameState().sceneNum) { case 1: + _vm->gameState().sceneNum = 1; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->startMusic(0x00203197, 0, 2); _childObject = new Scene1302(_vm, this, which); break; case 2: + _vm->gameState().sceneNum = 2; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); - _childObject = new Scene1303(_vm, this, which); + _childObject = new Scene1303(_vm, this); break; case 3: + _vm->gameState().sceneNum = 3; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); _childObject = new Scene1304(_vm, this, which); break; case 4: + _vm->gameState().sceneNum = 4; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->startMusic(0x00203197, 0, 2); _childObject = new Scene1305(_vm, this, which); break; case 5: + _vm->gameState().sceneNum = 5; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->startMusic(0x00203197, 0, 2); _childObject = new Scene1306(_vm, this, which); break; case 6: + _vm->gameState().sceneNum = 6; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->startMusic(0x00203197, 0, 2); - _childObject = new Scene1307(_vm, this, which); + _childObject = new Scene1307(_vm, this); break; case 7: + _vm->gameState().sceneNum = 7; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->startMusic(0x00203197, 0, 2); _childObject = new Scene1308(_vm, this, which); break; case 8: + _vm->gameState().sceneNum = 8; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); _childObject = new DiskplayerScene(_vm, this, 1); break; case 9: + _vm->gameState().sceneNum = 9; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); createSmackerScene(0x20082818, true, true, false); break; case 10: + _vm->gameState().sceneNum = 10; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); createSmackerScene(0x20082828, true, true, false); break; case 11: + _vm->gameState().sceneNum = 11; _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); createNavigationScene(0x004B27A8, which); break; case 12: + _vm->gameState().sceneNum = 12; _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); createNavigationScene(0x004B2718, which); break; case 13: + _vm->gameState().sceneNum = 13; _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); createNavigationScene(0x004B27D8, which); break; case 14: + _vm->gameState().sceneNum = 14; _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); createNavigationScene(0x004B2808, which); break; case 15: + _vm->gameState().sceneNum = 15; _vm->_soundMan->setSoundListParams(kModule1300SoundList, true, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); createNavigationScene(0x004B2838, which); break; case 16: + _vm->gameState().sceneNum = 16; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); - _childObject = new Scene1317(_vm, this, which); + _childObject = new Scene1317(_vm, this); break; case 17: - // TODO: Credits scene + _vm->gameState().sceneNum = 17; _vm->_soundMan->setSoundListParams(kModule1300SoundList, false, 0, 0, 0, 0); _vm->_soundMan->stopMusic(0x00203197, 0, 2); _childObject = new CreditsScene(_vm, this, false); @@ -205,13 +221,12 @@ void Module1300::createScene(int sceneNum, int which) { void Module1300::updateScene() { if (!updateChild()) { - switch (_vm->gameState().sceneNum) { + switch (_sceneNum) { case 1: - if (_moduleResult == 1) { + if (_moduleResult == 1) createScene(4, 0); - } else { + else createScene(7, 1); - } break; case 2: createScene(5, 3); @@ -223,27 +238,25 @@ void Module1300::updateScene() { createScene(16, -1); break; case 5: - if (_moduleResult == 2) { + if (_moduleResult == 2) createScene(8, 0); - } else if (_moduleResult == 3) { + else if (_moduleResult == 3) createScene(2, 0); - } else if (_moduleResult == 0) { + else if (_moduleResult == 0) leaveModule(0); - } else if (_moduleResult == 1) { + else if (_moduleResult == 1) createScene(10, -1); - } break; case 6: createScene(7, 2); break; case 7: - if (_moduleResult == 0) { + if (_moduleResult == 0) createScene(13, 0); - } else if (_moduleResult == 1) { + else if (_moduleResult == 1) createScene(1, 0); - } else if (_moduleResult == 2) { + else if (_moduleResult == 2) createScene(6, 0); - } break; case 8: createScene(5, 2); @@ -271,25 +284,22 @@ void Module1300::updateScene() { createScene(13, 1); break; case 13: - if (_moduleResult == 0) { + if (_moduleResult == 0) createScene(12, 2); - } else if (_moduleResult == 1) { + else if (_moduleResult == 1) createScene(7, 0); - } break; case 14: - if (_moduleResult == 0) { + if (_moduleResult == 0) createScene(12, 3); - } else if (_moduleResult == 1) { + else if (_moduleResult == 1) createScene(9, -1); - } break; case 15: - if (_moduleResult == 0) { + if (_moduleResult == 0) createScene(12, 4); - } else if (_moduleResult == 1) { + else if (_moduleResult == 1) createScene(3, 0); - } break; case 16: createScene(17, -1); @@ -307,8 +317,6 @@ AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene) _x = 320; _y = 240; createSurface1(0x88148150, 500); - SetUpdateHandler(&AnimatedSprite::update); - SetMessageHandler(&AsScene1302Bridge::handleMessage); if (!getGlobalVar(V_FLYTRAP_RING_BRIDGE)) { startAnimation(0x88148150, 0, -1); _newStickFrameIndex = 0; @@ -318,6 +326,8 @@ AsScene1302Bridge::AsScene1302Bridge(NeverhoodEngine *vm, Scene *parentScene) } loadSound(0, 0x68895082); loadSound(1, 0x689BD0C1); + SetUpdateHandler(&AnimatedSprite::update); + SetMessageHandler(&AsScene1302Bridge::handleMessage); } uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -338,8 +348,8 @@ uint32 AsScene1302Bridge::handleMessage(int messageNum, const MessageParam ¶ void AsScene1302Bridge::stLowerBridge() { startAnimation(0x88148150, 0, -1); - NextState(&AsScene1302Bridge::cbLowerBridgeEvent); playSound(1); + NextState(&AsScene1302Bridge::cbLowerBridgeEvent); } void AsScene1302Bridge::stRaiseBridge() { @@ -358,14 +368,14 @@ void AsScene1302Bridge::cbLowerBridgeEvent() { SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm) : StaticSprite(vm, 0x11122122, 200) { - SetUpdateHandler(&SsScene1302Fence::update); - SetMessageHandler(&SsScene1302Fence::handleMessage); - SetSpriteUpdate(NULL); _firstY = _y; if (getGlobalVar(V_FLYTRAP_RING_FENCE)) _y += 152; loadSound(0, 0x7A00400C); loadSound(1, 0x78184098); + SetUpdateHandler(&SsScene1302Fence::update); + SetMessageHandler(&SsScene1302Fence::handleMessage); + SetSpriteUpdate(NULL); } void SsScene1302Fence::update() { @@ -378,13 +388,13 @@ uint32 SsScene1302Fence::handleMessage(int messageNum, const MessageParam ¶m switch (messageNum) { case 0x4808: playSound(0); - SetSpriteUpdate(&SsScene1302Fence::suMoveDown); SetMessageHandler(NULL); + SetSpriteUpdate(&SsScene1302Fence::suMoveDown); break; case 0x4809: playSound(1); - SetSpriteUpdate(&SsScene1302Fence::suMoveUp); SetMessageHandler(NULL); + SetSpriteUpdate(&SsScene1302Fence::suMoveUp); break; } return messageResult; @@ -412,9 +422,9 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which) : Scene(vm, parentModule, true) { SetMessageHandler(&Scene1302::handleMessage); + setHitRects(0x004B0858); setRectList(0x004B0A38); - setBackground(0x420643C4); setPalette(0x420643C4); insertMouse433(0x643C0428); @@ -424,21 +434,21 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which) _sprite2 = insertStaticSprite(0x70430830, 1200); _sprite2->setVisible(false); _sprite3 = insertStaticSprite(0x16E01E20, 1100); - _asRing1 = insertSprite<AsScene1002Ring>(this, false, 218, 122, _class595->getDrawRect().y, false); _asRing2 = insertSprite<AsScene1002Ring>(this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_BRIDGE)); _asRing3 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32, 122, _class595->getDrawRect().y, false); _asRing4 = insertSprite<AsScene1002Ring>(this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(V_FLYTRAP_RING_FENCE)); _asRing5 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getDrawRect().y, false); - _asBridge = insertSprite<AsScene1302Bridge>(this); _ssFence = insertSprite<SsScene1302Fence>(); _ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2()); if (which < 0) { + // Restoring game insertKlayman<KmScene1002>(380, 364); setMessageList(0x004B0868); } else { + // Klaymen entering from back insertKlayman<KmScene1002>(293, 330); setMessageList(0x004B0870); } @@ -457,87 +467,77 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit Scene::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x100D: - if (param.asInteger() == 0x4A845A00) { + if (param.asInteger() == 0x4A845A00) sendEntityMessage(_klayman, 0x1014, _asRing1); - } else if (param.asInteger() == 0x43807801) { + else if (param.asInteger() == 0x43807801) { if (!getGlobalVar(V_FLYTRAP_RING_BRIDGE)) { sendEntityMessage(_klayman, 0x1014, _asRing2); - if (_asVenusFlyTrap->getX() - 10 < 218 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32) { + if (_asVenusFlyTrap->getX() - 10 < 218 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32) setMessageList(0x004B0940); - } else { + else setMessageList(0x004B0938); - } - } else { + } else setMessageList(0x004B0950); - } messageResult = 1; - } else if (param.asInteger() == 0x46C26A01) { + } else if (param.asInteger() == 0x46C26A01) sendEntityMessage(_klayman, 0x1014, _asRing3); - } else if (param.asInteger() == 0x468C7B11) { + else if (param.asInteger() == 0x468C7B11) { if (!getGlobalVar(V_FLYTRAP_RING_FENCE)) { sendEntityMessage(_klayman, 0x1014, _asRing4); - if (_asVenusFlyTrap->getX() - 10 < 218 + 32 + 32 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32 + 32 + 32) { + if (_asVenusFlyTrap->getX() - 10 < 218 + 32 + 32 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32 + 32 + 32) setMessageList(0x004B0940); - } else { + else setMessageList(0x004B0938); - } - } else { + } else setMessageList(0x004B0950); - } messageResult = 1; - } else if (param.asInteger() == 0x42845B19) { + } else if (param.asInteger() == 0x42845B19) sendEntityMessage(_klayman, 0x1014, _asRing5); - } else if (param.asInteger() == 0x430A6060) { - if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) { + else if (param.asInteger() == 0x430A6060) { + if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) setMessageList2(0x004B0910); - } else { + else cancelMessageList(); - } } else if (param.asInteger() == 0x012E2070) { - if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) { + if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) setMessageList2(0x004B0968); - } else { + else cancelMessageList(); - } } else if (param.asInteger() == 0x11C40840) { - if (_asVenusFlyTrap->getX() >= 260 && _asVenusFlyTrap->getX() <= 342) { + if (_asVenusFlyTrap->getX() >= 260 && _asVenusFlyTrap->getX() <= 342) setMessageList(0x004B0878); - } else { + else setMessageList(0x004B0978); - } } break; case 0x2000: if (_klayman->getY() > 360) { sendEntityMessage(_klayman, 0x1014, _asVenusFlyTrap); setMessageList2(0x004B08F0); - } else { + } else setMessageList2(0x004B0920); - } break; case 0x2002: - if (_klayman->getX() > 545) { + if (_klayman->getX() > 545) leaveScene(1); - } break; case 0x2032: _sprite2->setVisible(true); break; case 0x4806: sendMessage(_parentModule, 0x1024, 2); - if (sender == _asRing1) { + if (sender == _asRing1) playSound(0, 0x665198C0); - } else if (sender == _asRing2) { + else if (sender == _asRing2) { sendMessage(_asBridge, 0x4808, 0); setGlobalVar(V_FLYTRAP_RING_BRIDGE, 1); - } else if (sender == _asRing3) { + } else if (sender == _asRing3) playSound(0, 0xE2D389C0); - } else if (sender == _asRing4) { + else if (sender == _asRing4) { sendMessage(_ssFence, 0x4808, 0); setGlobalVar(V_FLYTRAP_RING_FENCE, 1); - } else if (sender == _asRing5) { + } else if (sender == _asRing5) playSound(0, 0x40428A09); - } break; case 0x4807: if (sender == _asRing2) { @@ -548,11 +548,10 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit sendMessage(_ssFence, 0x4809, 0); setGlobalVar(V_FLYTRAP_RING_FENCE, 0); } else if (sender == _asVenusFlyTrap) { - if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) { + if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) sendMessage(_asRing2, 0x4807, 0); - } else { + else sendMessage(_asRing4, 0x4807, 0); - } } break; case 0x480F: @@ -588,10 +587,10 @@ AsScene1303Balloon::AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene) createSurface(200, 128, 315); _x = 289; _y = 390; + startAnimation(0x800278D2, 0, -1); SetUpdateHandler(&AnimatedSprite::update); SetMessageHandler(&AsScene1303Balloon::handleMessage); SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - startAnimation(0x800278D2, 0, -1); } uint32 AsScene1303Balloon::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -612,15 +611,14 @@ uint32 AsScene1303Balloon::hmBalloonPopped(int messageNum, const MessageParam &p uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x100D: - if (param.asInteger() == 0x020B0003) { + if (param.asInteger() == 0x020B0003) playSound(0, 0x742B0055); - } break; case 0x3002: playSound(0, 0x470007EE); stopAnimation(); - SetMessageHandler(NULL); setVisible(false); + SetMessageHandler(NULL); break; } return messageResult; @@ -631,12 +629,12 @@ void AsScene1303Balloon::stPopBalloon() { SetMessageHandler(&AsScene1303Balloon::hmBalloonPopped); } -Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which) +Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule) : Scene(vm, parentModule, true) { SetMessageHandler(&Scene1303::handleMessage); + setRectList(0x004AF9E8); - setBackground(0x01581A9C); setPalette(0x01581A9C); insertMouse433(0x81A9801D); @@ -663,9 +661,8 @@ uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entit sendMessage(_asBalloon, 0x2000, 0); break; case 0x4826: - if (sender == _asBalloon && getGlobalVar(V_HAS_NEEDLE)) { + if (sender == _asBalloon && getGlobalVar(V_HAS_NEEDLE)) setMessageList(0x004AF9B8); - } break; } return 0; @@ -695,11 +692,11 @@ uint32 AsScene1304Needle::handleMessage(int messageNum, const MessageParam ¶ } Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which) - : Scene(vm, parentModule, true) { + : Scene(vm, parentModule, true), _asNeedle(NULL) { SetMessageHandler(&Scene1304::handleMessage); - setRectList(0x004B91A8); + setRectList(0x004B91A8); setBackground(0x062C0214); setPalette(0x062C0214); insertMouse433(0xC021006A); @@ -709,14 +706,11 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which) _vm->_collisionMan->addSprite(_asKey); } else { _asKey = insertSprite<AnimatedSprite>(0x80106018, 100, 279, 48); - // TODO _asKey->setUpdateDeltaXY(); } if (!getGlobalVar(V_HAS_NEEDLE)) { _asNeedle = insertSprite<AsScene1304Needle>(this, 1100, 278, 347); _vm->_collisionMan->addSprite(_asNeedle); - } else { - _asNeedle = NULL; } _sprite1 = insertStaticSprite(0x0562E621, 1100); @@ -724,9 +718,11 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which) insertStaticSprite(0x090AF033, 1100); if (which < 0) { + // Restoring game insertKlayman<KmScene1304>(217, 347); setMessageList(0x004B90E8); } else { + // Klaymen entering from the left insertKlayman<KmScene1304>(100, 347); setMessageList(0x004B90F0); } @@ -740,11 +736,10 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x415634A4) { - if (getGlobalVar(V_BALLOON_POPPED)) { + if (getGlobalVar(V_BALLOON_POPPED)) cancelMessageList(); - } else { + else setMessageList(0x004B9158); - } } break; case 0x4826: @@ -764,16 +759,18 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which) : Scene(vm, parentModule, true) { SetMessageHandler(&Scene1305::handleMessage); - setRectList(0x004B6E98); + setRectList(0x004B6E98); setBackground(0x28801B64); setPalette(0x28801B64); insertMouse433(0x01B60280); if (which < 0) { + // Restoring game insertKlayman<KmScene1305>(212, 441); setMessageList(0x004B6E40); } else { + // Klaymen enters falling insertKlayman<KmScene1305>(212, 441); setMessageList(0x004B6E48); } @@ -793,16 +790,15 @@ AsScene1306Elevator::AsScene1306Elevator(NeverhoodEngine *vm, Scene *parentScene createSurface1(0x043B0270, 100); startAnimation(0x043B0270, 0, -1); _newStickFrameIndex = 0; - SetMessageHandler(&AsScene1306Elevator::handleMessage); loadSound(0, 0x1C100E83); loadSound(1, 0x1C08CEC5); loadSound(2, 0x5D011E87); + SetMessageHandler(&AsScene1306Elevator::handleMessage); } void AsScene1306Elevator::update() { - if (_isUp && _countdown != 0 && (--_countdown == 0)) { + if (_isUp && _countdown != 0 && (--_countdown == 0)) stGoingDown(); - } AnimatedSprite::update(); if (_currFrameIndex == 7) { playSound(1); @@ -812,9 +808,8 @@ void AsScene1306Elevator::update() { void AsScene1306Elevator::upGoingDown() { AnimatedSprite::update(); - if (_currFrameIndex == 5) { + if (_currFrameIndex == 5) _asElevatorDoor->setVisible(true); - } } uint32 AsScene1306Elevator::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -839,36 +834,36 @@ uint32 AsScene1306Elevator::handleMessage(int messageNum, const MessageParam &pa void AsScene1306Elevator::stGoingUp() { setVisible(true); _isDown = false; - SetUpdateHandler(&AsScene1306Elevator::update); startAnimation(0x043B0270, 0, -1); - NextState(&AsScene1306Elevator::cbGoingUpEvent); playSound(0); + SetUpdateHandler(&AsScene1306Elevator::update); + NextState(&AsScene1306Elevator::cbGoingUpEvent); } void AsScene1306Elevator::cbGoingUpEvent() { - SetUpdateHandler(&AsScene1306Elevator::update); sendMessage(_parentScene, 0x4808, 0); _isUp = true; _countdown = 144; stopAnimation(); setVisible(false); + SetUpdateHandler(&AsScene1306Elevator::update); } void AsScene1306Elevator::stGoingDown() { - SetUpdateHandler(&AsScene1306Elevator::upGoingDown); _isUp = false; setVisible(true); startAnimation(0x043B0270, -1, -1); _playBackwards = true; - NextState(&AsScene1306Elevator::cbGoingDownEvent); playSound(1); + SetUpdateHandler(&AsScene1306Elevator::upGoingDown); + NextState(&AsScene1306Elevator::cbGoingDownEvent); } void AsScene1306Elevator::cbGoingDownEvent() { _isDown = true; sendMessage(_parentScene, 0x4809, 0); - SetUpdateHandler(&AsScene1306Elevator::update); stopAnimation(); + SetUpdateHandler(&AsScene1306Elevator::update); } Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which) @@ -889,31 +884,29 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which) } _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x404A36A0, 100, 0x440C1000); - _asTape = insertSprite<AsScene1201Tape>(this, 19, 1100, 359, 445, 0x9148A011); - _asElevatorDoor = insertSprite<AnimatedSprite>(0x043B0270, 90, 320, 240); _asElevatorDoor->startAnimation(0x043B0270, 6, -1); _asElevatorDoor->setNewHashListIndex(6); - _asElevator = insertSprite<AsScene1306Elevator>(this, _asElevatorDoor); - _sprite1 = insertStaticSprite(0x036A1EE0, 80); - insertStaticSprite(0x00042313, 1100); if (which < 0) { + // Resoring game insertKlayman<KmScene1306>(380, 440); setMessageList(0x004AFAD0); sendMessage(this, 0x2000, 0); _vm->_collisionMan->addSprite(_asTape); } else if (which == 1) { + // Klaymen teleporting in insertKlayman<KmScene1306>(136, 440); sendMessage(_klayman, 0x2000, 1); setMessageList(0x004AFAF0); sendMessage(this, 0x2000, 1); _vm->_collisionMan->addSprite(_asTape); } else if (which == 2) { + // Klaymen returning from diskplayer if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { insertKlayman<KmScene1306>(515, 440); _klayman->setDoDeltaX(1); @@ -924,23 +917,27 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which) sendMessage(this, 0x2000, 0); _vm->_collisionMan->addSprite(_asTape); } else if (which == 3) { + // Klaymen returning from window insertKlayman<KmScene1306>(534, 440); setMessageList(0x004AFC30); sendMessage(this, 0x2000, 0); _vm->_collisionMan->addSprite(_asTape); } else if (which == 4) { + // Klaymen teleporting out insertKlayman<KmScene1306>(136, 440); sendMessage(_klayman, 0x2000, 1); setMessageList(0x004AFC38); sendMessage(this, 0x2000, 1); _vm->_collisionMan->addSprite(_asTape); } else if (which == 5) { + // Klaymen returning from teleporter insertKlayman<KmScene1306>(136, 440); sendMessage(_klayman, 0x2000, 1); setMessageList(0x004AFB00); sendMessage(this, 0x2000, 1); _vm->_collisionMan->addSprite(_asTape); } else { + // Klaymen coming up in elevator insertKlayman<KmScene1306>(286, 408); setSurfacePriority(_asElevator->getSurface(), 1100); setSurfacePriority(_asElevatorDoor->getSurface(), 1090); @@ -961,14 +958,13 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit Scene::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x100D: - if (param.asInteger() == 0x402064D8) { + if (param.asInteger() == 0x402064D8) sendEntityMessage(_klayman, 0x1014, _ssButton); - } else if (param.asInteger() == 0x01C66840) { - if (sendMessage(_asElevator, 0x2001, 0) != 0) { + else if (param.asInteger() == 0x01C66840) { + if (sendMessage(_asElevator, 0x2001, 0) != 0) setMessageList(0x004AFBD8); - } else { + else setMessageList(0x004AFAE0); - } } else if (param.asInteger() == 0x8E646E00) { setMessageList(0x004AFAD8); clearRectList(); @@ -985,9 +981,8 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit } break; case 0x480B: - if (sender == _ssButton) { + if (sender == _ssButton) sendMessage(_asElevator, 0x4808, 0); - } break; case 0x4826: if (sender == _asKey) { @@ -1045,21 +1040,15 @@ uint32 Scene1306::handleMessage416EB0(int messageNum, const MessageParam ¶m, } static const uint32 kAsScene1307KeyResourceList1[] = { - 0x0438069C, - 0x45B0023C, - 0x05700217 + 0x0438069C, 0x45B0023C, 0x05700217 }; static const uint32 kAsScene1307KeyResourceList2[] = { - 0x04441334, - 0x061433F0, - 0x06019390 + 0x04441334, 0x061433F0, 0x06019390 }; static const uint32 kAsScene1307KeyResourceList3[] = { - 0x11A80030, - 0x178812B1, - 0x1488121C + 0x11A80030, 0x178812B1, 0x1488121C }; static const uint32 *kAsScene1307KeyResourceLists[] = { @@ -1069,27 +1058,16 @@ static const uint32 *kAsScene1307KeyResourceLists[] = { }; static const int kAsScene1307KeySurfacePriorities[] = { - 700, - 500, - 300, - 100 + 700, 500, 300, 100 }; const uint kAsScene1307KeyPointsCount = 12; static const NPoint kAsScene1307KeyPoints[] = { - {-2, 0}, - {-5, 0}, - { 5, 0}, - {12, 0}, - {17, 0}, - {25, 0}, - {16, -2}, - {10, -6}, - { 0, -7}, - {-7, -3}, - {-3, 4}, - { 2, 2} + {-2, 0}, {-5, 0}, { 5, 0}, + {12, 0}, {17, 0}, {25, 0}, + {16, -2}, {10, -6}, { 0, -7}, + {-7, -3}, {-3, 4}, { 2, 2} }; const uint kAsScene1307KeyFrameIndicesCount = 20; @@ -1100,36 +1078,29 @@ static const int16 kAsScene1307KeyFrameIndices[] = { }; const int kAsScene1307KeyDivValue = 200; - const int16 kAsScene1307KeyXDelta = 70; const int16 kAsScene1307KeyYDelta = -12; -AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint index, NRect *clipRects) - : AnimatedSprite(vm, 1100), _parentScene(parentScene), _index(index), _clipRects(clipRects), +AsScene1307Key::AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint keyIndex, NRect *clipRects) + : AnimatedSprite(vm, 1100), _parentScene(parentScene), _keyIndex(keyIndex), _clipRects(clipRects), _isClickable(true) { NPoint pt; - const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index]; + const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex]; _dataResource.load(0x22102142); _pointList = _dataResource.getPointArray(0xAC849240); - - pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)]; + pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex)]; _x = pt.x; _y = pt.y; - - createSurface(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4], 190, 148); - - SetUpdateHandler(&AnimatedSprite::update); - SetMessageHandler(&AsScene1307Key::handleMessage); - + createSurface(kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex) % 4], 190, 148); startAnimation(fileHashes[0], 0, -1); - loadSound(0, 0xDC4A1280); loadSound(1, 0xCC021233); loadSound(2, 0xC4C23844); loadSound(3, 0xC4523208); - + SetUpdateHandler(&AnimatedSprite::update); + SetMessageHandler(&AsScene1307Key::handleMessage); } uint32 AsScene1307Key::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1146,7 +1117,7 @@ uint32 AsScene1307Key::handleMessage(int messageNum, const MessageParam ¶m, _isClickable = param.asInteger() != 0; break; case 0x2001: - setSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index, param.asInteger()); + setSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex, param.asInteger()); stMoveKey(); break; case 0x2003: @@ -1194,7 +1165,7 @@ void AsScene1307Key::suMoveKey() { updateBounds(); _pointIndex++; } else { - NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)]; + NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex)]; _x = pt.x + kAsScene1307KeyXDelta; _y = pt.y + kAsScene1307KeyYDelta; stInsertKey(); @@ -1202,23 +1173,23 @@ void AsScene1307Key::suMoveKey() { } void AsScene1307Key::stRemoveKey() { - const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index]; + const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex]; _pointIndex = 0; - SetSpriteUpdate(&AsScene1307Key::suRemoveKey); startAnimation(fileHashes[0], 0, -1); playSound(1); + SetSpriteUpdate(&AsScene1307Key::suRemoveKey); } void AsScene1307Key::stInsertKey() { _pointIndex = 0; - sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4]); - setClipRect(_clipRects[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index) % 4]); - SetSpriteUpdate(&AsScene1307Key::suInsertKey); + sendMessage(_parentScene, 0x1022, kAsScene1307KeySurfacePriorities[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex) % 4]); + setClipRect(_clipRects[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex) % 4]); _newStickFrameIndex = STICK_LAST_FRAME; + SetSpriteUpdate(&AsScene1307Key::suInsertKey); } void AsScene1307Key::stMoveKey() { - NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _index)]; + NPoint pt = (*_pointList)[getSubVar(VA_CURR_KEY_SLOT_NUMBERS, _keyIndex)]; int16 newX = pt.x + kAsScene1307KeyXDelta; int16 newY = pt.y + kAsScene1307KeyYDelta; sendMessage(_parentScene, 0x1022, 1000); @@ -1228,29 +1199,29 @@ void AsScene1307Key::stMoveKey() { if (newX == _x && newY == _y) { stInsertKey(); } else { - const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index]; + const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex]; _pointIndex = 0; _frameIndex = 0; _deltaX = newX - _x; _deltaY = newY - _y; - SetSpriteUpdate(&AsScene1307Key::suMoveKey); startAnimation(fileHashes[0], 0, -1); + SetSpriteUpdate(&AsScene1307Key::suMoveKey); } } void AsScene1307Key::stUnlock() { - const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index]; + const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex]; startAnimation(fileHashes[1], 0, -1); _newStickFrameIndex = STICK_LAST_FRAME; } void AsScene1307Key::stInsert() { - const uint32 *fileHashes = kAsScene1307KeyResourceLists[_index]; + const uint32 *fileHashes = kAsScene1307KeyResourceLists[_keyIndex]; startAnimation(fileHashes[2], 0, -1); _newStickFrameIndex = STICK_LAST_FRAME; } -Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which) +Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule) : Scene(vm, parentModule, true), _countdown(0), _asCurrKey(NULL), _isInsertingKey(false), _doLeaveScene(false), _isPuzzleSolved(false) { @@ -1279,13 +1250,10 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which) tempSprite = insertStaticSprite(0x00A3621C, 800); _clipRects[0].set(tempSprite->getDrawRect().x, 0, 640, 480); - tempSprite = insertStaticSprite(0x00A3641C, 600); _clipRects[1].set(tempSprite->getDrawRect().x, 0, 640, 480); - tempSprite = insertStaticSprite(0x00A3681C, 400); _clipRects[2].set(tempSprite->getDrawRect().x, 0, 640, 480); - tempSprite = insertStaticSprite(0x00A3701C, 200); _clipRects[3].set(tempSprite->getDrawRect().x, 0, 640, 480); @@ -1304,11 +1272,10 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which) void Scene1307::update() { Scene::update(); - if (_countdown && (--_countdown == 0)) { + if (_countdown && (--_countdown == 0)) _doLeaveScene = true; - } else if (_countdown == 20) { + else if (_countdown == 20) _palette->startFadeToWhite(40); - } if (_doLeaveScene && !isSoundPlaying(0)) { leaveScene(1); setGlobalVar(V_KEYDOOR_UNLOCKED, 1); @@ -1348,9 +1315,8 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit } } } - } else if (_countdown == 0 && !_asCurrKey && !_isInsertingKey) { + } else if (_countdown == 0 && !_asCurrKey && !_isInsertingKey) leaveScene(0); - } } break; case 0x2002: @@ -1386,30 +1352,20 @@ uint32 Scene1307::handleMessage(int messageNum, const MessageParam ¶m, Entit } static const uint32 kScene1308NumberFileHashes[] = { - 0x08006320, - 0x10006320, - 0x20006320, - 0x40006320, - 0x80006320, - 0x00006321, - 0x00006322, - 0x00006324, - 0x00006328, - 0x08306320, - 0x10306320, - 0x20306320, - 0x40306320, - 0x80306320, - 0x00306321, + 0x08006320, 0x10006320, 0x20006320, + 0x40006320, 0x80006320, 0x00006321, + 0x00006322, 0x00006324, 0x00006328, + 0x08306320, 0x10306320, 0x20306320, + 0x40306320, 0x80306320, 0x00306321, 0x00306322 }; AsScene1308JaggyDoor::AsScene1308JaggyDoor(NeverhoodEngine *vm, Scene *parentScene) : AnimatedSprite(vm, 0xBA0AE050, 1100, 320, 240), _parentScene(parentScene) { - SetMessageHandler(&AsScene1308JaggyDoor::handleMessage); setVisible(false); stopAnimation(); + SetMessageHandler(&AsScene1308JaggyDoor::handleMessage); } uint32 AsScene1308JaggyDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1431,8 +1387,8 @@ uint32 AsScene1308JaggyDoor::handleMessage(int messageNum, const MessageParam &p void AsScene1308JaggyDoor::stOpenDoor() { startAnimation(0xBA0AE050, 0, -1); setVisible(true); - NextState(&AsScene1308JaggyDoor::stOpenDoorDone); playSound(0, calcHash("fxDoorOpen38")); + NextState(&AsScene1308JaggyDoor::stOpenDoorDone); } void AsScene1308JaggyDoor::stOpenDoorDone() { @@ -1445,8 +1401,8 @@ void AsScene1308JaggyDoor::stCloseDoor() { startAnimation(0xBA0AE050, -1, -1); _playBackwards = true; setVisible(true); - NextState(&AsScene1308JaggyDoor::stCloseDoorDone); playSound(0, calcHash("fxDoorClose38")); + NextState(&AsScene1308JaggyDoor::stCloseDoorDone); } void AsScene1308JaggyDoor::stCloseDoorDone() { @@ -1457,9 +1413,9 @@ void AsScene1308JaggyDoor::stCloseDoorDone() { AsScene1308KeyboardDoor::AsScene1308KeyboardDoor(NeverhoodEngine *vm, Scene *parentScene) : AnimatedSprite(vm, 0xA08A0851, 1100, 320, 240), _parentScene(parentScene) { + playSound(0, 0x51456049); SetMessageHandler(&AsScene1308KeyboardDoor::handleMessage); NextState(&AsScene1308KeyboardDoor::stFallingKeys); - playSound(0, 0x51456049); } uint32 AsScene1308KeyboardDoor::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1474,9 +1430,9 @@ uint32 AsScene1308KeyboardDoor::handleMessage(int messageNum, const MessageParam void AsScene1308KeyboardDoor::stFallingKeys() { startAnimation(0x6238B191, 0, -1); - NextState(&AsScene1308KeyboardDoor::stFallingKeysDone); _x = 580; _y = 383; + NextState(&AsScene1308KeyboardDoor::stFallingKeysDone); } void AsScene1308KeyboardDoor::stFallingKeysDone() { @@ -1488,10 +1444,10 @@ void AsScene1308KeyboardDoor::stFallingKeysDone() { AsScene1308LightWallSymbols::AsScene1308LightWallSymbols(NeverhoodEngine *vm, Scene *parentScene) : AnimatedSprite(vm, 0x80180A10, 100, 320, 240), _parentScene(parentScene) { - SetMessageHandler(&AsScene1308LightWallSymbols::handleMessage); setVisible(false); stopAnimation(); Entity::_priority = 1200; + SetMessageHandler(&AsScene1308LightWallSymbols::handleMessage); } uint32 AsScene1308LightWallSymbols::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1539,32 +1495,31 @@ SsScene1308Number::SsScene1308Number(NeverhoodEngine *vm, uint32 fileHash, int i AsScene1308Mouse::AsScene1308Mouse(NeverhoodEngine *vm) : AnimatedSprite(vm, 1100) { - SetUpdateHandler(&AnimatedSprite::update); - SetMessageHandler(&AsScene1308Mouse::handleMessage); _x = 286; _y = 429; createSurface1(0xA282C472, 100); startAnimation(0xA282C472, 0, -1); + SetUpdateHandler(&AnimatedSprite::update); + SetMessageHandler(&AsScene1308Mouse::handleMessage); } uint32 AsScene1308Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x100D: - if (param.asInteger() == 0x66382026) { + if (param.asInteger() == 0x66382026) playSound(0, 0x0CD84468); - } else if (param.asInteger() == 0x6E28061C) { + else if (param.asInteger() == 0x6E28061C) playSound(0, 0x78C8402C); - } else if (param.asInteger() == 0x462F0410) { + else if (param.asInteger() == 0x462F0410) playSound(0, 0x60984E28); - } break; } return messageResult; } Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) - : Scene(vm, parentModule, true), _flag1(false) { + : Scene(vm, parentModule, true), _isProjecting(false), _asProjector(NULL) { _vm->gameModule()->initKeySlotsPuzzle(); @@ -1585,16 +1540,15 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) _sprite1 = insertStaticSprite(0x0A042060, 1100); _asJaggyDoor = insertSprite<AsScene1308JaggyDoor>(this); _asLightWallSymbols = insertSprite<AsScene1308LightWallSymbols>(this); - _ssNumber1 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 1)], 0); _ssNumber2 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 0)], 1); _ssNumber3 = insertSprite<SsScene1308Number>(kScene1308NumberFileHashes[getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, 2)], 2); - _sprite2 = insertStaticSprite(0x40043120, 995); _sprite3 = insertStaticSprite(0x43003100, 995); _sprite4 = NULL; if (which < 0) { + // Restoring game insertKlayman<KmScene1308>(380, 440); setMessageList(0x004B57C0); if (getGlobalVar(V_KEYDOOR_UNLOCKED)) { @@ -1605,6 +1559,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) setRectList(0x004B5980); } } else if (which == 1) { + // Klaymen entering from the right insertKlayman<KmScene1308>(640, 440); setMessageList(0x004B57C8); if (getGlobalVar(V_KEYDOOR_UNLOCKED)) { @@ -1615,6 +1570,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) setRectList(0x004B5980); } } else if (which == 2) { + // Klaymen returning from keyslots panel insertKlayman<KmScene1308>(475, 440); setMessageList(0x004B58B0); if (getGlobalVar(V_KEYDOOR_UNLOCKED)) { @@ -1626,6 +1582,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) setRectList(0x004B5980); } } else { + // Klaymen entering from the left insertKlayman<KmScene1308>(41, 440); setMessageList(0x004B57D0); sendMessage(_asJaggyDoor, 0x4808, 0); @@ -1639,19 +1596,16 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) } } - if (_sprite4) { + if (_sprite4) _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite4->getDrawRect().x2(), 480); - } else { + else _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); - } if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) { _asProjector = insertSprite<AsCommonProjector>(this, _klayman, (Sprite*)NULL); _vm->_collisionMan->addSprite(_asProjector); _asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2()); _asProjector->setRepl(64, 0); - } else { - _asProjector = NULL; } } @@ -1662,15 +1616,14 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit case 0x100D: if (param.asInteger() == 0x88C11390) { setRectList(0x004B59A0); - _flag1 = true; + _isProjecting = true; } else if (param.asInteger() == 0x08821382) { sendEntityMessage(_klayman, 0x1014, _asProjector); - if (getGlobalVar(V_KEYDOOR_UNLOCKED)) { + if (getGlobalVar(V_KEYDOOR_UNLOCKED)) setRectList(0x004B5990); - } else { + else setRectList(0x004B5980); - } - _flag1 = false; + _isProjecting = false; } else if (param.asInteger() == 0x4AC68808) { clearRectList(); sendMessage(_asJaggyDoor, 0x4809, 0); @@ -1687,11 +1640,10 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit } break; case 0x2000: - if (getGlobalVar(V_KEYDOOR_UNLOCKED)) { + if (getGlobalVar(V_KEYDOOR_UNLOCKED)) setRectList(0x004B5990); - } else { + else setRectList(0x004B5980); - } setMessageList(0x004B57E8, false); _sprite1->setVisible(true); _klayman->setVisible(true); @@ -1719,23 +1671,22 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asProjector) { - if (_flag1) { + if (_isProjecting) setMessageList2(0x004B5868); - } else { + else { if (param.asInteger() == 1) { sendEntityMessage(_klayman, 0x1014, _asProjector); setMessageList2(0x004B5848); } else if (sendMessage(_asProjector, 0x480C, _klayman->getX() <= _asProjector->getX() ? 0 : 1) != 0) { sendEntityMessage(_klayman, 0x1014, _asProjector); setMessageList2(0x004B5830); - } else { + } else setMessageList2(0x004B5800); - } } } else if (sender == _asTape) { - if (_flag1) { + if (_isProjecting) setMessageList2(0x004B5868); - } else if (_messageListStatus != 2) { + else if (_messageListStatus != 2) { sendEntityMessage(_klayman, 0x1014, _asTape); setMessageList2(0x004B58E0); } @@ -1745,7 +1696,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit return 0; } -Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule, int which) +Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule) : Scene(vm, parentModule, true) { SetMessageHandler(&Scene1317::handleMessage); @@ -1817,16 +1768,6 @@ uint32 Scene1317::hmChooseKing(int messageNum, const MessageParam ¶m, Entity return messageResult; } -uint32 Scene1317::hmNoDecisionYet(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Scene::handleMessage(messageNum, param, sender); - switch (messageNum) { - case 0x3002: - stChooseKing(); - break; - } - return messageResult; -} - uint32 Scene1317::hmHoborgAsKing(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Scene::handleMessage(messageNum, param, sender); switch (messageNum) { @@ -1837,16 +1778,6 @@ uint32 Scene1317::hmHoborgAsKing(int messageNum, const MessageParam ¶m, Enti return messageResult; } -uint32 Scene1317::hmKlaymanAsKing(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Scene::handleMessage(messageNum, param, sender); - switch (messageNum) { - case 0x3002: - leaveScene(0); - break; - } - return messageResult; -} - uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Scene::handleMessage(messageNum, param, sender); switch (messageNum) { @@ -1859,45 +1790,45 @@ uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity * void Scene1317::stChooseKing() { showMouse(true); - SetMessageHandler(&Scene1317::hmChooseKing); - SetUpdateHandler(&Scene1317::upChooseKing); _smackerFileHash = 0x10982841; _keepLastSmackerFrame = true; _decisionCountdown = 450; _klaymanBlinks = false; _klaymanBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15; + SetMessageHandler(&Scene1317::hmChooseKing); + SetUpdateHandler(&Scene1317::upChooseKing); } void Scene1317::stNoDecisionYet() { showMouse(false); - SetMessageHandler(&Scene1317::hmNoDecisionYet); - SetUpdateHandler(&Scene1317::update); _smackerFileHash = 0x20982841; _keepLastSmackerFrame = false; + SetMessageHandler(&Scene1317::handleMessage); + SetUpdateHandler(&Scene1317::update); } void Scene1317::stHoborgAsKing() { showMouse(false); - SetMessageHandler(&Scene1317::hmHoborgAsKing); - SetUpdateHandler(&Scene1317::update); _smackerFileHash = 0x40982841; _keepLastSmackerFrame = false; + SetMessageHandler(&Scene1317::hmHoborgAsKing); + SetUpdateHandler(&Scene1317::update); } void Scene1317::stKlaymanAsKing() { showMouse(false); - SetMessageHandler(&Scene1317::hmKlaymanAsKing); - SetUpdateHandler(&Scene1317::update); _smackerFileHash = 0x80982841; _keepLastSmackerFrame = false; + SetMessageHandler(&Scene1317::hmEndMovie); + SetUpdateHandler(&Scene1317::update); } void Scene1317::stEndMovie() { showMouse(false); - SetMessageHandler(&Scene1317::hmEndMovie); - SetUpdateHandler(&Scene1317::update); _smackerFileHash = 0x40800711; _keepLastSmackerFrame = false; + SetMessageHandler(&Scene1317::hmEndMovie); + SetUpdateHandler(&Scene1317::update); } } // End of namespace Neverhood diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h index e01daf1f15..ebbd03184e 100644 --- a/engines/neverhood/module1300.h +++ b/engines/neverhood/module1300.h @@ -37,6 +37,7 @@ public: Module1300(NeverhoodEngine *vm, Module *parentModule, int which); virtual ~Module1300(); protected: + int _sceneNum; uint32 _musicFileHash; void createScene(int sceneNum, int which); void updateScene(); @@ -95,7 +96,7 @@ protected: class Scene1303 : public Scene { public: - Scene1303(NeverhoodEngine *vm, Module *parentModule, int which); + Scene1303(NeverhoodEngine *vm, Module *parentModule); protected: Sprite *_sprite1; Sprite *_asBalloon; @@ -162,13 +163,13 @@ protected: class AsScene1307Key : public AnimatedSprite { public: - AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint index, NRect *clipRects); + AsScene1307Key(NeverhoodEngine *vm, Scene *parentScene, uint keyIndex, NRect *clipRects); protected: Scene *_parentScene; NPointArray *_pointList; uint _pointIndex; int _frameIndex; - uint _index; + uint _keyIndex; NRect *_clipRects; bool _isClickable; int16 _prevX, _prevY; @@ -186,7 +187,7 @@ protected: class Scene1307 : public Scene { public: - Scene1307(NeverhoodEngine *vm, Module *parentModule, int which); + Scene1307(NeverhoodEngine *vm, Module *parentModule); protected: NPointArray *_keyHolePoints; NRect _keyHoleRects[16]; @@ -262,13 +263,13 @@ protected: Sprite *_sprite3; Sprite *_sprite4; Sprite *_sprite5; - bool _flag1; + bool _isProjecting; uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); }; class Scene1317 : public Scene { public: - Scene1317(NeverhoodEngine *vm, Module *parentModule, int which); + Scene1317(NeverhoodEngine *vm, Module *parentModule); protected: SmackerPlayer *_smackerPlayer; bool _klaymanBlinks; @@ -280,9 +281,7 @@ protected: void upChooseKing(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); uint32 hmChooseKing(int messageNum, const MessageParam ¶m, Entity *sender); - uint32 hmNoDecisionYet(int messageNum, const MessageParam ¶m, Entity *sender); uint32 hmHoborgAsKing(int messageNum, const MessageParam ¶m, Entity *sender); - uint32 hmKlaymanAsKing(int messageNum, const MessageParam ¶m, Entity *sender); uint32 hmEndMovie(int messageNum, const MessageParam ¶m, Entity *sender); void stChooseKing(); void stNoDecisionYet(); |