rnd-20100216-1-src
[rocksndiamonds.git] / src / game_sp / SnikSnaks.c
index 13214817ebc9db6ed8c04ce08bf0f4a7b856f348..d7b11e175dfe5300b99e231d5c45dbc43346c96b 100644 (file)
@@ -17,7 +17,8 @@ static int subSnikSnakFromRight(int si, int bx);
 static int subSnikSnakTurnLeft(int si, int bx);
 static int subSnikSnakTurnRight(int si, int bx);
 
-static char *VB_Name = "modSnikSnak";
+// static char *VB_Name = "modSnikSnak";
+
 // --- Option Explicit
 // ==========================================================================
 //                              SUBROUTINE
@@ -33,6 +34,12 @@ int subAnimateSnikSnaks(int si)
   if (SnikSnaksElectronsFrozen == 1)
     return subAnimateSnikSnaks;
 
+#if 1
+  /* (not sure why this was removed -- this broke several level solutions) */
+  if (LowByte(PlayField16[si]) != fiSnikSnak)
+    return subAnimateSnikSnaks;
+#endif
+
   //  If LowByte(PlayField16(si)) <> fiSnikSnak Then Exit Function
   // Debug.Assert (LowByte(PlayField16[si]) == fiSnikSnak);
   bx = HighByte(PlayField16[si]);
@@ -117,7 +124,8 @@ static int subSnikSnakTurnLeft(int si, int bx)
 {
   static int subSnikSnakTurnLeft;
 
-  int ax, ah, bl, dx, X, Y;
+  // int ax, ah, bl, dx, X, Y;
+  int ax, ah, bl;
 
   ax = (TimerVar & 3);
   if (ax != 0)
@@ -128,11 +136,16 @@ static int subSnikSnakTurnLeft(int si, int bx)
     return subSnikSnakTurnLeft;
   } // loc_g_75E0:
 
+#if 1
+  subDrawSnikSnakTurnLeft(si, bx);
+#else
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si);
   Y = GetStretchY(si);
-  StretchedSprites.BltEx(X, Y, aniSnikSnak[bx]);
+  StretchedSprites.BltEx(X, Y, aniFramesSnikSnak[bx]);
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
+#endif
+
   bx = (bx + 1) & 0x7;
   MovHighByte(&PlayField16[si], bx);
   return subSnikSnakTurnLeft;
@@ -240,7 +253,8 @@ static int subSnikSnakTurnRight(int si, int bx)
 {
   static int subSnikSnakTurnRight;
 
-  int ax, ah, bl, dx, X, Y;
+  // int ax, ah, bl, dx, X, Y;
+  int ax, ah, bl;
 
   ax = (TimerVar & 3);
   if (ax != 0)
@@ -251,11 +265,16 @@ static int subSnikSnakTurnRight(int si, int bx)
     return subSnikSnakTurnRight;
   } // loc_g_76DB:
 
+#if 1
+  subDrawSnikSnakTurnRight(si, bx);
+#else
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si);
   Y = GetStretchY(si);
-  StretchedSprites.BltEx(X, Y, aniSnikSnak[0x10 - bx]);
+  StretchedSprites.BltEx(X, Y, aniFramesSnikSnak[0x10 - bx]);
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
+#endif
+
   bx = ((bx + 1) & 0x7) | 8;
   MovHighByte(&PlayField16[si], bx);
   return subSnikSnakTurnRight;
