aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe/scenes
diff options
context:
space:
mode:
authorEugene Sandulenko2014-04-02 06:14:15 +0300
committerEugene Sandulenko2014-04-02 15:10:28 +0300
commitc08a4fdba13319b1af96e120297d4aee792f360f (patch)
tree72300d2b198b1d8a3c0514eba1f00c39949c139c /engines/fullpipe/scenes
parent6a984425e877d5bb636fba185f550dc84dc7a70d (diff)
downloadscummvm-rg350-c08a4fdba13319b1af96e120297d4aee792f360f.tar.gz
scummvm-rg350-c08a4fdba13319b1af96e120297d4aee792f360f.tar.bz2
scummvm-rg350-c08a4fdba13319b1af96e120297d4aee792f360f.zip
FULLPIPE: Implement sceneHandler29_shootRed()
Diffstat (limited to 'engines/fullpipe/scenes')
-rw-r--r--engines/fullpipe/scenes/scene29.cpp71
1 files changed, 70 insertions, 1 deletions
diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp
index 5b14a3fb71..21454906d7 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() {