#define SPRING_ROLL /* spring rolling off round things continues to roll */
+#define ACID_ROLL /* rolling objects go into acid rather than remove it */
+
#define USE_CHANGED_ACID_STUFF
#define RANDOM_RAW (seed = seed << 31 | seed >> 1)
static const byte is_amoeba[TILE_MAX] =
{
[Xfake_amoeba] = 1,
- [Xfake_amoebaB] = 1,
+ [Yfake_amoeba] = 1,
[Xamoeba_1] = 1,
[Xamoeba_2] = 1,
[Xamoeba_3] = 1,
static void Lboom_bug(int x, int y, int by_element)
{
- next[x][y] = Znormal;
+ next[x][y] = Zbug;
Lboom_generic(x, y, Xemerald, Xdiamond);
static void Lboom_tank(int x, int y, int by_element)
{
- next[x][y] = Znormal;
+ next[x][y] = Ztank;
Lboom_generic(x, y, Xblank, Xblank);
static void Lboom_eater(int x, int y, int by_element)
{
- next[x][y] = Znormal;
+ next[x][y] = Zeater;
boom[x-1][y-1] = lev.eater_array[lev.eater_pos][0];
boom[x][y-1] = lev.eater_array[lev.eater_pos][1];
next[x][y] = Zplayer;
play_element_sound(x, y, SOUND_collect, element);
lev.score += lev.diamond_score;
- lev.required = lev.required < 3 ? 0 : lev.required - 3;
+ lev.gems_needed = lev.gems_needed < 3 ? 0 : lev.gems_needed - 3;
game.snapshot.collected_item = TRUE;
ply->anim = PLY_walk_n + anim;
ply->x = x;
next[x][y] = Zplayer;
play_element_sound(x, y, SOUND_collect, element);
lev.score += lev.emerald_score;
- lev.required = lev.required < 1 ? 0 : lev.required - 1;
+ lev.gems_needed = lev.gems_needed < 1 ? 0 : lev.gems_needed - 1;
game.snapshot.collected_item = TRUE;
ply->anim = PLY_walk_n + anim;
ply->x = x;
next[x][y] = Xblank;
play_element_sound(x, y, SOUND_collect, element);
lev.score += lev.diamond_score;
- lev.required = lev.required < 3 ? 0 : lev.required - 3;
+ lev.gems_needed = lev.gems_needed < 3 ? 0 : lev.gems_needed - 3;
game.snapshot.collected_item = TRUE;
ply->anim = PLY_walk_n + anim;
break;
next[x][y] = Xblank;
play_element_sound(x, y, SOUND_collect, element);
lev.score += lev.emerald_score;
- lev.required = lev.required < 1 ? 0 : lev.required - 1;
+ lev.gems_needed = lev.gems_needed < 1 ? 0 : lev.gems_needed - 1;
game.snapshot.collected_item = TRUE;
ply->anim = PLY_walk_n + anim;
break;
case Xwonderwall:
case Xswitch:
case Xbumper:
+ case Ybumper:
case Xacid_ne:
case Xacid_nw:
case Xslide_ns:
next[x][y] = Xblank;
cave[x+1][y] = Yemerald_e;
next[x+1][y] = Xemerald_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x-1][y] = Yemerald_w;
next[x-1][y] = Xemerald_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
next[x][y] = Xblank;
cave[x-1][y] = Yemerald_w;
next[x-1][y] = Xemerald_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x+1][y] = Yemerald_e;
next[x+1][y] = Xemerald_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
case Xwonderwall:
case Xswitch:
case Xbumper:
+ case Ybumper:
case Xacid_ne:
case Xacid_nw:
case Xslide_ns:
next[x][y] = Xblank;
cave[x+1][y] = Ydiamond_e;
next[x+1][y] = Xdiamond_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x-1][y] = Ydiamond_w;
next[x-1][y] = Xdiamond_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
next[x][y] = Xblank;
cave[x-1][y] = Ydiamond_w;
next[x-1][y] = Xdiamond_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x+1][y] = Ydiamond_e;
next[x+1][y] = Xdiamond_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
case Xball_2:
case Xswitch:
case Xbumper:
+ case Ybumper:
case Xacid_ne:
case Xacid_nw:
case Xlenses:
next[x][y] = Xblank;
cave[x+1][y] = Ystone_e;
next[x+1][y] = Xstone_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x-1][y] = Ystone_w;
next[x-1][y] = Xstone_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
next[x][y] = Xblank;
cave[x-1][y] = Ystone_w;
next[x-1][y] = Xstone_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x+1][y] = Ystone_e;
next[x+1][y] = Xstone_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
case Xball_2:
case Xswitch:
case Xbumper:
+ case Ybumper:
case Xacid_ne:
case Xacid_nw:
case Xslide_ns:
next[x][y] = Xblank;
cave[x+1][y] = Ybomb_e;
next[x+1][y] = Xbomb_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x-1][y] = Ybomb_w;
next[x-1][y] = Xbomb_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
next[x][y] = Xblank;
cave[x-1][y] = Ybomb_w;
next[x-1][y] = Xbomb_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x+1][y] = Ybomb_e;
next[x+1][y] = Xbomb_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
case Xball_2:
case Xswitch:
case Xbumper:
+ case Ybumper:
case Xacid_ne:
case Xacid_nw:
case Xslide_ns:
next[x][y] = Xblank;
cave[x+1][y] = Ynut_e;
next[x+1][y] = Xnut_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x-1][y] = Ynut_w;
next[x-1][y] = Xnut_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
next[x][y] = Xblank;
cave[x-1][y] = Ynut_w;
next[x-1][y] = Xnut_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
next[x][y] = Xblank;
cave[x+1][y] = Ynut_e;
next[x+1][y] = Xnut_pause;
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
case Xball_2:
case Xswitch:
case Xbumper:
+ case Ybumper:
case Xacid_ne:
case Xacid_nw:
case Xslide_ns:
cave[x][y] = Yspring_eB;
next[x][y] = Xblank;
cave[x+1][y] = Yspring_e;
- if (cave[x][y+1] == Xbumper)
- cave[x][y+1] = XbumperB;
-
#ifdef SPRING_ROLL
next[x+1][y] = Xspring_e;
#else
next[x+1][y] = Xspring_pause;
#endif
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
cave[x][y] = Yspring_wB;
next[x][y] = Xblank;
cave[x-1][y] = Yspring_w;
- if (cave[x][y+1] == Xbumper)
- cave[x][y+1] = XbumperB;
-
#ifdef SPRING_ROLL
next[x-1][y] = Xspring_w;
#else
next[x-1][y] = Xspring_pause;
#endif
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
cave[x][y] = Yspring_wB;
next[x][y] = Xblank;
cave[x-1][y] = Yspring_w;
- if (cave[x][y+1] == Xbumper)
- cave[x][y+1] = XbumperB;
-
#ifdef SPRING_ROLL
next[x-1][y] = Xspring_w;
#else
next[x-1][y] = Xspring_pause;
#endif
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
cave[x][y] = Yspring_eB;
next[x][y] = Xblank;
cave[x+1][y] = Yspring_e;
- if (cave[x][y+1] == Xbumper)
- cave[x][y+1] = XbumperB;
-
#ifdef SPRING_ROLL
next[x+1][y] = Xspring_e;
#else
next[x+1][y] = Xspring_pause;
#endif
+ if (cave[x][y+1] == Xbumper)
+ cave[x][y+1] = Ybumper;
return;
}
}
return;
case Xbumper:
- cave[x][y+1] = XbumperB;
+ cave[x][y+1] = Ybumper;
}
switch (cave[x+1][y])
return;
case Xbumper:
- case XbumperB:
- cave[x+1][y] = XbumperB;
+ case Ybumper:
+ cave[x+1][y] = Ybumper;
next[x][y] = Xspring_w;
play_element_sound(x, y, SOUND_spring, Xspring);
return;
return;
case Xbumper:
- cave[x][y+1] = XbumperB;
+ cave[x][y+1] = Ybumper;
}
switch (cave[x-1][y])
return;
case Xbumper:
- case XbumperB:
- cave[x-1][y] = XbumperB;
+ case Ybumper:
+ cave[x-1][y] = Ybumper;
next[x][y] = Xspring_e;
play_element_sound(x, y, SOUND_spring, Xspring);
return;
static void Lpush_emerald_e(int x, int y)
{
+ cave[x][y] = Yemerald_eB;
+ next[x][y] = Xblank;
+
switch (cave[x+1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xemerald;
- next[x][y] = Xemerald;
return;
- default:
- cave[x][y] = Yemerald_eB;
- next[x][y] = Xblank;
- cave[x+1][y] = Yemerald_e;
- next[x+1][y] = Xemerald_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x+2][y-1] == Xblank)
+ cave[x+2][y-1] = Xsplash_e;
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x+1][y] = Yemerald_e;
+ next[x+1][y] = Xemerald_pause;
}
static void Lpush_emerald_w(int x, int y)
{
+ cave[x][y] = Yemerald_wB;
+ next[x][y] = Xblank;
+
switch (cave[x-1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xemerald;
- next[x][y] = Xemerald;
return;
- default:
- cave[x][y] = Yemerald_wB;
- next[x][y] = Xblank;
- cave[x-1][y] = Yemerald_w;
- next[x-1][y] = Xemerald_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_e;
+ if (cave[x-2][y-1] == Xblank)
+ cave[x-2][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x-1][y] = Yemerald_w;
+ next[x-1][y] = Xemerald_pause;
}
static void Lpush_diamond_e(int x, int y)
{
+ cave[x][y] = Ydiamond_eB;
+ next[x][y] = Xblank;
+
switch (cave[x+1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xdiamond;
- next[x][y] = Xdiamond;
return;
- default:
- cave[x][y] = Ydiamond_eB;
- next[x][y] = Xblank;
- cave[x+1][y] = Ydiamond_e;
- next[x+1][y] = Xdiamond_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x+2][y-1] == Xblank)
+ cave[x+2][y-1] = Xsplash_e;
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x+1][y] = Ydiamond_e;
+ next[x+1][y] = Xdiamond_pause;
}
static void Lpush_diamond_w(int x, int y)
{
+ cave[x][y] = Ydiamond_wB;
+ next[x][y] = Xblank;
+
switch (cave[x-1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xdiamond;
- next[x][y] = Xdiamond;
return;
- default:
- cave[x][y] = Ydiamond_wB;
- next[x][y] = Xblank;
- cave[x-1][y] = Ydiamond_w;
- next[x-1][y] = Xdiamond_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_e;
+ if (cave[x-2][y-1] == Xblank)
+ cave[x-2][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x-1][y] = Ydiamond_w;
+ next[x-1][y] = Xdiamond_pause;
}
static void Lpush_stone_e(int x, int y)
{
+ cave[x][y] = Ystone_eB;
+ next[x][y] = Xblank;
+
switch (cave[x+1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xstone;
- next[x][y] = Xstone;
return;
- default:
- cave[x][y] = Ystone_eB;
- next[x][y] = Xblank;
- cave[x+1][y] = Ystone_e;
- next[x+1][y] = Xstone_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x+2][y-1] == Xblank)
+ cave[x+2][y-1] = Xsplash_e;
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x+1][y] = Ystone_e;
+ next[x+1][y] = Xstone_pause;
}
static void Lpush_stone_w(int x, int y)
{
+ cave[x][y] = Ystone_wB;
+ next[x][y] = Xblank;
+
switch (cave[x-1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xstone;
- next[x][y] = Xstone;
return;
- default:
- cave[x][y] = Ystone_wB;
- next[x][y] = Xblank;
- cave[x-1][y] = Ystone_w;
- next[x-1][y] = Xstone_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_e;
+ if (cave[x-2][y-1] == Xblank)
+ cave[x-2][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x-1][y] = Ystone_w;
+ next[x-1][y] = Xstone_pause;
}
static void Lpush_bomb_e(int x, int y)
{
+ cave[x][y] = Ybomb_eB;
+ next[x][y] = Xblank;
+
switch (cave[x+1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xbomb;
- next[x][y] = Xbomb;
return;
- default:
- cave[x][y] = Ybomb_eB;
- next[x][y] = Xblank;
- cave[x+1][y] = Ybomb_e;
- next[x+1][y] = Xbomb_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x+2][y-1] == Xblank)
+ cave[x+2][y-1] = Xsplash_e;
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x+1][y] = Ybomb_e;
+ next[x+1][y] = Xbomb_pause;
}
static void Lpush_bomb_w(int x, int y)
{
+ cave[x][y] = Ybomb_wB;
+ next[x][y] = Xblank;
+
switch (cave[x-1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xbomb;
- next[x][y] = Xbomb;
return;
- default:
- cave[x][y] = Ybomb_wB;
- next[x][y] = Xblank;
- cave[x-1][y] = Ybomb_w;
- next[x-1][y] = Xbomb_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_e;
+ if (cave[x-2][y-1] == Xblank)
+ cave[x-2][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x-1][y] = Ybomb_w;
+ next[x-1][y] = Xbomb_pause;
}
static void Lpush_nut_e(int x, int y)
{
+ cave[x][y] = Ynut_eB;
+ next[x][y] = Xblank;
+
switch (cave[x+1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xnut;
- next[x][y] = Xnut;
return;
- default:
- cave[x][y] = Ynut_eB;
- next[x][y] = Xblank;
- cave[x+1][y] = Ynut_e;
- next[x+1][y] = Xnut_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x+2][y-1] == Xblank)
+ cave[x+2][y-1] = Xsplash_e;
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x+1][y] = Ynut_e;
+ next[x+1][y] = Xnut_pause;
}
static void Lpush_nut_w(int x, int y)
{
+ cave[x][y] = Ynut_wB;
+ next[x][y] = Xblank;
+
switch (cave[x-1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xnut;
- next[x][y] = Xnut;
return;
- default:
- cave[x][y] = Ynut_wB;
- next[x][y] = Xblank;
- cave[x-1][y] = Ynut_w;
- next[x-1][y] = Xnut_pause;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_e;
+ if (cave[x-2][y-1] == Xblank)
+ cave[x-2][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x-1][y] = Ynut_w;
+ next[x-1][y] = Xnut_pause;
}
static void Lpush_spring_e(int x, int y)
{
+ cave[x][y] = Yspring_eB;
+ next[x][y] = Xblank;
+
switch (cave[x+1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xspring;
- next[x][y] = Xspring;
return;
- default:
- cave[x][y] = Yspring_eB;
- next[x][y] = Xblank;
- cave[x+1][y] = Yspring_e;
- next[x+1][y] = Xspring_e;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x+2][y-1] == Xblank)
+ cave[x+2][y-1] = Xsplash_e;
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x+1][y] = Yspring_e;
+ next[x+1][y] = Xspring_e;
}
static void Lpush_spring_w(int x, int y)
{
+ cave[x][y] = Yspring_wB;
+ next[x][y] = Xblank;
+
switch (cave[x-1][y])
{
- case Zplayer:
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
case Xboom_android:
case Xboom_1:
- cave[x][y] = Xspring;
- next[x][y] = Xspring;
return;
- default:
- cave[x][y] = Yspring_wB;
- next[x][y] = Xblank;
- cave[x-1][y] = Yspring_w;
- next[x-1][y] = Xspring_w;
+#ifdef ACID_ROLL
+ case Xacid_1:
+ case Xacid_2:
+ case Xacid_3:
+ case Xacid_4:
+ case Xacid_5:
+ case Xacid_6:
+ case Xacid_7:
+ case Xacid_8:
+ if (cave[x][y-1] == Xblank)
+ cave[x][y-1] = Xsplash_e;
+ if (cave[x-2][y-1] == Xblank)
+ cave[x-2][y-1] = Xsplash_w;
+ play_element_sound(x, y, SOUND_acid, Xacid_1);
return;
+#endif
}
+
+ cave[x-1][y] = Yspring_w;
+ next[x-1][y] = Xspring_w;
}
static void Ldynamite_1(int x, int y)
{
if (lev.wonderwall_time && lev.wonderwall_state)
{
- cave[x][y] = XwonderwallB;
+ cave[x][y] = Ywonderwall;
play_element_sound(x, y, SOUND_wonder, Xwonderwall);
}
}
static void Lwheel(int x, int y)
{
if (lev.wheel_cnt && x == lev.wheel_x && y == lev.wheel_y)
- cave[x][y] = XwheelB;
+ cave[x][y] = Ywheel;
}
static void Lswitch(int x, int y)
{
if (lev.ball_state)
- cave[x][y] = XswitchB;
+ cave[x][y] = Yswitch;
}
static void Lfake_blank(int x, int y)
{
if (lev.lenses_cnt)
- cave[x][y] = Xfake_blankB;
+ cave[x][y] = Yfake_blank;
}
static void Lfake_grass(int x, int y)
{
if (lev.magnify_cnt)
- cave[x][y] = Xfake_grassB;
+ cave[x][y] = Yfake_grass;
}
static void Lfake_amoeba(int x, int y)
{
if (lev.lenses_cnt)
- cave[x][y] = Xfake_amoebaB;
+ cave[x][y] = Yfake_amoeba;
}
static void Lsand_stone(int x, int y)
static void Lexit(int x, int y)
{
- if (lev.required > 0)
+ if (lev.gems_needed > 0)
return;
switch (RANDOM(64) / 21)
switch (cave[x][y])
{
case Zborder:
- case Znormal:
+ case Zbug:
+ case Ztank:
+ case Zeater:
case Zdynamite:
case Xboom_bug:
case Xboom_bomb:
{
switch (cave[x][y])
{
- case Znormal:
+ case Zbug:
+ Lboom_nine(x, y, FALSE);
+ break;
+
+ case Ztank:
+ Lboom_nine(x, y, FALSE);
+ break;
+
+ case Zeater:
Lboom_nine(x, y, FALSE);
break;