From 0db5740c721fae93919ef8f88518e65c92103d83 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 22 Jan 2001 02:19:22 +0100 Subject: [PATCH] rnd-20010122-1-src --- CHANGES | 5 ++++- src/game.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index ec968c99..42c23a34 100644 --- 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] ----------------------------------- diff --git a/src/game.c b/src/game.c index 65fff98e..d97223df 100644 --- a/src/game.c +++ b/src/game.c @@ -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 -- 2.34.1