rnd-20010122-1-src
authorHolger Schemel <info@artsoft.org>
Mon, 22 Jan 2001 01:19:22 +0000 (02:19 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:35:55 +0000 (10:35 +0200)
CHANGES
src/game.c

diff --git a/CHANGES b/CHANGES
index ec968c99bfb655b5c730d7640a4cce7dd7474c04..42c23a3414c7ffaa9750622bda6da28e8a3081a4 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,7 +1,10 @@
 Release Version 2.0.1 [?? ??? 2001]
 -----------------------------------
        - bug in explosion code fixed that broke level 24 of "Baby Ghost Mine"
-       - Supaplex "orange disk" emulation bug fixed thanks to Mihail Milushev
+       - several Supaplex emulation bugs fixed thanks to Mihail Milushev:
+         + orange disk does not fall off from slippery elements
+         + infotrons kill electrons and snik snaks and trigger orange disks
+         + explosion chain reactions are now a bit slower than murphy
 
 Release Version 2.0.0 [01 JAN 2001]
 -----------------------------------
index 65fff98e2ae17ea72b48b3aa81b902dbcf7aacab..d97223df2d51350d88ea3ade8ebdcdb3de0dd6e1 100644 (file)
@@ -1278,7 +1278,7 @@ void CheckDynamite(int x, int y)
 void Explode(int ex, int ey, int phase, int mode)
 {
   int x, y;
-  int num_phase = 9, delay = 2;
+  int num_phase = 9, delay = (game.emulation == EMU_SUPAPLEX ? 3 : 2);
   int last_phase = num_phase * delay;
   int half_phase = (num_phase / 2) * delay;
   int first_phase_after_start = EX_PHASE_START + 1;
@@ -1886,6 +1886,13 @@ void Impact(int x, int y)
        return;
       }
     }
+    else if ((element == EL_SP_INFOTRON || element == EL_SP_ZONK) &&
+            (smashed == EL_SP_SNIKSNAK || smashed == EL_SP_ELECTRON ||
+             smashed == EL_SP_DISK_ORANGE))
+    {
+      Bang(x, y+1);
+      return;
+    }
     else if (element == EL_FELSBROCKEN ||
             element == EL_SP_ZONK ||
             element == EL_BD_ROCK)
@@ -3437,14 +3444,14 @@ void AmoebeAbleger(int ax, int ay)
   if (element != EL_AMOEBE_NASS || neway < ay || !IS_FREE(newax, neway) ||
       (neway == lev_fieldy - 1 && newax != ax))
   {
-    Feld[newax][neway] = EL_AMOEBING;
+    Feld[newax][neway] = EL_AMOEBING;  /* simple growth of new amoeba tile */
     Store[newax][neway] = element;
   }
   else if (neway == ay)
-    Feld[newax][neway] = EL_TROPFEN;
+    Feld[newax][neway] = EL_TROPFEN;   /* drop left or right from amoeba */
   else
   {
-    InitMovingField(ax, ay, MV_DOWN);
+    InitMovingField(ax, ay, MV_DOWN);  /* drop dripping out of amoeba */
     Feld[ax][ay] = EL_AMOEBA_DRIPPING;
     Store[ax][ay] = EL_TROPFEN;
     ContinueMoving(ax, ay);
@@ -4436,8 +4443,10 @@ void GameActions()
       AmoebeWaechst(x, y);
     else if (element == EL_DEAMOEBING)
       AmoebeSchrumpft(x, y);
+#if 1
     else if (IS_AMOEBALIVE(element))
       AmoebeAbleger(x, y);
+#endif
     else if (element == EL_LIFE || element == EL_LIFE_ASYNC)
       Life(x, y);
     else if (element == EL_ABLENK_EIN)
@@ -4521,6 +4530,44 @@ void GameActions()
     }
   }
 
+#if 0
+  /* new experimental amoeba growth stuff*/
+#if 1
+  if (!(FrameCounter % 8))
+#endif
+  {
+    static unsigned long random = 1684108901;
+
+    for (i = 0; i < level.amoeba_speed * 4; i++)
+    {
+#if 1
+      x = (random >> 10) % lev_fieldx;
+      y = (random >> 20) % lev_fieldy;
+#else
+      x = RND(lev_fieldx);
+      y = RND(lev_fieldy);
+#endif
+      element = Feld[x][y];
+
+      if (!IS_PLAYER(x,y) &&
+         (element == EL_LEERRAUM ||
+          element == EL_ERDREICH ||
+          element == EL_MORAST_LEER ||
+          element == EL_BLURB_LEFT ||
+          element == EL_BLURB_RIGHT))
+      {
+       if ((IN_LEV_FIELD(x, y-1) && Feld[x][y-1] == EL_AMOEBE_NASS) ||
+           (IN_LEV_FIELD(x-1, y) && Feld[x-1][y] == EL_AMOEBE_NASS) ||
+           (IN_LEV_FIELD(x+1, y) && Feld[x+1][y] == EL_AMOEBE_NASS) ||
+           (IN_LEV_FIELD(x, y+1) && Feld[x][y+1] == EL_AMOEBE_NASS))
+         Feld[x][y] = EL_TROPFEN;
+      }
+
+      random = random * 129 + 1;
+    }
+  }
+#endif
+
 #if 0
   if (game.explosions_delayed)
 #endif