diff options
Diffstat (limited to 'engines/neverhood/klaymen.cpp')
-rw-r--r-- | engines/neverhood/klaymen.cpp | 3605 |
1 files changed, 74 insertions, 3531 deletions
diff --git a/engines/neverhood/klaymen.cpp b/engines/neverhood/klaymen.cpp index 8ed27c825a..a813440f62 100644 --- a/engines/neverhood/klaymen.cpp +++ b/engines/neverhood/klaymen.cpp @@ -47,17 +47,6 @@ static const KlaymenIdleTableItem klaymenIdleTable3[] = { {1, kIdleTeleporterHands2} }; -static const KlaymenIdleTableItem klaymenIdleTable4[] = { - {1, kIdleSpinHead}, - {1, kIdleChest}, - {1, kIdleHeadOff}, -}; - -static const KlaymenIdleTableItem klaymenIdleTable1002[] = { - {1, kIdlePickEar}, - {2, kIdleWonderAbout} -}; - // Klaymen Klaymen::Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRectArray *clipRects) @@ -65,7 +54,7 @@ Klaymen::Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRec _isWalkingOpenDoorNotified(false), _spitOutCountdown(0), _tapesToInsert(0), _keysToInsert(0), _busyStatus(0), _acceptInput(true), _attachedSprite(NULL), _isWalking(false), _actionStatus(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false), _doYHitIncr(false), _isLeverDown(false), _isSittingInTeleporter(false), _actionStatusChanged(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false), - _idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false), _walkResumeFrameIncr(0) { + _idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _walkResumeFrameIncr(0) { createSurface(1000, 320, 200); _x = x; @@ -88,7 +77,7 @@ uint32 Klaymen::xHandleMessage(int messageNum, const MessageParam ¶m) { case 0x4800: startWalkToX(param.asPoint().x, false); break; - case 0x4004: + case NM_KLAYMEN_STAND_IDLE: GotoState(&Klaymen::stTryStandIdle); break; case 0x4818: @@ -137,7 +126,7 @@ void Klaymen::stIdlePickEar() { uint32 Klaymen::hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x04DBC02C) { playSound(0, 0x44528AA1); } @@ -163,7 +152,7 @@ void Klaymen::stIdleSpinHead() { uint32 Klaymen::hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x808A0008) { playSound(0, 0xD948A340); } @@ -190,7 +179,7 @@ void Klaymen::evIdleArmsDone() { uint32 Klaymen::hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x5A0F0104) { playSound(0, 0x7970A100); } else if (param.asInteger() == 0x9A9A0109) { @@ -216,7 +205,7 @@ void Klaymen::stIdleChest() { uint32 Klaymen::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x0D2A0288) { playSound(0, 0xD192A368); } @@ -238,7 +227,7 @@ void Klaymen::stIdleHeadOff() { uint32 Klaymen::hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0xC006000C) { playSound(0, 0x9D406340); } else if (param.asInteger() == 0x2E4A2940) { @@ -311,7 +300,7 @@ void Klaymen::stSitIdleTeleporterBlink() { void Klaymen::stSitIdleTeleporterBlinkSecond() { _busyStatus = 0; _acceptInput = true; - startAnimation(0x5C24C018, 0, -1); + startAnimation(0x582EC138, 0, -1); SetUpdateHandler(&Klaymen::upSitIdleTeleporter); SetMessageHandler(&Klaymen::hmLowLevel); SetSpriteUpdate(NULL); @@ -344,9 +333,9 @@ void Klaymen::stPickUpTube() { uint32 Klaymen::hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0xC1380080) { - sendMessage(_attachedSprite, 0x4806, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_USE_OBJECT, 0); playSound(0, 0xC8004340); } else if (param.asInteger() == 0x02B20220) { playSound(0, 0xC5408620); @@ -405,7 +394,7 @@ void Klaymen::stSitInTeleporter() { uint32 Klaymen::hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x001A2832) { playSound(0, 0xC0E4884C); } @@ -529,7 +518,7 @@ uint32 Klaymen::hmLowLevel(int messageNum, const MessageParam ¶m, Entity *se case 0x1014: _attachedSprite = (Sprite*)(param.asEntity()); break; - case 0x1019: + case NM_SCENE_LEAVE: gotoNextStateExt(); break; case 0x101C: @@ -567,7 +556,7 @@ void Klaymen::stIdleBlink() { uint32 Klaymen::hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevel(messageNum, param, sender); switch (messageNum) { - case 0x3002: + case NM_ANIMATION_STOP: gotoNextStateExt(); break; } @@ -586,7 +575,7 @@ void Klaymen::stStandAround() { uint32 Klaymen::hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x271AA210) { playSound(0, 0x4924AAC4); } else if (param.asInteger() == 0x2B22AA81) { @@ -628,36 +617,6 @@ void Klaymen::startWalkToX(int16 x, bool walkExt) { } } -void Klaymen::stWakeUp() { - _busyStatus = 1; - _acceptInput = false; - startAnimation(0x527AC970, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klaymen::stSleeping() { - _busyStatus = 0; - _acceptInput = true; - startAnimation(0x5A38C110, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmSleeping); - SetSpriteUpdate(NULL); -} - -uint32 Klaymen::hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevel(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x03060012) { - playSound(0, 0xC0238244); - } - break; - } - return messageResult; -} - bool Klaymen::stStartAction(AnimationCb callback3) { if (_busyStatus == 1) { _busyStatus = 2; @@ -771,7 +730,7 @@ void Klaymen::evSneakingDone() { uint32 Klaymen::hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevel(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x32180101) { playSound(0, 0x4924AAC4); } else if (param.asInteger() == 0x0A2A9098) { @@ -782,7 +741,7 @@ uint32 Klaymen::hmSneaking(int messageNum, const MessageParam ¶m, Entity *se playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA); } break; - case 0x3002: + case NM_ANIMATION_STOP: _x = _destX; gotoNextStateExt(); break; @@ -812,7 +771,7 @@ void Klaymen::evStartWalkingDone() { uint32 Klaymen::hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x32180101) { playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); } else if (param.asInteger() == 0x0A2A9098) { @@ -843,7 +802,7 @@ void Klaymen::suWalkingFirst() { uint32 Klaymen::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevel(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x32180101) { playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); } else if (param.asInteger() == 0x0A2A9098) { @@ -902,7 +861,7 @@ void Klaymen::suWalkingTestExit() { (_actionStatus != 2 && _actionStatus != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) || (_actionStatus == 3 && xdiff < 30) || (_actionStatus == 3 && xdiff < 150 && _currFrameIndex >= 6)) { - sendMessage(this, 0x1019, 0); + sendMessage(this, NM_SCENE_LEAVE, 0); } else { HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y); _x += xdelta; @@ -934,11 +893,11 @@ void Klaymen::suWalkingTestExit() { uint32 Klaymen::hmLever(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x4AB28209) { - sendMessage(_attachedSprite, 0x482A, 0); + sendMessage(_attachedSprite, NM_MOVE_TO_BACK, 0); } else if (param.asInteger() == 0x88001184) { - sendMessage(_attachedSprite, 0x482B, 0); + sendMessage(_attachedSprite, NM_MOVE_TO_FRONT, 0); } break; } @@ -960,9 +919,9 @@ void Klaymen::stPickUpGeneric() { uint32 Klaymen::hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0xC1380080) { - sendMessage(_attachedSprite, 0x4806, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_USE_OBJECT, 0); playSound(0, 0x40208200); } else if (param.asInteger() == 0x02B20220) { playSound(0, 0xC5408620); @@ -995,7 +954,7 @@ void Klaymen::stPressButton() { uint32 Klaymen::hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x0D01B294) { sendMessage(_attachedSprite, 0x480B, 0); } else if (param.asInteger() == 0x32180101) { @@ -1089,7 +1048,7 @@ void Klaymen::stStartWalkingSmall() { uint32 Klaymen::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevel(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x32180101) playSound(0, 0x4924AAC4); else if (param.asInteger() == 0x0A2A9098) @@ -1146,11 +1105,11 @@ void Klaymen::stWalkToFrontNoStepSmall() { uint32 Klaymen::hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x80C110B5) - sendMessage(_parentScene, 0x482A, 0); + sendMessage(_parentScene, NM_MOVE_TO_BACK, 0); else if (param.asInteger() == 0x110010D1) - sendMessage(_parentScene, 0x482B, 0); + sendMessage(_parentScene, NM_MOVE_TO_FRONT, 0); else if (param.asInteger() == 0x32180101) playSound(0, 0x4924AAC4); else if (param.asInteger() == 0x0A2A9098) @@ -1228,12 +1187,12 @@ void Klaymen::stReleaseCord() { uint32 Klaymen::hmPullReleaseCord(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x4AB28209) { - sendMessage(_attachedSprite, 0x482A, 0); - sendMessage(_attachedSprite, 0x480F, 0); + sendMessage(_attachedSprite, NM_MOVE_TO_BACK, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_LOWER_LEVER, 0); } else if (param.asInteger() == 0x88001184) { - sendMessage(_attachedSprite, 0x482B, 0); + sendMessage(_attachedSprite, NM_MOVE_TO_FRONT, 0); } break; } @@ -1254,7 +1213,7 @@ void Klaymen::stUseTube() { uint32 Klaymen::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x02B20220) playSound(0, 0xC5408620); else if (param.asInteger() == 0x0A720138) @@ -1410,14 +1369,14 @@ void Klaymen::suLargeStep() { uint32 Klaymen::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevel(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x32180101) { playSound(0, 0x4924AAC4); } else if (param.asInteger() == 0x0A2A9098) { playSound(0, 0x0A2AA8E0); } break; - case 0x3002: + case NM_ANIMATION_STOP: _x = _destX; gotoNextStateExt(); break; @@ -1455,7 +1414,7 @@ void Klaymen::stTurnToUseHalf() { uint32 Klaymen::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x32180101) { playSound(0, 0x4924AAC4); } else if (param.asInteger() == 0x0A2A9098) { @@ -1501,7 +1460,7 @@ uint32 Klaymen::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *se if (_currFrameIndex < speedUpFrameIndex) startAnimation(0xAC20C012, speedUpFrameIndex, -1); return 0; - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x32180101) { playSound(0, 0x405002D8); } else if (param.asInteger() == 0x0A2A9098) { @@ -1512,116 +1471,15 @@ uint32 Klaymen::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *se return hmLowLevelAnimation(messageNum, param, sender); } -void Klaymen::stJumpToRing1() { - if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing1))) { - _busyStatus = 0; - startAnimation(0xD82890BA, 0, -1); - setupJumpToRing(); - } -} - -void Klaymen::setupJumpToRing() { - _acceptInput = false; - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmJumpToRing); - SetSpriteUpdate(&Klaymen::suUpdateDestX); - NextState(&Klaymen::stHangOnRing); - sendMessage(_attachedSprite, 0x482B, 0); -} - -uint32 Klaymen::hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x168050A0) { - sendMessage(_attachedSprite, 0x4806, 0); - _acceptInput = true; - } else if (param.asInteger() == 0x320AC306) { - playSound(0, 0x5860C640); - } else if (param.asInteger() == 0x4AB28209) { - sendMessage(_attachedSprite, 0x482A, 0); - } else if (param.asInteger() == 0x88001184) { - sendMessage(_attachedSprite, 0x482B, 0); - } - break; - } - return messageResult; -} - void Klaymen::suUpdateDestX() { AnimatedSprite::updateDeltaXY(); _destX = _x; } -void Klaymen::stHangOnRing() { - _busyStatus = 0; - _acceptInput = true; - startAnimation(0x4829E0B8, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmLowLevel); - SetSpriteUpdate(NULL); -} - -void Klaymen::stJumpToRing2() { - if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing2))) { - _busyStatus = 0; - startAnimation(0x900980B2, 0, -1); - setupJumpToRing(); - } -} - -void Klaymen::stJumpToRing3() { - if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing3))) { - _busyStatus = 0; - _acceptInput = false; - startAnimation(0xBA1910B2, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetSpriteUpdate(&Klaymen::suUpdateDestX); - SetMessageHandler(&Klaymen::hmJumpToRing3); - NextState(&Klaymen::stHoldRing3); - sendMessage(_attachedSprite, 0x482B, 0); - } -} - -uint32 Klaymen::hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x168050A0) { - sendMessage(_attachedSprite, 0x4806, 0); - } else if (param.asInteger() == 0x320AC306) { - playSound(0, 0x5860C640); - } else if (param.asInteger() == 0x4AB28209) { - sendMessage(_attachedSprite, 0x482A, 0); - } else if (param.asInteger() == 0x88001184) { - sendMessage(_attachedSprite, 0x482B, 0); - } - break; - } - return messageResult; -} - -void Klaymen::stHoldRing3() { - _busyStatus = 0; - _acceptInput = true; - startAnimation(0x4A293FB0, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmHoldRing3); - SetSpriteUpdate(NULL); -} - -uint32 Klaymen::hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *sender) { - if (messageNum == 0x1008) { - stReleaseRing(); - return 0; - } - return hmLowLevel(messageNum, param, sender); -} - void Klaymen::stReleaseRing() { _busyStatus = 1; _acceptInput = false; - sendMessage(_attachedSprite, 0x4807, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_RAISE_LEVER, 0); _attachedSprite = NULL; startAnimation(0xB869A4B9, 0, -1); SetUpdateHandler(&Klaymen::update); @@ -1629,14 +1487,6 @@ void Klaymen::stReleaseRing() { SetSpriteUpdate(NULL); } -void Klaymen::stJumpToRing4() { - if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing4))) { - _busyStatus = 0; - startAnimation(0xB8699832, 0, -1); - setupJumpToRing(); - } -} - void Klaymen::startWalkToAttachedSpriteXDistance(int16 distance) { startWalkToXDistance(_attachedSprite->getX(), distance); } @@ -1709,7 +1559,7 @@ void Klaymen::stClimbLadderHalf() { uint32 Klaymen::hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x489B025C) { playSound(0, 0x52C4C2D7); } else if (param.asInteger() == 0x400A0E64) { @@ -1727,7 +1577,7 @@ uint32 Klaymen::hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Ent uint32 Klaymen::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevel(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x01084280) { _acceptInput = true; } else if (param.asInteger() == 0x489B025C) { @@ -1738,11 +1588,11 @@ uint32 Klaymen::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, E if (_ladderStatus == 1) { startAnimationByHash(0x3A292504, 0x01084280, 0); if (_destY >= _y - 30) - sendMessage(this, 0x1019, 0); + sendMessage(this, NM_SCENE_LEAVE, 0); } else { startAnimationByHash(0x122D1505, 0x01084280, 0); if (_destY <= _y) - sendMessage(this, 0x1019, 0); + sendMessage(this, NM_SCENE_LEAVE, 0); } } break; @@ -1789,11 +1639,11 @@ void Klaymen::stWalkToFrontNoStep() { uint32 Klaymen::hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x80C110B5) { - sendMessage(_parentScene, 0x482A, 0); + sendMessage(_parentScene, NM_MOVE_TO_BACK, 0); } else if (param.asInteger() == 0x110010D1) { - sendMessage(_parentScene, 0x482B, 0); + sendMessage(_parentScene, NM_MOVE_TO_FRONT, 0); } else if (param.asInteger() == 0x32180101) { playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); } else if (param.asInteger() == 0x0A2A9098) { @@ -1849,7 +1699,7 @@ void Klaymen::stLandOnFeet() { uint32 Klaymen::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x320AC306) { playSound(0, 0x5860C640); } @@ -1872,7 +1722,7 @@ void Klaymen::stTurnToBackToUse() { uint32 Klaymen::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0xC61A0119) { playSound(0, 0x402338C2); } else if (param.asInteger() == 0x32180101) { @@ -1885,29 +1735,6 @@ uint32 Klaymen::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Ent return messageResult; } -void Klaymen::stClayDoorOpen() { - if (!stStartAction(AnimationCallback(&Klaymen::stClayDoorOpen))) { - _busyStatus = 2; - _acceptInput = false; - startAnimation(0x5CCCB330, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmClayDoorOpen); - SetSpriteUpdate(&Klaymen::suUpdateDestX); - } -} - -uint32 Klaymen::hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x040D4186) { - sendMessage(_attachedSprite, 0x4808, 0); - } - break; - } - return messageResult; -} - void Klaymen::stTurnToUse() { if (!stStartAction(AnimationCallback(&Klaymen::stTurnToUse))) { _busyStatus = 2; @@ -1956,12 +1783,12 @@ void Klaymen::stMoveObjectSkipTurnFaceObject() { } void Klaymen::evMoveObjectTurnDone() { - sendMessage(_attachedSprite, 0x4807, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_RAISE_LEVER, 0); } uint32 Klaymen::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender) { switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x01084280) { sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0); } else if (param.asInteger() == 0x02421405) { @@ -1977,7 +1804,7 @@ uint32 Klaymen::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Enti playSound(0, 0x0460E2FA); } break; - case 0x480A: + case NM_KLAYMEN_MOVE_OBJECT: _isMoveObjectRequested = true; return 0; } @@ -2012,7 +1839,7 @@ void Klaymen::stUseLever() { if (_isLeverDown) { stUseLeverRelease(); } else { - sendMessage(_attachedSprite, 0x482B, 0); + sendMessage(_attachedSprite, NM_MOVE_TO_FRONT, 0); startAnimation(0x0C303040, 0, -1); SetSpriteUpdate(&Klaymen::suUpdateDestX); SetMessageHandler(&Klaymen::hmLever); @@ -2026,7 +1853,7 @@ void Klaymen::stUseLever() { // Exactly the same code as sub420DA0 which was removed void Klaymen::stPullLeverDown() { startAnimation(0x0D318140, 0, -1); - sendMessage(_attachedSprite, 0x480F, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_LOWER_LEVER, 0); NextState(&Klaymen::stHoldLeverDown); } @@ -2044,7 +1871,7 @@ void Klaymen::stUseLeverRelease() { SetUpdateHandler(&Klaymen::update); SetMessageHandler(&Klaymen::hmLever); SetSpriteUpdate(&Klaymen::suUpdateDestX); - sendMessage(_attachedSprite, 0x4807, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_RAISE_LEVER, 0); NextState(&Klaymen::stPullLeverDown); _acceptInput = false; } @@ -2056,7 +1883,7 @@ void Klaymen::stReleaseLever() { SetUpdateHandler(&Klaymen::update); SetMessageHandler(&Klaymen::hmLever); SetSpriteUpdate(&Klaymen::suUpdateDestX); - sendMessage(_attachedSprite, 0x4807, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_RAISE_LEVER, 0); NextState(&Klaymen::stLetGoOfLever); _acceptInput = false; _isLeverDown = false; @@ -2071,7 +1898,7 @@ void Klaymen::stLetGoOfLever() { } void Klaymen::evLeverReleasedEvent() { - sendMessage(_attachedSprite, 0x482A, 0); + sendMessage(_attachedSprite, NM_MOVE_TO_BACK, 0); } void Klaymen::stInsertDisk() { @@ -2102,7 +1929,7 @@ void Klaymen::stInsertDisk() { uint32 Klaymen::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Klaymen::hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (_tapesToInsert == 0 && param.asInteger() == 0x06040580) { nextAnimationByHash(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0); } else if (_tapesToInsert != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) { @@ -2206,15 +2033,15 @@ void Klaymen::suJumpToGrab() { uint32 Klaymen::hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevel(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x168050A0) - sendMessage(_attachedSprite, 0x4806, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_USE_OBJECT, 0); else if (param.asInteger() == 0x320AC306) startAnimationByHash(0x00AB8C10, 0x01084280, 0); else if (param.asInteger() == 0x4AB28209) - sendMessage(_attachedSprite, 0x482A, 0); + sendMessage(_attachedSprite, NM_MOVE_TO_BACK, 0); else if (param.asInteger() == 0x88001184) - sendMessage(_attachedSprite, 0x482B, 0); + sendMessage(_attachedSprite, NM_MOVE_TO_FRONT, 0); break; } return messageResult; @@ -2232,7 +2059,7 @@ void Klaymen::stFinishGrow() { uint32 Klaymen::hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x040C4C01) playSound(0, 0x01E11140); break; @@ -2259,7 +2086,7 @@ void Klaymen::stJumpToGrabFall() { SetUpdateHandler(&Klaymen::update); SetMessageHandler(&Klaymen::hmJumpToGrab); SetSpriteUpdate(&Klaymen::suJumpToGrab); - sendMessage(_attachedSprite, 0x482B, 0); + sendMessage(_attachedSprite, NM_MOVE_TO_FRONT, 0); } } @@ -2276,7 +2103,7 @@ void Klaymen::stJumpToGrabRelease() { uint32 Klaymen::hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x320AC306) playSound(0, 0x5860C640); break; @@ -2325,7 +2152,7 @@ void Klaymen::teleporterDisappear(uint32 fileHash) { uint32 Klaymen::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x4E0A2C24) { playSound(0, 0x85B10BB8); } else if (param.asInteger() == 0x4E6A0CA0) { @@ -2336,29 +2163,6 @@ uint32 Klaymen::hmTeleporterAppearDisappear(int messageNum, const MessageParam & return messageResult; } -uint32 Klaymen::hmShrink(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x80C110B5) - sendMessage(_parentScene, 0x482A, 0); - else if (param.asInteger() == 0x33288344) - playSound(2, 0x10688664); - break; - } - return messageResult; -} - -void Klaymen::stShrink() { - _busyStatus = 0; - _acceptInput = false; - playSound(0, 0x4C69EA53); - startAnimation(0x1AE88904, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmShrink); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); -} - void Klaymen::stStandWonderAbout() { if (_x > 260) setDoDeltaX(1); @@ -2381,7 +2185,7 @@ uint32 Klaymen::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity } else _potionFlag2 = true; break; - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x0002418E) sendMessage(_parentScene, 0x2000, 0); else if (param.asInteger() == 0x924090C2) { @@ -2426,7 +2230,7 @@ uint32 Klaymen::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity uint32 Klaymen::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x32180101) playSound(0, 0x405002D8); else if (param.asInteger() == 0x0A2A9098) @@ -2479,7 +2283,7 @@ void Klaymen::stDrinkPotion() { uint32 Klaymen::hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Klaymen::hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (_keysToInsert == 0 && param.asInteger() == 0x06040580) { nextAnimationByHash(0xDC409440, 0x46431401, 0); } else if (_keysToInsert != 0 && param.asInteger() == 0x46431401) { @@ -2537,65 +2341,10 @@ void Klaymen::stInsertKey() { } } -uint32 Klaymen::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x04684052) { - _acceptInput = true; - sendMessage(_parentScene, 0x2002, 0); - } - break; - } - return messageResult; -} - -void Klaymen::stReadNote() { - _busyStatus = 2; - _acceptInput = false; - startAnimation(0x123E9C9F, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmReadNote); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); -} - -uint32 Klaymen::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - int16 speedUpFrameIndex; - switch (messageNum) { - case 0x1008: - speedUpFrameIndex = getFrameIndex(kKlaymenSpeedUpHash); - 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 Klaymen::stHitByDoor() { - _busyStatus = 1; - _acceptInput = false; - startAnimation(0x35AA8059, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmHitByDoor); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - playSound(0, 0x402E82D4); -} - uint32 Klaymen::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == calcHash("PopBalloon")) { sendMessage(_parentScene, 0x2000, 0); } else if (param.asInteger() == 0x02B20220) { @@ -2657,65 +2406,6 @@ void Klaymen::stPeekWallReturn() { SetSpriteUpdate(NULL); } -void Klaymen::stPullHammerLever() { - if (!stStartAction(AnimationCallback(&Klaymen::stPullHammerLever))) { - _busyStatus = 2; - _acceptInput = false; - startAnimation(0x00648953, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmPullHammerLever); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - } -} - -uint32 Klaymen::hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Klaymen::hmLever(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x4AB28209) - sendMessage(_attachedSprite, 0x480F, 0); - break; - } - return messageResult; -} - -void Klaymen::suRidePlatformDown() { - _platformDeltaY++; - _y += _platformDeltaY; - if (_y > 600) - sendMessage(this, 0x1019, 0); -} - -void Klaymen::stRidePlatformDown() { - if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stRidePlatformDown))) { - _busyStatus = 1; - sendMessage(_parentScene, 0x4803, 0); - _acceptInput = false; - _platformDeltaY = 0; - startAnimation(0x5420E254, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmLowLevel); - SetSpriteUpdate(&Klaymen::suRidePlatformDown); - _vm->_soundMan->playSoundLooping(0xD3B02847); - } -} - -void Klaymen::stCrashDown() { - playSound(0, 0x41648271); - _busyStatus = 1; - _acceptInput = false; - startAnimationByHash(0x000BAB02, 0x88003000, 0); - SetUpdateHandler(&Klaymen::update); - SetSpriteUpdate(NULL); - SetMessageHandler(&Klaymen::hmLowLevelAnimation); - NextState(&Klaymen::stCrashDownFinished); -} - -void Klaymen::stCrashDownFinished() { - setDoDeltaX(2); - stTryStandIdle(); -} - void Klaymen::upSpitOutFall() { Klaymen::update(); if (_spitOutCountdown != 0 && (--_spitOutCountdown == 0)) { @@ -2724,24 +2414,6 @@ void Klaymen::upSpitOutFall() { } } -uint32 Klaymen::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x168050A0) { - sendMessage(_attachedSprite, 0x480F, 0); - } else if (param.asInteger() == 0x586B0300) { - sendMessage(_otherSprite, 0x480E, 1); - } else if (param.asInteger() == 0x4AB28209) { - sendMessage(_attachedSprite, 0x482A, 0); - } else if (param.asInteger() == 0x88001184) { - sendMessage(_attachedSprite, 0x482B, 0); - } - break; - } - return messageResult; -} - uint32 Klaymen::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender) { switch (messageNum) { case 0x4811: @@ -2766,130 +2438,17 @@ uint32 Klaymen::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, En return 0; } -uint32 Klaymen::hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x942D2081) { - _acceptInput = false; - sendMessage(_attachedSprite, 0x2003, 0); - } else if (param.asInteger() == 0xDA600012) { - stHitByBoxingGlove(); - } else if (param.asInteger() == 0x0D01B294) { - _acceptInput = false; - sendMessage(_attachedSprite, 0x480B, 0); - } - break; - } - return messageResult; -} - -uint32 Klaymen::hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) { - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x01084280) { - sendMessage(_attachedSprite, 0x480B, (uint32)_doDeltaX); - } else if (param.asInteger() == 0x02421405) { - if (_isMoveObjectRequested) { - if (sendMessage(_attachedSprite, 0x480C, (uint32)_doDeltaX) != 0) - stContinueMovingVenusFlyTrap(); - } else { - SetMessageHandler(&Klaymen::hmFirstMoveVenusFlyTrap); - } - } else if (param.asInteger() == 0x4AB28209) { - sendMessage(_attachedSprite, 0x482A, 0); - } else if (param.asInteger() == 0x88001184) { - sendMessage(_attachedSprite, 0x482B, 0); - } else if (param.asInteger() == 0x32180101) { - playSound(0, 0x405002D8); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, 0x0460E2FA); - } - break; - case 0x480A: - _isMoveObjectRequested = true; - return 0; - } - return hmLowLevelAnimation(messageNum, param, sender); -} - -uint32 Klaymen::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x4AB28209) { - sendMessage(_attachedSprite, 0x482A, 0); - } else if (param.asInteger() == 0x88001184) { - sendMessage(_attachedSprite, 0x482B, 0); - } else if (param.asInteger() == 0x32180101) { - playSound(0, 0x405002D8); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, 0x0460E2FA); - } - break; - } - return messageResult; -} - -uint32 Klaymen::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender) { - int16 speedUpFrameIndex; - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x1008: - speedUpFrameIndex = getFrameIndex(kKlaymenSpeedUpHash); - if (_currFrameIndex < speedUpFrameIndex) { - startAnimation(0x35AA8059, speedUpFrameIndex, -1); - _y = 435; - } - messageResult = 0; - break; - case 0x100D: - if (param.asInteger() == 0x1A1A0785) { - playSound(0, 0x40F0A342); - } else if (param.asInteger() == 0x60428026) { - playSound(0, 0x40608A59); - } - break; - } - return messageResult; -} - -uint32 Klaymen::hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevel(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x1307050A) { - playSound(0, 0x40428A09); - } - break; - } - return messageResult; -} - void Klaymen::suFallDown() { AnimatedSprite::updateDeltaXY(); HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10); if (hitRect->type == 0x5001) { _y = hitRect->rect.y1; updateBounds(); - sendMessage(this, 0x1019, 0); + sendMessage(this, NM_SCENE_LEAVE, 0); } _parentScene->checkCollision(this, 0xFFFF, 0x4810, 0); } -void Klaymen::stJumpToRingVenusFlyTrap() { - if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRingVenusFlyTrap))) { - _busyStatus = 2; - _acceptInput = false; - startAnimation(0x584984B4, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmJumpToRingVenusFlyTrap); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - NextState(&Klaymen::stLandOnFeet); - sendMessage(_attachedSprite, 0x482B, 0); - } -} - void Klaymen::stStandIdleSpecial() { playSound(0, 0x56548280); _busyStatus = 0; @@ -2936,7 +2495,7 @@ void Klaymen::stFalling() { SetSpriteUpdate(NULL); SetMessageHandler(&Klaymen::hmLowLevelAnimation); NextState(&Klaymen::stFallTouchdown); - sendMessage(_parentScene, 0x2002, 0); + sendMessage(_parentScene, NM_POSITION_CHANGE, 0); _attachedSprite = NULL; sendMessage(_parentScene, 0x8001, 0); } @@ -2946,93 +2505,13 @@ void Klaymen::stFallTouchdown() { stTryStandIdle(); } -void Klaymen::stJumpAndFall() { - if (!stStartAction(AnimationCallback(&Klaymen::stJumpAndFall))) { - sendMessage(_parentScene, 0x1024, 3); - _busyStatus = 2; - _acceptInput = false; - startAnimation(0xB93AB151, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmJumpAndFall); - SetSpriteUpdate(&Klaymen::suFallDown); - NextState(&Klaymen::stLandOnFeet); - } -} - -void Klaymen::stDropFromRing() { - if (_attachedSprite) { - _x = _attachedSprite->getX(); - sendMessage(_attachedSprite, 0x4807, 0); - _attachedSprite = NULL; - } - _busyStatus = 2; - _acceptInput = false; - startAnimation(0x586984B1, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmLowLevel); - SetSpriteUpdate(&Klaymen::suFallDown); - NextState(&Klaymen::stLandOnFeet); -} - -void Klaymen::stPressDoorButton() { - _busyStatus = 2; - _acceptInput = true; - setDoDeltaX(0); - startAnimation(0x1CD89029, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmPressDoorButton); - SetSpriteUpdate(&Klaymen::suAction); -} - -void Klaymen::stHitByBoxingGlove() { - _busyStatus = 1; - _acceptInput = false; - startAnimation(0x35AA8059, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmHitByBoxingGlove); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - FinalizeState(&Klaymen::evHitByBoxingGloveDone); -} - -void Klaymen::evHitByBoxingGloveDone() { - sendMessage(_parentScene, 0x1024, 1); -} - -void Klaymen::stMoveVenusFlyTrap() { - if (!stStartAction(AnimationCallback(&Klaymen::stMoveVenusFlyTrap))) { - _busyStatus = 2; - _isMoveObjectRequested = false; - _acceptInput = true; - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - startAnimation(0x5C01A870, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmMoveVenusFlyTrap); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - FinalizeState(&Klaymen::evMoveVenusFlyTrapDone); - } -} - -void Klaymen::stContinueMovingVenusFlyTrap() { - _isMoveObjectRequested = false; - _acceptInput = true; - startAnimationByHash(0x5C01A870, 0x01084280, 0); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmMoveVenusFlyTrap); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - FinalizeState(&Klaymen::evMoveVenusFlyTrapDone); -} - -void Klaymen::evMoveVenusFlyTrapDone() { - sendMessage(_attachedSprite, 0x482A, 0); -} - void Klaymen::suFallSkipJump() { updateDeltaXY(); HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10); if (hitRect->type == 0x5001) { _y = hitRect->rect.y1; updateBounds(); - sendMessage(this, 0x1019, 0); + sendMessage(this, NM_SCENE_LEAVE, 0); } } @@ -3052,52 +2531,9 @@ void Klaymen::upMoveObject() { Klaymen::update(); } -uint32 Klaymen::hmMatch(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Klaymen::hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x51281850) { - setGlobalVar(V_TNT_DUMMY_FUSE_LIT, 1); - } else if (param.asInteger() == 0x43000538) { - playSound(0, 0x21043059); - } 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 Klaymen::stFetchMatch() { - if (!stStartAction(AnimationCallback(&Klaymen::stFetchMatch))) { - _busyStatus = 0; - _acceptInput = false; - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - startAnimation(0x9CAA0218, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmMatch); - SetSpriteUpdate(NULL); - NextState(&Klaymen::stLightMatch); - } -} - -void Klaymen::stLightMatch() { - _busyStatus = 1; - _acceptInput = false; - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - startAnimation(0x1222A513, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmMatch); - SetSpriteUpdate(NULL); -} - uint32 Klaymen::hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender) { switch (messageNum) { - case 0x100D: + case NM_ANIMATION_START: if (param.asInteger() == 0x01084280) { playSound(0, 0x405002D8); sendMessage(_attachedSprite, 0x480B, 0); @@ -3114,18 +2550,6 @@ uint32 Klaymen::hmMoveObject(int messageNum, const MessageParam ¶m, Entity * return Klaymen::hmLowLevelAnimation(messageNum, param, sender); } -uint32 Klaymen::hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Klaymen::hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x000F0082) { - playSound(0, 0x74E2810F); - } - break; - } - return messageResult; -} - void Klaymen::stMoveObject() { if (!stStartAction(AnimationCallback(&Klaymen::stMoveObject))) { _busyStatus = 2; @@ -3147,93 +2571,6 @@ void Klaymen::stContinueMoveObject() { SetMessageHandler(&Klaymen::hmMoveObject); } -void Klaymen::stTumbleHeadless() { - if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stTumbleHeadless))) { - _busyStatus = 1; - _acceptInput = false; - setDoDeltaX(0); - startAnimation(0x2821C590, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmTumbleHeadless); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - NextState(&Klaymen::stTryStandIdle); - sendMessage(_parentScene, 0x8000, 0); - playSound(0, 0x62E0A356); - } -} - -void Klaymen::stCloseEyes() { - if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stCloseEyes))) { - _busyStatus = 1; - _acceptInput = false; - startAnimation(0x5420E254, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmLowLevel); - SetSpriteUpdate(NULL); - } -} - -uint32 Klaymen::hmSpit(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Klaymen::hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x16401CA6) { - _canSpitPipe = true; - if (_contSpitPipe) - spitIntoPipe(); - } else if (param.asInteger() == 0xC11C0008) { - _canSpitPipe = false; - _acceptInput = false; - _readyToSpit = false; - } else if (param.asInteger() == 0x018A0001) { - sendMessage(_parentScene, 0x2001, _spitDestPipeIndex); - } - break; - } - return messageResult; -} - -void Klaymen::stTrySpitIntoPipe() { - if (_readyToSpit) { - _contSpitPipe = true; - _spitContDestPipeIndex = _spitPipeIndex; - if (_canSpitPipe) - spitIntoPipe(); - } else if (!stStartAction(AnimationCallback(&Klaymen::stTrySpitIntoPipe))) { - _busyStatus = 2; - _acceptInput = true; - _spitDestPipeIndex = _spitPipeIndex; - _readyToSpit = true; - _canSpitPipe = false; - _contSpitPipe = false; - startAnimation(0x1808B150, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmSpit); - SetSpriteUpdate(NULL); - } -} - -void Klaymen::spitIntoPipe() { - _contSpitPipe = false; - _spitDestPipeIndex = _spitContDestPipeIndex; - _canSpitPipe = false; - _acceptInput = false; - startAnimation(0x1B08B553, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmSpit); - SetSpriteUpdate(NULL); - NextState(&Klaymen::stContSpitIntoPipe); -} - -void Klaymen::stContSpitIntoPipe() { - _canSpitPipe = true; - _acceptInput = true; - startAnimationByHash(0x1808B150, 0x16401CA6, 0); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmSpit); - SetSpriteUpdate(NULL); -} - void Klaymen::suRidePlatform() { _x = _attachedSprite->getX() - 20; _y = _attachedSprite->getY() + 46; @@ -3270,7 +2607,7 @@ void Klaymen::stInteractLever() { void Klaymen::stPullLever() { startAnimation(0x0D318140, 0, -1); NextState(&Klaymen::stLookLeverDown); - sendMessage(_attachedSprite, 0x480F, 0); + sendMessage(_attachedSprite, NM_KLAYMEN_LOWER_LEVER, 0); } void Klaymen::stLookLeverDown() { @@ -3344,2798 +2681,4 @@ void Klaymen::stPeekInsideBlink() { _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24; } -// KmScene1001 - -KmScene1001::KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { -} - -uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() == 2) - GotoState(&Klaymen::stSleeping); - break; - case 0x480D: - GotoState(&Klaymen::stPullHammerLever); - break; - case 0x4812: - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481F: - if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x4836: - if (param.asInteger() == 1) { - sendMessage(_parentScene, 0x2002, 0); - GotoState(&Klaymen::stWakeUp); - } - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -// KmScene1002 - -KmScene1002::KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - setKlaymenIdleTable1(); -} - -void KmScene1002::xUpdate() { - if (_x >= 250 && _x <= 435 && _y >= 420) { - if (_idleTableNum == 0) { - setKlaymenIdleTable(klaymenIdleTable1002, ARRAYSIZE(klaymenIdleTable1002)); - _idleTableNum = 1; - } - } else if (_idleTableNum == 1) { - setKlaymenIdleTable1(); - _idleTableNum = 0; - } -} - -uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x2001: - GotoState(&Klaymen::stStandIdleSpecial); - break; - case 0x2007: - _otherSprite = (Sprite*)param.asEntity(); - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4803: - if (param.asInteger() == 1) - GotoState(&Klaymen::stJumpAndFall); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stDropFromRing); - break; - case 0x4804: - GotoState(&Klaymen::stPeekWall); - break; - case 0x4805: - switch (param.asInteger()) { - case 1: - GotoState(&Klaymen::stJumpToRing1); - break; - case 2: - GotoState(&Klaymen::stJumpToRing2); - break; - case 3: - GotoState(&Klaymen::stJumpToRing3); - break; - case 4: - GotoState(&Klaymen::stJumpToRing4); - break; - } - break; - case 0x480A: - GotoState(&Klaymen::stMoveVenusFlyTrap); - break; - case 0x480D: - GotoState(&Klaymen::stJumpToRingVenusFlyTrap); - break; - case 0x4816: - if (param.asInteger() == 0) - GotoState(&Klaymen::stPressDoorButton); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - startWalkToAttachedSpriteXDistance(param.asInteger()); - break; - case 0x4820: - sendMessage(_parentScene, 0x2005, 0); - GotoState(&Klaymen::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2005, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2005, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2006, 0); - GotoState(&Klaymen::stClimbLadderHalf); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStep); - else - GotoState(&Klaymen::stWalkToFront); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToFront); - else - GotoState(&Klaymen::stTurnToBack); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -// KmScene1004 - -KmScene1004::KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - _dataResource.load(0x01900A04); -} - -uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x481E: - GotoState(&Klaymen::stReadNote); - break; - case 0x4820: - sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klaymen::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klaymen::stClimbLadderHalf); - break; - case 0x4824: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4825: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x4828: - GotoState(&Klaymen::stTurnToBackToUse); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene1109::KmScene1109(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x2000: - _isSittingInTeleporter = param.asInteger() != 0; - messageResult = 1; - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stSitIdleTeleporter); - else - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klaymen::stWalkingFirst); - } else - GotoState(&Klaymen::stPeekWall); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stReturnFromUseInTeleporter); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klaymen::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klaymen::stGetUpFromTeleporter); - break; - case 0x483D: - teleporterAppear(0x2C2A4A1C); - break; - case 0x483E: - teleporterDisappear(0x3C2E4245); - break; - } - return messageResult; -} - -// KmScene1201 - -KmScene1201::KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - setKlaymenIdleTable(klaymenIdleTable4, ARRAYSIZE(klaymenIdleTable4)); - _doYHitIncr = true; -} - -uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x480A: - GotoState(&Klaymen::stMoveObject); - break; - case 0x4812: - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4813: - GotoState(&Klaymen::stFetchMatch); - break; - case 0x4814: - GotoState(&Klaymen::stTumbleHeadless); - break; - case 0x4815: - GotoState(&Klaymen::stCloseEyes); - break; - case 0x4816: - if (param.asInteger() == 0) - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x481F: - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene1303::KmScene1303(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4804: - GotoState(&Klaymen::stPeekWall1); - break; - case 0x483B: - GotoState(&Klaymen::stPeekWallReturn); - break; - case 0x483C: - GotoState(&Klaymen::stPeekWall2); - break; - } - return 0; -} - -KmScene1304::KmScene1304(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnAwayFromUse); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stTurnToUseHalf); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene1305::KmScene1305(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - GotoState(&Klaymen::stCrashDown); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - } - return 0; -} - -KmScene1306::KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1306::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x2000: - _isSittingInTeleporter = param.asInteger() != 0; - messageResult = 1; - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stSitIdleTeleporter); - else - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481A: - GotoState(&Klaymen::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stTurnToUseInTeleporter); - else - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stReturnFromUseInTeleporter); - else - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStep); - else - GotoState(&Klaymen::stWalkToFront); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToFront); - else - GotoState(&Klaymen::stTurnToBack); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klaymen::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klaymen::stGetUpFromTeleporter); - break; - case 0x483D: - teleporterAppear(0xEE084A04); - break; - case 0x483E: - teleporterDisappear(0xB86A4274); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return messageResult; -} - -KmScene1308::KmScene1308(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) - GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject); - else - GotoState(&Klaymen::stMoveObjectFaceObject); - break; - case 0x480D: - GotoState(&Klaymen::stUseLever); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481A: - if (param.asInteger() == 1) - GotoState(&Klaymen::stInsertKey); - else - GotoState(&Klaymen::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x4827: - GotoState(&Klaymen::stReleaseLever); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -// KmScene1401 - -KmScene1401::KmScene1401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) - GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject); - else - GotoState(&Klaymen::stMoveObjectFaceObject); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnAwayFromUse); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stTurnToUseHalf); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStep); - else - GotoState(&Klaymen::stWalkToFront); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToFront); - else - GotoState(&Klaymen::stTurnToBack); - break; - } - return 0; -} - -// KmScene1402 - -KmScene1402::KmScene1402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - SetFilterY(&Sprite::defFilterY); -} - -uint32 KmScene1402::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) - GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject); - else - GotoState(&Klaymen::stMoveObjectFaceObject); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - } - return 0; -} - -// KmScene1403 - -KmScene1403::KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - setKlaymenIdleTable(klaymenIdleTable4, ARRAYSIZE(klaymenIdleTable4)); -} - -uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) - GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject); - else - GotoState(&Klaymen::stMoveObjectFaceObject); - break; - case 0x480D: - GotoState(&Klaymen::stUseLever); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x4827: - GotoState(&Klaymen::stReleaseLever); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -// KmScene1404 - -KmScene1404::KmScene1404(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) - GotoState(&Klaymen::stMoveObjectSkipTurnFaceObject); - else - GotoState(&Klaymen::stMoveObjectFaceObject); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481A: - GotoState(&Klaymen::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene1608::KmScene1608(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1608::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x2032: - _isSittingInTeleporter = param.asInteger() != 0; - messageResult = 1; - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stSitIdleTeleporter); - else - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stReturnFromUseInTeleporter); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2032, 1); - _isSittingInTeleporter = true; - GotoState(&Klaymen::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2032, 0); - _isSittingInTeleporter = false; - GotoState(&Klaymen::stGetUpFromTeleporter); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return messageResult; -} - -// KmScene1705 - -KmScene1705::KmScene1705(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x2000: - _isSittingInTeleporter = param.asInteger() != 0; - messageResult = 1; - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stSitIdleTeleporter); - else - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4803: - GotoState(&Klaymen::stFallSkipJump); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - if (_isSittingInTeleporter) { - GotoState(&Klaymen::stTurnToUseInTeleporter); - } - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stReturnFromUseInTeleporter); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klaymen::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klaymen::stGetUpFromTeleporter); - break; - case 0x483D: - teleporterAppear(0x5E0A4905); - break; - case 0x483E: - teleporterDisappear(0xD86E4477); - break; - } - return messageResult; -} - -KmScene1901::KmScene1901(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene2001::KmScene2001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2001::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x2000: - _isSittingInTeleporter = param.asInteger() != 0; - messageResult = 1; - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stSitIdleTeleporter); - else - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klaymen::stWalkingFirst); - } else - GotoState(&Klaymen::stPeekWall); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stReturnFromUseInTeleporter); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klaymen::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klaymen::stGetUpFromTeleporter); - break; - case 0x483D: - teleporterAppear(0xBE68CC54); - break; - case 0x483E: - teleporterDisappear(0x18AB4ED4); - break; - } - return messageResult; -} - -KmScene2101::KmScene2101(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x2000: - _isSittingInTeleporter = param.asInteger() != 0; - messageResult = 1; - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stSitIdleTeleporter); - else - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4811: - GotoState(&Klaymen::stHitByDoor); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stReturnFromUseInTeleporter); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klaymen::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klaymen::stGetUpFromTeleporter); - break; - case 0x483D: - teleporterAppear(0xFF290E30); - break; - case 0x483E: - teleporterDisappear(0x9A28CA1C); - break; - } - return messageResult; -} - -KmScene2201::KmScene2201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount) - : Klaymen(vm, parentScene, x, y) { - - _surface->setClipRects(clipRects, clipRectsCount); - _dataResource.load(0x04104242); -} - -uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4812: - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4816: - if (param.asInteger() == 0) - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStep); - else - GotoState(&Klaymen::stWalkToFront); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToFront); - else - GotoState(&Klaymen::stTurnToBack); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene2203::KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x4819: - GotoState(&Klaymen::stClayDoorOpen); - break; - case 0x481A: - GotoState(&Klaymen::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene2205::KmScene2205(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -void KmScene2205::xUpdate() { - setGlobalVar(V_KLAYMEN_FRAMEINDEX, _currFrameIndex); -} - -uint32 KmScene2205::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klaymen::stStartWalkingResume); - } else - GotoState(&Klaymen::stPeekWall); - break; - case 0x4816: - if (param.asInteger() == 0) - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene2206::KmScene2206(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - _walkResumeFrameIncr = 1; - _vm->_soundMan->addSound(0x80101800, 0xD3B02847); -} - -KmScene2206::~KmScene2206() { - _vm->_soundMan->deleteSoundGroup(0x80101800); -} - -void KmScene2206::xUpdate() { - setGlobalVar(V_KLAYMEN_FRAMEINDEX, _currFrameIndex); -} - -uint32 KmScene2206::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4803: - GotoState(&Klaymen::stRidePlatformDown); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klaymen::stStartWalkingResume); - } else - GotoState(&Klaymen::stPeekWall); - break; - case 0x4812: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481F: - if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStep); - else - GotoState(&Klaymen::stWalkToFront); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToFront); - else - GotoState(&Klaymen::stTurnToBack); - break; - case 0x4837: - stopWalking(); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene2207::KmScene2207(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x2001: - GotoState(&Klaymen::stRidePlatform); - break; - case 0x2005: - suRidePlatform(); - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x480D: - GotoState(&Klaymen::stInteractLever); - break; - case 0x4812: - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x4827: - GotoState(&Klaymen::stReleaseLever); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - -KmScene2242::KmScene2242(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -void KmScene2242::xUpdate() { - setGlobalVar(V_KLAYMEN_FRAMEINDEX, _currFrameIndex); -} - -uint32 KmScene2242::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klaymen::stStartWalkingResume); - } else - GotoState(&Klaymen::stPeekWall); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481F: - if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - // Empty -} - -void KmHallOfRecords::xUpdate() { - setGlobalVar(V_KLAYMEN_FRAMEINDEX, _currFrameIndex); -} - -uint32 KmHallOfRecords::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klaymen::stStartWalkingResume); - } else - GotoState(&Klaymen::stPeekWall); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481F: - if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmScene2247::KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -void KmScene2247::xUpdate() { - setGlobalVar(V_KLAYMEN_FRAMEINDEX, _currFrameIndex); -} - -uint32 KmScene2247::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klaymen::stStartWalkingResume); - } else - GotoState(&Klaymen::stPeekWall); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481F: - if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmScene2401::KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnAwayFromUse); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stTurnToUseHalf); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStep); - else - GotoState(&Klaymen::stWalkToFront); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToFront); - else - GotoState(&Klaymen::stTurnToBack); - break; - case 0x4832: - GotoState(&Klaymen::stUseTube); - break; - case 0x4833: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAbout); - else { - _spitPipeIndex = sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klaymen::stTrySpitIntoPipe); - } - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return messageResult; -} - -KmScene2402::KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - if (!getGlobalVar(V_TV_JOKE_TOLD)) - GotoState(&Klaymen::stStandWonderAbout); - else - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klaymen::stWalkingFirst); - } else - GotoState(&Klaymen::stPeekWall); - break; - case 0x4812: - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481F: - if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return messageResult; -} - -KmScene2403::KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x480D: - GotoState(&Klaymen::stPullCord); - break; - case 0x4812: - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4816: - if (param.asInteger() == 1) - GotoState(&Klaymen::stPressButton); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stPressFloorButton); - else - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481F: - if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x4820: - sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klaymen::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klaymen::stClimbLadderHalf); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return messageResult; -} - -KmScene2406::KmScene2406(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount) - : Klaymen(vm, parentScene, x, y) { - - _surface->setClipRects(clipRects, clipRectsCount); -} - -uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klaymen::stWalkingFirst); - } else - GotoState(&Klaymen::stPeekWall); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481A: - GotoState(&Klaymen::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x481F: - if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x4820: - sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klaymen::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klaymen::stClimbLadderHalf); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return messageResult; -} - -KmScene2501::KmScene2501(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2501::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x2000: - _isSittingInTeleporter = param.asInteger() != 0; - messageResult = 1; - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stSitIdleTeleporter); - else - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stReturnFromUseInTeleporter); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klaymen::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klaymen::stGetUpFromTeleporter); - break; - } - return messageResult; -} - -KmScene2732::KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2732::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4804: - GotoState(&Klaymen::stPeekInside); - break; - case 0x483C: - GotoState(&Klaymen::stPeekInsideReturn); - break; - } - return 0; -} - -KmScene2801::KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4812: - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStep); - else - GotoState(&Klaymen::stWalkToFront); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToFront); - else - GotoState(&Klaymen::stTurnToBack); - break; - case 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmScene2803::KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount) - : Klaymen(vm, parentScene, x, y) { - - _surface->setClipRects(clipRects, clipRectsCount); - _dataResource.load(0x00900849); -} - -uint32 KmScene2803::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4803: - _destY = param.asInteger(); - GotoState(&Klaymen::stJumpToGrab); - break; - case 0x4804: - if (param.asInteger() == 3) - GotoState(&Klaymen::stFinishGrow); - break; - case 0x480D: - GotoState(&Klaymen::stPullCord); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else - GotoState(&Klaymen::stWonderAboutHalf); - break; - case 0x482E: - GotoState(&Klaymen::stWalkToFront); - break; - case 0x482F: - GotoState(&Klaymen::stTurnToBack); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x4838: - GotoState(&Klaymen::stJumpToGrabRelease); - break; - } - return 0; -} - -KmScene2803Small::KmScene2803Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - _dataResource.load(0x81120132); -} - -uint32 KmScene2803Small::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToXSmall(param.asPoint().x); - break; - case 0x4004: - GotoState(&Klaymen::stStandIdleSmall); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToXSmall(_dataResource.getPoint(param.asInteger()).x); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfterSmall); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalfSmall); - else - GotoState(&Klaymen::stWonderAboutSmall); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStepSmall); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stWalkToFront2Small); - else - GotoState(&Klaymen::stWalkToFrontSmall); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToBackHalfSmall); - else if (param.asInteger() == 2) - GotoState(&Klaymen::stTurnToBackWalkSmall); - else - GotoState(&Klaymen::stTurnToBackSmall); - break; - case 0x4830: - GotoState(&Klaymen::stShrink); - break; - } - return 0; -} - -KmScene2805::KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2805::xHandleMessage(int messageNum, const MessageParam ¶m) { - uint32 messageResult = 0; - switch (messageNum) { - case 0x2000: - _isSittingInTeleporter = param.asInteger() != 0; - messageResult = 1; - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stSitIdleTeleporter); - else - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klaymen::stReturnFromUseInTeleporter); - break; - case 0x4834: - GotoState(&Klaymen::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klaymen::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klaymen::stGetUpFromTeleporter); - break; - case 0x483D: - teleporterAppear(0xDE284B74); - break; - case 0x483E: - teleporterDisappear(0xD82A4094); - break; - } - return messageResult; -} - -KmScene2806::KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, - bool needsLargeSurface, NRect *clipRects, uint clipRectsCount) - : Klaymen(vm, parentScene, x, y) { - - if (needsLargeSurface) { - NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010); - delete _surface; - createSurface(1000, dimensions.width, dimensions.height); - loadSound(3, 0x58E0C341); - loadSound(4, 0x40A00342); - loadSound(5, 0xD0A1C348); - loadSound(6, 0x166FC6E0); - loadSound(7, 0x00018040); - } - - _dataResource.load(0x98182003); - _surface->setClipRects(clipRects, clipRectsCount); -} - -uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - startWalkToX(440, true); - break; - case 0x480D: - GotoState(&Klaymen::stPullCord); - break; - case 0x4816: - if (param.asInteger() == 0) - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x4831: - GotoState(&Klaymen::stGrow); - break; - case 0x4832: - if (param.asInteger() == 1) - GotoState(&Klaymen::stDrinkPotion); - else - GotoState(&Klaymen::stUseTube); - break; - } - return 0; -} - -KmScene2809::KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, - bool needsLargeSurface, NRect *clipRects, uint clipRectsCount) - : Klaymen(vm, parentScene, x, y) { - - if (needsLargeSurface) { - NDimensions dimensions = _animResource.loadSpriteDimensions(0x2838C010); - delete _surface; - createSurface(1000, dimensions.width, dimensions.height); - loadSound(3, 0x58E0C341); - loadSound(4, 0x40A00342); - loadSound(5, 0xD0A1C348); - loadSound(6, 0x166FC6E0); - loadSound(7, 0x00018040); - } - - _dataResource.load(0x1830009A); - _surface->setClipRects(clipRects, clipRectsCount); -} - -uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4804: - startWalkToX(226, true); - break; - case 0x480D: - GotoState(&Klaymen::stPullCord); - break; - case 0x4816: - if (param.asInteger() == 0) - GotoState(&Klaymen::stPressButtonSide); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x4831: - GotoState(&Klaymen::stGrow); - break; - case 0x4832: - if (param.asInteger() == 1) - GotoState(&Klaymen::stDrinkPotion); - else - GotoState(&Klaymen::stUseTube); - break; - } - return 0; -} - -KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToXSmall(param.asPoint().x); - break; - case 0x4004: - GotoState(&Klaymen::stStandIdleSmall); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToXSmall(_dataResource.getPoint(param.asInteger()).x); - break; - case 0x481F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfterSmall); - else if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalfSmall); - else - GotoState(&Klaymen::stWonderAboutSmall); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStepSmall); - else - GotoState(&Klaymen::stWalkToFrontSmall); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToBackHalfSmall); - else - GotoState(&Klaymen::stTurnToBackSmall); - break; - case 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmScene2810::KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, uint clipRectsCount) - : Klaymen(vm, parentScene, x, y) { - - _surface->setClipRects(clipRects, clipRectsCount); -} - -uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4803: - _destY = param.asInteger(); - GotoState(&Klaymen::stJumpToGrab); - break; - case 0x4804: - if (param.asInteger() == 3) - GotoState(&Klaymen::stFinishGrow); - break; - case 0x4812: - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481F: - if (param.asInteger() == 0) - GotoState(&Klaymen::stWonderAboutHalf); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stWonderAboutAfter); - else if (param.asInteger() == 3) - GotoState(&Klaymen::stTurnToUseHalf); - else if (param.asInteger() == 4) - GotoState(&Klaymen::stTurnAwayFromUse); - else if (param.asInteger() == 5) - GotoState(&Klaymen::stTurnToUseExt); - else - GotoState(&Klaymen::stWonderAbout); - break; - case 0x4820: - sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klaymen::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klaymen::stClimbLadderHalf); - break; - case 0x4824: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4825: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmScene2812::KmScene2812(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - // Empty -} - -uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4805: - _destY = param.asInteger(); - GotoState(&Klaymen::stJumpToGrabFall); - break; - case 0x4812: - if (param.asInteger() == 2) - GotoState(&Klaymen::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klaymen::stPickUpTube); - else - GotoState(&Klaymen::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481A: - GotoState(&Klaymen::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) - startWalkToXDistance(param.asPoint().y, param.asPoint().x); - else - startWalkToAttachedSpriteXDistance(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klaymen::stTurnToUse); - break; - case 0x481E: - GotoState(&Klaymen::stReturnFromUse); - break; - case 0x4820: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klaymen::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2001, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2001, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2002, 0); - GotoState(&Klaymen::stClimbLadderHalf); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klaymen::stWalkToFrontNoStep); - else - GotoState(&Klaymen::stWalkToFront); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klaymen::stTurnToFront); - else - GotoState(&Klaymen::stTurnToBack); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; -} - } // End of namespace Neverhood |