[Scummvm-cvs-logs] scummvm master -> aaf9ebfd680dd733ce11fbcd1943f177f4487a40

sev- sev at scummvm.org
Wed Feb 12 23:51:26 CET 2014


This automated email contains information about 9 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
7d0dc05622 FULLPIPE: More work on scene09_initScene()
417426a165 FULLPIPE: Even more work on scene09_initScene()
d48d4b325c FULLPIPE: Implement scene09_setupGrit()
7c549a3eed FULLPIPE: Further work on scene09_initScene()
893667fc9e FULLPIPE: Plug scene09 in
2c5e338d33 FULLPIPE: Implement scene09_updateCursor()
f9ecd6518a FULLPIPE: Implement sceneHandler09_updateScreenCallback()
a1b7a36cdd FULLPIPE: Implement sceneHandler09()
aaf9ebfd68 FULLPIPE: Enable scene09


Commit: 7d0dc05622055709d1edafb52c6a8de6acf1bf5f
    https://github.com/scummvm/scummvm/commit/7d0dc05622055709d1edafb52c6a8de6acf1bf5f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-02-12T14:50:40-08:00

Commit Message:
FULLPIPE: More work on scene09_initScene()

Changed paths:
    engines/fullpipe/scenes/scene09.cpp



diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index 9ccb847..57a7823 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -49,15 +49,16 @@ void scene09_initScene(Scene *sc) {
 	g_vars->scene09_var12 = -1000;
 
 	while (g_vars->scene09_balls.numBalls) {
-		v3 = &g_vars->scene09_balls.pHead->p0;
-		v4 = 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;
+
 		if (g_vars->scene09_balls.pHead)
-			v4->p1 = 0;
+			g_vars->scene09_balls.pHead->p0->p1 = 0;
 		else
 			g_vars->scene09_balls.field_8 = 0;
 
-		BallChain_init(&g_vars->scene09_balls, v3);
+		g_vars->scene09_balls->init(b);
 	}
 
 	g_vars->scene09_var13 = 3;
@@ -111,7 +112,7 @@ void scene09_initScene(Scene *sc) {
 		g_vars->scene09_hangers[i].field_4 = 0;
 		g_vars->scene09_hangers[i].field_8 = 0;
 	}
-	v11 = 0;
+
 	if (g_vars->scene09_var07.numBalls) {
 		while (1) {
 			v12 = g_vars->scene09_var07.pHead;
@@ -132,24 +133,26 @@ void scene09_initScene(Scene *sc) {
 			}
 		}
 	}
-	v16 = Scene_getStaticANIObject1ById(sc, ANI_BALL9, -1);
-	StaticANIObject_setAlpha(v16, -56);
-	v17 = BallChain_sub04(&g_vars->scene09_var07, g_vars->scene09_var07.field_8, 0);
-	v17->ani = v16;
+
+	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);
+
 	if (g_vars->scene09_var07.field_8) {
-		g_vars->scene09_var07.field_8->p0 = v17;
-		g_vars->scene09_var07.field_8 = v17;
+		g_vars->scene09_var07.field_8->p0 = b9;
+		g_vars->scene09_var07.field_8 = b9;
 		numVis = 4;
 	} else {
-		g_vars->scene09_var07.pHead = v17;
-		g_vars->scene09_var07.field_8 = v17;
+		g_vars->scene09_var07.pHead = b9;
+		g_vars->scene09_var07.field_8 = b9;
 		numVis = 4;
 	}
