diff options
author | Filippos Karapetis | 2013-10-06 18:55:10 +0300 |
---|---|---|
committer | Filippos Karapetis | 2013-10-06 18:57:44 +0300 |
commit | 0fffbac36bee764b3479b5d3fb631faf5bcd5f76 (patch) | |
tree | c65bdc2c46039aaca067abf6ae3b5808803125db /engines/neverhood/modules/module2400_sprites.cpp | |
parent | 8c8b1b7da749d69078b1be88a00d5ba29e64413a (diff) | |
download | scummvm-rg350-0fffbac36bee764b3479b5d3fb631faf5bcd5f76.tar.gz scummvm-rg350-0fffbac36bee764b3479b5d3fb631faf5bcd5f76.tar.bz2 scummvm-rg350-0fffbac36bee764b3479b5d3fb631faf5bcd5f76.zip |
NEVERHOOD: Move more scene-specific Klaymen animations to their scenes
Diffstat (limited to 'engines/neverhood/modules/module2400_sprites.cpp')
-rw-r--r-- | engines/neverhood/modules/module2400_sprites.cpp | 67 |
1 files changed, 65 insertions, 2 deletions
diff --git a/engines/neverhood/modules/module2400_sprites.cpp b/engines/neverhood/modules/module2400_sprites.cpp index b6e91cac6e..bf85b0dc37 100644 --- a/engines/neverhood/modules/module2400_sprites.cpp +++ b/engines/neverhood/modules/module2400_sprites.cpp @@ -354,7 +354,9 @@ uint32 AsScene2402TV::hmJoke(int messageNum, const MessageParam ¶m, Entity * } KmScene2401::KmScene2401(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { + : Klaymen(vm, parentScene, x, y), + _canSpitPipe(false), _contSpitPipe(false), _readyToSpit(false), + _spitPipeIndex(0), _spitDestPipeIndex(0), _spitContDestPipeIndex(0) { // Empty } @@ -419,7 +421,7 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) { GotoState(&Klaymen::stWonderAbout); else { _spitPipeIndex = sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klaymen::stTrySpitIntoPipe); + GotoState(&KmScene2401::stTrySpitIntoPipe); } break; case 0x483F: @@ -432,6 +434,67 @@ uint32 KmScene2401::xHandleMessage(int messageNum, const MessageParam ¶m) { return messageResult; } +uint32 KmScene2401::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 KmScene2401::stTrySpitIntoPipe() { + if (_readyToSpit) { + _contSpitPipe = true; + _spitContDestPipeIndex = _spitPipeIndex; + if (_canSpitPipe) + spitIntoPipe(); + } else if (!stStartAction(AnimationCallback(&KmScene2401::stTrySpitIntoPipe))) { + _busyStatus = 2; + _acceptInput = true; + _spitDestPipeIndex = _spitPipeIndex; + _readyToSpit = true; + _canSpitPipe = false; + _contSpitPipe = false; + startAnimation(0x1808B150, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&KmScene2401::hmSpit); + SetSpriteUpdate(NULL); + } +} + +void KmScene2401::spitIntoPipe() { + _contSpitPipe = false; + _spitDestPipeIndex = _spitContDestPipeIndex; + _canSpitPipe = false; + _acceptInput = false; + startAnimation(0x1B08B553, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&KmScene2401::hmSpit); + SetSpriteUpdate(NULL); + NextState(&KmScene2401::stContSpitIntoPipe); +} + +void KmScene2401::stContSpitIntoPipe() { + _canSpitPipe = true; + _acceptInput = true; + startAnimationByHash(0x1808B150, 0x16401CA6, 0); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&KmScene2401::hmSpit); + SetSpriteUpdate(NULL); +} + KmScene2402::KmScene2402(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) : Klaymen(vm, parentScene, x, y) { |