[Scummvm-cvs-logs] scummvm master -> 2a2f033551b10ee785dc47806d3cf9bfdf331aa9

sev- sev at scummvm.org
Tue Apr 1 21:24:02 CEST 2014


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

Summary:
2a2f033551 FULLPIPE: Implement sceneHandler29_shootGreen()


Commit: 2a2f033551b10ee785dc47806d3cf9bfdf331aa9
    https://github.com/scummvm/scummvm/commit/2a2f033551b10ee785dc47806d3cf9bfdf331aa9
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-04-01T22:22:55+03:00

Commit Message:
FULLPIPE: Implement sceneHandler29_shootGreen()

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



diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 59c4ded..8e3803b 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -1304,6 +1304,8 @@ namespace Fullpipe {
 #define MV_MAN29_STANDUP_NORM 2093
 #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_STR1_SHOOT 2109
 #define MV_STR2_SHOOT 2112
diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp
index 3fe1cac..5b14a3f 100644
--- a/engines/fullpipe/scenes/scene29.cpp
+++ b/engines/fullpipe/scenes/scene29.cpp
@@ -176,7 +176,76 @@ void sceneHandler29_winArcade() {
 }
 
 void sceneHandler29_shootGreen() {
-	warning("STUB: sceneHandler29_shootGreen()");
+	if (g_vars->scene29_var05.numBalls) {
+		int x = g_vars->scene29_shooter1->_ox - 113;
+		int y = g_vars->scene29_shooter1->_oy - 48;
+		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_SHG_NORM, 0);
+		ani->_priority = 5;
+
+		Ball *runPtr = g_vars->scene29_var08.pTail;
+		Ball *lastP = g_vars->scene29_var08.field_8;
+
+		if (!g_vars->scene29_var08.pTail) {
+			g_vars->scene29_var08.cPlex = (byte *)calloc(g_vars->scene29_var08.cPlexLen, sizeof(Ball));
+
+			byte *p1 = g_vars->scene29_var08.cPlex + (g_vars->scene29_var08.cPlexLen - 1) * sizeof(Ball);
+
+			if (g_vars->scene29_var08.cPlexLen - 1 < 0) {
+				runPtr = g_vars->scene29_var08.pTail;
+			} else {
+				runPtr = g_vars->scene29_var08.pTail;
+
+				for (int j = 0; j < g_vars->scene29_var08.cPlexLen; j++) {
+					((Ball *)p1)->p1 = runPtr;
+					runPtr = (Ball *)p1;
+
+					p1 -= sizeof(Ball);
+				}
+
+				g_vars->scene29_var08.pTail = runPtr;
+			}
+		}
+		g_vars->scene29_var08.pTail = runPtr->p0;
+		runPtr->p1 = lastP;
+		runPtr->p0 = 0;
+		runPtr->ani = ani;
+
+		g_vars->scene29_var08.numBalls++;
+
+		if (g_vars->scene29_var08.field_8) {
+			g_vars->scene29_var08.field_8->p0 = runPtr;
+			g_vars->scene29_var08.field_8 = runPtr;
+		} else {
+			g_vars->scene29_var08.pHead = runPtr;
+			g_vars->scene29_var08.field_8 = runPtr;
+		}
+	}
 }
 
 void sceneHandler29_shootRed() {






More information about the Scummvm-git-logs mailing list