void scene15_initScene(Scene *sc) { g_vars->scene15_chantingCountdown = 0; StaticANIObject *grandma = sc->getStaticANIObject1ById(ANI_GRANDMA_ASS, -1); Scene *oldsc = g_fp->_currentScene; g_fp->_currentScene = sc; int grandmaState = g_fp->getObjectState(sO_Grandma); if (grandmaState == g_fp->getObjectEnumState(sO_Grandma, sO_In_15)) { grandma->changeStatics2(ST_GMS_BOOT); grandma->setOXY(97, 399); g_fp->setObjectState(sO_LeftPipe_15, g_fp->getObjectEnumState(sO_LeftPipe_15, sO_IsClosed)); } else if (grandmaState == g_fp->getObjectEnumState(sO_Grandma, sO_In_15_1)) { grandma->changeStatics2(ST_GMS_BOOT); grandma->setOXY(86, 399); g_fp->setObjectState(sO_LeftPipe_15, g_fp->getObjectEnumState(sO_LeftPipe_15, sO_IsClosed)); } else if (grandmaState == g_fp->getObjectEnumState(sO_Grandma, sO_In_15_2)) { grandma->changeStatics2(ST_GMS_BOOT); grandma->setOXY(71, 399); g_fp->setObjectState(sO_LeftPipe_15, g_fp->getObjectEnumState(sO_LeftPipe_15, sO_IsClosed)); } else if (grandmaState == g_fp->getObjectEnumState(sO_Grandma, sO_In_15_3)) { grandma->changeStatics2(ST_GMS_BOOT); grandma->setOXY(49, 399); g_fp->setObjectState(sO_LeftPipe_15, g_fp->getObjectEnumState(sO_LeftPipe_15, sO_IsClosed)); } else if (grandmaState == g_fp->getObjectEnumState(sO_Grandma, sO_WithoutBoot)) { grandma->changeStatics2(ST_GMS_BOOT); grandma->setOXY(97, 399); grandma->changeStatics2(ST_GMS_BOOTLESS2); g_fp->setObjectState(sO_LeftPipe_15, g_fp->getObjectEnumState(sO_LeftPipe_15, sO_IsClosed)); } else { grandma->hide(); g_fp->setObjectState(sO_LeftPipe_15, g_fp->getObjectEnumState(sO_LeftPipe_15, sO_IsOpened)); } g_vars->scene15_plusminus = sc->getStaticANIObject1ById(ANI_PLUSMINUS, -1); if (g_fp->getObjectState(sO_Guard_2) == g_fp->getObjectEnumState(sO_Guard_2, sO_Off)) g_vars->scene15_plusminus->_statics = g_vars->scene15_plusminus->getStaticsById(ST_PMS_MINUS); else g_vars->scene15_plusminus->_statics = g_vars->scene15_plusminus->getStaticsById(ST_PMS_PLUS); g_vars->scene15_ladder = sc->getPictureObjectById(PIC_SC15_LADDER, 0); g_vars->scene15_boot = sc->getStaticANIObject1ById(ANI_BOOT_15, -1); if (g_fp->getObjectState(sO_Boot_15) != g_fp->getObjectEnumState(sO_Boot_15, sO_IsPresent)) g_vars->scene15_boot->_flags &= 0xFFFB; g_fp->_currentScene = oldsc; g_fp->lift_setButton(sO_Level5, ST_LBN_5N); g_fp->lift_init(sc, QU_SC15_ENTERLIFT, QU_SC15_EXITLIFT); }
void scene06_initScene(Scene *sc) { g_vars->scene06_mumsy = sc->getStaticANIObject1ById(ANI_MAMASHA, -1); g_vars->scene06_someBall = 0; g_vars->scene06_invHandle = sc->getStaticANIObject1ById(ANI_INV_HANDLE, -1); g_vars->scene06_liftButton = sc->getStaticANIObject1ById(ANI_BUTTON_6, -1); g_vars->scene06_ballDrop = sc->getStaticANIObject1ById(ANI_BALLDROP, -1); g_vars->scene06_arcadeEnabled = false; g_vars->scene06_aimingBall = false; g_vars->scene06_currentBall = 0; g_vars->scene06_ballInHands = 0; g_vars->scene06_flyingBall = 0; g_vars->scene06_balls.clear(); g_vars->scene06_numBallsGiven = 0; g_vars->scene06_mumsyNumBalls = 0; g_vars->scene06_eggieTimeout = 0; g_vars->scene06_eggieDirection = true; StaticANIObject *ball = sc->getStaticANIObject1ById(ANI_NEWBALL, -1); ball->hide(); ball->_statics = ball->getStaticsById(ST_NBL_NORM); g_vars->scene06_balls.push_back(ball); for (int i = 0; i < 3; i++) { StaticANIObject *ball2 = new StaticANIObject(ball); ball2->hide(); ball2->_statics = ball2->getStaticsById(ST_NBL_NORM); sc->addStaticANIObject(ball2, 1); g_vars->scene06_balls.push_back(ball2); } if (g_fp->getObjectState(sO_BigMumsy) == g_fp->getObjectEnumState(sO_BigMumsy, sO_IsPlaying)) g_fp->setObjectState(sO_BigMumsy, g_fp->getObjectEnumState(sO_BigMumsy, sO_IsSleeping)); if (g_fp->getObjectState(sO_BigMumsy) != g_fp->getObjectEnumState(sO_BigMumsy, sO_IsSleeping)) g_vars->scene06_mumsy->hide(); g_fp->lift_setButton(sO_Level3, ST_LBN_3N); g_fp->lift_init(sc, QU_SC6_ENTERLIFT, QU_SC6_EXITLIFT); g_fp->initArcadeKeys("SC_6"); sceneHandler06_setExits(sc); g_fp->setArcadeOverlay(PIC_CSR_ARCADE2); }
int global_messageHandler4(ExCommand *cmd) { StaticANIObject *ani = 0; switch (cmd->_messageKind) { case 18: { MessageQueue *mq = new MessageQueue(g_fp->_currentScene->getMessageQueueById(cmd->_messageNum), cmd->_parId, 0); if (cmd->_excFlags & 1) mq->_flag1 = 1; else mq->_flag1 = 0; mq->sendNextCommand(); break; } case 2: if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; ani->trySetMessageQueue(cmd->_messageNum, cmd->_parId); break; case 1: { if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; int flags = cmd->_field_14; if (flags <= 0) flags = -1; if (cmd->_excFlags & 1) ani->startAnim(cmd->_messageNum, 0, flags); else ani->startAnim(cmd->_messageNum, cmd->_parId, flags); break; } case 8: if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; ani->startAnimEx(cmd->_messageNum, cmd->_parId, -1, -1); break; case 20: { if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; int flags = cmd->_field_14; if (flags <= 0) flags = -1; ExCommand2 *cmd2 = (ExCommand2 *)cmd; if (cmd->_excFlags & 1) { ani->startAnimSteps(cmd->_messageNum, 0, cmd->_x, cmd->_y, cmd2->_points, cmd2->_pointsSize, flags); } else { ani->startAnimSteps(cmd->_messageNum, cmd->_parId, cmd->_x, cmd->_y, cmd2->_points, cmd2->_pointsSize, flags); } break; } case 21: if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; ani->queueMessageQueue(0); ani->playIdle(); break; case 9: // Nop in original break; case 3: g_fp->_currentScene->_y = cmd->_messageNum - cmd->_messageNum % g_fp->_scrollSpeed; break; case 4: g_fp->_currentScene->_x = cmd->_messageNum - cmd->_messageNum % g_fp->_scrollSpeed; break; case 19: { if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; MessageQueue *mq = ani->getMessageQueue(); MessageQueue *mq2 = ani->changeStatics1(cmd->_messageNum); if (!mq2 || !mq2->getExCommandByIndex(0) || !mq) break; mq2->_parId = mq->_id; mq2->_flag1 = (cmd->_field_24 == 0); break; } case 22: if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; ani->_flags |= 4; ani->changeStatics2(cmd->_messageNum); break; case 6: if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; ani->hide(); break; case 27: if (!g_fp->_currentScene || g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param) == 0) { ani = g_fp->accessScene(cmd->_field_20)->getStaticANIObject1ById(cmd->_parentId, -1); if (ani) { ani = new StaticANIObject(ani); g_fp->_currentScene->addStaticANIObject(ani, 1); } } // fall through case 5: if (g_fp->_currentScene) ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; if (cmd->_field_14 >= 0) ani->_priority = cmd->_field_14; ani->show1(cmd->_x, cmd->_y, cmd->_messageNum, cmd->_parId); break; case 10: if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; if (cmd->_field_14 >= 0) ani->_priority = cmd->_field_14; ani->show2(cmd->_x, cmd->_y, cmd->_messageNum, cmd->_parId); break; case 7: { if (!g_fp->_currentScene->_picObjList.size()) break; int offX = g_fp->_scrollSpeed * (cmd->_x / g_fp->_scrollSpeed); int offY = g_fp->_scrollSpeed * (cmd->_y / g_fp->_scrollSpeed); if (cmd->_messageNum) { g_fp->_currentScene->_x = offX - g_fp->_sceneRect.left; g_fp->_currentScene->_y = offY - g_fp->_sceneRect.top; if (cmd->_field_24) { g_fp->_currentScene->_messageQueueId = cmd->_parId; } } else { g_fp->_sceneRect.translate(offX - g_fp->_sceneRect.left, offY - g_fp->_sceneRect.top); g_fp->_currentScene->_x = 0; g_fp->_currentScene->_y = 0; g_fp->_currentScene->updateScrolling2(); } break; } case 34: if (!g_fp->_currentScene) break; ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param); if (!ani) break; ani->_flags = cmd->_messageNum | (ani->_flags & ~cmd->_field_14); break; case 35: global_messageHandler_handleSound(cmd); break; case 11: case 12: break; default: return 0; break; } return 1; }
void sceneHandler17_hideSugar() { StaticANIObject *sugar = g_fp->_currentScene->getStaticANIObject1ById(ANI_INV_SUGAR, -1); if (sugar) sugar->hide(); }
void sceneHandler29_winArcade() { if (g_vars->scene29_shooter2->_flags & 4) { g_vars->scene29_shootCountdown = 0; g_vars->scene29_shooter1->changeStatics2(ST_STR1_STAND); g_vars->scene29_shooter2->changeStatics2(ST_STR2_STAND); g_vars->scene29_shooter2->_flags &= 0xFFFB; StaticANIObject *ani; Ball *newball, *ball, *oldp0; while (g_vars->scene29_greenBalls.numBalls) { ball = g_vars->scene29_greenBalls.pHead; ani = g_vars->scene29_greenBalls.pHead->ani; oldp0 = g_vars->scene29_greenBalls.pHead->p0; g_vars->scene29_greenBalls.pHead = g_vars->scene29_greenBalls.pHead->p0; if (g_vars->scene29_greenBalls.pHead) oldp0->p1 = 0; else g_vars->scene29_greenBalls.field_8 = 0; ball->p0 = g_vars->scene29_greenBalls.pTail; g_vars->scene29_greenBalls.pTail = ball; g_vars->scene29_greenBalls.numBalls--; if (!g_vars->scene29_greenBalls.numBalls) g_vars->scene29_greenBalls.reset(); ani->hide(); newball = g_vars->scene29_balls.sub04(g_vars->scene29_balls.field_8, 0); newball->ani = ani; if (g_vars->scene29_balls.field_8) g_vars->scene29_balls.field_8->p0 = newball; else g_vars->scene29_balls.pHead = newball; g_vars->scene29_balls.field_8 = newball; } while (g_vars->scene29_flyingRedBalls.numBalls) { ball = g_vars->scene29_flyingRedBalls.pHead; ani = g_vars->scene29_flyingRedBalls.pHead->ani; oldp0 = g_vars->scene29_flyingRedBalls.pHead->p0; g_vars->scene29_flyingRedBalls.pHead = g_vars->scene29_flyingRedBalls.pHead->p0; if (g_vars->scene29_flyingRedBalls.pHead) oldp0->p1 = 0; else g_vars->scene29_flyingRedBalls.field_8 = 0; ball->p0 = g_vars->scene29_flyingRedBalls.pTail; g_vars->scene29_flyingRedBalls.pTail = ball; g_vars->scene29_flyingRedBalls.numBalls--; if (!g_vars->scene29_flyingRedBalls.numBalls) { g_vars->scene29_flyingRedBalls.numBalls = 0; g_vars->scene29_flyingRedBalls.pTail = 0; g_vars->scene29_flyingRedBalls.field_8 = 0; g_vars->scene29_flyingRedBalls.pHead = 0; free(g_vars->scene29_flyingRedBalls.cPlex); g_vars->scene29_flyingRedBalls.cPlex = 0; } ani->hide(); newball = g_vars->scene29_redBalls.sub04(g_vars->scene29_redBalls.field_8, 0); newball->ani = ani; if (g_vars->scene29_redBalls.field_8) g_vars->scene29_redBalls.field_8->p0 = newball; else g_vars->scene29_redBalls.pHead = newball; g_vars->scene29_redBalls.field_8 = newball; } g_vars->scene29_ass->queueMessageQueue(0); g_vars->scene29_ass->_flags &= 0xFFFB; chainQueue(QU_SC29_ESCAPE, 1); } g_fp->setObjectState(sO_LeftPipe_29, g_fp->getObjectEnumState(sO_LeftPipe_29, sO_IsOpened)); }