aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorjohndoe1232012-10-02 07:26:05 +0000
committerWillem Jan Palenstijn2013-05-08 20:43:46 +0200
commit4fef1ac9f21ba3f86dc453d1b11d9233ecd11bc0 (patch)
tree4a197cf3dc209e8889d9c0fb1bcfd8a13a984f6a /engines
parent22cfd04b1273beab28f09a9e7a852634aa2367a8 (diff)
downloadscummvm-rg350-4fef1ac9f21ba3f86dc453d1b11d9233ecd11bc0.tar.gz
scummvm-rg350-4fef1ac9f21ba3f86dc453d1b11d9233ecd11bc0.tar.bz2
scummvm-rg350-4fef1ac9f21ba3f86dc453d1b11d9233ecd11bc0.zip
NEVERHOOD: Some more merging and renaming in the Klayman class
Diffstat (limited to 'engines')
-rw-r--r--engines/neverhood/klayman.cpp1364
-rw-r--r--engines/neverhood/klayman.h128
2 files changed, 741 insertions, 751 deletions
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index 49f88aab6d..76a2ebf5ef 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -59,7 +59,8 @@ Klayman::Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int
: AnimatedSprite(vm, objectPriority), _idleCounterMax(0), _idleCounter(0), _isMoveObjectRequested(false), _blinkCounterMax(0),
_isWalkingOpenDoorNotified(false), _countdown1(0), _tapesToInsert(0), _keysToInsert(0), /*_field118(0), */_status2(0), _acceptInput(true),
_attachedSprite(NULL), _isWalking(false), _status3(1), _parentScene(parentScene), _isSneaking(false), _isLargeStep(false),
- _flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false) {
+ _flagF6(false), _isLeverDown(false), _isSittingInTeleporter(false), _flagFA(false), _ladderStatus(0), _pathPoints(NULL), _soundFlag(false),
+ _idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false) {
// TODO DirtySurface
createSurface(surfacePriority, 320, 200);
@@ -134,7 +135,7 @@ void Klayman::stIdlePickEar() {
}
uint32 Klayman::hmIdlePickEar(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x04DBC02C) {
@@ -164,7 +165,7 @@ void Klayman::stIdleSpinHead() {
}
uint32 Klayman::hmIdleSpinHead(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x808A0008) {
@@ -195,7 +196,7 @@ void Klayman::evIdleArmsDone() {
}
uint32 Klayman::hmIdleArms(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x5A0F0104) {
@@ -225,7 +226,7 @@ void Klayman::stIdleChest() {
}
uint32 Klayman::hmIdleChest(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x0D2A0288) {
@@ -251,7 +252,7 @@ void Klayman::stIdleHeadOff() {
}
uint32 Klayman::hmIdleHeadOff(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC006000C) {
@@ -275,7 +276,7 @@ void Klayman::stSitIdleTeleporter() {
_idleCounter = 0;
SetSpriteUpdate(NULL);
SetUpdateHandler(&Klayman::upSitIdleTeleporter);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
_blinkCounter = 0;
_idleCounterMax = 8;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24;
@@ -309,7 +310,7 @@ void Klayman::stIdleSitBlink() {
_acceptInput = true;
startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
NextState(&Klayman::stIdleSitBlinkSecond);
}
@@ -319,7 +320,7 @@ void Klayman::stIdleSitBlinkSecond() {
_acceptInput = true;
startAnimation(0x5C24C018, 0, -1);
SetUpdateHandler(&Klayman::upSitIdleTeleporter);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
@@ -348,14 +349,12 @@ void Klayman::stPickUpTube() {
}
uint32 Klayman::hmPickUpTube(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC1380080) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4806, 0);
- playSound(0, 0xC8004340);
- }
+ sendMessage(_attachedSprite, 0x4806, 0);
+ playSound(0, 0xC8004340);
} else if (param.asInteger() == 0x02B20220) {
playSound(0, 0xC5408620);
} else if (param.asInteger() == 0x03020231) {
@@ -375,7 +374,7 @@ void Klayman::stTurnToUseInTeleporter() {
_acceptInput = false;
startAnimation(0xD229823D, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -384,7 +383,7 @@ void Klayman::stReturnFromUseInTeleporter() {
_acceptInput = false;
startAnimation(0x9A2801E0, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -411,7 +410,7 @@ void Klayman::stSitInTeleporter() {
}
uint32 Klayman::hmSitInTeleporter(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x001A2832) {
@@ -427,7 +426,7 @@ void Klayman::stGetUpFromTeleporter() {
_acceptInput = false;
startAnimation(0x913AB120, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(&Klayman::suUpdateDestX);
}
@@ -504,7 +503,7 @@ void Klayman::stTryStandIdle() {
_blinkCounter = 0;
_blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24;
SetUpdateHandler(&Klayman::upIdle);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
}
@@ -530,7 +529,7 @@ void Klayman::upIdle() {
}
}
-uint32 Klayman::handleMessage41D360(int messageNum, const MessageParam &param, Entity *sender) {
+uint32 Klayman::hmLowLevel(int messageNum, const MessageParam &param, Entity *sender) {
Sprite::handleMessage(messageNum, param, sender);
uint32 messageResult = xHandleMessage(messageNum, param);
switch (messageNum) {
@@ -570,13 +569,13 @@ void Klayman::stIdleBlink() {
_acceptInput = true;
startAnimation(0x5900C41E, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
NextState(&Klayman::stStandAround);
}
-uint32 Klayman::handleMessage41D480(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+uint32 Klayman::hmLowLevelAnimation(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x3002:
gotoNextStateExt();
@@ -590,12 +589,12 @@ void Klayman::stStandAround() {
_acceptInput = true;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::upIdle);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
uint32 Klayman::hmStartAction(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x271AA210) {
@@ -644,7 +643,7 @@ void Klayman::stWakeUp() {
_acceptInput = false;
startAnimation(0x527AC970, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -658,7 +657,7 @@ void Klayman::stSleeping() {
}
uint32 Klayman::hmSleeping(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x03060012) {
@@ -780,7 +779,7 @@ void Klayman::stWalkingDone() {
}
uint32 Klayman::hmSneaking(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -821,7 +820,7 @@ void Klayman::stStartWalkingDone() {
}
uint32 Klayman::hmStartWalking(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -852,7 +851,7 @@ void Klayman::spriteUpdate41F300() {
}
uint32 Klayman::hmWalking(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -942,8 +941,8 @@ void Klayman::suWalkingTestExit() {
}
-uint32 Klayman::handleMessage41E210(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+uint32 Klayman::hmLever(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
@@ -969,13 +968,11 @@ void Klayman::stPickUpGeneric() {
}
uint32 Klayman::hmPickUpGeneric(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC1380080) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4806, 0);
- }
+ sendMessage(_attachedSprite, 0x4806, 0);
playSound(0, 0x40208200);
} else if (param.asInteger() == 0x02B20220) {
playSound(0, 0xC5408620);
@@ -1006,13 +1003,11 @@ void Klayman::stTurnPressButton() {
}
uint32 Klayman::hmPressButton(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x0D01B294) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x480B, 0);
- }
+ sendMessage(_attachedSprite, 0x480B, 0);
} else if (param.asInteger() == 0x32180101) {
playSound(0, 0x4924AAC4);
} else if (param.asInteger() == 0x0A2A9098) {
@@ -1102,7 +1097,7 @@ void Klayman::stStartWalkingSmall() {
}
uint32 Klayman::hmWalkingSmall(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101)
@@ -1118,7 +1113,7 @@ void Klayman::stStandIdleSmall() {
_acceptInput = true;
startAnimation(0x90D0D1D0, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
@@ -1127,7 +1122,7 @@ void Klayman::stWonderAboutAfterSmall() {
_acceptInput = true;
startAnimation(0x11C8D156, 30, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1136,7 +1131,7 @@ void Klayman::stWonderAboutHalfSmall() {
_acceptInput = true;
startAnimation(0x11C8D156, 0, 10);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1145,7 +1140,7 @@ void Klayman::stWonderAboutSmall() {
_acceptInput = true;
startAnimation(0x11C8D156, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1159,7 +1154,7 @@ void Klayman::stWalkToFrontNoStepSmall() {
}
uint32 Klayman::hmWalkFrontBackSmall(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x80C110B5)
@@ -1241,7 +1236,7 @@ void Klayman::stReleaseCord() {
}
uint32 Klayman::hmPullCord(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
@@ -1267,7 +1262,7 @@ void Klayman::stUseTube() {
}
uint32 Klayman::hmUseTube(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x02B20220)
@@ -1423,7 +1418,7 @@ void Klayman::suLargeStep() {
}
uint32 Klayman::hmLargeStep(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -1445,7 +1440,7 @@ void Klayman::stWonderAboutHalf() {
_acceptInput = true;
startAnimation(0xD820A114, 0, 10);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1454,7 +1449,7 @@ void Klayman::stWonderAboutAfter() {
_acceptInput = true;
startAnimation(0xD820A114, 30, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1468,7 +1463,7 @@ void Klayman::stTurnToUseHalf() {
}
uint32 Klayman::hmTurnToUse(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101) {
@@ -1495,7 +1490,7 @@ void Klayman::stWonderAbout() {
_acceptInput = true;
startAnimation(0xD820A114, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1524,7 +1519,7 @@ uint32 Klayman::hmPeekWall(int messageNum, const MessageParam &param, Entity *se
}
break;
}
- return handleMessage41D480(messageNum, param, sender);
+ return hmLowLevelAnimation(messageNum, param, sender);
}
void Klayman::stJumpToRing1() {
@@ -1545,13 +1540,11 @@ void Klayman::setupJumpToRing() {
}
uint32 Klayman::hmJumpToRing(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x168050A0) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4806, 0);
- }
+ sendMessage(_attachedSprite, 0x4806, 0);
_acceptInput = true;
} else if (param.asInteger() == 0x320AC306) {
playSound(0, 0x5860C640);
@@ -1575,7 +1568,7 @@ void Klayman::stHangOnRing() {
_acceptInput = true;
startAnimation(0x4829E0B8, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
@@ -1601,13 +1594,11 @@ void Klayman::stJumpToRing3() {
}
uint32 Klayman::hmJumpToRing3(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x168050A0) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4806, 0);
- }
+ sendMessage(_attachedSprite, 0x4806, 0);
} else if (param.asInteger() == 0x320AC306) {
playSound(0, 0x5860C640);
} else if (param.asInteger() == 0x4AB28209) {
@@ -1634,19 +1625,17 @@ uint32 Klayman::hmHoldRing(int messageNum, const MessageParam &param, Entity *se
stReleaseRing();
return 0;
}
- return handleMessage41D360(messageNum, param, sender);
+ return hmLowLevel(messageNum, param, sender);
}
void Klayman::stReleaseRing() {
_status2 = 1;
_acceptInput = false;
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4807, 0);
- _attachedSprite = NULL;
- }
+ sendMessage(_attachedSprite, 0x4807, 0);
+ _attachedSprite = NULL;
startAnimation(0xB869A4B9, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
}
@@ -1669,7 +1658,7 @@ void Klayman::stContinueClimbLadderUp() {
startAnimationByHash(0x3A292504, 0x01084280, 0);
_newStickFrameHash = 0x01084280;
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
gotoNextStateExt();
}
@@ -1728,7 +1717,7 @@ void Klayman::stClimbLadderHalf() {
}
uint32 Klayman::handleMessage41DFD0(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x489B025C) {
@@ -1746,7 +1735,7 @@ uint32 Klayman::handleMessage41DFD0(int messageNum, const MessageParam &param, E
}
uint32 Klayman::hmClimbLadderUpDown(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
@@ -1808,7 +1797,7 @@ void Klayman::stWalkToFrontNoStep() {
}
uint32 Klayman::hmWalkToFront(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x80C110B5) {
@@ -1868,7 +1857,7 @@ void Klayman::stLandOnFeet() {
}
uint32 Klayman::hmLandOnFeet(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x320AC306) {
@@ -1891,7 +1880,7 @@ void Klayman::stTurnToBackToUse() {
}
uint32 Klayman::hmTurnToBackToUse(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0xC61A0119) {
@@ -1918,13 +1907,11 @@ void Klayman::stClayDoorOpen() {
}
uint32 Klayman::hmClayDoorOpen(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x040D4186) {
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x4808, 0);
- }
+ sendMessage(_attachedSprite, 0x4808, 0);
}
break;
}
@@ -1986,14 +1973,13 @@ uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam &param, Enti
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
- if (_attachedSprite)
- sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0);
+ sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0);
} else if (param.asInteger() == 0x02421405) {
if (_isMoveObjectRequested && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) {
stMoveObjectSkipTurn();
} else {
FinalizeState(&Klayman::evMoveObjectTurnDone);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
}
} else if (param.asInteger() == 0x32180101) {
playSound(0, 0x405002D8);
@@ -2005,7 +1991,7 @@ uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam &param, Enti
_isMoveObjectRequested = true;
return 0;
}
- return handleMessage41D480(messageNum, param, sender);
+ return hmLowLevelAnimation(messageNum, param, sender);
}
void Klayman::stMoveObjectSkipTurn() {
@@ -2040,7 +2026,7 @@ void Klayman::stUseLever() {
startAnimation(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41E210);
+ SetMessageHandler(&Klayman::hmLever);
NextState(&Klayman::stPullLeverDown);
_acceptInput = false;
}
@@ -2058,7 +2044,7 @@ void Klayman::stHoldLeverDown() {
startAnimation(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
_isLeverDown = true;
_acceptInput = true;
}
@@ -2067,7 +2053,7 @@ void Klayman::stUseLeverRelease() {
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41E210);
+ SetMessageHandler(&Klayman::hmLever);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stPullLeverDown);
_acceptInput = false;
@@ -2079,7 +2065,7 @@ void Klayman::stReleaseLever() {
startAnimation(0x09018068, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41E210);
+ SetMessageHandler(&Klayman::hmLever);
sendMessage(_attachedSprite, 0x4807, 0);
NextState(&Klayman::stLetGoOfLever);
_acceptInput = false;
@@ -2124,7 +2110,7 @@ void Klayman::stInsertDisk() {
}
uint32 Klayman::hmInsertDisk(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (_tapesToInsert == 0 && param.asInteger() == 0x06040580) {
@@ -2199,7 +2185,7 @@ void Klayman::suJumpToGrab() {
}
uint32 Klayman::hmJumpToGrab(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x168050A0)
@@ -2225,7 +2211,7 @@ void Klayman::sub421230() {//stGrow
}
uint32 Klayman::handleMessage41F1D0(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x040C4C01)
@@ -2269,7 +2255,7 @@ void Klayman::stJumpToGrabRelease() {
}
uint32 Klayman::hmJumpToGrabRelease(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x320AC306)
@@ -2288,7 +2274,7 @@ void Klayman::stIdleTeleporterHands() {
_acceptInput = true;
startAnimation(0x90EF8D38, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
NextState(&Klayman::stIdleSitBlinkSecond);
}
@@ -2302,7 +2288,7 @@ void Klayman::stIdleTeleporterHands2() {
_acceptInput = true;
startAnimation(0x900F0930, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
SetSpriteUpdate(NULL);
NextState(&Klayman::stIdleSitBlinkSecond);
}
@@ -2326,7 +2312,7 @@ void Klayman::teleporterDisappear(uint32 fileHash) {
}
uint32 Klayman::hmTeleporterAppearDisappear(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4E0A2C24) {
@@ -2340,7 +2326,7 @@ uint32 Klayman::hmTeleporterAppearDisappear(int messageNum, const MessageParam &
}
uint32 Klayman::hmShrink(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x80C110B5)
@@ -2370,12 +2356,12 @@ void Klayman::stStandWonderAbout() {
startAnimation(0xD820A114, 0, -1);
_newStickFrameIndex = 10;
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(NULL);
}
uint32 Klayman::hmDrinkPotion(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
if (_potionFlag1) {
@@ -2427,7 +2413,7 @@ uint32 Klayman::hmDrinkPotion(int messageNum, const MessageParam &param, Entity
}
uint32 Klayman::hmGrow(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x32180101)
@@ -2480,7 +2466,7 @@ void Klayman::stDrinkPotion() {
}
uint32 Klayman::hmInsertKey(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (_keysToInsert == 0 && param.asInteger() == 0x06040580) {
@@ -2541,7 +2527,7 @@ void Klayman::stInsertKey() {
}
uint32 Klayman::hmReadNote(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x04684052) {
@@ -2563,7 +2549,7 @@ void Klayman::stReadNote() {
}
uint32 Klayman::hmHitByDoor(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
int16 speedUpFrameIndex;
switch (messageNum) {
case 0x1008:
@@ -2596,7 +2582,7 @@ void Klayman::stHitByDoor() {
}
uint32 Klayman::hmPeekWallReturn(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == calcHash("PopBalloon")) {
@@ -2626,7 +2612,7 @@ void Klayman::stPeekWall1() {
startAnimation(0xAC20C012, 8, 37);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
NextState(&Klayman::stPeekWallBlink);
}
@@ -2636,7 +2622,7 @@ void Klayman::stPeekWall2() {
startAnimation(0xAC20C012, 43, 49);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D480);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
}
void Klayman::stPeekWallBlink() {
@@ -2647,7 +2633,7 @@ void Klayman::stPeekWallBlink() {
startAnimation(0xAC20C012, 38, 42);
SetUpdateHandler(&Klayman::upPeekWallBlink);
SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
_newStickFrameIndex = 42;
}
@@ -2672,7 +2658,7 @@ void Klayman::stPullHammerLever() {
}
uint32 Klayman::hmPullHammerLever(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41E210(messageNum, param, sender);
+ uint32 messageResult = Klayman::hmLever(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209)
@@ -2697,232 +2683,29 @@ void Klayman::stRidePlatformDown() {
_platformDeltaY = 0;
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::handleMessage41D360);
+ SetMessageHandler(&Klayman::hmLowLevel);
SetSpriteUpdate(&Klayman::suRidePlatformDown);
_vm->_soundMan->playSoundLooping(0xD3B02847);
}
}
-void Klayman::startWalkingResume(int16 frameIncr) {
- // TODO Make the parameter a field and change this method back to a callback (or similar)
- int16 frameIndex = getGlobalVar(0x18288913) + frameIncr;
- if (frameIndex < 0 || frameIndex > 13)
- frameIndex = 0;
- _status2 = 0;
- _isWalking = true;
- _acceptInput = true;
- startAnimation(0x1A249001, frameIndex, -1);
+void Klayman::stCrashDown() {
+ playSound(0, 0x41648271);
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&Klayman::hmWalking);
- SetSpriteUpdate(&Klayman::spriteUpdate41F300);
- NextState(&Klayman::stUpdateWalking);
- FinalizeState(&Klayman::stStartWalkingDone);
-}
-
-//##############################################################################
-
-// KmScene1001
-
-KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000) {
-}
-
-uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam &param) {
- switch (messageNum) {
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4804:
- if (param.asInteger() == 2)
- GotoState(&Klayman::stSleeping);
- break;
- case 0x480D:
- GotoState(&Klayman::stPullHammerLever);
- break;
- case NM_KLAYMAN_PICKUP:
- GotoState(&Klayman::stPickUpGeneric);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnPressButton);
- } else if (param.asInteger() == 2) {
- GotoState(&Klayman::stStampFloorButton);
- } else {
- GotoState(&Klayman::stPressButtonSide);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- // TODO: It's not really a point but an x1/x2 pair
- if (param.asPoint().y != 0) {
- sub41CC40(param.asPoint().y, param.asPoint().x);
- } else {
- sub41CCE0(param.asPoint().x);
- }
- break;
- case 0x481F:
- if (param.asInteger() == 0) {
- GotoState(&Klayman::stWonderAboutHalf);
- } else if (param.asInteger() == 1) {
- GotoState(&Klayman::stWonderAboutAfter);
- } else if (param.asInteger() == 3) {
- GotoState(&Klayman::stTurnToUseHalf);
- } else if (param.asInteger() == 4) {
- GotoState(&Klayman::stTurnAwayFromUse);
- } else {
- GotoState(&Klayman::stWonderAbout);
- }
- break;
- case 0x482D:
- setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
- gotoNextStateExt();
- break;
- case 0x4836:
- if (param.asInteger() == 1) {
- sendMessage(_parentScene, 0x2002, 0);
- GotoState(&Klayman::stWakeUp);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
-}
-
-// KmScene1002
-
-KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL), _idleTableNum(0) {
-
- setKlaymanIdleTable1();
-
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ NextState(&KmScene1305::stCrashDownFinished);
}
-void KmScene1002::xUpdate() {
- if (_x >= 250 && _x <= 435 && _y >= 420) {
- if (_idleTableNum == 0) {
- // TODO setKlaymanIdleTable(stru_4B44C8);
- _idleTableNum = 1;
- }
- } else if (_idleTableNum == 1) {
- setKlaymanIdleTable1();
- _idleTableNum = 0;
- }
-}
-
-uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam &param) {
- switch (messageNum) {
- case 0x2001:
- GotoState(&KmScene1002::stStandIdleSpecial);
- break;
- case 0x2007:
- _otherSprite = (Sprite*)param.asEntity();
- break;
- case 0x4001:
- case 0x4800:
- startWalkToX(param.asPoint().x, false);
- break;
- case 0x4004:
- GotoState(&Klayman::stTryStandIdle);
- break;
- case 0x4803:
- if (param.asInteger() == 1) {
- GotoState(&KmScene1002::stJumpAndFall);
- } else if (param.asInteger() == 2) {
- GotoState(&KmScene1002::stDropFromRing);
- }
- break;
- case 0x4804:
- GotoState(&Klayman::stPeekWall);
- break;
- case 0x4805:
- switch (param.asInteger()) {
- case 1:
- GotoState(&Klayman::stJumpToRing1);
- break;
- case 2:
- GotoState(&Klayman::stJumpToRing2);
- break;
- case 3:
- GotoState(&Klayman::stJumpToRing3);
- break;
- case 4:
- GotoState(&Klayman::stJumpToRing4);
- break;
- }
- break;
- case 0x480A:
- GotoState(&KmScene1002::stMoveVenusFlyTrap);
- break;
- case 0x480D:
- GotoState(&KmScene1002::stJumpToRingVenusFlyTrap);
- break;
- case NM_KLAYMAN_PRESS_BUTTON:
- if (param.asInteger() == 0) {
- GotoState(&KmScene1002::stPressDoorButton);
- }
- break;
- case 0x4817:
- setDoDeltaX(param.asInteger());
- gotoNextStateExt();
- break;
- case 0x481B:
- sub41CCE0(param.asInteger());
- break;
- case 0x4820:
- sendMessage(_parentScene, 0x2005, 0);
- GotoState(&Klayman::stContinueClimbLadderUp);
- break;
- case 0x4821:
- sendMessage(_parentScene, 0x2005, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderDown);
- break;
- case 0x4822:
- sendMessage(_parentScene, 0x2005, 0);
- _destY = param.asInteger();
- GotoState(&Klayman::stStartClimbLadderUp);
- break;
- case 0x4823:
- sendMessage(_parentScene, 0x2006, 0);
- GotoState(&Klayman::stClimbLadderHalf);
- break;
- case 0x482E:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stWalkToFrontNoStep);
- } else {
- GotoState(&Klayman::stWalkToFront);
- }
- break;
- case 0x482F:
- if (param.asInteger() == 1) {
- GotoState(&Klayman::stTurnToFront);
- } else {
- GotoState(&Klayman::stTurnToBack);
- }
- break;
- case 0x483F:
- startSpecialWalkRight(param.asInteger());
- break;
- case 0x4840:
- startSpecialWalkLeft(param.asInteger());
- break;
- }
- return 0;
+void Klayman::stCrashDownFinished() {
+ setDoDeltaX(2);
+ stTryStandIdle();
}
-void KmScene1002::upSpitOutFall() {
+void Klayman::upSpitOutFall() {
Klayman::update();
if (_countdown1 != 0 && (--_countdown1 == 0)) {
_surface->setVisible(true);
@@ -2930,29 +2713,25 @@ void KmScene1002::upSpitOutFall() {
}
}
-uint32 KmScene1002::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+uint32 Klayman::hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x168050A0) {
- if (_attachedSprite)
- sendMessage(_attachedSprite, 0x480F, 0);
+ sendMessage(_attachedSprite, 0x480F, 0);
} else if (param.asInteger() == 0x586B0300) {
- if (_otherSprite)
- sendMessage(_otherSprite, 0x480E, 1);
+ sendMessage(_otherSprite, 0x480E, 1);
} else if (param.asInteger() == 0x4AB28209) {
- if (_attachedSprite)
- sendMessage(_attachedSprite, 0x482A, 0);
+ sendMessage(_attachedSprite, 0x482A, 0);
} else if (param.asInteger() == 0x88001184) {
- if (_attachedSprite)
- sendMessage(_attachedSprite, 0x482B, 0);
+ sendMessage(_attachedSprite, 0x482B, 0);
}
break;
}
return messageResult;
}
-uint32 KmScene1002::hmStandIdleSpecial(int messageNum, const MessageParam &param, Entity *sender) {
+uint32 Klayman::hmStandIdleSpecial(int messageNum, const MessageParam &param, Entity *sender) {
switch (messageNum) {
case 0x4811:
playSound(0, 0x5252A0E4);
@@ -2976,8 +2755,8 @@ uint32 KmScene1002::hmStandIdleSpecial(int messageNum, const MessageParam &param
return 0;
}
-uint32 KmScene1002::hmPressDoorButton(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+uint32 Klayman::hmPressDoorButton(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x942D2081) {
@@ -2994,7 +2773,7 @@ uint32 KmScene1002::hmPressDoorButton(int messageNum, const MessageParam &param,
return messageResult;
}
-uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender) {
+uint32 Klayman::hmMoveVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender) {
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x01084280) {
@@ -3004,7 +2783,7 @@ uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam &param
if (sendMessage(_attachedSprite, 0x480C, (uint32)_doDeltaX) != 0)
stContinueMovingVenusFlyTrap();
} else {
- SetMessageHandler(&KmScene1002::hmFirstMoveVenusFlyTrap);
+ SetMessageHandler(&Klayman::hmFirstMoveVenusFlyTrap);
}
} else if (param.asInteger() == 0x4AB28209) {
sendMessage(_attachedSprite, 0x482A, 0);
@@ -3020,11 +2799,11 @@ uint32 KmScene1002::hmMoveVenusFlyTrap(int messageNum, const MessageParam &param
_isMoveObjectRequested = true;
return 0;
}
- return handleMessage41D480(messageNum, param, sender);
+ return hmLowLevelAnimation(messageNum, param, sender);
}
-uint32 KmScene1002::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+uint32 Klayman::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4AB28209) {
@@ -3041,9 +2820,9 @@ uint32 KmScene1002::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam &
return messageResult;
}
-uint32 KmScene1002::hmHitByBoxingGlove(int messageNum, const MessageParam &param, Entity *sender) {
+uint32 Klayman::hmHitByBoxingGlove(int messageNum, const MessageParam &param, Entity *sender) {
int16 speedUpFrameIndex;
- uint32 messageResult = handleMessage41D480(messageNum, param, sender);
+ uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender);
switch (messageNum) {
case 0x1008:
speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
@@ -3064,8 +2843,8 @@ uint32 KmScene1002::hmHitByBoxingGlove(int messageNum, const MessageParam &param
return messageResult;
}
-uint32 KmScene1002::hmJumpAndFall(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = handleMessage41D360(messageNum, param, sender);
+uint32 Klayman::hmJumpAndFall(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = hmLowLevel(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x1307050A) {
@@ -3076,7 +2855,7 @@ uint32 KmScene1002::hmJumpAndFall(int messageNum, const MessageParam &param, Ent
return messageResult;
}
-void KmScene1002::suFallDown() {
+void Klayman::suFallDown() {
AnimatedSprite::updateDeltaXY();
HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
if (hitRect->type == 0x5001) {
@@ -3087,20 +2866,20 @@ void KmScene1002::suFallDown() {
_vm->_collisionMan->checkCollision(this, 0xFFFF, 0x4810, 0);
}
-void KmScene1002::stJumpToRingVenusFlyTrap() {
- if (!stStartAction(AnimationCallback(&KmScene1002::stJumpToRingVenusFlyTrap))) {
+void Klayman::stJumpToRingVenusFlyTrap() {
+ if (!stStartAction(AnimationCallback(&Klayman::stJumpToRingVenusFlyTrap))) {
_status2 = 2;
_acceptInput = false;
startAnimation(0x584984B4, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1002::hmJumpToRingVenusFlyTrap);
+ SetMessageHandler(&Klayman::hmJumpToRingVenusFlyTrap);
NextState(&Klayman::stLandOnFeet);
sendMessage(_attachedSprite, 0x482B, 0);
}
}
-void KmScene1002::stStandIdleSpecial() {
+void Klayman::stStandIdleSpecial() {
playSound(0, 0x56548280);
_status2 = 0;
_acceptInput = false;
@@ -3108,22 +2887,22 @@ void KmScene1002::stStandIdleSpecial() {
startAnimation(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1002::hmStandIdleSpecial);
+ SetMessageHandler(&Klayman::hmStandIdleSpecial);
}
-void KmScene1002::stSpitOutFall0() {
+void Klayman::stSpitOutFall0() {
_countdown1 = 1;
_status2 = 0;
_acceptInput = false;
startAnimation(0x000BAB02, 0, -1);
- SetUpdateHandler(&KmScene1002::upSpitOutFall);
- SetMessageHandler(&Klayman::handleMessage41D360);
- SetSpriteUpdate(&KmScene1002::suFallDown);
- NextState(&KmScene1002::stFalling);
+ SetUpdateHandler(&Klayman::upSpitOutFall);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ SetSpriteUpdate(&Klayman::suFallDown);
+ NextState(&Klayman::stFalling);
sendMessage(_parentScene, 0x8000, 0);
}
-void KmScene1002::stFalling() {
+void Klayman::stFalling() {
sendMessage(_parentScene, 0x1024, 1);
playSound(0, 0x41648271);
_status2 = 1;
@@ -3132,45 +2911,45 @@ void KmScene1002::stFalling() {
startAnimationByHash(0x000BAB02, 0x88003000, 0);
SetUpdateHandler(&Klayman::update);
SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1002::handleMessage41D480);
- NextState(&KmScene1002::stFallTouchdown);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ NextState(&Klayman::stFallTouchdown);
sendMessage(_parentScene, 0x2002, 0);
// TODO _callbackList = NULL;
_attachedSprite = NULL;
sendMessage(_parentScene, 0x8001, 0);
}
-void KmScene1002::stSpitOutFall2() {
+void Klayman::stSpitOutFall2() {
_countdown1 = 1;
_status2 = 0;
_acceptInput = false;
startAnimation(0x9308C132, 0, -1);
- SetUpdateHandler(&KmScene1002::upSpitOutFall);
- SetMessageHandler(&Klayman::handleMessage41D480);
- SetSpriteUpdate(&KmScene1002::suFallDown);
- NextState(&KmScene1002::stFalling);
+ SetUpdateHandler(&Klayman::upSpitOutFall);
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ SetSpriteUpdate(&Klayman::suFallDown);
+ NextState(&Klayman::stFalling);
sendMessage(_parentScene, 0x8000, 0);
}
-void KmScene1002::stFallTouchdown() {
+void Klayman::stFallTouchdown() {
setDoDeltaX(2);
stTryStandIdle();
}
-void KmScene1002::stJumpAndFall() {
- if (!stStartAction(AnimationCallback(&KmScene1002::stJumpAndFall))) {
+void Klayman::stJumpAndFall() {
+ if (!stStartAction(AnimationCallback(&Klayman::stJumpAndFall))) {
sendMessage(_parentScene, 0x1024, 3);
_status2 = 2;
_acceptInput = false;
startAnimation(0xB93AB151, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmJumpAndFall);
- SetSpriteUpdate(&KmScene1002::suFallDown);
+ SetMessageHandler(&Klayman::hmJumpAndFall);
+ SetSpriteUpdate(&Klayman::suFallDown);
NextState(&Klayman::stLandOnFeet);
}
}
-void KmScene1002::stDropFromRing() {
+void Klayman::stDropFromRing() {
if (_attachedSprite) {
_x = _attachedSprite->getX();
sendMessage(_attachedSprite, 0x4807, 0);
@@ -3180,63 +2959,547 @@ void KmScene1002::stDropFromRing() {
_acceptInput = false;
startAnimation(0x586984B1, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::handleMessage41D360);
- SetSpriteUpdate(&KmScene1002::suFallDown);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ SetSpriteUpdate(&Klayman::suFallDown);
NextState(&Klayman::stLandOnFeet);
}
-void KmScene1002::stPressDoorButton() {
+void Klayman::stPressDoorButton() {
_status2 = 2;
_acceptInput = true;
setDoDeltaX(0);
startAnimation(0x1CD89029, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmPressDoorButton);
+ SetMessageHandler(&Klayman::hmPressDoorButton);
SetSpriteUpdate(&Klayman::spriteUpdate41F250);
}
-void KmScene1002::stHitByBoxingGlove() {
+void Klayman::stHitByBoxingGlove() {
_status2 = 1;
_acceptInput = false;
startAnimation(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmHitByBoxingGlove);
+ SetMessageHandler(&Klayman::hmHitByBoxingGlove);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&KmScene1002::stHitByBoxingGloveDone);
+ FinalizeState(&Klayman::stHitByBoxingGloveDone);
}
-void KmScene1002::stHitByBoxingGloveDone() {
+void Klayman::stHitByBoxingGloveDone() {
sendMessage(_parentScene, 0x1024, 1);
}
-void KmScene1002::stMoveVenusFlyTrap() {
- if (!stStartAction(AnimationCallback(&KmScene1002::stMoveVenusFlyTrap))) {
+void Klayman::stMoveVenusFlyTrap() {
+ if (!stStartAction(AnimationCallback(&Klayman::stMoveVenusFlyTrap))) {
_status2 = 2;
_isMoveObjectRequested = false;
_acceptInput = true;
setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
startAnimation(0x5C01A870, 0, -1);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
+ SetMessageHandler(&Klayman::hmMoveVenusFlyTrap);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&KmScene1002::stMoveVenusFlyTrapDone);
+ FinalizeState(&Klayman::stMoveVenusFlyTrapDone);
}
}
-void KmScene1002::stContinueMovingVenusFlyTrap() {
+void Klayman::stContinueMovingVenusFlyTrap() {
_isMoveObjectRequested = false;
_acceptInput = true;
startAnimationByHash(0x5C01A870, 0x01084280, 0);
SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene1002::hmMoveVenusFlyTrap);
+ SetMessageHandler(&Klayman::hmMoveVenusFlyTrap);
SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- FinalizeState(&KmScene1002::stMoveVenusFlyTrapDone);
+ FinalizeState(&Klayman::stMoveVenusFlyTrapDone);
}
-void KmScene1002::stMoveVenusFlyTrapDone() {
+void Klayman::stMoveVenusFlyTrapDone() {
sendMessage(_attachedSprite, 0x482A, 0);
}
+void Klayman::suFallSkipJump() {
+ updateDeltaXY();
+ HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
+ if (hitRect->type == 0x5001) {
+ _y = hitRect->rect.y1;
+ processDelta();
+ sendMessage(this, 0x1019, 0);
+ }
+}
+
+void Klayman::stFallSkipJump() {
+ _status2 = 2;
+ _acceptInput = false;
+ startAnimationByHash(0xB93AB151, 0x40A100F8, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suFallSkipJump);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ NextState(&Klayman::stLandOnFeet);
+}
+
+void Klayman::upMoveObject() {
+ if (_x >= 380)
+ gotoNextStateExt();
+ Klayman::update();
+}
+
+uint32 Klayman::hmMatch(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x51281850) {
+ setGlobalVar(0x20A0C516, 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 Klayman::stFetchMatch() {
+ if (!stStartAction(AnimationCallback(&Klayman::stFetchMatch))) {
+ _status2 = 0;
+ _acceptInput = false;
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ startAnimation(0x9CAA0218, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::hmMatch);
+ NextState(&Klayman::stLightMatch);
+ }
+}
+
+void Klayman::stLightMatch() {
+ _status2 = 1;
+ _acceptInput = false;
+ setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
+ startAnimation(0x1222A513, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::hmMatch);
+}
+
+uint32 Klayman::hmMoveObject(int messageNum, const MessageParam &param, Entity *sender) {
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x01084280) {
+ playSound(0, 0x405002D8);
+ sendMessage(_attachedSprite, 0x480B, 0);
+ } else if (param.asInteger() == 0x02421405) {
+ if (_moveObjectCountdown != 0) {
+ _moveObjectCountdown--;
+ stContinueMoveObject();
+ } else {
+ SetMessageHandler(&Klayman::hmLowLevelAnimation);
+ }
+ }
+ break;
+ }
+ return Klayman::hmLowLevelAnimation(messageNum, param, sender);
+}
+
+uint32 Klayman::hmTumbleHeadless(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (param.asInteger() == 0x000F0082) {
+ playSound(0, 0x74E2810F);
+ }
+ break;
+ }
+ return messageResult;
+}
+
+void Klayman::stMoveObject() {
+ if (!stStartAction(AnimationCallback(&Klayman::stMoveObject))) {
+ _status2 = 2;
+ _acceptInput = false;
+ _moveObjectCountdown = 8;
+ setDoDeltaX(0);
+ startAnimation(0x0C1CA072, 0, -1);
+ SetUpdateHandler(&Klayman::upMoveObject);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&Klayman::hmMoveObject);
+ }
+}
+
+void Klayman::stContinueMoveObject() {
+ _acceptInput = false;
+ startAnimationByHash(0x0C1CA072, 0x01084280, 0);
+ SetUpdateHandler(&Klayman::upMoveObject);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&Klayman::hmMoveObject);
+}
+
+void Klayman::stTumbleHeadless() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stTumbleHeadless))) {
+ _status2 = 1;
+ _acceptInput = false;
+ setDoDeltaX(0);
+ startAnimation(0x2821C590, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ SetMessageHandler(&Klayman::hmTumbleHeadless);
+ NextState(&Klayman::stTryStandIdle);
+ sendMessage(_parentScene, 0x8000, 0);
+ playSound(0, 0x62E0A356);
+ }
+}
+
+void Klayman::stCloseEyes() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stCloseEyes))) {
+ _status2 = 1;
+ _acceptInput = false;
+ startAnimation(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(NULL);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ }
+}
+
+uint32 Klayman::hmSpit(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = Klayman::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 Klayman::stTrySpitIntoPipe() {
+ if (_readyToSpit) {
+ _contSpitPipe = true;
+ _spitContDestPipeIndex = _spitPipeIndex;
+ if (_canSpitPipe)
+ spitIntoPipe();
+ } else if (!stStartAction(AnimationCallback(&Klayman::stTrySpitIntoPipe))) {
+ _status2 = 2;
+ _acceptInput = true;
+ _spitDestPipeIndex = _spitPipeIndex;
+ _readyToSpit = true;
+ _canSpitPipe = false;
+ _contSpitPipe = false;
+ startAnimation(0x1808B150, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmSpit);
+ SetSpriteUpdate(NULL);
+ }
+}
+
+void Klayman::spitIntoPipe() {
+ _contSpitPipe = false;
+ _spitDestPipeIndex = _spitContDestPipeIndex;
+ _canSpitPipe = false;
+ _acceptInput = false;
+ startAnimation(0x1B08B553, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmSpit);
+ SetSpriteUpdate(NULL);
+ NextState(&Klayman::stContSpitIntoPipe);
+}
+
+void Klayman::stContSpitIntoPipe() {
+ _canSpitPipe = true;
+ _acceptInput = true;
+ startAnimationByHash(0x1808B150, 0x16401CA6, 0);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmSpit);
+ SetSpriteUpdate(NULL);
+}
+
+void Klayman::suRidePlatform() {
+ _x = _attachedSprite->getX() - 20;
+ _y = _attachedSprite->getY() + 46;
+ processDelta();
+}
+
+void Klayman::stRidePlatform() {
+ if (!stStartActionFromIdle(AnimationCallback(&Klayman::stRidePlatform))) {
+ _status2 = 1;
+ _acceptInput = true;
+ startAnimation(0x5420E254, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suRidePlatform);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ }
+}
+
+void Klayman::stInteractLever() {
+ if (!stStartAction(AnimationCallback(&Klayman::stInteractLever))) {
+ _status2 = 0;
+ if (_isLeverDown) {
+ stUseLeverRelease();
+ } else {
+ _acceptInput = false;
+ startAnimation(0x0C303040, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
+ SetMessageHandler(&Klayman::hmLever);
+ NextState(&Klayman::stPullLever);
+ }
+ }
+}
+
+void Klayman::stPullLever() {
+ startAnimation(0x0D318140, 0, -1);
+ sendMessage(_attachedSprite, 0x480F, 0);
+ NextState(&Klayman::stLookLeverDown);
+}
+
+void Klayman::stLookLeverDown() {
+ startAnimation(0x1564A2C0, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
+ NextState(&Klayman::stWaitLeverDown);
+ _acceptInput = true;
+ _isLeverDown = true;
+}
+
+void Klayman::stWaitLeverDown() {
+ startAnimation(0x4464A440, 0, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetSpriteUpdate(&Klayman::suUpdateDestX);
+ SetMessageHandler(&Klayman::hmLowLevel);
+ _acceptInput = true;
+ _isLeverDown = true;
+}
+
+void Klayman::startWalkingResume(int16 frameIncr) {
+ // TODO Make the parameter a field and change this method back to a callback (or similar)
+ int16 frameIndex = getGlobalVar(0x18288913) + frameIncr;
+ if (frameIndex < 0 || frameIndex > 13)
+ frameIndex = 0;
+ _status2 = 0;
+ _isWalking = true;
+ _acceptInput = true;
+ startAnimation(0x1A249001, frameIndex, -1);
+ SetUpdateHandler(&Klayman::update);
+ SetMessageHandler(&Klayman::hmWalking);
+ SetSpriteUpdate(&Klayman::spriteUpdate41F300);
+ NextState(&Klayman::stUpdateWalking);
+ FinalizeState(&Klayman::stStartWalkingDone);
+}
+
+//##############################################################################
+
+// KmScene1001
+
+KmScene1001::KmScene1001(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+}
+
+uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam &param) {
+ switch (messageNum) {
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4804:
+ if (param.asInteger() == 2)
+ GotoState(&Klayman::stSleeping);
+ break;
+ case 0x480D:
+ GotoState(&Klayman::stPullHammerLever);
+ break;
+ case NM_KLAYMAN_PICKUP:
+ GotoState(&Klayman::stPickUpGeneric);
+ break;
+ case NM_KLAYMAN_PRESS_BUTTON:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnPressButton);
+ } else if (param.asInteger() == 2) {
+ GotoState(&Klayman::stStampFloorButton);
+ } else {
+ GotoState(&Klayman::stPressButtonSide);
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481B:
+ // TODO: It's not really a point but an x1/x2 pair
+ if (param.asPoint().y != 0) {
+ sub41CC40(param.asPoint().y, param.asPoint().x);
+ } else {
+ sub41CCE0(param.asPoint().x);
+ }
+ break;
+ case 0x481F:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stWonderAboutHalf);
+ } else if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWonderAboutAfter);
+ } else if (param.asInteger() == 3) {
+ GotoState(&Klayman::stTurnToUseHalf);
+ } else if (param.asInteger() == 4) {
+ GotoState(&Klayman::stTurnAwayFromUse);
+ } else {
+ GotoState(&Klayman::stWonderAbout);
+ }
+ break;
+ case 0x482D:
+ setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
+ gotoNextStateExt();
+ break;
+ case 0x4836:
+ if (param.asInteger() == 1) {
+ sendMessage(_parentScene, 0x2002, 0);
+ GotoState(&Klayman::stWakeUp);
+ }
+ break;
+ case 0x483F:
+ startSpecialWalkRight(param.asInteger());
+ break;
+ case 0x4840:
+ startSpecialWalkLeft(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
+// KmScene1002
+
+KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
+
+ setKlaymanIdleTable1();
+
+}
+
+void KmScene1002::xUpdate() {
+ if (_x >= 250 && _x <= 435 && _y >= 420) {
+ if (_idleTableNum == 0) {
+ // TODO setKlaymanIdleTable(stru_4B44C8);
+ _idleTableNum = 1;
+ }
+ } else if (_idleTableNum == 1) {
+ setKlaymanIdleTable1();
+ _idleTableNum = 0;
+ }
+}
+
+uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam &param) {
+ switch (messageNum) {
+ case 0x2001:
+ GotoState(&Klayman::stStandIdleSpecial);
+ break;
+ case 0x2007:
+ _otherSprite = (Sprite*)param.asEntity();
+ break;
+ case 0x4001:
+ case 0x4800:
+ startWalkToX(param.asPoint().x, false);
+ break;
+ case 0x4004:
+ GotoState(&Klayman::stTryStandIdle);
+ break;
+ case 0x4803:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stJumpAndFall);
+ } else if (param.asInteger() == 2) {
+ GotoState(&Klayman::stDropFromRing);
+ }
+ break;
+ case 0x4804:
+ GotoState(&Klayman::stPeekWall);
+ break;
+ case 0x4805:
+ switch (param.asInteger()) {
+ case 1:
+ GotoState(&Klayman::stJumpToRing1);
+ break;
+ case 2:
+ GotoState(&Klayman::stJumpToRing2);
+ break;
+ case 3:
+ GotoState(&Klayman::stJumpToRing3);
+ break;
+ case 4:
+ GotoState(&Klayman::stJumpToRing4);
+ break;
+ }
+ break;
+ case 0x480A:
+ GotoState(&Klayman::stMoveVenusFlyTrap);
+ break;
+ case 0x480D:
+ GotoState(&Klayman::stJumpToRingVenusFlyTrap);
+ break;
+ case NM_KLAYMAN_PRESS_BUTTON:
+ if (param.asInteger() == 0) {
+ GotoState(&Klayman::stPressDoorButton);
+ }
+ break;
+ case 0x4817:
+ setDoDeltaX(param.asInteger());
+ gotoNextStateExt();
+ break;
+ case 0x481B:
+ sub41CCE0(param.asInteger());
+ break;
+ case 0x4820:
+ sendMessage(_parentScene, 0x2005, 0);
+ GotoState(&Klayman::stContinueClimbLadderUp);
+ break;
+ case 0x4821:
+ sendMessage(_parentScene, 0x2005, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderDown);
+ break;
+ case 0x4822:
+ sendMessage(_parentScene, 0x2005, 0);
+ _destY = param.asInteger();
+ GotoState(&Klayman::stStartClimbLadderUp);
+ break;
+ case 0x4823:
+ sendMessage(_parentScene, 0x2006, 0);
+ GotoState(&Klayman::stClimbLadderHalf);
+ break;
+ case 0x482E:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stWalkToFrontNoStep);
+ } else {
+ GotoState(&Klayman::stWalkToFront);
+ }
+ break;
+ case 0x482F:
+ if (param.asInteger() == 1) {
+ GotoState(&Klayman::stTurnToFront);
+ } else {
+ GotoState(&Klayman::stTurnToBack);
+ }
+ break;
+ case 0x483F:
+ startSpecialWalkRight(param.asInteger());
+ break;
+ case 0x4840:
+ startSpecialWalkLeft(param.asInteger());
+ break;
+ }
+ return 0;
+}
+
// KmScene1004
KmScene1004::KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
@@ -3372,7 +3635,7 @@ uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam &param) {
// KmScene1201
KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _countdown(0) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// TODO setKlaymanIdleTable(dword_4AEF10, 3);
_flagF6 = true;
@@ -3389,19 +3652,19 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam &param) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x480A:
- GotoState(&KmScene1201::stMoveObject);
+ GotoState(&Klayman::stMoveObject);
break;
case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4813:
- GotoState(&KmScene1201::stFetchMatch);
+ GotoState(&Klayman::stFetchMatch);
break;
case 0x4814:
- GotoState(&KmScene1201::stTumbleHeadless);
+ GotoState(&Klayman::stTumbleHeadless);
break;
case 0x4815:
- GotoState(&KmScene1201::stCloseEyes);
+ GotoState(&Klayman::stCloseEyes);
break;
case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 0) {
@@ -3442,135 +3705,6 @@ uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam &param) {
return 0;
}
-void KmScene1201::upMoveObject() {
- if (_x >= 380)
- gotoNextStateExt();
- Klayman::update();
-}
-
-uint32 KmScene1201::hmMatch(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x51281850) {
- setGlobalVar(0x20A0C516, 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 KmScene1201::stFetchMatch() {
- if (!stStartAction(AnimationCallback(&KmScene1201::stFetchMatch))) {
- _status2 = 0;
- _acceptInput = false;
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- startAnimation(0x9CAA0218, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1201::hmMatch);
- NextState(&KmScene1201::stLightMatch);
- }
-}
-
-void KmScene1201::stLightMatch() {
- _status2 = 1;
- _acceptInput = false;
- setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0);
- startAnimation(0x1222A513, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&KmScene1201::hmMatch);
-}
-
-uint32 KmScene1201::hmMoveObject(int messageNum, const MessageParam &param, Entity *sender) {
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x01084280) {
- playSound(0, 0x405002D8);
- if (_attachedSprite) {
- sendMessage(_attachedSprite, 0x480B, 0);
- }
- } else if (param.asInteger() == 0x02421405) {
- if (_countdown != 0) {
- _countdown--;
- stMoveObjectSkipTurn();
- } else {
- SetMessageHandler(&Klayman::handleMessage41D480);
- }
- }
- break;
- }
- return Klayman::handleMessage41D480(messageNum, param, sender);
-}
-
-uint32 KmScene1201::hmTumbleHeadless(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
- switch (messageNum) {
- case 0x100D:
- if (param.asInteger() == 0x000F0082) {
- playSound(0, 0x74E2810F);
- }
- break;
- }
- return messageResult;
-}
-
-void KmScene1201::stMoveObject() {
- if (!stStartAction(AnimationCallback(&KmScene1201::stMoveObject))) {
- _status2 = 2;
- _acceptInput = false;
- _countdown = 8;
- setDoDeltaX(0);
- startAnimation(0x0C1CA072, 0, -1);
- SetUpdateHandler(&KmScene1201::upMoveObject);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::hmMoveObject);
- }
-}
-
-void KmScene1201::stMoveObjectSkipTurn() {
- _acceptInput = false;
- startAnimationByHash(0x0C1CA072, 0x01084280, 0);
- SetUpdateHandler(&KmScene1201::upMoveObject);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::hmMoveObject);
-}
-
-void KmScene1201::stTumbleHeadless() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::stTumbleHeadless))) {
- _status2 = 1;
- _acceptInput = false;
- setDoDeltaX(0);
- startAnimation(0x2821C590, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
- SetMessageHandler(&KmScene1201::hmTumbleHeadless);
- NextState(&Klayman::stTryStandIdle);
- sendMessage(_parentScene, 0x8000, 0);
- playSound(0, 0x62E0A356);
- }
-}
-
-void KmScene1201::stCloseEyes() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene1201::stCloseEyes))) {
- _status2 = 1;
- _acceptInput = false;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D360);
- }
-}
-
KmScene1303::KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -3662,7 +3796,7 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam &param) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x4804:
- GotoState(&KmScene1305::stCrashDown);
+ GotoState(&Klayman::stCrashDown);
break;
case 0x4817:
setDoDeltaX(param.asInteger());
@@ -3672,22 +3806,6 @@ uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam &param) {
return 0;
}
-void KmScene1305::stCrashDown() {
- playSound(0, 0x41648271);
- _status2 = 1;
- _acceptInput = false;
- startAnimationByHash(0x000BAB02, 0x88003000, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(NULL);
- SetMessageHandler(&Klayman::handleMessage41D480);
- NextState(&KmScene1305::stCrashDownFinished);
-}
-
-void KmScene1305::stCrashDownFinished() {
- setDoDeltaX(2);
- stTryStandIdle();
-}
-
KmScene1306::KmScene1306(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -3836,7 +3954,7 @@ uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam &param) {
}
break;
case 0x480D:
- GotoState(&KmScene1001::stUseLever);
+ GotoState(&Klayman::stUseLever);
break;
case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
@@ -4032,7 +4150,7 @@ uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam &param) {
}
break;
case 0x480D:
- GotoState(&KmScene1001::stUseLever);
+ GotoState(&Klayman::stUseLever);
break;
case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
@@ -4261,7 +4379,7 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam &param) {
}
break;
case 0x4803:
- GotoState(&KmScene1705::stFallSkipJump);
+ GotoState(&Klayman::stFallSkipJump);
break;
case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2) {
@@ -4329,26 +4447,6 @@ uint32 KmScene1705::xHandleMessage(int messageNum, const MessageParam &param) {
return messageResult;
}
-void KmScene1705::suFallSkipJump() {
- updateDeltaXY();
- HitRect *hitRect = _vm->_collisionMan->findHitRectAtPos(_x, _y + 10);
- if (hitRect->type == 0x5001) {
- _y = hitRect->rect.y1;
- processDelta();
- sendMessage(this, 0x1019, 0);
- }
-}
-
-void KmScene1705::stFallSkipJump() {
- _status2 = 2;
- _acceptInput = false;
- startAnimationByHash(0xB93AB151, 0x40A100F8, 0);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&KmScene1705::suFallSkipJump);
- SetMessageHandler(&Klayman::handleMessage41D360);
- NextState(&Klayman::stLandOnFeet);
-}
-
KmScene1901::KmScene1901(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -4852,11 +4950,11 @@ KmScene2207::KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam &param) {
switch (messageNum) {
case 0x2001:
- GotoState(&KmScene2207::stRidePlatform);
+ GotoState(&Klayman::stRidePlatform);
break;
case 0x2005:
suRidePlatform();
- GotoState(&KmScene2207::stTryStandIdle);
+ GotoState(&Klayman::stTryStandIdle);
break;
case 0x4001:
case 0x4800:
@@ -4866,7 +4964,7 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam &param) {
GotoState(&Klayman::stTryStandIdle);
break;
case 0x480D:
- GotoState(&KmScene2207::stInteractLever);
+ GotoState(&Klayman::stInteractLever);
break;
case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
@@ -4908,63 +5006,6 @@ uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam &param) {
return 0;
}
-void KmScene2207::suRidePlatform() {
- _x = _attachedSprite->getX() - 20;
- _y = _attachedSprite->getY() + 46;
- processDelta();
-}
-
-void KmScene2207::stRidePlatform() {
- if (!stStartActionFromIdle(AnimationCallback(&KmScene2207::stRidePlatform))) {
- _status2 = 1;
- _acceptInput = true;
- startAnimation(0x5420E254, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&KmScene2207::suRidePlatform);
- SetMessageHandler(&Klayman::handleMessage41D360);
- }
-}
-
-void KmScene2207::stInteractLever() {
- if (!stStartAction(AnimationCallback(&KmScene2207::stInteractLever))) {
- _status2 = 0;
- if (_isLeverDown) {
- stUseLeverRelease();
- } else {
- _acceptInput = false;
- startAnimation(0x0C303040, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&KmScene2207::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41E210);
- NextState(&KmScene2207::stPullLever);
- }
- }
-}
-
-void KmScene2207::stPullLever() {
- startAnimation(0x0D318140, 0, -1);
- sendMessage(_attachedSprite, 0x480F, 0);
- NextState(&KmScene2207::stLookLeverDown);
-}
-
-void KmScene2207::stLookLeverDown() {
- startAnimation(0x1564A2C0, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- NextState(&KmScene2207::stWaitLeverDown);
- _acceptInput = true;
- _isLeverDown = true;
-}
-
-void KmScene2207::stWaitLeverDown() {
- startAnimation(0x4464A440, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetSpriteUpdate(&Klayman::suUpdateDestX);
- SetMessageHandler(&Klayman::handleMessage41D360);
- _acceptInput = true;
- _isLeverDown = true;
-}
-
KmScene2242::KmScene2242(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -5156,7 +5197,7 @@ void KmScene2247::stStartWalkingResume() {
}
KmScene2401::KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _readyToSpit(false) {
+ : Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}
@@ -5170,7 +5211,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam &param) {
case 0x4004:
GotoState(&Klayman::stTryStandIdle);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -5225,7 +5266,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam &param) {
GotoState(&Klayman::stWonderAbout);
else {
_spitPipeIndex = sendMessage(_parentScene, 0x2000, 0);
- GotoState(&KmScene2401::stTrySpitIntoPipe);
+ GotoState(&Klayman::stTrySpitIntoPipe);
}
break;
case 0x483F:
@@ -5238,67 +5279,6 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam &param) {
return messageResult;
}
-uint32 KmScene2401::hmSpit(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = Klayman::handleMessage41D480(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 KmScene2401::stTrySpitIntoPipe() {
- if (_readyToSpit) {
- _contSpitPipe = true;
- _spitContDestPipeIndex = _spitPipeIndex;
- if (_canSpitPipe)
- spitIntoPipe();
- } else if (!stStartAction(AnimationCallback(&KmScene2401::stTrySpitIntoPipe))) {
- _status2 = 2;
- _acceptInput = true;
- _spitDestPipeIndex = _spitPipeIndex;
- _readyToSpit = true;
- _canSpitPipe = false;
- _contSpitPipe = false;
- startAnimation(0x1808B150, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2401::hmSpit);
- SetSpriteUpdate(NULL);
- }
-}
-
-void KmScene2401::spitIntoPipe() {
- _contSpitPipe = false;
- _spitDestPipeIndex = _spitContDestPipeIndex;
- _canSpitPipe = false;
- _acceptInput = false;
- startAnimation(0x1B08B553, 0, -1);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2401::hmSpit);
- SetSpriteUpdate(NULL);
- NextState(&KmScene2401::stContSpitIntoPipe);
-}
-
-void KmScene2401::stContSpitIntoPipe() {
- _canSpitPipe = true;
- _acceptInput = true;
- startAnimationByHash(0x1808B150, 0x16401CA6, 0);
- SetUpdateHandler(&Klayman::update);
- SetMessageHandler(&KmScene2401::hmSpit);
- SetSpriteUpdate(NULL);
-}
-
KmScene2402::KmScene2402(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
@@ -5325,10 +5305,10 @@ uint32 KmScene2402::xHandleMessage(int messageNum, const MessageParam &param) {
GotoState(&Klayman::stPeekWall);
}
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -5389,10 +5369,10 @@ uint32 KmScene2403::xHandleMessage(int messageNum, const MessageParam &param) {
case 0x480D:
GotoState(&Klayman::stPullCord);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
- case 0x4816:
+ case NM_KLAYMAN_PRESS_BUTTON:
if (param.asInteger() == 1) {
GotoState(&Klayman::stTurnPressButton);
} else if (param.asInteger() == 2) {
@@ -5480,7 +5460,7 @@ uint32 KmScene2406::xHandleMessage(int messageNum, const MessageParam &param) {
GotoState(&Klayman::stPeekWall);
}
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2)
GotoState(&Klayman::stPickUpNeedle);
else if (param.asInteger() == 1)
@@ -5888,7 +5868,7 @@ uint32 KmScene2806::xHandleMessage(int messageNum, const MessageParam &param) {
startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4831:
- GotoState(&KmScene2806::stGrow);
+ GotoState(&Klayman::stGrow);
break;
case 0x4832:
if (param.asInteger() == 1) {
@@ -5946,7 +5926,7 @@ uint32 KmScene2809::xHandleMessage(int messageNum, const MessageParam &param) {
startWalkToX(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4831:
- GotoState(&KmScene2809::stGrow);
+ GotoState(&Klayman::stGrow);
break;
case 0x4832:
if (param.asInteger() == 1) {
@@ -6033,7 +6013,7 @@ uint32 KmScene2810::xHandleMessage(int messageNum, const MessageParam &param) {
if (param.asInteger() == 3)
GotoState(&Klayman::sub421230);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
GotoState(&Klayman::stPickUpGeneric);
break;
case 0x4817:
@@ -6122,7 +6102,7 @@ uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam &param) {
_destY = param.asInteger();
GotoState(&Klayman::stJumpToGrabFall);
break;
- case 0x4812:
+ case NM_KLAYMAN_PICKUP:
if (param.asInteger() == 2)
GotoState(&Klayman::stPickUpNeedle);
else if (param.asInteger() == 1)
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 77001c3424..4d0c969a10 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -129,10 +129,10 @@ public:
void spriteUpdate41F300();
void suWalkingTestExit();
- uint32 handleMessage41D360(int messageNum, const MessageParam &param, Entity *sender);
- uint32 handleMessage41D480(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmLowLevel(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmLowLevelAnimation(int messageNum, const MessageParam &param, Entity *sender);
uint32 hmWalking(int messageNum, const MessageParam &param, Entity *sender);
- uint32 handleMessage41E210(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmLever(int messageNum, const MessageParam &param, Entity *sender);
void setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount);
void setKlaymanIdleTable1();
@@ -214,6 +214,59 @@ public:
void suRidePlatformDown();
void stRidePlatformDown();
+ void stCrashDown();
+ void stCrashDownFinished();
+
+ void upSpitOutFall();
+ uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmStandIdleSpecial(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmPressDoorButton(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmHitByBoxingGlove(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmJumpAndFall(int messageNum, const MessageParam &param, Entity *sender);
+ void suFallDown();
+ void stJumpToRingVenusFlyTrap();
+ void stStandIdleSpecial();
+ void stSpitOutFall0();
+ void stFalling();
+ void stSpitOutFall2();
+ void stFallTouchdown();
+ void stJumpAndFall();
+ void stDropFromRing();
+ void stPressDoorButton();
+ void stHitByBoxingGlove();
+ void stHitByBoxingGloveDone();
+ void stMoveVenusFlyTrap();
+ void stContinueMovingVenusFlyTrap();
+ void stMoveVenusFlyTrapDone();
+
+ void suFallSkipJump();
+ void stFallSkipJump();
+
+ void upMoveObject();
+ uint32 hmMatch(int messageNum, const MessageParam &param, Entity *sender);
+ void stFetchMatch();
+ void stLightMatch();
+ uint32 hmMoveObject(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 hmTumbleHeadless(int messageNum, const MessageParam &param, Entity *sender);
+ void stMoveObject();
+ void stContinueMoveObject();
+ void stTumbleHeadless();
+ void stCloseEyes();
+
+ uint32 hmSpit(int messageNum, const MessageParam &param, Entity *sender);
+ void stTrySpitIntoPipe();
+ void spitIntoPipe();
+ void stContSpitIntoPipe();
+
+ void suRidePlatform();
+ void stRidePlatform();
+ void stInteractLever();
+ void stPullLever();
+ void stLookLeverDown();
+ void stWaitLeverDown();
+
void startWalkingResume(int16 frameIncr);
protected:
@@ -249,7 +302,20 @@ protected:
int16 _platformDeltaY;
+ Sprite *_otherSprite;
+ int _idleTableNum;
+
+ int _moveObjectCountdown;
+
+ bool _canSpitPipe;
+ bool _contSpitPipe;
+ bool _readyToSpit;
+ uint32 _spitPipeIndex;
+ uint32 _spitDestPipeIndex;
+ uint32 _spitContDestPipeIndex;
+
virtual void xUpdate();
+ // TODO Check if this can be turned into a void result
virtual uint32 xHandleMessage(int messageNum, const MessageParam &param);
void stIdlePickEar();
@@ -347,33 +413,8 @@ class KmScene1002 : public Klayman {
public:
KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- Sprite *_otherSprite;
- int _idleTableNum;
void xUpdate();
uint32 xHandleMessage(int messageNum, const MessageParam &param);
- void upSpitOutFall();
- uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender);
- uint32 hmStandIdleSpecial(int messageNum, const MessageParam &param, Entity *sender);
- uint32 hmPressDoorButton(int messageNum, const MessageParam &param, Entity *sender);
- uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender);
- uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam &param, Entity *sender);
- uint32 hmHitByBoxingGlove(int messageNum, const MessageParam &param, Entity *sender);
- uint32 hmJumpAndFall(int messageNum, const MessageParam &param, Entity *sender);
- void suFallDown();
- void stJumpToRingVenusFlyTrap();
- void stStandIdleSpecial();
- void stSpitOutFall0();
- void stFalling();
- void stSpitOutFall2();
- void stFallTouchdown();
- void stJumpAndFall();
- void stDropFromRing();
- void stPressDoorButton();
- void stHitByBoxingGlove();
- void stHitByBoxingGloveDone();
- void stMoveVenusFlyTrap();
- void stContinueMovingVenusFlyTrap();
- void stMoveVenusFlyTrapDone();
};
class KmScene1004 : public Klayman {
@@ -394,18 +435,7 @@ class KmScene1201 : public Klayman {
public:
KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- int _countdown;
uint32 xHandleMessage(int messageNum, const MessageParam &param);
- void upMoveObject();
- uint32 hmMatch(int messageNum, const MessageParam &param, Entity *sender);
- void stFetchMatch();
- void stLightMatch();
- uint32 hmMoveObject(int messageNum, const MessageParam &param, Entity *sender);
- uint32 hmTumbleHeadless(int messageNum, const MessageParam &param, Entity *sender);
- void stMoveObject();
- void stMoveObjectSkipTurn();
- void stTumbleHeadless();
- void stCloseEyes();
};
class KmScene1303 : public Klayman {
@@ -427,8 +457,6 @@ public:
KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam &param);
- void stCrashDown();
- void stCrashDownFinished();
};
class KmScene1306 : public Klayman {
@@ -485,8 +513,6 @@ public:
KmScene1705(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam &param);
- void suFallSkipJump();
- void stFallSkipJump();
};
class KmScene1901 : public Klayman {
@@ -548,12 +574,6 @@ public:
KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam &param);
- void suRidePlatform();
- void stRidePlatform();
- void stInteractLever();
- void stPullLever();
- void stLookLeverDown();
- void stWaitLeverDown();
};
class KmScene2242 : public Klayman {
@@ -587,17 +607,7 @@ class KmScene2401 : public Klayman {
public:
KmScene2401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
- bool _canSpitPipe;
- bool _contSpitPipe;
- bool _readyToSpit;
- uint32 _spitPipeIndex;
- uint32 _spitDestPipeIndex;
- uint32 _spitContDestPipeIndex;
uint32 xHandleMessage(int messageNum, const MessageParam &param);
- uint32 hmSpit(int messageNum, const MessageParam &param, Entity *sender);
- void stTrySpitIntoPipe();
- void spitIntoPipe();
- void stContSpitIntoPipe();
};
class KmScene2402 : public Klayman {