+
 	while (1) {
-		v18 = (StaticANIObject *)operator new(0xACu);
-		if (v18)
-			v11 = StaticANIObject_ctorCopy(v18, v16);
-		StaticANIObject_setAlpha(v11, -56);
+		Ball *newball = new StaticANIObject(b9);
+
+		newball->setAlpha(0xc8);
+
 		v19 = g_vars->scene09_var07.pTail;
 		v20 = g_vars->scene09_var07.field_8;
 		if (!g_vars->scene09_var07.pTail) {
@@ -173,30 +176,33 @@ void scene09_initScene(Scene *sc) {
 		v19->p0 = 0;
 		++g_vars->scene09_var07.numBalls;
 		v19->ani = 0;
-		v19->ani = v11;
+		v19->ani = newball;
 		if (g_vars->scene09_var07.field_8)
 			g_vars->scene09_var07.field_8->p0 = v19;
 		else
 			g_vars->scene09_var07.pHead = v19;
 		g_vars->scene09_var07.field_8 = v19;
-		Scene_addStaticANIObject(sc, v11, 1);
+		sc->addStaticANIObject(newball, 1);
 		--numVis;
 		if (!numVis)
 			break;
-		v11 = 0;
 	}
-	v23 = getObjectEnumState("Правая лестница_9", "Закрыта");
-	setObjectState("Правая лестница_9", v23);
-	v24 = getGameLoaderGameVar();
-	v25 = GameVar_getSubVarByName(v24, "OBJSTATES");
-	v26 = GameVar_getSubVarByName(v25, "Проглоченные яйца");
-	g_vars->swallowedEgg1 = GameVar_getSubVarByName(v26, "Яйцо1");
-	g_vars->swallowedEgg2 = GameVar_getSubVarByName(v26, "Яйцо2");
-	g_vars->swallowedEgg3 = GameVar_getSubVarByName(v26, "Яйцо3");
+
+	setObjectState(sO_RightStairs_9, getObjectEnumState(sO_RightStairs_9, sO_IsClosed));
+
+	GameVar *eggvar = getGameLoaderGameVar()->getSubVarByName("OBJSTATES")->getSubVarByName(sO_GulpedEggs);
+
+	g_vars->swallowedEgg1 = eggvar->getSubVarByName(sO_Egg1);
+	g_vars->swallowedEgg2 = eggvar->getSubVarByName(sO_Egg2);
+	g_vars->swallowedEgg3 = eggvar->getSubVarByName(sO_Egg3);
+
 	scene09_setupGrit(sc);
-	initArcadeKeys("SC_9");
-	lift_setButton("Этаж 1", ST_LBN_1N);
-	setArcadeOverlay(PIC_CSR_ARCADE4);
+
+	g_fp->initArcadeKeys("SC_9");
+
+	g_fp->lift_setButton(sO_Level1, ST_LBN_1N);
+
+	g-fp->setArcadeOverlay(PIC_CSR_ARCADE4);
 }
 
 } // End of namespace Fullpipe


Commit: 417426a1652fe8eaa47193f590bc014cc99aabaa
    https://github.com/scummvm/scummvm/commit/417426a1652fe8eaa47193f590bc014cc99aabaa
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-02-12T14:50:40-08:00

Commit Message:
FULLPIPE: Even more work on scene09_initScene()

Changed paths:
    engines/fullpipe/scenes/scene09.cpp



diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index 57a7823..9bd7250 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -113,27 +113,25 @@ void scene09_initScene(Scene *sc) {
 		g_vars->scene09_hangers[i].field_8 = 0;
 	}
 
-	if (g_vars->scene09_var07.numBalls) {
-		while (1) {
-			v12 = g_vars->scene09_var07.pHead;
-			v13 = g_vars->scene09_var07.pHead->p0;
-			g_vars->scene09_var07.pHead = g_vars->scene09_var07.pHead->p0;
-			if (g_vars->scene09_var07.pHead)
-				v13->p1 = 0;
-			else
-				g_vars->scene09_var07.field_8 = 0;
-			v12->p0 = g_vars->scene09_var07.pTail;
-			v14 = g_vars->scene09_var07.numBalls == 1;
-			g_vars->scene09_var07.pTail = v12;
-			--g_vars->scene09_var07.numBalls;
-			if (v14) {
-				BallChain_reset(&g_vars->scene09_var07);
-				if (!g_vars->scene09_var07.numBalls)
-					break;
-			}
-		}
+	while (g_vars->scene09_var07.numBalls) {
+		Ball *ohead = g_vars->scene09_var07.pHead;
+
+		g_vars->scene09_var07.pHead = g_vars->scene09_var07.pHead->p0;
+
+		if (g_vars->scene09_var07.pHead)
+			ohead->p0->p1 = 0;
+		else
+			g_vars->scene09_var07.field_8 = 0;
+
+		ohead->p0 = g_vars->scene09_var07.pTail;
+
+		g_vars->scene09_var07.pTail = ohead;
+
+		g_vars->scene09_var07.numBalls--;
 	}
 
+	g_vars->scene09_var07->reset();
+
 	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);
