void sceneHandler28_startWork1() { debugC(2, kDebugSceneLogic, "scene28: startWork"); g_fp->_aniMan->hide(); StaticANIObject *man = g_fp->_currentScene->getStaticANIObject1ById(ANI_MAN_28, -1); man->_statics = man->getStaticsById(ST_MAN28_RIGHT); man->setOXY(g_fp->_aniMan->_ox, g_fp->_aniMan->_oy); man->_priority = g_fp->_aniMan->_priority; man->show1(-1, -1, -1, 0); chainQueue(QU_SC28_LIFT1_WORK, 1); }
bool preloadCallback(PreloadItem &pre, int flag) { if (flag) { if (flag == 50) g_fp->_aniMan->preloadMovements(g_fp->_movTable); StaticANIObject *pbar = g_fp->_loaderScene->getStaticANIObject1ById(ANI_PBAR, -1); if (pbar) { int sz; if (pbar->_movement->_currMovement) sz = pbar->_movement->_currMovement->_dynamicPhases.size(); else sz = pbar->_movement->_dynamicPhases.size(); pbar->_movement->setDynamicPhaseIndex(flag * (sz - 1) / 100); } g_fp->updateMap(&pre); g_fp->_currentScene = g_fp->_loaderScene; g_fp->_loaderScene->draw(); g_fp->_system->updateScreen(); } else { if (g_fp->_scene2) { g_fp->_aniMan = g_fp->_scene2->getAniMan(); g_fp->_scene2 = 0; setInputDisabled(1); } g_fp->_floaters->stopAll(); if (g_fp->_soundEnabled) { g_fp->_currSoundListCount = 1; g_fp->_currSoundList1[0] = g_fp->accessScene(SC_COMMON)->_soundList; } g_vars->scene18_inScene18p1 = false; if ((pre.preloadId1 != SC_18 || pre.sceneId != SC_19) && (pre.preloadId1 != SC_19 || (pre.sceneId != SC_18 && pre.sceneId != SC_19))) { if (g_fp->_scene3) { if (pre.preloadId1 != SC_18) g_fp->_gameLoader->unloadScene(SC_18); g_fp->_scene3 = 0; } } else { scene19_setMovements(g_fp->accessScene(pre.preloadId1), pre.param); g_vars->scene18_inScene18p1 = true; if (pre.preloadId1 == SC_18) { g_fp->_gameLoader->saveScenePicAniInfos(SC_18); scene18_preload(); } } if (((pre.sceneId == SC_19 && pre.param == TrubaRight) || (pre.sceneId == SC_18 && pre.param == TrubaRight)) && !pre.preloadId2) { pre.sceneId = SC_18; pre.param = TrubaLeft; } if (!g_fp->_loaderScene) { g_fp->_gameLoader->loadScene(SC_LDR); g_fp->_loaderScene = g_fp->accessScene(SC_LDR); } StaticANIObject *pbar = g_fp->_loaderScene->getStaticANIObject1ById(ANI_PBAR, -1); if (pbar) { pbar->show1(ST_EGTR_SLIMSORROW, ST_MAN_GOU, MV_PBAR_RUN, 0); pbar->startAnim(MV_PBAR_RUN, 0, -1); } g_fp->_inventoryScene = 0; g_fp->_updateCursorCallback = 0; g_fp->_sceneRect.translate(-g_fp->_sceneRect.left, -g_fp->_sceneRect.top); g_fp->_system->delayMillis(10); Scene *oldsc = g_fp->_currentScene; g_fp->_currentScene = g_fp->_loaderScene; g_fp->_loaderScene->draw(); g_fp->_system->updateScreen(); g_fp->_currentScene = oldsc; } return true; }
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 scene16_initScene(Scene *sc) { g_vars->scene16_figures.clear(); g_vars->scene16_walkingBoy = 0; g_vars->scene16_walkingGirl = 0; g_vars->scene16_walkingCount = 200; g_vars->scene16_wire = sc->getStaticANIObject1ById(ANI_WIRE16, -1); g_vars->scene16_mug = sc->getStaticANIObject1ById(ANI_MUG, -1); g_vars->scene16_jettie = sc->getStaticANIObject1ById(ANI_JETTIE, -1); g_vars->scene16_boot = sc->getStaticANIObject1ById(ANI_BOOT_16, -1); g_vars->scene16_girlIsLaughing = false; g_vars->scene16_sound = SND_16_034; if (g_fp->getObjectState(sO_Bridge) == g_fp->getObjectEnumState(sO_Bridge, sO_Convoluted)) { g_vars->scene16_placeIsOccupied = true; StaticANIObject *boy[2]; boy[0] = sc->getStaticANIObject1ById(ANI_BOY, -1); boy[0]->loadMovementsPixelData(); boy[1] = new StaticANIObject(boy[0]); sc->addStaticANIObject(boy[1], 1); int idx = 0; for (int i = 0; i < 3; i++) { g_vars->scene16_figures.push_back(boy[idx]); idx++; if (idx >= 2) idx = 0; } g_vars->scene16_figures.push_back(sc->getStaticANIObject1ById(ANI_GIRL, -1)); for (int i = 0; i < 4; i++) { g_vars->scene16_figures.push_back(boy[idx]); idx++; if (idx >= 2) idx = 0; } } else { g_fp->setObjectState(sO_Girl, g_fp->getObjectEnumState(sO_Girl, sO_IsSwinging)); g_vars->scene16_placeIsOccupied = false; StaticANIObject *ani = new StaticANIObject(g_fp->accessScene(SC_COMMON)->getStaticANIObject1ById(ANI_BEARDED_CMN, -1)); ani->_movement = 0; ani->_statics = (Statics *)ani->_staticsList[0]; sc->addStaticANIObject(ani, 1); } if (g_fp->getObjectState(sO_Girl) == g_fp->getObjectEnumState(sO_Girl, sO_IsLaughing)) { StaticANIObject *girl = sc->getStaticANIObject1ById(ANI_GIRL, -1); girl->show1(554, 432, MV_GRL_LAUGH_POPA, 0); girl->_priority = 20; } if (g_fp->getObjectState(sO_Cup) == g_fp->getObjectEnumState(sO_Cup, sO_In_16)) { g_vars->scene16_mug->_statics = g_vars->scene16_mug->getStaticsById(ST_MUG_EMPTY); g_vars->scene16_mug->_movement = 0; g_vars->scene16_mug->setOXY(409, 459); g_vars->scene16_mug->_priority = 5; g_vars->scene16_mug->_flags |= 4; } }
void sceneHandler29_shootRed() { if (g_vars->scene29_balls.numBalls) { int x = g_vars->scene29_shooter1->_ox - 101; int y = g_vars->scene29_shooter1->_oy - 14; StaticANIObject *ani = g_vars->scene29_balls.pHead->ani; Ball *oldhead = g_vars->scene29_balls.pHead; Ball *oldp0 = g_vars->scene29_balls.pHead->p0; g_vars->scene29_balls.pHead = g_vars->scene29_balls.pHead->p0; if (g_vars->scene29_balls.pHead) oldp0->p1 = 0; else g_vars->scene29_balls.field_8 = 0; oldhead->p0 = g_vars->scene29_balls.pTail; g_vars->scene29_balls.pTail = oldhead; g_vars->scene29_balls.numBalls--; if (!g_vars->scene29_balls.numBalls) { g_vars->scene29_balls.numBalls = 0; g_vars->scene29_balls.pTail = 0; g_vars->scene29_balls.field_8 = 0; g_vars->scene29_balls.pHead = 0; free(g_vars->scene29_balls.cPlex); g_vars->scene29_balls.cPlex = 0; } ani->show1(x, y, MV_SHR_NORM, 0); ani->_priority = 5; Ball *runPtr = g_vars->scene29_flyingRedBalls.pTail; Ball *lastP = g_vars->scene29_flyingRedBalls.field_8; if (!g_vars->scene29_flyingRedBalls.pTail) { g_vars->scene29_flyingRedBalls.cPlex = (byte *)calloc(g_vars->scene29_flyingRedBalls.cPlexLen, sizeof(Ball)); byte *p1 = g_vars->scene29_flyingRedBalls.cPlex + (g_vars->scene29_flyingRedBalls.cPlexLen - 1) * sizeof(Ball); if (g_vars->scene29_flyingRedBalls.cPlexLen - 1 < 0) { runPtr = g_vars->scene29_flyingRedBalls.pTail; } else { runPtr = g_vars->scene29_flyingRedBalls.pTail; for (int j = 0; j < g_vars->scene29_flyingRedBalls.cPlexLen; j++) { ((Ball *)p1)->p1 = runPtr; runPtr = (Ball *)p1; p1 -= sizeof(Ball); } g_vars->scene29_flyingRedBalls.pTail = runPtr; } } g_vars->scene29_flyingRedBalls.pTail = runPtr->p0; runPtr->p1 = lastP; runPtr->p0 = 0; runPtr->ani = ani; g_vars->scene29_flyingRedBalls.numBalls++; if (g_vars->scene29_flyingRedBalls.field_8) { g_vars->scene29_flyingRedBalls.field_8->p0 = runPtr; g_vars->scene29_flyingRedBalls.field_8 = runPtr; } else { g_vars->scene29_flyingRedBalls.pHead = runPtr; g_vars->scene29_flyingRedBalls.field_8 = runPtr; } } }