void sceneHandler32_trySit(ExCommand *cmd) { MessageQueue *mq = g_fp->_globalMessageQueueList->getMessageQueueById(cmd->_parId); if (!mq || mq->getCount() == 0) return; ExCommand *ex = mq->getExCommandByIndex(0); if (g_vars->scene32_cactusIsGrowing || g_vars->scene32_cactus->_movement || g_vars->scene32_cactus->_statics->_staticsId != ST_CTS_EMPTY || (g_vars->scene32_cactusCounter >= 0 && g_vars->scene32_cactusCounter <= 20)) { ex->_messageKind = 0; ex->_excFlags |= 1; } else { ex->_parentId = ANI_MAN; ex->_messageKind = 1; ex->_messageNum = MV_MAN32_SITDOWN; ex->_param = g_fp->_aniMan->_odelay; g_vars->scene32_dudeIsSitting = true; getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); } }
void sceneHandler11_manToSwing() { g_vars->scene11_arcadeIsOn = true; getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_aniMan2->hide(); g_vars->scene11_swingCounter = 0; g_vars->scene11_swingInertia = 1.28; //1.9849218; g_vars->scene11_dudeOnSwing->_flags &= 0xFFFB; g_vars->scene11_dudeOnSwing = g_fp->_currentScene->getStaticANIObject1ById(ANI_MAN11, -1); g_vars->scene11_dudeOnSwing->_statics = g_vars->scene11_dudeOnSwing->getStaticsById(ST_MAN11_EMPTY); g_vars->scene11_dudeOnSwing->_movement = 0; g_vars->scene11_dudeOnSwing->show1(690, 215, MV_MAN11_SWING_0, 0); g_vars->scene11_dudeOnSwing->_priority = 20; g_vars->scene11_dudeOnSwing->startAnim(MV_MAN11_SWING_0, 0, -1); g_vars->scene11_dudeOnSwing->_movement->setDynamicPhaseIndex(45); g_vars->scene11_mgm.addItem(g_fp->_aniMan->_id); g_fp->_currentScene->_x = 1400 - g_fp->_sceneRect.right; g_vars->scene11_scrollIsEnabled = true; g_fp->_updateScreenCallback = sceneHandler11_updateScreenCallback; }
void scene26_initScene(Scene *sc) { g_vars->scene26_chhi = sc->getStaticANIObject1ById(ANI_CHHI, -1); g_vars->scene26_drop = sc->getStaticANIObject1ById(ANI_DROP_26, -1); g_vars->scene26_sockPic = sc->getPictureObjectById(PIC_SC26_SOCK, 0); g_vars->scene26_sock = sc->getStaticANIObject1ById(ANI_SOCK_26, -1); if (g_fp->getObjectState(sO_Hatch_26) == g_fp->getObjectEnumState(sO_Hatch_26, sO_WithSock)) { g_fp->setObjectState(sO_Hatch_26, g_fp->getObjectEnumState(sO_Hatch_26, sO_Closed)); g_fp->setObjectState(sO_Sock_26, g_fp->getObjectEnumState(sO_Sock_26, sO_HangsOnPipe)); } Interaction *inter = getGameLoaderInteractionController()->getInteractionByObjectIds(ANI_LUK26, ANI_MAN, ANI_INV_SOCK); if (getGameLoaderInventory()->getCountItemsWithId(ANI_INV_VENT) == 0) inter->_flags &= 0xFFFDFFFF; else inter->_flags |= 0x20000; if (g_fp->getObjectState(sO_Sock_26) == g_fp->getObjectEnumState(sO_Sock_26, sO_HangsOnPipe)) g_vars->scene26_sockPic->_flags |= 4; else g_vars->scene26_sockPic->_flags &= 0xFFFB; if (g_fp->getObjectState(sO_Valve1_26) == g_fp->getObjectEnumState(sO_Valve1_26, sO_Opened)) g_fp->playSound(SND_26_018, 1); }
void sceneHandler27_throwBat() { if (getGameLoaderInteractionController()->_flag24) g_fp->_updateScreenCallback = sceneHandler27_updateScreenCallback; g_fp->_aniMan->_callback2 = sceneHandler27_aniManCallback; g_fp->_aniMan->startAnim(MV_MAN27_THROWBET, 0, -1); getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0); g_vars->scene27_maxPhaseReached = false; g_vars->scene27_bat->hide(); }
void sceneHandler11_restartMan() { chainObjQueue(0, QU_SC11_RESTARTMAN, 1); getGameLoaderInteractionController()->enableFlag24(); getCurrSceneSc2MotionController()->activate(); g_vars->scene11_scrollIsEnabled = false; }
void sceneHandler27_batLogic() { if (g_vars->scene27_balls.size()) { g_vars->scene27_bat = g_vars->scene27_balls[0]; g_vars->scene27_balls.remove_at(0); int mv; switch (g_vars->scene27_batHandler->_statics->_staticsId) { case ST_BTH_5: mv = MV_BTH_5_4; break; case ST_BTH_4: mv = MV_BTH_4_3; break; case ST_BTH_3: mv = MV_BTH_3_2; break; case ST_BTH_2: mv = MV_BTH_2_1; break; case ST_BTH_1: mv = MV_BTH_1_0; break; default: chainQueue(QU_SC27_RESTARTBETS, 1); getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); return; } MessageQueue *mq = new MessageQueue(g_fp->_globalMessageQueueList->compact()); mq->setFlags(mq->getFlags() | 1); ExCommand *ex = new ExCommand(g_vars->scene27_batHandler->_id, 1, mv, 0, 0, 0, 1, 0, 0, 0); ex->_excFlags |= 2; mq->addExCommandToEnd(ex); ex = new ExCommand(0, 17, MSG_SC27_CLICKBET, 0, 0, 0, 1, 0, 0, 0); ex->_excFlags |= 3; mq->addExCommandToEnd(ex); mq->chain(0); } else { g_vars->scene27_bat = 0; } }
void sceneHandler29_manFromR() { getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); chainQueue(QU_SC29_MANFROM_R, 1); g_vars->scene29_arcadeIsOn = false; g_vars->scene29_rideBackEnabled = false; }
void sceneHandler29_manFromR() { getCurrSceneSc2MotionController()->setEnabled(); getGameLoaderInteractionController()->enableFlag24(); chainQueue(QU_SC29_MANFROM_R, 1); g_vars->scene29_var10 = 0; g_vars->scene29_var12 = 0; }
int sceneHandler27_updateScreenCallback() { int res; res = g_fp->drawArcadeOverlay(getGameLoaderInteractionController()->_flag24 == 0); if (!res) g_fp->_updateScreenCallback = 0; return res; }
void sceneHandler27_driverGiveVent() { g_vars->scene27_driver->changeStatics2(ST_DRV_VENT); g_vars->scene27_driver->startMQIfIdle(QU_DRV_GIVEVENT, 1); g_vars->scene27_driverHasVent = false; getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); }
void sceneHandler29_manFromL() { if (g_vars->scene29_var20 < 497 && !g_vars->scene29_var17) { getCurrSceneSc2MotionController()->setEnabled(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_aniMan->changeStatics2(ST_MAN_RIGHT | 0x4000); chainQueue(QU_SC29_MANFROM_L, 1); g_vars->scene29_var17 = 1; g_fp->_scrollSpeed = g_vars->scene29_var16; } }
void sceneHandler29_manFromL() { if (g_vars->scene29_manX < 497 && !g_vars->scene29_scrollingDisabled) { getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_fp->_aniMan->changeStatics2(ST_MAN_RIGHT | 0x4000); chainQueue(QU_SC29_MANFROM_L, 1); g_vars->scene29_scrollingDisabled = true; g_fp->_scrollSpeed = g_vars->scene29_scrollSpeed; } }
void sceneHandler29_manToR() { getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); chainQueue(QU_SC29_MANTO_R, 1); g_vars->scene29_manIsRiding = true; g_fp->_msgY = -1; g_fp->_msgX = -1; g_vars->scene29_scrollingDisabled = false; g_vars->scene29_scrollSpeed = g_fp->_scrollSpeed; g_fp->_scrollSpeed = 4; }
void sceneHandler29_manToL() { getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); chainQueue(QU_SC29_MANTO_L, 1); g_vars->scene29_arcadeIsOn = true; g_vars->scene29_mgm.addItem(g_fp->_aniMan->_id); g_fp->_updateScreenCallback = sceneHandler29_updateScreenCallback; g_fp->_msgY = -1; g_fp->_msgX = -1; }
void sceneHandler29_manToR() { getCurrSceneSc2MotionController()->clearEnabled(); getGameLoaderInteractionController()->disableFlag24(); chainQueue(QU_SC29_MANTO_R, 1); g_vars->scene29_var09 = 1; g_fp->_msgY = -1; g_fp->_msgX = -1; g_vars->scene29_var17 = 0; g_vars->scene29_var16 = g_fp->_scrollSpeed; g_fp->_scrollSpeed = 4; }
bool sceneHandler14_arcadeProcessClick(ExCommand *cmd) { if (!getCurrSceneSc2MotionController()->_isEnabled) return 0; if (!g_vars->scene14_grandmaIsHere) { if (!cmd->_keyCode) { if (g_vars->scene14_pink) { if (g_vars->scene14_pink->_flags & 4) { if (cmd->_sceneClickX < g_vars->scene14_pink->_ox + 40) { handleObjectInteraction(g_fp->_aniMan, g_vars->scene14_pink, 0); cmd->_messageKind = 0; return true; } } } } return false; } if (getCurrSceneSc2MotionController()->_objtype != kObjTypeMctlCompound) return false; if (!getCurrSceneSc2MotionController()->_motionControllers[0]->_movGraphReactObj->pointInRegion(cmd->_sceneClickX, cmd->_sceneClickY)) return false; if (cmd->_sceneClickX > 1237) return false; MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 1237, 451, 1, 0); if (!mq) return false; ExCommand *ex = new ExCommand(0, 17, MSG_SC14_STARTARCADE, 0, 0, 0, 1, 0, 0, 0); ex->_excFlags |= 3; mq->addExCommandToEnd(ex); mq->setFlags(mq->getFlags() | 1); postExCommand(g_fp->_aniMan->_id, 2, 1237, 451, 0, -1); cmd->_messageKind = 0; getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); return true; }
void sceneHandler06_winArcade() { g_fp->setObjectState(sO_BigMumsy, g_fp->getObjectEnumState(sO_BigMumsy, sO_IsGone)); if (g_fp->getObjectState(sO_ClockAxis) == g_fp->getObjectEnumState(sO_ClockAxis, sO_IsNotAvailable)) g_fp->setObjectState(sO_ClockAxis, g_fp->getObjectEnumState(sO_ClockAxis, sO_WithoutHandle)); if (g_vars->scene06_arcadeEnabled) { g_fp->_aniMan->_callback2 = 0; g_fp->_aniMan->changeStatics2(ST_MAN_RIGHT | 0x4000); if (g_vars->scene06_someBall) { g_vars->scene06_someBall->_flags &= 0xFFFB; g_vars->scene06_balls.push_back(g_vars->scene06_someBall); g_vars->scene06_someBall = 0; } if (g_vars->scene06_flyingBall) { g_vars->scene06_flyingBall->_flags &= 0xFFFB; g_vars->scene06_balls.push_back(g_vars->scene06_flyingBall); g_vars->scene06_flyingBall = 0; } if (g_vars->scene06_ballInHands) { g_vars->scene06_ballInHands->_flags &= 0xFFFB; g_vars->scene06_balls.push_back(g_vars->scene06_ballInHands); g_vars->scene06_ballInHands = 0; } g_vars->scene06_arcadeEnabled = false; g_vars->scene06_aimingBall = false; } g_vars->scene06_mumsy->_flags &= 0xFFFB; sceneHandler06_setExits(g_fp->_currentScene); getCurrSceneSc2MotionController()->setEnabled(); getGameLoaderInteractionController()->enableFlag24(); }
void sceneHandler32_ladderLogic(ExCommand *cmd) { MessageQueue *mq = new MessageQueue(g_fp->_currentScene->getMessageQueueById(QU_SC32_FROMLADDER), 0, 0); if (g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY) != PIC_SC32_LADDER) mq->addExCommandToEnd(cmd->createClone()); mq->setFlags(mq->getFlags() | 1); g_fp->_aniMan->changeStatics2(ST_MAN_STANDLADDER); if (!mq->chain(g_fp->_aniMan)) delete mq; g_vars->scene32_dudeOnLadder = false; getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); }
int sceneHandlerDbgMenu(ExCommand *ex) { if (ex->_messageKind != 17) return 0; int mx = g_fp->_mouseScreenPos.x + g_fp->_sceneRect.left; int my = g_fp->_mouseScreenPos.y + g_fp->_sceneRect.top; if (ex->_messageNum == 29) { GameObject *obj = sceneHandlerDbgMenu_getObjectAtXY(mx, my); if (obj && canInteractAny(0, obj, -3) ) { getGameLoaderInteractionController()->enableFlag24(); handleObjectInteraction(0, obj, 0); } return 0; } if (ex->_messageNum != 33) { if (ex->_messageNum == MSG_RESTARTGAME) { g_fp->_needRestart = true; return 0; } return 0; } g_fp->_cursorId = PIC_CSR_DEFAULT; GameObject *obj = g_fp->_currentScene->getStaticANIObjectAtPos(mx, my); if (obj) { if (canInteractAny(0, obj, -3)) { g_fp->_cursorId = PIC_CSR_DEFAULT; g_fp->setCursor(PIC_CSR_DEFAULT); return 0; } } else { obj = sceneHandlerDbgMenu_getObjectAtXY(mx, my); if (obj && canInteractAny(0, obj, -3) ) { g_vars->selector->_flags |= 4; g_vars->selector->setOXY(obj->_ox, obj->_oy); g_fp->_cursorId = PIC_CSR_DEFAULT; g_fp->setCursor(PIC_CSR_DEFAULT); return 0; } g_vars->selector->_flags &= 0xFFFB; } g_fp->setCursor(g_fp->_cursorId); return 0; }
void sceneHandler14_exitScene() { g_vars->scene14_arcadeIsOn = false; if (g_fp->_aniMan->_movement) g_fp->_aniMan->_movement->gotoLastFrame(); g_fp->_aniMan->stopAnim_maybe(); handleObjectInteraction(g_fp->_aniMan, g_fp->_currentScene->getPictureObjectById(PIC_SC14_RTRUBA, 0), 0); g_vars->scene14_grandma->changeStatics2(ST_GMA_SIT); chainQueue(QU_SC14_ENDARCADE, 0); getGameLoaderInteractionController()->disableFlag24(); getCurrSceneSc2MotionController()->deactivate(); }
void sceneHandler06_startAiming() { if (g_vars->scene06_currentBall) { g_vars->scene06_currentBall->hide(); g_fp->_aniMan->startAnim(MV_MAN6_TAKEBALL, 0, -1); g_vars->scene06_ballInHands = g_vars->scene06_currentBall; g_vars->scene06_currentBall = 0; if (getCurrSceneSc2MotionController()->_isEnabled) g_fp->_updateScreenCallback = sceneHandler06_updateScreenCallback; getCurrSceneSc2MotionController()->clearEnabled(); getGameLoaderInteractionController()->disableFlag24(); g_vars->scene06_ballDrop->queueMessageQueue(0); } }
bool canInteractAny(GameObject *obj1, GameObject *obj2, int invId) { int sceneId = 0; if (g_fullpipe->_currentScene) sceneId = g_fullpipe->_currentScene->_sceneId; InteractionController *intC = getGameLoaderInteractionController(); for (ObList::iterator i = intC->_interactions.begin(); i != intC->_interactions.end(); ++i) { Interaction *intr = (Interaction *)*i; if (intr->_sceneId > 0 && intr->_sceneId != sceneId) break; if (invId == -3) { invId = getGameLoaderInventory()->getSelectedItemId(); } if (intr->canInteract(obj1, obj2, invId)) return true; } return false; }
void sceneHandler11_jumpFromSwing() { g_vars->scene11_arcadeIsOn = false; g_vars->scene11_hint->_flags &= 0xFFFB; g_vars->scene11_scrollIsEnabled = false; getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_vars->scene11_swingOldAngle = 0.0; g_vars->scene11_swingAngleDiff = 0.0; g_vars->scene11_swingSpeed = 0.0; g_vars->scene11_swingAngle = 0.0; g_vars->scene11_dudeOnSwing = g_fp->_currentScene->getStaticANIObject1ById(ANI_MAN11, -1); g_vars->scene11_dudeOnSwing->_flags &= 0xFFFB; g_vars->scene11_dudeOnSwing = g_fp->_currentScene->getStaticANIObject1ById(ANI_KACHELI, -1); g_vars->scene11_dudeOnSwing->changeStatics2(ST_KCH_STATIC); g_vars->scene11_dudeOnSwing->setOXY(691, 371); g_vars->scene11_dudeOnSwing->_priority = 20; g_vars->scene11_dudeOnSwing->_flags |= 4; MessageQueue *mq = new MessageQueue(g_fp->_globalMessageQueueList->compact()); ExCommand *ex = new ExCommand(g_fp->_aniMan->_id, 34, 256, 0, 0, 0, 1, 0, 0, 0); ex->_field_14 = 256; ex->_messageNum = 0; ex->_excFlags |= 3; mq->addExCommandToEnd(ex); mq->setFlags(mq->getFlags() | 1); g_fp->_globalMessageQueueList->addMessageQueue(mq); g_fp->_aniMan->_flags |= 0x104; g_fp->_aniMan->changeStatics2(ST_MAN11_SWING); g_fp->_aniMan->setOXY(685, 373); g_fp->_aniMan->startAnim(MV_MAN11_JUMPFROMSWING, mq->_id, -1); g_fp->_aniMan2 = g_fp->_aniMan; }
void sceneHandler14_startArcade() { g_vars->scene14_arcadeIsOn = true; g_vars->scene14_dudeCanKick = true; if (g_fp->_aniMan->_movement) { g_fp->_aniMan->changeStatics2(ST_MAN_RIGHT | 0x4000); g_fp->_aniMan->setOXY(1237, 451); g_fp->_aniMan->_priority = 25; } getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); g_fp->_aniMan2 = 0; g_vars->scene14_sceneDeltaX = 50; g_vars->scene14_sceneDiffX = 100; g_vars->scene14_hitsLeft = 4; g_vars->scene14_pink = 0; chainQueue(QU_SC14_STARTARCADE, 0); g_fp->_updateScreenCallback = sceneHandler14_updateScreenCallback; }
void sceneHandler14_endArcade() { g_vars->scene14_arcadeIsOn = false; setInputDisabled(0); getGameLoaderInteractionController()->enableFlag24(); getCurrSceneSc2MotionController()->activate(); BehaviorEntryInfo *beh = g_fp->_behaviorManager->getBehaviorEntryInfoByMessageQueueDataId(g_vars->scene14_grandma, ST_GMA_SIT, QU_GMA_BLINK); if (beh) beh->_percent = 327; beh = g_fp->_behaviorManager->getBehaviorEntryInfoByMessageQueueDataId(g_vars->scene14_grandma, ST_GMA_SIT, QU_GMA_THROW); if (beh) beh->_percent = 0; g_vars->scene14_sceneDeltaX = 200; g_vars->scene14_sceneDeltaY = 200; g_fp->_aniMan2 = g_fp->_aniMan; g_vars->scene14_sceneDiffX = 300; g_vars->scene14_sceneDiffY = 300; }
bool sceneHandler25_isOnLadder(ExCommand *cmd) { if ((g_fp->_aniMan->_movement && g_fp->_aniMan->_movement->_id == MV_MAN_GOLADDERDOWN) || g_fp->_aniMan->_statics->_staticsId == ST_MAN_GOLADDERD) { Interaction *inter = getGameLoaderInteractionController()->getInteractionByObjectIds(PIC_SC25_LADDERDOWN, ANI_MAN, cmd->_keyCode); if (!inter) return 0; MessageQueue *mq = new MessageQueue(inter->_messageQueue, 0, 1); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(PIC_SC25_LADDERDOWN, 0); Common::Point point; point.x = inter->_xOffs + pic->_ox; point.y = inter->_yOffs + pic->_oy; mq->setFlags(mq->getFlags() | 1); sceneHandler25_walkOnLadder(g_fp->_aniMan, &point, mq, 0); return true; } else { return false; } }
void sceneHandler08_startArcade() { g_vars->scene08_inArcade = true; g_vars->scene08_inAir = true; g_vars->scene08_flyingUp = false; g_vars->scene08_onBelly = false; getGameLoaderInteractionController()->disableFlag24(); getCurrSceneSc2MotionController()->clearEnabled(); g_vars->scene08_batuta->stopAnim_maybe(); g_vars->scene08_vmyats->_statics = g_vars->scene08_vmyats->getStaticsById(ST_VMT_MIN); g_vars->scene08_vmyats->setOXY(382, 703); g_vars->scene08_vmyats->_priority = 29; g_vars->scene08_vmyats->_callback2 = sceneHandler08_pushCallback; g_fp->_aniMan = g_fp->_currentScene->getStaticANIObject1ById(ANI_MAN, -1); g_vars->scene08_manOffsetY = 15; g_fp->_currentScene->_y = 0; g_fp->_updateScreenCallback = sceneHandler08_updateScreenCallback; }
void sceneHandler32_potLogic(ExCommand *cmd) { if (g_vars->scene32_cactusCounter < 0 || g_vars->scene32_cactusCounter > 20) { MessageQueue *mq = new MessageQueue(g_fp->_globalMessageQueueList->compact()); ExCommand *ex = new ExCommand(ANI_MAN, 1, MV_MAN32_STANDUP, 0, 0, 0, 1, 0, 0, 0); ex->_excFlags |= 2; mq->addExCommandToEnd(ex); StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); if (!ani || ani->_id != ANI_KADKA) mq->addExCommandToEnd(cmd->createClone()); mq->setFlags(mq->getFlags() | 1); mq->chain(0); getCurrSceneSc2MotionController()->activate(); getGameLoaderInteractionController()->enableFlag24(); g_vars->scene32_dudeIsSitting = false; } }
void sceneDbgMenu_initScene(Scene *sc) { g_vars->selector = sc->getPictureObjectById(PIC_SCD_SEL, 0); getGameLoaderInteractionController()->disableFlag24(); setInputDisabled(0); }
int sceneHandler06(ExCommand *ex) { if (ex->_messageKind != 17) return 0; switch(ex->_messageNum) { case MSG_LIFT_CLOSEDOOR: g_fp->lift_closedoorSeq(); break; case MSG_LIFT_EXITLIFT: g_fp->lift_exitSeq(ex); break; case MSG_CMN_WINARCADE: sceneHandler06_winArcade(); break; case MSG_LIFT_STARTEXITQUEUE: g_fp->lift_startExitQueue(); break; case MSG_SC6_RESTORESCROLL: g_fp->_aniMan2 = g_fp->_aniMan; getCurrSceneSc2MotionController()->setEnabled(); getGameLoaderInteractionController()->enableFlag24(); sceneHandler06_setExits(g_fp->_currentScene); break; case MSG_SC6_STARTDROPS: if (g_fp->getObjectState(sO_BigMumsy) == g_fp->getObjectEnumState(sO_BigMumsy, sO_IsSleeping)) sceneHandler06_enableDrops(); break; case MSG_SC6_TESTNUMBALLS: g_vars->scene06_mumsyGotBall = false; if (g_vars->scene06_mumsyNumBalls < 5 || !g_vars->scene06_arcadeEnabled) return 0; sceneHandler06_mumsyBallTake(); break; case MSG_SC6_JUMPFW: ++g_vars->scene06_mumsyPos; break; case MSG_SC6_JUMPBK: --g_vars->scene06_mumsyPos; break; case MSG_LIFT_CLICKBUTTON: g_fp->lift_clickButton(); break; case MSG_SPINHANDLE: sceneHandler06_spinHandle(); break; case MSG_LIFT_GO: g_fp->lift_goAnimation(); break; case MSG_SC6_UTRUBACLICK: sceneHandler06_uPipeClick(); break; case MSG_SC6_BTNPUSH: sceneHandler06_buttonPush(); break; case MSG_SC6_SHOWNEXTBALL: sceneHandler06_showNextBall(); break; case MSG_SC6_INSTHANDLE: sceneHandler06_installHandle(); break; case MSG_SC6_ENABLEDROPS: sceneHandler06_enableDrops(); break; case 64: g_fp->lift_hoverButton(ex); break; case MSG_SC6_TAKEBALL: sceneHandler06_takeBall(); break; case 30: if (g_vars->scene06_aimingBall) { sceneHandler06_aiming(); break; } if (!g_vars->scene06_arcadeEnabled) { // Do nothing break; } break; case 29: { StaticANIObject *st = g_fp->_currentScene->getStaticANIObjectAtPos(ex->_sceneClickX, ex->_sceneClickY); if (st) { if (!g_vars->scene06_arcadeEnabled && st->_id == ANI_LIFTBUTTON) { g_fp->lift_animateButton(st); ex->_messageKind = 0; return 0; } if (g_vars->scene06_currentBall == st) { if (g_vars->scene06_numBallsGiven == 1) sceneHandler06_takeBall(); ex->_messageKind = 0; } else if (g_vars->scene06_ballInHands && g_fp->_aniMan == st && !g_fp->_aniMan->_movement && g_fp->_aniMan->_statics->_staticsId == ST_MAN6_BALL) { g_vars->scene06_sceneClickX = ex->_sceneClickX; g_vars->scene06_sceneClickY = ex->_sceneClickY; sceneHandler06_throwBall(); } } if (!st || !canInteractAny(g_fp->_aniMan, st, ex->_keyCode)) { int picId = g_fp->_currentScene->getPictureObjectIdAtPos(ex->_sceneClickX, ex->_sceneClickY); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0); if (!pic || !canInteractAny(g_fp->_aniMan, pic, ex->_keyCode)) { if ((g_fp->_sceneRect.right - ex->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (ex->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0)) { g_fp->processArcade(ex); return 0; } } } } break; case 33: { int res = 0; if (g_fp->_aniMan2) { int ox = g_fp->_aniMan2->_ox; int oy = g_fp->_aniMan2->_oy; g_vars->scene06_manX = ox; g_vars->scene06_manY = oy; if (g_vars->scene06_arcadeEnabled && oy <= 470 && ox >= 1088) { if (ox < g_fp->_sceneRect.left + 600) { g_fp->_currentScene->_x = ox - g_fp->_sceneRect.left - 700; ox = g_vars->scene06_manX; } if (ox > g_fp->_sceneRect.right - 50) g_fp->_currentScene->_x = ox - g_fp->_sceneRect.right + 70; } else { if (ox < g_fp->_sceneRect.left + 200) { g_fp->_currentScene->_x = ox - g_fp->_sceneRect.left - 300; ox = g_vars->scene06_manX; } if (ox > g_fp->_sceneRect.right - 200) g_fp->_currentScene->_x = ox - g_fp->_sceneRect.right + 300; } res = 1; } if (g_vars->scene06_arcadeEnabled) { if (g_vars->scene06_mumsyPos > -3) g_vars->scene06_mumsyJumpBk->_percent = g_vars->scene06_mumsyJumpBkPercent; else g_vars->scene06_mumsyJumpBk->_percent = 0; if (g_vars->scene06_mumsyPos < 4) g_vars->scene06_mumsyJumpFw->_percent = g_vars->scene06_mumsyJumpFwPercent; else g_vars->scene06_mumsyJumpFw->_percent = 0; if (g_vars->scene06_aimingBall) { g_vars->scene06_eggieTimeout++; if (g_vars->scene06_eggieTimeout >= 600) sceneHandler06_eggieWalk(); } } else { g_vars->scene06_mumsyJumpFw->_percent = 0; g_vars->scene06_mumsyJumpBk->_percent = 0; } if (g_vars->scene06_flyingBall) { g_vars->scene06_ballX = g_vars->scene06_flyingBall->_ox - g_vars->scene06_ballDeltaX; g_vars->scene06_ballY = g_vars->scene06_flyingBall->_oy - g_vars->scene06_ballDeltaY; g_vars->scene06_flyingBall->setOXY(g_vars->scene06_ballX, g_vars->scene06_ballY); if (g_vars->scene06_ballDeltaX >= 2) g_vars->scene06_ballDeltaX -= 2; g_vars->scene06_ballDeltaY -= 5; sceneHandler06_checkBallTarget(g_vars->scene06_ballDeltaX); } if (g_vars->scene06_arcadeEnabled && !g_vars->scene06_currentBall && !g_vars->scene06_ballInHands && !g_vars->scene06_flyingBall && g_vars->scene06_numBallsGiven >= 15 && !g_vars->scene06_ballDrop->_movement && !g_vars->scene06_mumsy->_movement && !g_vars->scene06_mumsyGotBall) sceneHandler06_mumsyBallTake(); g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); return res; } } return 0; }