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; }
int sceneHandler13(ExCommand *cmd) { if (cmd->_messageKind != 17) return 0; switch(cmd->_messageNum) { case MSG_SC13_OPENBRIDGE: sceneHandler13_openBridge(); break; case MSG_SC13_TESTCLOSE: sceneHandler13_testClose(); break; case MSG_SC13_TESTOPEN: sceneHandler13_testOpen(); break; case MSG_SC13_CLOSEBRIDGE: sceneHandler13_closeBridge(); break; case MSG_SC13_CLOSEFAST: sceneHandler13_closeFast(); break; case MSG_SC13_STOPWHIRLGIG: sceneHandler13_stopWhirlgig(); break; case MSG_SC13_STARTWHIRLGIG: sceneHandler13_startWhirlgig(); break; case MSG_SC13_OPENFAST: sceneHandler13_openFast(); break; case MSG_SC13_UNEATGUM: sceneHandler13_uneatGum(); break; case MSG_SC13_EATGUM: sceneHandler13_eatGum(); break; case MSG_SC13_CHEW: g_vars->scene13_guard->_flags &= 0xFF7Fu; break; case MSG_SC13_UPDATEBRIDGE: sceneHandler13_updateBridge(); break; case MSG_SC13_SHOWGUM: sceneHandler13_showGum(); break; case 29: { StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); if (!ani || !canInteractAny(g_fp->_aniMan, ani, cmd->_keyCode)) { int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0); if (!pic || !canInteractAny(g_fp->_aniMan, pic, cmd->_keyCode)) { if ((g_fp->_sceneRect.right - cmd->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (cmd->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0)) { g_fp->processArcade(cmd); } } } break; } case 33: { int res = 0; int x; if (g_fp->_aniMan2) { x = g_fp->_aniMan2->_ox; g_vars->scene13_dudeX = x; if (x < g_fp->_sceneRect.left + 200) g_fp->_currentScene->_x = x - g_fp->_sceneRect.left - 300; if (x > g_fp->_sceneRect.right - 200) g_fp->_currentScene->_x = x - g_fp->_sceneRect.right + 300; res = 1; } else { x = g_vars->scene13_dudeX; } if (g_vars->scene13_guardDirection) { if (x < 1022) { sceneHandler13_walkForward(1); sceneHandler13_walkBackward(0); g_vars->scene13_guardDirection = false; g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); return res; } } else if (x > 1022) { sceneHandler13_walkForward(0); sceneHandler13_walkBackward(1); g_vars->scene13_guardDirection = true; } g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); return res; } } return 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; }
int sceneHandler37(ExCommand *cmd) { if (cmd->_messageKind != 17) return 0; switch(cmd->_messageNum) { case MSG_SC37_EXITLEFT: sceneHandler37_updateRing(0); sceneHandler37_updateRing(1); sceneHandler37_updateRing(2); break; case 29: { StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); if (!ani || !canInteractAny(g_fp->_aniMan, ani, cmd->_keyCode)) { int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0); if (!pic || !canInteractAny(g_fp->_aniMan, pic, cmd->_keyCode)) { if ((g_fp->_sceneRect.right - cmd->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (cmd->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0)) { g_fp->processArcade(cmd); break; } } } } break; case 33: if (g_fp->_aniMan2) { int x = g_fp->_aniMan2->_ox; g_vars->scene37_dudeX = x; if (x >= 500) { if (x < g_fp->_sceneRect.left + 200) g_fp->_currentScene->_x = x - 300 - g_fp->_sceneRect.left; } else { g_fp->_currentScene->_x = -g_fp->_sceneRect.left; } x = g_vars->scene37_dudeX; if (x > g_fp->_sceneRect.right - 200) g_fp->_currentScene->_x = x + 300 - g_fp->_sceneRect.right; } sceneHandler37_setRingsState(); g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); ++g_vars->scene37_soundFlipper; break; case MSG_SC37_PULL: if (g_vars->scene37_rings[0]->ani->_movement && g_vars->scene37_rings[0]->ani->_movement->_id == MV_GRD37_PULL) { if ((g_fp->getObjectState(sO_Guard_1) == g_fp->getObjectEnumState(sO_Guard_1, sO_On) && !g_vars->scene37_rings[0]->state) || (g_fp->getObjectState(sO_Guard_1) == g_fp->getObjectEnumState(sO_Guard_1, sO_Off) && g_vars->scene37_rings[0]->state)) { g_vars->scene37_plusMinus1->_statics = g_vars->scene37_plusMinus1->getStaticsById(ST_PMS_PLUS); } else { g_vars->scene37_plusMinus1->_statics = g_vars->scene37_plusMinus1->getStaticsById(ST_PMS_MINUS); } } else if (g_vars->scene37_rings[1]->ani->_movement && g_vars->scene37_rings[1]->ani->_movement->_id == MV_GRD37_PULL) { if ((g_fp->getObjectState(sO_Guard_2) == g_fp->getObjectEnumState(sO_Guard_2, sO_On) && !g_vars->scene37_rings[1]->state) || (g_fp->getObjectState(sO_Guard_2) == g_fp->getObjectEnumState(sO_Guard_2, sO_Off) && g_vars->scene37_rings[1]->state)) { g_vars->scene37_plusMinus2->_statics = g_vars->scene37_plusMinus2->getStaticsById(ST_PMS_PLUS); } else { g_vars->scene37_plusMinus2->_statics = g_vars->scene37_plusMinus2->getStaticsById(ST_PMS_MINUS); } } else if (g_vars->scene37_rings[2]->ani->_movement && g_vars->scene37_rings[2]->ani->_movement->_id == MV_GRD37_PULL) { if ((g_fp->getObjectState(sO_Guard_3) == g_fp->getObjectEnumState(sO_Guard_3, sO_On) && !g_vars->scene37_rings[2]->state) || (g_fp->getObjectState(sO_Guard_3) == g_fp->getObjectEnumState(sO_Guard_3, sO_Off) && g_vars->scene37_rings[2]->state)) { g_vars->scene37_plusMinus3->_statics = g_vars->scene37_plusMinus3->getStaticsById(ST_PMS_PLUS); } else { g_vars->scene37_plusMinus3->_statics = g_vars->scene37_plusMinus3->getStaticsById(ST_PMS_MINUS); } } if (g_vars->scene37_soundFlipper) { g_fp->playSound(SND_37_007, 0); g_vars->scene37_soundFlipper = 0; } break; } return 0; }
int sceneHandler14(ExCommand *cmd) { if (cmd->_messageKind != 17) return 0; switch(cmd->_messageNum) { case MSG_SC14_SHOWBALLGMAHIT2: sceneHandler14_showBallGrandmaHit2(); break; case MSG_SC14_SHOWBALLGMADIVE: sceneHandler14_showBallGrandmaDive(); break; case MSG_LIFT_CLICKBUTTON: g_fp->lift_clickButton(); break; case MSG_SC14_SHOWBALLGMAHIT: sceneHandler14_showBallGrandmaHit(); break; case MSG_SC14_SHOWBALLMAN: sceneHandler14_showBallMan(); break; case MSG_SC14_MANKICKBALL: sceneHandler14_manKickBall(); break; case MSG_SC14_SHOWBALLFLY: sceneHandler14_showBallFly(); break; case MSG_LIFT_GO: g_fp->lift_goAnimation(); break; case MSG_SC14_GMAJUMP: sceneHandler14_grandmaJump(); break; case MSG_LIFT_CLOSEDOOR: g_fp->lift_closedoorSeq(); break; case MSG_LIFT_EXITLIFT: g_fp->lift_exitSeq(cmd); break; case MSG_LIFT_STARTEXITQUEUE: g_fp->lift_startExitQueue(); break; case MSG_SC14_RESTORESCROLL: g_fp->_aniMan2 = g_fp->_aniMan; g_fp->_scrollSpeed = 8; break; case MSG_CMN_WINARCADE: sceneHandler14_winArcade(); break; case MSG_SC14_SCROLLLEFT: g_fp->_aniMan2 = 0; g_fp->_currentScene->_x = -g_fp->_sceneRect.left; g_fp->_scrollSpeed = 24; break; case MSG_SC14_SHOWBALLLAST: sceneHandler14_showBallLast(); break; case MSG_SC14_HIDEBALLLAST: sceneHandler14_hideBallLast(); break; case MSG_SC14_HIDEPINK: if (!g_vars->scene14_pink) break; g_vars->scene14_pink->hide(); break; case MSG_SC14_GMATOTRUBA: g_fp->_currentScene->_x = -g_fp->_sceneRect.left; break; case MSG_SC14_STARTARCADE: sceneHandler14_startArcade(); break; case MSG_SC14_ENDARCADE: sceneHandler14_endArcade(); g_vars->scene14_grandmaIsHere = false; break; case 64: g_fp->lift_hoverButton(cmd); break; case 33: { Movement *mov = g_fp->_aniMan->_movement; if (mov) { g_vars->scene14_dudeX = mov->_ox; g_vars->scene14_dudeY = mov->_oy; if (mov->_id == MV_MAN14_KICK) g_vars->scene14_dudeX = mov->_ox + 2 * g_fp->_aniMan->_movement->_currDynamicPhaseIndex; } else { g_vars->scene14_dudeX = g_fp->_aniMan->_ox; g_vars->scene14_dudeY = g_fp->_aniMan->_oy; } mov = g_vars->scene14_grandma->_movement; if (mov) { g_vars->scene14_grandmaX = mov->_ox; g_vars->scene14_grandmaY = mov->_oy; } else { g_vars->scene14_grandmaX = g_vars->scene14_grandma->_ox; g_vars->scene14_grandmaY = g_vars->scene14_grandma->_oy; } if (g_fp->_aniMan2) { int x = g_fp->_aniMan2->_ox; g_vars->scene14_dude2X = x; if (x < g_fp->_sceneRect.left + g_vars->scene14_sceneDeltaX) { g_fp->_currentScene->_x = x - g_vars->scene14_sceneDiffX - g_fp->_sceneRect.left; x = g_vars->scene14_dude2X; } if (x > g_fp->_sceneRect.right - g_vars->scene14_sceneDeltaX) g_fp->_currentScene->_x = x + g_vars->scene14_sceneDiffX - g_fp->_sceneRect.right; } if (g_vars->scene14_ballIsFlying) sceneHandler14_animateBall(); g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); break; } case 30: if (g_vars->scene14_dudeIsKicking) { sceneHandler14_kickAnimation(); break; } if (!g_vars->scene14_arcadeIsOn) { break; } break; case 29: if (g_vars->scene14_arcadeIsOn) { int pixel; if (g_vars->scene14_dudeCanKick && g_fp->_aniMan->getPixelAtPos(cmd->_sceneClickX, cmd->_sceneClickY, &pixel) && !g_fp->_aniMan->_movement) { sceneHandler14_dudeDecline(); break; } } else { StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); if (ani && ani->_id == ANI_LIFTBUTTON) { g_fp->lift_animateButton(ani); cmd->_messageKind = 0; break; } if (!sceneHandler14_arcadeProcessClick(cmd) && (!ani || !canInteractAny(g_fp->_aniMan, ani, cmd->_keyCode))) { int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0); if (!pic || !canInteractAny(g_fp->_aniMan, pic, cmd->_keyCode)) { if ((g_fp->_sceneRect.right - cmd->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (cmd->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0)) { g_fp->processArcade(cmd); sceneHandler14_arcadeProcessClick(cmd); break; } } } } break; } return 0; }
void FullpipeEngine::updateCursorCommon() { GameObject *ani = _currentScene->getStaticANIObjectAtPos(_mouseVirtX, _mouseVirtY); GameObject *pic = _currentScene->getPictureObjectAtPos(_mouseVirtX, _mouseVirtY); if (!ani || (pic && pic->_priority < ani->_priority)) ani = pic; int selId = getGameLoaderInventory()->getSelectedItemId(); _objectAtCursor = ani; if (ani) { _objectIdAtCursor = ani->_id; if (!selId && ani->_id >= _minCursorId && ani->_id <= _maxCursorId) { selId = _objectIdCursors[ani->_id - _minCursorId]; if (selId) { _cursorId = selId; return; } } if (canInteractAny(_aniMan, ani, selId)) { _cursorId = selId > 0 ? PIC_CSR_ITN_INV : PIC_CSR_ITN; return; } if (selId) { _cursorId = PIC_CSR_DEFAULT_INV; return; } if (_objectIdAtCursor == ANI_LIFTBUTTON && lift_getButtonIdP(((StaticANIObject *)ani)->_statics->_staticsId)) { _cursorId = PIC_CSR_LIFT; return; } if (_sceneRect.right - _mouseVirtX < 47 && _sceneRect.right < _sceneWidth - 1) { _cursorId = PIC_CSR_GOFAR_R; return; } if (_mouseVirtX - _sceneRect.left < 47 && _sceneRect.left > 0) { _cursorId = PIC_CSR_GOFAR_L; return; } _cursorId = PIC_CSR_DEFAULT; return; } else { _objectIdAtCursor = 0; if (selId) { _cursorId = PIC_CSR_DEFAULT_INV; return; } if (_sceneRect.right - _mouseVirtX < 47 && _sceneRect.right < _sceneWidth - 1) { _cursorId = PIC_CSR_GOFAR_R; return; } if (_mouseVirtX - _sceneRect.left < 47 && _sceneRect.left > 0) { _cursorId = PIC_CSR_GOFAR_L; return; } } _cursorId = PIC_CSR_DEFAULT; }
int global_messageHandler3(ExCommand *cmd) { int result = 0; if (cmd->_messageKind == 17) { switch (cmd->_messageNum) { case 29: case 30: case 31: case 32: case 36: if (g_fp->_inputDisabled) cmd->_messageKind = 0; break; default: break; } } StaticANIObject *ani, *ani2; switch (cmd->_messageKind) { case 17: switch (cmd->_messageNum) { case 61: debugC(0, kDebugEvents, "preload: { %d, %d },", cmd->_parentId, cmd->_param); return g_fp->_gameLoader->preloadScene(cmd->_parentId, cmd->_param); case 62: return g_fp->_gameLoader->gotoScene(cmd->_parentId, cmd->_param); case 64: if (g_fp->_currentScene && g_fp->_msgObjectId2 && (!(cmd->_param & 4) || g_fp->_msgObjectId2 != cmd->_field_14 || g_fp->_msgId != cmd->_field_20)) { ani = g_fp->_currentScene->getStaticANIObject1ById(g_fp->_msgObjectId2, g_fp->_msgId); if (ani) { ani->_flags &= 0xFF7F; ani->_flags &= 0xFEFF; ani->deleteFromGlobalMessageQueue(); } } g_fp->_msgX = 0; g_fp->_msgY = 0; g_fp->_msgObjectId2 = 0; g_fp->_msgId = 0; if ((cmd->_param & 1) || (cmd->_param & 2)) { g_fp->_msgX = cmd->_x; g_fp->_msgY = cmd->_y; } if (cmd->_param & 4) { g_fp->_msgObjectId2 = cmd->_field_14; g_fp->_msgId = cmd->_field_20; } return result; case 29: if (g_fp->_gameLoader->_interactionController->_flag24 && g_fp->_currentScene) { ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); ani2 = g_fp->_currentScene->getStaticANIObject1ById(g_fp->_gameLoader->_field_FA, -1); if (ani) { if (g_fp->_msgObjectId2 == ani->_id && g_fp->_msgId == ani->_odelay) { cmd->_messageKind = 0; return result; } if (canInteractAny(ani2, ani, cmd->_param)) { handleObjectInteraction(ani2, ani, cmd->_param); return 1; } } else { int id = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(id, 0); if (pic) { if (g_fp->_msgObjectId2 == pic->_id && g_fp->_msgId == pic->_odelay) { cmd->_messageKind = 0; return result; } if (!ani2 || canInteractAny(ani2, pic, cmd->_param)) { if (!ani2 || (ani2->isIdle() && !(ani2->_flags & 0x80) && !(ani2->_flags & 0x100))) handleObjectInteraction(ani2, pic, cmd->_param); return 1; } } } } if (getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->_isEnabled && cmd->_param <= 0) { if (g_fp->_msgX != cmd->_sceneClickX || g_fp->_msgY != cmd->_sceneClickY) { ani = g_fp->_currentScene->getStaticANIObject1ById(g_fp->_gameLoader->_field_FA, -1); if (!ani || (ani->isIdle() && !(ani->_flags & 0x80) && !(ani->_flags & 0x100))) { debugC(0, kDebugPathfinding, "WWW 1"); result = startWalkTo(g_fp->_gameLoader->_field_FA, -1, cmd->_sceneClickX, cmd->_sceneClickY, 0); if (result) { ExCommand *ex = new ExCommand(g_fp->_gameLoader->_field_FA, 17, 64, 0, 0, 0, 1, 0, 0, 0); ex->_param = 1; ex->_excFlags |= 3; ex->_x = cmd->_sceneClickX; ex->_y = cmd->_sceneClickY; ex->postMessage(); } } } else { cmd->_messageKind = 0; } } return result; default: return result; } case 58: g_fp->setCursor(cmd->_param); return result; case 59: setInputDisabled(1); return result; case 60: setInputDisabled(0); return result; case 56: if (cmd->_field_2C) { ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (ani) { getGameLoaderInventory()->addItem2(ani); result = 1; } } else { result = 1; getGameLoaderInventory()->addItem(cmd->_parentId, 1); } getGameLoaderInventory()->rebuildItemRects(); return result; case 57: if (cmd->_field_2C) { if (!cmd->_field_20) { getGameLoaderInventory()->removeItem2(g_fp->_currentScene, cmd->_parentId, cmd->_x, cmd->_y, cmd->_field_14); getGameLoaderInventory()->rebuildItemRects(); return 1; } ani = g_fp->_currentScene->getStaticANIObject1ById(g_fp->_gameLoader->_field_FA, -1); if (ani) { getGameLoaderInventory()->removeItem2(g_fp->_currentScene, cmd->_parentId, ani->_ox + cmd->_x, ani->_oy + cmd->_y, ani->_priority + cmd->_field_14); getGameLoaderInventory()->rebuildItemRects(); return 1; } } else { getGameLoaderInventory()->removeItem(cmd->_parentId, 1); } getGameLoaderInventory()->rebuildItemRects(); return 1; case 55: if (g_fp->_currentScene) { GameObject *obj; if (cmd->_field_14) obj = g_fp->_currentScene->getStaticANIObject1ById(cmd->_x, cmd->_y); else obj = g_fp->_currentScene->getPictureObjectById(cmd->_x, cmd->_y); handleObjectInteraction(g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param), obj, cmd->_field_20); result = 1; } return result; case 51: return startWalkTo(cmd->_parentId, cmd->_param, cmd->_x, cmd->_y, cmd->_field_20); case 52: return doSomeAnimation(cmd->_parentId, cmd->_param, cmd->_field_20); case 53: return doSomeAnimation2(cmd->_parentId, cmd->_param); case 63: if (cmd->_objtype == kObjTypeObjstateCommand) { ObjstateCommand *c = (ObjstateCommand *)cmd; result = 1; g_fp->setObjectState(c->_objCommandName.c_str(), c->_value); } return result; default: return result; } }
int sceneHandler35(ExCommand *cmd) { if (cmd->_messageKind != 17) return 0; switch (cmd->_messageNum) { case MSG_LIFT_CLOSEDOOR: g_fp->lift_closedoorSeq(); break; case MSG_LIFT_EXITLIFT: g_fp->lift_exitSeq(cmd); break; case MSG_LIFT_STARTEXITQUEUE: g_fp->lift_startExitQueue(); break; case MSG_LIFT_CLICKBUTTON: g_fp->lift_clickButton(); break; case MSG_SC35_STOPFLOW: sceneHandler35_stopFlow(); break; case MSG_SC35_CHECKPIPESOUND: if (g_fp->getObjectState(sO_Valve_35) == g_fp->getObjectEnumState(sO_Valve_35, sO_TurnedOn)) { g_fp->stopAllSoundInstances(SND_35_011); g_fp->playSound(SND_35_012, 1); g_vars->scene35_flowCounter = 0; break; } break; case MSG_SC35_SHRINK: sceneHandler35_shrink(); break; case MSG_LIFT_GO: g_fp->lift_goAnimation(); break; case MSG_SC35_STARTFLOW: case MSG_SC35_PLUGHOSE: sceneHandler35_startFlow(); break; case 64: g_fp->lift_hoverButton(cmd); break; case 29: { StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(g_fp->_sceneRect.left + cmd->_x, g_fp->_sceneRect.top + cmd->_y); if (ani) if (ani->_id == ANI_LIFTBUTTON) { g_fp->lift_animateButton(ani); cmd->_messageKind = 0; break; } if (!ani || !canInteractAny(g_fp->_aniMan, ani, cmd->_param)) { int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0); if (!pic || !canInteractAny(g_fp->_aniMan, pic, cmd->_param)) { if ((g_fp->_sceneRect.right - cmd->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (cmd->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0)) { g_fp->processArcade(cmd); break; } } } break; } case 33: if (g_fp->_aniMan2) { int x = g_fp->_aniMan2->_ox; if (x < g_fp->_sceneRect.left + 200) g_fp->_currentScene->_x = x - 300 - g_fp->_sceneRect.left; if (x > g_fp->_sceneRect.right - 200) g_fp->_currentScene->_x = x + 300 - g_fp->_sceneRect.right; } if (g_vars->scene35_flowCounter > 0) { --g_vars->scene35_flowCounter; if (!g_vars->scene35_flowCounter) sceneHandler35_stopFlow(); } g_vars->scene35_fliesCounter++; if (g_vars->scene35_fliesCounter >= 160) sceneHandler35_genFlies(); g_fp->_floaters->update(); g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); break; } return 0; }
int sceneHandler11(ExCommand *cmd) { if (cmd->_messageKind != 17) return 0; switch (cmd->_messageNum) { case MSG_CMN_WINARCADE: sceneHandler11_winArcade(); break; case MSG_SC11_SITSWINGER: if (g_fp->getObjectState(sO_Swingie) == g_fp->getObjectEnumState(sO_Swingie, sO_IsStandingInBoots) || g_fp->getObjectState(sO_Swingie) == g_fp->getObjectEnumState(sO_Swingie, sO_IsStandingInCorner)) { g_fp->setObjectState(sO_Swingie, g_fp->getObjectEnumState(sO_Swingie, sO_IsSitting)); } break; case MSG_SC11_MANCRY: g_fp->playSound(g_vars->scene11_crySound, 0); g_vars->scene11_crySound = 0; break; case MSG_SC11_RESTARTMAN: sceneHandler11_restartMan(); break; case MSG_SC11_HITMAN: sceneHandler11_hitMan(); break; case MSG_SC11_MANTOSWING: sceneHandler11_manToSwing(); break; case MSG_SC11_PUTBOOT: sceneHandler11_putBoot(); break; case MSG_SC11_SHOWSWING: sceneHandler11_showSwing(); break; case 107: if (g_vars->scene11_arcadeIsOn) sceneHandler11_swingLogic(); break; case 33: { int res = 0; int x, y; if (!g_fp->_aniMan2) goto LABEL_27; x = g_fp->_aniMan2->_ox; y = g_fp->_aniMan2->_oy; g_vars->scene11_dudeX = x; g_vars->scene11_dudeY = y; if (g_vars->scene11_scrollIsEnabled) { if (x > g_fp->_sceneRect.right - 200) g_fp->_currentScene->_x = x - g_fp->_sceneRect.right + 300; goto LABEL_26; } if (g_vars->scene11_scrollIsMaximized) { g_fp->_currentScene->_x = g_fp->_sceneWidth - x; if (g_vars->scene11_dudeX < 910) g_vars->scene11_scrollIsMaximized = false; LABEL_26: res = 1; LABEL_27: if (g_vars->scene11_swingieStands) { if (g_fp->_sceneRect.left >= 534 && g_vars->scene11_swingieScreenEdge < 534) sceneHandler11_swingieSit(); g_vars->scene11_swingieScreenEdge = g_fp->_sceneRect.left; } if (!g_vars->scene11_arcadeIsOn) goto LABEL_50; if (g_vars->scene11_swingCounterPrevTurn <= 0 || g_vars->scene11_swingCounter - g_vars->scene11_swingCounterPrevTurn <= 72) { } else { sceneHandler11_swing0(); g_vars->scene11_swingDirectionPrevTurn = 0; g_vars->scene11_swingCounterPrevTurn = 0; } if (!g_vars->scene11_arcadeIsOn) goto LABEL_50; if (g_vars->scene11_swingDirection == g_vars->scene11_swingDirectionPrevTurn || g_vars->scene11_swingCounterPrevTurn <= 0 || g_vars->scene11_swingCounter - g_vars->scene11_swingCounterPrevTurn <= 2) { LABEL_49: if (g_vars->scene11_arcadeIsOn) { g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); return res; } LABEL_50: if (g_vars->scene11_swingIsSwinging || (0.0 == g_vars->scene11_swingSpeed && g_vars->scene11_dudeOnSwing->_movement != 0 && g_vars->scene11_dudeOnSwing->_movement->_currDynamicPhaseIndex == 45 && (g_vars->scene11_dudeOnSwing->changeStatics2(ST_KCH_STATIC), !g_vars->scene11_arcadeIsOn) && g_vars->scene11_swingIsSwinging)) { if (!g_vars->scene11_swingie->_movement) { if ((g_vars->scene11_boots->_flags & 4) && g_vars->scene11_boots->_statics->_staticsId == ST_BTS11_2) { sceneHandler11_swingieJumpDown(); g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); return res; } g_vars->scene11_swingie->startAnim(MV_SWR_SWING, 0, -1); } } g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); return res; } if (g_vars->scene11_swingDirectionPrevTurn == 1) { if (!g_vars->scene11_swingDirection) sceneHandler11_swing1(); else sceneHandler11_swing0(); } else if (g_vars->scene11_swingDirectionPrevTurn == 2) { if (!g_vars->scene11_swingDirection) sceneHandler11_swing2(); else sceneHandler11_swing0(); } g_vars->scene11_swingCounterPrevTurn = g_vars->scene11_swingCounter; goto LABEL_49; } if (x >= g_fp->_sceneRect.left + 200) { if (x <= g_fp->_sceneRect.right - 200) { LABEL_18: if (y < g_fp->_sceneRect.top + 200) { g_fp->_currentScene->_y = y - g_fp->_sceneRect.top - 300; y = g_vars->scene11_dudeY; x = g_vars->scene11_dudeX; } if (y > g_fp->_sceneRect.bottom - 300) { g_fp->_currentScene->_y = y - g_fp->_sceneRect.bottom + 300; x = g_vars->scene11_dudeX; } if (x >= 940) g_vars->scene11_scrollIsMaximized = true; goto LABEL_26; } g_fp->_currentScene->_x = x - g_fp->_sceneRect.right + 300; } else { g_fp->_currentScene->_x = x - g_fp->_sceneRect.left - 300; } y = g_vars->scene11_dudeY; x = g_vars->scene11_dudeX; goto LABEL_18; } break; case 29: if (g_vars->scene11_swingIsSwinging) { if (g_fp->_currentScene->getStaticANIObjectAtPos(g_fp->_sceneRect.left + cmd->_x, g_fp->_sceneRect.top + cmd->_y) == g_vars->scene11_swingie && cmd->_keyCode == ANI_INV_BOOT) sceneHandler11_putBoot(); } else { if (g_vars->scene11_arcadeIsOn) { sceneHandler11_setSwingDirection(); g_vars->scene11_swingCounterPrevTurn = g_vars->scene11_swingCounter; } } if (!g_vars->scene11_arcadeIsOn) { StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); if (!ani || !canInteractAny(g_fp->_aniMan, ani, cmd->_keyCode)) { int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0); if (!pic || !canInteractAny(g_fp->_aniMan, pic, cmd->_keyCode)) { if ((g_fp->_sceneRect.right - cmd->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (cmd->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0)) { g_fp->processArcade(cmd); return 0; } } } return 0; } } return 0; }
int sceneHandler28(ExCommand *cmd) { if (cmd->_messageKind != 17) return 0; switch (cmd->_messageNum) { case MSG_SC28_LIFT6MUSIC: g_fp->playTrack(g_fp->getGameLoaderGameVar()->getSubVarByName("SC_28"), "MUSIC_TIOTIA", 1); break; case MSG_SC28_LIFT6INSIDE: g_vars->scene28_lift6inside = true; break; case MSG_SC28_LIFT1_SHOWAFTER: sceneHandler28_lift1ShowAfter(); break; case MSG_SC28_MAKEFACES: sceneHandler28_makeFaces(cmd); break; case MSG_SC28_TRYVTORPERS: sceneHandler28_trySecondaryPers(); break; case MSG_SC28_TURNOFF_0: g_vars->scene28_lighteningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK0, 0); g_vars->scene28_lighteningObject->_flags |= 4; break; case MSG_SC28_TURNON_0: g_vars->scene28_darkeningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK0, 0); break; case MSG_SC28_TURNON_1: g_vars->scene28_darkeningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK1, 0); break; case MSG_SC28_TURNOFF_1: g_vars->scene28_lighteningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK1, 0); g_vars->scene28_lighteningObject->_flags |= 4; break; case MSG_SC28_TURNON_2: g_vars->scene28_darkeningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK2, 0); sceneHandler28_turnOn2(); break; case MSG_SC28_TURNOFF_2: g_vars->scene28_lighteningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK2, 0); g_vars->scene28_lighteningObject->_flags |= 4; break; case MSG_SC28_TURNON_3: g_vars->scene28_darkeningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK3, 0); break; case MSG_SC28_TURNOFF_3: g_vars->scene28_lighteningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK3, 0); g_vars->scene28_lighteningObject->_flags |= 4; break; case MSG_SC28_TURNON_4: g_vars->scene28_darkeningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK4, 0); break; case MSG_SC28_TURNOFF_4: g_vars->scene28_lighteningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK4, 0); g_vars->scene28_lighteningObject->_flags |= 4; break; case MSG_SC28_TURNON_6: g_vars->scene28_darkeningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK6, 0); break; case MSG_SC28_TURNOFF_6: g_vars->scene28_lighteningObject = g_fp->_currentScene->getPictureObjectById(PIC_SC28_DARK6, 0); g_vars->scene28_lighteningObject->_flags |= 4; break; case MSG_SC28_STARTWORK1: sceneHandler28_startWork1(); break; case MSG_SC28_CLICKLIFT: sceneHandler28_clickLift(cmd->_param); break; case MSG_SC28_ENDLIFT1: case MSG_SC28_ENDLIFT6: case MSG_SC28_ENDCABIN: g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1); g_fp->_aniMan->_flags &= 0xFEFF; break; case 29: { if (g_vars->scene28_lift6inside) { chainObjQueue(g_fp->_aniMan, QU_SC28_LIFT6_END, 1); g_fp->playTrack(g_fp->getGameLoaderGameVar()->getSubVarByName("SC_28"), "MUSIC", 1); g_vars->scene28_lift6inside = false; } StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); if (ani) if (ani->_id == ANI_LIFT || ani->_id == ANI_LIFT_28 ) { sceneHandler28_clickLift(ani->_odelay); cmd->_messageKind = 0; break; } if (!ani || !canInteractAny(g_fp->_aniMan, ani, cmd->_param)) { int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0); if (!pic || !canInteractAny(g_fp->_aniMan, pic, cmd->_param)) { if ((g_fp->_sceneRect.right - cmd->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (cmd->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0)) g_fp->processArcade(cmd); } } break; } case 33: if (g_fp->_aniMan2) { int x = g_fp->_aniMan2->_ox; if (x < g_fp->_sceneRect.left + 200) g_fp->_currentScene->_x = x - 300 - g_fp->_sceneRect.left; if (x > g_fp->_sceneRect.right - 200) g_fp->_currentScene->_x = x + 300 - g_fp->_sceneRect.right; } if (g_vars->scene28_darkeningObject) { if (g_vars->scene28_darkeningObject->_picture->getAlpha() > 10) { g_vars->scene28_darkeningObject->_picture->setAlpha(g_vars->scene28_darkeningObject->_picture->getAlpha() - 10); } else { g_vars->scene28_darkeningObject->_flags &= 0xFFFB; g_vars->scene28_darkeningObject = 0; } } if (g_vars->scene28_lighteningObject) { if (g_vars->scene28_lighteningObject->_picture->getAlpha() < 0xF9u) { g_vars->scene28_lighteningObject->_picture->setAlpha(g_vars->scene28_lighteningObject->_picture->getAlpha() + 6); } else { g_vars->scene28_lighteningObject->_picture->setAlpha(0xff); g_vars->scene28_lighteningObject = 0; } } g_fp->_floaters->update(); for (uint i = 0; i < g_fp->_floaters->_array2.size(); i++) if (g_fp->_floaters->_array2[i]->val13 == 1) g_fp->_floaters->_array2[i]->ani->_priority = 15; g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); break; } return 0; }