@@ -363,8 +382,13 @@ static int subSnikSnakFromBelow(int si, int bx)
 {
   static int subSnikSnakFromBelow;
 
-  int ax, ah, bl, dx, X, Y;
+  // int ax, ah, bl, dx, X, Y;
+  int ax, bl;
 
+#if 1
+  subDrawSnikSnakFromBelow(si, bx);
+  bx = bx - 0xF;  // get and increment sequence#
+#else
   bx = bx - 0xF;  // get and increment sequence#
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si);
@@ -372,6 +396,8 @@ static int subSnikSnakFromBelow(int si, int bx)
   StretchedSprites.BltEx(X, Y, 0);
   StretchedSprites.BltEx(X, Y - bx * TwoPixels, aniSnikSnakUp + bx);
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
+#endif
+
   bl = LowByte(bx);
   if (bl == 7 && LowByte(PlayField16[si + FieldWidth]) != fiExplosion)
   {
@@ -425,8 +451,13 @@ static int subSnikSnakFromRight(int si, int bx)
 {
   static int subSnikSnakFromRight;
 
-  int ax, ah, bl, dx, X, Y;
+  // int ax, ah, bl, dx, X, Y;
+  int ax, bl;
 
+#if 1
+  subDrawSnikSnakFromRight(si, bx);
+  bx = bx - 0x17;  // get and increment sequence#
+#else
   bx = bx - 0x17;  // get and increment sequence#
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si + 1);
@@ -434,6 +465,8 @@ static int subSnikSnakFromRight(int si, int bx)
   StretchedSprites.BltEx(X, Y, 0);
   StretchedSprites.BltEx(X - bx * TwoPixels, Y, aniSnikSnakLeft + bx);
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
+#endif
+
   bl = LowByte(bx);
   if (bl == 7 && LowByte(PlayField16[si + 1]) != fiExplosion)
   {
@@ -486,8 +519,13 @@ static int subSnikSnakFromAbove(int si, int bx)
 {
   static int subSnikSnakFromAbove;
 
-  int ax, ah, bl, dx, X, Y;
+  // int ax, ah, bl, dx, X, Y;
+  int ax, bl;
 
+#if 1
+  subDrawSnikSnakFromAbove(si, bx);
+  bx = bx - 0x1F;  // get and increment sequence#
+#else
   bx = bx - 0x1F;  // get and increment sequence#
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si);
@@ -495,6 +533,8 @@ static int subSnikSnakFromAbove(int si, int bx)
   StretchedSprites.BltEx(X, Y, 0);
   StretchedSprites.BltEx(X, Y + bx * TwoPixels, aniSnikSnakDown + bx);
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
+#endif
+
   bl = LowByte(bx);
   if (bl == 7 && LowByte(PlayField16[si - FieldWidth]) != fiExplosion)
   {
@@ -547,8 +587,13 @@ static int subSnikSnakFromLeft(int si, int bx)
 {
   static int subSnikSnakFromLeft;
 
-  int ax, ah, bl, dx, X, Y;
+  // int ax, ah, bl, dx, X, Y;
+  int ax, bl;
 
+#if 1
+  subDrawSnikSnakFromLeft(si, bx);
+  bx = bx - 0x27;  // get and increment sequence#
+#else
   bx = bx - 0x27;  // get and increment sequence#
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si - 1);
@@ -556,6 +601,8 @@ static int subSnikSnakFromLeft(int si, int bx)
   StretchedSprites.BltEx(X, Y, 0);
   StretchedSprites.BltEx(X + bx * TwoPixels, Y, aniSnikSnakRight + bx);
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
+#endif
+
   bl = LowByte(bx);
   if (bl == 7 && LowByte(PlayField16[si - 1]) != fiExplosion)
   {
@@ -613,7 +660,7 @@ static int subDrawSnikSnakTurnLeft(int si, int bx)
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si);
   Y = GetStretchY(si);
-  StretchedSprites.BltEx(X, Y, aniSnikSnak[bx]);
+  StretchedSprites.BltEx(X, Y, aniFramesSnikSnak[bx]);
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
 
   return subDrawSnikSnakTurnLeft;
@@ -628,7 +675,7 @@ static int subDrawSnikSnakTurnRight(int si, int bx)
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si);
   Y = GetStretchY(si);
-  StretchedSprites.BltEx(X, Y, aniSnikSnak[0x10 - bx]);
+  StretchedSprites.BltEx(X, Y, aniFramesSnikSnak[0x10 - bx]);
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
 
   return subDrawSnikSnakTurnRight;
@@ -644,8 +691,13 @@ static int subDrawSnikSnakFromBelow(int si, int bx)
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si);
   Y = GetStretchY(si + FieldWidth);
+#if 1
+  StretchedSprites.BltImg(X, Y, aniSpace, 0);
+  StretchedSprites.BltImg(X, Y - bx * TwoPixels, aniSnikSnakUp, bx);
+#else
   StretchedSprites.BltEx(X, Y, 0);
   StretchedSprites.BltEx(X, Y - bx * TwoPixels, aniSnikSnakUp + bx);
+#endif
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
 
   return subDrawSnikSnakFromBelow;
@@ -661,8 +713,13 @@ static int subDrawSnikSnakFromRight(int si, int bx)
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si + 1);
   Y = GetStretchY(si);
+#if 1
+  StretchedSprites.BltImg(X, Y, aniSpace, 0);
+  StretchedSprites.BltImg(X - bx * TwoPixels, Y, aniSnikSnakLeft, bx);
+#else
   StretchedSprites.BltEx(X, Y, 0);
   StretchedSprites.BltEx(X - bx * TwoPixels, Y, aniSnikSnakLeft + bx);
+#endif
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
 
   return subDrawSnikSnakFromRight;
@@ -678,8 +735,13 @@ static int subDrawSnikSnakFromAbove(int si, int bx)
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si);
   Y = GetStretchY(si - FieldWidth);
+#if 1
+  StretchedSprites.BltImg(X, Y, aniSpace, 0);
+  StretchedSprites.BltImg(X, Y + bx * TwoPixels, aniSnikSnakDown, bx);
+#else
   StretchedSprites.BltEx(X, Y, 0);
   StretchedSprites.BltEx(X, Y + bx * TwoPixels, aniSnikSnakDown + bx);
+#endif
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
 
   return subDrawSnikSnakFromAbove;
@@ -695,8 +757,13 @@ static int subDrawSnikSnakFromLeft(int si, int bx)
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
   X = GetStretchX(si - 1);
   Y = GetStretchY(si);
+#if 1
+  StretchedSprites.BltImg(X, Y, aniSpace, 0);
+  StretchedSprites.BltImg(X + bx * TwoPixels, Y, aniSnikSnakRight, bx);
+#else
   StretchedSprites.BltEx(X, Y, 0);
   StretchedSprites.BltEx(X + bx * TwoPixels, Y, aniSnikSnakRight + bx);
+#endif
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++
 
   return subDrawSnikSnakFromLeft;