From 4389d32974cd0965624d30b6566fcc8e1c2a72b4 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Mon, 21 Jan 2013 11:34:50 +0000 Subject: NEVERHOOD: Rename "Klayman" to "Klaymen" (the correct name of the game's hero) --- engines/neverhood/gamemodule.cpp | 2 +- engines/neverhood/gamevars.h | 14 +- engines/neverhood/klayman.cpp | 6240 -------------------------------------- engines/neverhood/klayman.h | 764 ----- engines/neverhood/klaymen.cpp | 6240 ++++++++++++++++++++++++++++++++++++++ engines/neverhood/klaymen.h | 764 +++++ engines/neverhood/messages.h | 8 +- engines/neverhood/module.mk | 2 +- engines/neverhood/module1000.cpp | 212 +- engines/neverhood/module1000.h | 32 +- engines/neverhood/module1100.cpp | 22 +- engines/neverhood/module1200.cpp | 84 +- engines/neverhood/module1200.h | 24 +- engines/neverhood/module1300.cpp | 144 +- engines/neverhood/module1300.h | 6 +- engines/neverhood/module1400.cpp | 140 +- engines/neverhood/module1400.h | 8 +- engines/neverhood/module1600.cpp | 62 +- engines/neverhood/module1600.h | 6 +- engines/neverhood/module1700.cpp | 40 +- engines/neverhood/module1800.cpp | 2 +- engines/neverhood/module1900.cpp | 8 +- engines/neverhood/module2000.cpp | 24 +- engines/neverhood/module2100.cpp | 50 +- engines/neverhood/module2100.h | 4 +- engines/neverhood/module2200.cpp | 266 +- engines/neverhood/module2200.h | 14 +- engines/neverhood/module2400.cpp | 82 +- engines/neverhood/module2400.h | 6 +- engines/neverhood/module2500.cpp | 40 +- engines/neverhood/module2500.h | 6 +- engines/neverhood/module2700.cpp | 4 +- engines/neverhood/module2800.cpp | 346 +-- engines/neverhood/module2800.h | 16 +- engines/neverhood/resource.cpp | 6 +- engines/neverhood/resource.h | 2 +- engines/neverhood/scene.cpp | 74 +- engines/neverhood/scene.h | 36 +- 38 files changed, 7900 insertions(+), 7900 deletions(-) delete mode 100644 engines/neverhood/klayman.cpp delete mode 100644 engines/neverhood/klayman.h create mode 100644 engines/neverhood/klaymen.cpp create mode 100644 engines/neverhood/klaymen.h (limited to 'engines') diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp index f22a0d12e5..cf56522fbd 100644 --- a/engines/neverhood/gamemodule.cpp +++ b/engines/neverhood/gamemodule.cpp @@ -395,7 +395,7 @@ void GameModule::startup() { setSubVar(VA_CURR_WATER_PIPES_LEVEL, 2, 2); setSubVar(VA_CURR_WATER_PIPES_LEVEL, 3, 0); setSubVar(VA_CURR_WATER_PIPES_LEVEL, 4, 4); - setGlobalVar(V_KLAYMAN_SMALL, 1); + setGlobalVar(V_KLAYMEN_SMALL, 1); setGlobalVar(V_SHRINK_LIGHTS_ON, 0); // <<_rnd->getRandomNumber(64 - 1) + 24; -} - -void Klayman::upSitIdleTeleporter() { - update(); - _idleCounter++; - if (_idleCounter >= _idleCounterMax) { - _idleCounter = 0; - if (_idleTable) { - int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue); - for (int i = 0; i < _idleTableCount; i++) { - if (randomValue < _idleTable[i].value) { - (this->*(_idleTable[i].callback))(); - _idleCounterMax = _vm->_rnd->getRandomNumber(128 - 1) + 24; - break; - } - randomValue -= _idleTable[i].value; - } - } - } else if (++_blinkCounter >= _blinkCounterMax) { - _blinkCounter = 0; - _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24; - stSitIdleTeleporterBlink(); - } -} - -void Klayman::stSitIdleTeleporterBlink() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x5C24C018, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); - NextState(&Klayman::stSitIdleTeleporterBlinkSecond); -} - -void Klayman::stSitIdleTeleporterBlinkSecond() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x5C24C018, 0, -1); - SetUpdateHandler(&Klayman::upSitIdleTeleporter); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(NULL); -} - -void Klayman::stPickUpNeedle() { - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - if (!stStartAction(AnimationCallback(&Klayman::stPickUpNeedle))) { - _status2 = 1; - _acceptInput = false; - startAnimation(0x1449C169, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPickUpObject); - SetSpriteUpdate(NULL); - } -} - -void Klayman::stPickUpTube() { - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - if (!stStartAction(AnimationCallback(&Klayman::stPickUpTube))) { - _status2 = 1; - _acceptInput = false; - startAnimation(0x0018C032, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPickUpTube); - SetSpriteUpdate(NULL); - } -} - -uint32 Klayman::hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0xC1380080) { - sendMessage(_attachedSprite, 0x4806, 0); - playSound(0, 0xC8004340); - } else if (param.asInteger() == 0x02B20220) { - playSound(0, 0xC5408620); - } else if (param.asInteger() == 0x03020231) { - playSound(0, 0xD4C08010); - } else if (param.asInteger() == 0x67221A03) { - playSound(0, 0x44051000); - } else if (param.asInteger() == 0x925A0C1E) { - playSound(0, 0x40E5884D); - } - break; - } - return messageResult; -} - -void Klayman::stTurnToUseInTeleporter() { - _status2 = 0; - _acceptInput = false; - startAnimation(0xD229823D, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stReturnFromUseInTeleporter() { - _status2 = 0; - _acceptInput = false; - startAnimation(0x9A2801E0, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stStepOver() { - if (!stStartAction(AnimationCallback(&Klayman::stStepOver))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x004AA310, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmStartWalking); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -void Klayman::stSitInTeleporter() { - if (!stStartAction(AnimationCallback(&Klayman::stSitInTeleporter))) { - _status2 = 0; - _acceptInput = false; - startAnimation(0x392A0330, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmSitInTeleporter); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -uint32 Klayman::hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x001A2832) { - playSound(0, 0xC0E4884C); - } - break; - } - return messageResult; -} - -void Klayman::stGetUpFromTeleporter() { - _status2 = 0; - _acceptInput = false; - startAnimation(0x913AB120, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -///////////////////////////////////////////////////////////////// - -void Klayman::stopWalking() { - _destX = _x; - if (!_isWalking && !_isSneaking && !_isLargeStep) { - gotoState(NULL); - gotoNextStateExt(); - } -} - -void Klayman::startIdleAnimation(uint32 fileHash, AnimationCb callback) { - debug("startIdleAnimation(%08X)", fileHash); - NextState(callback); - SetUpdateHandler(&Klayman::upIdleAnimation); -} - -void Klayman::upIdleAnimation() { - gotoNextStateExt(); - update(); -} - -bool Klayman::stStartActionFromIdle(AnimationCb callback) { - if (_status2 == 2) { - _status2 = 1; - _acceptInput = false; - startAnimation(0x9A7020B8, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmStartAction); - SetSpriteUpdate(NULL); - NextState(callback); - return true; - } - return false; -} - -void Klayman::gotoNextStateExt() { - if (_finalizeStateCb) { - AnimationCb cb = _finalizeStateCb; - _finalizeStateCb = NULL; - (this->*cb)(); - } - if (_nextStateCb) { - AnimationCb cb = _nextStateCb; - _nextStateCb = NULL; - (this->*cb)(); - } else { - // Inform the scene that the current Klayman animation sequence has finished - sendMessage(_parentScene, 0x1006, 0); - } -} - -void Klayman::sub41C770() { - _flagFA = false; - _status3 = 1; -} - -void Klayman::sub41C790() { - if (_flagFA) - _status3 = 0; -} - -void Klayman::stTryStandIdle() { - if (!stStartActionFromIdle(AnimationCallback(&Klayman::stTryStandIdle))) { - _status2 = 1; - _acceptInput = true; - startAnimation(0x5420E254, 0, -1); - SetUpdateHandler(&Klayman::upStandIdle); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(NULL); - _idleCounter = 0; - _blinkCounter = 0; - _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24; - } -} - -void Klayman::upStandIdle() { - update(); - if (++_idleCounter >= 720) { - _idleCounter = 0; - if (_idleTable) { - int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue - 1); - for (int i = 0; i < _idleTableCount; i++) { - if (randomValue < _idleTable[i].value) { - (this->*(_idleTable[i].callback))(); - break; - } - randomValue -= _idleTable[i].value; - } - } - } else if (++_blinkCounter >= _blinkCounterMax) { - _blinkCounter = 0; - _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24; - stIdleBlink(); - } -} - -uint32 Klayman::hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender) { - Sprite::handleMessage(messageNum, param, sender); - uint32 messageResult = xHandleMessage(messageNum, param); - switch (messageNum) { - case 0x1008: - messageResult = _acceptInput; - break; - case 0x1014: - _attachedSprite = (Sprite*)(param.asEntity()); - break; - case 0x1019: - gotoNextStateExt(); - break; - case 0x101C: - sub41C770(); - break; - case 0x1021: - sub41C790(); - break; - case 0x481C: - _status3 = param.asInteger(); - _flagFA = true; - messageResult = 1; - break; - case 0x482C: - if (param.asInteger() != 0) { - _pathPoints = _dataResource.getPointArray(param.asInteger()); - } else { - _pathPoints = NULL; - } - break; - } - return messageResult; -} - -void Klayman::stIdleBlink() { - _status2 = 1; - _acceptInput = true; - startAnimation(0x5900C41E, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); - NextState(&Klayman::stStandAround); -} - -uint32 Klayman::hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevel(messageNum, param, sender); - switch (messageNum) { - case 0x3002: - gotoNextStateExt(); - break; - } - return messageResult; -} - -void Klayman::stStandAround() { - _status2 = 1; - _acceptInput = true; - startAnimation(0x5420E254, 0, -1); - SetUpdateHandler(&Klayman::upStandIdle); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(NULL); -} - -uint32 Klayman::hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x271AA210) { - playSound(0, 0x4924AAC4); - } else if (param.asInteger() == 0x2B22AA81) { - playSound(0, 0x0A2AA8E0); - } - break; - } - return messageResult; -} - - -void Klayman::startWalkToX(int16 x, bool flag) { - int16 xdiff = ABS(x - _x); - if (x == _x) { - _destX = x; - if (!_isWalking && !_isSneaking && !_isLargeStep) { - gotoState(NULL); - gotoNextStateExt(); - } - } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) { - _destX = x; - gotoState(NULL); - gotoNextStateExt(); - } else if (xdiff <= 42 && _status3 != 3) { - if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) { - _destX = x; - } else { - _destX = x; - GotoState(&Klayman::stSneak); - } - } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) { - _destX = x; - } else if (flag) { - _destX = x; - GotoState(&Klayman::stStartWalkingExt); - } else { - _destX = x; - GotoState(&Klayman::stStartWalking); - } -} - -void Klayman::stWakeUp() { - _status2 = 1; - _acceptInput = false; - startAnimation(0x527AC970, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stSleeping() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x5A38C110, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmSleeping); - SetSpriteUpdate(NULL); -} - -uint32 Klayman::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 Klayman::stStartAction(AnimationCb callback3) { - if (_status2 == 1) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x5C7080D4, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmStartAction); - SetSpriteUpdate(&Klayman::suAction); - NextState(callback3); - return true; - } else { - _x = _destX; - return false; - } -} - -void Klayman::suAction() { - - int16 xdiff = _destX - _x; - - if (_doDeltaX) { - _x -= _deltaX; - } else { - _x += _deltaX; - } - _deltaX = 0; - - if (_doDeltaY) { - _y -= _deltaY; - } else { - _y += _deltaY; - } - _deltaY = 0; - - if (_frameChanged) { - if (xdiff > 6) - _x += 6; - else if (xdiff < -6) - _x -= 6; - else - _x = _destX; - } - - updateBounds(); - -} - -void Klayman::suSneaking() { - - int16 xdiff = _destX - _x; - - if (_currFrameIndex == 9) { - if (xdiff > 26) - _deltaX += xdiff - 26; - else if (xdiff < -26) - _deltaX -= xdiff + 26; - } - - if (xdiff > _deltaX) - xdiff = _deltaX; - else if (xdiff < -_deltaX) - xdiff = -_deltaX; - _deltaX = 0; - - if (_destX != _x) { - HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y); - _x += xdiff; - if (_pathPoints) { - walkAlongPathPoints(); - } else { - HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y); - if (hitRectNext->type == 0x5002) { - _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2); - } else if (hitRectNext->type == 0x5003) { - _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2); - } else if (hitRectPrev->type == 0x5002) { - if (xdiff > 0) { - _y = hitRectPrev->rect.y2; - } else { - _y = hitRectPrev->rect.y1; - } - } else if (hitRectPrev->type == 0x5003) { - if (xdiff < 0) { - _y = hitRectPrev->rect.y2; - } else { - _y = hitRectPrev->rect.y1; - } - } - } - updateBounds(); - } - -} - -void Klayman::stSneak() { - _status2 = 1; - _isSneaking = true; - _acceptInput = true; - setDoDeltaX(_destX < _x ? 1 : 0); - startAnimation(0x5C48C506, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmSneaking); - SetSpriteUpdate(&Klayman::suSneaking); - FinalizeState(&Klayman::evSneakingDone); -} - -void Klayman::evSneakingDone() { - _isSneaking = false; -} - -uint32 Klayman::hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevel(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x32180101) { - playSound(0, 0x4924AAC4); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, 0x0A2AA8E0); - } else if (param.asInteger() == 0x32188010) { - playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); - } else if (param.asInteger() == 0x02A2909C) { - playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA); - } - break; - case 0x3002: - _x = _destX; - gotoNextStateExt(); - break; - } - return messageResult; -} - -void Klayman::stStartWalking() { - if (!stStartActionFromIdle(AnimationCallback(&Klayman::stStartWalking))) { - _status2 = 0; - _isWalking = true; - _acceptInput = true; - setDoDeltaX(_destX < _x ? 1 : 0); - startAnimation(0x242C0198, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmStartWalking); - SetSpriteUpdate(&Klayman::suWalkingTestExit); - NextState(&Klayman::stWalkingFirst); - FinalizeState(&Klayman::evStartWalkingDone); - } -} - -void Klayman::evStartWalkingDone() { - _isWalking = false; -} - -uint32 Klayman::hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x32180101) { - playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA); - } - break; - } - return messageResult; -} - -void Klayman::stWalkingFirst() { - _status2 = 0; - _isWalking = true; - _acceptInput = true; - startAnimation(0x1A249001, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalking); - SetSpriteUpdate(&Klayman::suWalkingFirst); - NextState(&Klayman::stUpdateWalkingFirst); - FinalizeState(&Klayman::evStartWalkingDone); -} - -void Klayman::suWalkingFirst() { - SetSpriteUpdate(&Klayman::suWalkingTestExit); - _deltaX = 0; -} - -uint32 Klayman::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevel(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x32180101) { - playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA); - } - break; - } - return messageResult; -} - -void Klayman::stUpdateWalkingFirst() { - if (_status3 == 2) { - gotoNextStateExt(); - } else if (_status3 == 3) { - stWalkingOpenDoor(); - } else { - _isSneaking = true; - _acceptInput = true; - if (ABS(_destX - _x) <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) { - if (_status3 == 0) { - _status2 = 1; - startAnimation(0xF234EE31, 0, -1); - } else { - _status2 = 2; - startAnimation(0xF135CC21, 0, -1); - } - } else if (ABS(_destX - _x) <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) { - if (_status3 == 0) { - _status2 = 1; - startAnimation(0x8604A152, 0, -1); - } else { - _status2 = 2; - startAnimation(0xA246A132, 0, -1); - } - } - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmSneaking); - SetSpriteUpdate(&Klayman::suSneaking); - FinalizeState(&Klayman::evSneakingDone); - } -} - -void Klayman::suWalkingTestExit() { - int16 xdiff = ABS(_destX - _x); - int16 xdelta = _destX - _x; - - if (xdelta > _deltaX) - xdelta = _deltaX; - else if (xdelta < -_deltaX) - xdelta = -_deltaX; - - _deltaX = 0; - - if (xdiff == 0 || - (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) || - (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) || - (_status3 == 3 && xdiff < 30) || - (_status3 == 3 && xdiff < 150 && _currFrameIndex >= 6)) { - sendMessage(this, 0x1019, 0); - } else { - HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y); - _x += xdelta; - if (_pathPoints) { - walkAlongPathPoints(); - } else { - HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y); - if (hitRectNext->type == 0x5002) { - _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2); - } else if (hitRectNext->type == 0x5003) { - _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2); - } else if (hitRectPrev->type == 0x5002) { - _y = xdelta > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1; - } else if (hitRectPrev->type == 0x5003) { - _y = xdelta < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1; - } else if (_flagF6 && xdelta != 0) { - if (hitRectNext->type == 0x5000) { - _y++; - } else if (hitRectNext->type == 0x5001 && _y > hitRectNext->rect.y1) { - _y--; - } - } - } - updateBounds(); - } - -} - -uint32 Klayman::hmLever(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); - } - break; - } - return messageResult; -} - -void Klayman::stPickUpGeneric() { - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - if (!stStartAction(AnimationCallback(&Klayman::stPickUpGeneric))) { - _status2 = 1; - _acceptInput = false; - startAnimation(0x1C28C178, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPickUpObject); - SetSpriteUpdate(NULL); - } -} - -uint32 Klayman::hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0xC1380080) { - sendMessage(_attachedSprite, 0x4806, 0); - playSound(0, 0x40208200); - } else if (param.asInteger() == 0x02B20220) { - playSound(0, 0xC5408620); - } else if (param.asInteger() == 0x03020231) { - playSound(0, 0xD4C08010); - } else if (param.asInteger() == 0x67221A03) { - playSound(0, 0x44051000); - } else if (param.asInteger() == 0x2EAE0303) { - playSound(0, 0x03630300); - } else if (param.asInteger() == 0x61CE4467) { - playSound(0, 0x03630300); - } - break; - } - return messageResult; - -} - -void Klayman::stPressButton() { - if (!stStartAction(AnimationCallback(&Klayman::stPressButton))) { - _status2 = 2; - _acceptInput = true; - startAnimation(0x1C02B03D, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPressButton); - SetSpriteUpdate(NULL); - } -} - -uint32 Klayman::hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x0D01B294) { - sendMessage(_attachedSprite, 0x480B, 0); - } else if (param.asInteger() == 0x32180101) { - playSound(0, 0x4924AAC4); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, 0x0A2AA8E0); - } - break; - } - return messageResult; -} - -void Klayman::stPressFloorButton() { - if (!stStartAction(AnimationCallback(&Klayman::stPressFloorButton))) { - _status2 = 2; - _acceptInput = true; - startAnimation(0x1C16B033, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPressButton); - SetSpriteUpdate(NULL); - } -} - -void Klayman::stPressButtonSide() { - if (!stStartActionFromIdle(AnimationCallback(&Klayman::stPressButtonSide))) { - _status2 = 1; - _acceptInput = true; - startAnimation(0x1CD89029, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPressButton); - SetSpriteUpdate(&Klayman::suAction); - } -} - -void Klayman::startSpecialWalkRight(int16 x) { - if (_x == x) { - _destX = x; - gotoState(NULL); - gotoNextStateExt(); - } else if (_x < x) { - startWalkToX(x, false); - } else if (_x - x <= 105) { - startWalkToXExt(x); - } else { - startWalkToX(x, false); - } -} - -void Klayman::startSpecialWalkLeft(int16 x) { - if (x == _x) { - _destX = x; - gotoState(NULL); - gotoNextStateExt(); - } else if (x < _x) { - startWalkToX(x, false); - } else if (x - _x <= 105) { - startWalkToXExt(x); - } else { - startWalkToX(x, false); - } -} - -void Klayman::startWalkToXSmall(int16 x) { - _status3 = 2; - if (_x == x) { - _destX = x; - if (_isWalking) { - GotoState(NULL); - gotoNextStateExt(); - } - } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) { - _destX = x; - } else { - _destX = x; - GotoState(&Klayman::stStartWalkingSmall); - } -} - -void Klayman::stStartWalkingSmall() { - _isWalking = true; - _acceptInput = true; - _status3 = 2; - setDoDeltaX(_destX < _x ? 1 : 0); - startAnimation(0x3A4CD934, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkingSmall); - SetSpriteUpdate(&Klayman::suWalkingTestExit); - FinalizeState(&Klayman::evStartWalkingDone); -} - -uint32 Klayman::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevel(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x32180101) - playSound(0, 0x4924AAC4); - else if (param.asInteger() == 0x0A2A9098) - playSound(0, 0x0A2AA8E0); - } - return messageResult; -} - -void Klayman::stStandIdleSmall() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x90D0D1D0, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(NULL); -} - -void Klayman::stWonderAboutAfterSmall() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x11C8D156, 30, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stWonderAboutHalfSmall() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x11C8D156, 0, 10); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stWonderAboutSmall() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x11C8D156, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stWalkToFrontNoStepSmall() { - _status2 = 0; - _acceptInput = false; - startAnimationByHash(0x3F9CC394, 0x14884392, 0); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkFrontBackSmall); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -uint32 Klayman::hmWalkFrontBackSmall(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() == 0x110010D1) - sendMessage(_parentScene, 0x482B, 0); - else if (param.asInteger() == 0x32180101) - playSound(0, 0x4924AAC4); - else if (param.asInteger() == 0x0A2A9098) - playSound(0, 0x0A2AA8E0); - break; - } - return messageResult; -} - -void Klayman::stWalkToFront2Small() { - _status2 = 0; - _acceptInput = false; - startAnimation(0x2F1C4694, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkFrontBackSmall); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -void Klayman::stWalkToFrontSmall() { - _status2 = 0; - _acceptInput = false; - startAnimation(0x3F9CC394, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkFrontBackSmall); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -void Klayman::stTurnToBackHalfSmall() { - _status2 = 0; - _acceptInput = false; - startAnimationByHash(0x37ECD436, 0, 0x8520108C); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkFrontBackSmall); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -void Klayman::stTurnToBackWalkSmall() { - _status2 = 0; - _acceptInput = false; - startAnimation(0x16EDDE36, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkFrontBackSmall); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -void Klayman::stTurnToBackSmall() { - _status2 = 0; - _acceptInput = false; - startAnimation(0x37ECD436, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkFrontBackSmall); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -void Klayman::stPullCord() { - if (!stStartAction(AnimationCallback(&Klayman::stPullCord))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x3F28E094, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPullReleaseCord); - SetSpriteUpdate(NULL); - NextState(&Klayman::stReleaseCord); - } -} - -void Klayman::stReleaseCord() { - _acceptInput = false; - startAnimation(0x3A28C094, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPullReleaseCord); - SetSpriteUpdate(NULL); -} - -uint32 Klayman::hmPullReleaseCord(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); - sendMessage(_attachedSprite, 0x480F, 0); - } else if (param.asInteger() == 0x88001184) { - sendMessage(_attachedSprite, 0x482B, 0); - } - break; - } - return messageResult; -} - -void Klayman::stUseTube() { - if (!stStartAction(AnimationCallback(&Klayman::stUseTube))) { - _status2 = 1; - _acceptInput = false; - startAnimation(0x1A38A814, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmUseTube); - SetSpriteUpdate(NULL); - } -} - -uint32 Klayman::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x02B20220) - playSound(0, 0xC5408620); - else if (param.asInteger() == 0x0A720138) - playSound(0, 0xD4C08010); - else if (param.asInteger() == 0x03020231) - playSound(0, 0xD4C08010); - else if (param.asInteger() == 0xB613A180) - playSound(0, 0x44051000); - else if (param.asInteger() == 0x67221A03) - playSound(0, 0x44051000); - else if (param.asInteger() == 0x038A010B) - playSound(0, 0x00018040); - else if (param.asInteger() == 0x422B0280) - playSound(0, 0x166FC6E0); - else if (param.asInteger() == 0x925A0C1E) - playSound(0, 0x40E5884D); - break; - } - return messageResult; -} - -void Klayman::stWalkingFirstExt() { - _status2 = 0; - _isWalking = true; - _acceptInput = true; - startAnimation(0x5A2CBC00, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalking); - SetSpriteUpdate(&Klayman::suWalkingFirst); - NextState(&Klayman::stUpdateWalkingFirst); - FinalizeState(&Klayman::evStartWalkingDone); -} - -void Klayman::stStartWalkingExt() { - if (!stStartActionFromIdle(AnimationCallback(&Klayman::stStartWalkingExt))) { - _status2 = 0; - _isWalking = true; - _acceptInput = true; - setDoDeltaX(_destX < _x ? 1 : 0); - startAnimation(0x272C1199, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmStartWalking); - SetSpriteUpdate(&Klayman::suWalkingTestExit); - NextState(&Klayman::stWalkingFirstExt); - FinalizeState(&Klayman::evStartWalkingDone); - } -} - -void Klayman::sub41CC40(int16 x1, int16 x2) { - if (_x > x1) { - if (_x == x1 + x2) { - _destX = x1 + x2; - gotoState(NULL); - gotoNextStateExt(); - } else if (_x < x1 + x2) { - startWalkToXExt(x1 + x2); - } else { - startWalkToX(x1 + x2, false); - } - } else { - if (_x == x1 - x2) { - _destX = x1 - x2; - gotoState(NULL); - gotoNextStateExt(); - } else if (_x > x1 - x2) { - startWalkToXExt(x1 - x2); - } else { - startWalkToX(x1 - x2, false); - } - } -} - -void Klayman::startWalkToXExt(int16 x) { - int16 xdiff = ABS(x - _x); - if (x == _x) { - _destX = x; - if (!_isWalking && !_isSneaking && !_isLargeStep) { - gotoState(NULL); - gotoNextStateExt(); - } - } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) { - _destX = x; - gotoState(NULL); - gotoNextStateExt(); - } else if (xdiff <= 42 && _status3 != 3) { - if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) { - _destX = x; - } else { - _destX = x; - GotoState(&Klayman::stSneak); - } - } else if (_isLargeStep && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) { - _destX = x; - } else { - _destX = x; - GotoState(&Klayman::stLargeStep); - } -} - -void Klayman::stLargeStep() { - _status2 = 2; - _isLargeStep = true; - _acceptInput = true; - setDoDeltaX(_destX >= _x ? 1 : 0); - startAnimation(0x08B28116, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLargeStep); - SetSpriteUpdate(&Klayman::suLargeStep); - FinalizeState(&Klayman::evLargeStepDone); -} - -void Klayman::evLargeStepDone() { - _isLargeStep = false; -} - -void Klayman::suLargeStep() { - int16 xdiff = _destX - _x; - - if (_doDeltaX) { - _deltaX = -_deltaX; - } - - if (_currFrameIndex == 7) { - _deltaX = xdiff; - } - - if ((xdiff > 0 && xdiff > _deltaX) || (xdiff < 0 && xdiff < _deltaX)) - xdiff = _deltaX; - - _deltaX = 0; - - if (_x != _destX) { - HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y); - _x += xdiff; - if (_pathPoints) { - walkAlongPathPoints(); - } else { - HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y); - if (hitRectNext->type == 0x5002) { - _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2); - } else if (hitRectNext->type == 0x5003) { - _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2); - } else if (hitRectPrev->type == 0x5002) { - _y = xdiff > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1; - } else if (hitRectPrev->type == 0x5003) { - _y = xdiff < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1; - } - } - updateBounds(); - } -} - -uint32 Klayman::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevel(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x32180101) { - playSound(0, 0x4924AAC4); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, 0x0A2AA8E0); - } - break; - case 0x3002: - _x = _destX; - gotoNextStateExt(); - break; - } - return messageResult; -} - -void Klayman::stWonderAboutHalf() { - _status2 = 0; - _acceptInput = true; - startAnimation(0xD820A114, 0, 10); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stWonderAboutAfter() { - _status2 = 1; - _acceptInput = true; - startAnimation(0xD820A114, 30, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stTurnToUseHalf() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x9B250AD2, 0, 7); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmTurnToUse); - SetSpriteUpdate(NULL); -} - -uint32 Klayman::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x32180101) { - playSound(0, 0x4924AAC4); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, 0x0A2AA8E0); - } - break; - } - return messageResult; -} - -void Klayman::stTurnAwayFromUse() { - _status2 = 1; - _acceptInput = true; - startAnimation(0x98F88391, 4, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmTurnToUse); - SetSpriteUpdate(NULL); -} - -void Klayman::stWonderAbout() { - _status2 = 1; - _acceptInput = true; - startAnimation(0xD820A114, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stPeekWall() { - _status2 = 1; - _acceptInput = true; - startAnimation(0xAC20C012, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPeekWall); - SetSpriteUpdate(NULL); -} - -uint32 Klayman::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender) { - int16 speedUpFrameIndex; - switch (messageNum) { - case 0x1008: - speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash); - if (_currFrameIndex < speedUpFrameIndex) - startAnimation(0xAC20C012, speedUpFrameIndex, -1); - return 0; - case 0x100D: - if (param.asInteger() == 0x32180101) { - playSound(0, 0x405002D8); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, 0x0460E2FA); - } - break; - } - return hmLowLevelAnimation(messageNum, param, sender); -} - -void Klayman::stJumpToRing1() { - if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing1))) { - _status2 = 0; - startAnimation(0xD82890BA, 0, -1); - setupJumpToRing(); - } -} - -void Klayman::setupJumpToRing() { - _acceptInput = false; - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmJumpToRing); - SetSpriteUpdate(&Klayman::suUpdateDestX); - NextState(&Klayman::stHangOnRing); - sendMessage(_attachedSprite, 0x482B, 0); -} - -uint32 Klayman::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 Klayman::suUpdateDestX() { - AnimatedSprite::updateDeltaXY(); - _destX = _x; -} - -void Klayman::stHangOnRing() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x4829E0B8, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(NULL); -} - -void Klayman::stJumpToRing2() { - if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing2))) { - _status2 = 0; - startAnimation(0x900980B2, 0, -1); - setupJumpToRing(); - } -} - -void Klayman::stJumpToRing3() { - if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing3))) { - _status2 = 0; - _acceptInput = false; - startAnimation(0xBA1910B2, 0, -1); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(&Klayman::suUpdateDestX); - SetMessageHandler(&Klayman::hmJumpToRing3); - NextState(&Klayman::stHoldRing3); - sendMessage(_attachedSprite, 0x482B, 0); - } -} - -uint32 Klayman::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 Klayman::stHoldRing3() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x4A293FB0, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmHoldRing3); - SetSpriteUpdate(NULL); -} - -uint32 Klayman::hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *sender) { - if (messageNum == 0x1008) { - stReleaseRing(); - return 0; - } - return hmLowLevel(messageNum, param, sender); -} - -void Klayman::stReleaseRing() { - _status2 = 1; - _acceptInput = false; - sendMessage(_attachedSprite, 0x4807, 0); - _attachedSprite = NULL; - startAnimation(0xB869A4B9, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stJumpToRing4() { - if (!stStartAction(AnimationCallback(&Klayman::stJumpToRing4))) { - _status2 = 0; - startAnimation(0xB8699832, 0, -1); - setupJumpToRing(); - } -} - -void Klayman::sub41CCE0(int16 x) { - sub41CC40(_attachedSprite->getX(), x); -} - -void Klayman::stContinueClimbLadderUp() { - _status2 = 0; - _acceptInput = true; - _ladderStatus = 3; - startAnimationByHash(0x3A292504, 0x01084280, 0); - _newStickFrameHash = 0x01084280; - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(NULL); - gotoNextStateExt(); -} - -void Klayman::stStartClimbLadderDown() { - if (!stStartAction(AnimationCallback(&Klayman::stStartClimbLadderDown))) { - _status2 = 0; - if (_destY < _y) { - if (_ladderStatus == 1) { - _ladderStatus = 2; - stClimbLadderHalf(); - } else { - gotoNextStateExt(); - } - } else if (_ladderStatus == 0) { - _ladderStatus = 2; - _acceptInput = false; - startAnimation(0x122D1505, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmClimbLadderUpDown); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } else if (_ladderStatus == 3) { - _ladderStatus = 2; - _acceptInput = true; - startAnimationByHash(0x122D1505, 0x01084280, 0); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmClimbLadderUpDown); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } else if (_ladderStatus == 1) { - _ladderStatus = 2; - _acceptInput = true; - startAnimation(0x122D1505, 29 - _currFrameIndex, -1); - } - } -} - -void Klayman::stClimbLadderHalf() { - _status2 = 2; - if (_ladderStatus == 1) { - _ladderStatus = 0; - _acceptInput = false; - startAnimationByHash(0x3A292504, 0x02421405, 0); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmClimbLadderHalf); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } else if (_ladderStatus == 2) { - _ladderStatus = 0; - _acceptInput = false; - startAnimationByHash(0x122D1505, 0x02421405, 0); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmClimbLadderHalf); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } else { - gotoNextStateExt(); - } -} - -uint32 Klayman::hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x489B025C) { - playSound(0, 0x52C4C2D7); - } else if (param.asInteger() == 0x400A0E64) { - playSound(0, 0x50E081D9); - } else if (param.asInteger() == 0x32180101) { - playSound(0, 0x405002D8); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, 0x0460E2FA); - } - break; - } - return messageResult; -} - -uint32 Klayman::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevel(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x01084280) { - _acceptInput = true; - } else if (param.asInteger() == 0x489B025C) { - playSound(0, 0x52C4C2D7); - } else if (param.asInteger() == 0x400A0E64) { - playSound(0, 0x50E081D9); - } else if (param.asInteger() == 0x02421405) { - if (_ladderStatus == 1) { - startAnimationByHash(0x3A292504, 0x01084280, 0); - if (_destY >= _y - 30) - sendMessage(this, 0x1019, 0); - } else { - startAnimationByHash(0x122D1505, 0x01084280, 0); - if (_destY <= _y) - sendMessage(this, 0x1019, 0); - } - } - break; - } - return messageResult; -} - -void Klayman::stStartClimbLadderUp() { - if (!stStartAction(AnimationCallback(&Klayman::stStartClimbLadderUp))) { - _status2 = 0; - if (_destY >= _y - 30) { - gotoNextStateExt(); - } else if (_ladderStatus == 0) { - _ladderStatus = 1; - _acceptInput = false; - startAnimation(0x3A292504, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmClimbLadderUpDown); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } else if (_ladderStatus == 3) { - _ladderStatus = 1; - _acceptInput = true; - startAnimationByHash(0x3A292504, 0x01084280, 0); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmClimbLadderUpDown); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } else if (_ladderStatus == 2) { - _ladderStatus = 1; - _acceptInput = true; - startAnimation(0x3A292504, 29 - _currFrameIndex, -1); - } - } -} - -void Klayman::stWalkToFrontNoStep() { - _status2 = 2; - _acceptInput = false; - startAnimationByHash(0xF229C003, 0x14884392, 0); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkToFront); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -uint32 Klayman::hmWalkToFront(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() == 0x110010D1) { - sendMessage(_parentScene, 0x482B, 0); - } else if (param.asInteger() == 0x32180101) { - playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA); - } - break; - } - return messageResult; -} - -void Klayman::stWalkToFront() { - if (!stStartAction(AnimationCallback(&Klayman::stWalkToFront))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0xF229C003, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkToFront); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -void Klayman::stTurnToFront() { - if (!stStartAction(AnimationCallback(&Klayman::stTurnToFront))) { - _status2 = 0; - _acceptInput = false; - startAnimationByHash(0xCA221107, 0, 0x8520108C); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkToFront); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -void Klayman::stTurnToBack() { - if (!stStartAction(AnimationCallback(&Klayman::stTurnToBack))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0xCA221107, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmWalkToFront); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -void Klayman::stLandOnFeet() { - _status2 = 1; - _acceptInput = true; - startAnimation(0x18118554, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLandOnFeet); - SetSpriteUpdate(NULL); -} - -uint32 Klayman::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x320AC306) { - playSound(0, 0x5860C640); - } - break; - } - return messageResult; -} - -void Klayman::stTurnToBackToUse() { - if (!stStartAction(AnimationCallback(&Klayman::stTurnToBackToUse))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x91540140, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmTurnToBackToUse); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -uint32 Klayman::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0xC61A0119) { - playSound(0, 0x402338C2); - } else if (param.asInteger() == 0x32180101) { - playSound(0, 0x4924AAC4); - } else if (param.asInteger() == 0x0A2A9098) { - playSound(0, 0x0A2AA8E0); - } - break; - } - return messageResult; -} - -void Klayman::stClayDoorOpen() { - if (!stStartAction(AnimationCallback(&Klayman::stClayDoorOpen))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x5CCCB330, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmClayDoorOpen); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -uint32 Klayman::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 Klayman::stTurnToUse() { - if (!stStartAction(AnimationCallback(&Klayman::stTurnToUse))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x9B250AD2, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmTurnToUse); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -void Klayman::stReturnFromUse() { - _status2 = 2; - _acceptInput = false; - startAnimation(0x98F88391, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmTurnToUse); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -void Klayman::stWalkingOpenDoor() { - _isWalkingOpenDoorNotified = false; - _acceptInput = false; - startAnimation(0x11A8E012, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmStartWalking); - SetSpriteUpdate(&Klayman::suWalkingOpenDoor); -} - -void Klayman::suWalkingOpenDoor() { - if (!_isWalkingOpenDoorNotified && ABS(_destX - _x) < 80) { - sendMessage(_parentScene, 0x4829, 0); - _isWalkingOpenDoorNotified = true; - } - AnimatedSprite::updateDeltaXY(); -} - -void Klayman::stMoveObjectSkipTurnFaceObject() { - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - _isMoveObjectRequested = false; - _acceptInput = true; - startAnimationByHash(0x0C1CA072, 0x01084280, 0); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(&Klayman::suUpdateDestX); - SetMessageHandler(&Klayman::hmMoveObjectTurn); -} - -void Klayman::evMoveObjectTurnDone() { - sendMessage(_attachedSprite, 0x4807, 0); -} - -uint32 Klayman::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender) { - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x01084280) { - 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::hmLowLevelAnimation); - } - } 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); -} - -void Klayman::stMoveObjectSkipTurn() { - _isMoveObjectRequested = false; - _acceptInput = true; - startAnimationByHash(0x0C1CA072, 0x01084280, 0); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(&Klayman::suUpdateDestX); - SetMessageHandler(&Klayman::hmMoveObjectTurn); -} - -void Klayman::stMoveObjectFaceObject() { - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - if (!stStartAction(AnimationCallback(&Klayman::stMoveObjectFaceObject))) { - _status2 = 2; - _isMoveObjectRequested = false; - _acceptInput = true; - startAnimation(0x0C1CA072, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmMoveObjectTurn); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -void Klayman::stUseLever() { - if (!stStartAction(AnimationCallback(&Klayman::stUseLever))) { - _status2 = 0; - if (_isLeverDown) { - stUseLeverRelease(); - } else { - sendMessage(_attachedSprite, 0x482B, 0); - startAnimation(0x0C303040, 0, -1); - SetSpriteUpdate(&Klayman::suUpdateDestX); - SetMessageHandler(&Klayman::hmLever); - SetUpdateHandler(&Klayman::update); - NextState(&Klayman::stPullLeverDown); - _acceptInput = false; - } - } -} - -// Exactly the same code as sub420DA0 which was removed -void Klayman::stPullLeverDown() { - startAnimation(0x0D318140, 0, -1); - sendMessage(_attachedSprite, 0x480F, 0); - NextState(&Klayman::stHoldLeverDown); -} - -void Klayman::stHoldLeverDown() { - startAnimation(0x4464A440, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(&Klayman::suUpdateDestX); - _isLeverDown = true; - _acceptInput = true; -} - -void Klayman::stUseLeverRelease() { - startAnimation(0x09018068, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLever); - SetSpriteUpdate(&Klayman::suUpdateDestX); - sendMessage(_attachedSprite, 0x4807, 0); - NextState(&Klayman::stPullLeverDown); - _acceptInput = false; -} - -void Klayman::stReleaseLever() { - if (_isLeverDown) { - _status2 = 2; - startAnimation(0x09018068, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLever); - SetSpriteUpdate(&Klayman::suUpdateDestX); - sendMessage(_attachedSprite, 0x4807, 0); - NextState(&Klayman::stLetGoOfLever); - _acceptInput = false; - _isLeverDown = false; - } else { - gotoNextStateExt(); - } -} - -void Klayman::stLetGoOfLever() { - startAnimation(0x0928C048, 0, -1); - FinalizeState(&Klayman::evLeverReleasedEvent); -} - -void Klayman::evLeverReleasedEvent() { - sendMessage(_attachedSprite, 0x482A, 0); -} - -void Klayman::stInsertDisk() { - if (!stStartActionFromIdle(AnimationCallback(&Klayman::stInsertDisk))) { - _status2 = 2; - _tapesToInsert = 0; - for (uint32 i = 0; i < 20; i++) { - if (getSubVar(VA_HAS_TAPE, i)) { - setSubVar(VA_IS_TAPE_INSERTED, i, 1); - setSubVar(VA_HAS_TAPE, i, 0); - _tapesToInsert++; - } - } - if (_tapesToInsert == 0) { - GotoState(NULL); - gotoNextStateExt(); - } else { - startAnimation(0xD8C8D100, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmInsertDisk); - SetSpriteUpdate(&Klayman::suAction); - _acceptInput = false; - _tapesToInsert--; - } - } -} - -uint32 Klayman::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (_tapesToInsert == 0 && param.asInteger() == 0x06040580) { - nextAnimationByHash(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0); - } else if (_tapesToInsert != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) { - _tapesToInsert--; - startAnimationByHash(0xD8C8D100, 0x01084280, 0); - } else if (param.asInteger() == 0x062A1510) { - playSound(0, 0x41688704); - } else if (param.asInteger() == 0x02B20220) { - playSound(0, 0xC5408620); - } else if (param.asInteger() == 0x0A720138) { - playSound(0, 0xD4C08010); - } else if (param.asInteger() == 0xB613A180) { - playSound(0, 0x44051000); - } else if (param.asInteger() == 0x0E040501) { - playSound(1, 0xC6A129C1); - } - } - return messageResult; -} - -void Klayman::walkAlongPathPoints() { - if (_x <= (*_pathPoints)[0].x) - _y = (*_pathPoints)[0].y; - else if (_x >= (*_pathPoints)[_pathPoints->size() - 1].x) - _y = (*_pathPoints)[_pathPoints->size() - 1].y; - else { - int16 deltaX = _x - (*_pathPoints)[0].x, deltaXIncr = 0; - uint index = 0; - while (deltaX > 0) { - NPoint pt2 = (*_pathPoints)[index]; - NPoint pt1 = index + 1 >= _pathPoints->size() ? (*_pathPoints)[0] : (*_pathPoints)[index + 1]; - int16 xd = ABS(pt1.x - pt2.x); - int16 yd = ABS(pt1.y - pt2.y); - if (deltaX + deltaXIncr >= xd) { - deltaX -= xd; - deltaX += deltaXIncr; - ++index; - if (index >= _pathPoints->size()) - index = 0; - _y = (*_pathPoints)[index].y; - } else { - deltaXIncr += deltaX; - if (pt1.y >= pt2.y) { - _y = pt2.y + (yd * deltaXIncr) / xd; - } else { - _y = pt2.y - (yd * deltaXIncr) / xd; - } - deltaX = 0; - } - } - } -} - -void Klayman::stJumpToGrab() { - _status2 = 0; - _acceptInput = false; - startAnimationByHash(0x00AB8C10, 0x01084280, 0); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(&Klayman::suJumpToGrab); - SetMessageHandler(&Klayman::hmJumpToGrab); -} - -void Klayman::suJumpToGrab() { - updateDeltaXY(); - if (_y >= _destY) { - _y = _destY; - updateBounds(); - gotoNextStateExt(); - } -} - -uint32 Klayman::hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevel(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x168050A0) - sendMessage(_attachedSprite, 0x4806, 0); - else if (param.asInteger() == 0x320AC306) - startAnimationByHash(0x00AB8C10, 0x01084280, 0); - else if (param.asInteger() == 0x4AB28209) - sendMessage(_attachedSprite, 0x482A, 0); - else if (param.asInteger() == 0x88001184) - sendMessage(_attachedSprite, 0x482B, 0); - break; - } - return messageResult; -} - -void Klayman::stFinishGrow() { - _status2 = 2; - _acceptInput = false; - startAnimation(0x38445000, 0, -1); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(NULL); - SetMessageHandler(&Klayman::hmFinishGrow); -} - -uint32 Klayman::hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x040C4C01) - playSound(0, 0x01E11140); - break; - } - return messageResult; -} - -void Klayman::stTurnToUseExt() { - if (!stStartAction(AnimationCallback(&Klayman::stTurnToUseExt))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x1B3D8216, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmTurnToUse); - SetSpriteUpdate(&Klayman::suUpdateDestX); - } -} - -void Klayman::stJumpToGrabFall() { - if (!stStartAction(AnimationCallback(&Klayman::stJumpToGrabFall))) { - _status2 = 0; - _acceptInput = false; - startAnimation(0x00AB8C10, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmJumpToGrab); - SetSpriteUpdate(&Klayman::suJumpToGrab); - sendMessage(_attachedSprite, 0x482B, 0); - } -} - -void Klayman::stJumpToGrabRelease() { - _status2 = 1; - _acceptInput = false; - startAnimationByHash(0x00AB8C10, 0x320AC306, 0); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmJumpToGrabRelease); - SetSpriteUpdate(NULL); - NextState(&Klayman::stReleaseRing); -} - -uint32 Klayman::hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x320AC306) - playSound(0, 0x5860C640); - break; - } - return messageResult; -} - -void Klayman::stDoIdleTeleporterHands() { - startIdleAnimation(0x90EF8D38, AnimationCallback(&Klayman::stIdleTeleporterHands)); -} - -void Klayman::stIdleTeleporterHands() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x90EF8D38, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); - NextState(&Klayman::stSitIdleTeleporterBlinkSecond); -} - -void Klayman::stDoIdleTeleporterHands2() { - startIdleAnimation(0x900F0930, AnimationCallback(&Klayman::stIdleTeleporterHands2)); -} - -void Klayman::stIdleTeleporterHands2() { - _status2 = 0; - _acceptInput = true; - startAnimation(0x900F0930, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); - NextState(&Klayman::stSitIdleTeleporterBlinkSecond); -} - -void Klayman::teleporterAppear(uint32 fileHash) { - _status2 = 0; - _acceptInput = false; - startAnimation(fileHash, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmTeleporterAppearDisappear); - SetSpriteUpdate(NULL); -} - -void Klayman::teleporterDisappear(uint32 fileHash) { - _status2 = 0; - _acceptInput = false; - startAnimation(fileHash, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmTeleporterAppearDisappear); - SetSpriteUpdate(NULL); -} - -uint32 Klayman::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x4E0A2C24) { - playSound(0, 0x85B10BB8); - } else if (param.asInteger() == 0x4E6A0CA0) { - playSound(0, 0xC5B709B0); - } - break; - } - return messageResult; -} - -uint32 Klayman::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 Klayman::stShrink() { - _status2 = 0; - _acceptInput = false; - playSound(0, 0x4C69EA53); - startAnimation(0x1AE88904, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmShrink); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); -} - -void Klayman::stStandWonderAbout() { - if (_x > 260) - setDoDeltaX(1); - _status2 = 0; - _acceptInput = true; - startAnimation(0xD820A114, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(NULL); - _newStickFrameIndex = 10; -} - -uint32 Klayman::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x1008: - if (_potionFlag1) { - startAnimationByHash(0x1C388C04, 0x004A2148, 0); - messageResult = 0; - } else - _potionFlag2 = true; - break; - case 0x100D: - if (param.asInteger() == 0x0002418E) - sendMessage(_parentScene, 0x2000, 0); - else if (param.asInteger() == 0x924090C2) { - _potionFlag1 = true; - if (_potionFlag2) { - startAnimationByHash(0x1C388C04, 0x004A2148, 0); - messageResult = 0; - } - } else if (param.asInteger() == 0x004A2148) - _potionFlag1 = false; - else if (param.asInteger() == 0x02B20220) - playSound(0, 0xC5408620); - else if (param.asInteger() == 0x0A720138) - playSound(0, 0xD4C08010); - else if (param.asInteger() == 0x03020231) - playSound(0, 0xD4C08010); - else if (param.asInteger() == 0xB613A180) - playSound(0, 0x44051000); - else if (param.asInteger() == 0x67221A03) - playSound(0, 0x44051000); - else if (param.asInteger() == 0x038A010B) - playSound(0, 0x00018040); - else if (param.asInteger() == 0x422B0280) - playSound(0, 0x166FC6E0); - else if (param.asInteger() == 0x925A0C1E) - playSound(0, 0x40E5884D); - else if (param.asInteger() == 0x000F0082) - playSound(0, 0x546CDCC1); - else if (param.asInteger() == 0x00020814) - playSound(0, 0x786CC6D0); - else if (param.asInteger() == 0x06020500) - playSound(0, 0x1069C0E1); - else if (param.asInteger() == 0x02128C00) - playSound(0, 0x5068C4C3); - else if (param.asInteger() == 0x82022030) - playSound(0, 0x5C48C0E8); - break; - } - return messageResult; -} - -uint32 Klayman::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x32180101) - playSound(0, 0x405002D8); - else if (param.asInteger() == 0x0A2A9098) - playSound(0, 0x0460E2FA); - else if (param.asInteger() == 0xD00A0C0C) - playSound(3); - else if (param.asInteger() == 0x04121920) - playSound(4); - else if (param.asInteger() == 0x030B4480) - playSound(5); - else if (param.asInteger() == 0x422B0280) - playSound(6); - else if (param.asInteger() == 0x038A010B) - playSound(7); - else if (param.asInteger() == 0x67221A03) - playSound(0, 0x44051000); - else if (param.asInteger() == 0x02B20220) - playSound(0, 0xC5408620); - else if (param.asInteger() == 0x925A0C1E) - playSound(0, 0x40E5884D); - else if (param.asInteger() == 0x03020231) - playSound(0, 0xD4C08010); - else if (param.asInteger() == 0x08040840) - setDoDeltaX(2); - break; - } - return messageResult; -} - -void Klayman::stGrow() { - _status2 = 0; - _acceptInput = false; - startAnimation(0x2838C010, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmGrow); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); -} - -void Klayman::stDrinkPotion() { - _status2 = 1; - _acceptInput = false; - _potionFlag1 = false; - _potionFlag2 = false; - startAnimation(0x1C388C04, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmDrinkPotion); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); -} - -uint32 Klayman::hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Klayman::hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (_keysToInsert == 0 && param.asInteger() == 0x06040580) { - nextAnimationByHash(0xDC409440, 0x46431401, 0); - } else if (_keysToInsert != 0 && param.asInteger() == 0x46431401) { - _keysToInsert--; - startAnimationByHash(0xDC409440, 0x01084280, 0); - } else if (param.asInteger() == 0x062A1510) { - playSound(0, 0x41688704); - } else if (param.asInteger() == 0x02B20220) { - playSound(0, 0xC5408620); - } else if (param.asInteger() == 0x0A720138) { - playSound(0, 0xD4C08010); - } else if (param.asInteger() == 0xB613A180) { - playSound(0, 0x44051000); - } else if (param.asInteger() == 0x0E4C8141) { - playSound(0, 0xDC4A1280); - } - break; - } - return messageResult; -} - -void Klayman::stInsertKey() { - if (!stStartActionFromIdle(AnimationCallback(&Klayman::stInsertKey))) { - _status2 = 2; - _keysToInsert = 0; - for (uint32 i = 0; i < 3; i++) { - if (getSubVar(VA_HAS_KEY, i)) { - bool more; - setSubVar(VA_IS_KEY_INSERTED, i, 1); - setSubVar(VA_HAS_KEY, i, 0); - do { - more = false; - setSubVar(VA_CURR_KEY_SLOT_NUMBERS, i, _vm->_rnd->getRandomNumber(16 - 1)); - for (uint j = 0; j < i && !more; j++) { - if (getSubVar(VA_IS_KEY_INSERTED, j) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, j) == getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i)) - more = true; - } - if (getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i)) - more = true; - } while (more); - _keysToInsert++; - } - } - if (_keysToInsert == 0) { - GotoState(NULL); - gotoNextStateExt(); - } else { - _acceptInput = false; - startAnimation(0xDC409440, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmInsertKey); - SetSpriteUpdate(&Klayman::suAction); - _keysToInsert--; - } - } -} - -uint32 Klayman::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 Klayman::stReadNote() { - _status2 = 2; - _acceptInput = false; - startAnimation(0x123E9C9F, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmReadNote); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); -} - -uint32 Klayman::hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - int16 speedUpFrameIndex; - switch (messageNum) { - case 0x1008: - speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash); - if (_currFrameIndex < speedUpFrameIndex) { - startAnimation(0x35AA8059, speedUpFrameIndex, -1); - _y = 438; - } - messageResult = 0; - break; - case 0x100D: - if (param.asInteger() == 0x1A1A0785) { - playSound(0, 0x40F0A342); - } else if (param.asInteger() == 0x60428026) { - playSound(0, 0x40608A59); - } - break; - } - return messageResult; -} - -void Klayman::stHitByDoor() { - _status2 = 1; - _acceptInput = false; - startAnimation(0x35AA8059, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmHitByDoor); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - playSound(0, 0x402E82D4); -} - -uint32 Klayman::hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == calcHash("PopBalloon")) { - sendMessage(_parentScene, 0x2000, 0); - } else if (param.asInteger() == 0x02B20220) { - playSound(0, 0xC5408620); - } else if (param.asInteger() == 0x0A720138) { - playSound(0, 0xD4C08010); - } else if (param.asInteger() == 0xB613A180) { - playSound(0, 0x44051000); - } - break; - } - return messageResult; -} - -void Klayman::upPeekWallBlink() { - Klayman::update(); - _blinkCounter++; - if (_blinkCounter >= _blinkCounterMax) - stPeekWallBlink(); -} - -void Klayman::stPeekWall1() { - _status2 = 0; - _acceptInput = true; - startAnimation(0xAC20C012, 8, 37); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); - NextState(&Klayman::stPeekWallBlink); -} - -void Klayman::stPeekWall2() { - _status2 = 1; - _acceptInput = false; - startAnimation(0xAC20C012, 43, 49); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(NULL); - SetMessageHandler(&Klayman::hmLowLevelAnimation); -} - -void Klayman::stPeekWallBlink() { - _blinkCounter = 0; - _status2 = 0; - _acceptInput = true; - _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24; - startAnimation(0xAC20C012, 38, 42); - SetUpdateHandler(&Klayman::upPeekWallBlink); - SetSpriteUpdate(NULL); - SetMessageHandler(&Klayman::hmLowLevel); - _newStickFrameIndex = 42; -} - -void Klayman::stPeekWallReturn() { - _status2 = 0; - _acceptInput = false; - startAnimation(0x2426932E, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPeekWallReturn); - SetSpriteUpdate(NULL); -} - -void Klayman::stPullHammerLever() { - if (!stStartAction(AnimationCallback(&Klayman::stPullHammerLever))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x00648953, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPullHammerLever); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - } -} - -uint32 Klayman::hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = Klayman::hmLever(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x4AB28209) - sendMessage(_attachedSprite, 0x480F, 0); - break; - } - return messageResult; -} - -void Klayman::suRidePlatformDown() { - _platformDeltaY++; - _y += _platformDeltaY; - if (_y > 600) - sendMessage(this, 0x1019, 0); -} - -void Klayman::stRidePlatformDown() { - if (!stStartActionFromIdle(AnimationCallback(&Klayman::stRidePlatformDown))) { - _status2 = 1; - sendMessage(_parentScene, 0x4803, 0); - _acceptInput = false; - _platformDeltaY = 0; - startAnimation(0x5420E254, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(&Klayman::suRidePlatformDown); - _vm->_soundMan->playSoundLooping(0xD3B02847); - } -} - -void Klayman::stCrashDown() { - playSound(0, 0x41648271); - _status2 = 1; - _acceptInput = false; - startAnimationByHash(0x000BAB02, 0x88003000, 0); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(NULL); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - NextState(&Klayman::stCrashDownFinished); -} - -void Klayman::stCrashDownFinished() { - setDoDeltaX(2); - stTryStandIdle(); -} - -void Klayman::upSpitOutFall() { - Klayman::update(); - if (_countdown1 != 0 && (--_countdown1 == 0)) { - _surface->setVisible(true); - SetUpdateHandler(&Klayman::update); - } -} - -uint32 Klayman::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 Klayman::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender) { - switch (messageNum) { - case 0x4811: - playSound(0, 0x5252A0E4); - setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0); - if (_doDeltaX) { - _x = ((Sprite*)sender)->getX() - 75; - } else { - _x = ((Sprite*)sender)->getX() + 75; - } - _y = ((Sprite*)sender)->getY() - 200; - if (param.asInteger() == 0) { - stSpitOutFall0(); - } else if (param.asInteger() == 1) { - // NOTE This is never used and the code was removed - // Also the animations used here in the original don't exist... - } else if (param.asInteger() == 2) { - stSpitOutFall2(); - } - break; - } - return 0; -} - -uint32 Klayman::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 Klayman::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(&Klayman::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 Klayman::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 Klayman::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender) { - int16 speedUpFrameIndex; - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x1008: - speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash); - 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 Klayman::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 Klayman::suFallDown() { - AnimatedSprite::updateDeltaXY(); - HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10); - if (hitRect->type == 0x5001) { - _y = hitRect->rect.y1; - updateBounds(); - sendMessage(this, 0x1019, 0); - } - _parentScene->checkCollision(this, 0xFFFF, 0x4810, 0); -} - -void Klayman::stJumpToRingVenusFlyTrap() { - if (!stStartAction(AnimationCallback(&Klayman::stJumpToRingVenusFlyTrap))) { - _status2 = 2; - _acceptInput = false; - startAnimation(0x584984B4, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmJumpToRingVenusFlyTrap); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - NextState(&Klayman::stLandOnFeet); - sendMessage(_attachedSprite, 0x482B, 0); - } -} - -void Klayman::stStandIdleSpecial() { - playSound(0, 0x56548280); - _status2 = 0; - _acceptInput = false; - _surface->setVisible(false); - startAnimation(0x5420E254, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmStandIdleSpecial); - SetSpriteUpdate(NULL); -} - -void Klayman::stSpitOutFall0() { - _countdown1 = 1; - _status2 = 0; - _acceptInput = false; - startAnimation(0x000BAB02, 0, -1); - SetUpdateHandler(&Klayman::upSpitOutFall); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(&Klayman::suFallDown); - NextState(&Klayman::stFalling); - sendMessage(_parentScene, 0x8000, 0); -} - -void Klayman::stSpitOutFall2() { - _countdown1 = 1; - _status2 = 0; - _acceptInput = false; - startAnimation(0x9308C132, 0, -1); - SetUpdateHandler(&Klayman::upSpitOutFall); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(&Klayman::suFallDown); - NextState(&Klayman::stFalling); - sendMessage(_parentScene, 0x8000, 0); -} - -void Klayman::stFalling() { - sendMessage(_parentScene, 0x1024, 1); - playSound(0, 0x41648271); - _status2 = 1; - _acceptInput = false; - _isWalking = false; - startAnimationByHash(0x000BAB02, 0x88003000, 0); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(NULL); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - NextState(&Klayman::stFallTouchdown); - sendMessage(_parentScene, 0x2002, 0); - _attachedSprite = NULL; - sendMessage(_parentScene, 0x8001, 0); -} - -void Klayman::stFallTouchdown() { - setDoDeltaX(2); - stTryStandIdle(); -} - -void Klayman::stJumpAndFall() { - if (!stStartAction(AnimationCallback(&Klayman::stJumpAndFall))) { - sendMessage(_parentScene, 0x1024, 3); - _status2 = 2; - _acceptInput = false; - startAnimation(0xB93AB151, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmJumpAndFall); - SetSpriteUpdate(&Klayman::suFallDown); - NextState(&Klayman::stLandOnFeet); - } -} - -void Klayman::stDropFromRing() { - if (_attachedSprite) { - _x = _attachedSprite->getX(); - sendMessage(_attachedSprite, 0x4807, 0); - _attachedSprite = NULL; - } - _status2 = 2; - _acceptInput = false; - startAnimation(0x586984B1, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(&Klayman::suFallDown); - NextState(&Klayman::stLandOnFeet); -} - -void Klayman::stPressDoorButton() { - _status2 = 2; - _acceptInput = true; - setDoDeltaX(0); - startAnimation(0x1CD89029, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmPressDoorButton); - SetSpriteUpdate(&Klayman::suAction); -} - -void Klayman::stHitByBoxingGlove() { - _status2 = 1; - _acceptInput = false; - startAnimation(0x35AA8059, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmHitByBoxingGlove); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - FinalizeState(&Klayman::evHitByBoxingGloveDone); -} - -void Klayman::evHitByBoxingGloveDone() { - sendMessage(_parentScene, 0x1024, 1); -} - -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(&Klayman::hmMoveVenusFlyTrap); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - FinalizeState(&Klayman::evMoveVenusFlyTrapDone); - } -} - -void Klayman::stContinueMovingVenusFlyTrap() { - _isMoveObjectRequested = false; - _acceptInput = true; - startAnimationByHash(0x5C01A870, 0x01084280, 0); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmMoveVenusFlyTrap); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - FinalizeState(&Klayman::evMoveVenusFlyTrapDone); -} - -void Klayman::evMoveVenusFlyTrapDone() { - sendMessage(_attachedSprite, 0x482A, 0); -} - -void Klayman::suFallSkipJump() { - updateDeltaXY(); - HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10); - if (hitRect->type == 0x5001) { - _y = hitRect->rect.y1; - updateBounds(); - 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 ¶m, Entity *sender) { - uint32 messageResult = Klayman::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 Klayman::stFetchMatch() { - if (!stStartAction(AnimationCallback(&Klayman::stFetchMatch))) { - _status2 = 0; - _acceptInput = false; - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - startAnimation(0x9CAA0218, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmMatch); - SetSpriteUpdate(NULL); - NextState(&Klayman::stLightMatch); - } -} - -void Klayman::stLightMatch() { - _status2 = 1; - _acceptInput = false; - setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); - startAnimation(0x1222A513, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmMatch); - SetSpriteUpdate(NULL); -} - -uint32 Klayman::hmMoveObject(int messageNum, const MessageParam ¶m, 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 ¶m, 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); - SetMessageHandler(&Klayman::hmMoveObject); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - } -} - -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); - SetMessageHandler(&Klayman::hmTumbleHeadless); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - 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); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(NULL); - } -} - -uint32 Klayman::hmSpit(int messageNum, const MessageParam ¶m, 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; - updateBounds(); -} - -void Klayman::stRidePlatform() { - if (!stStartActionFromIdle(AnimationCallback(&Klayman::stRidePlatform))) { - _status2 = 1; - _acceptInput = true; - startAnimation(0x5420E254, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(&Klayman::suRidePlatform); - } -} - -void Klayman::stInteractLever() { - if (!stStartAction(AnimationCallback(&Klayman::stInteractLever))) { - _status2 = 0; - if (_isLeverDown) { - stUseLeverRelease(); - } else { - _acceptInput = false; - startAnimation(0x0C303040, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLever); - SetSpriteUpdate(&Klayman::suUpdateDestX); - NextState(&Klayman::stPullLever); - } - } -} - -void Klayman::stPullLever() { - startAnimation(0x0D318140, 0, -1); - NextState(&Klayman::stLookLeverDown); - sendMessage(_attachedSprite, 0x480F, 0); -} - -void Klayman::stLookLeverDown() { - _acceptInput = true; - _isLeverDown = true; - startAnimation(0x1564A2C0, 0, -1); - SetUpdateHandler(&Klayman::update); - SetSpriteUpdate(&Klayman::suUpdateDestX); - NextState(&Klayman::stWaitLeverDown); -} - -void Klayman::stWaitLeverDown() { - _acceptInput = true; - _isLeverDown = true; - startAnimation(0x4464A440, 0, -1); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(&Klayman::suUpdateDestX); -} - -void Klayman::stStartWalkingResume() { - int16 frameIndex = getGlobalVar(V_KLAYMAN_FRAMEINDEX) + _walkResumeFrameIncr; - 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::suWalkingFirst); - NextState(&Klayman::stUpdateWalkingFirst); - FinalizeState(&Klayman::evStartWalkingDone); -} - -void Klayman::upPeekInsideBlink() { - update(); - ++_blinkCounter; - if (_blinkCounter >= _blinkCounterMax) - stPeekInsideBlink(); -} - -void Klayman::stPeekInside() { - _status2 = 0; - _acceptInput = true; - startAnimation(0xAC20C012, 8, 37); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); - NextState(&Klayman::stPeekInsideBlink); -} - -void Klayman::stPeekInsideReturn() { - _status2 = 1; - _acceptInput = false; - startAnimation(0xAC20C012, 43, 49); - SetUpdateHandler(&Klayman::update); - SetMessageHandler(&Klayman::hmLowLevelAnimation); - SetSpriteUpdate(NULL); -} - -void Klayman::stPeekInsideBlink() { - _status2 = 0; - _acceptInput = true; - startAnimation(0xAC20C012, 38, 42); - _newStickFrameIndex = 42; - SetUpdateHandler(&Klayman::upPeekInsideBlink); - SetMessageHandler(&Klayman::hmLowLevel); - SetSpriteUpdate(NULL); - _blinkCounter = 0; - _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24; -} - -//############################################################################## - -// KmScene1001 - -KmScene1001::KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { -} - -uint32 KmScene1001::xHandleMessage(int messageNum, const MessageParam ¶m) { - 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::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - 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, Scene *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) { - setKlaymanIdleTable(klaymanIdleTable1002, ARRAYSIZE(klaymanIdleTable1002)); - _idleTableNum = 1; - } - } else if (_idleTableNum == 1) { - setKlaymanIdleTable1(); - _idleTableNum = 0; - } -} - -uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) { - 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, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - _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(&Klayman::stTryStandIdle); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x481E: - GotoState(&Klayman::stReadNote); - break; - case 0x4820: - sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klayman::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klayman::stClimbLadderHalf); - break; - case 0x4824: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klayman::stStartClimbLadderDown); - break; - case 0x4825: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klayman::stStartClimbLadderUp); - break; - case 0x4828: - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // 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(&Klayman::stSitIdleTeleporter); - else - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klayman::stWalkingFirst); - } else { - GotoState(&Klayman::stPeekWall); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klayman::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klayman::stReturnFromUseInTeleporter); - break; - case 0x4834: - GotoState(&Klayman::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klayman::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - setKlaymanIdleTable(klaymanTable4, ARRAYSIZE(klaymanTable4)); - _flagF6 = true; - -} - -uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case 0x480A: - GotoState(&Klayman::stMoveObject); - break; - case NM_KLAYMAN_PICKUP: - GotoState(&Klayman::stPickUpGeneric); - break; - case 0x4813: - GotoState(&Klayman::stFetchMatch); - break; - case 0x4814: - GotoState(&Klayman::stTumbleHeadless); - break; - case 0x4815: - GotoState(&Klayman::stCloseEyes); - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 0) { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::stReturnFromUse); - break; - case 0x481F: - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // Empty -} - -uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4804: - GotoState(&Klayman::stPeekWall1); - break; - case 0x483B: - GotoState(&Klayman::stPeekWallReturn); - break; - case 0x483C: - GotoState(&Klayman::stPeekWall2); - break; - } - return 0; -} - -KmScene1304::KmScene1304(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // Empty -} - -uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stTurnAwayFromUse); - } else if (param.asInteger() == 0) { - GotoState(&Klayman::stTurnToUseHalf); - } else { - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // Empty -} - -uint32 KmScene1305::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4804: - GotoState(&Klayman::stCrashDown); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - } - return 0; -} - -KmScene1306::KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - -} - -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(&Klayman::stSitIdleTeleporter); - else - GotoState(&Klayman::stTryStandIdle); - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case NM_KLAYMAN_INSERT_DISK: - GotoState(&Klayman::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klayman::stTurnToUseInTeleporter); - else - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klayman::stReturnFromUseInTeleporter); - else - GotoState(&Klayman::stReturnFromUse); - break; - case 0x481F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stWonderAboutAfter); - } else if (param.asInteger() == 0) { - GotoState(&Klayman::stWonderAboutHalf); - } else if (param.asInteger() == 4) { - GotoState(&Klayman::stTurnAwayFromUse); - } else if (param.asInteger() == 3) { - GotoState(&Klayman::stTurnToUseHalf); - } else { - GotoState(&Klayman::stWonderAbout); - } - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - 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 0x4834: - GotoState(&Klayman::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klayman::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // Empty -} - -uint32 KmScene1308::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) { - GotoState(&Klayman::stMoveObjectSkipTurnFaceObject); - } else { - GotoState(&Klayman::stMoveObjectFaceObject); - } - break; - case 0x480D: - GotoState(&Klayman::stUseLever); - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case NM_KLAYMAN_INSERT_DISK: - if (param.asInteger() == 1) { - GotoState(&Klayman::stInsertKey); - } else { - GotoState(&Klayman::stInsertDisk); - } - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::stReturnFromUse); - break; - case NM_KLAYMAN_RELEASE_LEVER: - GotoState(&Klayman::stReleaseLever); - break; - case 0x4834: - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // Empty -} - -uint32 KmScene1401::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) { - GotoState(&Klayman::stMoveObjectSkipTurnFaceObject); - } else { - GotoState(&Klayman::stMoveObjectFaceObject); - } - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stTurnAwayFromUse); - } else if (param.asInteger() == 0) { - GotoState(&Klayman::stTurnToUseHalf); - } else { - GotoState(&Klayman::stWonderAbout); - } - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - 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; - } - return 0; -} - -// KmScene1402 - -KmScene1402::KmScene1402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - 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(&Klayman::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) { - GotoState(&Klayman::stMoveObjectSkipTurnFaceObject); - } else { - GotoState(&Klayman::stMoveObjectFaceObject); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::stReturnFromUse); - break; - } - return 0; -} - -// KmScene1403 - -KmScene1403::KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - setKlaymanIdleTable(klaymanTable4, ARRAYSIZE(klaymanTable4)); -} - -uint32 KmScene1403::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) { - GotoState(&Klayman::stMoveObjectSkipTurnFaceObject); - } else { - GotoState(&Klayman::stMoveObjectFaceObject); - } - break; - case 0x480D: - GotoState(&Klayman::stUseLever); - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case NM_KLAYMAN_RELEASE_LEVER: - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // Empty -} - -uint32 KmScene1404::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case 0x480A: - if (param.asInteger() == 1) { - GotoState(&Klayman::stMoveObjectSkipTurnFaceObject); - } else { - GotoState(&Klayman::stMoveObjectFaceObject); - } - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case NM_KLAYMAN_INSERT_DISK: - GotoState(&Klayman::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::stReturnFromUse); - break; - case 0x481F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stWonderAboutAfter); - } else if (param.asInteger() == 0) { - GotoState(&Klayman::stWonderAboutHalf); - } else if (param.asInteger() == 4) { - GotoState(&Klayman::stTurnAwayFromUse); - } else if (param.asInteger() == 3) { - GotoState(&Klayman::stTurnToUseHalf); - } else { - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { -} - -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(&Klayman::stSitIdleTeleporter); - else - GotoState(&Klayman::stTryStandIdle); - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klayman::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klayman::stReturnFromUseInTeleporter); - break; - case 0x481F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stWonderAboutAfter); - } else if (param.asInteger() == 0) { - GotoState(&Klayman::stWonderAboutHalf); - } else if (param.asInteger() == 4) { - GotoState(&Klayman::stTurnAwayFromUse); - } else if (param.asInteger() == 3) { - GotoState(&Klayman::stTurnToUseHalf); - } else { - GotoState(&Klayman::stWonderAbout); - } - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - break; - case 0x4834: - GotoState(&Klayman::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2032, 1); - _isSittingInTeleporter = true; - GotoState(&Klayman::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2032, 0); - _isSittingInTeleporter = false; - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // 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(&Klayman::stSitIdleTeleporter); - } else { - GotoState(&Klayman::stTryStandIdle); - } - break; - case 0x4803: - GotoState(&Klayman::stFallSkipJump); - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - if (_isSittingInTeleporter) { - GotoState(&Klayman::stTurnToUseInTeleporter); - } - break; - case 0x481E: - if (_isSittingInTeleporter) { - GotoState(&Klayman::stReturnFromUseInTeleporter); - } - break; - case 0x481F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stWonderAboutAfter); - } else if (param.asInteger() == 0) { - GotoState(&Klayman::stWonderAboutHalf); - } else if (param.asInteger() == 4) { - GotoState(&Klayman::stTurnAwayFromUse); - } else if (param.asInteger() == 3) { - GotoState(&Klayman::stTurnToUseHalf); - } else { - GotoState(&Klayman::stWonderAbout); - } - break; - case 0x4834: - GotoState(&Klayman::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klayman::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klayman::stGetUpFromTeleporter); - break; - case 0x483D: - teleporterAppear(0x5E0A4905); - break; - case 0x483E: - teleporterDisappear(0xD86E4477); - break; - } - return messageResult; -} - -KmScene1901::KmScene1901(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // Empty -} - -uint32 KmScene1901::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // 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(&Klayman::stSitIdleTeleporter); - } else - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klayman::stWalkingFirst); - } else - GotoState(&Klayman::stPeekWall); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klayman::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) { - GotoState(&Klayman::stReturnFromUseInTeleporter); - } - break; - case 0x4834: - GotoState(&Klayman::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klayman::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klayman::stGetUpFromTeleporter); - break; - case 0x483D: - teleporterAppear(0xBE68CC54); - break; - case 0x483E: - teleporterDisappear(0x18AB4ED4); - break; - } - return messageResult; -} - -KmScene2101::KmScene2101(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - // 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(&Klayman::stSitIdleTeleporter); - else - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4811: - GotoState(&Klayman::stHitByDoor); - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klayman::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter)//CHECKME - GotoState(&Klayman::stReturnFromUseInTeleporter); - break; - case 0x4834: - GotoState(&Klayman::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klayman::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - _surface->setClipRects(clipRects, clipRectsCount); - - _dataResource.load(0x04104242); - _flagF6 = false; -} - -uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case NM_KLAYMAN_PICKUP: - GotoState(&Klayman::stPickUpGeneric); - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 0) { - GotoState(&Klayman::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) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::stReturnFromUse); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - 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; -} - -KmScene2203::KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -uint32 KmScene2203::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x4819: - GotoState(&Klayman::stClayDoorOpen); - break; - case NM_KLAYMAN_INSERT_DISK: - GotoState(&Klayman::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -void KmScene2205::xUpdate() { - setGlobalVar(V_KLAYMAN_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(&Klayman::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klayman::stStartWalkingResume); - } else { - GotoState(&Klayman::stPeekWall); - } - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 0) { - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - _walkResumeFrameIncr = 1; - _vm->_soundMan->addSound(0x80101800, 0xD3B02847); -} - -KmScene2206::~KmScene2206() { - _vm->_soundMan->deleteSoundGroup(0x80101800); -} - -void KmScene2206::xUpdate() { - setGlobalVar(V_KLAYMAN_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(&Klayman::stTryStandIdle); - break; - case 0x4803: - GotoState(&Klayman::stRidePlatformDown); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klayman::stStartWalkingResume); - } else { - GotoState(&Klayman::stPeekWall); - } - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - 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 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 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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x2001: - GotoState(&Klayman::stRidePlatform); - break; - case 0x2005: - suRidePlatform(); - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case 0x480D: - GotoState(&Klayman::stInteractLever); - break; - case NM_KLAYMAN_PICKUP: - GotoState(&Klayman::stPickUpGeneric); - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case NM_KLAYMAN_RELEASE_LEVER: - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -void KmScene2242::xUpdate() { - setGlobalVar(V_KLAYMAN_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(&Klayman::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klayman::stStartWalkingResume); - } else { - GotoState(&Klayman::stPeekWall); - } - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) { - GotoState(&Klayman::stPickUpNeedle); - } else if (param.asInteger() == 1) { - GotoState(&Klayman::stPickUpTube); - } else { - GotoState(&Klayman::stPickUpGeneric); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - 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 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmHallOfRecords::KmHallOfRecords(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -void KmHallOfRecords::xUpdate() { - setGlobalVar(V_KLAYMAN_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(&Klayman::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klayman::stStartWalkingResume); - } else { - GotoState(&Klayman::stPeekWall); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - 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 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmScene2247::KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -void KmScene2247::xUpdate() { - setGlobalVar(V_KLAYMAN_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(&Klayman::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klayman::stStartWalkingResume); - } else { - GotoState(&Klayman::stPeekWall); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - 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 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmScene2401::KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // 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(&Klayman::stTryStandIdle); - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stTurnAwayFromUse); - } else if (param.asInteger() == 0) { - GotoState(&Klayman::stTurnToUseHalf); - } else { - GotoState(&Klayman::stWonderAbout); - } - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - 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 0x4832: - GotoState(&Klayman::stUseTube); - break; - case 0x4833: - if (param.asInteger() == 1) - GotoState(&Klayman::stWonderAbout); - else { - _spitPipeIndex = sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // 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(&Klayman::stStandWonderAbout); - else - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klayman::stWalkingFirst); - } else { - GotoState(&Klayman::stPeekWall); - } - break; - case NM_KLAYMAN_PICKUP: - GotoState(&Klayman::stPickUpGeneric); - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - 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 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return messageResult; -} - -KmScene2403::KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // 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(&Klayman::stTryStandIdle); - break; - case 0x480D: - GotoState(&Klayman::stPullCord); - break; - case NM_KLAYMAN_PICKUP: - GotoState(&Klayman::stPickUpGeneric); - break; - case NM_KLAYMAN_PRESS_BUTTON: - if (param.asInteger() == 1) { - GotoState(&Klayman::stPressButton); - } else if (param.asInteger() == 2) { - GotoState(&Klayman::stPressFloorButton); - } else { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - 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 0x4820: - sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klayman::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - _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(&Klayman::stTryStandIdle); - break; - case 0x4804: - if (param.asInteger() != 0) { - _destX = param.asInteger(); - GotoState(&Klayman::stWalkingFirst); - } else { - GotoState(&Klayman::stPeekWall); - } - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) - GotoState(&Klayman::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klayman::stPickUpTube); - else - GotoState(&Klayman::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481A: - GotoState(&Klayman::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) - sub41CC40(param.asPoint().y, param.asPoint().x); - else - sub41CCE0(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::stReturnFromUse); - 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 0x4820: - sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klayman::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // 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(&Klayman::stSitIdleTeleporter); - else - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klayman::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klayman::stReturnFromUseInTeleporter); - break; - case 0x4834: - GotoState(&Klayman::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klayman::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klayman::stGetUpFromTeleporter); - break; - } - return messageResult; -} - -KmScene2732::KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -uint32 KmScene2732::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4804: - GotoState(&Klayman::stPeekInside); - break; - case 0x483C: - GotoState(&Klayman::stPeekInsideReturn); - break; - } - return 0; -} - -KmScene2801::KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -uint32 KmScene2801::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case NM_KLAYMAN_PICKUP: - GotoState(&Klayman::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481B: - if (param.asPoint().y != 0) { - sub41CC40(param.asPoint().y, param.asPoint().x); - } else { - sub41CCE0(param.asPoint().x); - } - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::stReturnFromUse); - break; - case 0x481F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stWonderAboutAfter); - } else if (param.asInteger() == 0) { - GotoState(&Klayman::stWonderAboutHalf); - } else if (param.asInteger() == 4) { - GotoState(&Klayman::stTurnAwayFromUse); - } else if (param.asInteger() == 3) { - GotoState(&Klayman::stTurnToUseHalf); - } else { - GotoState(&Klayman::stWonderAbout); - } - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - 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 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmScene2803::KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - _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(&Klayman::stTryStandIdle); - break; - case 0x4803: - _destY = param.asInteger(); - GotoState(&Klayman::stJumpToGrab); - break; - case 0x4804: - if (param.asInteger() == 3) - GotoState(&Klayman::stFinishGrow); - break; - case 0x480D: - GotoState(&Klayman::stPullCord); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::stReturnFromUse); - break; - case 0x481F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stWonderAboutAfter); - } else { - GotoState(&Klayman::stWonderAboutHalf); - } - break; - case 0x482E: - GotoState(&Klayman::stWalkToFront); - break; - case 0x482F: - GotoState(&Klayman::stTurnToBack); - break; - case 0x4834: - GotoState(&Klayman::stStepOver); - break; - case 0x4838: - GotoState(&Klayman::stJumpToGrabRelease); - break; - } - return 0; -} - -KmScene2803Small::KmScene2803Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - _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(&Klayman::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(&Klayman::stWonderAboutAfterSmall); - else if (param.asInteger() == 0) - GotoState(&Klayman::stWonderAboutHalfSmall); - else - GotoState(&Klayman::stWonderAboutSmall); - break; - case 0x482E: - if (param.asInteger() == 1) - GotoState(&Klayman::stWalkToFrontNoStepSmall); - else if (param.asInteger() == 2) - GotoState(&Klayman::stWalkToFront2Small); - else - GotoState(&Klayman::stWalkToFrontSmall); - break; - case 0x482F: - if (param.asInteger() == 1) - GotoState(&Klayman::stTurnToBackHalfSmall); - else if (param.asInteger() == 2) - GotoState(&Klayman::stTurnToBackWalkSmall); - else - GotoState(&Klayman::stTurnToBackSmall); - break; - case 0x4830: - GotoState(&Klayman::stShrink); - break; - } - return 0; -} - -KmScene2805::KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // 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(&Klayman::stSitIdleTeleporter); - else - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481D: - if (_isSittingInTeleporter) - GotoState(&Klayman::stTurnToUseInTeleporter); - break; - case 0x481E: - if (_isSittingInTeleporter) - GotoState(&Klayman::stReturnFromUseInTeleporter); - break; - case 0x4834: - GotoState(&Klayman::stStepOver); - break; - case 0x4835: - sendMessage(_parentScene, 0x2000, 1); - _isSittingInTeleporter = true; - GotoState(&Klayman::stSitInTeleporter); - break; - case 0x4836: - sendMessage(_parentScene, 0x2000, 0); - _isSittingInTeleporter = false; - GotoState(&Klayman::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 flag, NRect *clipRects, uint clipRectsCount) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - if (flag) { - 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(&Klayman::stTryStandIdle); - break; - case 0x4804: - startWalkToX(440, true); - break; - case 0x480D: - GotoState(&Klayman::stPullCord); - break; - case 0x4816: - if (param.asInteger() == 0) { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x4831: - GotoState(&Klayman::stGrow); - break; - case 0x4832: - if (param.asInteger() == 1) { - GotoState(&Klayman::stDrinkPotion); - } else { - GotoState(&Klayman::stUseTube); - } - break; - } - return 0; -} - -KmScene2809::KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, - bool flag, NRect *clipRects, uint clipRectsCount) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - if (flag) { - 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(&Klayman::stTryStandIdle); - break; - case 0x4804: - startWalkToX(226, true); - break; - case 0x480D: - GotoState(&Klayman::stPullCord); - break; - case 0x4816: - if (param.asInteger() == 0) { - GotoState(&Klayman::stPressButtonSide); - } - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x4831: - GotoState(&Klayman::stGrow); - break; - case 0x4832: - if (param.asInteger() == 1) { - GotoState(&Klayman::stDrinkPotion); - } else { - GotoState(&Klayman::stUseTube); - } - break; - } - return 0; -} - -KmScene2810Small::KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -uint32 KmScene2810Small::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToXSmall(param.asPoint().x); - break; - case 0x4004: - GotoState(&Klayman::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(&Klayman::stWonderAboutAfterSmall); - else if (param.asInteger() == 0) - GotoState(&Klayman::stWonderAboutHalfSmall); - else - GotoState(&Klayman::stWonderAboutSmall); - break; - case 0x482E: - if (param.asInteger() == 1) { - GotoState(&Klayman::stWalkToFrontNoStepSmall); - } else { - GotoState(&Klayman::stWalkToFrontSmall); - } - break; - case 0x482F: - if (param.asInteger() == 1) { - GotoState(&Klayman::stTurnToBackHalfSmall); - } else { - GotoState(&Klayman::stTurnToBackSmall); - } - break; - case 0x4837: - stopWalking(); - break; - } - return 0; -} - -KmScene2810::KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, uint clipRectsCount) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - - _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(&Klayman::stTryStandIdle); - break; - case 0x4803: - _destY = param.asInteger(); - GotoState(&Klayman::stJumpToGrab); - break; - case 0x4804: - if (param.asInteger() == 3) - GotoState(&Klayman::stFinishGrow); - break; - case NM_KLAYMAN_PICKUP: - GotoState(&Klayman::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) { - 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 if (param.asInteger() == 5) { - GotoState(&Klayman::stTurnToUseExt); - } else { - GotoState(&Klayman::stWonderAbout); - } - break; - case 0x4820: - sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klayman::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klayman::stClimbLadderHalf); - break; - case 0x4824: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klayman::stStartClimbLadderDown); - break; - case 0x4825: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klayman::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) - : Klayman(vm, parentScene, x, y, 1000, 1000) { - // Empty -} - -uint32 KmScene2812::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klayman::stTryStandIdle); - break; - case 0x4805: - _destY = param.asInteger(); - GotoState(&Klayman::stJumpToGrabFall); - break; - case NM_KLAYMAN_PICKUP: - if (param.asInteger() == 2) - GotoState(&Klayman::stPickUpNeedle); - else if (param.asInteger() == 1) - GotoState(&Klayman::stPickUpTube); - else - GotoState(&Klayman::stPickUpGeneric); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x481A: - GotoState(&Klayman::stInsertDisk); - break; - case 0x481B: - if (param.asPoint().y != 0) - sub41CC40(param.asPoint().y, param.asPoint().x); - else - sub41CCE0(param.asPoint().x); - break; - case 0x481D: - GotoState(&Klayman::stTurnToUse); - break; - case 0x481E: - GotoState(&Klayman::stReturnFromUse); - break; - case 0x4820: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klayman::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2001, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2001, 0); - _destY = param.asInteger(); - GotoState(&Klayman::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2002, 0); - GotoState(&Klayman::stClimbLadderHalf); - break; - case 0x482D: - setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0); - gotoNextStateExt(); - 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; -} - -} // End of namespace Neverhood diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h deleted file mode 100644 index 99fccebc0a..0000000000 --- a/engines/neverhood/klayman.h +++ /dev/null @@ -1,764 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef NEVERHOOD_KLAYMAN_H -#define NEVERHOOD_KLAYMAN_H - -#include "neverhood/neverhood.h" -#include "neverhood/sprite.h" -#include "neverhood/graphics.h" -#include "neverhood/resource.h" - -namespace Neverhood { - -// TODO This code is horrible and weird and a lot of stuff needs renaming once a better name is found -// TODO Also the methods should probably rearranged and be grouped together more consistently - -class Klayman; -class Scene; - -const uint32 kKlaymanSpeedUpHash = 0x004A2148; - -#include "common/pack-start.h" // START STRUCT PACKING - -struct KlaymanIdleTableItem { - int value; - void (Klayman::*callback)(); -}; - -#include "common/pack-end.h" // END STRUCT PACKING - -class Klayman : public AnimatedSprite { -public: - Klayman(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL); - - void update(); - - void startIdleAnimation(uint32 fileHash, AnimationCb callback); - void upIdleAnimation(); - - void stDoIdlePickEar(); - void stIdlePickEar(); - void evIdlePickEarDone(); - uint32 hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender); - - void stDoIdleSpinHead(); - void stIdleSpinHead(); - uint32 hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender); - - void stDoIdleArms(); - void stIdleArms(); - void evIdleArmsDone(); - uint32 hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender); - - void stDoIdleChest(); - void stIdleChest(); - uint32 hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender); - - void stDoIdleHeadOff(); - void stIdleHeadOff(); - uint32 hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender); - - void stIdleWonderAbout(); - - void stDoIdleTeleporterHands(); - void stIdleTeleporterHands(); - - void stDoIdleTeleporterHands2(); - void stIdleTeleporterHands2(); - - void stTryStandIdle(); - void stStandAround(); - void upStandIdle(); - void stIdleBlink(); - - bool stStartAction(AnimationCb callback3); - bool stStartActionFromIdle(AnimationCb callback); - uint32 hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender); - - void stSneak(); - uint32 hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender); - void suSneaking(); - void evSneakingDone(); - - void stStartWalking(); - void stStartWalkingExt(); - void stWalkingOpenDoor(); - void suWalkingOpenDoor(); - void stStepOver(); - uint32 hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender); - void evStartWalkingDone(); - - void stWalkingFirst(); - void stWalkingFirstExt(); - void stStartWalkingResume(); - void stUpdateWalkingFirst(); - uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender); - void suWalkingFirst(); - - void stWalkToFrontNoStep(); - void stWalkToFront(); - void stTurnToFront(); - void stTurnToBack(); - uint32 hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender); - - void stTurnToBackToUse(); - uint32 hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender); - - void stPickUpGeneric(); - void stPickUpNeedle(); - uint32 hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender); - - void stPickUpTube(); - uint32 hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender); - - void stTurnToUse(); - void stTurnToUseHalf(); - void stTurnAwayFromUse(); - void stReturnFromUse(); - void stTurnToUseExt(); - uint32 hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender); - - void stLargeStep(); - uint32 hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender); - void suLargeStep(); - void evLargeStepDone(); - - void stInsertKey(); - uint32 hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender); - - void stReadNote(); - uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender); - - void stHitByDoor(); - uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender); - - void stPeekWall(); - uint32 hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender); - - void stPeekWallReturn(); - uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender); - - void stPeekWallBlink(); - void upPeekWallBlink(); - - void stPeekWall1(); - - void stPeekWall2(); - - void stPullHammerLever(); - uint32 hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender); - - void stRidePlatformDown(); - void suRidePlatformDown(); - - void stCrashDown(); - void stCrashDownFinished(); - - void stShrink(); - uint32 hmShrink(int messageNum, const MessageParam ¶m, Entity *sender); - - void stGrow(); - uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender); - - void stDrinkPotion(); - uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender); - - void stPullCord(); - void stReleaseCord(); - uint32 hmPullReleaseCord(int messageNum, const MessageParam ¶m, Entity *sender); - - void stUseTube(); - uint32 hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender); - - void stUseLever(); - void stUseLeverRelease(); - void stReleaseLever(); - void stInteractLever(); - uint32 hmLever(int messageNum, const MessageParam ¶m, Entity *sender); - - void stLetGoOfLever(); - void evLeverReleasedEvent(); - - void stWakeUp(); - - void stSleeping(); - uint32 hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender); - - void stPressButton(); - void stPressFloorButton(); - void stPressButtonSide(); - uint32 hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender); - - void stWonderAbout(); - void stWonderAboutHalf(); - void stWonderAboutAfter(); - - void stStandWonderAbout(); - - void stStartClimbLadderUp(); - void stStartClimbLadderDown(); - uint32 hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender); - - void stContinueClimbLadderUp(); - - void stClimbLadderHalf(); - uint32 hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender); - - void setupJumpToRing(); - void stJumpToRing1(); - void stJumpToRing2(); - void stJumpToRing4(); - uint32 hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender); - - void stHangOnRing(); - - void stJumpToRing3(); - uint32 hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender); - - void stHoldRing3(); - uint32 hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *sender); - - void stReleaseRing(); - - void stLandOnFeet(); - uint32 hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender); - - void stPullLeverDown(); - void stHoldLeverDown(); - - void stInsertDisk(); - uint32 hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender); - - void stMoveObjectSkipTurnFaceObject(); - void stMoveObjectSkipTurn(); - void stMoveObjectFaceObject(); - uint32 hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender); - void evMoveObjectTurnDone(); - - void stJumpToGrab(); - void stJumpToGrabFall(); - uint32 hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender); - void suJumpToGrab(); - - void stJumpToGrabRelease(); - uint32 hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender); - - void stSitInTeleporter(); - uint32 hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender); - - void stSitIdleTeleporter(); - void upSitIdleTeleporter(); - - void stSitIdleTeleporterBlink(); - - void stSitIdleTeleporterBlinkSecond(); - - void stTurnToUseInTeleporter(); - - void stReturnFromUseInTeleporter(); - - void stGetUpFromTeleporter(); - - void teleporterAppear(uint32 fileHash); - void teleporterDisappear(uint32 fileHash); - uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender); - - void stClayDoorOpen(); - uint32 hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender); - - void stFallSkipJump(); - void suFallSkipJump(); - - void stMoveObject(); - void stContinueMoveObject(); - uint32 hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender); - void upMoveObject(); - - void stCloseEyes(); - - void stTumbleHeadless(); - uint32 hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender); - - void stFetchMatch(); - void stLightMatch(); - uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender); - - void stHitByBoxingGlove(); - uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender); - void evHitByBoxingGloveDone(); - - void stStandIdleSmall(); - void stWonderAboutSmall(); - void stWonderAboutHalfSmall(); - void stWonderAboutAfterSmall(); - - void stWalkToFrontNoStepSmall(); - void stWalkToFrontSmall(); - void stWalkToFront2Small(); - void stTurnToBackHalfSmall(); - void stTurnToBackWalkSmall(); - void stTurnToBackSmall(); - uint32 hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender); - - void stFinishGrow(); - uint32 hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender); - - void stJumpToRingVenusFlyTrap(); - uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender); - - void stDropFromRing(); - - void stStandIdleSpecial(); - uint32 hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender); - - void stPressDoorButton(); - uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender); - - void stSpitOutFall0(); - void stSpitOutFall2(); - void suFallDown(); - void upSpitOutFall(); - - void stJumpAndFall(); - uint32 hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender); - - void stFalling(); - void stFallTouchdown(); - - void stMoveVenusFlyTrap(); - void stContinueMovingVenusFlyTrap(); - uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender); - uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender); - void evMoveVenusFlyTrapDone(); - - void stPeekInside(); - void stPeekInsideReturn(); - void stPeekInsideBlink(); - void upPeekInsideBlink(); - - //////////////////////////////////////////////////////////////////////////// - - void stopWalking(); - - void suAction(); - void suUpdateDestX(); - void suWalkingTestExit(); - - uint32 hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender); - uint32 hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender); - - void setKlaymanIdleTable(const KlaymanIdleTableItem *table, int tableCount); - void setKlaymanIdleTable1(); - void setKlaymanIdleTable2(); - void setKlaymanIdleTable3(); - - void setSoundFlag(bool value) { _soundFlag = value; } - - void spitIntoPipe(); - void stTrySpitIntoPipe(); - void stContSpitIntoPipe(); - uint32 hmSpit(int messageNum, const MessageParam ¶m, Entity *sender); - - void stRidePlatform(); - void suRidePlatform(); - void stPullLever(); - void stLookLeverDown(); - void stWaitLeverDown(); - -protected: - Scene *_parentScene; - Sprite *_attachedSprite; - int _ladderStatus; - bool _isWalking; - bool _isSneaking; - bool _isLargeStep; - bool _isMoveObjectRequested; - bool _acceptInput; - int16 _destX, _destY; - int16 _idleCounter, _idleCounterMax; - int16 _blinkCounter, _blinkCounterMax; - int16 _countdown1; - int16 _tapesToInsert, _keysToInsert; - bool _flagF6; - bool _isLeverDown; - bool _isWalkingOpenDoorNotified; - int _status2; - bool _flagFA; - int _status3; - const KlaymanIdleTableItem *_idleTable; - int _idleTableCount; - int _idleTableMaxValue; - NPointArray *_pathPoints; - bool _soundFlag; - - bool _isSittingInTeleporter; - - bool _potionFlag1; - bool _potionFlag2; - - int16 _platformDeltaY; - - Sprite *_otherSprite; - int _idleTableNum; - - int16 _walkResumeFrameIncr; - - 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 ¶m); - - void startWalkToX(int16 x, bool flag); - void startWalkToXExt(int16 x); - void startWalkToXSmall(int16 x); - void startSpecialWalkLeft(int16 x); - void startSpecialWalkRight(int16 x); - void sub41CC40(int16 x1, int16 x2); - void sub41CCE0(int16 x); - - void gotoNextStateExt(); - void sub41C770(); - void sub41C790(); - - void stStartWalkingSmall(); - uint32 hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender); - - void walkAlongPathPoints(); - -}; - -class KmScene1001 : public Klayman { -public: - KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1002 : public Klayman { -public: - KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - void xUpdate(); - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1004 : public Klayman { -public: - KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1109 : public Klayman { -public: - KmScene1109(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1201 : public Klayman { -public: - KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1303 : public Klayman { -public: - KmScene1303(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1304 : public Klayman { -public: - KmScene1304(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1305 : public Klayman { -public: - KmScene1305(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1306 : public Klayman { -public: - KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1308 : public Klayman { -public: - KmScene1308(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1401 : public Klayman { -public: - KmScene1401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1402 : public Klayman { -public: - KmScene1402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1403 : public Klayman { -public: - KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1404 : public Klayman { -public: - KmScene1404(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1608 : public Klayman { -public: - KmScene1608(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1705 : public Klayman { -public: - KmScene1705(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene1901 : public Klayman { -public: - KmScene1901(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2001 : public Klayman { -public: - KmScene2001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2101 : public Klayman { -public: - KmScene2101(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2201 : public Klayman { -public: - KmScene2201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2203 : public Klayman { -public: - KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2205 : public Klayman { -public: - KmScene2205(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - void xUpdate(); - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2206 : public Klayman { -public: - KmScene2206(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); - ~KmScene2206(); -protected: - void xUpdate(); - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2207 : public Klayman { -public: - KmScene2207(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2242 : public Klayman { -public: - KmScene2242(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - void xUpdate(); - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmHallOfRecords : public Klayman { -public: - KmHallOfRecords(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - void xUpdate(); - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2247 : public Klayman { -public: - KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - void xUpdate(); - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2401 : public Klayman { -public: - KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2402 : public Klayman { -public: - KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2403 : public Klayman { -public: - KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2406 : public Klayman { -public: - KmScene2406(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2501 : public Klayman { -public: - KmScene2501(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2732 : public Klayman { -public: - KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2801 : public Klayman { -public: - KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2803 : public Klayman { -public: - KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2803Small : public Klayman { -public: - KmScene2803Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2805 : public Klayman { -public: - KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2806 : public Klayman { -public: - KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, - bool flag, NRect *clipRects, uint clipRectsCount); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2809 : public Klayman { -public: - KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, - bool flag, NRect *clipRects, uint clipRectsCount); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2810Small : public Klayman { -public: - KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2810 : public Klayman { -public: - KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, - NRect *clipRects, uint clipRectsCount); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -class KmScene2812 : public Klayman { -public: - KmScene2812(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); -protected: - uint32 xHandleMessage(int messageNum, const MessageParam ¶m); -}; - -} // End of namespace Neverhood - -#endif /* NEVERHOOD_KLAYMAN_H */ diff --git a/engines/neverhood/klaymen.cpp b/engines/neverhood/klaymen.cpp new file mode 100644 index 0000000000..6d139b1abc --- /dev/null +++ b/engines/neverhood/klaymen.cpp @@ -0,0 +1,6240 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "neverhood/klaymen.h" +#include "neverhood/resourceman.h" +#include "neverhood/scene.h" +#include "neverhood/staticdata.h" + +namespace Neverhood { + +static const KlaymenIdleTableItem klaymenTable1[] = { + {1, &Klaymen::stDoIdlePickEar}, + {1, &Klaymen::stDoIdleSpinHead}, + {1, &Klaymen::stDoIdleArms}, + {1, &Klaymen::stDoIdleChest}, + {1, &Klaymen::stDoIdleHeadOff} +}; + +static const KlaymenIdleTableItem klaymenTable2[] = { + {1, &Klaymen::stDoIdlePickEar}, + {1, &Klaymen::stDoIdleSpinHead}, + {1, &Klaymen::stDoIdleChest}, + {1, &Klaymen::stDoIdleHeadOff} +}; + +static const KlaymenIdleTableItem klaymenTable3[] = { + {1, &Klaymen::stDoIdleTeleporterHands}, + {1, &Klaymen::stDoIdleTeleporterHands2} +}; + +static const KlaymenIdleTableItem klaymenTable4[] = { + {1, &Klaymen::stDoIdleSpinHead}, + {1, &Klaymen::stDoIdleChest}, + {1, &Klaymen::stDoIdleHeadOff}, +}; + +static const KlaymenIdleTableItem klaymenIdleTable1002[] = { + {1, &Klaymen::stDoIdlePickEar}, + {2, &Klaymen::stIdleWonderAbout} +}; + +// Klaymen + +Klaymen::Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority, int objectPriority, NRectArray *clipRects) + : 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), + _idleTableNum(0), _otherSprite(NULL), _moveObjectCountdown(0), _readyToSpit(false), _walkResumeFrameIncr(0) { + + createSurface(surfacePriority, 320, 200); + _x = x; + _y = y; + _destX = x; + _destY = y; + _flags = 2; + setKlaymenIdleTable1(); + stTryStandIdle(); + SetUpdateHandler(&Klaymen::update); +} + +void Klaymen::xUpdate() { + // Empty +} + +uint32 Klaymen::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 0x4818: + startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); + break; + } + return 0; +} + +void Klaymen::update() { + AnimatedSprite::update(); + xUpdate(); +} + +void Klaymen::setKlaymenIdleTable(const KlaymenIdleTableItem *table, int tableCount) { + _idleTable = table; + _idleTableCount = tableCount; + _idleTableMaxValue = 0; + for (int i = 0; i < tableCount; i++) + _idleTableMaxValue += table[i].value; +} + +void Klaymen::setKlaymenIdleTable1() { + setKlaymenIdleTable(klaymenTable1, ARRAYSIZE(klaymenTable1)); +} + +void Klaymen::setKlaymenIdleTable2() { + setKlaymenIdleTable(klaymenTable2, ARRAYSIZE(klaymenTable2)); +} + +void Klaymen::setKlaymenIdleTable3() { + setKlaymenIdleTable(klaymenTable3, ARRAYSIZE(klaymenTable3)); +} + +void Klaymen::stDoIdlePickEar() { + startIdleAnimation(0x5B20C814, AnimationCallback(&Klaymen::stIdlePickEar)); +} + +void Klaymen::stIdlePickEar() { + _status2 = 1; + _acceptInput = true; + startAnimation(0x5B20C814, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmIdlePickEar); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stStandAround); + FinalizeState(&Klaymen::evIdlePickEarDone); +} + +uint32 Klaymen::hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x04DBC02C) { + playSound(0, 0x44528AA1); + } + break; + } + return messageResult; +} + +void Klaymen::evIdlePickEarDone() { + stopSound(0); +} + +void Klaymen::stDoIdleSpinHead() { + startIdleAnimation(0xD122C137, AnimationCallback(&Klaymen::stIdleSpinHead)); +} + +void Klaymen::stIdleSpinHead() { + _status2 = 1; + _acceptInput = true; + startAnimation(0xD122C137, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmIdleSpinHead); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stStandAround); +} + +uint32 Klaymen::hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x808A0008) { + playSound(0, 0xD948A340); + } + break; + } + return messageResult; +} + +void Klaymen::stDoIdleArms() { + startIdleAnimation(0x543CD054, AnimationCallback(&Klaymen::stIdleArms)); +} + +void Klaymen::stIdleArms() { + _status2 = 1; + _acceptInput = true; + startAnimation(0x543CD054, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmIdleArms); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stStandAround); + FinalizeState(&Klaymen::evIdleArmsDone); +} + +void Klaymen::evIdleArmsDone() { + stopSound(0); +} + +uint32 Klaymen::hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x5A0F0104) { + playSound(0, 0x7970A100); + } else if (param.asInteger() == 0x9A9A0109) { + playSound(0, 0xD170CF04); + } else if (param.asInteger() == 0x989A2169) { + playSound(0, 0xD073CF14); + } + break; + } + return messageResult; +} + +void Klaymen::stDoIdleChest() { + startIdleAnimation(0x40A0C034, AnimationCallback(&Klaymen::stIdleChest)); +} + +void Klaymen::stIdleChest() { + _status2 = 1; + _acceptInput = true; + startAnimation(0x40A0C034, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmIdleChest); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stStandAround); +} + +uint32 Klaymen::hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x0D2A0288) { + playSound(0, 0xD192A368); + } + break; + } + return messageResult; +} + +void Klaymen::stDoIdleHeadOff() { + startIdleAnimation(0x5120E137, AnimationCallback(&Klaymen::stIdleHeadOff)); +} + +void Klaymen::stIdleHeadOff() { + _status2 = 1; + _acceptInput = true; + startAnimation(0x5120E137, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmIdleHeadOff); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stStandAround); +} + +uint32 Klaymen::hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0xC006000C) { + playSound(0, 0x9D406340); + } else if (param.asInteger() == 0x2E4A2940) { + playSound(0, 0x53A4A1D4); + } else if (param.asInteger() == 0xAA0A0860) { + playSound(0, 0x5BE0A3C6); + } else if (param.asInteger() == 0xC0180260) { + playSound(0, 0x5D418366); + } + break; + } + return messageResult; +} + +void Klaymen::stIdleWonderAbout() { + _status2 = 1; + _acceptInput = true; + startAnimation(0xD820A114, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stStandAround); +} + +void Klaymen::stSitIdleTeleporter() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x582EC138, 0, -1); + SetUpdateHandler(&Klaymen::upSitIdleTeleporter); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(NULL); + _idleCounter = 0; + _blinkCounter = 0; + _idleCounterMax = 8; + _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24; +} + +void Klaymen::upSitIdleTeleporter() { + update(); + _idleCounter++; + if (_idleCounter >= _idleCounterMax) { + _idleCounter = 0; + if (_idleTable) { + int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue); + for (int i = 0; i < _idleTableCount; i++) { + if (randomValue < _idleTable[i].value) { + (this->*(_idleTable[i].callback))(); + _idleCounterMax = _vm->_rnd->getRandomNumber(128 - 1) + 24; + break; + } + randomValue -= _idleTable[i].value; + } + } + } else if (++_blinkCounter >= _blinkCounterMax) { + _blinkCounter = 0; + _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24; + stSitIdleTeleporterBlink(); + } +} + +void Klaymen::stSitIdleTeleporterBlink() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x5C24C018, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stSitIdleTeleporterBlinkSecond); +} + +void Klaymen::stSitIdleTeleporterBlinkSecond() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x5C24C018, 0, -1); + SetUpdateHandler(&Klaymen::upSitIdleTeleporter); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(NULL); +} + +void Klaymen::stPickUpNeedle() { + setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); + if (!stStartAction(AnimationCallback(&Klaymen::stPickUpNeedle))) { + _status2 = 1; + _acceptInput = false; + startAnimation(0x1449C169, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPickUpObject); + SetSpriteUpdate(NULL); + } +} + +void Klaymen::stPickUpTube() { + setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); + if (!stStartAction(AnimationCallback(&Klaymen::stPickUpTube))) { + _status2 = 1; + _acceptInput = false; + startAnimation(0x0018C032, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPickUpTube); + SetSpriteUpdate(NULL); + } +} + +uint32 Klaymen::hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0xC1380080) { + sendMessage(_attachedSprite, 0x4806, 0); + playSound(0, 0xC8004340); + } else if (param.asInteger() == 0x02B20220) { + playSound(0, 0xC5408620); + } else if (param.asInteger() == 0x03020231) { + playSound(0, 0xD4C08010); + } else if (param.asInteger() == 0x67221A03) { + playSound(0, 0x44051000); + } else if (param.asInteger() == 0x925A0C1E) { + playSound(0, 0x40E5884D); + } + break; + } + return messageResult; +} + +void Klaymen::stTurnToUseInTeleporter() { + _status2 = 0; + _acceptInput = false; + startAnimation(0xD229823D, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stReturnFromUseInTeleporter() { + _status2 = 0; + _acceptInput = false; + startAnimation(0x9A2801E0, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stStepOver() { + if (!stStartAction(AnimationCallback(&Klaymen::stStepOver))) { + _status2 = 2; + _acceptInput = false; + startAnimation(0x004AA310, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmStartWalking); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } +} + +void Klaymen::stSitInTeleporter() { + if (!stStartAction(AnimationCallback(&Klaymen::stSitInTeleporter))) { + _status2 = 0; + _acceptInput = false; + startAnimation(0x392A0330, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmSitInTeleporter); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } +} + +uint32 Klaymen::hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x001A2832) { + playSound(0, 0xC0E4884C); + } + break; + } + return messageResult; +} + +void Klaymen::stGetUpFromTeleporter() { + _status2 = 0; + _acceptInput = false; + startAnimation(0x913AB120, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +///////////////////////////////////////////////////////////////// + +void Klaymen::stopWalking() { + _destX = _x; + if (!_isWalking && !_isSneaking && !_isLargeStep) { + gotoState(NULL); + gotoNextStateExt(); + } +} + +void Klaymen::startIdleAnimation(uint32 fileHash, AnimationCb callback) { + debug("startIdleAnimation(%08X)", fileHash); + NextState(callback); + SetUpdateHandler(&Klaymen::upIdleAnimation); +} + +void Klaymen::upIdleAnimation() { + gotoNextStateExt(); + update(); +} + +bool Klaymen::stStartActionFromIdle(AnimationCb callback) { + if (_status2 == 2) { + _status2 = 1; + _acceptInput = false; + startAnimation(0x9A7020B8, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmStartAction); + SetSpriteUpdate(NULL); + NextState(callback); + return true; + } + return false; +} + +void Klaymen::gotoNextStateExt() { + if (_finalizeStateCb) { + AnimationCb cb = _finalizeStateCb; + _finalizeStateCb = NULL; + (this->*cb)(); + } + if (_nextStateCb) { + AnimationCb cb = _nextStateCb; + _nextStateCb = NULL; + (this->*cb)(); + } else { + // Inform the scene that the current Klaymen animation sequence has finished + sendMessage(_parentScene, 0x1006, 0); + } +} + +void Klaymen::sub41C770() { + _flagFA = false; + _status3 = 1; +} + +void Klaymen::sub41C790() { + if (_flagFA) + _status3 = 0; +} + +void Klaymen::stTryStandIdle() { + if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stTryStandIdle))) { + _status2 = 1; + _acceptInput = true; + startAnimation(0x5420E254, 0, -1); + SetUpdateHandler(&Klaymen::upStandIdle); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(NULL); + _idleCounter = 0; + _blinkCounter = 0; + _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24; + } +} + +void Klaymen::upStandIdle() { + update(); + if (++_idleCounter >= 720) { + _idleCounter = 0; + if (_idleTable) { + int randomValue = _vm->_rnd->getRandomNumber(_idleTableMaxValue - 1); + for (int i = 0; i < _idleTableCount; i++) { + if (randomValue < _idleTable[i].value) { + (this->*(_idleTable[i].callback))(); + break; + } + randomValue -= _idleTable[i].value; + } + } + } else if (++_blinkCounter >= _blinkCounterMax) { + _blinkCounter = 0; + _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24; + stIdleBlink(); + } +} + +uint32 Klaymen::hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender) { + Sprite::handleMessage(messageNum, param, sender); + uint32 messageResult = xHandleMessage(messageNum, param); + switch (messageNum) { + case 0x1008: + messageResult = _acceptInput; + break; + case 0x1014: + _attachedSprite = (Sprite*)(param.asEntity()); + break; + case 0x1019: + gotoNextStateExt(); + break; + case 0x101C: + sub41C770(); + break; + case 0x1021: + sub41C790(); + break; + case 0x481C: + _status3 = param.asInteger(); + _flagFA = true; + messageResult = 1; + break; + case 0x482C: + if (param.asInteger() != 0) { + _pathPoints = _dataResource.getPointArray(param.asInteger()); + } else { + _pathPoints = NULL; + } + break; + } + return messageResult; +} + +void Klaymen::stIdleBlink() { + _status2 = 1; + _acceptInput = true; + startAnimation(0x5900C41E, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stStandAround); +} + +uint32 Klaymen::hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevel(messageNum, param, sender); + switch (messageNum) { + case 0x3002: + gotoNextStateExt(); + break; + } + return messageResult; +} + +void Klaymen::stStandAround() { + _status2 = 1; + _acceptInput = true; + startAnimation(0x5420E254, 0, -1); + SetUpdateHandler(&Klaymen::upStandIdle); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(NULL); +} + +uint32 Klaymen::hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x271AA210) { + playSound(0, 0x4924AAC4); + } else if (param.asInteger() == 0x2B22AA81) { + playSound(0, 0x0A2AA8E0); + } + break; + } + return messageResult; +} + + +void Klaymen::startWalkToX(int16 x, bool flag) { + int16 xdiff = ABS(x - _x); + if (x == _x) { + _destX = x; + if (!_isWalking && !_isSneaking && !_isLargeStep) { + gotoState(NULL); + gotoNextStateExt(); + } + } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) { + _destX = x; + gotoState(NULL); + gotoNextStateExt(); + } else if (xdiff <= 42 && _status3 != 3) { + if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) { + _destX = x; + } else { + _destX = x; + GotoState(&Klaymen::stSneak); + } + } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) { + _destX = x; + } else if (flag) { + _destX = x; + GotoState(&Klaymen::stStartWalkingExt); + } else { + _destX = x; + GotoState(&Klaymen::stStartWalking); + } +} + +void Klaymen::stWakeUp() { + _status2 = 1; + _acceptInput = false; + startAnimation(0x527AC970, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stSleeping() { + _status2 = 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 (_status2 == 1) { + _status2 = 2; + _acceptInput = false; + startAnimation(0x5C7080D4, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmStartAction); + SetSpriteUpdate(&Klaymen::suAction); + NextState(callback3); + return true; + } else { + _x = _destX; + return false; + } +} + +void Klaymen::suAction() { + + int16 xdiff = _destX - _x; + + if (_doDeltaX) { + _x -= _deltaX; + } else { + _x += _deltaX; + } + _deltaX = 0; + + if (_doDeltaY) { + _y -= _deltaY; + } else { + _y += _deltaY; + } + _deltaY = 0; + + if (_frameChanged) { + if (xdiff > 6) + _x += 6; + else if (xdiff < -6) + _x -= 6; + else + _x = _destX; + } + + updateBounds(); + +} + +void Klaymen::suSneaking() { + + int16 xdiff = _destX - _x; + + if (_currFrameIndex == 9) { + if (xdiff > 26) + _deltaX += xdiff - 26; + else if (xdiff < -26) + _deltaX -= xdiff + 26; + } + + if (xdiff > _deltaX) + xdiff = _deltaX; + else if (xdiff < -_deltaX) + xdiff = -_deltaX; + _deltaX = 0; + + if (_destX != _x) { + HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y); + _x += xdiff; + if (_pathPoints) { + walkAlongPathPoints(); + } else { + HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y); + if (hitRectNext->type == 0x5002) { + _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2); + } else if (hitRectNext->type == 0x5003) { + _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2); + } else if (hitRectPrev->type == 0x5002) { + if (xdiff > 0) { + _y = hitRectPrev->rect.y2; + } else { + _y = hitRectPrev->rect.y1; + } + } else if (hitRectPrev->type == 0x5003) { + if (xdiff < 0) { + _y = hitRectPrev->rect.y2; + } else { + _y = hitRectPrev->rect.y1; + } + } + } + updateBounds(); + } + +} + +void Klaymen::stSneak() { + _status2 = 1; + _isSneaking = true; + _acceptInput = true; + setDoDeltaX(_destX < _x ? 1 : 0); + startAnimation(0x5C48C506, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmSneaking); + SetSpriteUpdate(&Klaymen::suSneaking); + FinalizeState(&Klaymen::evSneakingDone); +} + +void Klaymen::evSneakingDone() { + _isSneaking = false; +} + +uint32 Klaymen::hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevel(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x32180101) { + playSound(0, 0x4924AAC4); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, 0x0A2AA8E0); + } else if (param.asInteger() == 0x32188010) { + playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); + } else if (param.asInteger() == 0x02A2909C) { + playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA); + } + break; + case 0x3002: + _x = _destX; + gotoNextStateExt(); + break; + } + return messageResult; +} + +void Klaymen::stStartWalking() { + if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stStartWalking))) { + _status2 = 0; + _isWalking = true; + _acceptInput = true; + setDoDeltaX(_destX < _x ? 1 : 0); + startAnimation(0x242C0198, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmStartWalking); + SetSpriteUpdate(&Klaymen::suWalkingTestExit); + NextState(&Klaymen::stWalkingFirst); + FinalizeState(&Klaymen::evStartWalkingDone); + } +} + +void Klaymen::evStartWalkingDone() { + _isWalking = false; +} + +uint32 Klaymen::hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x32180101) { + playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA); + } + break; + } + return messageResult; +} + +void Klaymen::stWalkingFirst() { + _status2 = 0; + _isWalking = true; + _acceptInput = true; + startAnimation(0x1A249001, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalking); + SetSpriteUpdate(&Klaymen::suWalkingFirst); + NextState(&Klaymen::stUpdateWalkingFirst); + FinalizeState(&Klaymen::evStartWalkingDone); +} + +void Klaymen::suWalkingFirst() { + SetSpriteUpdate(&Klaymen::suWalkingTestExit); + _deltaX = 0; +} + +uint32 Klaymen::hmWalking(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevel(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x32180101) { + playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA); + } + break; + } + return messageResult; +} + +void Klaymen::stUpdateWalkingFirst() { + if (_status3 == 2) { + gotoNextStateExt(); + } else if (_status3 == 3) { + stWalkingOpenDoor(); + } else { + _isSneaking = true; + _acceptInput = true; + if (ABS(_destX - _x) <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) { + if (_status3 == 0) { + _status2 = 1; + startAnimation(0xF234EE31, 0, -1); + } else { + _status2 = 2; + startAnimation(0xF135CC21, 0, -1); + } + } else if (ABS(_destX - _x) <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) { + if (_status3 == 0) { + _status2 = 1; + startAnimation(0x8604A152, 0, -1); + } else { + _status2 = 2; + startAnimation(0xA246A132, 0, -1); + } + } + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmSneaking); + SetSpriteUpdate(&Klaymen::suSneaking); + FinalizeState(&Klaymen::evSneakingDone); + } +} + +void Klaymen::suWalkingTestExit() { + int16 xdiff = ABS(_destX - _x); + int16 xdelta = _destX - _x; + + if (xdelta > _deltaX) + xdelta = _deltaX; + else if (xdelta < -_deltaX) + xdelta = -_deltaX; + + _deltaX = 0; + + if (xdiff == 0 || + (_status3 != 2 && _status3 != 3 && xdiff <= 42 && _currFrameIndex >= 5 && _currFrameIndex <= 11) || + (_status3 != 2 && _status3 != 3 && xdiff <= 10 && (_currFrameIndex >= 12 || _currFrameIndex <= 4)) || + (_status3 == 3 && xdiff < 30) || + (_status3 == 3 && xdiff < 150 && _currFrameIndex >= 6)) { + sendMessage(this, 0x1019, 0); + } else { + HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y); + _x += xdelta; + if (_pathPoints) { + walkAlongPathPoints(); + } else { + HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y); + if (hitRectNext->type == 0x5002) { + _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2); + } else if (hitRectNext->type == 0x5003) { + _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2); + } else if (hitRectPrev->type == 0x5002) { + _y = xdelta > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1; + } else if (hitRectPrev->type == 0x5003) { + _y = xdelta < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1; + } else if (_flagF6 && xdelta != 0) { + if (hitRectNext->type == 0x5000) { + _y++; + } else if (hitRectNext->type == 0x5001 && _y > hitRectNext->rect.y1) { + _y--; + } + } + } + updateBounds(); + } + +} + +uint32 Klaymen::hmLever(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); + } + break; + } + return messageResult; +} + +void Klaymen::stPickUpGeneric() { + setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); + if (!stStartAction(AnimationCallback(&Klaymen::stPickUpGeneric))) { + _status2 = 1; + _acceptInput = false; + startAnimation(0x1C28C178, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPickUpObject); + SetSpriteUpdate(NULL); + } +} + +uint32 Klaymen::hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0xC1380080) { + sendMessage(_attachedSprite, 0x4806, 0); + playSound(0, 0x40208200); + } else if (param.asInteger() == 0x02B20220) { + playSound(0, 0xC5408620); + } else if (param.asInteger() == 0x03020231) { + playSound(0, 0xD4C08010); + } else if (param.asInteger() == 0x67221A03) { + playSound(0, 0x44051000); + } else if (param.asInteger() == 0x2EAE0303) { + playSound(0, 0x03630300); + } else if (param.asInteger() == 0x61CE4467) { + playSound(0, 0x03630300); + } + break; + } + return messageResult; + +} + +void Klaymen::stPressButton() { + if (!stStartAction(AnimationCallback(&Klaymen::stPressButton))) { + _status2 = 2; + _acceptInput = true; + startAnimation(0x1C02B03D, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPressButton); + SetSpriteUpdate(NULL); + } +} + +uint32 Klaymen::hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x0D01B294) { + sendMessage(_attachedSprite, 0x480B, 0); + } else if (param.asInteger() == 0x32180101) { + playSound(0, 0x4924AAC4); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, 0x0A2AA8E0); + } + break; + } + return messageResult; +} + +void Klaymen::stPressFloorButton() { + if (!stStartAction(AnimationCallback(&Klaymen::stPressFloorButton))) { + _status2 = 2; + _acceptInput = true; + startAnimation(0x1C16B033, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPressButton); + SetSpriteUpdate(NULL); + } +} + +void Klaymen::stPressButtonSide() { + if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stPressButtonSide))) { + _status2 = 1; + _acceptInput = true; + startAnimation(0x1CD89029, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPressButton); + SetSpriteUpdate(&Klaymen::suAction); + } +} + +void Klaymen::startSpecialWalkRight(int16 x) { + if (_x == x) { + _destX = x; + gotoState(NULL); + gotoNextStateExt(); + } else if (_x < x) { + startWalkToX(x, false); + } else if (_x - x <= 105) { + startWalkToXExt(x); + } else { + startWalkToX(x, false); + } +} + +void Klaymen::startSpecialWalkLeft(int16 x) { + if (x == _x) { + _destX = x; + gotoState(NULL); + gotoNextStateExt(); + } else if (x < _x) { + startWalkToX(x, false); + } else if (x - _x <= 105) { + startWalkToXExt(x); + } else { + startWalkToX(x, false); + } +} + +void Klaymen::startWalkToXSmall(int16 x) { + _status3 = 2; + if (_x == x) { + _destX = x; + if (_isWalking) { + GotoState(NULL); + gotoNextStateExt(); + } + } else if (_isWalking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) { + _destX = x; + } else { + _destX = x; + GotoState(&Klaymen::stStartWalkingSmall); + } +} + +void Klaymen::stStartWalkingSmall() { + _isWalking = true; + _acceptInput = true; + _status3 = 2; + setDoDeltaX(_destX < _x ? 1 : 0); + startAnimation(0x3A4CD934, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkingSmall); + SetSpriteUpdate(&Klaymen::suWalkingTestExit); + FinalizeState(&Klaymen::evStartWalkingDone); +} + +uint32 Klaymen::hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevel(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x32180101) + playSound(0, 0x4924AAC4); + else if (param.asInteger() == 0x0A2A9098) + playSound(0, 0x0A2AA8E0); + } + return messageResult; +} + +void Klaymen::stStandIdleSmall() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x90D0D1D0, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(NULL); +} + +void Klaymen::stWonderAboutAfterSmall() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x11C8D156, 30, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stWonderAboutHalfSmall() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x11C8D156, 0, 10); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stWonderAboutSmall() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x11C8D156, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stWalkToFrontNoStepSmall() { + _status2 = 0; + _acceptInput = false; + startAnimationByHash(0x3F9CC394, 0x14884392, 0); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkFrontBackSmall); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +uint32 Klaymen::hmWalkFrontBackSmall(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() == 0x110010D1) + sendMessage(_parentScene, 0x482B, 0); + else if (param.asInteger() == 0x32180101) + playSound(0, 0x4924AAC4); + else if (param.asInteger() == 0x0A2A9098) + playSound(0, 0x0A2AA8E0); + break; + } + return messageResult; +} + +void Klaymen::stWalkToFront2Small() { + _status2 = 0; + _acceptInput = false; + startAnimation(0x2F1C4694, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkFrontBackSmall); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +void Klaymen::stWalkToFrontSmall() { + _status2 = 0; + _acceptInput = false; + startAnimation(0x3F9CC394, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkFrontBackSmall); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +void Klaymen::stTurnToBackHalfSmall() { + _status2 = 0; + _acceptInput = false; + startAnimationByHash(0x37ECD436, 0, 0x8520108C); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkFrontBackSmall); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +void Klaymen::stTurnToBackWalkSmall() { + _status2 = 0; + _acceptInput = false; + startAnimation(0x16EDDE36, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkFrontBackSmall); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +void Klaymen::stTurnToBackSmall() { + _status2 = 0; + _acceptInput = false; + startAnimation(0x37ECD436, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkFrontBackSmall); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +void Klaymen::stPullCord() { + if (!stStartAction(AnimationCallback(&Klaymen::stPullCord))) { + _status2 = 2; + _acceptInput = false; + startAnimation(0x3F28E094, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPullReleaseCord); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stReleaseCord); + } +} + +void Klaymen::stReleaseCord() { + _acceptInput = false; + startAnimation(0x3A28C094, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPullReleaseCord); + SetSpriteUpdate(NULL); +} + +uint32 Klaymen::hmPullReleaseCord(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); + sendMessage(_attachedSprite, 0x480F, 0); + } else if (param.asInteger() == 0x88001184) { + sendMessage(_attachedSprite, 0x482B, 0); + } + break; + } + return messageResult; +} + +void Klaymen::stUseTube() { + if (!stStartAction(AnimationCallback(&Klaymen::stUseTube))) { + _status2 = 1; + _acceptInput = false; + startAnimation(0x1A38A814, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmUseTube); + SetSpriteUpdate(NULL); + } +} + +uint32 Klaymen::hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x02B20220) + playSound(0, 0xC5408620); + else if (param.asInteger() == 0x0A720138) + playSound(0, 0xD4C08010); + else if (param.asInteger() == 0x03020231) + playSound(0, 0xD4C08010); + else if (param.asInteger() == 0xB613A180) + playSound(0, 0x44051000); + else if (param.asInteger() == 0x67221A03) + playSound(0, 0x44051000); + else if (param.asInteger() == 0x038A010B) + playSound(0, 0x00018040); + else if (param.asInteger() == 0x422B0280) + playSound(0, 0x166FC6E0); + else if (param.asInteger() == 0x925A0C1E) + playSound(0, 0x40E5884D); + break; + } + return messageResult; +} + +void Klaymen::stWalkingFirstExt() { + _status2 = 0; + _isWalking = true; + _acceptInput = true; + startAnimation(0x5A2CBC00, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalking); + SetSpriteUpdate(&Klaymen::suWalkingFirst); + NextState(&Klaymen::stUpdateWalkingFirst); + FinalizeState(&Klaymen::evStartWalkingDone); +} + +void Klaymen::stStartWalkingExt() { + if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stStartWalkingExt))) { + _status2 = 0; + _isWalking = true; + _acceptInput = true; + setDoDeltaX(_destX < _x ? 1 : 0); + startAnimation(0x272C1199, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmStartWalking); + SetSpriteUpdate(&Klaymen::suWalkingTestExit); + NextState(&Klaymen::stWalkingFirstExt); + FinalizeState(&Klaymen::evStartWalkingDone); + } +} + +void Klaymen::sub41CC40(int16 x1, int16 x2) { + if (_x > x1) { + if (_x == x1 + x2) { + _destX = x1 + x2; + gotoState(NULL); + gotoNextStateExt(); + } else if (_x < x1 + x2) { + startWalkToXExt(x1 + x2); + } else { + startWalkToX(x1 + x2, false); + } + } else { + if (_x == x1 - x2) { + _destX = x1 - x2; + gotoState(NULL); + gotoNextStateExt(); + } else if (_x > x1 - x2) { + startWalkToXExt(x1 - x2); + } else { + startWalkToX(x1 - x2, false); + } + } +} + +void Klaymen::startWalkToXExt(int16 x) { + int16 xdiff = ABS(x - _x); + if (x == _x) { + _destX = x; + if (!_isWalking && !_isSneaking && !_isLargeStep) { + gotoState(NULL); + gotoNextStateExt(); + } + } else if (xdiff <= 36 && !_isWalking && !_isSneaking && !_isLargeStep) { + _destX = x; + gotoState(NULL); + gotoNextStateExt(); + } else if (xdiff <= 42 && _status3 != 3) { + if (_isSneaking && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0)) && ABS(_destX - _x) > xdiff) { + _destX = x; + } else { + _destX = x; + GotoState(&Klaymen::stSneak); + } + } else if (_isLargeStep && ((!_doDeltaX && x - _x > 0) || (_doDeltaX && x - _x < 0))) { + _destX = x; + } else { + _destX = x; + GotoState(&Klaymen::stLargeStep); + } +} + +void Klaymen::stLargeStep() { + _status2 = 2; + _isLargeStep = true; + _acceptInput = true; + setDoDeltaX(_destX >= _x ? 1 : 0); + startAnimation(0x08B28116, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLargeStep); + SetSpriteUpdate(&Klaymen::suLargeStep); + FinalizeState(&Klaymen::evLargeStepDone); +} + +void Klaymen::evLargeStepDone() { + _isLargeStep = false; +} + +void Klaymen::suLargeStep() { + int16 xdiff = _destX - _x; + + if (_doDeltaX) { + _deltaX = -_deltaX; + } + + if (_currFrameIndex == 7) { + _deltaX = xdiff; + } + + if ((xdiff > 0 && xdiff > _deltaX) || (xdiff < 0 && xdiff < _deltaX)) + xdiff = _deltaX; + + _deltaX = 0; + + if (_x != _destX) { + HitRect *hitRectPrev = _parentScene->findHitRectAtPos(_x, _y); + _x += xdiff; + if (_pathPoints) { + walkAlongPathPoints(); + } else { + HitRect *hitRectNext = _parentScene->findHitRectAtPos(_x, _y); + if (hitRectNext->type == 0x5002) { + _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (hitRectNext->rect.x2 - _x) / 2); + } else if (hitRectNext->type == 0x5003) { + _y = MAX(hitRectNext->rect.y1, hitRectNext->rect.y2 - (_x - hitRectNext->rect.x1) / 2); + } else if (hitRectPrev->type == 0x5002) { + _y = xdiff > 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1; + } else if (hitRectPrev->type == 0x5003) { + _y = xdiff < 0 ? hitRectPrev->rect.y2 : hitRectPrev->rect.y1; + } + } + updateBounds(); + } +} + +uint32 Klaymen::hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevel(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x32180101) { + playSound(0, 0x4924AAC4); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, 0x0A2AA8E0); + } + break; + case 0x3002: + _x = _destX; + gotoNextStateExt(); + break; + } + return messageResult; +} + +void Klaymen::stWonderAboutHalf() { + _status2 = 0; + _acceptInput = true; + startAnimation(0xD820A114, 0, 10); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stWonderAboutAfter() { + _status2 = 1; + _acceptInput = true; + startAnimation(0xD820A114, 30, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stTurnToUseHalf() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x9B250AD2, 0, 7); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmTurnToUse); + SetSpriteUpdate(NULL); +} + +uint32 Klaymen::hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x32180101) { + playSound(0, 0x4924AAC4); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, 0x0A2AA8E0); + } + break; + } + return messageResult; +} + +void Klaymen::stTurnAwayFromUse() { + _status2 = 1; + _acceptInput = true; + startAnimation(0x98F88391, 4, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmTurnToUse); + SetSpriteUpdate(NULL); +} + +void Klaymen::stWonderAbout() { + _status2 = 1; + _acceptInput = true; + startAnimation(0xD820A114, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stPeekWall() { + _status2 = 1; + _acceptInput = true; + startAnimation(0xAC20C012, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPeekWall); + SetSpriteUpdate(NULL); +} + +uint32 Klaymen::hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender) { + int16 speedUpFrameIndex; + switch (messageNum) { + case 0x1008: + speedUpFrameIndex = getFrameIndex(kKlaymenSpeedUpHash); + if (_currFrameIndex < speedUpFrameIndex) + startAnimation(0xAC20C012, speedUpFrameIndex, -1); + return 0; + case 0x100D: + if (param.asInteger() == 0x32180101) { + playSound(0, 0x405002D8); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, 0x0460E2FA); + } + break; + } + return hmLowLevelAnimation(messageNum, param, sender); +} + +void Klaymen::stJumpToRing1() { + if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing1))) { + _status2 = 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() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x4829E0B8, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(NULL); +} + +void Klaymen::stJumpToRing2() { + if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing2))) { + _status2 = 0; + startAnimation(0x900980B2, 0, -1); + setupJumpToRing(); + } +} + +void Klaymen::stJumpToRing3() { + if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing3))) { + _status2 = 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() { + _status2 = 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() { + _status2 = 1; + _acceptInput = false; + sendMessage(_attachedSprite, 0x4807, 0); + _attachedSprite = NULL; + startAnimation(0xB869A4B9, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stJumpToRing4() { + if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRing4))) { + _status2 = 0; + startAnimation(0xB8699832, 0, -1); + setupJumpToRing(); + } +} + +void Klaymen::sub41CCE0(int16 x) { + sub41CC40(_attachedSprite->getX(), x); +} + +void Klaymen::stContinueClimbLadderUp() { + _status2 = 0; + _acceptInput = true; + _ladderStatus = 3; + startAnimationByHash(0x3A292504, 0x01084280, 0); + _newStickFrameHash = 0x01084280; + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(NULL); + gotoNextStateExt(); +} + +void Klaymen::stStartClimbLadderDown() { + if (!stStartAction(AnimationCallback(&Klaymen::stStartClimbLadderDown))) { + _status2 = 0; + if (_destY < _y) { + if (_ladderStatus == 1) { + _ladderStatus = 2; + stClimbLadderHalf(); + } else { + gotoNextStateExt(); + } + } else if (_ladderStatus == 0) { + _ladderStatus = 2; + _acceptInput = false; + startAnimation(0x122D1505, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmClimbLadderUpDown); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } else if (_ladderStatus == 3) { + _ladderStatus = 2; + _acceptInput = true; + startAnimationByHash(0x122D1505, 0x01084280, 0); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmClimbLadderUpDown); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } else if (_ladderStatus == 1) { + _ladderStatus = 2; + _acceptInput = true; + startAnimation(0x122D1505, 29 - _currFrameIndex, -1); + } + } +} + +void Klaymen::stClimbLadderHalf() { + _status2 = 2; + if (_ladderStatus == 1) { + _ladderStatus = 0; + _acceptInput = false; + startAnimationByHash(0x3A292504, 0x02421405, 0); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmClimbLadderHalf); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } else if (_ladderStatus == 2) { + _ladderStatus = 0; + _acceptInput = false; + startAnimationByHash(0x122D1505, 0x02421405, 0); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmClimbLadderHalf); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } else { + gotoNextStateExt(); + } +} + +uint32 Klaymen::hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x489B025C) { + playSound(0, 0x52C4C2D7); + } else if (param.asInteger() == 0x400A0E64) { + playSound(0, 0x50E081D9); + } else if (param.asInteger() == 0x32180101) { + playSound(0, 0x405002D8); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, 0x0460E2FA); + } + break; + } + return messageResult; +} + +uint32 Klaymen::hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevel(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x01084280) { + _acceptInput = true; + } else if (param.asInteger() == 0x489B025C) { + playSound(0, 0x52C4C2D7); + } else if (param.asInteger() == 0x400A0E64) { + playSound(0, 0x50E081D9); + } else if (param.asInteger() == 0x02421405) { + if (_ladderStatus == 1) { + startAnimationByHash(0x3A292504, 0x01084280, 0); + if (_destY >= _y - 30) + sendMessage(this, 0x1019, 0); + } else { + startAnimationByHash(0x122D1505, 0x01084280, 0); + if (_destY <= _y) + sendMessage(this, 0x1019, 0); + } + } + break; + } + return messageResult; +} + +void Klaymen::stStartClimbLadderUp() { + if (!stStartAction(AnimationCallback(&Klaymen::stStartClimbLadderUp))) { + _status2 = 0; + if (_destY >= _y - 30) { + gotoNextStateExt(); + } else if (_ladderStatus == 0) { + _ladderStatus = 1; + _acceptInput = false; + startAnimation(0x3A292504, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmClimbLadderUpDown); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } else if (_ladderStatus == 3) { + _ladderStatus = 1; + _acceptInput = true; + startAnimationByHash(0x3A292504, 0x01084280, 0); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmClimbLadderUpDown); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } else if (_ladderStatus == 2) { + _ladderStatus = 1; + _acceptInput = true; + startAnimation(0x3A292504, 29 - _currFrameIndex, -1); + } + } +} + +void Klaymen::stWalkToFrontNoStep() { + _status2 = 2; + _acceptInput = false; + startAnimationByHash(0xF229C003, 0x14884392, 0); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkToFront); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +uint32 Klaymen::hmWalkToFront(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() == 0x110010D1) { + sendMessage(_parentScene, 0x482B, 0); + } else if (param.asInteger() == 0x32180101) { + playSound(0, _soundFlag ? 0x48498E46 : 0x405002D8); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, _soundFlag ? 0x50399F64 : 0x0460E2FA); + } + break; + } + return messageResult; +} + +void Klaymen::stWalkToFront() { + if (!stStartAction(AnimationCallback(&Klaymen::stWalkToFront))) { + _status2 = 2; + _acceptInput = false; + startAnimation(0xF229C003, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkToFront); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } +} + +void Klaymen::stTurnToFront() { + if (!stStartAction(AnimationCallback(&Klaymen::stTurnToFront))) { + _status2 = 0; + _acceptInput = false; + startAnimationByHash(0xCA221107, 0, 0x8520108C); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkToFront); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } +} + +void Klaymen::stTurnToBack() { + if (!stStartAction(AnimationCallback(&Klaymen::stTurnToBack))) { + _status2 = 2; + _acceptInput = false; + startAnimation(0xCA221107, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalkToFront); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } +} + +void Klaymen::stLandOnFeet() { + _status2 = 1; + _acceptInput = true; + startAnimation(0x18118554, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLandOnFeet); + SetSpriteUpdate(NULL); +} + +uint32 Klaymen::hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x320AC306) { + playSound(0, 0x5860C640); + } + break; + } + return messageResult; +} + +void Klaymen::stTurnToBackToUse() { + if (!stStartAction(AnimationCallback(&Klaymen::stTurnToBackToUse))) { + _status2 = 2; + _acceptInput = false; + startAnimation(0x91540140, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmTurnToBackToUse); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } +} + +uint32 Klaymen::hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0xC61A0119) { + playSound(0, 0x402338C2); + } else if (param.asInteger() == 0x32180101) { + playSound(0, 0x4924AAC4); + } else if (param.asInteger() == 0x0A2A9098) { + playSound(0, 0x0A2AA8E0); + } + break; + } + return messageResult; +} + +void Klaymen::stClayDoorOpen() { + if (!stStartAction(AnimationCallback(&Klaymen::stClayDoorOpen))) { + _status2 = 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))) { + _status2 = 2; + _acceptInput = false; + startAnimation(0x9B250AD2, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmTurnToUse); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } +} + +void Klaymen::stReturnFromUse() { + _status2 = 2; + _acceptInput = false; + startAnimation(0x98F88391, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmTurnToUse); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +void Klaymen::stWalkingOpenDoor() { + _isWalkingOpenDoorNotified = false; + _acceptInput = false; + startAnimation(0x11A8E012, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmStartWalking); + SetSpriteUpdate(&Klaymen::suWalkingOpenDoor); +} + +void Klaymen::suWalkingOpenDoor() { + if (!_isWalkingOpenDoorNotified && ABS(_destX - _x) < 80) { + sendMessage(_parentScene, 0x4829, 0); + _isWalkingOpenDoorNotified = true; + } + AnimatedSprite::updateDeltaXY(); +} + +void Klaymen::stMoveObjectSkipTurnFaceObject() { + setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); + _isMoveObjectRequested = false; + _acceptInput = true; + startAnimationByHash(0x0C1CA072, 0x01084280, 0); + SetUpdateHandler(&Klaymen::update); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + SetMessageHandler(&Klaymen::hmMoveObjectTurn); +} + +void Klaymen::evMoveObjectTurnDone() { + sendMessage(_attachedSprite, 0x4807, 0); +} + +uint32 Klaymen::hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender) { + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x01084280) { + sendMessage(_attachedSprite, 0x480B, _doDeltaX ? 1 : 0); + } else if (param.asInteger() == 0x02421405) { + if (_isMoveObjectRequested && sendMessage(_attachedSprite, 0x480C, _doDeltaX ? 1 : 0) != 0) { + stMoveObjectSkipTurn(); + } else { + FinalizeState(&Klaymen::evMoveObjectTurnDone); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + } + } 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); +} + +void Klaymen::stMoveObjectSkipTurn() { + _isMoveObjectRequested = false; + _acceptInput = true; + startAnimationByHash(0x0C1CA072, 0x01084280, 0); + SetUpdateHandler(&Klaymen::update); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + SetMessageHandler(&Klaymen::hmMoveObjectTurn); +} + +void Klaymen::stMoveObjectFaceObject() { + setDoDeltaX(_attachedSprite->getX() < _x ? 1 : 0); + if (!stStartAction(AnimationCallback(&Klaymen::stMoveObjectFaceObject))) { + _status2 = 2; + _isMoveObjectRequested = false; + _acceptInput = true; + startAnimation(0x0C1CA072, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmMoveObjectTurn); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } +} + +void Klaymen::stUseLever() { + if (!stStartAction(AnimationCallback(&Klaymen::stUseLever))) { + _status2 = 0; + if (_isLeverDown) { + stUseLeverRelease(); + } else { + sendMessage(_attachedSprite, 0x482B, 0); + startAnimation(0x0C303040, 0, -1); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + SetMessageHandler(&Klaymen::hmLever); + SetUpdateHandler(&Klaymen::update); + NextState(&Klaymen::stPullLeverDown); + _acceptInput = false; + } + } +} + +// Exactly the same code as sub420DA0 which was removed +void Klaymen::stPullLeverDown() { + startAnimation(0x0D318140, 0, -1); + sendMessage(_attachedSprite, 0x480F, 0); + NextState(&Klaymen::stHoldLeverDown); +} + +void Klaymen::stHoldLeverDown() { + startAnimation(0x4464A440, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + _isLeverDown = true; + _acceptInput = true; +} + +void Klaymen::stUseLeverRelease() { + startAnimation(0x09018068, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLever); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + sendMessage(_attachedSprite, 0x4807, 0); + NextState(&Klaymen::stPullLeverDown); + _acceptInput = false; +} + +void Klaymen::stReleaseLever() { + if (_isLeverDown) { + _status2 = 2; + startAnimation(0x09018068, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLever); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + sendMessage(_attachedSprite, 0x4807, 0); + NextState(&Klaymen::stLetGoOfLever); + _acceptInput = false; + _isLeverDown = false; + } else { + gotoNextStateExt(); + } +} + +void Klaymen::stLetGoOfLever() { + startAnimation(0x0928C048, 0, -1); + FinalizeState(&Klaymen::evLeverReleasedEvent); +} + +void Klaymen::evLeverReleasedEvent() { + sendMessage(_attachedSprite, 0x482A, 0); +} + +void Klaymen::stInsertDisk() { + if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stInsertDisk))) { + _status2 = 2; + _tapesToInsert = 0; + for (uint32 i = 0; i < 20; i++) { + if (getSubVar(VA_HAS_TAPE, i)) { + setSubVar(VA_IS_TAPE_INSERTED, i, 1); + setSubVar(VA_HAS_TAPE, i, 0); + _tapesToInsert++; + } + } + if (_tapesToInsert == 0) { + GotoState(NULL); + gotoNextStateExt(); + } else { + startAnimation(0xD8C8D100, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmInsertDisk); + SetSpriteUpdate(&Klaymen::suAction); + _acceptInput = false; + _tapesToInsert--; + } + } +} + +uint32 Klaymen::hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = Klaymen::hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (_tapesToInsert == 0 && param.asInteger() == 0x06040580) { + nextAnimationByHash(0xD8C8D100, calcHash("GoToStartLoop/Finish"), 0); + } else if (_tapesToInsert != 0 && param.asInteger() == calcHash("GoToStartLoop/Finish")) { + _tapesToInsert--; + startAnimationByHash(0xD8C8D100, 0x01084280, 0); + } else if (param.asInteger() == 0x062A1510) { + playSound(0, 0x41688704); + } else if (param.asInteger() == 0x02B20220) { + playSound(0, 0xC5408620); + } else if (param.asInteger() == 0x0A720138) { + playSound(0, 0xD4C08010); + } else if (param.asInteger() == 0xB613A180) { + playSound(0, 0x44051000); + } else if (param.asInteger() == 0x0E040501) { + playSound(1, 0xC6A129C1); + } + } + return messageResult; +} + +void Klaymen::walkAlongPathPoints() { + if (_x <= (*_pathPoints)[0].x) + _y = (*_pathPoints)[0].y; + else if (_x >= (*_pathPoints)[_pathPoints->size() - 1].x) + _y = (*_pathPoints)[_pathPoints->size() - 1].y; + else { + int16 deltaX = _x - (*_pathPoints)[0].x, deltaXIncr = 0; + uint index = 0; + while (deltaX > 0) { + NPoint pt2 = (*_pathPoints)[index]; + NPoint pt1 = index + 1 >= _pathPoints->size() ? (*_pathPoints)[0] : (*_pathPoints)[index + 1]; + int16 xd = ABS(pt1.x - pt2.x); + int16 yd = ABS(pt1.y - pt2.y); + if (deltaX + deltaXIncr >= xd) { + deltaX -= xd; + deltaX += deltaXIncr; + ++index; + if (index >= _pathPoints->size()) + index = 0; + _y = (*_pathPoints)[index].y; + } else { + deltaXIncr += deltaX; + if (pt1.y >= pt2.y) { + _y = pt2.y + (yd * deltaXIncr) / xd; + } else { + _y = pt2.y - (yd * deltaXIncr) / xd; + } + deltaX = 0; + } + } + } +} + +void Klaymen::stJumpToGrab() { + _status2 = 0; + _acceptInput = false; + startAnimationByHash(0x00AB8C10, 0x01084280, 0); + SetUpdateHandler(&Klaymen::update); + SetSpriteUpdate(&Klaymen::suJumpToGrab); + SetMessageHandler(&Klaymen::hmJumpToGrab); +} + +void Klaymen::suJumpToGrab() { + updateDeltaXY(); + if (_y >= _destY) { + _y = _destY; + updateBounds(); + gotoNextStateExt(); + } +} + +uint32 Klaymen::hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevel(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x168050A0) + sendMessage(_attachedSprite, 0x4806, 0); + else if (param.asInteger() == 0x320AC306) + startAnimationByHash(0x00AB8C10, 0x01084280, 0); + else if (param.asInteger() == 0x4AB28209) + sendMessage(_attachedSprite, 0x482A, 0); + else if (param.asInteger() == 0x88001184) + sendMessage(_attachedSprite, 0x482B, 0); + break; + } + return messageResult; +} + +void Klaymen::stFinishGrow() { + _status2 = 2; + _acceptInput = false; + startAnimation(0x38445000, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetSpriteUpdate(NULL); + SetMessageHandler(&Klaymen::hmFinishGrow); +} + +uint32 Klaymen::hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x040C4C01) + playSound(0, 0x01E11140); + break; + } + return messageResult; +} + +void Klaymen::stTurnToUseExt() { + if (!stStartAction(AnimationCallback(&Klaymen::stTurnToUseExt))) { + _status2 = 2; + _acceptInput = false; + startAnimation(0x1B3D8216, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmTurnToUse); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + } +} + +void Klaymen::stJumpToGrabFall() { + if (!stStartAction(AnimationCallback(&Klaymen::stJumpToGrabFall))) { + _status2 = 0; + _acceptInput = false; + startAnimation(0x00AB8C10, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmJumpToGrab); + SetSpriteUpdate(&Klaymen::suJumpToGrab); + sendMessage(_attachedSprite, 0x482B, 0); + } +} + +void Klaymen::stJumpToGrabRelease() { + _status2 = 1; + _acceptInput = false; + startAnimationByHash(0x00AB8C10, 0x320AC306, 0); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmJumpToGrabRelease); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stReleaseRing); +} + +uint32 Klaymen::hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x320AC306) + playSound(0, 0x5860C640); + break; + } + return messageResult; +} + +void Klaymen::stDoIdleTeleporterHands() { + startIdleAnimation(0x90EF8D38, AnimationCallback(&Klaymen::stIdleTeleporterHands)); +} + +void Klaymen::stIdleTeleporterHands() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x90EF8D38, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stSitIdleTeleporterBlinkSecond); +} + +void Klaymen::stDoIdleTeleporterHands2() { + startIdleAnimation(0x900F0930, AnimationCallback(&Klaymen::stIdleTeleporterHands2)); +} + +void Klaymen::stIdleTeleporterHands2() { + _status2 = 0; + _acceptInput = true; + startAnimation(0x900F0930, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stSitIdleTeleporterBlinkSecond); +} + +void Klaymen::teleporterAppear(uint32 fileHash) { + _status2 = 0; + _acceptInput = false; + startAnimation(fileHash, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmTeleporterAppearDisappear); + SetSpriteUpdate(NULL); +} + +void Klaymen::teleporterDisappear(uint32 fileHash) { + _status2 = 0; + _acceptInput = false; + startAnimation(fileHash, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmTeleporterAppearDisappear); + SetSpriteUpdate(NULL); +} + +uint32 Klaymen::hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x4E0A2C24) { + playSound(0, 0x85B10BB8); + } else if (param.asInteger() == 0x4E6A0CA0) { + playSound(0, 0xC5B709B0); + } + break; + } + 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() { + _status2 = 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); + _status2 = 0; + _acceptInput = true; + startAnimation(0xD820A114, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(NULL); + _newStickFrameIndex = 10; +} + +uint32 Klaymen::hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x1008: + if (_potionFlag1) { + startAnimationByHash(0x1C388C04, 0x004A2148, 0); + messageResult = 0; + } else + _potionFlag2 = true; + break; + case 0x100D: + if (param.asInteger() == 0x0002418E) + sendMessage(_parentScene, 0x2000, 0); + else if (param.asInteger() == 0x924090C2) { + _potionFlag1 = true; + if (_potionFlag2) { + startAnimationByHash(0x1C388C04, 0x004A2148, 0); + messageResult = 0; + } + } else if (param.asInteger() == 0x004A2148) + _potionFlag1 = false; + else if (param.asInteger() == 0x02B20220) + playSound(0, 0xC5408620); + else if (param.asInteger() == 0x0A720138) + playSound(0, 0xD4C08010); + else if (param.asInteger() == 0x03020231) + playSound(0, 0xD4C08010); + else if (param.asInteger() == 0xB613A180) + playSound(0, 0x44051000); + else if (param.asInteger() == 0x67221A03) + playSound(0, 0x44051000); + else if (param.asInteger() == 0x038A010B) + playSound(0, 0x00018040); + else if (param.asInteger() == 0x422B0280) + playSound(0, 0x166FC6E0); + else if (param.asInteger() == 0x925A0C1E) + playSound(0, 0x40E5884D); + else if (param.asInteger() == 0x000F0082) + playSound(0, 0x546CDCC1); + else if (param.asInteger() == 0x00020814) + playSound(0, 0x786CC6D0); + else if (param.asInteger() == 0x06020500) + playSound(0, 0x1069C0E1); + else if (param.asInteger() == 0x02128C00) + playSound(0, 0x5068C4C3); + else if (param.asInteger() == 0x82022030) + playSound(0, 0x5C48C0E8); + break; + } + return messageResult; +} + +uint32 Klaymen::hmGrow(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x32180101) + playSound(0, 0x405002D8); + else if (param.asInteger() == 0x0A2A9098) + playSound(0, 0x0460E2FA); + else if (param.asInteger() == 0xD00A0C0C) + playSound(3); + else if (param.asInteger() == 0x04121920) + playSound(4); + else if (param.asInteger() == 0x030B4480) + playSound(5); + else if (param.asInteger() == 0x422B0280) + playSound(6); + else if (param.asInteger() == 0x038A010B) + playSound(7); + else if (param.asInteger() == 0x67221A03) + playSound(0, 0x44051000); + else if (param.asInteger() == 0x02B20220) + playSound(0, 0xC5408620); + else if (param.asInteger() == 0x925A0C1E) + playSound(0, 0x40E5884D); + else if (param.asInteger() == 0x03020231) + playSound(0, 0xD4C08010); + else if (param.asInteger() == 0x08040840) + setDoDeltaX(2); + break; + } + return messageResult; +} + +void Klaymen::stGrow() { + _status2 = 0; + _acceptInput = false; + startAnimation(0x2838C010, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmGrow); + SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); +} + +void Klaymen::stDrinkPotion() { + _status2 = 1; + _acceptInput = false; + _potionFlag1 = false; + _potionFlag2 = false; + startAnimation(0x1C388C04, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmDrinkPotion); + SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); +} + +uint32 Klaymen::hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = Klaymen::hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (_keysToInsert == 0 && param.asInteger() == 0x06040580) { + nextAnimationByHash(0xDC409440, 0x46431401, 0); + } else if (_keysToInsert != 0 && param.asInteger() == 0x46431401) { + _keysToInsert--; + startAnimationByHash(0xDC409440, 0x01084280, 0); + } else if (param.asInteger() == 0x062A1510) { + playSound(0, 0x41688704); + } else if (param.asInteger() == 0x02B20220) { + playSound(0, 0xC5408620); + } else if (param.asInteger() == 0x0A720138) { + playSound(0, 0xD4C08010); + } else if (param.asInteger() == 0xB613A180) { + playSound(0, 0x44051000); + } else if (param.asInteger() == 0x0E4C8141) { + playSound(0, 0xDC4A1280); + } + break; + } + return messageResult; +} + +void Klaymen::stInsertKey() { + if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stInsertKey))) { + _status2 = 2; + _keysToInsert = 0; + for (uint32 i = 0; i < 3; i++) { + if (getSubVar(VA_HAS_KEY, i)) { + bool more; + setSubVar(VA_IS_KEY_INSERTED, i, 1); + setSubVar(VA_HAS_KEY, i, 0); + do { + more = false; + setSubVar(VA_CURR_KEY_SLOT_NUMBERS, i, _vm->_rnd->getRandomNumber(16 - 1)); + for (uint j = 0; j < i && !more; j++) { + if (getSubVar(VA_IS_KEY_INSERTED, j) && getSubVar(VA_CURR_KEY_SLOT_NUMBERS, j) == getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i)) + more = true; + } + if (getSubVar(VA_CURR_KEY_SLOT_NUMBERS, i) == getSubVar(VA_GOOD_KEY_SLOT_NUMBERS, i)) + more = true; + } while (more); + _keysToInsert++; + } + } + if (_keysToInsert == 0) { + GotoState(NULL); + gotoNextStateExt(); + } else { + _acceptInput = false; + startAnimation(0xDC409440, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmInsertKey); + SetSpriteUpdate(&Klaymen::suAction); + _keysToInsert--; + } + } +} + +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() { + _status2 = 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() { + _status2 = 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: + if (param.asInteger() == calcHash("PopBalloon")) { + sendMessage(_parentScene, 0x2000, 0); + } else if (param.asInteger() == 0x02B20220) { + playSound(0, 0xC5408620); + } else if (param.asInteger() == 0x0A720138) { + playSound(0, 0xD4C08010); + } else if (param.asInteger() == 0xB613A180) { + playSound(0, 0x44051000); + } + break; + } + return messageResult; +} + +void Klaymen::upPeekWallBlink() { + Klaymen::update(); + _blinkCounter++; + if (_blinkCounter >= _blinkCounterMax) + stPeekWallBlink(); +} + +void Klaymen::stPeekWall1() { + _status2 = 0; + _acceptInput = true; + startAnimation(0xAC20C012, 8, 37); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stPeekWallBlink); +} + +void Klaymen::stPeekWall2() { + _status2 = 1; + _acceptInput = false; + startAnimation(0xAC20C012, 43, 49); + SetUpdateHandler(&Klaymen::update); + SetSpriteUpdate(NULL); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); +} + +void Klaymen::stPeekWallBlink() { + _blinkCounter = 0; + _status2 = 0; + _acceptInput = true; + _blinkCounterMax = _vm->_rnd->getRandomNumber(64) + 24; + startAnimation(0xAC20C012, 38, 42); + SetUpdateHandler(&Klaymen::upPeekWallBlink); + SetSpriteUpdate(NULL); + SetMessageHandler(&Klaymen::hmLowLevel); + _newStickFrameIndex = 42; +} + +void Klaymen::stPeekWallReturn() { + _status2 = 0; + _acceptInput = false; + startAnimation(0x2426932E, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPeekWallReturn); + SetSpriteUpdate(NULL); +} + +void Klaymen::stPullHammerLever() { + if (!stStartAction(AnimationCallback(&Klaymen::stPullHammerLever))) { + _status2 = 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))) { + _status2 = 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); + _status2 = 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 (_countdown1 != 0 && (--_countdown1 == 0)) { + _surface->setVisible(true); + SetUpdateHandler(&Klaymen::update); + } +} + +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: + playSound(0, 0x5252A0E4); + setDoDeltaX(((Sprite*)sender)->isDoDeltaX() ? 1 : 0); + if (_doDeltaX) { + _x = ((Sprite*)sender)->getX() - 75; + } else { + _x = ((Sprite*)sender)->getX() + 75; + } + _y = ((Sprite*)sender)->getY() - 200; + if (param.asInteger() == 0) { + stSpitOutFall0(); + } else if (param.asInteger() == 1) { + // NOTE This is never used and the code was removed + // Also the animations used here in the original don't exist... + } else if (param.asInteger() == 2) { + stSpitOutFall2(); + } + break; + } + 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); + } + _parentScene->checkCollision(this, 0xFFFF, 0x4810, 0); +} + +void Klaymen::stJumpToRingVenusFlyTrap() { + if (!stStartAction(AnimationCallback(&Klaymen::stJumpToRingVenusFlyTrap))) { + _status2 = 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); + _status2 = 0; + _acceptInput = false; + _surface->setVisible(false); + startAnimation(0x5420E254, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmStandIdleSpecial); + SetSpriteUpdate(NULL); +} + +void Klaymen::stSpitOutFall0() { + _countdown1 = 1; + _status2 = 0; + _acceptInput = false; + startAnimation(0x000BAB02, 0, -1); + SetUpdateHandler(&Klaymen::upSpitOutFall); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(&Klaymen::suFallDown); + NextState(&Klaymen::stFalling); + sendMessage(_parentScene, 0x8000, 0); +} + +void Klaymen::stSpitOutFall2() { + _countdown1 = 1; + _status2 = 0; + _acceptInput = false; + startAnimation(0x9308C132, 0, -1); + SetUpdateHandler(&Klaymen::upSpitOutFall); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(&Klaymen::suFallDown); + NextState(&Klaymen::stFalling); + sendMessage(_parentScene, 0x8000, 0); +} + +void Klaymen::stFalling() { + sendMessage(_parentScene, 0x1024, 1); + playSound(0, 0x41648271); + _status2 = 1; + _acceptInput = false; + _isWalking = false; + startAnimationByHash(0x000BAB02, 0x88003000, 0); + SetUpdateHandler(&Klaymen::update); + SetSpriteUpdate(NULL); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + NextState(&Klaymen::stFallTouchdown); + sendMessage(_parentScene, 0x2002, 0); + _attachedSprite = NULL; + sendMessage(_parentScene, 0x8001, 0); +} + +void Klaymen::stFallTouchdown() { + setDoDeltaX(2); + stTryStandIdle(); +} + +void Klaymen::stJumpAndFall() { + if (!stStartAction(AnimationCallback(&Klaymen::stJumpAndFall))) { + sendMessage(_parentScene, 0x1024, 3); + _status2 = 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; + } + _status2 = 2; + _acceptInput = false; + startAnimation(0x586984B1, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(&Klaymen::suFallDown); + NextState(&Klaymen::stLandOnFeet); +} + +void Klaymen::stPressDoorButton() { + _status2 = 2; + _acceptInput = true; + setDoDeltaX(0); + startAnimation(0x1CD89029, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmPressDoorButton); + SetSpriteUpdate(&Klaymen::suAction); +} + +void Klaymen::stHitByBoxingGlove() { + _status2 = 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))) { + _status2 = 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); + } +} + +void Klaymen::stFallSkipJump() { + _status2 = 2; + _acceptInput = false; + startAnimationByHash(0xB93AB151, 0x40A100F8, 0); + SetUpdateHandler(&Klaymen::update); + SetSpriteUpdate(&Klaymen::suFallSkipJump); + SetMessageHandler(&Klaymen::hmLowLevel); + NextState(&Klaymen::stLandOnFeet); +} + +void Klaymen::upMoveObject() { + if (_x >= 380) + gotoNextStateExt(); + 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))) { + _status2 = 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() { + _status2 = 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: + if (param.asInteger() == 0x01084280) { + playSound(0, 0x405002D8); + sendMessage(_attachedSprite, 0x480B, 0); + } else if (param.asInteger() == 0x02421405) { + if (_moveObjectCountdown != 0) { + _moveObjectCountdown--; + stContinueMoveObject(); + } else { + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + } + } + break; + } + 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))) { + _status2 = 2; + _acceptInput = false; + _moveObjectCountdown = 8; + setDoDeltaX(0); + startAnimation(0x0C1CA072, 0, -1); + SetUpdateHandler(&Klaymen::upMoveObject); + SetMessageHandler(&Klaymen::hmMoveObject); + SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); + } +} + +void Klaymen::stContinueMoveObject() { + _acceptInput = false; + startAnimationByHash(0x0C1CA072, 0x01084280, 0); + SetUpdateHandler(&Klaymen::upMoveObject); + SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); + SetMessageHandler(&Klaymen::hmMoveObject); +} + +void Klaymen::stTumbleHeadless() { + if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stTumbleHeadless))) { + _status2 = 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))) { + _status2 = 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))) { + _status2 = 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; + updateBounds(); +} + +void Klaymen::stRidePlatform() { + if (!stStartActionFromIdle(AnimationCallback(&Klaymen::stRidePlatform))) { + _status2 = 1; + _acceptInput = true; + startAnimation(0x5420E254, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(&Klaymen::suRidePlatform); + } +} + +void Klaymen::stInteractLever() { + if (!stStartAction(AnimationCallback(&Klaymen::stInteractLever))) { + _status2 = 0; + if (_isLeverDown) { + stUseLeverRelease(); + } else { + _acceptInput = false; + startAnimation(0x0C303040, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLever); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + NextState(&Klaymen::stPullLever); + } + } +} + +void Klaymen::stPullLever() { + startAnimation(0x0D318140, 0, -1); + NextState(&Klaymen::stLookLeverDown); + sendMessage(_attachedSprite, 0x480F, 0); +} + +void Klaymen::stLookLeverDown() { + _acceptInput = true; + _isLeverDown = true; + startAnimation(0x1564A2C0, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + NextState(&Klaymen::stWaitLeverDown); +} + +void Klaymen::stWaitLeverDown() { + _acceptInput = true; + _isLeverDown = true; + startAnimation(0x4464A440, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(&Klaymen::suUpdateDestX); +} + +void Klaymen::stStartWalkingResume() { + int16 frameIndex = getGlobalVar(V_KLAYMEN_FRAMEINDEX) + _walkResumeFrameIncr; + if (frameIndex < 0 || frameIndex > 13) + frameIndex = 0; + _status2 = 0; + _isWalking = true; + _acceptInput = true; + startAnimation(0x1A249001, frameIndex, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmWalking); + SetSpriteUpdate(&Klaymen::suWalkingFirst); + NextState(&Klaymen::stUpdateWalkingFirst); + FinalizeState(&Klaymen::evStartWalkingDone); +} + +void Klaymen::upPeekInsideBlink() { + update(); + ++_blinkCounter; + if (_blinkCounter >= _blinkCounterMax) + stPeekInsideBlink(); +} + +void Klaymen::stPeekInside() { + _status2 = 0; + _acceptInput = true; + startAnimation(0xAC20C012, 8, 37); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); + NextState(&Klaymen::stPeekInsideBlink); +} + +void Klaymen::stPeekInsideReturn() { + _status2 = 1; + _acceptInput = false; + startAnimation(0xAC20C012, 43, 49); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&Klaymen::hmLowLevelAnimation); + SetSpriteUpdate(NULL); +} + +void Klaymen::stPeekInsideBlink() { + _status2 = 0; + _acceptInput = true; + startAnimation(0xAC20C012, 38, 42); + _newStickFrameIndex = 42; + SetUpdateHandler(&Klaymen::upPeekInsideBlink); + SetMessageHandler(&Klaymen::hmLowLevel); + SetSpriteUpdate(NULL); + _blinkCounter = 0; + _blinkCounterMax = _vm->_rnd->getRandomNumber(64 - 1) + 24; +} + +//############################################################################## + +// KmScene1001 + +KmScene1001::KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) + : Klaymen(vm, parentScene, x, y, 1000, 1000) { +} + +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 NM_KLAYMEN_PICKUP: + GotoState(&Klaymen::stPickUpGeneric); + break; + case NM_KLAYMEN_PRESS_BUTTON: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + 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 NM_KLAYMEN_PRESS_BUTTON: + if (param.asInteger() == 0) { + GotoState(&Klaymen::stPressDoorButton); + } + break; + case 0x4817: + setDoDeltaX(param.asInteger()); + gotoNextStateExt(); + break; + case 0x481B: + sub41CCE0(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, 1000, 1000) { + + _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, 1000, 1000) { + + // 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, 1000, 1000) { + + setKlaymenIdleTable(klaymenTable4, ARRAYSIZE(klaymenTable4)); + _flagF6 = 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 NM_KLAYMEN_PICKUP: + GotoState(&Klaymen::stPickUpGeneric); + break; + case 0x4813: + GotoState(&Klaymen::stFetchMatch); + break; + case 0x4814: + GotoState(&Klaymen::stTumbleHeadless); + break; + case 0x4815: + GotoState(&Klaymen::stCloseEyes); + break; + case NM_KLAYMEN_PRESS_BUTTON: + if (param.asInteger() == 0) { + GotoState(&Klaymen::stPressButtonSide); + } + break; + case 0x4817: + setDoDeltaX(param.asInteger()); + gotoNextStateExt(); + break; + case 0x481B: + if (param.asPoint().y != 0) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + // 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, 1000, 1000) { + + // 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 NM_KLAYMEN_PICKUP: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + // 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, 1000, 1000) { + +} + +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 NM_KLAYMEN_PICKUP: + if (param.asInteger() == 2) { + GotoState(&Klaymen::stPickUpNeedle); + } else if (param.asInteger() == 1) { + GotoState(&Klaymen::stPickUpTube); + } else { + GotoState(&Klaymen::stPickUpGeneric); + } + break; + case NM_KLAYMEN_PRESS_BUTTON: + 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 NM_KLAYMEN_INSERT_DISK: + GotoState(&Klaymen::stInsertDisk); + break; + case 0x481B: + if (param.asPoint().y != 0) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + // 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 NM_KLAYMEN_PICKUP: + 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 NM_KLAYMEN_INSERT_DISK: + if (param.asInteger() == 1) { + GotoState(&Klaymen::stInsertKey); + } else { + GotoState(&Klaymen::stInsertDisk); + } + break; + case 0x481B: + if (param.asPoint().y != 0) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(param.asPoint().x); + } + break; + case 0x481D: + GotoState(&Klaymen::stTurnToUse); + break; + case 0x481E: + GotoState(&Klaymen::stReturnFromUse); + break; + case NM_KLAYMEN_RELEASE_LEVER: + 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, 1000, 1000) { + + // 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 NM_KLAYMEN_PRESS_BUTTON: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + setKlaymenIdleTable(klaymenTable4, ARRAYSIZE(klaymenTable4)); +} + +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 NM_KLAYMEN_PICKUP: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(param.asPoint().x); + } + break; + case NM_KLAYMEN_RELEASE_LEVER: + 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, 1000, 1000) { + + // 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 NM_KLAYMEN_PICKUP: + 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 NM_KLAYMEN_INSERT_DISK: + GotoState(&Klaymen::stInsertDisk); + break; + case 0x481B: + if (param.asPoint().y != 0) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { +} + +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 NM_KLAYMEN_PICKUP: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + // 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 NM_KLAYMEN_PICKUP: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + // 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, 1000, 1000) { + + // 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, 1000, 1000) { + + // 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 NM_KLAYMEN_PICKUP: + if (param.asInteger() == 2) { + GotoState(&Klaymen::stPickUpNeedle); + } else if (param.asInteger() == 1) { + GotoState(&Klaymen::stPickUpTube); + } else { + GotoState(&Klaymen::stPickUpGeneric); + } + break; + case NM_KLAYMEN_PRESS_BUTTON: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(param.asPoint().x); + } + break; + case 0x481D: + if (_isSittingInTeleporter) + GotoState(&Klaymen::stTurnToUseInTeleporter); + break; + case 0x481E: + if (_isSittingInTeleporter)//CHECKME + 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, 1000, 1000) { + + _surface->setClipRects(clipRects, clipRectsCount); + + _dataResource.load(0x04104242); + _flagF6 = false; +} + +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 NM_KLAYMEN_PICKUP: + GotoState(&Klaymen::stPickUpGeneric); + break; + case NM_KLAYMEN_PRESS_BUTTON: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + // 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 NM_KLAYMEN_PICKUP: + if (param.asInteger() == 2) { + GotoState(&Klaymen::stPickUpNeedle); + } else if (param.asInteger() == 1) { + GotoState(&Klaymen::stPickUpTube); + } else { + GotoState(&Klaymen::stPickUpGeneric); + } + break; + case NM_KLAYMEN_PRESS_BUTTON: + 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 NM_KLAYMEN_INSERT_DISK: + GotoState(&Klaymen::stInsertDisk); + break; + case 0x481B: + if (param.asPoint().y != 0) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + // 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 NM_KLAYMEN_PRESS_BUTTON: + 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, 1000, 1000) { + + _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 NM_KLAYMEN_PICKUP: + if (param.asInteger() == 1) { + GotoState(&Klaymen::stPickUpTube); + } else { + GotoState(&Klaymen::stPickUpGeneric); + } + break; + case NM_KLAYMEN_PRESS_BUTTON: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + // 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 NM_KLAYMEN_PICKUP: + GotoState(&Klaymen::stPickUpGeneric); + break; + case NM_KLAYMEN_PRESS_BUTTON: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(param.asPoint().x); + } + break; + case NM_KLAYMEN_RELEASE_LEVER: + 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, 1000, 1000) { + // 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 NM_KLAYMEN_PICKUP: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + // 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, 1000, 1000) { + // 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, 1000, 1000) { + // 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 NM_KLAYMEN_PRESS_BUTTON: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + // 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 NM_KLAYMEN_PICKUP: + GotoState(&Klaymen::stPickUpGeneric); + break; + case NM_KLAYMEN_PRESS_BUTTON: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + // 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 NM_KLAYMEN_PICKUP: + GotoState(&Klaymen::stPickUpGeneric); + break; + case NM_KLAYMEN_PRESS_BUTTON: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + _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 NM_KLAYMEN_PICKUP: + 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) + sub41CC40(param.asPoint().y, param.asPoint().x); + else + sub41CCE0(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, 1000, 1000) { + // 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, 1000, 1000) { + // 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, 1000, 1000) { + // 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 NM_KLAYMEN_PICKUP: + GotoState(&Klaymen::stPickUpGeneric); + break; + case 0x4817: + setDoDeltaX(param.asInteger()); + gotoNextStateExt(); + break; + case 0x481B: + if (param.asPoint().y != 0) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + + _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, 1000, 1000) { + + _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, 1000, 1000) { + // 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 flag, NRect *clipRects, uint clipRectsCount) + : Klaymen(vm, parentScene, x, y, 1000, 1000) { + + if (flag) { + 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 flag, NRect *clipRects, uint clipRectsCount) + : Klaymen(vm, parentScene, x, y, 1000, 1000) { + + if (flag) { + 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, 1000, 1000) { + // 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, 1000, 1000) { + + _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 NM_KLAYMEN_PICKUP: + 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) { + sub41CC40(param.asPoint().y, param.asPoint().x); + } else { + sub41CCE0(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, 1000, 1000) { + // 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 NM_KLAYMEN_PICKUP: + 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) + sub41CC40(param.asPoint().y, param.asPoint().x); + else + sub41CCE0(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 diff --git a/engines/neverhood/klaymen.h b/engines/neverhood/klaymen.h new file mode 100644 index 0000000000..6e5a843f47 --- /dev/null +++ b/engines/neverhood/klaymen.h @@ -0,0 +1,764 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef NEVERHOOD_KLAYMEN_H +#define NEVERHOOD_KLAYMEN_H + +#include "neverhood/neverhood.h" +#include "neverhood/sprite.h" +#include "neverhood/graphics.h" +#include "neverhood/resource.h" + +namespace Neverhood { + +// TODO This code is horrible and weird and a lot of stuff needs renaming once a better name is found +// TODO Also the methods should probably rearranged and be grouped together more consistently + +class Klaymen; +class Scene; + +const uint32 kKlaymenSpeedUpHash = 0x004A2148; + +#include "common/pack-start.h" // START STRUCT PACKING + +struct KlaymenIdleTableItem { + int value; + void (Klaymen::*callback)(); +}; + +#include "common/pack-end.h" // END STRUCT PACKING + +class Klaymen : public AnimatedSprite { +public: + Klaymen(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL); + + void update(); + + void startIdleAnimation(uint32 fileHash, AnimationCb callback); + void upIdleAnimation(); + + void stDoIdlePickEar(); + void stIdlePickEar(); + void evIdlePickEarDone(); + uint32 hmIdlePickEar(int messageNum, const MessageParam ¶m, Entity *sender); + + void stDoIdleSpinHead(); + void stIdleSpinHead(); + uint32 hmIdleSpinHead(int messageNum, const MessageParam ¶m, Entity *sender); + + void stDoIdleArms(); + void stIdleArms(); + void evIdleArmsDone(); + uint32 hmIdleArms(int messageNum, const MessageParam ¶m, Entity *sender); + + void stDoIdleChest(); + void stIdleChest(); + uint32 hmIdleChest(int messageNum, const MessageParam ¶m, Entity *sender); + + void stDoIdleHeadOff(); + void stIdleHeadOff(); + uint32 hmIdleHeadOff(int messageNum, const MessageParam ¶m, Entity *sender); + + void stIdleWonderAbout(); + + void stDoIdleTeleporterHands(); + void stIdleTeleporterHands(); + + void stDoIdleTeleporterHands2(); + void stIdleTeleporterHands2(); + + void stTryStandIdle(); + void stStandAround(); + void upStandIdle(); + void stIdleBlink(); + + bool stStartAction(AnimationCb callback3); + bool stStartActionFromIdle(AnimationCb callback); + uint32 hmStartAction(int messageNum, const MessageParam ¶m, Entity *sender); + + void stSneak(); + uint32 hmSneaking(int messageNum, const MessageParam ¶m, Entity *sender); + void suSneaking(); + void evSneakingDone(); + + void stStartWalking(); + void stStartWalkingExt(); + void stWalkingOpenDoor(); + void suWalkingOpenDoor(); + void stStepOver(); + uint32 hmStartWalking(int messageNum, const MessageParam ¶m, Entity *sender); + void evStartWalkingDone(); + + void stWalkingFirst(); + void stWalkingFirstExt(); + void stStartWalkingResume(); + void stUpdateWalkingFirst(); + uint32 hmWalking(int messageNum, const MessageParam ¶m, Entity *sender); + void suWalkingFirst(); + + void stWalkToFrontNoStep(); + void stWalkToFront(); + void stTurnToFront(); + void stTurnToBack(); + uint32 hmWalkToFront(int messageNum, const MessageParam ¶m, Entity *sender); + + void stTurnToBackToUse(); + uint32 hmTurnToBackToUse(int messageNum, const MessageParam ¶m, Entity *sender); + + void stPickUpGeneric(); + void stPickUpNeedle(); + uint32 hmPickUpObject(int messageNum, const MessageParam ¶m, Entity *sender); + + void stPickUpTube(); + uint32 hmPickUpTube(int messageNum, const MessageParam ¶m, Entity *sender); + + void stTurnToUse(); + void stTurnToUseHalf(); + void stTurnAwayFromUse(); + void stReturnFromUse(); + void stTurnToUseExt(); + uint32 hmTurnToUse(int messageNum, const MessageParam ¶m, Entity *sender); + + void stLargeStep(); + uint32 hmLargeStep(int messageNum, const MessageParam ¶m, Entity *sender); + void suLargeStep(); + void evLargeStepDone(); + + void stInsertKey(); + uint32 hmInsertKey(int messageNum, const MessageParam ¶m, Entity *sender); + + void stReadNote(); + uint32 hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender); + + void stHitByDoor(); + uint32 hmHitByDoor(int messageNum, const MessageParam ¶m, Entity *sender); + + void stPeekWall(); + uint32 hmPeekWall(int messageNum, const MessageParam ¶m, Entity *sender); + + void stPeekWallReturn(); + uint32 hmPeekWallReturn(int messageNum, const MessageParam ¶m, Entity *sender); + + void stPeekWallBlink(); + void upPeekWallBlink(); + + void stPeekWall1(); + + void stPeekWall2(); + + void stPullHammerLever(); + uint32 hmPullHammerLever(int messageNum, const MessageParam ¶m, Entity *sender); + + void stRidePlatformDown(); + void suRidePlatformDown(); + + void stCrashDown(); + void stCrashDownFinished(); + + void stShrink(); + uint32 hmShrink(int messageNum, const MessageParam ¶m, Entity *sender); + + void stGrow(); + uint32 hmGrow(int messageNum, const MessageParam ¶m, Entity *sender); + + void stDrinkPotion(); + uint32 hmDrinkPotion(int messageNum, const MessageParam ¶m, Entity *sender); + + void stPullCord(); + void stReleaseCord(); + uint32 hmPullReleaseCord(int messageNum, const MessageParam ¶m, Entity *sender); + + void stUseTube(); + uint32 hmUseTube(int messageNum, const MessageParam ¶m, Entity *sender); + + void stUseLever(); + void stUseLeverRelease(); + void stReleaseLever(); + void stInteractLever(); + uint32 hmLever(int messageNum, const MessageParam ¶m, Entity *sender); + + void stLetGoOfLever(); + void evLeverReleasedEvent(); + + void stWakeUp(); + + void stSleeping(); + uint32 hmSleeping(int messageNum, const MessageParam ¶m, Entity *sender); + + void stPressButton(); + void stPressFloorButton(); + void stPressButtonSide(); + uint32 hmPressButton(int messageNum, const MessageParam ¶m, Entity *sender); + + void stWonderAbout(); + void stWonderAboutHalf(); + void stWonderAboutAfter(); + + void stStandWonderAbout(); + + void stStartClimbLadderUp(); + void stStartClimbLadderDown(); + uint32 hmClimbLadderUpDown(int messageNum, const MessageParam ¶m, Entity *sender); + + void stContinueClimbLadderUp(); + + void stClimbLadderHalf(); + uint32 hmClimbLadderHalf(int messageNum, const MessageParam ¶m, Entity *sender); + + void setupJumpToRing(); + void stJumpToRing1(); + void stJumpToRing2(); + void stJumpToRing4(); + uint32 hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender); + + void stHangOnRing(); + + void stJumpToRing3(); + uint32 hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender); + + void stHoldRing3(); + uint32 hmHoldRing3(int messageNum, const MessageParam ¶m, Entity *sender); + + void stReleaseRing(); + + void stLandOnFeet(); + uint32 hmLandOnFeet(int messageNum, const MessageParam ¶m, Entity *sender); + + void stPullLeverDown(); + void stHoldLeverDown(); + + void stInsertDisk(); + uint32 hmInsertDisk(int messageNum, const MessageParam ¶m, Entity *sender); + + void stMoveObjectSkipTurnFaceObject(); + void stMoveObjectSkipTurn(); + void stMoveObjectFaceObject(); + uint32 hmMoveObjectTurn(int messageNum, const MessageParam ¶m, Entity *sender); + void evMoveObjectTurnDone(); + + void stJumpToGrab(); + void stJumpToGrabFall(); + uint32 hmJumpToGrab(int messageNum, const MessageParam ¶m, Entity *sender); + void suJumpToGrab(); + + void stJumpToGrabRelease(); + uint32 hmJumpToGrabRelease(int messageNum, const MessageParam ¶m, Entity *sender); + + void stSitInTeleporter(); + uint32 hmSitInTeleporter(int messageNum, const MessageParam ¶m, Entity *sender); + + void stSitIdleTeleporter(); + void upSitIdleTeleporter(); + + void stSitIdleTeleporterBlink(); + + void stSitIdleTeleporterBlinkSecond(); + + void stTurnToUseInTeleporter(); + + void stReturnFromUseInTeleporter(); + + void stGetUpFromTeleporter(); + + void teleporterAppear(uint32 fileHash); + void teleporterDisappear(uint32 fileHash); + uint32 hmTeleporterAppearDisappear(int messageNum, const MessageParam ¶m, Entity *sender); + + void stClayDoorOpen(); + uint32 hmClayDoorOpen(int messageNum, const MessageParam ¶m, Entity *sender); + + void stFallSkipJump(); + void suFallSkipJump(); + + void stMoveObject(); + void stContinueMoveObject(); + uint32 hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender); + void upMoveObject(); + + void stCloseEyes(); + + void stTumbleHeadless(); + uint32 hmTumbleHeadless(int messageNum, const MessageParam ¶m, Entity *sender); + + void stFetchMatch(); + void stLightMatch(); + uint32 hmMatch(int messageNum, const MessageParam ¶m, Entity *sender); + + void stHitByBoxingGlove(); + uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender); + void evHitByBoxingGloveDone(); + + void stStandIdleSmall(); + void stWonderAboutSmall(); + void stWonderAboutHalfSmall(); + void stWonderAboutAfterSmall(); + + void stWalkToFrontNoStepSmall(); + void stWalkToFrontSmall(); + void stWalkToFront2Small(); + void stTurnToBackHalfSmall(); + void stTurnToBackWalkSmall(); + void stTurnToBackSmall(); + uint32 hmWalkFrontBackSmall(int messageNum, const MessageParam ¶m, Entity *sender); + + void stFinishGrow(); + uint32 hmFinishGrow(int messageNum, const MessageParam ¶m, Entity *sender); + + void stJumpToRingVenusFlyTrap(); + uint32 hmJumpToRingVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender); + + void stDropFromRing(); + + void stStandIdleSpecial(); + uint32 hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender); + + void stPressDoorButton(); + uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender); + + void stSpitOutFall0(); + void stSpitOutFall2(); + void suFallDown(); + void upSpitOutFall(); + + void stJumpAndFall(); + uint32 hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender); + + void stFalling(); + void stFallTouchdown(); + + void stMoveVenusFlyTrap(); + void stContinueMovingVenusFlyTrap(); + uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender); + uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender); + void evMoveVenusFlyTrapDone(); + + void stPeekInside(); + void stPeekInsideReturn(); + void stPeekInsideBlink(); + void upPeekInsideBlink(); + + //////////////////////////////////////////////////////////////////////////// + + void stopWalking(); + + void suAction(); + void suUpdateDestX(); + void suWalkingTestExit(); + + uint32 hmLowLevel(int messageNum, const MessageParam ¶m, Entity *sender); + uint32 hmLowLevelAnimation(int messageNum, const MessageParam ¶m, Entity *sender); + + void setKlaymenIdleTable(const KlaymenIdleTableItem *table, int tableCount); + void setKlaymenIdleTable1(); + void setKlaymenIdleTable2(); + void setKlaymenIdleTable3(); + + void setSoundFlag(bool value) { _soundFlag = value; } + + void spitIntoPipe(); + void stTrySpitIntoPipe(); + void stContSpitIntoPipe(); + uint32 hmSpit(int messageNum, const MessageParam ¶m, Entity *sender); + + void stRidePlatform(); + void suRidePlatform(); + void stPullLever(); + void stLookLeverDown(); + void stWaitLeverDown(); + +protected: + Scene *_parentScene; + Sprite *_attachedSprite; + int _ladderStatus; + bool _isWalking; + bool _isSneaking; + bool _isLargeStep; + bool _isMoveObjectRequested; + bool _acceptInput; + int16 _destX, _destY; + int16 _idleCounter, _idleCounterMax; + int16 _blinkCounter, _blinkCounterMax; + int16 _countdown1; + int16 _tapesToInsert, _keysToInsert; + bool _flagF6; + bool _isLeverDown; + bool _isWalkingOpenDoorNotified; + int _status2; + bool _flagFA; + int _status3; + const KlaymenIdleTableItem *_idleTable; + int _idleTableCount; + int _idleTableMaxValue; + NPointArray *_pathPoints; + bool _soundFlag; + + bool _isSittingInTeleporter; + + bool _potionFlag1; + bool _potionFlag2; + + int16 _platformDeltaY; + + Sprite *_otherSprite; + int _idleTableNum; + + int16 _walkResumeFrameIncr; + + 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 ¶m); + + void startWalkToX(int16 x, bool flag); + void startWalkToXExt(int16 x); + void startWalkToXSmall(int16 x); + void startSpecialWalkLeft(int16 x); + void startSpecialWalkRight(int16 x); + void sub41CC40(int16 x1, int16 x2); + void sub41CCE0(int16 x); + + void gotoNextStateExt(); + void sub41C770(); + void sub41C790(); + + void stStartWalkingSmall(); + uint32 hmWalkingSmall(int messageNum, const MessageParam ¶m, Entity *sender); + + void walkAlongPathPoints(); + +}; + +class KmScene1001 : public Klaymen { +public: + KmScene1001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1002 : public Klaymen { +public: + KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + void xUpdate(); + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1004 : public Klaymen { +public: + KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1109 : public Klaymen { +public: + KmScene1109(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1201 : public Klaymen { +public: + KmScene1201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1303 : public Klaymen { +public: + KmScene1303(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1304 : public Klaymen { +public: + KmScene1304(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1305 : public Klaymen { +public: + KmScene1305(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1306 : public Klaymen { +public: + KmScene1306(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1308 : public Klaymen { +public: + KmScene1308(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1401 : public Klaymen { +public: + KmScene1401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1402 : public Klaymen { +public: + KmScene1402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1403 : public Klaymen { +public: + KmScene1403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1404 : public Klaymen { +public: + KmScene1404(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1608 : public Klaymen { +public: + KmScene1608(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1705 : public Klaymen { +public: + KmScene1705(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene1901 : public Klaymen { +public: + KmScene1901(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2001 : public Klaymen { +public: + KmScene2001(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2101 : public Klaymen { +public: + KmScene2101(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2201 : public Klaymen { +public: + KmScene2201(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2203 : public Klaymen { +public: + KmScene2203(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2205 : public Klaymen { +public: + KmScene2205(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + void xUpdate(); + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2206 : public Klaymen { +public: + KmScene2206(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); + ~KmScene2206(); +protected: + void xUpdate(); + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2207 : public Klaymen { +public: + KmScene2207(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2242 : public Klaymen { +public: + KmScene2242(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + void xUpdate(); + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmHallOfRecords : public Klaymen { +public: + KmHallOfRecords(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + void xUpdate(); + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2247 : public Klaymen { +public: + KmScene2247(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + void xUpdate(); + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2401 : public Klaymen { +public: + KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2402 : public Klaymen { +public: + KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2403 : public Klaymen { +public: + KmScene2403(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2406 : public Klaymen { +public: + KmScene2406(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2501 : public Klaymen { +public: + KmScene2501(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2732 : public Klaymen { +public: + KmScene2732(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2801 : public Klaymen { +public: + KmScene2801(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2803 : public Klaymen { +public: + KmScene2803(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2803Small : public Klaymen { +public: + KmScene2803Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2805 : public Klaymen { +public: + KmScene2805(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2806 : public Klaymen { +public: + KmScene2806(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, + bool flag, NRect *clipRects, uint clipRectsCount); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2809 : public Klaymen { +public: + KmScene2809(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, + bool flag, NRect *clipRects, uint clipRectsCount); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2810Small : public Klaymen { +public: + KmScene2810Small(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2810 : public Klaymen { +public: + KmScene2810(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y, + NRect *clipRects, uint clipRectsCount); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +class KmScene2812 : public Klaymen { +public: + KmScene2812(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +}; + +} // End of namespace Neverhood + +#endif /* NEVERHOOD_KLAYMEN_H */ diff --git a/engines/neverhood/messages.h b/engines/neverhood/messages.h index 5a2139db2c..78c66868d5 100644 --- a/engines/neverhood/messages.h +++ b/engines/neverhood/messages.h @@ -26,10 +26,10 @@ namespace Neverhood { enum NeverhoodMessage { - NM_KLAYMAN_PICKUP = 0x4812, - NM_KLAYMAN_PRESS_BUTTON = 0x4816, - NM_KLAYMAN_INSERT_DISK = 0x481A, - NM_KLAYMAN_RELEASE_LEVER = 0x4827 + NM_KLAYMEN_PICKUP = 0x4812, + NM_KLAYMEN_PRESS_BUTTON = 0x4816, + NM_KLAYMEN_INSERT_DISK = 0x481A, + NM_KLAYMEN_RELEASE_LEVER = 0x4827 }; } // End of namespace Neverhood diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk index d9486d9347..59effb593c 100644 --- a/engines/neverhood/module.mk +++ b/engines/neverhood/module.mk @@ -9,7 +9,7 @@ MODULE_OBJS = \ gamemodule.o \ gamevars.o \ graphics.o \ - klayman.o \ + klaymen.o \ menumodule.o \ microtiles.o \ module.o \ diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp index 0329f589a4..096072b7b6 100644 --- a/engines/neverhood/module1000.cpp +++ b/engines/neverhood/module1000.cpp @@ -348,33 +348,33 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game setRectList(0x004B49F0); - insertKlayman(200, 433); + insertKlaymen(200, 433); setMessageList(0x004B4888); } else if (which == 1) { // Klaymen entering from the right setRectList(0x004B49F0); - insertKlayman(640, 433); + insertKlaymen(640, 433); setMessageList(0x004B4898); } else if (which == 2) { // Klaymen returning from looking through the window setRectList(0x004B49F0); - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { - insertKlayman(390, 433); - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) { + insertKlaymen(390, 433); + _klaymen->setDoDeltaX(1); } else { - insertKlayman(300, 433); + insertKlaymen(300, 433); } setMessageList(0x004B4970); } else { // Klaymen sleeping setRectList(0x004B4A00); - insertKlayman(200, 433); + insertKlaymen(200, 433); setMessageList(0x004B4890); } tempSprite = insertStaticSprite(0x2080A3A8, 1300); - _klayman->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480); if (!getGlobalVar(V_DOOR_BUSTED)) { _asDoor = insertSprite(); @@ -399,7 +399,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which) } Scene1001::~Scene1001() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX()); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX()); } uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -408,7 +408,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x00342624) { - sendEntityMessage(_klayman, 0x1014, _asLever); + sendEntityMessage(_klaymen, 0x1014, _asLever); setMessageList2(0x004B4910); messageResult = 1; } else if (param.asInteger() == 0x21E64A00) { @@ -419,7 +419,7 @@ uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entit } messageResult = 1; } else if (param.asInteger() == 0x040424D0) { - sendEntityMessage(_klayman, 0x1014, _ssButton); + sendEntityMessage(_klaymen, 0x1014, _ssButton); } else if (param.asInteger() == 0x80006358) { if (getGlobalVar(V_WINDOW_OPEN)) { setMessageList(0x004B4938); @@ -768,8 +768,8 @@ uint32 SsCommonPressButton::handleMessage(int messageNum, const MessageParam &pa return messageResult; } -AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, bool isSecond) - : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _isSecond(isSecond), _countdown(0) { +AsScene1002VenusFlyTrap::AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen, bool isSecond) + : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klaymen(klaymen), _isSecond(isSecond), _countdown(0) { createSurface(995, 175, 195); if (!_isSecond) { @@ -805,9 +805,9 @@ void AsScene1002VenusFlyTrap::update() { } void AsScene1002VenusFlyTrap::upIdle() { - if (_countdown == 0 && _klayman->getX() - 20 > _x) + if (_countdown == 0 && _klaymen->getX() - 20 > _x) setDoDeltaX(1); - else if (_klayman->getX() + 20 < _x) + else if (_klaymen->getX() + 20 < _x) setDoDeltaX(0); update(); } @@ -866,7 +866,7 @@ uint32 AsScene1002VenusFlyTrap::handleMessage(int messageNum, const MessageParam stGrabRing(); break; case 0x4810: - swallowKlayman(); + swallowKlaymen(); break; case 0x482A: sendMessage(_parentScene, 0x1022, 995); @@ -897,11 +897,11 @@ uint32 AsScene1002VenusFlyTrap::hmAnimationExt(int messageNum, const MessagePara else if (param.asInteger() == 0x41881801) { if (_isSecond) { if (_x > 330) - sendMessage(_klayman, 0x4811, 2); + sendMessage(_klaymen, 0x4811, 2); else - sendMessage(_klayman, 0x4811, 0); + sendMessage(_klaymen, 0x4811, 0); } else { - sendMessage(_klayman, 0x4811, 0); + sendMessage(_klaymen, 0x4811, 0); } } else if (param.asInteger() == 0x522200A0) playSound(0, 0x931080C8); @@ -956,11 +956,11 @@ void AsScene1002VenusFlyTrap::stRingGrabbed() { SetMessageHandler(&AsScene1002VenusFlyTrap::handleMessage); } -void AsScene1002VenusFlyTrap::stKlaymanInside() { +void AsScene1002VenusFlyTrap::stKlaymenInside() { startAnimation(0x31303094, 0, -1); SetUpdateHandler(&AsScene1002VenusFlyTrap::update); SetMessageHandler(NULL); - NextState(&AsScene1002VenusFlyTrap::stKlaymanInsideMoving); + NextState(&AsScene1002VenusFlyTrap::stKlaymenInsideMoving); _countdown = 24; } @@ -985,31 +985,31 @@ void AsScene1002VenusFlyTrap::stIdle() { } } -void AsScene1002VenusFlyTrap::stKlaymanInsideMoving() { +void AsScene1002VenusFlyTrap::stKlaymenInsideMoving() { startAnimation(0x152920C4, 0, -1); SetUpdateHandler(&AsScene1002VenusFlyTrap::update); SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt); - NextState(&AsScene1002VenusFlyTrap::stSpitOutKlayman); + NextState(&AsScene1002VenusFlyTrap::stSpitOutKlaymen); } -void AsScene1002VenusFlyTrap::stSpitOutKlayman() { +void AsScene1002VenusFlyTrap::stSpitOutKlaymen() { startAnimation(0x84001117, 0, -1); SetUpdateHandler(&AsScene1002VenusFlyTrap::update); SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt); NextState(&AsScene1002VenusFlyTrap::stIdle); } -void AsScene1002VenusFlyTrap::swallowKlayman() { - if (_x - 15 < _klayman->getX() && _x + 15 > _klayman->getX()) { +void AsScene1002VenusFlyTrap::swallowKlaymen() { + if (_x - 15 < _klaymen->getX() && _x + 15 > _klaymen->getX()) { if (_isSecond) setDoDeltaX(_x > 265 && _x < 330 ? 1 : 0); else setDoDeltaX(_x > 320 ? 1 : 0); - sendMessage(_klayman, 0x2001, 0); + sendMessage(_klaymen, 0x2001, 0); startAnimation(0x8C2C80D4, 0, -1); SetUpdateHandler(&AsScene1002VenusFlyTrap::update); SetMessageHandler(&AsScene1002VenusFlyTrap::hmAnimationExt); - NextState(&AsScene1002VenusFlyTrap::stKlaymanInside); + NextState(&AsScene1002VenusFlyTrap::stKlaymenInside); } } @@ -1083,59 +1083,59 @@ void AsScene1002OutsideDoorBackground::stDoorClosed() { stopAnimation(); } -AsScene1002KlaymanLadderHands::AsScene1002KlaymanLadderHands(NeverhoodEngine *vm, Klayman *klayman) - : AnimatedSprite(vm, 1200), _klayman(klayman) { +AsScene1002KlaymenLadderHands::AsScene1002KlaymenLadderHands(NeverhoodEngine *vm, Klaymen *klaymen) + : AnimatedSprite(vm, 1200), _klaymen(klaymen) { createSurface(1200, 40, 163); setVisible(false); - SetUpdateHandler(&AsScene1002KlaymanLadderHands::update); + SetUpdateHandler(&AsScene1002KlaymenLadderHands::update); SetMessageHandler(&Sprite::handleMessage); } -void AsScene1002KlaymanLadderHands::update() { - if (_klayman->getCurrAnimFileHash() == 0x3A292504) { - startAnimation(0xBA280522, _klayman->getFrameIndex(), -1); - _newStickFrameIndex = _klayman->getFrameIndex(); +void AsScene1002KlaymenLadderHands::update() { + if (_klaymen->getCurrAnimFileHash() == 0x3A292504) { + startAnimation(0xBA280522, _klaymen->getFrameIndex(), -1); + _newStickFrameIndex = _klaymen->getFrameIndex(); setVisible(true); - _x = _klayman->getX(); - _y = _klayman->getY(); - setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0); - } else if (_klayman->getCurrAnimFileHash() == 0x122D1505) { - startAnimation(0x1319150C, _klayman->getFrameIndex(), -1); - _newStickFrameIndex = _klayman->getFrameIndex(); + _x = _klaymen->getX(); + _y = _klaymen->getY(); + setDoDeltaX(_klaymen->isDoDeltaX() ? 1 : 0); + } else if (_klaymen->getCurrAnimFileHash() == 0x122D1505) { + startAnimation(0x1319150C, _klaymen->getFrameIndex(), -1); + _newStickFrameIndex = _klaymen->getFrameIndex(); setVisible(true); - _x = _klayman->getX(); - _y = _klayman->getY(); - setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0); + _x = _klaymen->getX(); + _y = _klaymen->getY(); + setDoDeltaX(_klaymen->isDoDeltaX() ? 1 : 0); } else setVisible(false); AnimatedSprite::update(); } -AsScene1002KlaymanPeekHand::AsScene1002KlaymanPeekHand(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman) - : AnimatedSprite(vm, 1200), _parentScene(parentScene), _klayman(klayman), +AsScene1002KlaymenPeekHand::AsScene1002KlaymenPeekHand(NeverhoodEngine *vm, Scene *parentScene, Klaymen *klaymen) + : AnimatedSprite(vm, 1200), _parentScene(parentScene), _klaymen(klaymen), _isClipRectSaved(false) { createSurface(1000, 33, 41); setVisible(false); - SetUpdateHandler(&AsScene1002KlaymanPeekHand::update); - SetMessageHandler(&AsScene1002KlaymanPeekHand::handleMessage); + SetUpdateHandler(&AsScene1002KlaymenPeekHand::update); + SetMessageHandler(&AsScene1002KlaymenPeekHand::handleMessage); } -void AsScene1002KlaymanPeekHand::update() { - if (_klayman->getCurrAnimFileHash() == 0xAC20C012 && _klayman->getFrameIndex() < 50) { - startAnimation(0x9820C913, _klayman->getFrameIndex(), -1); - _newStickFrameIndex = _klayman->getFrameIndex(); +void AsScene1002KlaymenPeekHand::update() { + if (_klaymen->getCurrAnimFileHash() == 0xAC20C012 && _klaymen->getFrameIndex() < 50) { + startAnimation(0x9820C913, _klaymen->getFrameIndex(), -1); + _newStickFrameIndex = _klaymen->getFrameIndex(); setVisible(true); - _x = _klayman->getX(); - _y = _klayman->getY(); - setDoDeltaX(_klayman->isDoDeltaX() ? 1 : 0); + _x = _klaymen->getX(); + _y = _klaymen->getY(); + setDoDeltaX(_klaymen->isDoDeltaX() ? 1 : 0); } else setVisible(false); AnimatedSprite::update(); } -uint32 AsScene1002KlaymanPeekHand::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { +uint32 AsScene1002KlaymenPeekHand::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x100D: @@ -1155,7 +1155,7 @@ uint32 AsScene1002KlaymanPeekHand::handleMessage(int messageNum, const MessagePa } Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which) - : Scene(vm, parentModule), _isKlaymanFloor(false), _isClimbingLadder(false) { + : Scene(vm, parentModule), _isKlaymenFloor(false), _isClimbingLadder(false) { NRect tempClipRect; Sprite *tempSprite; @@ -1181,47 +1181,47 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which) // Restoring game if (_vm->_gameState.which == 0) { // Klaymen on top - insertKlayman(90, 226); - _asKlaymanLadderHands = insertSprite(_klayman); + insertKlaymen(90, 226); + _asKlaymenLadderHands = insertSprite(_klaymen); setMessageList(0x004B4270); - _klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2()); - _asKlaymanLadderHands->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); - _klayman->setRepl(64, 0); + _klaymen->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2()); + _asKlaymenLadderHands->getSurface()->getClipRect() = _klaymen->getSurface()->getClipRect(); + _klaymen->setRepl(64, 0); } else { // Klaymen on the floor - insertKlayman(379, 435); - _asKlaymanLadderHands = insertSprite(_klayman); + insertKlaymen(379, 435); + _asKlaymenLadderHands = insertSprite(_klaymen); setMessageList(0x004B4270); - _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); - _asKlaymanLadderHands->setClipRect(_klayman->getClipRect()); + _klaymen->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); + _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect()); } } else if (which == 1) { // Klaymen entering from the right - insertKlayman(650, 435); - _asKlaymanLadderHands = insertSprite(_klayman); + insertKlaymen(650, 435); + _asKlaymenLadderHands = insertSprite(_klaymen); setMessageList(0x004B4478); - _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); - _asKlaymanLadderHands->setClipRect(_klayman->getClipRect()); + _klaymen->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); + _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect()); _vm->_gameState.which = 1; } else if (which == 2) { // Klaymen coming up the ladder - insertKlayman(68, 645); - _asKlaymanLadderHands = insertSprite(_klayman); + insertKlaymen(68, 645); + _asKlaymenLadderHands = insertSprite(_klaymen); setMessageList(0x004B4298); - _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); - _asKlaymanLadderHands->setClipRect(_klayman->getClipRect()); + _klaymen->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); + _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect()); _vm->_gameState.which = 1; - sendMessage(_klayman, 0x4820, 0); + sendMessage(_klaymen, 0x4820, 0); } else { // Klaymen entering from the left, peeking - insertKlayman(90, 226); - _asKlaymanLadderHands = insertSprite(_klayman); + insertKlaymen(90, 226); + _asKlaymenLadderHands = insertSprite(_klaymen); setMessageList(0x004B4470); - _klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2()); - _asKlaymanLadderHands->setClipRect(_klayman->getClipRect()); - _asKlaymanPeekHand = insertSprite(this, _klayman); - _asKlaymanPeekHand->setClipRect(_klayman->getClipRect()); - _klayman->setRepl(64, 0); + _klaymen->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2()); + _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect()); + _asKlaymenPeekHand = insertSprite(this, _klaymen); + _asKlaymenPeekHand->setClipRect(_klaymen->getClipRect()); + _klaymen->setRepl(64, 0); _vm->_gameState.which = 0; } @@ -1241,10 +1241,10 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which) tempSprite = insertSprite(); _asDoorSpy = insertSprite(tempClipRect, this, _asDoor, tempSprite); _ssPressButton = insertSprite(this, 0x00412692, 0x140B60BE, 800, 0); - _asVenusFlyTrap = insertSprite(this, _klayman, false); + _asVenusFlyTrap = insertSprite(this, _klaymen, false); addCollisionSprite(_asVenusFlyTrap); - sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap); + sendEntityMessage(_klaymen, 0x2007, _asVenusFlyTrap); _asOutsideDoorBackground = insertSprite(); @@ -1260,12 +1260,12 @@ Scene1002::~Scene1002() { void Scene1002::update() { Scene::update(); - if (!_isKlaymanFloor && _klayman->getY() > 230) { - _klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); - _asKlaymanLadderHands->setClipRect(_klayman->getClipRect()); + if (!_isKlaymenFloor && _klaymen->getY() > 230) { + _klaymen->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2()); + _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect()); deleteSprite(&_ssLadderArchPart3); - _klayman->clearRepl(); - _isKlaymanFloor = true; + _klaymen->clearRepl(); + _isKlaymenFloor = true; _vm->_gameState.which = 1; } } @@ -1282,14 +1282,14 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit setMessageList(0x004B4448); messageResult = 1; } else if (param.asInteger() == 0x4A845A00) - sendEntityMessage(_klayman, 0x1014, _asRing1); + sendEntityMessage(_klaymen, 0x1014, _asRing1); else if (param.asInteger() == 0x43807801) - sendEntityMessage(_klayman, 0x1014, _asRing2); + sendEntityMessage(_klaymen, 0x1014, _asRing2); else if (param.asInteger() == 0x46C26A01) { if (getGlobalVar(V_FLYTRAP_RING_DOOR)) { setMessageList(0x004B44B8); } else { - sendEntityMessage(_klayman, 0x1014, _asRing3); + sendEntityMessage(_klaymen, 0x1014, _asRing3); if (_asVenusFlyTrap->getX() - 10 < 366 && _asVenusFlyTrap->getX() + 10 > 366) { setGlobalVar(V_FLYTRAP_RING_EATEN, 1); setMessageList(0x004B44A8); @@ -1299,11 +1299,11 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit } messageResult = 1; } else if (param.asInteger() == 0x468C7B11) - sendEntityMessage(_klayman, 0x1014, _asRing4); + sendEntityMessage(_klaymen, 0x1014, _asRing4); else if (param.asInteger() == 0x42845B19) - sendEntityMessage(_klayman, 0x1014, _asRing5); + sendEntityMessage(_klaymen, 0x1014, _asRing5); else if (param.asInteger() == 0xC0A07458) - sendEntityMessage(_klayman, 0x1014, _ssPressButton); + sendEntityMessage(_klaymen, 0x1014, _ssPressButton); break; case 0x1024: sendMessage(_parentModule, 0x1024, param.asInteger()); @@ -1312,10 +1312,10 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit if (_isClimbingLadder) { setMessageList2(0x004B43D0); } else { - if (_klayman->getY() > 420) { - sendEntityMessage(_klayman, 0x1014, _asVenusFlyTrap); + if (_klaymen->getY() > 420) { + sendEntityMessage(_klaymen, 0x1014, _asVenusFlyTrap); setMessageList2(0x004B4480); - } else if (_klayman->getY() > 227) { + } else if (_klaymen->getY() > 227) { setMessageList2(0x004B41E0); } else { setMessageList2(0x004B4148); @@ -1365,7 +1365,7 @@ uint32 Scene1002::handleMessage(int messageNum, const MessageParam ¶m, Entit } break; case 0x480B: - sendEntityMessage(_klayman, 0x1014, _asDoorSpy); + sendEntityMessage(_klaymen, 0x1014, _asDoorSpy); break; case 0x480F: setGlobalVar(V_RADIO_ENABLED, 0); @@ -1464,31 +1464,31 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game setRectList(0x004B7C70); - insertKlayman(330, 327); + insertKlaymen(330, 327); setMessageList(0x004B7C18); } else if (which == 1) { // Klaymen returning from reading a note setRectList(0x004B7C70); - insertKlayman(330, 327); + insertKlaymen(330, 327); setMessageList(0x004B7C08); } else { // Klaymen coming down the ladder loadDataResource(0x01900A04); - insertKlayman(_dataResource.getPoint(0x80052A29).x, 27); + insertKlaymen(_dataResource.getPoint(0x80052A29).x, 27); setMessageList(0x004B7BF0); } updatePaletteArea(); - _asKlaymanLadderHands = insertSprite(_klayman); + _asKlaymenLadderHands = insertSprite(_klaymen); insertStaticSprite(0x800034A0, 1100); insertStaticSprite(0x64402020, 1100); insertStaticSprite(0x3060222E, 1300); tempSprite = insertStaticSprite(0x0E002004, 1300); - _klayman->setClipRect(0, tempSprite->getDrawRect().y, 640, 480); - _asKlaymanLadderHands->setClipRect(_klayman->getClipRect()); + _klaymen->setClipRect(0, tempSprite->getDrawRect().y, 640, 480); + _asKlaymenLadderHands->setClipRect(_klaymen->getClipRect()); _asTrashCan = insertSprite(); @@ -1523,7 +1523,7 @@ uint32 Scene1004::handleMessage(int messageNum, const MessageParam ¶m, Entit } void Scene1004::updatePaletteArea() { - if (_klayman->getY() < 150) { + if (_klaymen->getY() < 150) { if (_paletteAreaStatus != 0) { _paletteAreaStatus = 0; _palette->addBasePalette(0x406B0D10, 0, 64, 0); diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h index 2cc9a556dd..897d026470 100644 --- a/engines/neverhood/module1000.h +++ b/engines/neverhood/module1000.h @@ -175,10 +175,10 @@ protected: class AsScene1002VenusFlyTrap : public AnimatedSprite { public: - AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, bool isSecond); + AsScene1002VenusFlyTrap(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen, bool isSecond); protected: Scene *_parentScene; - Sprite *_klayman; + Sprite *_klaymen; int _countdown; bool _isSecond; void update(); @@ -191,11 +191,11 @@ protected: void stRelease(); void stGrabRing(); void stRingGrabbed(); - void stKlaymanInside(); + void stKlaymenInside(); void stIdle(); - void stKlaymanInsideMoving(); - void stSpitOutKlayman(); - void swallowKlayman(); + void stKlaymenInsideMoving(); + void stSpitOutKlaymen(); + void swallowKlaymen(); }; class AsScene1002OutsideDoorBackground : public AnimatedSprite { @@ -212,20 +212,20 @@ protected: void stDoorClosed(); }; -class AsScene1002KlaymanLadderHands : public AnimatedSprite { +class AsScene1002KlaymenLadderHands : public AnimatedSprite { public: - AsScene1002KlaymanLadderHands(NeverhoodEngine *vm, Klayman *klayman); + AsScene1002KlaymenLadderHands(NeverhoodEngine *vm, Klaymen *klaymen); protected: - Klayman *_klayman; + Klaymen *_klaymen; void update(); }; -class AsScene1002KlaymanPeekHand : public AnimatedSprite { +class AsScene1002KlaymenPeekHand : public AnimatedSprite { public: - AsScene1002KlaymanPeekHand(NeverhoodEngine *vm, Scene *parentScene, Klayman *klayman); + AsScene1002KlaymenPeekHand(NeverhoodEngine *vm, Scene *parentScene, Klaymen *klaymen); protected: Scene *_parentScene; - Klayman *_klayman; + Klaymen *_klaymen; bool _isClipRectSaved; NRect _savedClipRect; void update(); @@ -250,11 +250,11 @@ protected: Sprite *_ssLadderArchPart2; Sprite *_ssLadderArchPart3; Sprite *_ssCeiling; - Sprite *_asKlaymanLadderHands; - Sprite *_asKlaymanPeekHand; + Sprite *_asKlaymenLadderHands; + Sprite *_asKlaymenPeekHand; Sprite *_asOutsideDoorBackground; Sprite *_ssPressButton; - bool _isKlaymanFloor; + bool _isKlaymenFloor; bool _isClimbingLadder; void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); @@ -273,7 +273,7 @@ class Scene1004 : public Scene { public: Scene1004(NeverhoodEngine *vm, Module *parentModule, int which); protected: - Sprite *_asKlaymanLadderHands; + Sprite *_asKlaymenLadderHands; Sprite *_asTrashCan; int _paletteAreaStatus; void update(); diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp index 2ee389703c..067018dea0 100644 --- a/engines/neverhood/module1100.cpp +++ b/engines/neverhood/module1100.cpp @@ -656,35 +656,35 @@ Scene1109::Scene1109(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(140, 436); + insertKlaymen(140, 436); setMessageList(0x004B6260); sendMessage(this, 0x2000, 0); } else if (which == 1) { // Klaymen teleporting in - insertKlayman(450, 436); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(450, 436); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B6268, false); sendMessage(this, 0x2000, 1); } else if (which == 2) { // Klaymen teleporting out - insertKlayman(450, 436); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(450, 436); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B6318, false); sendMessage(this, 0x2000, 1); } else if (which == 3) { // Klaymen returning from teleporter console - insertKlayman(450, 436); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(450, 436); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B6278, false); sendMessage(this, 0x2000, 1); } else { // Klaymen entering from the left - insertKlayman(0, 436); + insertKlaymen(0, 436); setMessageList(0x004B6258); sendMessage(this, 0x2000, 0); } - _klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, 0, _sprite1->getDrawRect().x2(), 480); } @@ -694,10 +694,10 @@ uint32 Scene1109::handleMessage(int messageNum, const MessageParam ¶m, Entit case 0x2000: if (param.asInteger()) { setRectList(0x004B63A8); - _klayman->setKlaymanIdleTable3(); + _klaymen->setKlaymenIdleTable3(); } else { setRectList(0x004B6398); - _klayman->setKlaymanIdleTable1(); + _klaymen->setKlaymenIdleTable1(); } break; } diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp index 844d07f771..1536114df8 100644 --- a/engines/neverhood/module1200.cpp +++ b/engines/neverhood/module1200.cpp @@ -196,8 +196,8 @@ uint32 AsScene1201TntManRope::handleMessage(int messageNum, const MessageParam & return messageResult; } -AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool isOpen) - : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown(0) { +AsScene1201RightDoor::AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klaymen, bool isOpen) + : AnimatedSprite(vm, 1100), _klaymen(klaymen), _countdown(0) { createSurface1(0xD088AC30, 100); _x = 320; @@ -254,17 +254,17 @@ void AsScene1201RightDoor::stCloseDoorDone() { setVisible(false); } -AsScene1201KlaymanHead::AsScene1201KlaymanHead(NeverhoodEngine *vm) +AsScene1201KlaymenHead::AsScene1201KlaymenHead(NeverhoodEngine *vm) : AnimatedSprite(vm, 1200) { createSurface(1200, 69, 98); SetUpdateHandler(&AnimatedSprite::update); - SetMessageHandler(&AsScene1201KlaymanHead::handleMessage); + SetMessageHandler(&AsScene1201KlaymenHead::handleMessage); SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); setVisible(false); } -uint32 AsScene1201KlaymanHead::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { +uint32 AsScene1201KlaymenHead::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x2006: @@ -514,8 +514,8 @@ void AsScene1201Match::stIdleOnFloor() { _newStickFrameIndex = 0; } -AsScene1201Creature::AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman) - : AnimatedSprite(vm, 900), _parentScene(parentScene), _klayman(klayman), _klaymanTooClose(false) { +AsScene1201Creature::AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen) + : AnimatedSprite(vm, 900), _parentScene(parentScene), _klaymen(klaymen), _klaymenTooClose(false) { // NOTE: _countdown2 and _countdown3 were unused/without effect and thus removed @@ -528,9 +528,9 @@ AsScene1201Creature::AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene } void AsScene1201Creature::update() { - bool oldKlaymanTooClose = _klaymanTooClose; - _klaymanTooClose = _klayman->getX() >= 385; - if (_klaymanTooClose != oldKlaymanTooClose) + bool oldKlaymenTooClose = _klaymenTooClose; + _klaymenTooClose = _klaymen->getX() >= 385; + if (_klaymenTooClose != oldKlaymenTooClose) stWaiting(); if (_countdown != 0 && (--_countdown == 0)) gotoNextState(); @@ -550,7 +550,7 @@ uint32 AsScene1201Creature::hmWaiting(int messageNum, const MessageParam ¶m, GotoState(&AsScene1201Creature::stStartReachForTntDummy); break; case 0x2006: - GotoState(&AsScene1201Creature::stPincerSnapKlayman); + GotoState(&AsScene1201Creature::stPincerSnapKlaymen); break; } return messageResult; @@ -566,14 +566,14 @@ uint32 AsScene1201Creature::hmPincerSnap(int messageNum, const MessageParam &par return messageResult; } -uint32 AsScene1201Creature::hmPincerSnapKlayman(int messageNum, const MessageParam ¶m, Entity *sender) { +uint32 AsScene1201Creature::hmPincerSnapKlaymen(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x100D: if (param.asInteger() == 0x02060018) { playSound(0, 0xCD298116); sendMessage(_parentScene, 0x4814, 0); - sendMessage(_klayman, 0x4814, 0); + sendMessage(_klaymen, 0x4814, 0); } break; case 0x3002: @@ -591,7 +591,7 @@ void AsScene1201Creature::stWaiting() { } void AsScene1201Creature::stPincerSnap() { - if (!_klaymanTooClose) { + if (!_klaymenTooClose) { startAnimation(0xCA287133, 0, -1); SetMessageHandler(&AsScene1201Creature::hmPincerSnap); NextState(&AsScene1201Creature::stWaiting); @@ -611,20 +611,20 @@ void AsScene1201Creature::stReachForTntDummy() { _countdown = 0; } -void AsScene1201Creature::stPincerSnapKlayman() { +void AsScene1201Creature::stPincerSnapKlaymen() { startAnimation(0xCA287133, 0, -1); - SetMessageHandler(&AsScene1201Creature::hmPincerSnapKlayman); + SetMessageHandler(&AsScene1201Creature::hmPincerSnapKlaymen); NextState(&AsScene1201Creature::stWaiting); _countdown = 0; } -AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman) - : AnimatedSprite(vm, 1100), _klayman(klayman) { +AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klaymen) + : AnimatedSprite(vm, 1100), _klaymen(klaymen) { _x = 320; _y = 240; createSurface(800, 55, 199); - if (_klayman->getX() < 100) { + if (_klaymen->getX() < 100) { startAnimation(0x508A111B, 0, -1); _newStickFrameIndex = STICK_LAST_FRAME; playSound(0, calcHash("fxDoorOpen03")); @@ -699,42 +699,42 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which) tempSprite = insertStaticSprite(0xA29223FA, 1200); x2 = tempSprite->getX() + tempSprite->getDrawRect().width; - _asKlaymanHead = insertSprite(); + _asKlaymenHead = insertSprite(); if (which < 0) { // Restoring game - insertKlayman(364, 333); + insertKlaymen(364, 333); setMessageList(0x004AEC08); } else if (which == 3) { // Klaymen standing after the weasel exploded - insertKlayman(400, 329); + insertKlaymen(400, 329); setMessageList(0x004AEC08); } else if (which == 2) { // Klaymen entering from the right if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) { - insertKlayman(374, 333); + insertKlaymen(374, 333); setMessageList(0x004AEC08); } else { - insertKlayman(640, 329); + insertKlaymen(640, 329); setMessageList(0x004AEC20); } } else if (which == 1) { // Klaymen returning from the TNT console - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { - insertKlayman(364, 333); - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) { + insertKlaymen(364, 333); + _klaymen->setDoDeltaX(1); } else { - insertKlayman(246, 333); + insertKlaymen(246, 333); } setMessageList(0x004AEC30); } else { // Klaymen entering from the left - insertKlayman(0, 336); + insertKlaymen(0, 336); setMessageList(0x004AEC10); } - _klayman->setClipRect(x1, 0, x2, 480); - _klayman->setRepl(64, 0); + _klaymen->setClipRect(x1, 0, x2, 480); + _klaymen->setRepl(64, 0); if (getGlobalVar(V_CREATURE_ANGRY) && !getGlobalVar(V_CREATURE_EXPLODED)) { setBackground(0x4019A2C4); @@ -743,7 +743,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which) } else { setBackground(0x40206EC5); setPalette(0x40206EC5); - _asRightDoor = insertSprite(_klayman, which == 2); + _asRightDoor = insertSprite(_klaymen, which == 2); } if (getGlobalVar(V_TNT_DUMMY_BUILT)) { @@ -816,7 +816,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which) tempSprite = insertStaticSprite(0x63D400BC, 900); - _asLeftDoor = insertSprite(_klayman); + _asLeftDoor = insertSprite(_klaymen); _asLeftDoor->setClipRect(x1, tempSprite->getDrawRect().y, tempSprite->getDrawRect().x2(), 480); if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_MATCH_STATUS) == 0) @@ -830,7 +830,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which) } if (getGlobalVar(V_CREATURE_ANGRY) && getGlobalVar(V_CREATURE_EXPLODED) == 0) { - _asCreature = insertSprite(this, _klayman); + _asCreature = insertSprite(this, _klaymen); _asCreature->setClipRect(x1, 0, x2, 480); } @@ -839,7 +839,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which) Scene1201::~Scene1201() { if (_creatureExploded) setGlobalVar(V_CREATURE_EXPLODED, 1); - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } void Scene1201::update() { @@ -861,7 +861,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit _canAcceptInput = false; sendMessage(_asCreature, 0x2006, 0); } else if (param.asInteger() == 0x090EB048) { - if (_klayman->getX() < 572) + if (_klaymen->getX() < 572) setMessageList2(0x004AEC90); else setMessageList2(0x004AEC20); @@ -871,19 +871,19 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit if (getGlobalVar(V_MATCH_STATUS) == 0) setMessageList2(0x004AECB0); else { - sendEntityMessage(_klayman, 0x1014, _asMatch); + sendEntityMessage(_klaymen, 0x1014, _asMatch); setMessageList2(0x004AECC0); } break; case 0x2002: if (getGlobalVar(V_TNT_DUMMY_FUSE_LIT)) { // Move the TNT dummy if the fuse is burning - sendEntityMessage(_klayman, 0x1014, _asTntMan); + sendEntityMessage(_klaymen, 0x1014, _asTntMan); setMessageList2(0x004AECF0, false); } else if (getGlobalVar(V_MATCH_STATUS) == 3) { // Light the TNT dummy if we have the match - sendEntityMessage(_klayman, 0x1014, _asTntMan); - if (_klayman->getX() > _asTntMan->getX()) + sendEntityMessage(_klaymen, 0x1014, _asTntMan); + if (_klaymen->getX() > _asTntMan->getX()) setMessageList(0x004AECD0); else setMessageList(0x004AECE0); @@ -894,7 +894,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asTape) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004AED38); } break; @@ -902,7 +902,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam ¶m, Entit sendMessage(_asRightDoor, 0x4829, 0); break; case 0x8000: - sendMessage(_asKlaymanHead, 0x2006, 0); + sendMessage(_asKlaymenHead, 0x2006, 0); break; } return messageResult; diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h index 1fe607d308..f6f97b4131 100644 --- a/engines/neverhood/module1200.h +++ b/engines/neverhood/module1200.h @@ -61,9 +61,9 @@ protected: class AsScene1201RightDoor : public AnimatedSprite { public: - AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klayman, bool isOpen); + AsScene1201RightDoor(NeverhoodEngine *vm, Sprite *klaymen, bool isOpen); protected: - Sprite *_klayman; + Sprite *_klaymen; int _countdown; void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); @@ -72,9 +72,9 @@ protected: void stCloseDoorDone(); }; -class AsScene1201KlaymanHead : public AnimatedSprite { +class AsScene1201KlaymenHead : public AnimatedSprite { public: - AsScene1201KlaymanHead(NeverhoodEngine *vm); + AsScene1201KlaymenHead(NeverhoodEngine *vm); protected: uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); }; @@ -126,28 +126,28 @@ protected: class AsScene1201Creature : public AnimatedSprite { public: - AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman); + AsScene1201Creature(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen); protected: Scene *_parentScene; - Sprite *_klayman; + Sprite *_klaymen; int _countdown; - bool _klaymanTooClose; + bool _klaymenTooClose; void update(); uint32 hmWaiting(int messageNum, const MessageParam ¶m, Entity *sender); uint32 hmPincerSnap(int messageNum, const MessageParam ¶m, Entity *sender); - uint32 hmPincerSnapKlayman(int messageNum, const MessageParam ¶m, Entity *sender); + uint32 hmPincerSnapKlaymen(int messageNum, const MessageParam ¶m, Entity *sender); void stWaiting(); void stPincerSnap(); void stStartReachForTntDummy(); void stReachForTntDummy(); - void stPincerSnapKlayman(); + void stPincerSnapKlaymen(); }; class AsScene1201LeftDoor : public AnimatedSprite { public: - AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman); + AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klaymen); protected: - Sprite *_klayman; + Sprite *_klaymen; uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); void stCloseDoor(); }; @@ -171,7 +171,7 @@ protected: Sprite *_asLeftDoor; Sprite *_asRightDoor; Sprite *_asTape; - Sprite *_asKlaymanHead; + Sprite *_asKlaymenHead; bool _creatureExploded; void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp index 690ca7cea3..94937c4c7f 100644 --- a/engines/neverhood/module1300.cpp +++ b/engines/neverhood/module1300.cpp @@ -445,20 +445,20 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(380, 364); + insertKlaymen(380, 364); setMessageList(0x004B0868); } else { // Klaymen entering from back - insertKlayman(293, 330); + insertKlaymen(293, 330); setMessageList(0x004B0870); } - _klayman->setClipRect(0, 0, _sprite3->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, 0, _sprite3->getDrawRect().x2(), 480); - _asVenusFlyTrap = insertSprite(this, _klayman, true); + _asVenusFlyTrap = insertSprite(this, _klaymen, true); addCollisionSprite(_asVenusFlyTrap); - sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap); + sendEntityMessage(_klaymen, 0x2007, _asVenusFlyTrap); } @@ -468,10 +468,10 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x4A845A00) - sendEntityMessage(_klayman, 0x1014, _asRing1); + sendEntityMessage(_klaymen, 0x1014, _asRing1); else if (param.asInteger() == 0x43807801) { if (!getGlobalVar(V_FLYTRAP_RING_BRIDGE)) { - sendEntityMessage(_klayman, 0x1014, _asRing2); + sendEntityMessage(_klaymen, 0x1014, _asRing2); if (_asVenusFlyTrap->getX() - 10 < 218 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32) setMessageList(0x004B0940); else @@ -480,10 +480,10 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit setMessageList(0x004B0950); messageResult = 1; } else if (param.asInteger() == 0x46C26A01) - sendEntityMessage(_klayman, 0x1014, _asRing3); + sendEntityMessage(_klaymen, 0x1014, _asRing3); else if (param.asInteger() == 0x468C7B11) { if (!getGlobalVar(V_FLYTRAP_RING_FENCE)) { - sendEntityMessage(_klayman, 0x1014, _asRing4); + sendEntityMessage(_klaymen, 0x1014, _asRing4); if (_asVenusFlyTrap->getX() - 10 < 218 + 32 + 32 + 32 && _asVenusFlyTrap->getX() + 10 > 218 + 32 + 32 + 32) setMessageList(0x004B0940); else @@ -492,7 +492,7 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit setMessageList(0x004B0950); messageResult = 1; } else if (param.asInteger() == 0x42845B19) - sendEntityMessage(_klayman, 0x1014, _asRing5); + sendEntityMessage(_klaymen, 0x1014, _asRing5); else if (param.asInteger() == 0x430A6060) { if (getGlobalVar(V_FLYTRAP_RING_BRIDGE)) setMessageList2(0x004B0910); @@ -511,14 +511,14 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit } break; case 0x2000: - if (_klayman->getY() > 360) { - sendEntityMessage(_klayman, 0x1014, _asVenusFlyTrap); + if (_klaymen->getY() > 360) { + sendEntityMessage(_klaymen, 0x1014, _asVenusFlyTrap); setMessageList2(0x004B08F0); } else setMessageList2(0x004B0920); break; case 0x2002: - if (_klayman->getX() > 545) + if (_klaymen->getX() > 545) leaveScene(1); break; case 0x2032: @@ -646,10 +646,10 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule) _sprite1 = insertStaticSprite(0xA014216B, 1100); - insertKlayman(207, 332); + insertKlaymen(207, 332); setMessageList(0x004AF9A0); - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); } @@ -671,7 +671,7 @@ uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entit AsScene1304Needle::AsScene1304Needle(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y) : AnimatedSprite(vm, 0x548E9411, surfacePriority, x, y), _parentScene(parentScene) { - // NOTE: Skipped check if Klayman already has the needle since that's done in the scene itself + // NOTE: Skipped check if Klaymen already has the needle since that's done in the scene itself SetMessageHandler(&AsScene1304Needle::handleMessage); } @@ -719,15 +719,15 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(217, 347); + insertKlaymen(217, 347); setMessageList(0x004B90E8); } else { // Klaymen entering from the left - insertKlayman(100, 347); + insertKlaymen(100, 347); setMessageList(0x004B90F0); } - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); } @@ -744,10 +744,10 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asNeedle) { - sendEntityMessage(_klayman, 0x1014, _asNeedle); + sendEntityMessage(_klaymen, 0x1014, _asNeedle); setMessageList(0x004B9130); } else if (sender == _asKey) { - sendEntityMessage(_klayman, 0x1014, _asKey); + sendEntityMessage(_klaymen, 0x1014, _asKey); setMessageList(0x004B9140); } break; @@ -767,11 +767,11 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(212, 441); + insertKlaymen(212, 441); setMessageList(0x004B6E40); } else { // Klaymen enters falling - insertKlayman(212, 441); + insertKlaymen(212, 441); setMessageList(0x004B6E48); } @@ -894,51 +894,51 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Resoring game - insertKlayman(380, 440); + insertKlaymen(380, 440); setMessageList(0x004AFAD0); sendMessage(this, 0x2000, 0); addCollisionSprite(_asTape); } else if (which == 1) { // Klaymen teleporting in - insertKlayman(136, 440); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(136, 440); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004AFAF0); sendMessage(this, 0x2000, 1); addCollisionSprite(_asTape); } else if (which == 2) { // Klaymen returning from diskplayer - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { - insertKlayman(515, 440); - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) { + insertKlaymen(515, 440); + _klaymen->setDoDeltaX(1); } else { - insertKlayman(355, 440); + insertKlaymen(355, 440); } setMessageList(0x004AFBC8); sendMessage(this, 0x2000, 0); addCollisionSprite(_asTape); } else if (which == 3) { // Klaymen returning from window - insertKlayman(534, 440); + insertKlaymen(534, 440); setMessageList(0x004AFC30); sendMessage(this, 0x2000, 0); addCollisionSprite(_asTape); } else if (which == 4) { // Klaymen teleporting out - insertKlayman(136, 440); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(136, 440); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004AFC38); sendMessage(this, 0x2000, 1); addCollisionSprite(_asTape); } else if (which == 5) { // Klaymen returning from teleporter - insertKlayman(136, 440); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(136, 440); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004AFB00); sendMessage(this, 0x2000, 1); addCollisionSprite(_asTape); } else { // Klaymen coming up in elevator - insertKlayman(286, 408); + insertKlaymen(286, 408); setSurfacePriority(_asElevator->getSurface(), 1100); setSurfacePriority(_asElevatorDoor->getSurface(), 1090); setSurfacePriority(_sprite1->getSurface(), 1080); @@ -951,7 +951,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which) } Scene1306::~Scene1306() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -959,7 +959,7 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x402064D8) - sendEntityMessage(_klayman, 0x1014, _ssButton); + sendEntityMessage(_klaymen, 0x1014, _ssButton); else if (param.asInteger() == 0x01C66840) { if (sendMessage(_asElevator, 0x2001, 0) != 0) setMessageList(0x004AFBD8); @@ -974,10 +974,10 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit case 0x2000: if (param.asInteger() != 0) { setRectList(0x004AFD28); - _klayman->setKlaymanIdleTable3(); + _klaymen->setKlaymenIdleTable3(); } else { setRectList(0x004AFD18); - _klayman->setKlaymanIdleTable1(); + _klaymen->setKlaymenIdleTable1(); } break; case 0x480B: @@ -986,13 +986,13 @@ uint32 Scene1306::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asKey) { - if (_klayman->getX() >= 249) { - sendEntityMessage(_klayman, 0x1014, _asKey); + if (_klaymen->getX() >= 249) { + sendEntityMessage(_klaymen, 0x1014, _asKey); setMessageList(0x004AFC58); } } else if (sender == _asTape) { - if (_klayman->getX() >= 249) { - sendEntityMessage(_klayman, 0x1014, _asTape); + if (_klaymen->getX() >= 249) { + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004AFC68); } } @@ -1549,7 +1549,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(380, 440); + insertKlaymen(380, 440); setMessageList(0x004B57C0); if (getGlobalVar(V_KEYDOOR_UNLOCKED)) { _sprite4 = insertStaticSprite(0x0101A624, 1100); @@ -1560,7 +1560,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) } } else if (which == 1) { // Klaymen entering from the right - insertKlayman(640, 440); + insertKlaymen(640, 440); setMessageList(0x004B57C8); if (getGlobalVar(V_KEYDOOR_UNLOCKED)) { _sprite4 = insertStaticSprite(0x0101A624, 1100); @@ -1571,7 +1571,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) } } else if (which == 2) { // Klaymen returning from keyslots panel - insertKlayman(475, 440); + insertKlaymen(475, 440); setMessageList(0x004B58B0); if (getGlobalVar(V_KEYDOOR_UNLOCKED)) { _sprite5 = insertSprite(this); @@ -1583,26 +1583,26 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) } } else { // Klaymen entering from the left - insertKlayman(41, 440); + insertKlaymen(41, 440); setMessageList(0x004B57D0); sendMessage(_asJaggyDoor, 0x4808, 0); _sprite1->setVisible(false); if (getGlobalVar(V_KEYDOOR_UNLOCKED)) { _sprite4 = insertStaticSprite(0x0101A624, 1100); - _klayman->setVisible(false); + _klaymen->setVisible(false); } else { _sprite5 = insertStaticSprite(0x080811A0, 100); - _klayman->setVisible(false); + _klaymen->setVisible(false); } } if (_sprite4) - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite4->getDrawRect().x2(), 480); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, _sprite4->getDrawRect().x2(), 480); else - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) { - _asProjector = insertSprite(this, _klayman, (Sprite*)NULL); + _asProjector = insertSprite(this, _klaymen, (Sprite*)NULL); addCollisionSprite(_asProjector); _asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2()); _asProjector->setRepl(64, 0); @@ -1618,7 +1618,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit setRectList(0x004B59A0); _isProjecting = true; } else if (param.asInteger() == 0x08821382) { - sendEntityMessage(_klayman, 0x1014, _asProjector); + sendEntityMessage(_klaymen, 0x1014, _asProjector); if (getGlobalVar(V_KEYDOOR_UNLOCKED)) setRectList(0x004B5990); else @@ -1628,7 +1628,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit clearRectList(); sendMessage(_asJaggyDoor, 0x4809, 0); _sprite1->setVisible(false); - _klayman->setVisible(false); + _klaymen->setVisible(false); } break; case 0x1022: @@ -1646,7 +1646,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit setRectList(0x004B5980); setMessageList(0x004B57E8, false); _sprite1->setVisible(true); - _klayman->setVisible(true); + _klaymen->setVisible(true); break; case 0x2001: leaveScene(0); @@ -1675,10 +1675,10 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit setMessageList2(0x004B5868); else { if (param.asInteger() == 1) { - sendEntityMessage(_klayman, 0x1014, _asProjector); + sendEntityMessage(_klaymen, 0x1014, _asProjector); setMessageList2(0x004B5848); - } else if (sendMessage(_asProjector, 0x480C, _klayman->getX() <= _asProjector->getX() ? 0 : 1) != 0) { - sendEntityMessage(_klayman, 0x1014, _asProjector); + } else if (sendMessage(_asProjector, 0x480C, _klaymen->getX() <= _asProjector->getX() ? 0 : 1) != 0) { + sendEntityMessage(_klaymen, 0x1014, _asProjector); setMessageList2(0x004B5830); } else setMessageList2(0x004B5800); @@ -1687,7 +1687,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam ¶m, Entit if (_isProjecting) setMessageList2(0x004B5868); else if (_messageListStatus != 2) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList2(0x004B58E0); } } @@ -1716,18 +1716,18 @@ void Scene1317::update() { } void Scene1317::upChooseKing() { - if (!_klaymanBlinks && _klaymanBlinkCountdown != 0 && (--_klaymanBlinkCountdown == 0)) - _klaymanBlinks = true; + if (!_klaymenBlinks && _klaymenBlinkCountdown != 0 && (--_klaymenBlinkCountdown == 0)) + _klaymenBlinks = true; - if (!_klaymanBlinks && _smackerPlayer->getFrameNumber() + 1 >= 2) { + if (!_klaymenBlinks && _smackerPlayer->getFrameNumber() + 1 >= 2) { _smackerPlayer->rewind(); - } else if (_klaymanBlinks && _smackerPlayer->getFrameNumber() + 1 >= 6) { + } else if (_klaymenBlinks && _smackerPlayer->getFrameNumber() + 1 >= 6) { _smackerPlayer->rewind(); - _klaymanBlinks = false; - _klaymanBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15; + _klaymenBlinks = false; + _klaymenBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15; } - if (!_klaymanBlinks && _decisionCountdown != 0 && (--_decisionCountdown == 0)) + if (!_klaymenBlinks && _decisionCountdown != 0 && (--_decisionCountdown == 0)) stNoDecisionYet(); if (_smackerFileHash) { @@ -1758,10 +1758,10 @@ uint32 Scene1317::hmChooseKing(int messageNum, const MessageParam ¶m, Entity stHoborgAsKing(); } else if (param.asPoint().x >= 313 && param.asPoint().y >= 184 && param.asPoint().x <= 399 && param.asPoint().y <= 379) { - stKlaymanAsKing(); + stKlaymenAsKing(); } else if (param.asPoint().x >= 347 && param.asPoint().y >= 380 && param.asPoint().x <= 418 && param.asPoint().y <= 474) { - stKlaymanAsKing(); + stKlaymenAsKing(); } break; } @@ -1793,8 +1793,8 @@ void Scene1317::stChooseKing() { _smackerFileHash = 0x10982841; _keepLastSmackerFrame = true; _decisionCountdown = 450; - _klaymanBlinks = false; - _klaymanBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15; + _klaymenBlinks = false; + _klaymenBlinkCountdown = _vm->_rnd->getRandomNumber(30 - 1) + 15; SetMessageHandler(&Scene1317::hmChooseKing); SetUpdateHandler(&Scene1317::upChooseKing); } @@ -1815,7 +1815,7 @@ void Scene1317::stHoborgAsKing() { SetUpdateHandler(&Scene1317::update); } -void Scene1317::stKlaymanAsKing() { +void Scene1317::stKlaymenAsKing() { showMouse(false); _smackerFileHash = 0x80982841; _keepLastSmackerFrame = false; diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h index ebbd03184e..147bfd0645 100644 --- a/engines/neverhood/module1300.h +++ b/engines/neverhood/module1300.h @@ -272,8 +272,8 @@ public: Scene1317(NeverhoodEngine *vm, Module *parentModule); protected: SmackerPlayer *_smackerPlayer; - bool _klaymanBlinks; - int _klaymanBlinkCountdown; + bool _klaymenBlinks; + int _klaymenBlinkCountdown; int _decisionCountdown; uint32 _smackerFileHash; bool _keepLastSmackerFrame; @@ -286,7 +286,7 @@ protected: void stChooseKing(); void stNoDecisionYet(); void stHoborgAsKing(); - void stKlaymanAsKing(); + void stKlaymenAsKing(); void stEndMovie(); }; diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp index 5febe8f08d..d96703b6f2 100644 --- a/engines/neverhood/module1400.cpp +++ b/engines/neverhood/module1400.cpp @@ -301,8 +301,8 @@ void AsScene1401Cheese::stSuckedIn() { SetSpriteUpdate(&AsScene1401Cheese::suSuckedIn); } -AsScene1401BackDoor::AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klayman, bool isOpen) - : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown(0), _isOpen(isOpen) { +AsScene1401BackDoor::AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klaymen, bool isOpen) + : AnimatedSprite(vm, 1100), _klaymen(klaymen), _countdown(0), _isOpen(isOpen) { _x = 320; _y = 240; @@ -376,8 +376,8 @@ static const AsCommonProjectorItem kAsCommonProjectorItems[] = { {{262, 433}, 1, 1, 0, 0, 0} }; -AsCommonProjector::AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *asPipe) - : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klayman(klayman), _asPipe(asPipe) { +AsCommonProjector::AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen, Sprite *asPipe) + : AnimatedSprite(vm, 1100), _parentScene(parentScene), _klaymen(klaymen), _asPipe(asPipe) { _asProjectorItem = &kAsCommonProjectorItems[getGlobalVar(V_PROJECTOR_LOCATION)]; createSurface(990, 101, 182); @@ -493,10 +493,10 @@ uint32 AsCommonProjector::hmAnimation(int messageNum, const MessageParam ¶m, } void AsCommonProjector::suMoving() { - if (_x <= _klayman->getX()) - _x = _klayman->getX() - 100; + if (_x <= _klaymen->getX()) + _x = _klaymen->getX() - 100; else - _x = _klayman->getX() + 100; + _x = _klaymen->getX() + 100; moveProjector(); if (_beforeMoveX == _x) { if (getGlobalVar(V_PROJECTOR_SLOT) == 0 && _asProjectorItem->leftBorderLeaves != 0) { @@ -656,49 +656,49 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(380, 447); + insertKlaymen(380, 447); setMessageList(0x004B65C8); _sprite1->setVisible(false); } else if (which == 1) { // Klaymen entering from the left - insertKlayman(0, 447); + insertKlaymen(0, 447); setMessageList(0x004B65D0); _sprite1->setVisible(false); } else if (which == 2) { // Klaymen entering from the right - insertKlayman(660, 447); + insertKlaymen(660, 447); setMessageList(0x004B65D8); _sprite1->setVisible(false); } else { // Klaymen entering from the back - insertKlayman(290, 413); + insertKlaymen(290, 413); setMessageList(0x004B65E8); _sprite1->setVisible(false); } if (getGlobalVar(V_PROJECTOR_LOCATION) == 2) { - _asProjector = insertSprite(this, _klayman, _asPipe); + _asProjector = insertSprite(this, _klaymen, _asPipe); addCollisionSprite(_asProjector); if (getGlobalVar(V_PROJECTOR_SLOT) == 6) { - sendEntityMessage(_klayman, 0x1014, _asProjector); - _klayman->setX(_asProjector->getX() + 100); - _klayman->updateBounds(); + sendEntityMessage(_klaymen, 0x1014, _asProjector); + _klaymen->setX(_asProjector->getX() + 100); + _klaymen->updateBounds(); setMessageList(0x004B6670); } else if (getGlobalVar(V_PROJECTOR_SLOT) == 0) { - sendEntityMessage(_klayman, 0x1014, _asProjector); - _klayman->setX(_asProjector->getX() - 100); - _klayman->updateBounds(); + sendEntityMessage(_klaymen, 0x1014, _asProjector); + _klaymen->setX(_asProjector->getX() - 100); + _klaymen->updateBounds(); setMessageList(0x004B6670); } _asProjector->setClipRect(_sprite3->getDrawRect().x, _sprite2->getDrawRect().y, 640, 480); } - _klayman->setClipRect(_sprite3->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(_sprite3->getDrawRect().x, 0, 640, 480); if (which == 0 && _asProjector) sendMessage(_asProjector, 0x482B, 0); - _asBackDoor = insertSprite(_klayman, which == 0); + _asBackDoor = insertSprite(_klaymen, which == 0); } @@ -716,9 +716,9 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x02144CB1) - sendEntityMessage(_klayman, 0x1014, _ssFloorButton); + sendEntityMessage(_klaymen, 0x1014, _ssFloorButton); else if (param.asInteger() == 0x402064D8) - sendEntityMessage(_klayman, 0x1014, _ssButton); + sendEntityMessage(_klaymen, 0x1014, _ssButton); else if (param.asInteger() == 0x01C66840) { if (sendMessage(_asBackDoor, 0x2001, 0) != 0) setMessageList(0x004B6690); @@ -747,8 +747,8 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asProjector) { - if (sendMessage(_asProjector, 0x480C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) { - sendEntityMessage(_klayman, 0x1014, _asProjector); + if (sendMessage(_asProjector, 0x480C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) { + sendEntityMessage(_klaymen, 0x1014, _asProjector); setMessageList2(0x004B6658); } else setMessageList2(0x004B65F0); @@ -863,19 +863,19 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(377, 391); + insertKlaymen(377, 391); setMessageList(0x004B0B48); if (!getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) _asPuzzleBox = insertSprite(this, 0); } else if (which == 1) { // Klaymen entering from the left - insertKlayman(42, 391); + insertKlaymen(42, 391); setMessageList(0x004B0B50); } else if (which == 2) { // Klaymen returning from the puzzle box - insertKlayman(377, 391); + insertKlaymen(377, 391); setMessageList(0x004B0B60); - _klayman->setDoDeltaX(1); + _klaymen->setDoDeltaX(1); if (getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) { _asPuzzleBox = insertSprite(this, 1); clearRectList(); @@ -885,7 +885,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which) _asPuzzleBox = insertSprite(this, 0); } else { // Klaymen entering from the right - insertKlayman(513, 391); + insertKlaymen(513, 391); setMessageList(0x004B0B58); if (!getGlobalVar(V_MOUSE_PUZZLE_SOLVED)) { _asPuzzleBox = insertSprite(this, 2); @@ -897,23 +897,23 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which) _asPuzzleBox->setClipRect(0, 0, 640, _ssBridgePart3->getDrawRect().y2()); if (getGlobalVar(V_PROJECTOR_LOCATION) == 1) { - _asProjector = insertSprite(this, _klayman, (Sprite*)NULL); + _asProjector = insertSprite(this, _klaymen, (Sprite*)NULL); addCollisionSprite(_asProjector); if (getGlobalVar(V_PROJECTOR_SLOT) == 4) { - sendEntityMessage(_klayman, 0x1014, _asProjector); - _klayman->setX(_asProjector->getX() + 100); - _klayman->updateBounds(); + sendEntityMessage(_klaymen, 0x1014, _asProjector); + _klaymen->setX(_asProjector->getX() + 100); + _klaymen->updateBounds(); setMessageList(0x004B0BD0); } else if (getGlobalVar(V_PROJECTOR_SLOT) == 0) { - sendEntityMessage(_klayman, 0x1014, _asProjector); - _klayman->setX(_asProjector->getX() - 100); - _klayman->updateBounds(); + sendEntityMessage(_klaymen, 0x1014, _asProjector); + _klaymen->setX(_asProjector->getX() - 100); + _klaymen->updateBounds(); setMessageList(0x004B0BD0); } _asProjector->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x, _ssBridgePart3->getDrawRect().y2()); } - _klayman->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x2(), _ssBridgePart3->getDrawRect().y2()); + _klaymen->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x2(), _ssBridgePart3->getDrawRect().y2()); } @@ -929,7 +929,7 @@ void Scene1402::upShaking() { Scene::update(); if (_asPuzzleBox) _asPuzzleBox->setClipRect(0, 0, 640, _ssBridgePart3->getDrawRect().y2()); - _klayman->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x2(), _ssBridgePart3->getDrawRect().y2()); + _klaymen->setClipRect(_ssBridgePart1->getDrawRect().x, 0, _ssBridgePart2->getDrawRect().x2(), _ssBridgePart3->getDrawRect().y2()); } uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -941,7 +941,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit leaveScene(0); else { clearRectList(); - _klayman->setVisible(false); + _klaymen->setVisible(false); showMouse(false); sendMessage(_asPuzzleBox, 0x2002, 0); startShaking(); @@ -968,8 +968,8 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asProjector) { - if (sendMessage(_asProjector, 0x408C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) { - sendEntityMessage(_klayman, 0x1014, _asProjector); + if (sendMessage(_asProjector, 0x408C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) { + sendEntityMessage(_klaymen, 0x1014, _asProjector); setMessageList2(0x004B0BB8); } else setMessageList2(0x004B0B68); @@ -1300,22 +1300,22 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(380, 463); + insertKlaymen(380, 463); setMessageList(0x004B1F18); } else { // Klaymen entering from the right - insertKlayman(640, 463); + insertKlaymen(640, 463); setMessageList(0x004B1F20); } - _klayman->setRepl(64, 0); + _klaymen->setRepl(64, 0); if (getGlobalVar(V_PROJECTOR_LOCATION) == 4) { - _asProjector = insertSprite(this, _klayman, (Sprite*)NULL); + _asProjector = insertSprite(this, _klaymen, (Sprite*)NULL); addCollisionSprite(_asProjector); if (getGlobalVar(V_PROJECTOR_SLOT) == 4) { - sendEntityMessage(_klayman, 0x1014, _asProjector); - _klayman->setX(_asProjector->getX() + 100); - _klayman->updateBounds(); + sendEntityMessage(_klaymen, 0x1014, _asProjector); + _klaymen->setX(_asProjector->getX() + 100); + _klaymen->updateBounds(); setMessageList(0x004B1F70); } _asProjector->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2()); @@ -1332,7 +1332,7 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit setRectList(0x004B2008); _isProjecting = true; } else if (param.asInteger() == 0x08821382) { - sendEntityMessage(_klayman, 0x1014, _asProjector); + sendEntityMessage(_klaymen, 0x1014, _asProjector); setRectList(0x004B1FF8); _isProjecting = false; } @@ -1359,10 +1359,10 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit if (_isProjecting) setMessageList2(0x004B1FA8); else if (param.asInteger() == 1) { - sendEntityMessage(_klayman, 0x1014, _asProjector); + sendEntityMessage(_klaymen, 0x1014, _asProjector); setMessageList2(0x004B1F88); - } else if (sendMessage(_asProjector, 0x480C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) { - sendEntityMessage(_klayman, 0x1014, _asProjector); + } else if (sendMessage(_asProjector, 0x480C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) { + sendEntityMessage(_klaymen, 0x1014, _asProjector); setMessageList2(0x004B1F58); } else setMessageList2(0x004B1F28); @@ -1370,7 +1370,7 @@ uint32 Scene1403::handleMessage(int messageNum, const MessageParam ¶m, Entit if (_isProjecting) setMessageList2(0x004B1FA8); else if (_messageListStatus != 2) { - sendEntityMessage(_klayman, 0x1014, sender); + sendEntityMessage(_klaymen, 0x1014, sender); setMessageList2(0x004B1FB8); } } @@ -1406,45 +1406,45 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(376, 406); + insertKlaymen(376, 406); setMessageList(0x004B8C28); } else if (which == 1) { // Klaymen returning from the tiles puzzle - insertKlayman(376, 406); + insertKlaymen(376, 406); setMessageList(0x004B8C30); } else if (which == 2) { // Klaymen returning from the diskplayer - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { - insertKlayman(347, 406); - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) { + insertKlaymen(347, 406); + _klaymen->setDoDeltaX(1); } else { - insertKlayman(187, 406); + insertKlaymen(187, 406); } setMessageList(0x004B8D28); } else { // Klaymen entering from the left - insertKlayman(30, 406); + insertKlaymen(30, 406); setMessageList(0x004B8C38); } if (getGlobalVar(V_PROJECTOR_LOCATION) == 3) { - _asProjector = insertSprite(this, _klayman, (Sprite*)NULL); + _asProjector = insertSprite(this, _klaymen, (Sprite*)NULL); addCollisionSprite(_asProjector); if (getGlobalVar(V_PROJECTOR_SLOT) == 0) { - sendEntityMessage(_klayman, 0x1014, _asProjector); - _klayman->setX(_asProjector->getX() - 100); - _klayman->updateBounds(); + sendEntityMessage(_klaymen, 0x1014, _asProjector); + _klaymen->setX(_asProjector->getX() - 100); + _klaymen->updateBounds(); setMessageList(0x004B8CB8); } _asProjector->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); } - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); } Scene1404::~Scene1404() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1463,16 +1463,16 @@ uint32 Scene1404::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asProjector) { - if (sendMessage(_asProjector, 0x480C, _klayman->getX() > _asProjector->getX() ? 1 : 0) != 0) { - sendEntityMessage(_klayman, 0x1014, _asProjector); + if (sendMessage(_asProjector, 0x480C, _klaymen->getX() > _asProjector->getX() ? 1 : 0) != 0) { + sendEntityMessage(_klaymen, 0x1014, _asProjector); setMessageList2(0x004B8CA0); } else setMessageList2(0x004B8C40); } else if (sender == _asTape && _messageListStatus != 2) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004B8CD0); } else if (sender == _asKey && _messageListStatus != 2) { - sendEntityMessage(_klayman, 0x1014, _asKey); + sendEntityMessage(_klaymen, 0x1014, _asKey); setMessageList(0x004B8D18); } break; diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h index ada3c66009..14857062c1 100644 --- a/engines/neverhood/module1400.h +++ b/engines/neverhood/module1400.h @@ -78,9 +78,9 @@ protected: class AsScene1401BackDoor : public AnimatedSprite { public: - AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klayman, bool isOpen); + AsScene1401BackDoor(NeverhoodEngine *vm, Sprite *klaymen, bool isOpen); protected: - Sprite *_klayman; + Sprite *_klaymen; int _countdown; bool _isOpen; void update(); @@ -101,11 +101,11 @@ struct AsCommonProjectorItem { class AsCommonProjector : public AnimatedSprite { public: - AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klayman, Sprite *asPipe); + AsCommonProjector(NeverhoodEngine *vm, Scene *parentScene, Sprite *klaymen, Sprite *asPipe); virtual ~AsCommonProjector(); protected: Scene *_parentScene; - Sprite *_klayman; + Sprite *_klaymen; Sprite *_asPipe; const AsCommonProjectorItem *_asProjectorItem; int16 _beforeMoveX; diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp index 54f715a0c5..bb6874ee03 100644 --- a/engines/neverhood/module1600.cpp +++ b/engines/neverhood/module1600.cpp @@ -1024,16 +1024,16 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which) else { // Klaymen is standing around setRectList(0x004B47D0); - insertKlayman(380, 438); - _kmScene1608 = _klayman; - _klaymanInCar = false; + insertKlaymen(380, 438); + _kmScene1608 = _klaymen; + _klaymenInCar = false; _sprite1 = insertStaticSprite(0x7D0404E8, 1100); setMessageList(0x004B46A8); setBackground(0x10080E01); setPalette(0x10080E01); _asTape = insertSprite(this, 13, 1100, 412, 443, 0x9148A011); addCollisionSprite(_asTape); - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); SetUpdateHandler(&Scene1608::upLowerFloor); insertScreenMouse(0x80E05108); insertStaticSprite(0x4B18F868, 1200); @@ -1042,9 +1042,9 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which) // Klaymen entering from the left _vm->gameState().which = 0; setRectList(0x004B47D0); - insertKlayman(0, 438); - _kmScene1608 = _klayman; - _klaymanInCar = false; + insertKlaymen(0, 438); + _kmScene1608 = _klaymen; + _klaymenInCar = false; setMessageList(0x004B46B0); setBackground(0x10080E01); setPalette(0x10080E01); @@ -1052,7 +1052,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which) addCollisionSprite(_asTape); insertScreenMouse(0x80E05108); _sprite1 = insertStaticSprite(0x7D0404E8, 1100); - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480); SetUpdateHandler(&Scene1608::upLowerFloor); insertStaticSprite(0x4B18F868, 1200); } else if (which == 2) { @@ -1069,12 +1069,12 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which) _asIdleCarLower = insertSprite(375, 227); _asIdleCarFull = insertSprite(375, 227); _asCar->setVisible(false); - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { - insertKlayman(373, 220); - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) { + insertKlaymen(373, 220); + _klaymen->setDoDeltaX(1); } else - insertKlayman(283, 220); - _kmScene1608 = _klayman; + insertKlaymen(283, 220); + _kmScene1608 = _klaymen; setMessageList(0x004B47A8); SetMessageHandler(&Scene1608::hmUpperFloor); SetUpdateHandler(&Scene1608::upUpperFloor); @@ -1085,14 +1085,14 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which) _clipRect3.set(_sprite2->getDrawRect().x, _sprite3->getDrawRect().y, 640, _sprite2->getDrawRect().y2()); _clipRect2 = _clipRect1; _clipRect2.y2 = 215; - _klayman->setClipRect(_clipRect1); + _klaymen->setClipRect(_clipRect1); _asCar->setClipRect(_clipRect1); _asIdleCarLower->setClipRect(_clipRect1); _asIdleCarFull->setClipRect(_clipRect1); _asTape = insertSprite(this, 13, 1100, 412, 443, 0x9148A011); addCollisionSprite(_asTape); insertSprite(_asCar)->setClipRect(_clipRect1); - _klaymanInCar = false; + _klaymenInCar = false; _carClipFlag = false; _carStatus = 0; setRectList(0x004B4810); @@ -1134,7 +1134,7 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which) _asTape = insertSprite(this, 13, 1100, 412, 443, 0x9148A011); // ... addCollisionSprite(_asTape); insertSprite(_asCar)->setClipRect(_clipRect1); - _klaymanInCar = true; + _klaymenInCar = true; _carClipFlag = true; _carStatus = 0; } @@ -1144,8 +1144,8 @@ Scene1608::Scene1608(NeverhoodEngine *vm, Module *parentModule, int which) } Scene1608::~Scene1608() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _kmScene1608->isDoDeltaX() ? 1 : 0); - if (_klaymanInCar) + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _kmScene1608->isDoDeltaX() ? 1 : 0); + if (_klaymenInCar) delete _kmScene1608; else delete _asCar; @@ -1160,10 +1160,10 @@ void Scene1608::upLowerFloor() { void Scene1608::upUpperFloor() { Scene::update(); if (_carStatus == 1) { - removeSurface(_klayman->getSurface()); - removeEntity(_klayman); + removeSurface(_klaymen->getSurface()); + removeEntity(_klaymen); addSprite(_asCar); - _klaymanInCar = true; + _klaymenInCar = true; clearRectList(); SetUpdateHandler(&Scene1608::upCarAtHome); SetMessageHandler(&Scene1608::hmCarAtHome); @@ -1172,10 +1172,10 @@ void Scene1608::upUpperFloor() { _asCar->setVisible(true); sendMessage(_asCar, 0x2009, 0); _asCar->handleUpdate(); - _klayman = NULL; + _klaymen = NULL; _carStatus = 0; } - updateKlaymanCliprect(); + updateKlaymenCliprect(); } void Scene1608::upCarAtHome() { @@ -1191,17 +1191,17 @@ void Scene1608::upCarAtHome() { } _mouseClicked = false; } - updateKlaymanCliprect(); + updateKlaymenCliprect(); } void Scene1608::upGettingOutOfCar() { Scene::update(); if (_carStatus == 2) { - _klayman = _kmScene1608; + _klaymen = _kmScene1608; removeSurface(_asCar->getSurface()); removeEntity(_asCar); - addSprite(_klayman); - _klaymanInCar = false; + addSprite(_klaymen); + _klaymenInCar = false; SetMessageHandler(&Scene1608::hmUpperFloor); SetUpdateHandler(&Scene1608::upUpperFloor); setRectList(0x004B4810); @@ -1210,10 +1210,10 @@ void Scene1608::upGettingOutOfCar() { _asCar->setVisible(false); setMessageList(0x004B4748); processMessageList(); - _klayman->handleUpdate(); + _klaymen->handleUpdate(); _carStatus = 0; } - updateKlaymanCliprect(); + updateKlaymenCliprect(); } void Scene1608::upRidingCar() { @@ -1241,7 +1241,7 @@ uint32 Scene1608::hmLowerFloor(int messageNum, const MessageParam ¶m, Entity case 0x100D: if (param.asInteger() == 0x20250B1A) { clearRectList(); - _klayman->setVisible(false); + _klaymen->setVisible(false); showMouse(false); _sprite1->setVisible(false); //sendMessage(_asDoor, 0x4809, 0); // Play sound? @@ -1313,7 +1313,7 @@ uint32 Scene1608::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity return 0; } -void Scene1608::updateKlaymanCliprect() { +void Scene1608::updateKlaymenCliprect() { if (_kmScene1608->getX() <= 375) _kmScene1608->setClipRect(_clipRect1); else diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h index 6bffb2d9ed..0743767244 100644 --- a/engines/neverhood/module1600.h +++ b/engines/neverhood/module1600.h @@ -140,13 +140,13 @@ protected: Sprite *_sprite2; Sprite *_sprite3; Sprite *_asTape; - Klayman *_kmScene1608; + Klaymen *_kmScene1608; NRect _clipRect1; NRect _clipRect2; NRect _clipRect3; int _carStatus; bool _carClipFlag; - bool _klaymanInCar; + bool _klaymenInCar; int _countdown1; NPointArray *_roomPathPoints; void upLowerFloor(); @@ -158,7 +158,7 @@ protected: uint32 hmUpperFloor(int messageNum, const MessageParam ¶m, Entity *sender); uint32 hmRidingCar(int messageNum, const MessageParam ¶m, Entity *sender); uint32 hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender); - void updateKlaymanCliprect(); + void updateKlaymenCliprect(); }; class Scene1609 : public Scene { diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp index 39bc49ba45..183b0b8e75 100644 --- a/engines/neverhood/module1700.cpp +++ b/engines/neverhood/module1700.cpp @@ -204,50 +204,50 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(231, 434); + insertKlaymen(231, 434); setMessageList(0x004B69E8); sendMessage(this, 0x2000, 0); - _klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480); } else if (which == 1) { // Klaymen teleporting in - insertKlayman(431, 434); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(431, 434); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B6A08, false); sendMessage(this, 0x2000, 1); - _klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480); } else if (which == 2) { // Klaymen teleporting out - insertKlayman(431, 434); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(431, 434); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B6AA0, false); sendMessage(this, 0x2000, 1); - _klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480); } else if (which == 3) { // Klaymen returning from teleporter console - insertKlayman(431, 434); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(431, 434); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B6A18, false); sendMessage(this, 0x2000, 1); - _klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480); } else { // Klaymen falling through the hole - insertKlayman(231, 74); - sendMessage(_klayman, 0x2000, 0); + insertKlaymen(231, 74); + sendMessage(_klaymen, 0x2000, 0); setMessageList(0x004B69F0); sendMessage(this, 0x2000, 0); tempSprite = insertStaticSprite(0x30303822, 1100); - _klayman->setClipRect(0, tempSprite->getDrawRect().y, _sprite->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, tempSprite->getDrawRect().y, _sprite->getDrawRect().x2(), 480); } } void Scene1705::update() { Scene::update(); - if (_klayman->getX() < 224 && _paletteArea != 0) { + if (_klaymen->getX() < 224 && _paletteArea != 0) { _palette->addBasePalette(0xF2210C15, 0, 64, 0); _palette->startFadeToPalette(12); _paletteArea = 0; - } else if (_klayman->getX() >= 224 && _paletteArea == 0) { + } else if (_klaymen->getX() >= 224 && _paletteArea == 0) { _palette->addBasePalette(0x91D3A391, 0, 64, 0); _palette->startFadeToPalette(12); _paletteArea = 1; @@ -260,15 +260,15 @@ uint32 Scene1705::handleMessage(int messageNum, const MessageParam ¶m, Entit case 0x2000: if (param.asInteger()) { setRectList(0x004B6B40); - _klayman->setKlaymanIdleTable3(); + _klaymen->setKlaymenIdleTable3(); } else { setRectList(0x004B6B30); - _klayman->setKlaymanIdleTable1(); + _klaymen->setKlaymenIdleTable1(); } break; case 0x4826: - if (sender == _ssTape && _klayman->getX() <= 318) { - sendEntityMessage(_klayman, 0x1014, sender); + if (sender == _ssTape && _klaymen->getX() <= 318) { + sendEntityMessage(_klaymen, 0x1014, sender); setMessageList(0x004B6AC0); } break; diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp index dc5f94270c..99b51295b7 100644 --- a/engines/neverhood/module1800.cpp +++ b/engines/neverhood/module1800.cpp @@ -161,7 +161,7 @@ void Module1800::updateScene() { leaveModule(3); break; case 8: - // NOTE: After Klayman jumped into the hole and died... + // NOTE: After Klaymen jumped into the hole and died... leaveModule(1); break; case 1009: diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp index 629cfd9b39..31bf05b6ee 100644 --- a/engines/neverhood/module1900.cpp +++ b/engines/neverhood/module1900.cpp @@ -109,20 +109,20 @@ Scene1901::Scene1901(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(120, 380); + insertKlaymen(120, 380); setMessageList(0x004B3408); } else if (which == 1) { // Klaymen returning from the puzzle - insertKlayman(372, 380); + insertKlaymen(372, 380); setMessageList(0x004B3410); } else { // Klaymen entering from the left - insertKlayman(0, 380); + insertKlaymen(0, 380); setMessageList(0x004B3400); } tempSprite = insertStaticSprite(0x4830A402, 1100); - _klayman->setClipRect(tempSprite->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(tempSprite->getDrawRect().x, 0, 640, 480); } diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp index f08b620030..71bcdc7e58 100644 --- a/engines/neverhood/module2000.cpp +++ b/engines/neverhood/module2000.cpp @@ -109,36 +109,36 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(300, 345); + insertKlaymen(300, 345); setMessageList(0x004B3538); sendMessage(this, 0x2000, 0); } else if (which == 1) { // Klaymen teleporting in - insertKlayman(116, 345); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(116, 345); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B3540, false); sendMessage(this, 0x2000, 1); } else if (which == 2) { // Klaymen teleporting out - insertKlayman(116, 345); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(116, 345); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B35F0, false); sendMessage(this, 0x2000, 1); } else if (which == 3) { // Klaymen returning from teleporter console - insertKlayman(116, 345); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(116, 345); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B3550, false); sendMessage(this, 0x2000, 1); } else { // Klaymen standing around - insertKlayman(390, 345); + insertKlaymen(390, 345); setMessageList(0x004B3530); sendMessage(this, 0x2000, 0); - _klayman->setDoDeltaX(1); + _klaymen->setDoDeltaX(1); } - _klayman->setClipRect(tempSprite->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(tempSprite->getDrawRect().x, 0, 640, 480); } @@ -148,10 +148,10 @@ uint32 Scene2001::handleMessage(int messageNum, const MessageParam ¶m, Entit case 0x2000: if (param.asInteger()) { setRectList(0x004B3680); - _klayman->setKlaymanIdleTable3(); + _klaymen->setKlaymenIdleTable3(); } else { setRectList(0x004B3670); - _klayman->setKlaymanIdleTable1(); + _klaymen->setKlaymenIdleTable1(); } } return 0; diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp index 5b5f5af2f3..cd7a3d5e24 100644 --- a/engines/neverhood/module2100.cpp +++ b/engines/neverhood/module2100.cpp @@ -127,8 +127,8 @@ void AsScene2101Door::stCloseDoorDone() { setVisible(false); } -AsScene2101HitByDoorEffect::AsScene2101HitByDoorEffect(NeverhoodEngine *vm, Sprite *klayman) - : AnimatedSprite(vm, 1400), _klayman(klayman) { +AsScene2101HitByDoorEffect::AsScene2101HitByDoorEffect(NeverhoodEngine *vm, Sprite *klaymen) + : AnimatedSprite(vm, 1400), _klaymen(klaymen) { SetUpdateHandler(&AnimatedSprite::update); SetMessageHandler(&AsScene2101HitByDoorEffect::handleMessage); @@ -140,8 +140,8 @@ uint32 AsScene2101HitByDoorEffect::handleMessage(int messageNum, const MessagePa uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x2001: - _x = _klayman->getX(); - _y = _klayman->getY() - 132; + _x = _klaymen->getX(); + _y = _klaymen->getY() - 132; startAnimation(0x0422255A, 0, -1); setVisible(true); break; @@ -214,7 +214,7 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which) addCollisionSprite(_asTape2); if (which < 0) { - insertKlayman(380, 438); + insertKlaymen(380, 438); setMessageList(0x004B8E48); sendMessage(this, 0x2000, 0); _asDoor = insertSprite(false); @@ -222,7 +222,7 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which) _countdown1 = 0; } else if (which == 1) { // Klaymen entering from the right - insertKlayman(640, 438); + insertKlaymen(640, 438); setMessageList(0x004B8E50); sendMessage(this, 0x2000, 0); _asDoor = insertSprite(true); @@ -230,8 +230,8 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which) _countdown1 = 48; } else if (which == 2) { // Klaymen teleporting out - insertKlayman(115, 438); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(115, 438); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B8F58); sendMessage(this, 0x2000, 1); _asDoor = insertSprite(false); @@ -239,8 +239,8 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which) _countdown1 = 0; } else if (which == 3) { // Klaymen returning from the teleporter console - insertKlayman(115, 438); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(115, 438); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B8EB0); sendMessage(this, 0x2000, 1); _asDoor = insertSprite(false); @@ -248,8 +248,8 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which) _countdown1 = 0; } else { // Klaymen teleporting in - insertKlayman(115, 438); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(115, 438); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004B8EA0); sendMessage(this, 0x2000, 1); _asDoor = insertSprite(false); @@ -257,8 +257,8 @@ Scene2101::Scene2101(NeverhoodEngine *vm, Module *parentModule, int which) _countdown1 = 0; } - _asHitByDoorEffect = insertSprite(_klayman); - _klayman->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480); + _asHitByDoorEffect = insertSprite(_klaymen); + _klaymen->setClipRect(0, 0, tempSprite->getDrawRect().x2(), 480); } @@ -270,14 +270,14 @@ void Scene2101::update() { _doorStatus = 1; } } else { - if (_klayman->getX() > 575) + if (_klaymen->getX() > 575) _canAcceptInput = false; if (--_countdown1 == 0) { - if (_klayman->getX() < 480) { + if (_klaymen->getX() < 480) { sendMessage(_asDoor, 0x4809, 0); _doorStatus = 1; - } else if (_klayman->getX() >= 480 && _klayman->getX() <= 575) { - _klayman->setDoDeltaX(0); + } else if (_klaymen->getX() >= 480 && _klaymen->getX() <= 575) { + _klaymen->setDoDeltaX(0); setMessageList2(0x004B8F48); sendMessage(_asDoor, 0x4809, 0); sendMessage(_asHitByDoorEffect, 0x2001, 0); @@ -285,7 +285,7 @@ void Scene2101::update() { } } } - } else if (_doorStatus == 1 && _messageValue >= 0 && _klayman->getX() > 470 && !isMessageList2(0x004B8F48)) + } else if (_doorStatus == 1 && _messageValue >= 0 && _klaymen->getX() > 470 && !isMessageList2(0x004B8F48)) setMessageList2(0x004B8F50); Scene::update(); } @@ -295,7 +295,7 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x02144CB1) - sendEntityMessage(_klayman, 0x1014, _ssFloorButton); + sendEntityMessage(_klaymen, 0x1014, _ssFloorButton); else if (param.asInteger() == 0x21E64A00) { if (_doorStatus == 0) setMessageList(0x004B8E80); @@ -307,10 +307,10 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit case 0x2000: if (param.asInteger() != 0) { setRectList(0x004B9008); - _klayman->setKlaymanIdleTable3(); + _klaymen->setKlaymenIdleTable3(); } else { setRectList(0x004B8FF8); - _klayman->setKlaymanIdleTable1(); + _klaymen->setKlaymenIdleTable1(); } break; case 0x480B: @@ -322,10 +322,10 @@ uint32 Scene2101::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asTape1 || sender == _asTape2) { - if (_klayman->getX() >= 228 && _klayman->getX() <= 500) { - sendEntityMessage(_klayman, 0x1014, sender); + if (_klaymen->getX() >= 228 && _klaymen->getX() <= 500) { + sendEntityMessage(_klaymen, 0x1014, sender); setMessageList(0x004B8F78); - } else if (_klayman->getX() < 228) + } else if (_klaymen->getX() < 228) setMessageList2(0x004B8F00); } break; diff --git a/engines/neverhood/module2100.h b/engines/neverhood/module2100.h index 8ec12f774f..c2e7d09ff4 100644 --- a/engines/neverhood/module2100.h +++ b/engines/neverhood/module2100.h @@ -54,9 +54,9 @@ protected: class AsScene2101HitByDoorEffect : public AnimatedSprite { public: - AsScene2101HitByDoorEffect(NeverhoodEngine *vm, Sprite *klayman); + AsScene2101HitByDoorEffect(NeverhoodEngine *vm, Sprite *klaymen); protected: - Sprite *_klayman; + Sprite *_klaymen; uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); }; diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp index ebe0f81291..2e6549a230 100644 --- a/engines/neverhood/module2200.cpp +++ b/engines/neverhood/module2200.cpp @@ -457,8 +457,8 @@ AsScene2201CeilingFan::AsScene2201CeilingFan(NeverhoodEngine *vm) SetUpdateHandler(&AnimatedSprite::update); } -AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool isOpen) - : AnimatedSprite(vm, 1100), _klayman(klayman), _ssDoorLight(ssDoorLight), _countdown(0), _isOpen(isOpen) { +AsScene2201Door::AsScene2201Door(NeverhoodEngine *vm, Klaymen *klaymen, Sprite *ssDoorLight, bool isOpen) + : AnimatedSprite(vm, 1100), _klaymen(klaymen), _ssDoorLight(ssDoorLight), _countdown(0), _isOpen(isOpen) { _x = 408; _y = 290; @@ -578,29 +578,29 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(300, 427, _clipRects, 2); + insertKlaymen(300, 427, _clipRects, 2); setMessageList(0x004B8118); - _asDoor = insertSprite(_klayman, _ssDoorLight, false); + _asDoor = insertSprite(_klaymen, _ssDoorLight, false); } else if (which == 1) { // Klaymen entering from the back - insertKlayman(412, 393, _clipRects, 2); + insertKlaymen(412, 393, _clipRects, 2); setMessageList(0x004B8130); - _asDoor = insertSprite(_klayman, _ssDoorLight, false); + _asDoor = insertSprite(_klaymen, _ssDoorLight, false); } else if (which == 2) { // Klaymen returning from the puzzle - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { - insertKlayman(379, 427, _clipRects, 2); - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) { + insertKlaymen(379, 427, _clipRects, 2); + _klaymen->setDoDeltaX(1); } else - insertKlayman(261, 427, _clipRects, 2); + insertKlaymen(261, 427, _clipRects, 2); setMessageList(0x004B8178); - _asDoor = insertSprite(_klayman, _ssDoorLight, false); + _asDoor = insertSprite(_klaymen, _ssDoorLight, false); } else { // Klaymen entering from the left NPoint pt = _dataResource.getPoint(0x0304D8DC); - insertKlayman(pt.x, pt.y, _clipRects, 2); + insertKlaymen(pt.x, pt.y, _clipRects, 2); setMessageList(0x004B8120); - _asDoor = insertSprite(_klayman, _ssDoorLight, true); + _asDoor = insertSprite(_klaymen, _ssDoorLight, true); } insertSprite(); @@ -610,7 +610,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which) } Scene2201::~Scene2201() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); _vm->_soundMan->deleteSoundGroup(0x04106220); } @@ -627,7 +627,7 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x402064D8) - sendEntityMessage(_klayman, 0x1014, _ssDoorButton); + sendEntityMessage(_klaymen, 0x1014, _ssDoorButton); else if (param.asInteger() == 0x35803198) { if (sendMessage(_asDoor, 0x2000, 0)) setMessageList(0x004B81A0); @@ -653,7 +653,7 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asTape) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004B81C8); } break; @@ -1000,7 +1000,7 @@ AsCommonKey::AsCommonKey(NeverhoodEngine *vm, Scene *parentScene, int keyIndex, if (!getSubVar(VA_HAS_KEY, _keyIndex) && !getSubVar(VA_IS_KEY_INSERTED, _keyIndex)) { SetMessageHandler(&AsCommonKey::handleMessage); } else { - // If Klayman already has the key or it's already inserted then don't show it + // If Klaymen already has the key or it's already inserted then don't show it setVisible(false); SetMessageHandler(NULL); } @@ -1118,45 +1118,45 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(200, 427); + insertKlaymen(200, 427); setMessageList(0x004B8340); } else if (which == 1) { // Klaymen entering from the right - insertKlayman(640, 427); + insertKlaymen(640, 427); setMessageList(0x004B8350); } else if (which == 2) { // Klaymen returning from the displayer - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { - insertKlayman(362, 427); - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) { + insertKlaymen(362, 427); + _klaymen->setDoDeltaX(1); } else - insertKlayman(202, 427); + insertKlaymen(202, 427); setMessageList(0x004B8358); } else { // Klaymen entering from the left - insertKlayman(0, 427); + insertKlaymen(0, 427); setMessageList(0x004B8348); } if (getGlobalVar(V_LARGE_DOOR_NUMBER)) { _ssSmallLeftDoor->setVisible(false); - _klayman->setClipRect(_rightDoorClipRect); + _klaymen->setClipRect(_rightDoorClipRect); } else { _ssSmallRightDoor->setVisible(false); - _klayman->setClipRect(_leftDoorClipRect); + _klaymen->setClipRect(_leftDoorClipRect); } } Scene2203::~Scene2203() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Scene::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x2001: - sendEntityMessage(_klayman, 0x1014, sender); + sendEntityMessage(_klaymen, 0x1014, sender); if (sender == _asLeftDoor) setMessageList2(0x004B83B0); else @@ -1177,18 +1177,18 @@ uint32 Scene2203::handleMessage(int messageNum, const MessageParam ¶m, Entit case 0x4808: if (sender == _asLeftDoor) { _ssSmallLeftDoor->setVisible(true); - _klayman->setClipRect(_leftDoorClipRect); + _klaymen->setClipRect(_leftDoorClipRect); } else { _ssSmallRightDoor->setVisible(true); - _klayman->setClipRect(_rightDoorClipRect); + _klaymen->setClipRect(_rightDoorClipRect); } break; case 0x4826: if (sender == _asTape) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004B83E0); } else if (sender == _asKey) { - sendEntityMessage(_klayman, 0x1014, _asKey); + sendEntityMessage(_klaymen, 0x1014, _asKey); setMessageList(0x004B83F0); } break; @@ -1242,27 +1242,27 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(320, 417); + insertKlaymen(320, 417); setMessageList(0x004B0658); if (!getGlobalVar(V_LIGHTS_ON)) _palette->addPalette(0x68033B1C, 0, 65, 0); - _isKlaymanInLight = false; + _isKlaymenInLight = false; } else if (which == 1) { // Klaymen entering from the right - insertKlayman(640, 417); + insertKlaymen(640, 417); setMessageList(0x004B0648); if (!getGlobalVar(V_LIGHTS_ON)) _palette->addPalette(0x68033B1C, 0, 65, 0); - _isKlaymanInLight = false; + _isKlaymenInLight = false; } else { // Klaymen entering from the left - insertKlayman(0, 417); + insertKlaymen(0, 417); setMessageList(0x004B0640); - _isKlaymanInLight = true; + _isKlaymenInLight = true; } - _klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 640, 480); - _klayman->setSoundFlag(true); + _klaymen->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 640, 480); + _klaymen->setSoundFlag(true); } void Scene2205::update() { @@ -1280,22 +1280,22 @@ void Scene2205::update() { _ssLightSwitch->setFileHashes(0x2D339030, 0xDAC86E84); sendMessage(_ssDoorFrame, 0x2000, 0); changeMouseCursor(0xA0289D08); - _isKlaymanInLight = true; - if (_klayman->getX() > 85) { + _isKlaymenInLight = true; + if (_klaymen->getX() > 85) { _palette->addPalette(0x68033B1C, 0, 65, 0); - _isKlaymanInLight = false; + _isKlaymenInLight = false; } _isLightOn = false; } if (!getGlobalVar(V_LIGHTS_ON)) { - if (_isKlaymanInLight && _klayman->getX() > 85) { + if (_isKlaymenInLight && _klaymen->getX() > 85) { _palette->addBasePalette(0x68033B1C, 0, 65, 0); _palette->startFadeToPalette(12); - _isKlaymanInLight = false; - } else if (!_isKlaymanInLight && _klayman->getX() <= 85) { + _isKlaymenInLight = false; + } else if (!_isKlaymenInLight && _klaymen->getX() <= 85) { _palette->addBasePalette(0xD00A028D, 0, 65, 0); _palette->startFadeToPalette(12); - _isKlaymanInLight = true; + _isKlaymenInLight = true; } } } @@ -1309,7 +1309,7 @@ uint32 Scene2205::handleMessage(int messageNum, const MessageParam ¶m, Entit else if (param.asInteger() == 0x2841369C) setMessageList(0x004B0630); else if (param.asInteger() == 0x402064D8) - sendEntityMessage(_klayman, 0x1014, _ssLightSwitch); + sendEntityMessage(_klaymen, 0x1014, _ssLightSwitch); break; case 0x480B: setGlobalVar(V_LIGHTS_ON, getGlobalVar(V_LIGHTS_ON) ? 0 : 1); @@ -1495,38 +1495,38 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(200, 430); + insertKlaymen(200, 430); setMessageList(0x004B88A8); } else if (which == 1) { // Klaymen entering from the right - insertKlayman(640, 430); + insertKlaymen(640, 430); setMessageList(0x004B88B8); } else if (which == 2) { // Klaymen entering from the back - insertKlayman(205, 396); + insertKlaymen(205, 396); setMessageList(0x004B88C8); _palette->addPalette(getGlobalVar(V_LIGHTS_ON) ? 0xB103B604 : 0x0263D144, 0, 65, 0); - klaymanBehindSpikes(); + klaymenBehindSpikes(); playSound(0, 0x53B8284A); } else if (which == 3) { // Klaymen entering from reading a text column - insertKlayman(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)], 430); - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) - _klayman->setDoDeltaX(1); + insertKlaymen(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)], 430); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) + _klaymen->setDoDeltaX(1); setMessageList(0x004B8A70); } else { // Klaymen entering from the left - insertKlayman(0, 430); + insertKlaymen(0, 430); setMessageList(0x004B88B0); } - _klayman->setSoundFlag(true); - _klayman->setKlaymanIdleTable2(); + _klaymen->setSoundFlag(true); + _klaymen->setKlaymenIdleTable2(); } Scene2206::~Scene2206() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1536,7 +1536,7 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit if (param.asInteger() == 0x800C6694) readClickedColumn(); else if (param.asInteger() == 0x402064D8) - sendEntityMessage(_klayman, 0x1014, _ssButton); + sendEntityMessage(_klaymen, 0x1014, _ssButton); else if (param.asInteger() == 0x11C40840) { if (getGlobalVar(V_SPIKES_RETRACTED)) setMessageList(0x004B8948); @@ -1557,20 +1557,20 @@ uint32 Scene2206::handleMessage(int messageNum, const MessageParam ¶m, Entit } break; case 0x4826: - sendEntityMessage(_klayman, 0x1014, _ssTestTube); + sendEntityMessage(_klaymen, 0x1014, _ssTestTube); setMessageList(0x004B8988); break; case 0x482A: - klaymanBehindSpikes(); + klaymenBehindSpikes(); break; case 0x482B: - klaymanInFrontSpikes(); + klaymenInFrontSpikes(); break; } return messageResult; } -void Scene2206::klaymanInFrontSpikes() { +void Scene2206::klaymenInFrontSpikes() { if (getGlobalVar(V_LIGHTS_ON)) { _palette->addBasePalette(0x41983216, 0, 65, 0); _palette->startFadeToPalette(12); @@ -1579,10 +1579,10 @@ void Scene2206::klaymanInFrontSpikes() { setSurfacePriority(_sprite2->getSurface(), 300); setSurfacePriority(_sprite3->getSurface(), 100); setSurfacePriority(_asDoorSpikes->getSurface(), 200); - _klayman->setClipRect(0, 0, 640, 480); + _klaymen->setClipRect(0, 0, 640, 480); } -void Scene2206::klaymanBehindSpikes() { +void Scene2206::klaymenBehindSpikes() { if (!getGlobalVar(V_LIGHTS_ON)) { _palette->addBasePalette(0xB103B604, 0, 65, 0); _palette->startFadeToPalette(12); @@ -1591,7 +1591,7 @@ void Scene2206::klaymanBehindSpikes() { setSurfacePriority(_sprite2->getSurface(), 1300); setSurfacePriority(_sprite3->getSurface(), 1100); setSurfacePriority(_asDoorSpikes->getSurface(), 1200); - _klayman->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2()); + _klaymen->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2()); } void Scene2206::readClickedColumn() { @@ -1601,7 +1601,7 @@ void Scene2206::readClickedColumn() { setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 183) / 7); setGlobalVar(V_COLUMN_TEXT_NAME, calcHash("stLineagex")); setGlobalVar(V_COLUMN_BACK_NAME, 0); - if (ABS(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)] - _klayman->getX()) >= 144) + if (ABS(kScene2206XPositions[getGlobalVar(V_CLICKED_COLUMN_INDEX)] - _klaymen->getX()) >= 144) setMessageList2(kScene2206MessageIds1[getGlobalVar(V_CLICKED_COLUMN_INDEX)]); else setMessageList2(kScene2206MessageIds2[getGlobalVar(V_CLICKED_COLUMN_INDEX)]); @@ -1926,7 +1926,7 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i } Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule) - : Scene(vm, parentModule), _klaymanAtElevator(true), _elevatorSurfacePriority(0) { + : Scene(vm, parentModule), _klaymenAtElevator(true), _elevatorSurfacePriority(0) { _vm->gameModule()->initCannonSymbolsPuzzle(); @@ -1936,8 +1936,8 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule) SetMessageHandler(&Scene2207::handleMessage); SetUpdateHandler(&Scene2207::update); - insertKlayman(0, 0); - _klayman->setRepl(64, 0); + insertKlaymen(0, 0); + _klaymen->setRepl(64, 0); setMessageList(0x004B38E8); _asElevator = insertSprite(this); @@ -1958,7 +1958,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule) _asWallCannonAnimation->setVisible(false); _ssButton = insertSprite(this, 0x2C4061C4, 100, 0); _asLever->setClipRect(0, 0, _ssMaskPart3->getDrawRect().x2(), 480); - _klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2()); + _klaymen->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2()); _asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2()); } else { setGlobalVar(V_SEEN_SYMBOLS_NO_LIGHT, 1); @@ -1974,15 +1974,15 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule) _asWallRobotAnimation = NULL; _asWallCannonAnimation = NULL; _ssButton = NULL; - _klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480); + _klaymen->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480); _asElevator->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, 480); } _dataResource.load(0x00524846); setRectList(0x004B38B8); - sendEntityMessage(_klayman, 0x1014, _asElevator); - sendMessage(_klayman, 0x2001, 0); + sendEntityMessage(_klaymen, 0x1014, _asElevator); + sendMessage(_klaymen, 0x2001, 0); sendMessage(_asElevator, 0x2000, 480); loadSound(1, calcHash("fxFogHornSoft")); @@ -1995,8 +1995,8 @@ void Scene2207::update() { setSurfacePriority(_asElevator->getSurface(), _elevatorSurfacePriority); _elevatorSurfacePriority = 0; } - if (_klayman->getY() == 423) - _klaymanAtElevator = _klayman->getX() > 459 && _klayman->getX() < 525; + if (_klaymen->getY() == 423) + _klaymenAtElevator = _klaymen->getX() > 459 && _klaymen->getX() < 525; } uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -2004,33 +2004,33 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x0014F275) { - if (_klaymanAtElevator) { + if (_klaymenAtElevator) { sendMessage(_asElevator, 0x2000, _mouseClickPos.y); - sendEntityMessage(_klayman, 0x1014, _asElevator); - sendMessage(_klayman, 0x2001, 0); + sendEntityMessage(_klaymen, 0x1014, _asElevator); + sendMessage(_klaymen, 0x2001, 0); } else cancelMessageList(); } else if (param.asInteger() == 0x34569073) { - if (_klaymanAtElevator) { - _isKlaymanBusy = true; + if (_klaymenAtElevator) { + _isKlaymenBusy = true; sendMessage(_asElevator, 0x2000, 0); - sendEntityMessage(_klayman, 0x1014, _asElevator); - sendMessage(_klayman, 0x2001, 0); + sendEntityMessage(_klaymen, 0x1014, _asElevator); + sendMessage(_klaymen, 0x2001, 0); } else cancelMessageList(); } else if (param.asInteger() == 0x4054C877) { - if (_klaymanAtElevator) { + if (_klaymenAtElevator) { sendMessage(_asElevator, 0x2000, 480); - sendEntityMessage(_klayman, 0x1014, _asElevator); - sendMessage(_klayman, 0x2001, 0); + sendEntityMessage(_klaymen, 0x1014, _asElevator); + sendMessage(_klaymen, 0x2001, 0); } else cancelMessageList(); } else if (param.asInteger() == 0x0CBC6211) { - sendEntityMessage(_klayman, 0x1014, _asElevator); - sendMessage(_klayman, 0x2001, 0); + sendEntityMessage(_klaymen, 0x1014, _asElevator); + sendMessage(_klaymen, 0x2001, 0); setRectList(0x004B38B8); } else if (param.asInteger() == 0x402064D8) - sendEntityMessage(_klayman, 0x1014, _ssButton); + sendEntityMessage(_klaymen, 0x1014, _ssButton); else if (param.asInteger() == 0x231DA241) { if (_ssButton) setMessageList(0x004B38F0); @@ -2042,7 +2042,7 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit _elevatorSurfacePriority = param.asInteger(); break; case 0x2003: - _isKlaymanBusy = false; + _isKlaymenBusy = false; break; case 0x4807: sendMessage(_asWallRobotAnimation, 0x2007, 0); @@ -2067,15 +2067,15 @@ uint32 Scene2207::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asTape) { - if (_klayman->getY() == 423) { - sendEntityMessage(_klayman, 0x1014, _asTape); + if (_klaymen->getY() == 423) { + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004B3958); } - } else if (_klaymanAtElevator) { + } else if (_klaymenAtElevator) { SetMessageHandler(&Scene2207::handleMessage2); sendMessage(_asElevator, 0x2000, 347); - sendEntityMessage(_klayman, 0x1014, _asElevator); - sendMessage(_klayman, 0x2001, 0); + sendEntityMessage(_klaymen, 0x1014, _asElevator); + sendMessage(_klaymen, 0x2001, 0); } break; } @@ -2090,8 +2090,8 @@ uint32 Scene2207::handleMessage2(int messageNum, const MessageParam ¶m, Enti break; case 0x2004: SetMessageHandler(&Scene2207::handleMessage); - sendMessage(_klayman, 0x2005, 0); - sendEntityMessage(_klayman, 0x1014, _asLever); + sendMessage(_klaymen, 0x2005, 0); + sendEntityMessage(_klaymen, 0x1014, _asLever); setMessageList(0x004B3920); setRectList(0x004B3948); break; @@ -2273,7 +2273,7 @@ static const uint32 kScene2242MessageListIds1[] = { }; Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which) - : Scene(vm, parentModule), _isKlaymanInLight(false) { + : Scene(vm, parentModule), _isKlaymenInLight(false) { SetMessageHandler(&Scene2242::handleMessage); SetUpdateHandler(&Scene2242::update); @@ -2298,42 +2298,42 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(200, 430); + insertKlaymen(200, 430); setMessageList(0x004B3C18); } else if (which == 1) { // Klaymen entering from looking through the window - insertKlayman(530, 430); + insertKlaymen(530, 430); setMessageList(0x004B3D60); } else if (which == 2) { // Klaymen returning from reading a text column - insertKlayman(kScene2242XPositions[!getGlobalVar(V_CLICKED_COLUMN_INDEX) ? 0 : 1], 430); + insertKlaymen(kScene2242XPositions[!getGlobalVar(V_CLICKED_COLUMN_INDEX) ? 0 : 1], 430); setMessageList(0x004B3D48); - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) + _klaymen->setDoDeltaX(1); } else { // Klaymen entering from the left - insertKlayman(0, 430); + insertKlaymen(0, 430); setMessageList(0x004B3C20); } - _klayman->setSoundFlag(true); + _klaymen->setSoundFlag(true); } Scene2242::~Scene2242() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } void Scene2242::update() { if (!getGlobalVar(V_LIGHTS_ON)) { - if (_isKlaymanInLight && _klayman->getX() < 440) { + if (_isKlaymenInLight && _klaymen->getX() < 440) { _palette->addBasePalette(0x68033B1C, 0, 65, 0); _palette->startFadeToPalette(12); - _isKlaymanInLight = false; - } else if (!_isKlaymanInLight && _klayman->getX() >= 440) { + _isKlaymenInLight = false; + } else if (!_isKlaymenInLight && _klaymen->getX() >= 440) { _palette->addBasePalette(0x25848E24, 0, 65, 0); _palette->startFadeToPalette(12); - _isKlaymanInLight = true; + _isKlaymenInLight = true; } } Scene::update(); @@ -2348,7 +2348,7 @@ uint32 Scene2242::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asTape) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004B3D50); } break; @@ -2370,13 +2370,13 @@ void Scene2242::readClickedColumn() { index = 1; } setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7); - if (ABS(_klayman->getX() - kScene2242XPositions[index]) < 133) + if (ABS(_klaymen->getX() - kScene2242XPositions[index]) < 133) setMessageList2(kScene2242MessageListIds1[index]); else setMessageList2(kScene2242MessageListIds2[index]); } -static const int16 kHallOfRecordsKlaymanXPos[] = { +static const int16 kHallOfRecordsKlaymenXPos[] = { 68, 157, 246, 335, 424, 513, 602 }; @@ -2413,31 +2413,31 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule if (which < 0) { // Restoring game - insertKlayman(200, 430); + insertKlaymen(200, 430); setMessageList(0x004B2900); } else if (which == 1) { // Klaymen entering from the right - insertKlayman(640, 430); + insertKlaymen(640, 430); setMessageList(0x004B2910); } else if (which == 2) { // Klaymen returning from reading a text column - insertKlayman(kHallOfRecordsKlaymanXPos[getGlobalVar(V_CLICKED_COLUMN_INDEX) - _hallOfRecordsInfo->xPosIndex], 430); + insertKlaymen(kHallOfRecordsKlaymenXPos[getGlobalVar(V_CLICKED_COLUMN_INDEX) - _hallOfRecordsInfo->xPosIndex], 430); setMessageList(0x004B2B70); - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) + _klaymen->setDoDeltaX(1); } else { // Klaymen entering from the left - insertKlayman(0, 430); + insertKlaymen(0, 430); setMessageList(0x004B2908); } - _klayman->setSoundFlag(true); - _klayman->setKlaymanIdleTable2(); + _klaymen->setSoundFlag(true); + _klaymen->setKlaymenIdleTable2(); } HallOfRecordsScene::~HallOfRecordsScene() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } uint32 HallOfRecordsScene::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -2463,7 +2463,7 @@ void HallOfRecordsScene::readClickedColumn() { setGlobalVar(V_COLUMN_BACK_NAME, _hallOfRecordsInfo->bgFilename3); else setGlobalVar(V_COLUMN_BACK_NAME, 0); - if (ABS(_klayman->getX() - kHallOfRecordsKlaymanXPos[index]) < 133) + if (ABS(_klaymen->getX() - kHallOfRecordsKlaymenXPos[index]) < 133) setMessageList2(kHallOfRecordsSceneMessageListIds1[index]); else setMessageList2(kHallOfRecordsSceneMessageListIds2[index]); @@ -2502,30 +2502,30 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(200, 430); + insertKlaymen(200, 430); setMessageList(0x004B5428); } else if (which == 1) { // Klaymen entering from the right - insertKlayman(640, 430); + insertKlaymen(640, 430); setMessageList(0x004B5438); } else if (which == 2) { // Klaymen returning from reading a text column - insertKlayman(kScene2247XPositions[getGlobalVar(V_COLUMN_TEXT_NAME) == 0x0008E486 ? 0 : 1], 430); - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) - _klayman->setDoDeltaX(1); + insertKlaymen(kScene2247XPositions[getGlobalVar(V_COLUMN_TEXT_NAME) == 0x0008E486 ? 0 : 1], 430); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) + _klaymen->setDoDeltaX(1); setMessageList(0x004B5530); } else { // Klaymen entering from the left - insertKlayman(0, 430); + insertKlaymen(0, 430); setMessageList(0x004B5430); } - _klayman->setSoundFlag(true); + _klaymen->setSoundFlag(true); } Scene2247::~Scene2247() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } uint32 Scene2247::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -2552,7 +2552,7 @@ void Scene2247::readClickedColumn() { } setGlobalVar(V_CLICKED_COLUMN_INDEX, 0); setGlobalVar(V_CLICKED_COLUMN_ROW, (_mouseClickPos.y - 100) / 7); - if (ABS(_klayman->getX() - kScene2247XPositions[index]) < 133) + if (ABS(_klaymen->getX() - kScene2247XPositions[index]) < 133) setMessageList2(kScene2247MessageListIds1[index]); else setMessageList2(kScene2247MessageListIds2[index]); diff --git a/engines/neverhood/module2200.h b/engines/neverhood/module2200.h index 30cc681b40..f198871613 100644 --- a/engines/neverhood/module2200.h +++ b/engines/neverhood/module2200.h @@ -64,9 +64,9 @@ public: class AsScene2201Door : public AnimatedSprite { public: - AsScene2201Door(NeverhoodEngine *vm, Klayman *klayman, Sprite *ssDoorLight, bool isOpen); + AsScene2201Door(NeverhoodEngine *vm, Klaymen *klaymen, Sprite *ssDoorLight, bool isOpen); protected: - Klayman *_klayman; + Klaymen *_klaymen; Sprite *_ssDoorLight; bool _isOpen; int _countdown; @@ -188,7 +188,7 @@ public: protected: SsCommonPressButton *_ssLightSwitch; Sprite *_ssDoorFrame; - bool _isKlaymanInLight; + bool _isKlaymenInLight; bool _isLightOn; void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); @@ -236,8 +236,8 @@ protected: Sprite *_asPlatform; Sprite *_ssTestTube; uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); - void klaymanInFrontSpikes(); - void klaymanBehindSpikes(); + void klaymenInFrontSpikes(); + void klaymenBehindSpikes(); void readClickedColumn(); }; @@ -311,7 +311,7 @@ protected: Sprite *_asWallCannonAnimation; Sprite *_ssButton; int _elevatorSurfacePriority; - bool _klaymanAtElevator; + bool _klaymenAtElevator; void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); uint32 handleMessage2(int messageNum, const MessageParam ¶m, Entity *sender); @@ -345,7 +345,7 @@ public: ~Scene2242(); protected: Sprite *_asTape; - bool _isKlaymanInLight; + bool _isKlaymenInLight; void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); void readClickedColumn(); diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp index 6c007c47d6..369132187d 100644 --- a/engines/neverhood/module2400.cpp +++ b/engines/neverhood/module2400.cpp @@ -404,19 +404,19 @@ Scene2401::Scene2401(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(200, 447); + insertKlaymen(200, 447); setMessageList(0x004B2F70); _asDoor = insertSprite(false); } else if (which == 1) { // Klaymen entering from the back - insertKlayman(280, 413); + insertKlaymen(280, 413); setMessageList(0x004B2F80); _palette->addBasePalette(0xB103B604, 0, 65, 0); _palette->addPalette(0xB103B604, 0, 65, 0); _asDoor = insertSprite(true); } else { // Klaymen entering from the left - insertKlayman(-20, 447); + insertKlaymen(-20, 447); setMessageList(0x004B2F78); _asDoor = insertSprite(false); } @@ -471,9 +471,9 @@ uint32 Scene2401::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x402064D8) - sendEntityMessage(_klayman, 0x1014, _ssButton); + sendEntityMessage(_klaymen, 0x1014, _ssButton); else if (param.asInteger() == 0x02144CB1) - sendEntityMessage(_klayman, 0x1014, _ssFloorButton); + sendEntityMessage(_klaymen, 0x1014, _ssFloorButton); else if (param.asInteger() == 0x11C40840) { if (getGlobalVar(V_NOTES_DOOR_UNLOCKED) && sendMessage(_asDoor, 0x2004, 0)) setMessageList(0x004B3090); @@ -604,8 +604,8 @@ void AsScene2402Door::stDoorClosingFinished() { setVisible(false); } -AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman) - : AnimatedSprite(vm, 1100), _klayman(klayman), _countdown1(0), _countdown2(0) { +AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klaymen *klaymen) + : AnimatedSprite(vm, 1100), _klaymen(klaymen), _countdown1(0), _countdown2(0) { _x = 260; _y = 210; @@ -620,13 +620,13 @@ AsScene2402TV::AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman) SetUpdateHandler(&AsScene2402TV::upWait); } else { int16 frameIndex; - if (_klayman->getX() > 320) + if (_klaymen->getX() > 320) _currFrameIndex = 29; - frameIndex = CLIP((_klayman->getX() - _x + 150) / 10, 0, 29); + frameIndex = CLIP((_klaymen->getX() - _x + 150) / 10, 0, 29); startAnimation(0x050A0103, frameIndex, -1); _newStickFrameIndex = frameIndex; _countdown1 = 0; - SetUpdateHandler(&AsScene2402TV::upFocusKlayman); + SetUpdateHandler(&AsScene2402TV::upFocusKlaymen); } } @@ -643,8 +643,8 @@ void AsScene2402TV::upWait() { AnimatedSprite::update(); } -void AsScene2402TV::upFocusKlayman() { - int16 frameIndex = CLIP((_klayman->getX() - _x + 150) / 10, 0, 29); +void AsScene2402TV::upFocusKlaymen() { + int16 frameIndex = CLIP((_klaymen->getX() - _x + 150) / 10, 0, 29); if (frameIndex != _currFrameIndex) { if (frameIndex > _currFrameIndex) _currFrameIndex++; @@ -666,7 +666,7 @@ void AsScene2402TV::stJokeFinished() { setGlobalVar(V_TV_JOKE_TOLD, 1); startAnimation(0x050A0103, 0, -1); _newStickFrameIndex = 0; - SetUpdateHandler(&AsScene2402TV::upFocusKlayman); + SetUpdateHandler(&AsScene2402TV::upFocusKlaymen); } uint32 AsScene2402TV::hmJoke(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -701,34 +701,34 @@ Scene2402::Scene2402(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(198, 404); + insertKlaymen(198, 404); setMessageList(0x004AF7C8); } else if (which == 1) { // Klaymen entering from the right - insertKlayman(660, 404); + insertKlaymen(660, 404); setMessageList(0x004AF7D8); } else if (which == 2) { // Klaymen returning from looking through the window - insertKlayman(409, 404); - _klayman->setDoDeltaX(getGlobalVar(V_KLAYMAN_IS_DELTA_X) ? 1 : 0); + insertKlaymen(409, 404); + _klaymen->setDoDeltaX(getGlobalVar(V_KLAYMEN_IS_DELTA_X) ? 1 : 0); setMessageList(0x004AF888); } else { // Klaymen entering from the left - insertKlayman(0, 404); + insertKlaymen(0, 404); setMessageList(0x004AF7D0); } tempSprite = insertStaticSprite(0x081A60A8, 1100); _ssDoorFrame = (StaticSprite*)insertStaticSprite(0x406C0AE0, 1100); - _klayman->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 639, tempSprite->getDrawRect().y2()); + _klaymen->setClipRect(_ssDoorFrame->getDrawRect().x, 0, 639, tempSprite->getDrawRect().y2()); _asDoor = insertSprite(this, which == 0); - insertSprite(_klayman); + insertSprite(_klaymen); insertStaticSprite(0x3A01A020, 200); } Scene2402::~Scene2402() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } void Scene2402::update() { @@ -753,7 +753,7 @@ uint32 Scene2402::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x402064D8) - sendEntityMessage(_klayman, 0x1014, _ssButton); + sendEntityMessage(_klaymen, 0x1014, _ssButton); else if (param.asInteger() == 0x01C66840) { if (sendMessage(_asDoor, 0x2000, 0)) setMessageList(0x004AF800); @@ -772,7 +772,7 @@ uint32 Scene2402::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asTape) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004AF890); } break; @@ -803,26 +803,26 @@ Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game _isClimbingLadder = false; - insertKlayman(220, 449); + insertKlaymen(220, 449); setMessageList(0x004B5C98); setRectList(0x004B5E18); } else if (which == 1) { // Klaymen returning from looking through the window _isClimbingLadder = false; - insertKlayman(433, 449); + insertKlaymen(433, 449); setMessageList(0x004B5D70); setRectList(0x004B5E18); } else if (which == 2) { // Klaymen standing around after the critter video _isClimbingLadder = false; - insertKlayman(440, 449); - _klayman->setDoDeltaX(1); + insertKlaymen(440, 449); + _klaymen->setDoDeltaX(1); setMessageList(0x004B5C98); setRectList(0x004B5E18); } else { // Klaymen coming up from ladder _isClimbingLadder = true; - insertKlayman(122, 599); + insertKlaymen(122, 599); setMessageList(0x004B5CA0); setRectList(0x004B5E28); } @@ -830,9 +830,9 @@ Scene2403::Scene2403(NeverhoodEngine *vm, Module *parentModule, int which) _ssButton = insertSprite(this, 0x3130B0EB, 100, 0); tempSprite1 = insertStaticSprite(0x20C24220, 1100); tempSprite2 = insertStaticSprite(0x03080900, 1300); - tempSprite3 = insertSprite(_klayman); + tempSprite3 = insertSprite(_klaymen); tempSprite3->setClipRect(tempSprite1->getDrawRect().x, 0, 640, tempSprite2->getDrawRect().y2()); - _klayman->setClipRect(tempSprite1->getDrawRect().x, 0, 640, tempSprite2->getDrawRect().y2()); + _klaymen->setClipRect(tempSprite1->getDrawRect().x, 0, 640, tempSprite2->getDrawRect().y2()); loadSound(1, calcHash("fxFogHornSoft")); } @@ -841,9 +841,9 @@ uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x040424D0) - sendEntityMessage(_klayman, 0x1014, _ssButton); + sendEntityMessage(_klaymen, 0x1014, _ssButton); else if (param.asInteger() == 0x180CE614) - sendEntityMessage(_klayman, 0x1014, _asLightCord); + sendEntityMessage(_klaymen, 0x1014, _asLightCord); break; case 0x2000: _isClimbingLadder = true; @@ -870,7 +870,7 @@ uint32 Scene2403::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asTape && !_isClimbingLadder) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004B5D98); } break; @@ -923,36 +923,36 @@ Scene2406::Scene2406(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game _isClimbingLadder = false; - insertKlayman(307, 404, _clipRects, 2); + insertKlaymen(307, 404, _clipRects, 2); setMessageList(0x004B76C8); setRectList(0x004B78C8); } else if (which == 1) { // Klaymen coming down the ladder _isClimbingLadder = true; - insertKlayman(253, -16, _clipRects, 2); + insertKlaymen(253, -16, _clipRects, 2); setMessageList(0x004B76D8); setRectList(0x004B78D8); } else if (which == 2) { // Klaymen returning from the diskplayer _isClimbingLadder = false; - insertKlayman(480, 404, _clipRects, 2); + insertKlaymen(480, 404, _clipRects, 2); setMessageList(0x004B77C0); setRectList(0x004B78C8); } else if (which == 3) { // Klaymen returning from looking through the window _isClimbingLadder = false; - insertKlayman(387, 404, _clipRects, 2); + insertKlaymen(387, 404, _clipRects, 2); setMessageList(0x004B7810); setRectList(0x004B78C8); } else { // Klaymen entering from the left _isClimbingLadder = false; - insertKlayman(0, 404, _clipRects, 2); + insertKlaymen(0, 404, _clipRects, 2); setMessageList(0x004B76D0); setRectList(0x004B78C8); } - tempSprite2 = insertSprite(_klayman); + tempSprite2 = insertSprite(_klaymen); tempSprite2->setClipRect(_clipRects[1]); } @@ -978,10 +978,10 @@ uint32 Scene2406::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _asTape && !_isClimbingLadder) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004B77C8); } else if (sender == _asKey && !_isClimbingLadder) { - sendEntityMessage(_klayman, 0x1014, _asKey); + sendEntityMessage(_klaymen, 0x1014, _asKey); setMessageList(0x004B77D8); } break; diff --git a/engines/neverhood/module2400.h b/engines/neverhood/module2400.h index 908c9d6bf5..38664658ce 100644 --- a/engines/neverhood/module2400.h +++ b/engines/neverhood/module2400.h @@ -125,14 +125,14 @@ protected: class AsScene2402TV : public AnimatedSprite { public: - AsScene2402TV(NeverhoodEngine *vm, Klayman *klayman); + AsScene2402TV(NeverhoodEngine *vm, Klaymen *klaymen); virtual ~AsScene2402TV(); protected: - Klayman *_klayman; + Klaymen *_klaymen; int _countdown1; int _countdown2; void upWait(); - void upFocusKlayman(); + void upFocusKlaymen(); void stJokeFinished(); uint32 hmJoke(int messageNum, const MessageParam ¶m, Entity *sender); }; diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp index f5894e9dad..1623e4ca90 100644 --- a/engines/neverhood/module2500.cpp +++ b/engines/neverhood/module2500.cpp @@ -241,9 +241,9 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { // Restoring game - insertKlayman(162, 393); - _kmScene2501 = _klayman; - _klaymanInCar = false; + insertKlaymen(162, 393); + _kmScene2501 = _klaymen; + _klaymenInCar = false; setMessageList(0x004B2538); setRectList(0x004B2608); SetMessageHandler(&Scene2501::handleMessage); @@ -255,8 +255,8 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which) // 1: Klaymen entering riding the car on the left track // 2: Klaymen entering riding the car on the bottom track addSprite(_asCar); - _kmScene2501 = (Klayman*)new KmScene2501(_vm, this, 275, 393); - _klaymanInCar = true; + _kmScene2501 = (Klaymen*)new KmScene2501(_vm, this, 275, 393); + _klaymenInCar = true; sendMessage(_kmScene2501, 0x2000, 1); _kmScene2501->setDoDeltaX(1); SetMessageHandler(&Scene2501::hmRidingCar); @@ -266,9 +266,9 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which) _currTrackIndex = which; } else { // Klaymen entering the car - insertKlayman(162, 393); - _kmScene2501 = _klayman; - _klaymanInCar = false; + insertKlaymen(162, 393); + _kmScene2501 = _klaymen; + _klaymenInCar = false; setMessageList(0x004B2538); setRectList(0x004B2608); SetMessageHandler(&Scene2501::handleMessage); @@ -307,7 +307,7 @@ Scene2501::Scene2501(NeverhoodEngine *vm, Module *parentModule, int which) Scene2501::~Scene2501() { // Free sprites not currently in the sprite list - if (_klaymanInCar) + if (_klaymenInCar) delete _kmScene2501; else delete _asCar; @@ -316,10 +316,10 @@ Scene2501::~Scene2501() { void Scene2501::update() { Scene::update(); if (_carStatus == 1) { - removeSprite(_klayman); + removeSprite(_klaymen); addSprite(_asCar); clearRectList(); - _klaymanInCar = true; + _klaymenInCar = true; SetMessageHandler(&Scene2501::hmCarAtHome); SetUpdateHandler(&Scene2501::upCarAtHome); _asIdleCarLower->setVisible(false); @@ -327,10 +327,10 @@ void Scene2501::update() { _asCar->setVisible(true); sendMessage(_asCar, 0x2009, 0); _asCar->handleUpdate(); - _klayman = NULL; + _klaymen = NULL; _carStatus = 0; } - updateKlaymanClipRect(); + updateKlaymenClipRect(); } void Scene2501::upCarAtHome() { @@ -346,16 +346,16 @@ void Scene2501::upCarAtHome() { } _mouseClicked = false; } - updateKlaymanClipRect(); + updateKlaymenClipRect(); } void Scene2501::upGettingOutOfCar() { Scene::update(); if (_carStatus == 2) { - _klayman = _kmScene2501; + _klaymen = _kmScene2501; removeSprite(_asCar); - addSprite(_klayman); - _klaymanInCar = false; + addSprite(_klaymen); + _klaymenInCar = false; SetMessageHandler(&Scene2501::handleMessage); SetUpdateHandler(&Scene2501::update); setRectList(0x004B2608); @@ -364,10 +364,10 @@ void Scene2501::upGettingOutOfCar() { _asCar->setVisible(false); setMessageList(0x004B2570); processMessageList(); - _klayman->handleUpdate(); + _klaymen->handleUpdate(); _carStatus = 0; } - updateKlaymanClipRect(); + updateKlaymenClipRect(); } void Scene2501::upRidingCar() { @@ -463,7 +463,7 @@ void Scene2501::changeTrack() { _newTrackIndex = -1; } -void Scene2501::updateKlaymanClipRect() { +void Scene2501::updateKlaymenClipRect() { if (_kmScene2501->getX() <= 211) _kmScene2501->setClipRect(0, 0, 640, 480); else diff --git a/engines/neverhood/module2500.h b/engines/neverhood/module2500.h index 9a7e9442f1..10301b089d 100644 --- a/engines/neverhood/module2500.h +++ b/engines/neverhood/module2500.h @@ -59,14 +59,14 @@ protected: Sprite *_asCarTrackShadow; Sprite *_asIdleCarLower; Sprite *_asIdleCarFull; - Klayman *_kmScene2501; + Klaymen *_kmScene2501; Tracks _tracks; NPointArray *_trackPoints; int _currTrackIndex; NPoint _clickPoint; int _newTrackIndex; int _carStatus; - bool _klaymanInCar; + bool _klaymenInCar; void update(); void upCarAtHome(); void upGettingOutOfCar(); @@ -76,7 +76,7 @@ protected: uint32 hmCarAtHome(int messageNum, const MessageParam ¶m, Entity *sender); void moveCarToPoint(NPoint &pt); void changeTrack(); - void updateKlaymanClipRect(); + void updateKlaymenClipRect(); }; class SsScene2504Button : public StaticSprite { diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp index b5db9118d9..53e73af179 100644 --- a/engines/neverhood/module2700.cpp +++ b/engines/neverhood/module2700.cpp @@ -1200,11 +1200,11 @@ Scene2732::Scene2732(NeverhoodEngine *vm, Module *parentModule) insertScreenMouse(0x0C04502A); setRectList(0x004AE360); - insertKlayman(108, 331); + insertKlaymen(108, 331); setMessageList(0x004AE328); tempSprite = insertStaticSprite(0x50C22C48, 1100); - _klayman->setClipRect(tempSprite->getDrawRect().x, 0, 640, 480); + _klaymen->setClipRect(tempSprite->getDrawRect().x, 0, 640, 480); } diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp index dd02d59a6d..5fececd568 100644 --- a/engines/neverhood/module2800.cpp +++ b/engines/neverhood/module2800.cpp @@ -77,7 +77,7 @@ void Module2800::createScene(int sceneNum, int which) { case 2: _vm->gameState().sceneNum = 2; _vm->_soundMan->startMusic(0xD2FA4D14, 0, 2); - if (getGlobalVar(V_KLAYMAN_SMALL)) + if (getGlobalVar(V_KLAYMEN_SMALL)) _childObject = new Scene2803Small(_vm, this, which); else _childObject = new Scene2803(_vm, this, which); @@ -441,21 +441,21 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which) insertStaticSprite(0x0001264C, 100); if (which < 0) { - insertKlayman(194, 430); + insertKlaymen(194, 430); setMessageList(0x004B6BB8); } else if (which == 1) { - insertKlayman(443, 398); + insertKlaymen(443, 398); setMessageList(0x004B6BC0); } else if (which == 2) { - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { - insertKlayman(312, 432); - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) { + insertKlaymen(312, 432); + _klaymen->setDoDeltaX(1); } else { - insertKlayman(194, 432); + insertKlaymen(194, 432); } setMessageList(0x004B6C10); } else { - insertKlayman(0, 432); + insertKlaymen(0, 432); setMessageList(0x004B6BB0); } @@ -467,7 +467,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which) _palette->addBasePalette(0x01400666, 0, 256, 0); _sprite1 = insertStaticSprite(0x100CA0A8, 1100); _sprite2 = insertStaticSprite(0x287C21A4, 1100); - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite2->getDrawRect().x2(), 480); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, _sprite2->getDrawRect().x2(), 480); insertScreenMouse(0x0066201C); _asTape = insertSprite(this, 8, 1100, 302, 437, 0x9148A011); addCollisionSprite(_asTape); @@ -478,7 +478,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which) _paletteHash = 0x15021024; _palette->addBasePalette(0x11E00684, 0, 256, 0); _sprite2 = insertStaticSprite(0x061601C8, 1100); - _klayman->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480); insertScreenMouse(0x00680116); _asTape = insertSprite(this, 8, 1100, 302, 437, 0x01142428); addCollisionSprite(_asTape); @@ -489,7 +489,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which) _paletteHash = 0x15021024; _palette->addBasePalette(0x030006E6, 0, 256, 0); _sprite2 = insertStaticSprite(0x273801CE, 1100); - _klayman->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480); + _klaymen->setClipRect(0, 0, _sprite2->getDrawRect().x2(), 480); insertScreenMouse(0x006E2038); _asTape = insertSprite(this, 8, 1100, 302, 437, 0x9148A011); addCollisionSprite(_asTape); @@ -508,7 +508,7 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which) } Scene2801::~Scene2801() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); } uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -516,7 +516,7 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x4826: if (sender == _asTape) { - sendEntityMessage(_klayman, 0x1014, _asTape); + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004B6C40); } break; @@ -923,46 +923,46 @@ Scene2803::Scene2803(NeverhoodEngine *vm, Module *parentModule, int which) _clipRectsStairs[2].y2 = 480; if (which < 0) { - insertKlayman(302, 445, _clipRectsFloor, 2); + insertKlaymen(302, 445, _clipRectsFloor, 2); setMessageList(0x004B79F0); - klaymanFloor(); + klaymenFloor(); } else if (which == 1) { - insertKlayman(200, 445, _clipRectsFloor, 2); + insertKlaymen(200, 445, _clipRectsFloor, 2); setMessageList(0x004B79C8); - klaymanFloor(); + klaymenFloor(); } else if (which == 3) { NPoint pt = _dataResource.getPoint(0xC2A08694); - insertKlayman(pt.x, pt.y, _clipRectsStairs, 3); + insertKlaymen(pt.x, pt.y, _clipRectsStairs, 3); setMessageList(0x004B7A00); - klaymanStairs(); + klaymenStairs(); } else if (which == 5) { - insertKlayman(253, 298, _clipRectsStairs, 3); + insertKlaymen(253, 298, _clipRectsStairs, 3); setMessageList(0x004B7A00); - klaymanStairs(); + klaymenStairs(); } else if (which == 6) { _asRope = insertSprite(this, 384); _asRope->setClipRect(0, 25, 640, 480); - insertKlayman(384, 0, _clipRectsFloor, 2); - sendEntityMessage(_klayman, 0x1014, _asRope); - _klayman->setClipRect(0, 25, 640, 480); + insertKlaymen(384, 0, _clipRectsFloor, 2); + sendEntityMessage(_klaymen, 0x1014, _asRope); + _klaymen->setClipRect(0, 25, 640, 480); setMessageList(0x004B7A78); - klaymanFloor(); + klaymenFloor(); } else if (which == 2) { - insertKlayman(400, 445, _clipRectsFloor, 2); + insertKlaymen(400, 445, _clipRectsFloor, 2); setMessageList(0x004B79F8); - klaymanFloor(); + klaymenFloor(); } else { - insertKlayman(50, 231, _clipRectsStairs, 3); + insertKlaymen(50, 231, _clipRectsStairs, 3); setMessageList(0x004B79C0); - klaymanStairs(); + klaymenStairs(); } changeBackground(); } -void Scene2803::upKlaymanStairs() { - if (_klayman->getX() < 350) { +void Scene2803::upKlaymenStairs() { + if (_klaymen->getX() < 350) { setPaletteArea0(); } else { setPaletteArea1(); @@ -986,27 +986,27 @@ uint32 Scene2803::handleMessage(int messageNum, const MessageParam ¶m, Entit else if (param.asInteger() == 0x482D1210) setMessageList(0x004B7A30); else if (param.asInteger() == 0x802402B2) { - sendEntityMessage(_klayman, 0x1014, _asLightCord); + sendEntityMessage(_klaymen, 0x1014, _asLightCord); setMessageList(0x004B7A68); } else if (param.asInteger() == 0x9626F390) setMessageList(0x004B7A88); break; case 0x482A: - klaymanStairs(); + klaymenStairs(); setPaletteArea1(); break; case 0x482B: - klaymanFloor(); + klaymenFloor(); setPaletteArea0(); break; } return messageResult; } -void Scene2803::klaymanStairs() { - SetUpdateHandler(&Scene2803::upKlaymanStairs); - _klayman->getSurface()->setClipRects(_clipRectsStairs, 3); - sendMessage(_klayman, 0x482C, 0xE5A48297); +void Scene2803::klaymenStairs() { + SetUpdateHandler(&Scene2803::upKlaymenStairs); + _klaymen->getSurface()->setClipRects(_clipRectsStairs, 3); + sendMessage(_klaymen, 0x482C, 0xE5A48297); _sprite3->setVisible(true); _sprite4->setVisible(true); _sprite5->setVisible(true); @@ -1016,10 +1016,10 @@ void Scene2803::klaymanStairs() { _sprite9->setVisible(false); } -void Scene2803::klaymanFloor() { +void Scene2803::klaymenFloor() { SetUpdateHandler(&Scene::update); - _klayman->getSurface()->setClipRects(_clipRectsFloor, 2); - sendMessage(_klayman, 0x482C, 0); + _klaymen->getSurface()->setClipRects(_clipRectsFloor, 2); + sendMessage(_klaymen, 0x482C, 0); _sprite3->setVisible(false); _sprite4->setVisible(false); _sprite5->setVisible(false); @@ -1170,35 +1170,35 @@ Scene2803Small::Scene2803Small(NeverhoodEngine *vm, Module *parentModule, int wh _sprite7->setVisible(false); if (which < 0) { - insertKlayman(479, 435); - klaymanFloor(); + insertKlaymen(479, 435); + klaymenFloor(); setMessageList(0x004B60D8); } else if (which == 3) { NPoint pt = _dataResource.getPoint(0x096520ED); - insertKlayman(pt.x, pt.y); - klaymanSlope(); + insertKlaymen(pt.x, pt.y); + klaymenSlope(); setMessageList(0x004B6100); - _klayman->setRepl(64, 0); + _klaymen->setRepl(64, 0); } else if (which == 4) { NPoint pt = _dataResource.getPoint(0x20C6238D); - insertKlayman(pt.x, pt.y); - klaymanSlope(); + insertKlaymen(pt.x, pt.y); + klaymenSlope(); setMessageList(0x004B60F8); - _klayman->setRepl(64, 0); + _klaymen->setRepl(64, 0); } else if (which == 5) { NPoint pt = _dataResource.getPoint(0x2146690D); - insertKlayman(pt.x, pt.y); - klaymanSlope(); + insertKlaymen(pt.x, pt.y); + klaymenSlope(); setMessageList(0x004B6100); - _klayman->setRepl(64, 0); + _klaymen->setRepl(64, 0); } else if (which == 2) { NPoint pt = _dataResource.getPoint(0x104C03ED); - insertKlayman(pt.x, pt.y); - klaymanFloor(); + insertKlaymen(pt.x, pt.y); + klaymenFloor(); setMessageList(0x004B6138); } else { - insertKlayman(135, 444); - klaymanFloor(); + insertKlaymen(135, 444); + klaymenFloor(); setMessageList(0x004B60E0, false); _sprite6->setVisible(true); _sprite7->setVisible(true); @@ -1214,11 +1214,11 @@ uint32 Scene2803Small::handleMessage(int messageNum, const MessageParam ¶m, setMessageList(0x004B6180); } else if (param.asInteger() == 0xB1FDAB2E) { NPoint pt = _dataResource.getPoint(0x0D84A1AD); - _klayman->setX(pt.x); - _klayman->setY(pt.y); - _klayman->updateBounds(); - klaymanFloor(); - _klayman->setClipRect(517, 401, 536, 480); + _klaymen->setX(pt.x); + _klaymen->setY(pt.y); + _klaymen->updateBounds(); + klaymenFloor(); + _klaymen->setClipRect(517, 401, 536, 480); setMessageList(0x004B6198); } else if (param.asInteger() == 0xB00C7C48) { setMessageList(0x004B6108); @@ -1227,71 +1227,71 @@ uint32 Scene2803Small::handleMessage(int messageNum, const MessageParam ¶m, } else if (param.asInteger() == 0xAC69A28D) { setMessageList(0x004B6168); } else if (param.asInteger() == 0x00086212) { - _klayman->setClipRect(0, 0, 560, 315); - _klayman->setX(560); - _klayman->setY(315); - _klayman->updateBounds(); - klaymanSlope(); + _klaymen->setClipRect(0, 0, 560, 315); + _klaymen->setX(560); + _klaymen->setY(315); + _klaymen->updateBounds(); + klaymenSlope(); setMessageList(0x004B61A0); } else if (param.asInteger() == 0x002CAA68) { setMessageList(0x004B61A8); } break; case 0x482A: - if (_klayman->getX() < 200) { + if (_klaymen->getX() < 200) { setPaletteArea3(); - } else if (_klayman->getX() < 500) { + } else if (_klaymen->getX() < 500) { setSurfacePriority(_sprite5->getSurface(), 1100); - sendMessage(_klayman, 0x482C, 0); + sendMessage(_klaymen, 0x482C, 0); setPaletteArea2(); } else { - _klayman->setClipRect(517, 401, 536, 480); + _klaymen->setClipRect(517, 401, 536, 480); setPaletteArea2(); } break; case 0x482B: _sprite6->setVisible(false); _sprite7->setVisible(false); - _klayman->setClipRect(0, 0, 640, 480); + _klaymen->setClipRect(0, 0, 640, 480); setSurfacePriority(_sprite5->getSurface(), 900); - sendMessage(_klayman, 0x482C, 0x2086222D); + sendMessage(_klaymen, 0x482C, 0x2086222D); break; } return 0; } -void Scene2803Small::upKlaymanSlope() { - if (_klayman->getX() < 388) { - _klayman->setClipRect(_sprite3->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); +void Scene2803Small::upKlaymenSlope() { + if (_klaymen->getX() < 388) { + _klaymen->setClipRect(_sprite3->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); setPaletteArea0(); - } else if (_klayman->getX() < 500) { - _klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), _sprite1->getDrawRect().y2()); + } else if (_klaymen->getX() < 500) { + _klaymen->setClipRect(0, 0, _sprite1->getDrawRect().x2(), _sprite1->getDrawRect().y2()); setPaletteArea1(); } Scene::update(); } -void Scene2803Small::upKlaymanFloor() { - if (_klayman->getX() > 194 && _klayman->getX() < 273) +void Scene2803Small::upKlaymenFloor() { + if (_klaymen->getX() > 194 && _klaymen->getX() < 273) setPaletteArea2(); - else if (_klayman->getX() > 155 && _klayman->getX() < 300) + else if (_klaymen->getX() > 155 && _klaymen->getX() < 300) setPaletteArea0(); Scene::update(); } -void Scene2803Small::klaymanSlope() { - SetUpdateHandler(&Scene2803Small::upKlaymanSlope); - sendMessage(_klayman, 0x482C, 0x23C630D9); - _klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), _sprite1->getDrawRect().y2()); - _klayman->setRepl(64, 0); +void Scene2803Small::klaymenSlope() { + SetUpdateHandler(&Scene2803Small::upKlaymenSlope); + sendMessage(_klaymen, 0x482C, 0x23C630D9); + _klaymen->setClipRect(0, 0, _sprite1->getDrawRect().x2(), _sprite1->getDrawRect().y2()); + _klaymen->setRepl(64, 0); _sprite1->setVisible(true); } -void Scene2803Small::klaymanFloor() { - SetUpdateHandler(&Scene2803Small::upKlaymanFloor); - sendMessage(_klayman, 0x482C, 0x2086222D); - _klayman->setClipRect(0, 0, 640, 480); - _klayman->clearRepl(); +void Scene2803Small::klaymenFloor() { + SetUpdateHandler(&Scene2803Small::upKlaymenFloor); + sendMessage(_klaymen, 0x482C, 0x2086222D); + _klaymen->setClipRect(0, 0, 640, 480); + _klaymen->clearRepl(); _sprite1->setVisible(false); } @@ -1821,7 +1821,7 @@ void Scene2804::update() { if (_isSolved) { _palette->fillBaseWhite(0, 256); _palette->startFadeToPalette(18); - setGlobalVar(V_KLAYMAN_SMALL, 1); + setGlobalVar(V_KLAYMEN_SMALL, 1); _countdown1 = 48; } } else if (_beamStatus == 6) { @@ -1853,31 +1853,31 @@ Scene2805::Scene2805(NeverhoodEngine *vm, Module *parentModule, int which) _sprite2 = insertStaticSprite(0x020CE421, 1100); if (which < 0) { - insertKlayman(380, 338); + insertKlaymen(380, 338); setMessageList(0x004AE1C8); sendMessage(this, 0x2000, 0); } else if (which == 1) { - insertKlayman(493, 338); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(493, 338); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004AE1D0, false); sendMessage(this, 0x2000, 1); } else if (which == 2) { - insertKlayman(493, 338); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(493, 338); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004AE288, false); sendMessage(this, 0x2000, 1); } else if (which == 3) { - insertKlayman(493, 338); - sendMessage(_klayman, 0x2000, 1); + insertKlaymen(493, 338); + sendMessage(_klaymen, 0x2000, 1); setMessageList(0x004AE1E0, false); sendMessage(this, 0x2000, 1); } else { - insertKlayman(340, 338); + insertKlaymen(340, 338); setMessageList(0x004AE1C0); sendMessage(this, 0x2000, 0); } - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite2->getDrawRect().x2(), 480); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, _sprite2->getDrawRect().x2(), 480); } @@ -1887,10 +1887,10 @@ uint32 Scene2805::handleMessage(int messageNum, const MessageParam ¶m, Entit case 0x2000: if (param.asInteger()) { setRectList(0x004AE318); - _klayman->setKlaymanIdleTable3(); + _klaymen->setKlaymenIdleTable3(); } else { setRectList(0x004AE308); - _klayman->setKlaymanIdleTable1(); + _klaymen->setKlaymenIdleTable1(); } break; } @@ -1979,20 +1979,20 @@ Scene2806::Scene2806(NeverhoodEngine *vm, Module *parentModule, int which) _clipRects[3].x2 = 640; if (which < 0) { - insertKlayman(441, 423, false, _clipRects, 4); + insertKlaymen(441, 423, false, _clipRects, 4); setMessageList(0x004AF098); } else if (which == 1) { - insertKlayman(378, 423, false, _clipRects, 4); + insertKlaymen(378, 423, false, _clipRects, 4); setMessageList(0x004AF098); } else if (which == 2) { - insertKlayman(378, 423, false, _clipRects, 4); + insertKlaymen(378, 423, false, _clipRects, 4); setMessageList(0x004AF0C8, false); } else if (which == 3) { - insertKlayman(378, 423, true, _clipRects, 4); + insertKlaymen(378, 423, true, _clipRects, 4); setMessageList(0x004AF0A0, false); - setGlobalVar(V_KLAYMAN_SMALL, 0); + setGlobalVar(V_KLAYMEN_SMALL, 0); } else { - insertKlayman(670, 423, false, _clipRects, 4); + insertKlaymen(670, 423, false, _clipRects, 4); setMessageList(0x004AF090); } @@ -2032,7 +2032,7 @@ void Scene2806::findClosestPoint() { 0x086B8890 }; - int16 x = MIN(_klayman->getX(), 639); + int16 x = MIN(_klaymen->getX(), 639); int index = 1; while (index < (int)_pointList->size() && (*_pointList)[index].x < x) @@ -2565,20 +2565,20 @@ Scene2809::Scene2809(NeverhoodEngine *vm, Module *parentModule, int which) _clipRects[3].x1 = 0; if (which < 0) { - insertKlayman(226, 423, false, _clipRects, 4); + insertKlaymen(226, 423, false, _clipRects, 4); setMessageList(0x004B5B90); } else if (which == 1) { - insertKlayman(262, 423, false, _clipRects, 4); + insertKlaymen(262, 423, false, _clipRects, 4); setMessageList(0x004B5B90); } else if (which == 2) { - insertKlayman(262, 423, false, _clipRects, 4); + insertKlaymen(262, 423, false, _clipRects, 4); setMessageList(0x004B5BD0); } else if (which == 3) { - insertKlayman(262, 423, true, _clipRects, 4); + insertKlaymen(262, 423, true, _clipRects, 4); setMessageList(0x004B5BA8, false); - setGlobalVar(V_KLAYMAN_SMALL, 0); + setGlobalVar(V_KLAYMEN_SMALL, 0); } else { - insertKlayman(-30, 423, false, _clipRects, 4); + insertKlaymen(-30, 423, false, _clipRects, 4); setMessageList(0x004B5B88); } @@ -2618,7 +2618,7 @@ void Scene2809::findClosestPoint() { 0x6A8B9008 }; - int16 x = MAX(_klayman->getX(), 2); + int16 x = MAX(_klaymen->getX(), 2); int index = 1; while (index < (int)_pointList->size() && (*_pointList)[index].x >= x) @@ -2683,7 +2683,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which) _clipRects[1].x2 = _sprite6->getDrawRect().x2(); _clipRects[1].y2 = 480; - if (getGlobalVar(V_KLAYMAN_SMALL)) { + if (getGlobalVar(V_KLAYMEN_SMALL)) { _asTape = insertSprite(this, 0, 900, 245, 429, 0x9148A011); addCollisionSprite(_asTape); } else { @@ -2695,7 +2695,7 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which) if (getGlobalVar(V_LADDER_DOWN)) { setGlobalVar(V_BEEN_STATUE_ROOM, 1); - if (getGlobalVar(V_KLAYMAN_SMALL)) { + if (getGlobalVar(V_KLAYMEN_SMALL)) { _sprite4 = insertStaticSprite(0x82653808, 100); } else { _sprite4 = insertStaticSprite(0x82653808, 1100); @@ -2704,30 +2704,30 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which) } if (which < 0) { - if (getGlobalVar(V_KLAYMAN_SMALL)) { - insertKlayman(240, 448); - _klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480); + if (getGlobalVar(V_KLAYMEN_SMALL)) { + insertKlaymen(240, 448); + _klaymen->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480); setMessageList(0x004AE438); setRectList(0x004AE810); _isRopingDown = false; removeCollisionSprite(_asTape); } else { - insertKlayman(300, 424, _clipRects, 2); + insertKlaymen(300, 424, _clipRects, 2); setMessageList(0x004AE438); if (getGlobalVar(V_LADDER_DOWN)) loadDataResource(0x84130112); else loadDataResource(0x84500132); - tempSprite = insertSprite(_klayman); + tempSprite = insertSprite(_klaymen); tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480); _clipRects[0].y1 = _sprite1->getDrawRect().y; _isRopingDown = false; } } else if (which == 1) { - insertKlayman(186, 64, _clipRects, 2); + insertKlaymen(186, 64, _clipRects, 2); setMessageList(0x004AE440); loadDataResource(0x84130112); - tempSprite = insertSprite(_klayman); + tempSprite = insertSprite(_klaymen); tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480); _isRopingDown = true; _clipRects[0].y1 = _sprite1->getDrawRect().y; @@ -2736,27 +2736,27 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which) _sprite2 = insertStaticSprite(0x02780936, 1100); _sprite3 = insertStaticSprite(0x1CA02160, 1100); _asRope = insertSprite(this, 384); - insertKlayman(384, 0, _clipRects, 0); - sendEntityMessage(_klayman, 0x1014, _asRope); + insertKlaymen(384, 0, _clipRects, 0); + sendEntityMessage(_klaymen, 0x1014, _asRope); setMessageList(0x004AE738); - _klayman->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2()); + _klaymen->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2()); _asRope->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2()); _vm->_soundMan->addSound(0x84400112, 0xC874EE6C); _vm->_soundMan->playSoundLooping(0xC874EE6C); _vm->_soundMan->setSoundVolume(0xC874EE6C, 50); _isRopingDown = false; } else if ((which >= 11 && which <= 14) || (which >= 19 && which <= 22) || which == 3) { - if (getGlobalVar(V_KLAYMAN_SMALL)) { - insertKlayman((int16)getGlobalVar(V_KLAYMAN_SAVED_X), 448); - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) - _klayman->setDoDeltaX(1); - _klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480); + if (getGlobalVar(V_KLAYMEN_SMALL)) { + insertKlaymen((int16)getGlobalVar(V_KLAYMEN_SAVED_X), 448); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) + _klaymen->setDoDeltaX(1); + _klaymen->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480); setMessageList(0x004AE6D8); setRectList(0x004AE810); _isRopingDown = false; removeCollisionSprite(_asTape); } else { - insertKlaymanLadder(); + insertKlaymenLadder(); if (getGlobalVar(V_LADDER_DOWN_ACTION)) { setMessageList(0x004AE6E8); setGlobalVar(V_LADDER_DOWN_ACTION, 0); @@ -2767,32 +2767,32 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which) } } } else if (which >= 15 && which <= 18) { - insertKlaymanLadder(); + insertKlaymenLadder(); setMessageList(0x004AE6E0); _isRopingDown = false; } else if (which == 4) { - if (getGlobalVar(V_KLAYMAN_SMALL)) { - insertKlayman(473, 448); - _klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480); + if (getGlobalVar(V_KLAYMEN_SMALL)) { + insertKlaymen(473, 448); + _klaymen->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480); setMessageList(0x004AE428); setRectList(0x004AE810); _isRopingDown = false; removeCollisionSprite(_asTape); } else { - insertKlayman(450, 424, _clipRects, 2); + insertKlaymen(450, 424, _clipRects, 2); setMessageList(0x004AE418); if (getGlobalVar(V_LADDER_DOWN)) loadDataResource(0x84130112); else loadDataResource(0x84500132); - tempSprite = insertSprite(_klayman); + tempSprite = insertSprite(_klaymen); tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480); _clipRects[0].y1 = _sprite1->getDrawRect().y; _isRopingDown = false; } } else { - insertKlayman(120, 448); - _klayman->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480); + insertKlaymen(120, 448); + _klaymen->setClipRect(_sprite5->getDrawRect().x, 0, 640, 480); setMessageList(0x004AE410); setRectList(0x004AE810); _isRopingDown = false; @@ -2802,27 +2802,27 @@ Scene2810::Scene2810(NeverhoodEngine *vm, Module *parentModule, int which) } Scene2810::~Scene2810() { - setGlobalVar(V_KLAYMAN_IS_DELTA_X, _klayman->isDoDeltaX() ? 1 : 0); - setGlobalVar(V_KLAYMAN_SAVED_X, _klayman->getX()); + setGlobalVar(V_KLAYMEN_IS_DELTA_X, _klaymen->isDoDeltaX() ? 1 : 0); + setGlobalVar(V_KLAYMEN_SAVED_X, _klaymen->getX()); _vm->_soundMan->deleteSoundGroup(0x84400112); } -void Scene2810::insertKlaymanLadder() { +void Scene2810::insertKlaymenLadder() { Sprite *tempSprite; if (getGlobalVar(V_LADDER_DOWN_ACTION)) { - insertKlayman(430, 424, _clipRects, 2); - _klayman->setDoDeltaX(1); + insertKlaymen(430, 424, _clipRects, 2); + _klaymen->setDoDeltaX(1); } else { - insertKlayman((int16)getGlobalVar(V_KLAYMAN_SAVED_X), 424, _clipRects, 2); - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) - _klayman->setDoDeltaX(1); + insertKlaymen((int16)getGlobalVar(V_KLAYMEN_SAVED_X), 424, _clipRects, 2); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) + _klaymen->setDoDeltaX(1); } if (getGlobalVar(V_LADDER_DOWN)) loadDataResource(0x84130112); else loadDataResource(0x84500132); - tempSprite = insertSprite(_klayman); + tempSprite = insertSprite(_klaymen); tempSprite->setClipRect(0, _sprite1->getDrawRect().y, 640, 480); _clipRects[0].y1 = _sprite1->getDrawRect().y; } @@ -2872,8 +2872,8 @@ uint32 Scene2810::handleMessage(int messageNum, const MessageParam ¶m, Entit _isRopingDown = false; break; case 0x4826: - if (sender == _asTape && getGlobalVar(V_KLAYMAN_SMALL) == 0 && !_isRopingDown) { - sendEntityMessage(_klayman, 0x1014, _asTape); + if (sender == _asTape && getGlobalVar(V_KLAYMEN_SMALL) == 0 && !_isRopingDown) { + sendEntityMessage(_klaymen, 0x1014, _asTape); setMessageList(0x004AE750); } break; @@ -3013,34 +3013,34 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which) if (which < 0) { _isRopingDown = false; - insertKlayman(272, 432); + insertKlaymen(272, 432); setMessageList(0x004AF560); _sprite1->setVisible(false); - _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); + _klaymen->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); } else if (which == 1) { _isRopingDown = false; - insertKlayman(338, 398); + insertKlaymen(338, 398); setMessageList(0x004AF588); setPaletteArea1(true); - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite1->getDrawRect().x2(), _sprite3->getDrawRect().y2()); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, _sprite1->getDrawRect().x2(), _sprite3->getDrawRect().y2()); } else if (which == 2) { _isRopingDown = false; - if (getGlobalVar(V_KLAYMAN_IS_DELTA_X)) { - insertKlayman(554, 432); - _klayman->setDoDeltaX(1); + if (getGlobalVar(V_KLAYMEN_IS_DELTA_X)) { + insertKlaymen(554, 432); + _klaymen->setDoDeltaX(1); } else { - insertKlayman(394, 432); + insertKlaymen(394, 432); } setMessageList(0x004AF5F0); _sprite1->setVisible(false); - _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); + _klaymen->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); } else { _isRopingDown = true; - insertKlayman(150, 582); + insertKlaymen(150, 582); setMessageList(0x004AF568); setPaletteArea2(true); _sprite1->setVisible(false); - _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); + _klaymen->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); } _asRope->setClipRect(0, _sprite2->getDrawRect().y, 640, _sprite3->getDrawRect().y2()); @@ -3048,9 +3048,9 @@ Scene2812::Scene2812(NeverhoodEngine *vm, Module *parentModule, int which) } void Scene2812::update() { - if (_klayman->getX() < 220) + if (_klaymen->getX() < 220) setPaletteArea2(false); - else if (_klayman->getX() < 240) + else if (_klaymen->getX() < 240) setPaletteArea0(false); Scene::update(); } @@ -3060,17 +3060,17 @@ uint32 Scene2812::handleMessage(int messageNum, const MessageParam ¶m, Entit switch (messageNum) { case 0x100D: if (param.asInteger() == 0x0004269B) - sendEntityMessage(_klayman, 0x1014, _asRope); + sendEntityMessage(_klaymen, 0x1014, _asRope); break; case 0x2001: _isRopingDown = true; setRectList(0x004AF710); - _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite4->getDrawRect().y2()); + _klaymen->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite4->getDrawRect().y2()); break; case 0x2002: _isRopingDown = false; setRectList(0x004AF700); - _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); + _klaymen->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); break; case 0x4806: sendMessage(_asWinch, 0x2000, 0); @@ -3078,22 +3078,22 @@ uint32 Scene2812::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x4826: if (sender == _ssTape && !_isRopingDown) { - sendEntityMessage(_klayman, 0x1014, _ssTape); + sendEntityMessage(_klaymen, 0x1014, _ssTape); setMessageList(0x004AF658); } else if (sender == _asKey && !_isRopingDown) { - sendEntityMessage(_klayman, 0x1014, _asKey); + sendEntityMessage(_klaymen, 0x1014, _asKey); setMessageList(0x004AF668); } break; case 0x482A: setPaletteArea1(false); _sprite1->setVisible(true); - _klayman->setClipRect(_sprite1->getDrawRect().x, 0, _sprite1->getDrawRect().x2(), _sprite3->getDrawRect().y2()); + _klaymen->setClipRect(_sprite1->getDrawRect().x, 0, _sprite1->getDrawRect().x2(), _sprite3->getDrawRect().y2()); break; case 0x482B: setPaletteArea0(false); _sprite1->setVisible(false); - _klayman->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); + _klaymen->setClipRect(_sprite4->getDrawRect().x, 0, 640, _sprite3->getDrawRect().y2()); break; } return messageResult; diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h index a341c23944..970de3cbdf 100644 --- a/engines/neverhood/module2800.h +++ b/engines/neverhood/module2800.h @@ -124,9 +124,9 @@ protected: NRect _clipRectsStairs[3]; int _paletteArea; uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); - void upKlaymanStairs(); - void klaymanStairs(); - void klaymanFloor(); + void upKlaymenStairs(); + void klaymenStairs(); + void klaymenFloor(); void toggleBackground(); void changeBackground(); void setPaletteArea0(); @@ -147,10 +147,10 @@ protected: Sprite *_sprite6; Sprite *_sprite7; uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); - void upKlaymanSlope(); - void upKlaymanFloor(); - void klaymanSlope(); - void klaymanFloor(); + void upKlaymenSlope(); + void upKlaymenFloor(); + void klaymenSlope(); + void klaymenFloor(); void setPaletteArea0(); void setPaletteArea1(); void setPaletteArea2(); @@ -437,7 +437,7 @@ protected: bool _isRopingDown; NRect _clipRects[2]; uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); - void insertKlaymanLadder(); + void insertKlaymenLadder(); }; class AsScene2812Winch : public AnimatedSprite { diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp index 269d13ded2..2fce4ba18e 100644 --- a/engines/neverhood/resource.cpp +++ b/engines/neverhood/resource.cpp @@ -540,10 +540,10 @@ HitRectList *DataResource::getHitRectList() { return drDirectoryItem ? _hitRectLists[drDirectoryItem->offset] : NULL; } -MessageList *DataResource::getMessageListAtPos(int16 klaymanX, int16 klaymanY, int16 mouseX, int16 mouseY) { +MessageList *DataResource::getMessageListAtPos(int16 klaymenX, int16 klaymenY, int16 mouseX, int16 mouseY) { for (uint i = 0; i < _drRects.size(); i++) { - if (klaymanX >= _drRects[i].rect.x1 && klaymanX <= _drRects[i].rect.x2 && - klaymanY >= _drRects[i].rect.y1 && klaymanY <= _drRects[i].rect.y2) { + if (klaymenX >= _drRects[i].rect.x1 && klaymenX <= _drRects[i].rect.x2 && + klaymenY >= _drRects[i].rect.y1 && klaymenY <= _drRects[i].rect.y2) { DRSubRectList *drSubRectList = _drSubRectLists[_drRects[i].subRectIndex]; for (uint j = 0; j < drSubRectList->size(); j++) { DRSubRect &subRect = (*drSubRectList)[j]; diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h index e2609b6fd2..6a84a69ecd 100644 --- a/engines/neverhood/resource.h +++ b/engines/neverhood/resource.h @@ -163,7 +163,7 @@ public: NPointArray *getPointArray(uint32 nameHash); NRectArray *getRectArray(uint32 nameHash); HitRectList *getHitRectList(); - MessageList *getMessageListAtPos(int16 klaymanX, int16 klaymanY, int16 mouseX, int16 mouseY); + MessageList *getMessageListAtPos(int16 klaymenX, int16 klaymenY, int16 mouseX, int16 mouseY); protected: struct DRDirectoryItem { diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp index 63242a41c7..2705668c00 100644 --- a/engines/neverhood/scene.cpp +++ b/engines/neverhood/scene.cpp @@ -27,7 +27,7 @@ namespace Neverhood { Scene::Scene(NeverhoodEngine *vm, Module *parentModule) : Entity(vm, 0), _parentModule(parentModule), _dataResource(vm), _hitRects(NULL) { - _isKlaymanBusy = false; + _isKlaymenBusy = false; _doConvertMessages = false; _messageList = NULL; _rectType = 0; @@ -35,7 +35,7 @@ Scene::Scene(NeverhoodEngine *vm, Module *parentModule) _mouseClickPos.y = 0; _mouseClicked = false; _rectList = NULL; - _klayman = NULL; + _klaymen = NULL; _mouseCursor = NULL; _palette = NULL; _background = NULL; @@ -228,15 +228,15 @@ SmackerPlayer *Scene::addSmackerPlayer(SmackerPlayer *smackerPlayer) { void Scene::update() { if (_mouseClicked) { - if (_klayman) { + if (_klaymen) { if (_canAcceptInput && - _klayman->hasMessageHandler() && - sendMessage(_klayman, 0x1008, 0) != 0 && + _klaymen->hasMessageHandler() && + sendMessage(_klaymen, 0x1008, 0) != 0 && queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) { _mouseClicked = false; } else if (_canAcceptInput && - _klayman->hasMessageHandler() && - sendMessage(_klayman, 0x1008, 0) != 0) { + _klaymen->hasMessageHandler() && + sendMessage(_klaymen, 0x1008, 0) != 0) { _mouseClicked = !queryPositionRectList(_mouseClickPos.x, _mouseClickPos.y); } } else if (queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) { @@ -270,13 +270,13 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s sendMessage(_parentModule, 0x1009, param); break; case 0x1006: - // Sent by Klayman when its animation sequence has finished - if (_isKlaymanBusy) { - _isKlaymanBusy = false; + // Sent by Klaymen when its animation sequence has finished + if (_isKlaymenBusy) { + _isKlaymenBusy = false; if (_messageListIndex == _messageListCount) { // If the current message list was processed completely, - // sent Klayman into the idle state. - sendMessage(_klayman, 0x4004, 0); + // sent Klaymen into the idle state. + sendMessage(_klaymen, 0x4004, 0); } else { // Else continue with the next message in the current message list processMessageList(); @@ -285,11 +285,11 @@ uint32 Scene::handleMessage(int messageNum, const MessageParam ¶m, Entity *s break; case 0x1007: // This isn't sent by any code, check if it's in a message list - // This cancels the current message list and sets Klayman into the idle state. - if (_isKlaymanBusy) { - _isKlaymanBusy = false; + // This cancels the current message list and sets Klaymen into the idle state. + if (_isKlaymenBusy) { + _isKlaymenBusy = false; _messageList = NULL; - sendMessage(_klayman, 0x4004, 0); + sendMessage(_klaymen, 0x4004, 0); } break; case 0x101D: @@ -325,13 +325,13 @@ bool Scene::queryPositionSprite(int16 mouseX, int16 mouseY) { } bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) { - int16 klaymanX = _klayman->getX(); - int16 klaymanY = _klayman->getY(); + int16 klaymenX = _klaymen->getX(); + int16 klaymenY = _klaymen->getY(); if (_rectType == 1) { RectList &rectList = *_rectList; for (uint i = 0; i < rectList.size(); i++) { - debug(2, "(%d, %d) ? (%d, %d, %d, %d)", klaymanX, klaymanY, rectList[i].rect.x1, rectList[i].rect.y1, rectList[i].rect.x2, rectList[i].rect.y2); - if (rectList[i].rect.contains(klaymanX, klaymanY)) { + debug(2, "(%d, %d) ? (%d, %d, %d, %d)", klaymenX, klaymenY, rectList[i].rect.x1, rectList[i].rect.y1, rectList[i].rect.x2, rectList[i].rect.y2); + if (rectList[i].rect.contains(klaymenX, klaymenY)) { for (uint j = 0; j < rectList[i].subRects.size(); j++) { debug(2, " (%d, %d) ? (%d, %d, %d, %d)", mouseX, mouseY, rectList[i].subRects[j].rect.x1, rectList[i].subRects[j].rect.y1, rectList[i].subRects[j].rect.x2, rectList[i].subRects[j].rect.y2); if (rectList[i].subRects[j].rect.contains(mouseX, mouseY)) { @@ -341,7 +341,7 @@ bool Scene::queryPositionRectList(int16 mouseX, int16 mouseY) { } } } else if (_rectType == 2) { - MessageList *messageList = _dataResource.getMessageListAtPos(klaymanX, klaymanY, mouseX, mouseY); + MessageList *messageList = _dataResource.getMessageListAtPos(klaymenX, klaymenY, mouseX, mouseY); if (messageList && messageList->size()) setMessageList2(messageList, true, true); } @@ -356,11 +356,11 @@ void Scene::setMessageList(MessageList *messageList, bool canAcceptInput, bool d _messageList = messageList; _messageListCount = _messageList ? _messageList->size() : 0; _messageListIndex = 0; - _isKlaymanBusy = false; + _isKlaymenBusy = false; _canAcceptInput = canAcceptInput; _doConvertMessages = doConvertMessages; _messageListStatus = 1; - sendMessage(_klayman, 0x101C, 0); + sendMessage(_klaymen, 0x101C, 0); } bool Scene::setMessageList2(uint32 id, bool canAcceptInput, bool doConvertMessages) { @@ -385,9 +385,9 @@ bool Scene::isMessageList2(uint32 id) { } void Scene::processMessageList() { - debug(7, "Scene::processMessageList() _isMessageListBusy = %d; _isKlaymanBusy = %d", _isMessageListBusy, _isKlaymanBusy); + debug(7, "Scene::processMessageList() _isMessageListBusy = %d; _isKlaymenBusy = %d", _isMessageListBusy, _isKlaymenBusy); - if (_isMessageListBusy || _isKlaymanBusy) + if (_isMessageListBusy || _isKlaymenBusy) return; _isMessageListBusy = true; @@ -397,7 +397,7 @@ void Scene::processMessageList() { _messageListStatus = 0; } - if (_messageList && _klayman) { + if (_messageList && _klaymen) { #if 0 debug("MessageList: %p, %d", (void*)_messageList, _messageList->size()); @@ -408,13 +408,13 @@ void Scene::processMessageList() { debug("--------------------------------"); #endif - while (_messageList && _messageListIndex < _messageListCount && !_isKlaymanBusy) { + while (_messageList && _messageListIndex < _messageListCount && !_isKlaymenBusy) { uint32 messageNum = (*_messageList)[_messageListIndex].messageNum; uint32 messageParam = (*_messageList)[_messageListIndex].messageValue; ++_messageListIndex; if (_messageListIndex == _messageListCount) - sendMessage(_klayman, 0x1021, 0); + sendMessage(_klaymen, 0x1021, 0); if (_doConvertMessages) messageNum = convertMessageNum(messageNum); if (messageNum == 0x1009 || messageNum == 0x1024) { @@ -423,8 +423,8 @@ void Scene::processMessageList() { _messageValue = messageParam; sendMessage(_parentModule, messageNum, messageParam); } else if (messageNum == 0x4001) { - _isKlaymanBusy = true; - sendPointMessage(_klayman, 0x4001, _mouseClickPos); + _isKlaymenBusy = true; + sendPointMessage(_klaymen, 0x4001, _mouseClickPos); } else if (messageNum == 0x100D) { if (this->hasMessageHandler() && sendMessage(this, 0x100D, messageParam) != 0) continue; @@ -440,9 +440,9 @@ void Scene::processMessageList() { return; } } else if (messageNum != 0x4003) { - _isKlaymanBusy = true; - if (_klayman->hasMessageHandler() && sendMessage(_klayman, messageNum, messageParam) != 0) { - _isKlaymanBusy = false; + _isKlaymenBusy = true; + if (_klaymen->hasMessageHandler() && sendMessage(_klaymen, messageNum, messageParam) != 0) { + _isKlaymenBusy = false; } } if (_messageListIndex == _messageListCount) { @@ -457,10 +457,10 @@ void Scene::processMessageList() { } void Scene::cancelMessageList() { - _isKlaymanBusy = false; + _isKlaymenBusy = false; _messageList = NULL; _canAcceptInput = true; - sendMessage(_klayman, 0x4004, 0); + sendMessage(_klaymen, 0x4004, 0); } void Scene::setRectList(uint32 id) { @@ -488,8 +488,8 @@ void Scene::loadHitRectList() { void Scene::loadDataResource(uint32 fileHash) { _dataResource.load(fileHash); _rectType = 2; - if (_klayman) - _klayman->loadDataResource(fileHash); + if (_klaymen) + _klaymen->loadDataResource(fileHash); } uint16 Scene::convertMessageNum(uint32 messageNum) { diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h index 39455c78fa..1abcbfb964 100644 --- a/engines/neverhood/scene.h +++ b/engines/neverhood/scene.h @@ -28,7 +28,7 @@ #include "neverhood/background.h" #include "neverhood/entity.h" #include "neverhood/graphics.h" -#include "neverhood/klayman.h" +#include "neverhood/klaymen.h" #include "neverhood/module.h" #include "neverhood/palette.h" #include "neverhood/smackerplayer.h" @@ -72,34 +72,34 @@ public: void removeCollisionSprite(Sprite *sprite); void checkCollision(Sprite *sprite, uint16 flags, int messageNum, uint32 messageParam); // Some crazy templated functions to make the logic code smaller/simpler (imo!) - // insertKlayman + // insertKlaymen template - void insertKlayman() { - _klayman = (T*)addSprite(new T(_vm, this)); + void insertKlaymen() { + _klaymen = (T*)addSprite(new T(_vm, this)); } template - void insertKlayman(Arg1 arg1) { - _klayman = (T*)addSprite(new T(_vm, this, arg1)); + void insertKlaymen(Arg1 arg1) { + _klaymen = (T*)addSprite(new T(_vm, this, arg1)); } template - void insertKlayman(Arg1 arg1, Arg2 arg2) { - _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2)); + void insertKlaymen(Arg1 arg1, Arg2 arg2) { + _klaymen = (T*)addSprite(new T(_vm, this, arg1, arg2)); } template - void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3) { - _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3)); + void insertKlaymen(Arg1 arg1, Arg2 arg2, Arg3 arg3) { + _klaymen = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3)); } template - void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) { - _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4)); + void insertKlaymen(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) { + _klaymen = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4)); } template - void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) { - _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4, arg5)); + void insertKlaymen(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) { + _klaymen = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4, arg5)); } template - void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) { - _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4, arg5, arg6)); + void insertKlaymen(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) { + _klaymen = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4, arg5, arg6)); } // insertSprite template @@ -164,7 +164,7 @@ protected: Common::Array _entities; Common::Array _surfaces; - Klayman *_klayman; + Klaymen *_klaymen; Background *_background; Palette *_palette; SmackerPlayer *_smackerPlayer; @@ -177,7 +177,7 @@ protected: bool _doConvertMessages; bool _canAcceptInput; - bool _isKlaymanBusy; + bool _isKlaymenBusy; bool _isMessageListBusy; Mouse *_mouseCursor; -- cgit v1.2.3