aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2014-02-12 21:15:48 +0200
committerEugene Sandulenko2014-02-13 00:50:41 +0200
commit893667fc9e1f83d51351b3c84cf1b6dcd1f703b5 (patch)
tree9f61592082c56508e488858deed5beb42e1cb540
parent7c549a3eed235a1cb9850508549a48fc44e9c0a1 (diff)
downloadscummvm-rg350-893667fc9e1f83d51351b3c84cf1b6dcd1f703b5.tar.gz
scummvm-rg350-893667fc9e1f83d51351b3c84cf1b6dcd1f703b5.tar.bz2
scummvm-rg350-893667fc9e1f83d51351b3c84cf1b6dcd1f703b5.zip
FULLPIPE: Plug scene09 in
-rw-r--r--engines/fullpipe/constants.h10
-rw-r--r--engines/fullpipe/module.mk1
-rw-r--r--engines/fullpipe/scenes.cpp21
-rw-r--r--engines/fullpipe/scenes.h20
-rw-r--r--engines/fullpipe/scenes/scene09.cpp50
5 files changed, 75 insertions, 27 deletions
diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 4d63031153..c8400c7280 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -585,6 +585,16 @@ namespace Fullpipe {
#define ST_MAN8_STAND 774
#define ST_VMT_MIN 766
+// Scene 9
+#define ANI_BALL9 933
+#define ANI_GLOTATEL 924
+#define ANI_GRIT_9 2719
+#define ANI_PLEVATEL 919
+#define ANI_VISUNCHIK 904
+#define MV_VSN_CYCLE2 2987
+#define ST_GRT9_GRIT 2722
+#define ST_GRT9_NORM 2721
+
// Scene 10
#define ANI_GUM 978
#define ANI_NADUVATEL 944
diff --git a/engines/fullpipe/module.mk b/engines/fullpipe/module.mk
index 02999344e4..db97fa202b 100644
--- a/engines/fullpipe/module.mk
+++ b/engines/fullpipe/module.mk
@@ -33,6 +33,7 @@ MODULE_OBJS = \
scenes/scene06.o \
scenes/scene07.o \
scenes/scene08.o \
+ scenes/scene09.o \
scenes/scene10.o \
scenes/scene11.o \
scenes/scene12.o \
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index 6225c33132..3d4898ed4c 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -156,6 +156,20 @@ Vars::Vars() {
scene08_stairsVisible = true;
scene08_manOffsetY = 0;
+ scene09_flyingBall = 0;
+ scene09_var05 = 0;
+ scene09_glotatel = 0;
+ scene09_spitter = 0;
+ scene09_grit = 0;
+ scene09_var08 = 1;
+ scene09_var09 = 0;
+ scene09_var10 = -1;
+ scene09_var11 = -1;
+ scene09_var12 = -1000;
+ scene09_numMovingHangers = 0;
+ scene09_var13 = 0;
+ scene09_var15 = 0;
+
scene10_gum = 0;
scene10_packet = 0;
scene10_packet2 = 0;
@@ -1388,4 +1402,11 @@ void BallChain::init(Ball **ball) {
}
}
+Ball *BallChain::sub04(Ball *ballP, Ball *ballN) {
+ warning("STUB: BallChain::sub04");
+
+ return pTail;
+}
+
+
} // End of namespace Fullpipe
diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h
index 171961863b..1dbad6e67d 100644
--- a/engines/fullpipe/scenes.h
+++ b/engines/fullpipe/scenes.h
@@ -27,6 +27,7 @@ namespace Fullpipe {
struct Bat;
struct BehaviorEntryInfo;
+struct Hanger;
class MGM;
class MctlLadder;
struct Ring;
@@ -208,6 +209,8 @@ struct BallChain {
~BallChain() { free(cPlex); }
void init(Ball **ball);
+ Ball *sub04(Ball *ballP, Ball *ballN);
+ void reset() { pHead = 0; pTail = 0; field_8 = 0; numBalls = 0; free(cPlex); cPlex = 0; cPlexLen = 0; }
};
class Vars {
@@ -341,6 +344,23 @@ public:
bool scene08_stairsVisible;
int scene08_manOffsetY;
+ StaticANIObject *scene09_flyingBall;
+ int scene09_var05;
+ StaticANIObject *scene09_glotatel;
+ StaticANIObject *scene09_spitter;
+ StaticANIObject *scene09_grit;
+ int scene09_var08;
+ int scene09_var09;
+ int scene09_var10;
+ int scene09_var11;
+ int scene09_var12;
+ BallChain scene09_balls;
+ Common::Array<Hanger *> scene09_hangers;
+ BallChain scene09_var07;
+ int scene09_numMovingHangers;
+ int scene09_var13;
+ int scene09_var15;
+
StaticANIObject *scene10_gum;
StaticANIObject *scene10_packet;
StaticANIObject *scene10_packet2;
diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index 82edc2b459..29305413d4 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -36,12 +36,19 @@
namespace Fullpipe {
+struct Hanger {
+ StaticANIObject *ani;
+ int field_4;
+ int field_8;
+ int phase;
+};
+
void scene09_setupGrit(Scene *sc) {
if (g_vars->scene09_grit->_statics->_staticsId == ST_GRT9_GRIT) {
if (!getGameLoaderInventory()->getCountItemsWithId(ANI_INV_COIN)) {
- if (getObjectState(sO_CoinSlot_1) == getObjectEnumState(sO_CoinSlot_1, sO_Empty)
+ if (g_fp->getObjectState(sO_CoinSlot_1) == g_fp->getObjectEnumState(sO_CoinSlot_1, sO_Empty)
&& (g_vars->swallowedEgg1->_value.intValue == ANI_INV_EGGBOOT || g_vars->swallowedEgg2->_value.intValue == ANI_INV_EGGBOOT || g_vars->swallowedEgg3->_value.intValue == ANI_INV_EGGBOOT)) {
- Scene *oldsc = g_currentScene;
+ Scene *oldsc = g_fp->_currentScene;
g_fp->_currentScene = sc;
g_vars->scene09_grit->changeStatics2(ST_GRT9_NORM);
g_fp->_currentScene = oldsc;
@@ -63,7 +70,7 @@ void scene09_initScene(Scene *sc) {
g_vars->scene09_var12 = -1000;
while (g_vars->scene09_balls.numBalls) {
- Ball *b = &g_vars->scene09_balls.pHead->p0;
+ Ball *b = g_vars->scene09_balls.pHead->p0;
g_vars->scene09_balls.pHead = g_vars->scene09_balls.pHead->p0;
@@ -72,25 +79,14 @@ void scene09_initScene(Scene *sc) {
else
g_vars->scene09_balls.field_8 = 0;
- g_vars->scene09_balls->init(b);
+ g_vars->scene09_balls.init(&b);
}
g_vars->scene09_var13 = 3;
- if (g_vars->scene09_hangers) {
- if (g_vars->scene09_var15 < 4) {
- error("scene09_initScene(): old code"):
- } else {
- if (g_vars->scene09_numMovingHangers < 4)
- error("scene09_initScene(): old code2");
-
- g_vars->scene09_numMovingHangers = 4;
- }
- } else {
- g_vars->scene09_hangers.clear();
- g_vars->scene09_var15 = 4;
- g_vars->scene09_numMovingHangers = 4;
- }
+ g_vars->scene09_hangers.clear();
+ g_vars->scene09_var15 = 4;
+ g_vars->scene09_numMovingHangers = 4;
StaticANIObject *hanger = sc->getStaticANIObject1ById(ANI_VISUNCHIK, -1);
Hanger *hng = new Hanger;
@@ -104,8 +100,8 @@ void scene09_initScene(Scene *sc) {
int x = 75;
- for (int i = 1; x < 300; i++, x += 75)
- StaicANIObject *ani = new StaticANIObject(hanger);
+ for (int i = 1; x < 300; i++, x += 75) {
+ StaticANIObject *ani = new StaticANIObject(hanger);
ani->show1(x + hanger->_ox, hanger->_oy, MV_VSN_CYCLE2, 0);
sc->addStaticANIObject(hanger, 1);
@@ -137,9 +133,9 @@ void scene09_initScene(Scene *sc) {
g_vars->scene09_var07.numBalls--;
}
- g_vars->scene09_var07->reset();
+ g_vars->scene09_var07.reset();
- Ball *b9 = g_vars->scene09_var07->sub04(g_vars->scene09_var07.field_8, 0);
+ Ball *b9 = g_vars->scene09_var07.sub04(g_vars->scene09_var07.field_8, 0);
b9->ani = sc->getStaticANIObject1ById(ANI_BALL9, -1);
b9->ani->setAlpha(0xc8);
@@ -152,12 +148,12 @@ void scene09_initScene(Scene *sc) {
}
for (int i = 0; i < 4; i++) {
- Ball *newball = new StaticANIObject(b9);
+ StaticANIObject *newball = new StaticANIObject(b9->ani);
newball->setAlpha(0xc8);
Ball *runPtr = g_vars->scene09_var07.pTail;
- ball *lastP = g_vars->scene09_var07.field_8;
+ Ball *lastP = g_vars->scene09_var07.field_8;
if (!g_vars->scene09_var07.pTail) {
g_vars->scene09_var07.cPlex = (byte *)calloc(g_vars->scene09_var07.cPlexLen, sizeof(Ball));
@@ -197,9 +193,9 @@ void scene09_initScene(Scene *sc) {
sc->addStaticANIObject(newball, 1);
}
- setObjectState(sO_RightStairs_9, getObjectEnumState(sO_RightStairs_9, sO_IsClosed));
+ g_fp->setObjectState(sO_RightStairs_9, g_fp->getObjectEnumState(sO_RightStairs_9, sO_IsClosed));
- GameVar *eggvar = getGameLoaderGameVar()->getSubVarByName("OBJSTATES")->getSubVarByName(sO_GulpedEggs);
+ GameVar *eggvar = g_fp->getGameLoaderGameVar()->getSubVarByName("OBJSTATES")->getSubVarByName(sO_GulpedEggs);
g_vars->swallowedEgg1 = eggvar->getSubVarByName(sO_Egg1);
g_vars->swallowedEgg2 = eggvar->getSubVarByName(sO_Egg2);
@@ -211,7 +207,7 @@ void scene09_initScene(Scene *sc) {
g_fp->lift_setButton(sO_Level1, ST_LBN_1N);
- g-fp->setArcadeOverlay(PIC_CSR_ARCADE4);
+ g_fp->setArcadeOverlay(PIC_CSR_ARCADE4);
}
} // End of namespace Fullpipe