[Scummvm-cvs-logs] scummvm master -> 9aa17f4cdea68d3e86190016cf6fea9bbf0e6674

sev- sev at scummvm.org
Wed Apr 2 14:11:17 CEST 2014


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

Summary:
c08a4fdba1 FULLPIPE: Implement sceneHandler29_shootRed()
9aa17f4cde FULLPIPE: Implement sceneHandler29_sub03()


Commit: c08a4fdba13319b1af96e120297d4aee792f360f
    https://github.com/scummvm/scummvm/commit/c08a4fdba13319b1af96e120297d4aee792f360f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-04-02T15:10:28+03:00

Commit Message:
FULLPIPE: Implement sceneHandler29_shootRed()

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



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 8e3803b..0d1db26 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -1305,8 +1305,8 @@ namespace Fullpipe {
 #define MV_PTR_MOVEFAST 2102
 #define MV_SHG_HITASS 2151
 #define MV_SHG_NORM 2117
-#define MV_SHG_NORM 2117
 #define MV_SHR_HITASS 2152
+#define MV_SHR_NORM 2131
 #define MV_STR1_SHOOT 2109
 #define MV_STR2_SHOOT 2112
 #define PIC_SC29_LTRUBA 2081
diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp
index 5b14a3f..2145490 100644
--- a/engines/fullpipe/scenes/scene29.cpp
+++ b/engines/fullpipe/scenes/scene29.cpp
@@ -249,7 +249,76 @@ void sceneHandler29_shootGreen() {
 }
 
 void sceneHandler29_shootRed() {
-	warning("STUB: sceneHandler29_shootRed()");
+	if (g_vars->scene29_var05.numBalls) {
+		int x = g_vars->scene29_shooter1->_ox - 101;
+		int y = g_vars->scene29_shooter1->_oy - 14;
+		StaticANIObject *ani = g_vars->scene29_var05.pHead->ani;
+		Ball *oldhead = g_vars->scene29_var05.pHead;
+		Ball *oldp0 = g_vars->scene29_var05.pHead->p0;
+
+		g_vars->scene29_var05.pHead = g_vars->scene29_var05.pHead->p0;
+
+		if (g_vars->scene29_var05.pHead)
+			oldp0->p1 = 0;
+		else
+			g_vars->scene29_var05.field_8 = 0;
+
+		oldhead->p0 = g_vars->scene29_var05.pTail;
+
+		g_vars->scene29_var05.pTail = oldhead;
+		g_vars->scene29_var05.numBalls--;
+
+		if (!g_vars->scene29_var05.numBalls) {
+			g_vars->scene29_var05.numBalls = 0;
+			g_vars->scene29_var05.pTail = 0;
+			g_vars->scene29_var05.field_8 = 0;
+			g_vars->scene29_var05.pHead = 0;
+
+			free(g_vars->scene29_var05.cPlex);
+			g_vars->scene29_var05.cPlex = 0;
+		}
+
+		ani->show1(x, y, MV_SHR_NORM, 0);
+		ani->_priority = 5;
+
+		Ball *runPtr = g_vars->scene29_var07.pTail;
+		Ball *lastP = g_vars->scene29_var07.field_8;
+
+		if (!g_vars->scene29_var07.pTail) {
+			g_vars->scene29_var07.cPlex = (byte *)calloc(g_vars->scene29_var07.cPlexLen, sizeof(Ball));
+
+			byte *p1 = g_vars->scene29_var07.cPlex + (g_vars->scene29_var07.cPlexLen - 1) * sizeof(Ball);
+
+			if (g_vars->scene29_var07.cPlexLen - 1 < 0) {
+				runPtr = g_vars->scene29_var07.pTail;
+			} else {
+				runPtr = g_vars->scene29_var07.pTail;
+
+				for (int j = 0; j < g_vars->scene29_var07.cPlexLen; j++) {
+					((Ball *)p1)->p1 = runPtr;
+					runPtr = (Ball *)p1;
+
+					p1 -= sizeof(Ball);
+				}
+
+				g_vars->scene29_var07.pTail = runPtr;
+			}
+		}
+		g_vars->scene29_var07.pTail = runPtr->p0;
+		runPtr->p1 = lastP;
+		runPtr->p0 = 0;
+		runPtr->ani = ani;
+
+		g_vars->scene29_var07.numBalls++;
+
+		if (g_vars->scene29_var07.field_8) {
+			g_vars->scene29_var07.field_8->p0 = runPtr;
+			g_vars->scene29_var07.field_8 = runPtr;
+		} else {
+			g_vars->scene29_var07.pHead = runPtr;
+			g_vars->scene29_var07.field_8 = runPtr;
+		}
+	}
 }
 
 void sceneHandler29_manJump() {


Commit: 9aa17f4cdea68d3e86190016cf6fea9bbf0e6674
    https://github.com/scummvm/scummvm/commit/9aa17f4cdea68d3e86190016cf6fea9bbf0e6674
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-04-02T15:10:28+03:00

Commit Message:
FULLPIPE: Implement sceneHandler29_sub03()

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



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 0d1db26..5a291df 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -1304,8 +1304,10 @@ namespace Fullpipe {
 #define MV_MAN29_STANDUP_NORM 2093
 #define MV_PTR_MOVEFAST 2102
 #define MV_SHG_HITASS 2151
+#define MV_SHG_HITMAN 2147
 #define MV_SHG_NORM 2117
 #define MV_SHR_HITASS 2152
+#define MV_SHR_HITMAN 2149
 #define MV_SHR_NORM 2131
 #define MV_STR1_SHOOT 2109
 #define MV_STR2_SHOOT 2112
@@ -1319,6 +1321,8 @@ namespace Fullpipe {
 #define QU_SC29_MANFROM_R 2104
 #define QU_SC29_MANTO_L 2103
 #define QU_SC29_MANTO_R 2100
+#define SND_29_014 4348
+#define SND_29_027 4757
 #define SND_29_028 4758
 #define SND_29_029 4759
 #define ST_ASS_NORM 2122
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index 3fe8704..55d67ab 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -1469,5 +1469,9 @@ Ball *BallChain::sub04(Ball *ballP, Ball *ballN) {
 	return pTail;
 }
 
+void BallChain::sub05(Ball *ball) {
+	warning("STUB: BallChain::sub05");
+}
+
 
 } // End of namespace Fullpipe
diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h
index ef6af54..a0701f2 100644
--- a/engines/fullpipe/scenes.h
+++ b/engines/fullpipe/scenes.h
@@ -232,6 +232,7 @@ struct BallChain {
 
 	void init(Ball **ball);
 	Ball *sub04(Ball *ballP, Ball *ballN);
+	void sub05(Ball *ball);
 	void reset() { pHead = 0; pTail = 0; field_8 = 0; numBalls = 0; free(cPlex); cPlex = 0; cPlexLen = 0; }
 };
 
diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp
index 2145490..c893850 100644
--- a/engines/fullpipe/scenes/scene29.cpp
+++ b/engines/fullpipe/scenes/scene29.cpp
@@ -452,8 +452,154 @@ void sceneHandler29_manHit() {
 	}
 }
 
+void sceneHandler29_assHitRed() {
+	if (g_vars->scene29_ass->_statics->_staticsId == ST_ASS_NORM) {
+		g_vars->scene29_ass->changeStatics2(ST_ASS_NORM);
+		g_vars->scene29_ass->startAnim(MV_ASS_HITRED, 0, -1);
+	}
+}
+
+void sceneHandler29_assHitGreen() {
+	if (g_vars->scene29_ass->_statics->_staticsId == ST_ASS_NORM) {
+		g_vars->scene29_ass->changeStatics2(ST_ASS_NORM);
+		g_vars->scene29_ass->startAnim(MV_ASS_HITGREEN, 0, -1);
+	}
+}
+
 void sceneHandler29_sub03() {
-	warning("STUB: sceneHandler29_sub03()");
+	Ball *ball = g_vars->scene29_var08.pHead;
+	Ball *newball;
+	int x, y;
+
+	while (ball) {
+		x = ball->ani->_ox - 30;
+		y = ball->ani->_oy;
+
+		if (x >= 186) {
+			if (sceneHandler29_sub16(ball->ani, x)) {
+				newball = g_vars->scene29_var05.sub04(g_vars->scene29_var05.field_8, 0);
+				newball->ani = ball->ani;
+
+				if (g_vars->scene29_var05.field_8)
+					g_vars->scene29_var05.field_8->p0 = newball;
+				else
+					g_vars->scene29_var05.pHead = newball;
+
+				g_vars->scene29_var05.field_8 = newball;
+
+				if (ball == g_vars->scene29_var08.pHead)
+					g_vars->scene29_var08.pHead = ball->p0;
+				else
+					ball->p1->p0 = ball->p0;
+
+				if (ball == g_vars->scene29_var08.field_8)
+					g_vars->scene29_var08.field_8 = ball->p1;
+				else
+					ball->p0->p1 = ball->p1;
+
+				g_vars->scene29_var08.init(&ball);
+
+				sceneHandler29_manHit();
+
+				g_fp->playSound(SND_29_014, 0);
+
+				ball->ani->startAnim(MV_SHG_HITMAN, 0, -1);
+
+				g_vars->scene29_var18 = ball->ani->_id;
+			} else {
+				ball->ani->setOXY(x, y);
+			}
+		} else {
+			newball = g_vars->scene29_var05.sub04(g_vars->scene29_var05.field_8, 0);
+			newball->ani = ball->ani;
+
+			if (g_vars->scene29_var05.field_8)
+				g_vars->scene29_var05.field_8->p0 = newball;
+			else
+				g_vars->scene29_var05.pHead = newball;
+
+			g_vars->scene29_var05.field_8 = newball;
+
+			ball->ani->hide();
+
+			if (ball == g_vars->scene29_var08.pHead)
+				g_vars->scene29_var08.pHead = ball->p0;
+			else
+				ball->p1->p0 = ball->p0;
+
+			if (ball == g_vars->scene29_var08.field_8)
+				g_vars->scene29_var08.field_8 = ball->p1;
+			else
+				ball->p0->p1 = ball->p1;
+
+			g_vars->scene29_var08.init(&ball);
+
+			sceneHandler29_assHitGreen();
+		}
+
+		ball = ball->p0;
+	}
+
+	ball = g_vars->scene29_var07.pHead;
+
+	while (ball) {
+		x = ball->ani->_ox - 30;
+		y = ball->ani->_oy;
+
+		if (x >= 147) {
+			if (sceneHandler29_sub15(ball->ani, x)) {
+				newball = g_vars->scene29_var06.sub04(g_vars->scene29_var06.field_8, 0);
+				newball->ani = ball->ani;
+
+				if (g_vars->scene29_var06.field_8)
+					g_vars->scene29_var06.field_8->p0 = newball;
+				else
+					g_vars->scene29_var06.pHead = newball;
+
+				g_vars->scene29_var06.field_8 = newball;
+
+				g_vars->scene29_var07.sub05(ball);
+
+				sceneHandler29_manHit();
+
+				g_fp->playSound(SND_29_027, 0);
+
+				ball->ani->startAnim(MV_SHR_HITMAN, 0, -1);
+
+				g_vars->scene29_var18 = ball->ani->_id;
+			} else {
+				ball->ani->setOXY(x, y);
+			}
+		} else {
+			newball = g_vars->scene29_var06.sub04(g_vars->scene29_var06.field_8, 0);
+			newball->ani = ball->ani;
+
+			if (g_vars->scene29_var06.field_8)
+				g_vars->scene29_var06.field_8->p0 = newball;
+			else
+				g_vars->scene29_var06.pHead = newball;
+
+			g_vars->scene29_var06.field_8 = newball;
+
+			ball->ani->hide();
+
+			if (ball == g_vars->scene29_var07.pHead)
+				g_vars->scene29_var07.pHead = ball->p0;
+			else
+				ball->p1->p0 = ball->p0;
+
+			if (ball == g_vars->scene29_var07.field_8)
+				g_vars->scene29_var07.field_8 = ball->p1;
+			else
+				ball->p0->p1 = ball->p1;
+
+			g_vars->scene29_var07.init(&ball);
+
+			sceneHandler29_assHitRed();
+		}
+
+		ball = ball->p0;
+	}
 }
 
 void sceneHandler29_manFromL() {
@@ -603,20 +749,6 @@ void sceneHandler29_sub07() {
 	g_fp->_aniMan->setOXY(g_vars->scene29_var20, g_vars->scene29_var21);
 }
 
-void sceneHandler29_assHitGreen() {
-	if (g_vars->scene29_ass->_statics->_staticsId == ST_ASS_NORM) {
-		g_vars->scene29_ass->changeStatics2(ST_ASS_NORM);
-		g_vars->scene29_ass->startAnim(MV_ASS_HITGREEN, 0, -1);
-	}
-}
-
-void sceneHandler29_assHitRed() {
-	if (g_vars->scene29_ass->_statics->_staticsId == ST_ASS_NORM) {
-		g_vars->scene29_ass->changeStatics2(ST_ASS_NORM);
-		g_vars->scene29_ass->startAnim(MV_ASS_HITRED, 0, -1);
-	}
-}
-
 void sceneHandler29_shoot() {
 	if (g_vars->scene29_var10 && g_vars->scene29_var20 < 1310) {
 		if (g_fp->_rnd->getRandomNumber(1) || g_vars->scene29_shooter1->_movement || g_vars->scene29_shooter1->_statics->_staticsId != ST_STR1_RIGHT) {






More information about the Scummvm-git-logs mailing list