diff options
-rw-r--r-- | engines/fullpipe/constants.h | 3 | ||||
-rw-r--r-- | engines/fullpipe/scenes/scene29.cpp | 83 |
2 files changed, 86 insertions, 0 deletions
diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h index e670645431..3f568fd8b5 100644 --- a/engines/fullpipe/constants.h +++ b/engines/fullpipe/constants.h @@ -1296,9 +1296,11 @@ namespace Fullpipe { #define MV_ASS_HITGREEN 2138 #define MV_ASS_HITRED 2139 #define MV_MAN29_BEND 2091 +#define MV_MAN29_HIT 2088 #define MV_MAN29_JUMP 2090 #define MV_MAN29_RUN 2095 #define MV_MAN29_STANDUP 2092 +#define MV_MAN29_STANDUP_NORM 2093 #define MV_PTR_MOVEFAST 2102 #define MV_SHG_HITASS 2151 #define MV_SHR_HITASS 2152 @@ -1314,6 +1316,7 @@ namespace Fullpipe { #define SND_29_029 4759 #define ST_ASS_NORM 2122 #define ST_MAN29_RUNR 2140 +#define ST_MAN29_SITR 2141 #define ST_STR1_RIGHT 2143 #define ST_STR2_RIGHT 2144 #define ST_STR1_STAND 2110 diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp index 9e63ee803f..8d0fb5d6e1 100644 --- a/engines/fullpipe/scenes/scene29.cpp +++ b/engines/fullpipe/scenes/scene29.cpp @@ -231,6 +231,89 @@ bool sceneHandler29_sub15(StaticANIObject *ani, int maxx) { return true; } +bool sceneHandler29_sub16(StaticANIObject *ani, int maxx) { + if (!g_vars->scene29_var10 || g_vars->scene29_var15) + return false; + + if (ani->_ox >= g_vars->scene29_var20 + 40) { + if (maxx > g_vars->scene29_var20 + 27) + return false; + } else { + if (ani->_ox <= g_vars->scene29_var20 + 10) { + if (ani->_ox < g_vars->scene29_var20 + 40) + return false; + + if (maxx > g_vars->scene29_var20 + 27) + return false; + } + } + + if (!g_fp->_aniMan->_movement) + return true; + + if (g_fp->_aniMan->_movement->_id == MV_MAN29_JUMP) + return true; + + if (g_fp->_aniMan->_movement->_id == MV_MAN29_RUN) + return true; + + if (g_fp->_aniMan->_movement->_id == MV_MAN29_BEND) { + if (g_fp->_aniMan->_movement->_currDynamicPhaseIndex < 1 || g_fp->_aniMan->_movement->_currDynamicPhaseIndex > 5) + return true; + } + + return false; +} + +void sceneHandler29_manHit() { + MGMInfo mgminfo; + + g_vars->scene29_var15 = 1; + + g_fp->_aniMan->changeStatics2(ST_MAN29_RUNR); + g_fp->_aniMan->setOXY(g_vars->scene29_var20, g_vars->scene29_var21); + + mgminfo.ani = g_fp->_aniMan; + mgminfo.staticsId2 = ST_MAN29_SITR; + mgminfo.y1 = 463; + mgminfo.x1 = g_vars->scene29_var20 <= 638 ? 351 : 0; + mgminfo.field_1C = 10; + mgminfo.field_10 = 1; + mgminfo.flags = (g_vars->scene29_var20 <= 638 ? 2 : 0) | 0x44; + mgminfo.movementId = MV_MAN29_HIT; + + MessageQueue *mq = g_vars->scene29_mgm.genMovement(&mgminfo); + ExCommand *ex; + + if (mq) { + if (g_vars->scene29_var20 <= 638) { + ex = new ExCommand(ANI_MAN, 1, MV_MAN29_STANDUP_NORM, 0, 0, 0, 1, 0, 0, 0); + ex->_excFlags = 2; + ex->_keyCode = g_fp->_aniMan->_okeyCode; + mq->addExCommandToEnd(ex); + + ex = new ExCommand(0, 17, MSG_SC29_STOPRIDE, 0, 0, 0, 1, 0, 0, 0); + ex->_excFlags = 2; + mq->addExCommandToEnd(ex); + + g_vars->scene29_var09 = 0; + g_vars->scene29_var10 = 0; + g_vars->scene29_var11 = 0; + g_vars->scene29_var12 = 0; + } else { + ex = new ExCommand(ANI_MAN, 1, MV_MAN29_STANDUP, 0, 0, 0, 1, 0, 0, 0); + ex->_excFlags = 2; + ex->_keyCode = g_fp->_aniMan->_okeyCode; + mq->addExCommandToEnd(ex); + } + + mq->setFlags(mq->getFlags() | 1); + + if (!mq->chain(g_fp->_aniMan)) + delete mq; + } +} + void sceneHandler29_sub03() { warning("STUB: sceneHandler29_sub03()"); } |