diff options
author | johndoe123 | 2012-10-01 18:08:08 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-05-08 20:43:46 +0200 |
commit | 7e4faf3505c8124838f7e89b873aa6e5844b3e43 (patch) | |
tree | 2711821498e9a0cf4afee6cf97ace6064f911698 /engines | |
parent | e97bd306824dfbe47f08060b383fd79c163ab7fd (diff) | |
download | scummvm-rg350-7e4faf3505c8124838f7e89b873aa6e5844b3e43.tar.gz scummvm-rg350-7e4faf3505c8124838f7e89b873aa6e5844b3e43.tar.bz2 scummvm-rg350-7e4faf3505c8124838f7e89b873aa6e5844b3e43.zip |
NEVERHOOD: More Klayman merging
- Also clean up parameter list of two Klayman subclass constructors and send a message to the parent class instead of operating on the entities inside the Klayman class
Diffstat (limited to 'engines')
-rw-r--r-- | engines/neverhood/klayman.cpp | 462 | ||||
-rw-r--r-- | engines/neverhood/klayman.h | 47 | ||||
-rw-r--r-- | engines/neverhood/module1000.cpp | 20 | ||||
-rw-r--r-- | engines/neverhood/module1200.cpp | 21 | ||||
-rw-r--r-- | engines/neverhood/module1200.h | 1 | ||||
-rw-r--r-- | engines/neverhood/module1300.cpp | 10 |
6 files changed, 268 insertions, 293 deletions
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp index 06e6a43e62..1155c57e43 100644 --- a/engines/neverhood/klayman.cpp +++ b/engines/neverhood/klayman.cpp @@ -2540,6 +2540,185 @@ void Klayman::stInsertKey() { } } +uint32 Klayman::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = handleMessage41D480(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x04684052) { + _acceptInput = true; + sendMessage(_parentScene, 0x2002, 0); + } + break; + } + return messageResult; +} + +void Klayman::stReadNote() { + _status2 = 2; + _acceptInput = false; + startAnimation(0x123E9C9F, 0, -1); + SetUpdateHandler(&Klayman::update); + SetMessageHandler(&Klayman::hmReadNote); + SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); +} + +uint32 Klayman::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = handleMessage41D480(messageNum, param, sender); + int16 speedUpFrameIndex; + switch (messageNum) { + case 0x1008: + speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash); + if (_currFrameIndex < speedUpFrameIndex) { + startAnimation(0x35AA8059, speedUpFrameIndex, -1); + _y = 438; + } + messageResult = 0; + break; + case 0x100D: + if (param.asInteger() == 0x1A1A0785) { + playSound(0, 0x40F0A342); + } else if (param.asInteger() == 0x60428026) { + playSound(0, 0x40608A59); + } + break; + } + return messageResult; +} + +void Klayman::stHitByDoor() { + _status2 = 1; + _acceptInput = false; + startAnimation(0x35AA8059, 0, -1); + SetUpdateHandler(&Klayman::update); + SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); + SetMessageHandler(&Klayman::hmHitByDoor); + playSound(0, 0x402E82D4); +} + +uint32 Klayman::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = handleMessage41D480(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == calcHash("PopBalloon")) { + sendMessage(_parentScene, 0x2000, 0); + } else if (param.asInteger() == 0x02B20220) { + playSound(0, 0xC5408620); + } else if (param.asInteger() == 0x0A720138) { + playSound(0, 0xD4C08010); + } else if (param.asInteger() == 0xB613A180) { + playSound(0, 0x44051000); + } + break; + } + return messageResult; +} + +void Klayman::upPeekWallBlink() { + Klayman::update(); + _blinkCounter++; + if (_blinkCounter >= _blinkCounterMax) + stPeekWallBlink(); +} + +void Klayman::stPeekWall1() { + _status2 = 0; + _acceptInput = true; + startAnimation(0xAC20C012, 8, 37); + SetUpdateHandler(&Klayman::update); + SetSpriteUpdate(NULL); + SetMessageHandler(&Klayman::handleMessage41D480); + NextState(&Klayman::stPeekWallBlink); +} + +void Klayman::stPeekWall2() { + _status2 = 1; + _acceptInput = false; + startAnimation(0xAC20C012, 43, 49); + SetUpdateHandler(&Klayman::update); + SetSpriteUpdate(NULL); + SetMessageHandler(&Klayman::handleMessage41D480); +} + +void Klayman::stPeekWallBlink() { + _blinkCounter = 0; + _status2 = 0; + _acceptInput = true; + _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24; + startAnimation(0xAC20C012, 38, 42); + SetUpdateHandler(&Klayman::upPeekWallBlink); + SetSpriteUpdate(NULL); + SetMessageHandler(&Klayman::handleMessage41D360); + _newStickFrameIndex = 42; +} + +void Klayman::stPeekWallReturn() { + _status2 = 0; + _acceptInput = false; + startAnimation(0x2426932E, 0, -1); + SetUpdateHandler(&Klayman::update); + SetSpriteUpdate(NULL); + SetMessageHandler(&Klayman::hmPeekWallReturn); +} + +void Klayman::stPullHammerLever() { + if (!stStartAction(AnimationCallback(&Klayman::stPullHammerLever))) { + _status2 = 2; + _acceptInput = false; + startAnimation(0x00648953, 0, -1); + SetUpdateHandler(&Klayman::update); + SetMessageHandler(&Klayman::hmPullHammerLever); + SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); + } +} + +uint32 Klayman::hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x4AB28209) + sendMessage(_attachedSprite, 0x480F, 0); + break; + } + return messageResult; +} + +void Klayman::suRidePlatformDown() { + _platformDeltaY++; + _y += _platformDeltaY; + if (_y > 600) + sendMessage(this, 0x1019, 0); +} + +void Klayman::stRidePlatformDown() { + if (!stStartActionFromIdle(AnimationCallback(&KmScene2206::stRidePlatformDown))) { + _status2 = 1; + sendMessage(_parentScene, 0x4803, 0); + _acceptInput = false; + _platformDeltaY = 0; + startAnimation(0x5420E254, 0, -1); + SetUpdateHandler(&Klayman::update); + SetMessageHandler(&Klayman::handleMessage41D360); + SetSpriteUpdate(&Klayman::suRidePlatformDown); + _vm->_soundMan->playSoundLooping(0xD3B02847); + } +} + +void Klayman::startWalkingResume(int16 frameIncr) { + // TODO Make the parameter a field and change this method back to a callback (or similar) + int16 frameIndex = getGlobalVar(0x18288913) + frameIncr; + if (frameIndex < 0 || frameIndex > 13) + frameIndex = 0; + _status2 = 0; + _isWalking = true; + _acceptInput = true; + startAnimation(0x1A249001, frameIndex, -1); + SetUpdateHandler(&Klayman::update); + SetMessageHandler(&Klayman::hmWalking); + SetSpriteUpdate(&Klayman::spriteUpdate41F300); + NextState(&Klayman::stUpdateWalking); + FinalizeState(&Klayman::stStartWalkingDone); +} + //############################################################################## // KmScene1001 @@ -2562,7 +2741,7 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) { GotoState(&Klayman::stSleeping); break; case 0x480D: - GotoState(&KmScene1001::stPullLever); + GotoState(&Klayman::stPullHammerLever); break; case NM_KLAYMAN_PICKUP: GotoState(&Klayman::stPickUpGeneric); @@ -2621,34 +2800,10 @@ uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) { return 0; } -void KmScene1001::stPullLever() { - if (!stStartAction(AnimationCallback(&KmScene1001::stPullLever))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x00648953, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&KmScene1001::hmPullLever); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - } -} - -uint32 KmScene1001::hmPullLever(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x4AB28209) { - sendMessage(_attachedSprite, 0x480F, 0); - } - break; - } - return messageResult; -} - // KmScene1002 -KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Sprite *class599, Sprite *ssLadderArch) - : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL), _class599(class599), _ssLadderArch(ssLadderArch), - _status(0) { +KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) + : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL), _idleTableNum(0) { setKlaymanIdleTable1(); @@ -2656,13 +2811,13 @@ KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1 void KmScene1002::xUpdate() { if (_x >= 250 && _x <= 435 && _y >= 420) { - if (_status == 0) { + if (_idleTableNum == 0) { // TODO setKlaymanIdleTable(stru_4B44C8); - _status = 1; + _idleTableNum = 1; } - } else if (_status == 1) { + } else if (_idleTableNum == 1) { setKlaymanIdleTable1(); - _status = 0; + _idleTableNum = 0; } } @@ -2780,21 +2935,17 @@ uint32 KmScene1002::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam switch (messageNum) { case 0x100D: if (param.asInteger() == 0x168050A0) { - if (_attachedSprite) { + if (_attachedSprite) sendMessage(_attachedSprite, 0x480F, 0); - } } else if (param.asInteger() == 0x586B0300) { - if (_otherSprite) { + if (_otherSprite) sendMessage(_otherSprite, 0x480E, 1); - } } else if (param.asInteger() == 0x4AB28209) { - if (_attachedSprite) { + if (_attachedSprite) sendMessage(_attachedSprite, 0x482A, 0); - } } else if (param.asInteger() == 0x88001184) { - if (_attachedSprite) { + if (_attachedSprite) sendMessage(_attachedSprite, 0x482B, 0); - } } break; } @@ -2969,8 +3120,7 @@ void KmScene1002::stSpitOutFall0() { SetMessageHandler(&Klayman::handleMessage41D360); SetSpriteUpdate(&KmScene1002::suFallDown); NextState(&KmScene1002::stFalling); - sendMessage(_class599, 0x482A, 0); - sendMessage(_ssLadderArch, 0x482A, 0); + sendMessage(_parentScene, 0x8000, 0); } void KmScene1002::stFalling() { @@ -2987,8 +3137,7 @@ void KmScene1002::stFalling() { sendMessage(_parentScene, 0x2002, 0); // TODO _callbackList = NULL; _attachedSprite = NULL; - sendMessage(_class599, 0x482B, 0); - sendMessage(_ssLadderArch, 0x482B, 0); + sendMessage(_parentScene, 0x8001, 0); } void KmScene1002::stSpitOutFall2() { @@ -3000,8 +3149,7 @@ void KmScene1002::stSpitOutFall2() { SetMessageHandler(&Klayman::handleMessage41D480); SetSpriteUpdate(&KmScene1002::suFallDown); NextState(&KmScene1002::stFalling); - sendMessage(_class599, 0x482A, 0); - sendMessage(_ssLadderArch, 0x482A, 0); + sendMessage(_parentScene, 0x8000, 0); } void KmScene1002::stFallTouchdown() { @@ -3114,7 +3262,7 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) { startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); break; case 0x481E: - GotoState(&KmScene1004::stReadNote); + GotoState(&Klayman::stReadNote); break; case 0x4820: sendMessage(_parentScene, 0x2000, 0); @@ -3157,28 +3305,6 @@ uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) { return 0; } -uint32 KmScene1004::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = handleMessage41D480(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x04684052) { - _acceptInput = true; - sendMessage(_parentScene, 0x2002, 0); - } - break; - } - return messageResult; -} - -void KmScene1004::stReadNote() { - _status2 = 2; - _acceptInput = false; - startAnimation(0x123E9C9F, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&KmScene1004::hmReadNote); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); -} - KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) : Klayman(vm, parentScene, x, y, 1000, 1000) { @@ -3245,8 +3371,8 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) { // KmScene1201 -KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464) - : Klayman(vm, parentScene, x, y, 1000, 1000), _class464(class464), _countdown(0) { +KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) + : Klayman(vm, parentScene, x, y, 1000, 1000), _countdown(0) { // TODO setKlaymanIdleTable(dword_4AEF10, 3); _flagF6 = true; @@ -3429,7 +3555,7 @@ void KmScene1201::stTumbleHeadless() { SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); SetMessageHandler(&KmScene1201::hmTumbleHeadless); NextState(&Klayman::stTryStandIdle); - sendMessage(_class464, 0x2006, 0); + sendMessage(_parentScene, 0x8000, 0); playSound(0, 0x62E0A356); } } @@ -3454,83 +3580,18 @@ KmScene1303::KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1 uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) { switch (messageNum) { case 0x4804: - GotoState(&KmScene1303::stPeekWall1); + GotoState(&Klayman::stPeekWall1); break; case 0x483B: - GotoState(&KmScene1303::stPeekWallReturn); + GotoState(&Klayman::stPeekWallReturn); break; case 0x483C: - GotoState(&KmScene1303::stPeekWall2); + GotoState(&Klayman::stPeekWall2); break; } return 0; } -uint32 KmScene1303::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = handleMessage41D480(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == calcHash("PopBalloon")) { - sendMessage(_parentScene, 0x2000, 0); - } else if (param.asInteger() == 0x02B20220) { - playSound(0, 0xC5408620); - } else if (param.asInteger() == 0x0A720138) { - playSound(0, 0xD4C08010); - } else if (param.asInteger() == 0xB613A180) { - playSound(0, 0x44051000); - } - break; - } - return messageResult; -} - -void KmScene1303::upPeekWallBlink() { - Klayman::update(); - _blinkCounter++; - if (_blinkCounter >= _blinkCounterMax) - stPeekWallBlink(); -} - -void KmScene1303::stPeekWall1() { - _status2 = 0; - _acceptInput = true; - startAnimation(0xAC20C012, 8, 37); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(NULL); - SetMessageHandler(&Klayman::handleMessage41D480); - NextState(&KmScene1303::stPeekWallBlink); -} - -void KmScene1303::stPeekWall2() { - _status2 = 1; - _acceptInput = false; - startAnimation(0xAC20C012, 43, 49); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(NULL); - SetMessageHandler(&Klayman::handleMessage41D480); -} - -void KmScene1303::stPeekWallBlink() { - _blinkCounter = 0; - _status2 = 0; - _acceptInput = true; - _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24; - startAnimation(0xAC20C012, 38, 42); - SetUpdateHandler(&KmScene1303::upPeekWallBlink); - SetSpriteUpdate(NULL); - SetMessageHandler(&Klayman::handleMessage41D360); - _newStickFrameIndex = 42; -} - -void KmScene1303::stPeekWallReturn() { - _status2 = 0; - _acceptInput = false; - startAnimation(0x2426932E, 0, -1); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(NULL); - SetMessageHandler(&KmScene1303::hmPeekWallReturn); -} - KmScene1304::KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) : Klayman(vm, parentScene, x, y, 1000, 1000) { @@ -4415,7 +4476,7 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) { GotoState(&Klayman::stTryStandIdle); break; case 0x4811: - GotoState(&KmScene2101::stHitByDoor); + GotoState(&Klayman::stHitByDoor); break; case NM_KLAYMAN_PICKUP: if (param.asInteger() == 2) { @@ -4477,39 +4538,6 @@ uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) { return messageResult; } -uint32 KmScene2101::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = handleMessage41D480(messageNum, param, sender); - int16 speedUpFrameIndex; - switch (messageNum) { - case 0x1008: - speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash); - if (_currFrameIndex < speedUpFrameIndex) { - startAnimation(0x35AA8059, speedUpFrameIndex, -1); - _y = 438; - } - messageResult = 0; - break; - case 0x100D: - if (param.asInteger() == 0x1A1A0785) { - playSound(0, 0x40F0A342); - } else if (param.asInteger() == 0x60428026) { - playSound(0, 0x40608A59); - } - break; - } - return messageResult; -} - -void KmScene2101::stHitByDoor() { - _status2 = 1; - _acceptInput = false; - startAnimation(0x35AA8059, 0, -1); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - SetMessageHandler(&KmScene2101::hmHitByDoor); - playSound(0, 0x402E82D4); -} - KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount) // TODO: NRect *rect1, int16 unk in Klayman ctor : Klayman(vm, parentScene, x, y, 1000, 1000) { @@ -4704,18 +4732,7 @@ uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) { } void KmScene2205::stStartWalkingResume() { - int16 frameIndex = getGlobalVar(0x18288913); - if (frameIndex < 0 || frameIndex > 13) - frameIndex = 0; - _status2 = 0; - _isWalking = true; - _acceptInput = true; - startAnimation(0x1A249001, frameIndex, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalking); - SetSpriteUpdate(&Klayman::spriteUpdate41F300); - NextState(&Klayman::stUpdateWalking); - FinalizeState(&Klayman::stStartWalkingDone); + startWalkingResume(0); } KmScene2206::KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) @@ -4742,7 +4759,7 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) { GotoState(&Klayman::stTryStandIdle); break; case 0x4803: - GotoState(&KmScene2206::stRidePlatformDown); + GotoState(&Klayman::stRidePlatformDown); break; case 0x4804: if (param.asInteger() != 0) { @@ -4823,40 +4840,8 @@ uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) { return 0; } -void KmScene2206::suRidePlatformDown() { - _yDelta++; - _y += _yDelta; - if (_y > 600) - sendMessage(this, 0x1019, 0); -} - -void KmScene2206::stRidePlatformDown() { - if (!stStartActionFromIdle(AnimationCallback(&KmScene2206::stRidePlatformDown))) { - _status2 = 1; - sendMessage(_parentScene, 0x4803, 0); - _acceptInput = false; - _yDelta = 0; - startAnimation(0x5420E254, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::handleMessage41D360); - SetSpriteUpdate(&KmScene2206::suRidePlatformDown); - _vm->_soundMan->playSoundLooping(0xD3B02847); - } -} - void KmScene2206::stStartWalkingResume() { - int16 frameIndex = getGlobalVar(0x18288913) + 1; - if (frameIndex < 0 || frameIndex > 13) - frameIndex = 0; - _status2 = 0; - _isWalking = true; - _acceptInput = true; - startAnimation(0x1A249001, frameIndex, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalking); - SetSpriteUpdate(&Klayman::spriteUpdate41F300); - NextState(&Klayman::stUpdateWalking); - FinalizeState(&Klayman::stStartWalkingDone); + startWalkingResume(1); } KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) @@ -5051,18 +5036,7 @@ uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) { } void KmScene2242::stStartWalkingResume() { - int16 frameIndex = getGlobalVar(0x18288913); - if (frameIndex < 0 || frameIndex > 13) - frameIndex = 0; - _status2 = 0; - _isWalking = true; - _acceptInput = true; - startAnimation(0x1A249001, frameIndex, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalking); - SetSpriteUpdate(&Klayman::spriteUpdate41F300); - NextState(&Klayman::stUpdateWalking); - FinalizeState(&Klayman::stStartWalkingDone); + startWalkingResume(0); } KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) @@ -5120,18 +5094,7 @@ uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m } void KmHallOfRecords::stStartWalkingResume() { - int16 frameIndex = getGlobalVar(0x18288913); - if (frameIndex < 0 || frameIndex > 13) - frameIndex = 0; - _status2 = 0; - _isWalking = true; - _acceptInput = true; - startAnimation(0x1A249001, frameIndex, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalking); - SetSpriteUpdate(&Klayman::spriteUpdate41F300); - NextState(&Klayman::stUpdateWalking); - FinalizeState(&Klayman::stStartWalkingDone); + startWalkingResume(0); } KmScene2247::KmScene2247(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) @@ -5189,18 +5152,7 @@ uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) { } void KmScene2247::stStartWalkingResume() { - int16 frameIndex = getGlobalVar(0x18288913); - if (frameIndex < 0 || frameIndex > 13) - frameIndex = 0; - _status2 = 0; - _isWalking = true; - _acceptInput = true; - startAnimation(0x1A249001, frameIndex, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalking); - SetSpriteUpdate(&Klayman::spriteUpdate41F300); - NextState(&Klayman::stUpdateWalking); - FinalizeState(&Klayman::stStartWalkingDone); + startWalkingResume(0); } KmScene2401::KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h index a52e7f6a85..a84ef96e86 100644 --- a/engines/neverhood/klayman.h +++ b/engines/neverhood/klayman.h @@ -195,6 +195,27 @@ public: uint32 hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender); void stInsertKey(); + uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender); + void stReadNote(); + + uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender); + void stHitByDoor(); + + uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender); + void upPeekWallBlink(); + void stPeekWall1(); + void stPeekWall2(); + void stPeekWallBlink(); + void stPeekWallReturn(); + + void stPullHammerLever(); + uint32 hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender); + + void suRidePlatformDown(); + void stRidePlatformDown(); + + void startWalkingResume(int16 frameIncr); + protected: Entity *_parentScene; Sprite *_attachedSprite; @@ -226,6 +247,8 @@ protected: bool _potionFlag1; bool _potionFlag2; + int16 _platformDeltaY; + virtual void xUpdate(); virtual uint32 xHandleMessage(int messageNum, const MessageParam ¶m); @@ -318,18 +341,14 @@ public: KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); protected: uint32 xHandleMessage(int messageNum, const MessageParam ¶m); - void stPullLever(); - uint32 hmPullLever(int messageNum, const MessageParam ¶m, Entity *sender); }; class KmScene1002 : public Klayman { public: - KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Sprite *class599, Sprite *ssLadderArch); + KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); protected: - Sprite *_class599; - Sprite *_ssLadderArch; Sprite *_otherSprite; - int _status; + int _idleTableNum; void xUpdate(); uint32 xHandleMessage(int messageNum, const MessageParam ¶m); void upSpitOutFall(); @@ -362,8 +381,6 @@ public: KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); protected: uint32 xHandleMessage(int messageNum, const MessageParam ¶m); - uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender); - void stReadNote(); }; class KmScene1109 : public Klayman { @@ -375,9 +392,8 @@ protected: class KmScene1201 : public Klayman { public: - KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464); + KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); protected: - Entity *_class464; int _countdown; uint32 xHandleMessage(int messageNum, const MessageParam ¶m); void upMoveObject(); @@ -397,12 +413,6 @@ public: KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); protected: uint32 xHandleMessage(int messageNum, const MessageParam ¶m); - uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender); - void upPeekWallBlink(); - void stPeekWall1(); - void stPeekWall2(); - void stPeekWallBlink(); - void stPeekWallReturn(); }; class KmScene1304 : public Klayman { @@ -498,8 +508,6 @@ public: KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); protected: uint32 xHandleMessage(int messageNum, const MessageParam ¶m); - uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender); - void stHitByDoor(); }; class KmScene2201 : public Klayman { @@ -530,11 +538,8 @@ public: KmScene2206(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); ~KmScene2206(); protected: - int16 _yDelta; void xUpdate(); uint32 xHandleMessage(int messageNum, const MessageParam ¶m); - void suRidePlatformDown(); - void stRidePlatformDown(); void stStartWalkingResume(); }; diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp index f4932c03e7..1e844c75bd 100644 --- a/engines/neverhood/module1000.cpp +++ b/engines/neverhood/module1000.cpp @@ -1336,28 +1336,28 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { if (_vm->_gameState.field2 == 0) { - insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch); + insertKlayman<KmScene1002>(90, 226); _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman); setMessageList(0x004B4270); _klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2()); _asKlaymanLadderHands->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); _klayman->setRepl(64, 0); } else { - insertKlayman<KmScene1002>(379, 435, _class599, _ssLadderArch); + insertKlayman<KmScene1002>(379, 435); _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman); setMessageList(0x004B4270); _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); _asKlaymanLadderHands->setClipRect(_klayman->getClipRect()); } } else if (which == 1) { - insertKlayman<KmScene1002>(650, 435, _class599, _ssLadderArch); + insertKlayman<KmScene1002>(650, 435); _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman); setMessageList(0x004B4478); _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); _asKlaymanLadderHands->setClipRect(_klayman->getClipRect()); _vm->_gameState.field2 = 1; } else if (which == 2) { - insertKlayman<KmScene1002>(68, 645, _class599, _ssLadderArch); + insertKlayman<KmScene1002>(68, 645); _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman); setMessageList(0x004B4298); _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); @@ -1365,7 +1365,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which) _vm->_gameState.field2 = 1; sendMessage(_klayman, 0x4820, 0); } else { - insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch); + insertKlayman<KmScene1002>(90, 226); _asKlaymanLadderHands = insertSprite<AsScene1002KlaymanLadderHands>(_klayman); setMessageList(0x004B4470); _klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2()); @@ -1550,7 +1550,15 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit playSound(1); sendMessage(_asDoor, 0x4808, 0); sendMessage(_asOutsideDoorBackground, 0x4808, 0); - break; + break; + case 0x8000: + sendMessage(_class599, 0x482A, 0); + sendMessage(_ssLadderArch, 0x482A, 0); + break; + case 0x8001: + sendMessage(_class599, 0x482B, 0); + sendMessage(_ssLadderArch, 0x482B, 0); + break; } return messageResult; } diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp index d6ca51b9c3..a903759ce1 100644 --- a/engines/neverhood/module1200.cpp +++ b/engines/neverhood/module1200.cpp @@ -747,7 +747,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which) int16 topY1, topY2, topY3, topY4; int16 x1, x2; - Sprite *tempSprite, *class464; + Sprite *tempSprite; SetUpdateHandler(&Scene1201::update); SetMessageHandler(&Scene1201::handleMessage); @@ -791,34 +791,34 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which) tempSprite = insertStaticSprite(0xA29223FA, 1200); x2 = tempSprite->getX() + tempSprite->getDrawRect().width; - class464 = insertSprite<Class464>(); + _class464 = insertSprite<Class464>(); debug("Scene1201: which = %d", which); if (which < 0) { - insertKlayman<KmScene1201>(364, 333, class464); + insertKlayman<KmScene1201>(364, 333); setMessageList(0x004AEC08); } else if (which == 3) { - insertKlayman<KmScene1201>(400, 329, class464); + insertKlayman<KmScene1201>(400, 329); setMessageList(0x004AEC08); } else if (which == 2) { if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) { - insertKlayman<KmScene1201>(374, 333, class464); + insertKlayman<KmScene1201>(374, 333); setMessageList(0x004AEC08); } else { - insertKlayman<KmScene1201>(640, 329, class464); + insertKlayman<KmScene1201>(640, 329); setMessageList(0x004AEC20); } } else if (which == 1) { if (getGlobalVar(0xC0418A02)) { - insertKlayman<KmScene1201>(364, 333, class464); + insertKlayman<KmScene1201>(364, 333); _klayman->setDoDeltaX(1); } else { - insertKlayman<KmScene1201>(246, 333, class464); + insertKlayman<KmScene1201>(246, 333); } setMessageList(0x004AEC30); } else { - insertKlayman<KmScene1201>(0, 336, class464); + insertKlayman<KmScene1201>(0, 336); setMessageList(0x004AEC10); } @@ -989,6 +989,9 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4829: sendMessage(_asRightDoor, 0x4829, 0); + break; + case 0x8000: + sendMessage(_class464, 0x2006, 0); break; } return messageResult; diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h index 1733fb43e2..b92ff9297f 100644 --- a/engines/neverhood/module1200.h +++ b/engines/neverhood/module1200.h @@ -177,6 +177,7 @@ protected: Sprite *_asLeftDoor; Sprite *_asRightDoor; Sprite *_asTape; + Sprite *_class464; bool _flag; void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp index 1c980b0698..f3677a1d29 100644 --- a/engines/neverhood/module1300.cpp +++ b/engines/neverhood/module1300.cpp @@ -451,10 +451,10 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which) _ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2()); if (which < 0) { - insertKlayman<KmScene1002>(380, 364, _class595, (Sprite*)NULL); + insertKlayman<KmScene1002>(380, 364); setMessageList(0x004B0868); } else { - insertKlayman<KmScene1002>(293, 330, _class595, (Sprite*)NULL); + insertKlayman<KmScene1002>(293, 330); setMessageList(0x004B0870); } @@ -587,6 +587,12 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit case 0x482B: sendMessage(_asVenusFlyTrap, 0x482A, 0); break; + case 0x8000: + sendMessage(_class595, 0x482A, 0); + break; + case 0x8001: + sendMessage(_class595, 0x482B, 0); + break; } return messageResult; } |