diff options
Diffstat (limited to 'engines/neverhood/modules/module2100.cpp')
-rw-r--r-- | engines/neverhood/modules/module2100.cpp | 153 |
1 files changed, 17 insertions, 136 deletions
diff --git a/engines/neverhood/modules/module2100.cpp b/engines/neverhood/modules/module2100.cpp index 7f9ca94430..9488057fa4 100644 --- a/engines/neverhood/modules/module2100.cpp +++ b/engines/neverhood/modules/module2100.cpp @@ -8,21 +8,21 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ +#include "neverhood/modules/module1200_sprites.h" #include "neverhood/modules/module2100.h" -#include "neverhood/gamemodule.h" -#include "neverhood/modules/module1200.h" +#include "neverhood/modules/module2100_sprites.h" namespace Neverhood { @@ -30,7 +30,7 @@ Module2100::Module2100(NeverhoodEngine *vm, Module *parentModule, int which) : Module(vm, parentModule) { _vm->_soundMan->addMusic(0x10A10C14, 0x11482B95); - + if (which < 0) createScene(_vm->gameState().sceneNum, -1); else if (which == 1) @@ -74,133 +74,14 @@ void Module2100::updateScene() { } } -// Scene2101 - -AsScene2101Door::AsScene2101Door(NeverhoodEngine *vm, bool isOpen) - : AnimatedSprite(vm, 1100) { - - createSurface(100, 328, 347); - _x = 320; - _y = 240; - SetUpdateHandler(&AnimatedSprite::update); - SetMessageHandler(&AsScene2101Door::handleMessage); - if (isOpen) { - startAnimation(0x0C202B9C, -1, -1); - _newStickFrameIndex = STICK_LAST_FRAME; - } else - setVisible(false); -} - -uint32 AsScene2101Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); - switch (messageNum) { - case 0x3002: - gotoNextState(); - break; - case 0x4808: - stOpenDoor(); - break; - case 0x4809: - stCloseDoor(); - break; - } - return messageResult; -} - -void AsScene2101Door::stOpenDoor() { - startAnimation(0x0C202B9C, 0, -1); - _newStickFrameIndex = STICK_LAST_FRAME; - setVisible(true); - playSound(0, calcHash("fxDoorOpen32")); -} - -void AsScene2101Door::stCloseDoor() { - startAnimation(0xC222A8D4, 0, -1); - _newStickFrameIndex = STICK_LAST_FRAME; - setVisible(true); - playSound(0, calcHash("fxDoorClose32")); - NextState(&AsScene2101Door::stCloseDoorDone); -} - -void AsScene2101Door::stCloseDoorDone() { - stopAnimation(); - setVisible(false); -} - -AsScene2101HitByDoorEffect::AsScene2101HitByDoorEffect(NeverhoodEngine *vm, Sprite *klaymen) - : AnimatedSprite(vm, 1400), _klaymen(klaymen) { - - SetUpdateHandler(&AnimatedSprite::update); - SetMessageHandler(&AsScene2101HitByDoorEffect::handleMessage); - createSurface(1200, 88, 165); - setVisible(false); -} - -uint32 AsScene2101HitByDoorEffect::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); - switch (messageNum) { - case 0x2001: - _x = _klaymen->getX(); - _y = _klaymen->getY() - 132; - startAnimation(0x0422255A, 0, -1); - setVisible(true); - break; - case 0x3002: - stopAnimation(); - setVisible(false); - break; - } - return messageResult; -} - -SsCommonFloorButton::SsCommonFloorButton(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash) - : StaticSprite(vm, 1100), _parentScene(parentScene), _countdown(0), - _fileHash1(fileHash1), _fileHash2(fileHash2), _soundFileHash(soundFileHash) { - - SetUpdateHandler(&SsCommonFloorButton::update); - SetMessageHandler(&SsCommonFloorButton::handleMessage); - if (_soundFileHash == 0) - _soundFileHash = 0x44141000; - createSurface(1010, 61, 30); - if (_fileHash1) - loadSprite(_fileHash1, kSLFDefDrawOffset | kSLFDefPosition); - else - setVisible(false); -} - -void SsCommonFloorButton::update() { - if (_countdown != 0 && (--_countdown == 0)) { - sendMessage(_parentScene, 0x1022, 1010); - if (_fileHash1) - loadSprite(_fileHash1, kSLFDefDrawOffset | kSLFDefPosition); - else - setVisible(false); - } -} - -uint32 SsCommonFloorButton::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); - switch (messageNum) { - case 0x480B: - sendMessage(_parentScene, 0x480B, 0); - setVisible(true); - sendMessage(_parentScene, 0x1022, 990); - loadSprite(_fileHash2, kSLFDefDrawOffset | kSLFDefPosition); - _countdown = 16; - playSound(0, _soundFileHash); - break; - } - return messageResult; -} - Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which) : Scene(vm, parentModule) { - + Sprite *tempSprite; - + SetMessageHandler(&Scene2101::handleMessage); SetUpdateHandler(&Scene2101::update); - + setBackground(0x44242305); setPalette(0x44242305); insertScreenMouse(0x4230144A); @@ -212,7 +93,7 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which) addCollisionSprite(_asTape1); _asTape2 = insertSprite<AsScene1201Tape>(this, 11, 1100, 441, 443, 0x9048A093); addCollisionSprite(_asTape2); - + if (which < 0) { insertKlaymen<KmScene2101>(380, 438); setMessageList(0x004B8E48); @@ -256,17 +137,17 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which) _doorStatus = 1; _countdown1 = 0; } - + _asHitByDoorEffect = insertSprite<AsScene2101HitByDoorEffect>(_klaymen); _klaymen->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480); - + } void Scene2101::update() { if (_countdown1 != 0) { if (_doorStatus == 2) { if (--_countdown1 == 0) { - sendMessage(_asDoor, 0x4809, 0); + sendMessage(_asDoor, NM_KLAYMEN_CLOSE_DOOR, 0); _doorStatus = 1; } } else { @@ -274,12 +155,12 @@ void Scene2101::update() { _canAcceptInput = false; if (--_countdown1 == 0) { if (_klaymen->getX() < 480) { - sendMessage(_asDoor, 0x4809, 0); + sendMessage(_asDoor, NM_KLAYMEN_CLOSE_DOOR, 0); _doorStatus = 1; } else if (_klaymen->getX() >= 480 && _klaymen->getX() <= 575) { _klaymen->setDoDeltaX(0); setMessageList2(0x004B8F48); - sendMessage(_asDoor, 0x4809, 0); + sendMessage(_asDoor, NM_KLAYMEN_CLOSE_DOOR, 0); sendMessage(_asHitByDoorEffect, 0x2001, 0); _doorStatus = 1; } @@ -293,7 +174,7 @@ void Scene2101::update() { uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { Scene::handleMessage(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x02144CB1) sendEntityMessage(_klaymen, 0x1014, _ssFloorButton); else if (param.asInteger() == 0x21E64A00) { @@ -304,7 +185,7 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit } else if (param.asInteger() == 0x41442820) cancelMessageList(); break; - case 0x2000: + case NM_ANIMATION_UPDATE: if (param.asInteger() != 0) { setRectList(0x004B9008); _klaymen->setKlaymenIdleTable3(); @@ -315,7 +196,7 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x480B: if (sender == _ssFloorButton && _doorStatus == 1) { - sendMessage(_asDoor, 0x4808, 0); + sendMessage(_asDoor, NM_KLAYMEN_OPEN_DOOR, 0); _doorStatus = 0; _countdown1 = 90; } |