diff options
author | Kamil Zbróg | 2013-11-26 18:53:03 +0000 |
---|---|---|
committer | Kamil Zbróg | 2013-11-26 18:53:03 +0000 |
commit | 15bb1c61eda48f09253ccb8d2a42ccad59f3b00a (patch) | |
tree | c2f5ac2907225730c6f1cdaa000f549ef7951183 /engines/fullpipe/scenes.cpp | |
parent | 446c57d281e592653c9935c896d33334d23f0519 (diff) | |
parent | e1afc7d0d777dad4b7ca0a58f0bb0324b24f9584 (diff) | |
download | scummvm-rg350-15bb1c61eda48f09253ccb8d2a42ccad59f3b00a.tar.gz scummvm-rg350-15bb1c61eda48f09253ccb8d2a42ccad59f3b00a.tar.bz2 scummvm-rg350-15bb1c61eda48f09253ccb8d2a42ccad59f3b00a.zip |
Merge remote-tracking branch 'sync/master' into prince-malik
Conflicts:
engines/configure.engines
engines/engines.mk
engines/plugins_table.h
Diffstat (limited to 'engines/fullpipe/scenes.cpp')
-rw-r--r-- | engines/fullpipe/scenes.cpp | 1269 |
1 files changed, 46 insertions, 1223 deletions
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp index c266a819ed..6771fe8ec8 100644 --- a/engines/fullpipe/scenes.cpp +++ b/engines/fullpipe/scenes.cpp @@ -23,44 +23,19 @@ #include "fullpipe/fullpipe.h" #include "fullpipe/utils.h" -#include "fullpipe/gfx.h" #include "fullpipe/objects.h" #include "fullpipe/statics.h" -#include "fullpipe/scene.h" #include "fullpipe/gameloader.h" -#include "fullpipe/sound.h" #include "fullpipe/motion.h" #include "fullpipe/input.h" -#include "fullpipe/messages.h" #include "fullpipe/behavior.h" #include "fullpipe/constants.h" -#include "fullpipe/objectnames.h" #include "fullpipe/scenes.h" -#include "fullpipe/modal.h" #include "fullpipe/interaction.h" namespace Fullpipe { -int defaultUpdateCursor(); -void setElevatorButton(const char *name, int state); - -int sceneIntro_updateCursor(); -void sceneIntro_initScene(Scene *sc); -int sceneHandlerIntro(ExCommand *cmd); - -void scene01_fixEntrance(); -void scene01_initScene(Scene *sc, int entrance); -int sceneHandler01(ExCommand *cmd); - -void scene03_setEaterState(); -int scene03_updateCursor(); -void scene03_initScene(Scene *sc); -int sceneHandler03(ExCommand *cmd); - -void sceneDbgMenu_initScene(Scene *sc); -int sceneHandlerDbgMenu(ExCommand *cmd); - Vars::Vars() { sceneIntro_aniin1man = 0; sceneIntro_needSleep = true; @@ -76,9 +51,52 @@ Vars::Vars() { scene01_picSc01Osk = 0; scene01_picSc01Osk2 = 0; + scene02_guvTheDrawer = 0; + scene02_boxDelay = 0; + scene02_boxOpen = false; + scene03_eggeater = 0; scene03_domino = 0; + scene04_bottle = 0; + scene04_hand = 0; + scene04_plank = 0; + scene04_clock = 0; + scene04_hand = 0; + scene04_spring = 0; + scene04_mamasha = 0; + scene04_boot = 0; + scene04_speaker = 0; + + scene04_ladder = 0; + scene04_coinPut = false; + scene04_soundPlaying = false; + scene04_dynamicPhaseIndex = 0; + + scene04_sceneClickX = 0; + scene04_sceneClickY = 0; + + scene04_var01 = 0; + scene04_var02 = 0; + scene04_var04 = 0; + scene04_var05 = 0; + scene04_var06 = 0; + scene04_var07 = 0; + scene04_var08 = 0; + scene04_var09 = 0; + scene04_var10 = 0; + scene04_var11 = 0; + scene04_var12 = 0; + scene04_var13 = 0; + scene04_var14 = 0; + scene04_var15 = 0; + scene04_var16 = 0; + scene04_var17 = 0; + scene04_var18 = 0; + scene04_var19 = 0; + scene04_var20 = 0; + scene04_var24 = 0; + selector = 0; } @@ -207,7 +225,6 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) { _updateCursorCallback = defaultUpdateCursor; break; -#if 0 case SC_2: sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_2"); scene->preloadMovements(sceneVar); @@ -218,7 +235,6 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) { addMessageHandler(sceneHandler02, 2); _updateCursorCallback = defaultUpdateCursor; break; -#endif case SC_3: sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_3"); @@ -232,7 +248,6 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) { _updateCursorCallback = scene03_updateCursor; break; -#if 0 case SC_4: sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_4"); scene->preloadMovements(sceneVar); @@ -244,6 +259,7 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) { _updateCursorCallback = scene04_updateCursor; break; +#if 0 case SC_5: sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_5"); scene->preloadMovements(sceneVar); @@ -679,1207 +695,14 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) { return true; } -void setElevatorButton(const char *name, int state) { - GameVar *var = g_fullpipe->getGameLoaderGameVar()->getSubVarByName("OBJSTATES")->getSubVarByName(sO_LiftButtons); - - if (var) - var->setSubVarAsInt(name, state); -} - -void global_messageHandler_KickStucco() { - warning("STUB: global_messageHandler_KickStucco()"); -} - -void global_messageHandler_KickMetal() { - warning("STUB: global_messageHandler_KickMetal()"); -} - -int global_messageHandler1(ExCommand *cmd) { - debug(0, "global_messageHandler1: %d %d", cmd->_messageKind, cmd->_messageNum); - - if (cmd->_excFlags & 0x10000) { - if (cmd->_messageNum == MV_MAN_TOLADDER) - cmd->_messageNum = MV_MAN_TOLADDER2; - if (cmd->_messageNum == MV_MAN_STARTLADDER) - cmd->_messageNum = MV_MAN_STARTLADDER2; - if (cmd->_messageNum == MV_MAN_GOLADDER) - cmd->_messageNum = MV_MAN_GOLADDER2; - if (cmd->_messageNum == MV_MAN_STOPLADDER) - cmd->_messageNum = MV_MAN_STOPLADDER2; - } - - if (g_fullpipe->_inputDisabled) { - if (cmd->_messageKind == 17) { - switch (cmd->_messageNum) { - case 29: - case 30: - case 36: - case 106: - cmd->_messageKind = 0; - break; - default: - break; - } - } - } else if (cmd->_messageKind == 17) { - switch (cmd->_messageNum) { - case MSG_MANSHADOWSON: - g_fullpipe->_aniMan->_shadowsOn = 1; - break; - case MSG_HMRKICK_STUCCO: - global_messageHandler_KickStucco(); - break; - case MSG_MANSHADOWSOFF: - g_fullpipe->_aniMan->_shadowsOn = 0; - break; - case MSG_DISABLESAVES: - g_fullpipe->disableSaves(cmd); - break; - case MSG_ENABLESAVES: - g_fullpipe->enableSaves(); - break; - case MSG_HMRKICK_METAL: - global_messageHandler_KickMetal(); - break; - case 29: // left mouse - if (g_fullpipe->_inventoryScene) { - if (getGameLoaderInventory()->handleLeftClick(cmd)) - cmd->_messageKind = 0; - } - break; - case 107: // right mouse - if (getGameLoaderInventory()->getSelectedItemId()) { - getGameLoaderInventory()->unselectItem(0); - cmd->_messageKind = 0; - } - break; - case 36: // keydown - g_fullpipe->defHandleKeyDown(cmd->_keyCode); - - switch (cmd->_keyCode) { - case '\x1B': // ESC - if (g_fullpipe->_currentScene) { - getGameLoaderInventory()->unselectItem(0); - g_fullpipe->openMainMenu(); - cmd->_messageKind = 0; - } - break; - case 't': - g_fullpipe->stopAllSounds(); - cmd->_messageKind = 0; - break; - case 'u': - g_fullpipe->toggleMute(); - cmd->_messageKind = 0; - break; - case ' ': - if (getGameLoaderInventory()->getIsLocked()) { - if (getGameLoaderInventory()->getIsInventoryOut()) { - getGameLoaderInventory()->setIsLocked(0); - } - } else { - getGameLoaderInventory()->slideOut(); - getGameLoaderInventory()->setIsLocked(1); - } - break; - case '\t': - if (g_fullpipe->_flgCanOpenMap) - g_fullpipe->openMap(); - cmd->_messageKind = 0; - break; - case 'p': - if (g_fullpipe->_flgCanOpenMap) - g_fullpipe->openHelp(); - cmd->_messageKind = 0; - break; - default: - break; - } - break; - case 33: - if (!g_fullpipe->_inventoryScene) - break; - - int invItem; - - if (g_fullpipe->_updateFlag && (invItem = g_fullpipe->_inventory->getHoveredItem(&g_fullpipe->_mouseScreenPos))) { - g_fullpipe->_cursorId = PIC_CSR_ITN; - if (!g_fullpipe->_currSelectedInventoryItemId && !g_fullpipe->_aniMan->_movement && - !(g_fullpipe->_aniMan->_flags & 0x100) && g_fullpipe->_aniMan->isIdle()) { - int st = g_fullpipe->_aniMan->_statics->_staticsId; - ExCommand *newex = 0; - - if (st == ST_MAN_RIGHT) { - newex = new ExCommand(g_fullpipe->_aniMan->_id, 1, rMV_MAN_LOOKUP, 0, 0, 0, 1, 0, 0, 0); - } else if (st == (0x4000 | ST_MAN_RIGHT)) { - newex = new ExCommand(g_fullpipe->_aniMan->_id, 1, MV_MAN_LOOKUP, 0, 0, 0, 1, 0, 0, 0); - } - - if (newex) { - newex->_keyCode = g_fullpipe->_aniMan->_okeyCode; - newex->_excFlags |= 3; - newex->postMessage(); - } - } - - if (g_fullpipe->_currSelectedInventoryItemId != invItem) - g_fullpipe->playSound(SND_CMN_070, 0); - - g_fullpipe->_currSelectedInventoryItemId = invItem; - g_fullpipe->setCursor(g_fullpipe->_cursorId); - break; - } - if (g_fullpipe->_updateCursorCallback) - g_fullpipe->_updateCursorCallback(); - - g_fullpipe->_currSelectedInventoryItemId = 0; - g_fullpipe->setCursor(g_fullpipe->_cursorId); - break; - case 65: // open map - if (cmd->_field_2C == 11 && cmd->_field_14 == ANI_INV_MAP && g_fullpipe->_flgCanOpenMap) - g_fullpipe->openMap(); - break; - default: - break; - } - } - - if (cmd->_messageKind == 56) { - getGameLoaderInventory()->rebuildItemRects(); - - ExCommand *newex = new ExCommand(0, 35, SND_CMN_031, 0, 0, 0, 1, 0, 0, 0); - - newex->_field_14 = 1; - newex->_excFlags |= 3; - newex->postMessage(); - - return 1; - } else if (cmd->_messageKind == 57) { - getGameLoaderInventory()->rebuildItemRects(); - - return 1; - } - - return 0; -} - -void staticANIObjectCallback(int *arg) { - (*arg)--; -} - -int global_messageHandler2(ExCommand *cmd) { - if (cmd->_messageKind != 17) - return 0; - - int res = 0; - StaticANIObject *ani; - - switch (cmd->_messageNum) { - case 0x44c8: - error("0x44c8"); - // Unk3_sub_4477A0(&unk3, _parentId, _field_14 != 0); - break; - - case 28: - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - if (ani) - ani->_priority = cmd->_field_14; - break; - - case 25: - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - if (ani) { - if (cmd->_field_14) { - ani->setFlags40(true); - ani->_callback2 = staticANIObjectCallback; - } else { - ani->setFlags40(false); - ani->_callback2 = 0; - } - } - break; - - case 26: - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - if (ani) { - Movement *mov = ani->_movement; - if (mov) - mov->_currDynamicPhase->_field_68 = 0; - } - break; - - default: -#if 0 - // We never put anything into _defMsgArray - while (::iterator it = g_fullpipe->_defMsgArray.begin(); it != g_fullpipe->_defMsgArray.end(); ++it) - if (((ExCommand *)*it)->_field_24 == _messageNum) { - ((ExCommand *)*it)->firef34(v13); - res = 1; - } -#endif - - //debug_msg(_messageNum); - - if (!g_fullpipe->_soundEnabled || cmd->_messageNum != 33 || g_fullpipe->_currSoundListCount <= 0) - return res; - - for (int snd = 0; snd < g_fullpipe->_currSoundListCount; snd++) { - SoundList *s = g_fullpipe->_currSoundList1[snd]; - int ms = s->getCount(); - for (int i = 0; i < ms; i++) { - s->getSoundByIndex(i)->setPanAndVolumeByStaticAni(); - } - } - } - - return res; -} - -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_fullpipe->_inputDisabled) - cmd->_messageKind = 0; - break; - default: - break; - } - } - - StaticANIObject *ani, *ani2; - - switch (cmd->_messageKind) { - case 17: - switch (cmd->_messageNum) { - case 61: - return g_fullpipe->_gameLoader->preloadScene(cmd->_parentId, cmd->_keyCode); - case 62: - return g_fullpipe->_gameLoader->gotoScene(cmd->_parentId, cmd->_keyCode); - case 64: - if (g_fullpipe->_currentScene && g_fullpipe->_msgObjectId2 - && (!(cmd->_keyCode & 4) || g_fullpipe->_msgObjectId2 != cmd->_field_14 || g_fullpipe->_msgId != cmd->_field_20)) { - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(g_fullpipe->_msgObjectId2, g_fullpipe->_msgId); - if (ani) { - ani->_flags &= 0xFF7F; - ani->_flags &= 0xFEFF; - ani->deleteFromGlobalMessageQueue(); - } - } - g_fullpipe->_msgX = 0; - g_fullpipe->_msgY = 0; - g_fullpipe->_msgObjectId2 = 0; - g_fullpipe->_msgId = 0; - if ((cmd->_keyCode & 1) || (cmd->_keyCode & 2)) { - g_fullpipe->_msgX = cmd->_x; - g_fullpipe->_msgY = cmd->_y; - } - if (cmd->_keyCode & 4) { - g_fullpipe->_msgObjectId2 = cmd->_field_14; - g_fullpipe->_msgId = cmd->_field_20; - } - return result; - case 29: - if (!g_fullpipe->_currentScene) - return result; - - if (g_fullpipe->_gameLoader->_interactionController->_flag24) { - ani = g_fullpipe->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); - ani2 = g_fullpipe->_currentScene->getStaticANIObject1ById(g_fullpipe->_gameLoader->_field_FA, -1); - if (ani) { - if (g_fullpipe->_msgObjectId2 == ani->_id && g_fullpipe->_msgId == ani->_okeyCode) { - cmd->_messageKind = 0; - return result; - } - if (canInteractAny(ani2, ani, cmd->_keyCode)) { - handleObjectInteraction(ani2, ani, cmd->_keyCode); - return 1; - } - } else { - int id = g_fullpipe->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); - PictureObject *pic = g_fullpipe->_currentScene->getPictureObjectById(id, 0); - if (pic) { - if (g_fullpipe->_msgObjectId2 == pic->_id && g_fullpipe->_msgId == pic->_okeyCode) { - cmd->_messageKind = 0; - return result; - } - if (!ani2 || canInteractAny(ani2, pic, cmd->_keyCode)) { - if (!ani2 || (ani2->isIdle() && !(ani2->_flags & 0x80) && !(ani2->_flags & 0x100))) - handleObjectInteraction(ani2, pic, cmd->_keyCode); - return 1; - } - } - } - } - if (getSc2MctlCompoundBySceneId(g_fullpipe->_currentScene->_sceneId)->_isEnabled && cmd->_keyCode <= 0) { - if (g_fullpipe->_msgX != cmd->_sceneClickX || g_fullpipe->_msgY != cmd->_sceneClickY) { - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(g_fullpipe->_gameLoader->_field_FA, -1); - if (!ani || (ani->isIdle() && !(ani->_flags & 0x80) && !(ani->_flags & 0x100))) { - result = startWalkTo(g_fullpipe->_gameLoader->_field_FA, -1, cmd->_sceneClickX, cmd->_sceneClickY, 0); - if (result) { - ExCommand *ex = new ExCommand(g_fullpipe->_gameLoader->_field_FA, 17, 64, 0, 0, 0, 1, 0, 0, 0); - - ex->_keyCode = 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_fullpipe->setCursor(cmd->_keyCode); - return result; - case 59: - setInputDisabled(1); - return result; - case 60: - setInputDisabled(0); - return result; - case 56: - if (cmd->_field_2C) { - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - 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_fullpipe->_currentScene, cmd->_parentId, cmd->_x, cmd->_y, cmd->_field_14); - getGameLoaderInventory()->rebuildItemRects(); - return 1; - } - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(g_fullpipe->_gameLoader->_field_FA, -1); - if (ani) { - getGameLoaderInventory()->removeItem2(g_fullpipe->_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_fullpipe->_currentScene) { - GameObject *obj; - if (cmd->_field_14) - obj = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_x, cmd->_y); - else - obj = g_fullpipe->_currentScene->getPictureObjectById(cmd->_x, cmd->_y); - handleObjectInteraction(g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode), obj, cmd->_field_20); - result = 1; - } - return result; - case 51: - return startWalkTo(cmd->_parentId, cmd->_keyCode, cmd->_x, cmd->_y, cmd->_field_20); - case 52: - return doSomeAnimation(cmd->_parentId, cmd->_keyCode, cmd->_field_20); - case 53: - return doSomeAnimation2(cmd->_parentId, cmd->_keyCode); - case 63: - if (cmd->_objtype == kObjTypeObjstateCommand) { - ObjstateCommand *c = (ObjstateCommand *)cmd; - result = 1; - g_fullpipe->setObjectState(c->_objCommandName, c->_value); - } - return result; - default: - return result; - } -} - -int global_messageHandler4(ExCommand *cmd) { - StaticANIObject *ani = 0; - - switch (cmd->_messageKind) { - case 18: { - MessageQueue *mq = new MessageQueue(g_fullpipe->_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_fullpipe->_currentScene) - break; - - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - if (!ani) - break; - - ani->trySetMessageQueue(cmd->_messageNum, cmd->_parId); - break; - - case 1: { - if (!g_fullpipe->_currentScene) - break; - - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - 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_fullpipe->_currentScene) - break; - - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - if (!ani) - break; - - ani->startAnimEx(cmd->_messageNum, cmd->_parId, -1, -1); - break; - - case 20: { - if (!g_fullpipe->_currentScene) - break; - - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - 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 >> 3, flags); - } else { - ani->startAnimSteps(cmd->_messageNum, cmd->_parId, cmd->_x, cmd->_y, cmd2->_points, cmd2->_pointsSize >> 3, flags); - } - break; - } - case 21: - if (!g_fullpipe->_currentScene) - break; - - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - if (!ani) - break; - - ani->queueMessageQueue(0); - ani->playIdle(); - break; - case 9: - // Nop in original - break; - case 3: - g_fullpipe->_currentScene->_y = cmd->_messageNum - cmd->_messageNum % g_fullpipe->_scrollSpeed; - break; - - case 4: - g_fullpipe->_currentScene->_x = cmd->_messageNum - cmd->_messageNum % g_fullpipe->_scrollSpeed; - break; - - case 19: { - if (!g_fullpipe->_currentScene) - break; - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - 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_fullpipe->_currentScene) - break; - - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - if (!ani) - break; - - ani->_flags |= 4; - ani->changeStatics2(cmd->_messageNum); - break; - - case 6: - if (!g_fullpipe->_currentScene) - break; - - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - if (!ani) - break; - - ani->hide(); - break; - - case 27: - if (!g_fullpipe->_currentScene || g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode) == 0) { - ani = g_fullpipe->accessScene(cmd->_field_20)->getStaticANIObject1ById(cmd->_parentId, -1); - if (ani) { - ani = new StaticANIObject(ani); - g_fullpipe->_currentScene->addStaticANIObject(ani, 1); - } - } - - // fall through - case 5: - if (g_fullpipe->_currentScene) - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - - 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_fullpipe->_currentScene) - break; - - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - 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_fullpipe->_currentScene->_picObjList.size()) - break; - - int offX = g_fullpipe->_scrollSpeed * (cmd->_x / g_fullpipe->_scrollSpeed); - int offY = g_fullpipe->_scrollSpeed * (cmd->_y / g_fullpipe->_scrollSpeed); - - if (cmd->_messageNum) { - g_fullpipe->_currentScene->_x = offX - g_fullpipe->_sceneRect.left; - g_fullpipe->_currentScene->_y = offY - g_fullpipe->_sceneRect.top; - - if (cmd->_field_24) { - g_fullpipe->_currentScene->_messageQueueId = cmd->_parId; - } - } else { - g_fullpipe->_sceneRect.moveTo(offX, offY); - - g_fullpipe->_currentScene->_x = 0; - g_fullpipe->_currentScene->_y = 0; - - g_fullpipe->_currentScene->updateScrolling2(); - } - break; - } - case 34: - if (!g_fullpipe->_currentScene) - break; - - ani = g_fullpipe->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_keyCode); - 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; -} - -int MovGraph_messageHandler(ExCommand *cmd) { - if (cmd->_messageKind != 17) - return 0; - - if (cmd->_messageNum != 33) - return 0; - - StaticANIObject *ani = g_fullpipe->_currentScene->getStaticANIObject1ById(g_fullpipe->_gameLoader->_field_FA, -1); - - if (!getSc2MctlCompoundBySceneId(g_fullpipe->_currentScene->_sceneId)) - return 0; - - if (getSc2MctlCompoundBySceneId(g_fullpipe->_currentScene->_sceneId)->_objtype != kObjTypeMovGraph || !ani) - return 0; - - MovGraph *gr = (MovGraph *)getSc2MctlCompoundBySceneId(g_fullpipe->_currentScene->_sceneId); - - MovGraphLink *link = 0; - double mindistance = 1.0e10; - Common::Point point; - - for (ObList::iterator i = gr->_links.begin(); i != gr->_links.end(); ++i) { - point.x = ani->_ox; - point.y = ani->_oy; - - double dst = gr->calcDistance(&point, (MovGraphLink *)(*i), 0); - if (dst >= 0.0 && dst < mindistance) { - mindistance = dst; - link = (MovGraphLink *)(*i); - } - } - - int top; - - if (link) { - MovGraphNode *node = link->_movGraphNode1; - - double sq = (ani->_oy - node->_y) * (ani->_oy - node->_y) + (ani->_ox - node->_x) * (ani->_ox - node->_x); - int off = (node->_field_14 >> 16) & 0xFF; - double off2 = ((link->_movGraphNode2->_field_14 >> 8) & 0xff) - off; - - top = off + (int)(sqrt(sq) * off2 / link->_distance); - } else { - top = (gr->calcOffset(ani->_ox, ani->_oy)->_field_14 >> 8) & 0xff; - } - - if (ani->_movement) { - ani->_movement->_currDynamicPhase->_rect->top = 255 - top; - return 0; - } - - if (ani->_statics) - ani->_statics->_rect->top = 255 - top; - - return 0; -} - int defaultUpdateCursor() { g_fullpipe->updateCursorCommon(); return g_fullpipe->_cursorId; } -int sceneIntro_updateCursor() { - g_fullpipe->_cursorId = 0; - - return 0; -} - -void FullpipeEngine::setSwallowedEggsState() { - GameVar *v = _gameLoader->_gameVar->getSubVarByName("OBJSTATES")->getSubVarByName(sO_GulpedEggs); - - g_vars->swallowedEgg1 = v->getSubVarByName(sO_Egg1); - g_vars->swallowedEgg2 = v->getSubVarByName(sO_Egg2); - g_vars->swallowedEgg3 = v->getSubVarByName(sO_Egg3); - - g_vars->swallowedEgg1->_value.intValue = 0; - g_vars->swallowedEgg2->_value.intValue = 0; - g_vars->swallowedEgg3->_value.intValue = 0; -} - -void sceneIntro_initScene(Scene *sc) { - g_fullpipe->_gameLoader->loadScene(SC_INTRO2); - - g_vars->sceneIntro_aniin1man = sc->getStaticANIObject1ById(ANI_IN1MAN, -1); - g_vars->sceneIntro_needSleep = true; - g_vars->sceneIntro_needGetup = false; - g_vars->sceneIntro_playing = true; - g_vars->sceneIntro_needBlackout = false; - - if (g_fullpipe->_recordEvents || g_fullpipe->_inputArFlag) - g_vars->sceneIntro_skipIntro = false; - - g_fullpipe->_modalObject = new ModalIntro; -} - -void sceneHandlerIntro_part1() { - g_fullpipe->_currentScene = g_fullpipe->accessScene(SC_INTRO1); - chainQueue(QU_INTR_FINISH, 0); -} - -void sceneHandlerIntro_part2() { - g_fullpipe->_currentScene = g_fullpipe->accessScene(SC_INTRO2); - chainQueue(QU_IN2_DO, 0); -} - -int sceneHandlerIntro(ExCommand *ex) { - if (ex->_messageKind != 17) - return 0; - - switch (ex->_messageNum) { - case MSG_INTR_ENDINTRO: - g_vars->sceneIntro_playing = 0; - return 0; - - case MSG_INTR_SWITCHTO1: - sceneHandlerIntro_part1(); - return 0; - - case MSG_INTR_GETUPMAN: - g_vars->sceneIntro_needSleep = 0; - g_vars->sceneIntro_needGetup = 1; - return 0; - - case MSG_INTR_SWITCHTO2: - sceneHandlerIntro_part2(); - return 0; - - case 33: - // fall through - break; - - default: - return 0; - } - - if (g_vars->sceneIntro_needSleep) { - if (!g_vars->sceneIntro_aniin1man->_movement && g_vars->sceneIntro_aniin1man->_statics->_staticsId == ST_IN1MAN_SLEEP) - g_vars->sceneIntro_aniin1man->startAnim(MV_IN1MAN_SLEEP, 0, -1); - } else if (g_vars->sceneIntro_needGetup && !g_vars->sceneIntro_aniin1man->_movement && - g_vars->sceneIntro_aniin1man->_statics->_staticsId == ST_IN1MAN_SLEEP) { - g_vars->sceneIntro_needGetup = 0; - - chainQueue(QU_INTR_GETUPMAN, 0); - } - - g_fullpipe->startSceneTrack(); - - return 0; -} - -void scene01_fixEntrance() { - GameVar *var = g_fullpipe->getGameLoaderGameVar()->getSubVarByName("OBJSTATES")->getSubVarByName("SAVEGAME"); - if (var->getSubVarAsInt("Entrance") == TrubaLeft) - var->setSubVarAsInt("Entrance", TrubaRight); -} - -void scene01_initScene(Scene *sc, int entrance) { - g_vars->scene01_picSc01Osk = sc->getPictureObjectById(PIC_SC1_OSK, 0); - g_vars->scene01_picSc01Osk->_flags &= 0xFFFB; - - g_vars->scene01_picSc01Osk2 = sc->getPictureObjectById(PIC_SC1_OSK2, 0); - g_vars->scene01_picSc01Osk2->_flags &= 0xFFFB; - - if (g_fullpipe->getObjectState(sO_EggCracker) == g_fullpipe->getObjectEnumState(sO_EggCracker, sO_DidNotCrackEgg)) { - PictureObject *pic = sc->getPictureObjectById(PIC_SC1_KUCHKA, 0); - if (pic) - pic->_flags &= 0xFFFB; - } - - if (entrance != TrubaLeft) { - StaticANIObject *bootAnim = sc->getStaticANIObject1ById(ANI_BOOT_1, -1); - if (bootAnim) - bootAnim->_flags &= ~0x04; - } - - setElevatorButton(sO_Level2, ST_LBN_2N); -} - -int sceneHandler01(ExCommand *cmd) { - int res = 0; - - if (cmd->_messageKind != 17) - return 0; - - if (cmd->_messageNum > MSG_SC1_SHOWOSK) { - if (cmd->_messageNum == MSG_SC1_UTRUBACLICK) - handleObjectInteraction(g_fullpipe->_aniMan, g_fullpipe->_currentScene->getPictureObjectById(PIC_SC1_LADDER, 0), 0); - - return 0; - } - - if (cmd->_messageNum == MSG_SC1_SHOWOSK) { - g_vars->scene01_picSc01Osk->_flags |= 4; - - g_vars->scene01_picSc01Osk->_priority = 20; - g_vars->scene01_picSc01Osk2->_priority = 21; - - return 0; - } - - if (cmd->_messageNum != 0x21) { - if (cmd->_messageNum == MSG_SC1_SHOWOSK2) { - g_vars->scene01_picSc01Osk2->_flags |= 4; - g_vars->scene01_picSc01Osk2->_priority = 20; - g_vars->scene01_picSc01Osk->_priority = 21; - - return 0; - } - - return 0; - } - - if (g_fullpipe->_aniMan2) { - if (g_fullpipe->_aniMan2->_ox < g_fullpipe->_sceneRect.left + 200) { - g_fullpipe->_currentScene->_x = g_fullpipe->_aniMan2->_ox - g_fullpipe->_sceneRect.left - 300; - } - - if (g_fullpipe->_aniMan2->_ox > g_fullpipe->_sceneRect.right - 200) - g_fullpipe->_currentScene->_x = g_fullpipe->_aniMan2->_ox - g_fullpipe->_sceneRect.right + 300; - - res = 1; - } - g_fullpipe->_behaviorManager->updateBehaviors(); - - g_fullpipe->startSceneTrack(); - - return res; -} - -void scene03_initScene(Scene *sc) { - g_vars->scene03_eggeater = sc->getStaticANIObject1ById(ANI_EGGEATER, -1); - g_vars->scene03_domino = sc->getStaticANIObject1ById(ANI_DOMINO_3, -1); - - GameVar *v = g_fullpipe->_gameLoader->_gameVar->getSubVarByName("OBJSTATES")->getSubVarByName(sO_GulpedEggs); - - g_vars->swallowedEgg1 = v->getSubVarByName(sO_Egg1); - g_vars->swallowedEgg2 = v->getSubVarByName(sO_Egg2); - g_vars->swallowedEgg3 = v->getSubVarByName(sO_Egg3); - - setElevatorButton(sO_Level2, ST_LBN_2N); - - g_fullpipe->lift_sub5(sc, QU_SC3_ENTERLIFT, QU_SC3_EXITLIFT); -} - -void scene03_setEaterState() { - if (g_fullpipe->getObjectState(sO_EggGulperGaveCoin) == g_fullpipe->getObjectEnumState(sO_EggGulperGaveCoin, sO_Yes)) { - g_fullpipe->_behaviorManager->setBehaviorEnabled(g_vars->scene03_eggeater, ST_EGTR_SLIM, QU_EGTR_SLIMSHOW, 0); - g_fullpipe->_behaviorManager->setBehaviorEnabled(g_vars->scene03_eggeater, ST_EGTR_MID1, QU_EGTR_MD1_SHOW, 0); - g_fullpipe->_behaviorManager->setBehaviorEnabled(g_vars->scene03_eggeater, ST_EGTR_MID2, QU_EGTR_MD2_SHOW, 0); - } -} - -int scene03_updateCursor() { - g_fullpipe->updateCursorCommon(); - - if (g_fullpipe->_cursorId == PIC_CSR_DEFAULT && g_fullpipe->_objectIdAtCursor == PIC_SC3_DOMIN && g_vars->scene03_domino) { - if (g_vars->scene03_domino->_flags & 4) - g_fullpipe->_cursorId = PIC_CSR_ITN; - } - - return g_fullpipe->_cursorId; -} - -void sceneHandler03_eaterFat() { - g_vars->scene03_eggeater->_flags &= 0xFF7F; - - g_vars->scene03_eggeater->startAnim(MV_EGTR_FATASK, 0, -1); -} - -void sceneHandler03_swallowEgg(int item) { - if (!g_vars->swallowedEgg1->_value.intValue) { - g_vars->swallowedEgg1->_value.intValue = item; - } else if (!g_vars->swallowedEgg2->_value.intValue) { - g_vars->swallowedEgg2->_value.intValue = item; - } else if (!g_vars->swallowedEgg3->_value.intValue) { - g_vars->swallowedEgg3->_value.intValue = item; - - g_fullpipe->setObjectState(sO_EggGulperGaveCoin, g_fullpipe->getObjectEnumState(sO_EggGulperGaveCoin, sO_Yes)); - - scene03_setEaterState(); - } -} - -void sceneHandler03_giveItem(ExCommand *ex) { - if (ex->_parentId == ANI_INV_EGGAPL || ex->_parentId == ANI_INV_EGGDOM || - ex->_parentId == ANI_INV_EGGCOIN || ex->_parentId == ANI_INV_EGGBOOT || - ex->_parentId == ANI_INV_EGGGLS) - sceneHandler03_swallowEgg(ex->_parentId); -} - -int sceneHandler03_swallowedEgg1State() { - return g_vars->swallowedEgg1->_value.intValue; -} - -void sceneHandler03_giveCoin(ExCommand *ex) { - MessageQueue *mq = g_fullpipe->_globalMessageQueueList->getMessageQueueById(ex->_parId); - - if (mq && mq->getCount() > 0) { - ExCommand *ex0 = mq->getExCommandByIndex(0); - ExCommand *ex1 = mq->getExCommandByIndex(1); - - if (sceneHandler03_swallowedEgg1State()) { - ex0->_messageKind = 1; - ex1->_messageKind = 1; - - getGameLoaderInventory()->removeItem(ANI_INV_COIN, 1); - } else { - ex0->_messageKind = 0; - ex0->_excFlags |= 1; - - ex1->_messageKind = 0; - ex1->_excFlags |= 1; - - g_vars->scene03_eggeater->_flags &= 0xFF7Fu; - } - } -} - -void sceneHandler03_goLadder() { - handleObjectInteraction(g_fullpipe->_aniMan, g_fullpipe->_currentScene->getPictureObjectById(PIC_SC3_LADDER, 0), 0); -} - -void sceneHandler03_pushEggStack() { - g_vars->swallowedEgg1->_value.intValue = g_vars->swallowedEgg2->_value.intValue; - g_vars->swallowedEgg2->_value.intValue = g_vars->swallowedEgg3->_value.intValue; - g_vars->swallowedEgg3->_value.intValue = 0; - - if (g_vars->swallowedEgg2->_value.intValue == ANI_INV_EGGBOOT - && g_vars->swallowedEgg1->_value.intValue == ANI_INV_EGGAPL) { - g_vars->swallowedEgg1->_value.intValue = ANI_INV_EGGBOOT; - g_vars->swallowedEgg2->_value.intValue = ANI_INV_EGGAPL; - } -} - -void sceneHandler03_releaseEgg() { - g_vars->scene03_eggeater->_flags &= 0xFF7F; - - g_vars->scene03_eggeater->show1(-1, -1, -1, 0); -} - -void sceneHandler03_takeEgg(ExCommand *ex) { - MessageQueue *mq = g_fullpipe->_globalMessageQueueList->getMessageQueueById(ex->_parId); - - if (mq && mq->getCount() > 0) { - ExCommand *ex0 = mq->getExCommandByIndex(0); - ExCommand *ex1 = mq->getExCommandByIndex(1); - - int egg1 = sceneHandler03_swallowedEgg1State(); - - if (egg1 && ex0) { - ex0->_parentId = egg1; - sceneHandler03_pushEggStack(); - } - - if ( g_vars->swallowedEgg1->_value.intValue == ANI_INV_EGGAPL - && !g_vars->swallowedEgg2->_value.intValue - && !g_vars->swallowedEgg3->_value.intValue - && ex1) { - - if (ex1->_objtype == kObjTypeObjstateCommand) { - ObjstateCommand *com = (ObjstateCommand *)ex1; - - com->_value = g_fullpipe->getObjectEnumState(sO_EggGulper, sO_WantsNothing); - } - } - } -} - -int sceneHandler03(ExCommand *ex) { - if (ex->_messageKind != 17) { - if (ex->_messageKind == 57) - sceneHandler03_giveItem(ex); - return 0; - } - - switch (ex->_messageNum) { - case MSG_LIFT_EXITLIFT: - g_fullpipe->lift_exitSeq(ex); - break; - - case MSG_LIFT_CLOSEDOOR: - g_fullpipe->lift_closedoorSeq(); - break; - - case MSG_SC3_ONTAKECOIN: - sceneHandler03_eaterFat(); - break; - - case MSG_LIFT_STARTEXITQUEUE: - g_fullpipe->lift_startExitQueue(); - break; - - case MSG_SC3_RELEASEEGG: - sceneHandler03_releaseEgg(); - break; - - case MSG_LIFT_CLICKBUTTON: - g_fullpipe->lift_animation3(); - break; - - case MSG_SC3_HIDEDOMINO: - g_vars->scene03_domino->_flags &= 0xFFFB; - break; - - case MSG_SC3_TAKEEGG: - sceneHandler03_takeEgg(ex); - break; - - case MSG_LIFT_GO: - g_fullpipe->lift_goAnimation(); - break; - - case MSG_SC3_UTRUBACLICK: - sceneHandler03_goLadder(); - break; - - case MSG_SC3_TESTFAT: - sceneHandler03_giveCoin(ex); - break; - - case 64: - g_fullpipe->lift_sub05(ex); - break; - - case 93: - { - StaticANIObject *ani = g_fullpipe->_currentScene->getStaticANIObjectAtPos(ex->_sceneClickX, ex->_sceneClickY); - if (ani && ani->_id == ANI_LIFTBUTTON) { - g_fullpipe->lift_sub1(ani); - ex->_messageKind = 0; - - return 0; - } - - if (g_fullpipe->_currentScene->getPictureObjectIdAtPos(ex->_sceneClickX, ex->_sceneClickY) == PIC_SC3_DOMIN) { - if (g_vars->scene03_domino) - if (g_vars->scene03_domino->_flags & 4) - if (g_fullpipe->_aniMan->isIdle()) - if (!(g_fullpipe->_aniMan->_flags & 0x100) && g_fullpipe->_msgObjectId2 != g_vars->scene03_domino->_id) { - handleObjectInteraction(g_fullpipe->_aniMan, g_vars->scene03_domino, ex->_keyCode); - ex->_messageKind = 0; - - return 0; - } - } - - break; - } - - case 97: - { - int res = 0; - - if (g_fullpipe->_aniMan2) { - if (g_fullpipe->_aniMan2->_ox < g_fullpipe->_sceneRect.left + 200) - g_fullpipe->_currentScene->_x = g_fullpipe->_aniMan2->_ox - g_fullpipe->_sceneRect.left - 300; - - if (g_fullpipe->_aniMan2->_ox > g_fullpipe->_sceneRect.right - 200) - g_fullpipe->_currentScene->_x = g_fullpipe->_aniMan2->_ox - g_fullpipe->_sceneRect.right + 300; - - res = 1; - } - - g_fullpipe->_behaviorManager->updateBehaviors(); - - g_fullpipe->startSceneTrack(); - - return res; - } - } - - return 0; -} - -void sceneDbgMenu_initScene(Scene *sc) { - g_vars->selector = sc->getPictureObjectById(PIC_SCD_SEL, 0); - getGameLoaderInteractionController()->disableFlag24(); - setInputDisabled(0); -} - -GameObject *sceneHandlerDbgMenu_getObjectAtXY(int x, int y) { - if (g_fullpipe->_currentScene) - for (uint i = 0; i < g_fullpipe->_currentScene->_picObjList.size(); i++) { - PictureObject *pic = (PictureObject *)g_fullpipe->_currentScene->_picObjList[i]; - - if (x >= pic->_ox && y >= pic->_oy) { - Common::Point point; - - pic->getDimensions(&point); - - if (x <= pic->_ox + point.x && y <= pic->_oy + point.y && pic != g_vars->selector) - return pic; - } - } - - return 0; -} - -int sceneHandlerDbgMenu(ExCommand *ex) { - if (ex->_messageKind != 17) - return 0; - - int mx = g_fullpipe->_mouseScreenPos.x + g_fullpipe->_sceneRect.left; - int my = g_fullpipe->_mouseScreenPos.y + g_fullpipe->_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_fullpipe->_needRestart = true; - return 0; - } - return 0; - } - - g_fullpipe->_cursorId = PIC_CSR_DEFAULT; - GameObject *obj = g_fullpipe->_currentScene->getStaticANIObjectAtPos(mx, my); - if (obj) { - if (canInteractAny(0, obj, -3)) { - g_fullpipe->_cursorId = PIC_CSR_DEFAULT; - g_fullpipe->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_fullpipe->_cursorId = PIC_CSR_DEFAULT; - g_fullpipe->setCursor(PIC_CSR_DEFAULT); - return 0; - } - g_vars->selector->_flags &= 0xFFFB; - } - g_fullpipe->setCursor(g_fullpipe->_cursorId); - - return 0; +void FullpipeEngine::initArcadeKeys(const char *varname) { + warning("STUB: FullpipeEngine::initArcadeKeys(\"%s\")", varname); } } // End of namespace Fullpipe |