@@ -141,20 +139,19 @@ void scene09_initScene(Scene *sc) {
 	if (g_vars->scene09_var07.field_8) {
 		g_vars->scene09_var07.field_8->p0 = b9;
 		g_vars->scene09_var07.field_8 = b9;
-		numVis = 4;
 	} else {
 		g_vars->scene09_var07.pHead = b9;
 		g_vars->scene09_var07.field_8 = b9;
-		numVis = 4;
 	}
 
-	while (1) {
+	for (int i = 0; i < 4; i++) {
 		Ball *newball = new StaticANIObject(b9);
 
 		newball->setAlpha(0xc8);
 
 		v19 = g_vars->scene09_var07.pTail;
 		v20 = g_vars->scene09_var07.field_8;
+
 		if (!g_vars->scene09_var07.pTail) {
 			v21 = (Ball_p4 *)((char *)CPlex::Create((int)&g_vars->scene09_var07.cPlex, g_vars->scene09_var07.cPlexLen, 12) + 12 * g_vars->scene09_var07.cPlexLen - 8);
 			if (g_vars->scene09_var07.cPlexLen - 1 < 0) {
@@ -171,10 +168,11 @@ void scene09_initScene(Scene *sc) {
 				g_vars->scene09_var07.pTail = v19;
 			}
 		}
+
 		g_vars->scene09_var07.pTail = v19->p0;
 		v19->p1 = v20;
 		v19->p0 = 0;
-		++g_vars->scene09_var07.numBalls;
+		g_vars->scene09_var07.numBalls++;
 		v19->ani = 0;
 		v19->ani = newball;
 		if (g_vars->scene09_var07.field_8)
@@ -183,9 +181,6 @@ void scene09_initScene(Scene *sc) {
 			g_vars->scene09_var07.pHead = v19;
 		g_vars->scene09_var07.field_8 = v19;
 		sc->addStaticANIObject(newball, 1);
-		--numVis;
-		if (!numVis)
-			break;
 	}
 
 	setObjectState(sO_RightStairs_9, getObjectEnumState(sO_RightStairs_9, sO_IsClosed));


Commit: d48d4b325c58ea8ee81fa0edc20d86913a7cf454
    https://github.com/scummvm/scummvm/commit/d48d4b325c58ea8ee81fa0edc20d86913a7cf454
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-02-12T14:50:40-08:00

Commit Message:
FULLPIPE: Implement scene09_setupGrit()

Changed paths:
    engines/fullpipe/scenes/scene09.cpp



diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index 9bd7250..21b46e5 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -36,6 +36,20 @@
 
 namespace Fullpipe {
 
+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)
+				&& (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;
+				g_fp->_currentScene = sc;
+				g_vars->scene09_grit->changeStatics2(ST_GRT9_NORM);
+				g_fp->_currentScene = oldsc;
+			}
+		}
+	}
+}
+
 void scene09_initScene(Scene *sc) {
 	g_vars->scene09_flyingBall = 0;
 	g_vars->scene09_var05 = 0;
@@ -107,7 +121,7 @@ void scene09_initScene(Scene *sc) {
 		ani->show1(x + hanger->_ox, haner->_oy, MV_VSN_CYCLE2, 0);
 		sc->addStaticANIObject(hanger, 1);
 
-		g_vars->scene09_hangers[i].ani = v2;
+		g_vars->scene09_hangers[i].ani = ani;
 		g_vars->scene09_hangers[i].phase = 0;
 		g_vars->scene09_hangers[i].field_4 = 0;
 		g_vars->scene09_hangers[i].field_8 = 0;


Commit: 7c549a3eed235a1cb9850508549a48fc44e9c0a1
    https://github.com/scummvm/scummvm/commit/7c549a3eed235a1cb9850508549a48fc44e9c0a1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-02-12T14:50:41-08:00

Commit Message:
FULLPIPE: Further work on scene09_initScene()

Changed paths:
    engines/fullpipe/scenes/scene09.cpp



diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index 21b46e5..82edc2b 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -79,52 +79,45 @@ void scene09_initScene(Scene *sc) {
 
 	if (g_vars->scene09_hangers) {
 		if (g_vars->scene09_var15 < 4) {
-			v5 = g_vars->scene09_var15 + 3;
-
-			if (g_vars->scene09_var15 + 3 <= 4)
-				v5 = 4;
-
-			v6 = operator new(16 * v5);
-			memcpy(v6, g_vars->scene09_hangers, 16 * g_vars->scene09_numMovingHangers);
-			Hanger_clear((Hanger *)v6 + g_vars->scene09_numMovingHangers, 4 - g_vars->scene09_numMovingHangers);
-
-			CObjectFree(g_vars->scene09_hangers);
-
-			g_vars->scene09_var15 = v5;
-			g_vars->scene09_hangers = (Hanger *)v6;
-			g_vars->scene09_numMovingHangers = 4;
+			error("scene09_initScene(): old code"):
 		} else {
 			if (g_vars->scene09_numMovingHangers < 4)
-				Hanger_clear(&g_vars->scene09_hangers[g_vars->scene09_numMovingHangers], 4 - g_vars->scene09_numMovingHangers);
+				error("scene09_initScene(): old code2");
 
 			g_vars->scene09_numMovingHangers = 4;
 		}
 	} else {
-		g_vars->scene09_hangers = (Hanger *)operator new(0x40u);
-		Hanger_clear(g_vars->scene09_hangers, 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;
 
-	g_vars->scene09_hangers[0]->ani = hanger;
-	g_vars->scene09_hangers[0]->phase = 0;
-	g_vars->scene09_hangers[0]->field_4 = 0;
-	g_vars->scene09_hangers[0]->field_8 = 0;
+	hng->ani = hanger;
+	hng->phase = 0;
+	hng->field_4 = 0;
+	hng->field_8 = 0;
+
+	g_vars->scene09_hangers.push_back(hng);
 
 	int x = 75;
 
 	for (int i = 1; x < 300; i++, x += 75)
 		StaicANIObject *ani = new StaticANIObject(hanger);
 
-		ani->show1(x + hanger->_ox, haner->_oy, MV_VSN_CYCLE2, 0);
+		ani->show1(x + hanger->_ox, hanger->_oy, MV_VSN_CYCLE2, 0);
 		sc->addStaticANIObject(hanger, 1);
 
-		g_vars->scene09_hangers[i].ani = ani;
-		g_vars->scene09_hangers[i].phase = 0;
-		g_vars->scene09_hangers[i].field_4 = 0;
-		g_vars->scene09_hangers[i].field_8 = 0;
+		hng = new Hanger;
+
+		hng->ani = ani;
+		hng->phase = 0;
+		hng->field_4 = 0;
+		hng->field_8 = 0;
+
+		g_vars->scene09_hangers.push_back(hng);
 	}
 
 	while (g_vars->scene09_var07.numBalls) {
@@ -163,37 +156,44 @@ void scene09_initScene(Scene *sc) {
 
 		newball->setAlpha(0xc8);
 
-		v19 = g_vars->scene09_var07.pTail;
-		v20 = g_vars->scene09_var07.field_8;
+		Ball *runPtr = g_vars->scene09_var07.pTail;
+		ball *lastP = g_vars->scene09_var07.field_8;
 
 		if (!g_vars->scene09_var07.pTail) {
-			v21 = (Ball_p4 *)((char *)CPlex::Create((int)&g_vars->scene09_var07.cPlex, g_vars->scene09_var07.cPlexLen, 12) + 12 * g_vars->scene09_var07.cPlexLen - 8);
+			g_vars->scene09_var07.cPlex = (byte *)calloc(g_vars->scene09_var07.cPlexLen, sizeof(Ball));
+
+			byte *p1 = g_vars->scene09_var07.cPlex + (g_vars->scene09_var07.cPlexLen - 1) * sizeof(Ball);
+
 			if (g_vars->scene09_var07.cPlexLen - 1 < 0) {
-				v19 = g_vars->scene09_var07.pTail;
+				runPtr = g_vars->scene09_var07.pTail;
 			} else {
-				v22 = g_vars->scene09_var07.cPlexLen;
-				v19 = g_vars->scene09_var07.pTail;
-				do {
-					v21->p1 = v19;
-					v19 = (Ball *)v21;
-					--v21;
-					--v22;
-				} while (v22);
-				g_vars->scene09_var07.pTail = v19;
+				runPtr = g_vars->scene09_var07.pTail;
+
+				for (int j = 0; j < g_vars->scene09_var07.cPlexLen; j++) {
+					((Ball *)p1)->p1 = runPtr;
+					runPtr = (Ball *)p1;
+
+					p1 -= sizeof(Ball);
+				}
+
+				g_vars->scene09_var07.pTail = runPtr;
 			}
 		}
 
-		g_vars->scene09_var07.pTail = v19->p0;
-		v19->p1 = v20;
-		v19->p0 = 0;
+		g_vars->scene09_var07.pTail = runPtr->p0;
+		runPtr->p1 = lastP;
+		runPtr->p0 = 0;
+		runPtr->ani = newball;
+
 		g_vars->scene09_var07.numBalls++;
-		v19->ani = 0;
-		v19->ani = newball;
+
 		if (g_vars->scene09_var07.field_8)
-			g_vars->scene09_var07.field_8->p0 = v19;
+			g_vars->scene09_var07.field_8->p0 = runPtr;
 		else
-			g_vars->scene09_var07.pHead = v19;
-		g_vars->scene09_var07.field_8 = v19;
+			g_vars->scene09_var07.pHead = runPtr;
+
+		g_vars->scene09_var07.field_8 = runPtr;
+
 		sc->addStaticANIObject(newball, 1);
 	}
 


Commit: 893667fc9e1f83d51351b3c84cf1b6dcd1f703b5
    https://github.com/scummvm/scummvm/commit/893667fc9e1f83d51351b3c84cf1b6dcd1f703b5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-02-12T14:50:41-08:00

Commit Message:
FULLPIPE: Plug scene09 in

Changed paths:
    engines/fullpipe/constants.h
    engines/fullpipe/module.mk
    engines/fullpipe/scenes.cpp
    engines/fullpipe/scenes.h
    engines/fullpipe/scenes/scene09.cpp



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 4d63031..c8400c7 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 0299934..db97fa2 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 6225c33..3d4898e 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 1719618..1dbad6e 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 82edc2b..2930541 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


Commit: 2c5e338d3366ad33f09b9f9976907f814b5c7afd
    https://github.com/scummvm/scummvm/commit/2c5e338d3366ad33f09b9f9976907f814b5c7afd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-02-12T14:50:41-08:00

Commit Message:
FULLPIPE: Implement scene09_updateCursor()

Changed paths:
    engines/fullpipe/constants.h
    engines/fullpipe/scenes.cpp
    engines/fullpipe/scenes.h
    engines/fullpipe/scenes/scene09.cpp



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index c8400c7..84ef20d 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -592,6 +592,7 @@ namespace Fullpipe {
 #define ANI_PLEVATEL 919
 #define ANI_VISUNCHIK 904
 #define MV_VSN_CYCLE2 2987
+#define PIC_SC9_LADDER_R 2700
 #define ST_GRT9_GRIT 2722
 #define ST_GRT9_NORM 2721
 
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index 3d4898e..fe1ac17 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -161,6 +161,7 @@ Vars::Vars() {
 	scene09_glotatel = 0;
 	scene09_spitter = 0;
 	scene09_grit = 0;
+	scene09_var02 = 0;
 	scene09_var08 = 1;
 	scene09_var09 = 0;
 	scene09_var10 = -1;
diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h
index 1dbad6e..a30f058 100644
--- a/engines/fullpipe/scenes.h
+++ b/engines/fullpipe/scenes.h
@@ -344,6 +344,7 @@ public:
 	bool scene08_stairsVisible;
 	int scene08_manOffsetY;
 
+	int scene09_var02;
 	StaticANIObject *scene09_flyingBall;
 	int scene09_var05;
 	StaticANIObject *scene09_glotatel;
diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index 2930541..ce7fecc 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -210,4 +210,28 @@ void scene09_initScene(Scene *sc) {
 	g_fp->setArcadeOverlay(PIC_CSR_ARCADE4);
 }
 
+int sceneHandler09_updateScreenCallback() {
+	warning("STUB: int sceneHandler09_updateScreenCallback()");
+
+	return 0;
+}
+
+int scene09_updateCursor() {
+	g_fp->updateCursorCommon();
+
+	if (g_vars->scene09_var10 < 0) {
+		if (g_fp->_objectIdAtCursor == ANI_VISUNCHIK) {
+			if (g_fp->_cursorId == PIC_CSR_ITN)
+				g_fp->_updateScreenCallback = sceneHandler09_updateScreenCallback;
+		} else {
+			if (g_fp->_objectIdAtCursor == PIC_SC9_LADDER_R && g_fp->_cursorId == PIC_CSR_ITN)
+				g_fp->_cursorId = (g_vars->scene09_var02 < 350) ? PIC_CSR_GOD : PIC_CSR_GOU;
+		}
+	} else {
+		g_fp->_cursorId = PIC_CSR_ITN;
+	}
+
+	return g_fp->_cursorId;
+}
+
 } // End of namespace Fullpipe


Commit: f9ecd6518a93ede5f98510ce2cccd9ebf2a19902
    https://github.com/scummvm/scummvm/commit/f9ecd6518a93ede5f98510ce2cccd9ebf2a19902
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-02-12T14:50:41-08:00

Commit Message:
FULLPIPE: Implement sceneHandler09_updateScreenCallback()

Changed paths:
    engines/fullpipe/scenes/scene09.cpp



diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index ce7fecc..34d976b 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -211,9 +211,12 @@ void scene09_initScene(Scene *sc) {
 }
 
 int sceneHandler09_updateScreenCallback() {
-	warning("STUB: int sceneHandler09_updateScreenCallback()");
+	int res = g_fp->drawArcadeOverlay(g_fp->_objectIdAtCursor == ANI_VISUNCHIK || g_vars->scene09_var10 >= 0);
 
-	return 0;
+	if (!res)
+		g_fp->_updateScreenCallback = 0;
+
+	return res;
 }
 
 int scene09_updateCursor() {


Commit: a1b7a36cdd138a96294cd85ae1e910061d77d3d5
    https://github.com/scummvm/scummvm/commit/a1b7a36cdd138a96294cd85ae1e910061d77d3d5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-02-12T14:50:41-08:00

Commit Message:
FULLPIPE: Implement sceneHandler09()

Changed paths:
    engines/fullpipe/constants.h
    engines/fullpipe/scenes.cpp
    engines/fullpipe/scenes.h
    engines/fullpipe/scenes/scene09.cpp



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 84ef20d..05c917f 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -591,10 +591,21 @@ namespace Fullpipe {
 #define ANI_GRIT_9 2719
 #define ANI_PLEVATEL 919
 #define ANI_VISUNCHIK 904
+#define MSG_SC9_EATBALL 941
+#define MSG_SC9_FLOWN 943
+#define MSG_SC9_FROMLADDER 4207
+#define MSG_SC9_PLVCLICK 965
+#define MSG_SC9_SETSCROLL 964
+#define MSG_SC9_SHOWBALL 936
+#define MSG_SC9_STARTTIOTIA 4942
+#define MSG_SC9_TOLADDER 4206
+#define MV_MAN9_SHOOT 922
 #define MV_VSN_CYCLE2 2987
 #define PIC_SC9_LADDER_R 2700
+#define SND_9_018 4200
 #define ST_GRT9_GRIT 2722
 #define ST_GRT9_NORM 2721
+#define ST_VSN_NORMAL 906
 
 // Scene 10
 #define ANI_GUM 978
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index fe1ac17..a59269d 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -170,6 +170,8 @@ Vars::Vars() {
 	scene09_numMovingHangers = 0;
 	scene09_var13 = 0;
 	scene09_var15 = 0;
+	scene09_var17 = 0;
+	scene09_var19 = 0;
 
 	scene10_gum = 0;
 	scene10_packet = 0;
diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h
index a30f058..2352efb 100644
--- a/engines/fullpipe/scenes.h
+++ b/engines/fullpipe/scenes.h
@@ -361,6 +361,8 @@ public:
 	int scene09_numMovingHangers;
 	int scene09_var13;
 	int scene09_var15;
+	int scene09_var17;
+	int scene09_var19;
 
 	StaticANIObject *scene10_gum;
 	StaticANIObject *scene10_packet;
diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index 34d976b..1796d77 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -237,4 +237,197 @@ int scene09_updateCursor() {
 	return g_fp->_cursorId;
 }
 
+void sceneHandler09_winArcade() {
+	warning("STUB: sceneHandler09_winArcade()");
+}
+
+void sceneHandler09_startAuntie() {
+	warning("STUB: sceneHandler09_startAuntie()");
+}
+
+void sceneHandler09_spitterClick() {
+	warning("STUB: sceneHandler09_spitterClick()");
+}
+
+void sceneHandler09_eatBall() {
+	warning("STUB: sceneHandler09_eatBall()");
+}
+
+void sceneHandler09_showBall() {
+	warning("STUB: sceneHandler09_showBall()");
+}
+
+void sceneHandler09_cycleHangers() {
+	warning("STUB: sceneHandler09_cycleHangers()");
+}
+
+void sceneHandler09_limitHangerPhase() {
+	warning("STUB: sceneHandler09_limitHangerPhase()");
+}
+
+void sceneHandler09_checkHangerCollide() {
+	warning("STUB: sceneHandler09_checkHangerCollide()");
+}
+
+void sceneHandler09_hangerStartCycle() {
+	warning("STUB: sceneHandler09_hangerStartCycle()");
+}
+
+int sceneHandler09(ExCommand *cmd) {
+	if (cmd->_messageKind != 17)
+		return 0;
+
+	switch (cmd->_messageNum) {
+	case MSG_CMN_WINARCADE:
+		sceneHandler09_winArcade();
+		break;
+
+	case MSG_SC9_STARTTIOTIA:
+		sceneHandler09_startAuntie();
+		break;
+
+	case MSG_SC9_FROMLADDER:
+		getCurrSceneSc2MotionController()->setEnabled();
+		getGameLoaderInteractionController()->enableFlag24();
+
+		g_vars->scene09_var09 = 0;
+		break;
+
+	case MSG_SC9_TOLADDER:
+		getCurrSceneSc2MotionController()->clearEnabled();
+		getGameLoaderInteractionController()->disableFlag24();
+
+		g_vars->scene09_var09 = 1;
+		break;
+
+	case MSG_SC9_PLVCLICK:
+		sceneHandler09_spitterClick();
+		break;
+
+	case MSG_SC9_FLOWN:
+		g_vars->scene09_var08 = 0;
+		break;
+
+	case MSG_SC9_EATBALL:
+		sceneHandler09_eatBall();
+		break;
+
+	case MSG_SC9_SHOWBALL:
+		sceneHandler09_showBall();
+		break;
+
+	case 33:
+		{
+			int res = 0;
+
+			if (g_fp->_aniMan2) {
+				int x = g_fp->_aniMan2->_ox;
+
+				g_vars->scene09_var02 = g_fp->_aniMan2->_oy;
+
+				if (x < g_fp->_sceneRect.left + 200)
+					g_fp->_currentScene->_x = x - g_fp->_sceneRect.left - 300;
+
+				if (x > g_fp->_sceneRect.right - 200)
+					g_fp->_currentScene->_x = x - g_fp->_sceneRect.right + 300;
+
+				res = 1;
+			} else {
+				if (g_fp->_aniMan->_movement && g_fp->_aniMan->_movement->_id != MV_MAN9_SHOOT)
+					g_fp->_aniMan2 = g_fp->_aniMan;
+			}
+
+			sceneHandler09_cycleHangers();
+			sceneHandler09_limitHangerPhase();
+			sceneHandler09_checkHangerCollide();
+
+			if (g_vars->scene09_var10 >= 0)
+				sceneHandler09_hangerStartCycle();
+
+			if (!g_vars->scene09_var17)
+				g_fp->_behaviorManager->updateBehaviors();
+
+			g_fp->startSceneTrack();
+
+			return res;
+		}
+
+	case 30:
+		if (g_vars->scene09_var10 >= 0)  {
+			if (ABS(g_vars->scene09_hangers[g_vars->scene09_var10]->phase) < 15) {
+				g_vars->scene09_hangers[g_vars->scene09_var10]->ani->_callback2 = 0;
+				g_vars->scene09_hangers[g_vars->scene09_var10]->ani->changeStatics2(ST_VSN_NORMAL);
+			}
+		}
+
+		g_vars->scene09_var10 = -1;
+
+		break;
+
+	case 29:
+		{
+			StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(g_fp->_sceneRect.left + cmd->_x, g_fp->_sceneRect.top + cmd->_y);
+
+			if (ani) {
+				if (ani->_id == ANI_PLEVATEL) {
+					sceneHandler09_spitterClick();
+					break;
+				}
+
+				if (ani->_id == ANI_VISUNCHIK) {
+					if (g_vars->scene09_numMovingHangers > 0) {
+						int hng = 0;
+
+						while (g_vars->scene09_hangers[hng]->ani != ani) {
+							++hng;
+
+							if (hng >= g_vars->scene09_numMovingHangers)
+								break;
+						}
+
+						g_vars->scene09_var10 = hng;
+						g_vars->scene09_var11 = g_vars->scene09_hangers[hng]->phase;
+						g_vars->scene09_var12 = g_vars->scene09_hangers[hng]->phase;
+
+						g_vars->scene09_var19 = cmd->_y;
+
+						if (!g_vars->scene09_hangers[hng]->ani->_movement || g_vars->scene09_hangers[hng]->ani->_movement->_id != MV_VSN_CYCLE2) {
+							g_vars->scene09_hangers[hng]->ani->changeStatics2(ST_VSN_NORMAL);
+							g_vars->scene09_hangers[hng]->ani->startAnim(MV_VSN_CYCLE2, 0, -1);
+							g_vars->scene09_hangers[hng]->ani->_callback2 = 0;
+						}
+
+						ExCommand *ex = new ExCommand(0, 35, SND_9_018, 0, 0, 0, 1, 0, 0, 0);
+
+						ex->_field_14 = 1;
+						ex->_excFlags |= 2;
+						ex->postMessage();
+					}
+
+					break;
+				}
+			}
+
+			if (g_vars->scene09_var09 && g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY) == PIC_SC9_LADDER_R
+				&& !cmd->_keyCode && !g_fp->_aniMan->_movement) {
+				handleObjectInteraction(g_fp->_aniMan, g_fp->_currentScene->getPictureObjectById(PIC_SC9_LADDER_R, 0), 0);
+			}
+
+			if (!ani || !canInteractAny(g_fp->_aniMan, ani, cmd->_keyCode)) {
+				int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY);
+				PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0);
+
+				if (!pic || !canInteractAny(g_fp->_aniMan, pic, cmd->_keyCode)) {
+					if ((g_fp->_sceneRect.right - cmd->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (cmd->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0))
+						g_fp->processArcade(cmd);
+				}
+			}
+
+			break;
+		}
+	}
+
+	return 0;
+}
+
 } // End of namespace Fullpipe


Commit: aaf9ebfd680dd733ce11fbcd1943f177f4487a40
    https://github.com/scummvm/scummvm/commit/aaf9ebfd680dd733ce11fbcd1943f177f4487a40
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-02-12T14:50:41-08:00

Commit Message:
FULLPIPE: Enable scene09

Changed paths:
    engines/fullpipe/scenes.cpp
    engines/fullpipe/scenes.h



diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index a59269d..118821e 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -652,7 +652,6 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) {
 		_updateCursorCallback = scene08_updateCursor;
 		break;
 
-#if 0
 	case SC_9:
 		sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_9");
 		scene->preloadMovements(sceneVar);
@@ -663,7 +662,6 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) {
 		insertMessageHandler(sceneHandler09, 2, 2);
 		_updateCursorCallback = scene09_updateCursor;
 		break;
-#endif
 
 	case SC_10:
 		sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_10");
diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h
index 2352efb..7e1c45b 100644
--- a/engines/fullpipe/scenes.h
+++ b/engines/fullpipe/scenes.h
@@ -71,6 +71,10 @@ void scene08_setupMusic();
 int sceneHandler08(ExCommand *cmd);
 int scene08_updateCursor();
 
+int scene09_updateCursor();
+void scene09_initScene(Scene *sc);
+int sceneHandler09(ExCommand *cmd);
+
 void scene10_initScene(Scene *sc);
 int sceneHandler10(ExCommand *cmd);
 int scene10_updateCursor();






More information about the Scummvm-git-logs mailing list