aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe
diff options
context:
space:
mode:
authorEugene Sandulenko2014-01-02 23:53:36 +0200
committerEugene Sandulenko2014-01-02 23:53:36 +0200
commitbf304184b838bcd446cd3330a92c2d1ba2539b67 (patch)
tree94cc2f7433501855b45bb69c7a45688b5fe6f3aa /engines/fullpipe
parentfdad3971e5092e79794900ecc3e89d90a51a4b83 (diff)
downloadscummvm-rg350-bf304184b838bcd446cd3330a92c2d1ba2539b67.tar.gz
scummvm-rg350-bf304184b838bcd446cd3330a92c2d1ba2539b67.tar.bz2
scummvm-rg350-bf304184b838bcd446cd3330a92c2d1ba2539b67.zip
FULLPIPE: Implement sceneHandler22_stoolLogic()
Diffstat (limited to 'engines/fullpipe')
-rw-r--r--engines/fullpipe/constants.h7
-rw-r--r--engines/fullpipe/scenes/scene22.cpp134
2 files changed, 137 insertions, 4 deletions
diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 96abc3a523..af09d1d4d2 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -756,8 +756,15 @@ namespace Fullpipe {
#define QU_SC22_FALLSACK 1791
#define QU_SC22_FALLSACK_GMA 2613
#define QU_SC22_FROMSTOOL 1800
+#define QU_SC22_HANDLEDOWN 1804
+#define QU_SC22_PUTSTOOL 1803
#define QU_SC22_SHOWSTOOL 1793
+#define QU_SC22_TOSTOOL 1801
+#define QU_SC22_TOSTOOL_R 3332
+#define QU_SC22_TRYBOX 5311
+#define QU_SC22_TRYHANDLE 1802
#define QU_MSH_MOVE 1812
+#define rMV_MAN_TURN_SRL 1090
#define ST_GRFM_AFTER 3472
#define ST_GRFM_NORM 1983
#define ST_MSH_SIT 1756
diff --git a/engines/fullpipe/scenes/scene22.cpp b/engines/fullpipe/scenes/scene22.cpp
index f4c6009223..7a5ecb7a7c 100644
--- a/engines/fullpipe/scenes/scene22.cpp
+++ b/engines/fullpipe/scenes/scene22.cpp
@@ -163,8 +163,134 @@ void sceneHandler22_fromStool(ExCommand *cmd) {
}
}
-void sceneHandler22_sub02(ExCommand *cmd) {
- warning("STUB: sceneHandler22_sub02(cmd)");
+void sceneHandler22_stoolLogic(ExCommand *cmd) {
+ StaticANIObject *ani;
+ MessageQueue *mq;
+ int xpos;
+ int manId;
+
+ if (g_fp->_aniMan->isIdle() && !(g_fp->_aniMan->_flags & 0x100)) {
+ if (cmd->_keyCode == ANI_INV_STOOL) {
+ if (abs(841 - g_fp->_aniMan->_ox) <= 1) {
+ if (abs(449 - g_fp->_aniMan->_oy) <= 1) {
+ chainQueue(QU_SC22_PUTSTOOL, 1);
+ g_vars->scene22_var08 = 1;
+
+ return;
+ }
+ }
+ goto LABEL_13;
+ }
+
+ if (cmd->_keyCode == ANI_INV_BOX) {
+ ani = g_fp->_currentScene->getStaticANIObject1ById(ANI_TABURETTE, -1);
+ if (!ani || !(ani->_flags & 4)) {
+ if (abs(841 - g_fp->_aniMan->_ox) <= 1) {
+ if (abs(449 - g_fp->_aniMan->_oy) <= 1) {
+ chainObjQueue(g_fp->_aniMan, QU_SC22_TRYBOX, 1);
+ return;
+ }
+ }
+ LABEL_13:
+ xpos = 841;
+ manId = ST_MAN_RIGHT;
+ LABEL_31:
+ mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, xpos, 449, 1, manId);
+
+ if (!mq)
+ return;
+
+ mq->addExCommandToEnd(new ExCommand(cmd));
+
+ postExCommand(g_fp->_aniMan->_id, 2, 841, 449, 0, -1);
+ return;
+ }
+ } else {
+ if (cmd->_keyCode)
+ return;
+ if (g_vars->scene22_var07) {
+ if (g_fp->_aniMan->_movement)
+ return;
+
+ chainQueue(QU_SC22_HANDLEDOWN, 1);
+ g_vars->scene22_var08 = 1;
+ return;
+ }
+
+ ani = g_fp->_currentScene->getStaticANIObject1ById(ANI_TABURETTE, -1);
+ if (ani && (ani->_flags & 4)) {
+ int x = g_fp->_aniMan->_ox;
+ int y = g_fp->_aniMan->_ox;
+
+ if (sqrt((double)((841 - x) * (841 - x) + (449 - y) * (449 - y)))
+ < sqrt((double)((1075 - x) * (1075 - x) + (449 - y) * (449 - y)))) {
+ if (abs(841 - x) <= 1) {
+ if (abs(449 - y) <= 1) {
+ chainQueue(QU_SC22_TOSTOOL, 1);
+ g_vars->scene22_var08 = 1;
+ return;
+ }
+ }
+ goto LABEL_13;
+ }
+
+ if (abs(1075 - x) > 1 || abs(449 - y) > 1) {
+ xpos = 1075;
+ manId = ST_MAN_RIGHT | 0x4000;
+ goto LABEL_31;
+ }
+
+ MGM mgm;
+ MGMInfo mgminfo;
+
+ mgm.addItem(ANI_MAN);
+ mgminfo.ani = g_fp->_aniMan;
+ mgminfo.staticsId2 = ST_MAN_RIGHT;
+ mgminfo.x1 = 934;
+ mgminfo.y1 = 391;
+ mgminfo.field_1C = 10;
+ mgminfo.staticsId1 = 0x4145;
+ mgminfo.x2 = 981;
+ mgminfo.y2 = 390;
+ mgminfo.field_10 = 1;
+ mgminfo.flags = 127;
+ mgminfo.movementId = rMV_MAN_TURN_SRL;
+
+ mq = mgm.genMovement(&mgminfo);
+
+ ExCommand *ex = mq->getExCommandByIndex(0);
+
+ mq->deleteExCommandByIndex(0, 0);
+
+ if (mq)
+ delete mq;
+
+ mq = new MessageQueue(g_fp->_currentScene->getMessageQueueById(QU_SC22_TOSTOOL_R), 0, 0);
+
+ mq->insertExCommandAt(2, ex);
+ mq->setFlags(mq->getFlags() | 1);
+ mq->chain(0);
+
+ g_vars->scene22_var08 = 1;
+ } else {
+ if (abs(1010 - g_fp->_aniMan->_ox) <= 1) {
+ if (abs(443 - g_fp->_aniMan->_oy) <= 1) {
+ chainQueue(QU_SC22_TRYHANDLE, 1);
+ return;
+ }
+ }
+
+ mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 1010, 443, 1, ST_MAN_UP);
+
+ if (mq) {
+ mq->addExCommandToEnd(new ExCommand(cmd));
+
+ postExCommand(g_fp->_aniMan->_id, 2, 1010, 443, 0, -1);
+ return;
+ }
+ }
+ }
+ }
}
int sceneHandler22(ExCommand *cmd) {
@@ -213,7 +339,7 @@ int sceneHandler22(ExCommand *cmd) {
StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY);
if (ani && ani->_id == ANI_HANDLE_L) {
- sceneHandler22_sub02(cmd);
+ sceneHandler22_stoolLogic(cmd);
return 0;
}
@@ -254,7 +380,7 @@ int sceneHandler22(ExCommand *cmd) {
g_fp->_currentScene->_x = g_fp->_sceneWidth - x;
}
- if (x > g_fp->_sceneRect.right - g_vars->scene22_var01 )
+ if (x > g_fp->_sceneRect.right - g_vars->scene22_var01)
g_fp->_currentScene->_x = x + g_vars->scene22_var03 - g_fp->_sceneRect.right;
g_fp->_behaviorManager->updateBehaviors();