static void Lboom_bug(int x, int y)
{
- next[x][y] = Zbug;
+ if (game_em.use_old_explosions)
+ next[x][y] = Zbug;
Lboom_generic(x, y, Xemerald, Xdiamond);
static void Lboom_tank(int x, int y)
{
- next[x][y] = Ztank;
+ if (game_em.use_old_explosions)
+ next[x][y] = Ztank;
Lboom_generic(x, y, Xblank, Xblank);
static void Lboom_eater(int x, int y)
{
- next[x][y] = Zeater;
+ if (game_em.use_old_explosions)
+ 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];
#endif
}
+static void Lboom_bug_old(int x, int y)
+{
+ if (!game_em.use_old_explosions)
+ return;
+
+ Lboom_bug(x, y);
+}
+
+static void Lboom_tank_old(int x, int y)
+{
+ if (!game_em.use_old_explosions)
+ return;
+
+ Lboom_tank(x, y);
+}
+
+static void Lboom_eater_old(int x, int y)
+{
+ if (!game_em.use_old_explosions)
+ return;
+
+ Lboom_eater(x, y);
+}
+
+static void Lboom_bug_new(int x, int y, boolean chain_explosion)
+{
+ if (game_em.use_old_explosions)
+ return;
+
+ if (chain_explosion)
+ cave[x][y] = Xchain;
+
+ Lboom_bug(x, y);
+}
+
+static void Lboom_tank_new(int x, int y, boolean chain_explosion)
+{
+ if (game_em.use_old_explosions)
+ return;
+
+ if (chain_explosion)
+ cave[x][y] = Xchain;
+
+ Lboom_tank(x, y);
+}
+
+static void Lboom_eater_new(int x, int y, boolean chain_explosion)
+{
+ if (game_em.use_old_explosions)
+ return;
+
+ if (chain_explosion)
+ cave[x][y] = Xchain;
+
+ Lboom_eater(x, y);
+}
+
static boolean player_killed(struct PLAYER *ply)
{
int x = ply->x;
case Xbug_2_s:
case Xbug_2_w:
cave[x][y-1] = Xboom_bug;
+ Lboom_bug_new(x, y-1, TRUE);
break;
case Xtank_1_n:
case Xtank_2_s:
case Xtank_2_w:
cave[x][y-1] = Xboom_tank;
+ Lboom_tank_new(x, y-1, TRUE);
break;
}
case Xbug_2_s:
case Xbug_2_w:
cave[x+1][y] = Xboom_bug;
+ Lboom_bug_new(x+1, y, TRUE);
break;
case Xtank_1_n:
case Xtank_2_s:
case Xtank_2_w:
cave[x+1][y] = Xboom_tank;
+ Lboom_tank_new(x+1, y, TRUE);
break;
}
case Xbug_2_s:
case Xbug_2_w:
cave[x][y+1] = Xboom_bug;
+ Lboom_bug_new(x, y+1, TRUE);
break;
case Xtank_1_n:
case Xtank_2_s:
case Xtank_2_w:
cave[x][y+1] = Xboom_tank;
+ Lboom_tank_new(x, y+1, TRUE);
break;
}
case Xbug_2_s:
case Xbug_2_w:
cave[x-1][y] = Xboom_bug;
+ Lboom_bug_new(x-1, y, TRUE);
break;
case Xtank_1_n:
case Xtank_2_s:
case Xtank_2_w:
cave[x-1][y] = Xboom_tank;
+ Lboom_tank_new(x-1, y, TRUE);
break;
}
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_bug(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_bug(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_bug(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_bug(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_bug(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_bug(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_bug(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_bug(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_tank(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_tank(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_tank(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_tank(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_tank(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_tank(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_tank(x, y);
return;
is_amoeba[cave[x][y+1]] ||
is_amoeba[cave[x-1][y]])
{
+ next[x][y] = Zboom;
Lboom_tank(x, y);
return;
case Xeater_s:
case Xeater_w:
cave[x][y] = Ystone_sB;
+ next[x][y] = Xblank;
cave[x][y+1] = Yeater_stone;
- Lboom_eater(x, y+1);
+ next[x][y+1] = Zeater;
+ Lboom_eater_old(x, y+1);
score += lev.eater_score;
return;
case Xalien:
case Xalien_pause:
cave[x][y] = Ystone_sB;
+ next[x][y] = Xblank;
cave[x][y+1] = Yalien_stone;
- Lboom_tank(x, y+1);
+ next[x][y+1] = Ztank;
+ Lboom_tank_old(x, y+1);
score += lev.alien_score;
return;
case Xbug_2_s:
case Xbug_2_w:
cave[x][y] = Ystone_sB;
+ next[x][y] = Xblank;
cave[x][y+1] = Ybug_stone;
- Lboom_bug(x, y+1);
+ next[x][y+1] = Zbug;
+ Lboom_bug_old(x, y+1);
score += lev.bug_score;
return;
case Xtank_2_s:
case Xtank_2_w:
cave[x][y] = Ystone_sB;
+ next[x][y] = Xblank;
cave[x][y+1] = Ytank_stone;
- Lboom_tank(x, y+1);
+ next[x][y+1] = Ztank;
+ Lboom_tank_old(x, y+1);
score += lev.tank_score;
return;
case Xbomb:
case Xbomb_pause:
+ cave[x][y] = Xstone;
+ next[x][y] = Xstone;
cave[x][y+1] = Ybomb_blank;
- Lboom_tank(x, y+1);
+ next[x][y+1] = Ztank;
+ Lboom_tank_old(x, y+1);
return;
case Xnut:
default:
cave[x][y] = Ybomb_blank;
- Lboom_tank(x, y);
+ next[x][y] = Ztank;
+ Lboom_tank_old(x, y);
return;
}
}
case Xeater_s:
case Xeater_w:
cave[x][y] = Yspring_sB;
+ next[x][y] = Xblank;
cave[x][y+1] = Yeater_spring;
- Lboom_eater(x, y+1);
+ next[x][y+1] = Zeater;
+ Lboom_eater_old(x, y+1);
score += lev.eater_score;
return;
case Xalien:
case Xalien_pause:
cave[x][y] = Yspring_sB;
+ next[x][y] = Xblank;
cave[x][y+1] = Yalien_spring;
- Lboom_tank(x, y+1);
+ next[x][y+1] = Ztank;
+ Lboom_tank_old(x, y+1);
score += lev.alien_score;
return;
case Xbug_2_s:
case Xbug_2_w:
cave[x][y] = Yspring_sB;
+ next[x][y] = Xblank;
cave[x][y+1] = Ybug_spring;
- Lboom_bug(x, y+1);
+ next[x][y+1] = Zbug;
+ Lboom_bug_old(x, y+1);
score += lev.bug_score;
return;
case Xtank_2_s:
case Xtank_2_w:
cave[x][y] = Yspring_sB;
+ next[x][y] = Xblank;
cave[x][y+1] = Ytank_spring;
- Lboom_tank(x, y+1);
+ next[x][y+1] = Ztank;
+ Lboom_tank_old(x, y+1);
score += lev.tank_score;
return;
case Xbomb:
case Xbomb_pause:
+ cave[x][y] = Xspring;
+ next[x][y] = Xspring;
cave[x][y+1] = Ybomb_blank;
- Lboom_tank(x, y+1);
+ next[x][y+1] = Ztank;
+ Lboom_tank_old(x, y+1);
return;
default:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Ztank:
case Zeater:
case Zdynamite:
+ case Zboom:
+ case Xchain:
case Xboom_bug:
case Xboom_tank:
case Xboom_android:
case Xbug_2_s:
case Xbug_2_w:
cave[x][y] = Xboom_bug;
+ Lboom_bug_new(x, y, TRUE);
return;
case Xbomb:
case Xbomb_pause:
case Xbomb_fall:
cave[x][y] = Xboom_tank;
+ Lboom_tank_new(x, y, TRUE);
return;
default:
switch (cave[x][y])
{
case Zbug:
+ Lboom_bug_new(x, y, FALSE);
Lboom_nine(x, y, FALSE);
break;
case Ztank:
+ Lboom_tank_new(x, y, FALSE);
Lboom_nine(x, y, FALSE);
break;
case Zeater:
+ Lboom_eater_new(x, y, FALSE);
Lboom_nine(x, y, FALSE);
break;
case Zdynamite:
Lboom_nine(x, y, TRUE);
break;
+
+ case Zboom:
+ Lboom_nine(x, y, FALSE);
+ break;
}
}
Lboom_1(x, y);
}
+static void Lchain(int x, int y)
+{
+ next[x][y] = Zboom;
+}
+
static void handle_tile(int x, int y)
{
switch (cave[x][y])
case Xpause: Lpause(x, y); break;
+ case Xchain: Lchain(x, y); break;
case Xboom_bug: Lboom_bug(x, y); break;
case Xboom_tank: Lboom_tank(x, y); break;
case Xboom_android: Lboom_android(x, y); break;