X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Flogic.c;h=19930d24eba7d12cf920d40f787907ebca1fd2be;hb=4b9cc1bf8622907234c4f0cb6c5a7e060a045404;hp=a465bbe3354dc7e83a9be5f646affe3b4240258e;hpb=2851c280138444b53cf088e4e4f3e7ef8787022c;p=rocksndiamonds.git diff --git a/src/game_em/logic.c b/src/game_em/logic.c index a465bbe3..19930d24 100644 --- a/src/game_em/logic.c +++ b/src/game_em/logic.c @@ -71,7 +71,7 @@ static const byte is_fake_acid[TILE_MAX] = 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, @@ -251,6 +251,7 @@ static boolean player_killed(struct PLAYER *ply) switch (cave[x][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -262,7 +263,6 @@ static boolean player_killed(struct PLAYER *ply) case Xfake_acid_6: case Xfake_acid_7: case Xfake_acid_8: - case Zplayer: case Xdynamite_1: case Xdynamite_2: case Xdynamite_3: @@ -2259,6 +2259,7 @@ static void Leater_n(int x, int y) switch (cave[x][y-1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2272,7 +2273,6 @@ static void Leater_n(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Yeater_nB; next[x][y] = Xblank; cave[x][y-1] = Yeater_n; @@ -2339,6 +2339,7 @@ static void Leater_e(int x, int y) switch (cave[x+1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2352,7 +2353,6 @@ static void Leater_e(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Yeater_eB; next[x][y] = Xblank; cave[x+1][y] = Yeater_e; @@ -2419,6 +2419,7 @@ static void Leater_s(int x, int y) switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2432,7 +2433,6 @@ static void Leater_s(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Yeater_sB; next[x][y] = Xblank; cave[x][y+1] = Yeater_s; @@ -2499,6 +2499,7 @@ static void Leater_w(int x, int y) switch (cave[x-1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2512,7 +2513,6 @@ static void Leater_w(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Yeater_wB; next[x][y] = Xblank; cave[x-1][y] = Yeater_w; @@ -2563,6 +2563,7 @@ static void Lalien(int x, int y) { switch (cave[x][y-1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2576,7 +2577,6 @@ static void Lalien(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Yalien_nB; next[x][y] = Xblank; cave[x][y-1] = Yalien_n; @@ -2606,6 +2606,7 @@ static void Lalien(int x, int y) { switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2619,7 +2620,6 @@ static void Lalien(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Yalien_sB; next[x][y] = Xblank; cave[x][y+1] = Yalien_s; @@ -2652,6 +2652,7 @@ static void Lalien(int x, int y) { switch (cave[x+1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2665,7 +2666,6 @@ static void Lalien(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Yalien_eB; next[x][y] = Xblank; cave[x+1][y] = Yalien_e; @@ -2695,6 +2695,7 @@ static void Lalien(int x, int y) { switch (cave[x-1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2708,7 +2709,6 @@ static void Lalien(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Yalien_wB; next[x][y] = Xblank; cave[x-1][y] = Yalien_w; @@ -2746,6 +2746,7 @@ static void Lbug_n(int x, int y) { switch (cave[x][y-1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2759,7 +2760,6 @@ static void Lbug_n(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Ybug_nB; next[x][y] = Xblank; cave[x][y-1] = Ybug_n; @@ -2806,6 +2806,7 @@ static void Lbug_1_n(int x, int y) switch (cave[x+1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2827,7 +2828,6 @@ static void Lbug_1_n(int x, int y) case Xacid_6: case Xacid_7: case Xacid_8: - case Zplayer: cave[x][y] = Ybug_n_e; next[x][y] = Xbug_2_e; play_element_sound(x, y, SOUND_bug, Xbug_1_n); @@ -2858,6 +2858,7 @@ static void Lbug_e(int x, int y) { switch (cave[x+1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2871,7 +2872,6 @@ static void Lbug_e(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Ybug_eB; next[x][y] = Xblank; cave[x+1][y] = Ybug_e; @@ -2918,6 +2918,7 @@ static void Lbug_1_e(int x, int y) switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2939,7 +2940,6 @@ static void Lbug_1_e(int x, int y) case Xacid_6: case Xacid_7: case Xacid_8: - case Zplayer: cave[x][y] = Ybug_e_s; next[x][y] = Xbug_2_s; play_element_sound(x, y, SOUND_bug, Xbug_1_e); @@ -2970,6 +2970,7 @@ static void Lbug_s(int x, int y) { switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -2983,7 +2984,6 @@ static void Lbug_s(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Ybug_sB; next[x][y] = Xblank; cave[x][y+1] = Ybug_s; @@ -3030,6 +3030,7 @@ static void Lbug_1_s(int x, int y) switch (cave[x-1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3051,7 +3052,6 @@ static void Lbug_1_s(int x, int y) case Xacid_6: case Xacid_7: case Xacid_8: - case Zplayer: cave[x][y] = Ybug_s_w; next[x][y] = Xbug_2_w; play_element_sound(x, y, SOUND_bug, Xbug_1_s); @@ -3082,6 +3082,7 @@ static void Lbug_w(int x, int y) { switch (cave[x-1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3095,7 +3096,6 @@ static void Lbug_w(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Ybug_wB; next[x][y] = Xblank; cave[x-1][y] = Ybug_w; @@ -3142,6 +3142,7 @@ static void Lbug_1_w(int x, int y) switch (cave[x][y-1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3163,7 +3164,6 @@ static void Lbug_1_w(int x, int y) case Xacid_6: case Xacid_7: case Xacid_8: - case Zplayer: cave[x][y] = Ybug_w_n; next[x][y] = Xbug_2_n; play_element_sound(x, y, SOUND_bug, Xbug_1_w); @@ -3194,6 +3194,7 @@ static void Ltank_n(int x, int y) { switch (cave[x][y-1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3207,7 +3208,6 @@ static void Ltank_n(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Ytank_nB; next[x][y] = Xblank; cave[x][y-1] = Ytank_n; @@ -3254,6 +3254,7 @@ static void Ltank_1_n(int x, int y) switch (cave[x-1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3275,7 +3276,6 @@ static void Ltank_1_n(int x, int y) case Xacid_6: case Xacid_7: case Xacid_8: - case Zplayer: cave[x][y] = Ytank_n_w; next[x][y] = Xtank_2_w; play_element_sound(x, y, SOUND_tank, Xtank_1_n); @@ -3306,6 +3306,7 @@ static void Ltank_e(int x, int y) { switch (cave[x+1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3319,7 +3320,6 @@ static void Ltank_e(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Ytank_eB; next[x][y] = Xblank; cave[x+1][y] = Ytank_e; @@ -3366,6 +3366,7 @@ static void Ltank_1_e(int x, int y) switch (cave[x][y-1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3387,7 +3388,6 @@ static void Ltank_1_e(int x, int y) case Xacid_6: case Xacid_7: case Xacid_8: - case Zplayer: cave[x][y] = Ytank_e_n; next[x][y] = Xtank_2_n; play_element_sound(x, y, SOUND_tank, Xtank_1_e); @@ -3418,6 +3418,7 @@ static void Ltank_s(int x, int y) { switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3431,7 +3432,6 @@ static void Ltank_s(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Ytank_sB; next[x][y] = Xblank; cave[x][y+1] = Ytank_s; @@ -3478,6 +3478,7 @@ static void Ltank_1_s(int x, int y) switch (cave[x+1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3499,7 +3500,6 @@ static void Ltank_1_s(int x, int y) case Xacid_6: case Xacid_7: case Xacid_8: - case Zplayer: cave[x][y] = Ytank_s_e; next[x][y] = Xtank_2_e; play_element_sound(x, y, SOUND_tank, Xtank_1_s); @@ -3530,6 +3530,7 @@ static void Ltank_w(int x, int y) { switch (cave[x-1][y]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3543,7 +3544,6 @@ static void Ltank_w(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Ytank_wB; next[x][y] = Xblank; cave[x-1][y] = Ytank_w; @@ -3590,6 +3590,7 @@ static void Ltank_1_w(int x, int y) switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3611,7 +3612,6 @@ static void Ltank_1_w(int x, int y) case Xacid_6: case Xacid_7: case Xacid_8: - case Zplayer: cave[x][y] = Ytank_w_s; next[x][y] = Xtank_2_s; play_element_sound(x, y, SOUND_tank, Xtank_1_w); @@ -3676,10 +3676,6 @@ static void Lemerald(int x, int y) play_element_sound(x, y, SOUND_acid, Xacid_1); return; - case Xspring: - case Xspring_pause: - case Xspring_e: - case Xspring_w: case Xandroid: case Xandroid_1_n: case Xandroid_2_n: @@ -3689,24 +3685,20 @@ static void Lemerald(int x, int y) case Xandroid_2_s: case Xandroid_1_w: case Xandroid_2_w: - case Xstone: - case Xstone_pause: case Xemerald: case Xemerald_pause: case Xdiamond: case Xdiamond_pause: + case Xstone: + case Xstone_pause: case Xbomb: case Xbomb_pause: - case Xballoon: - case Xacid_ne: - case Xacid_nw: - case Xball_1: - case Xball_2: case Xnut: case Xnut_pause: - case Xslide_ns: - case Xslide_ew: - case Xwonderwall: + case Xspring: + case Xspring_pause: + case Xspring_e: + case Xspring_w: case Xkey_1: case Xkey_2: case Xkey_3: @@ -3715,12 +3707,16 @@ static void Lemerald(int x, int y) case Xkey_6: case Xkey_7: case Xkey_8: - case Xbumper: + case Xballoon: + case Xball_1: + case Xball_2: + case Xwonderwall: case Xswitch: - case Xsteel_1: - case Xsteel_2: - case Xsteel_3: - case Xsteel_4: + case Xbumper: + case Xacid_ne: + case Xacid_nw: + case Xslide_ns: + case Xslide_ew: case Xwall_1: case Xwall_2: case Xwall_3: @@ -3729,6 +3725,10 @@ static void Lemerald(int x, int y) case Xroundwall_2: case Xroundwall_3: case Xroundwall_4: + case Xsteel_1: + case Xsteel_2: + case Xsteel_3: + case Xsteel_4: if (RANDOM(2)) { if (is_blank[cave[x+1][y]] && is_blank_or_acid[cave[x+1][y+1]]) @@ -3830,6 +3830,7 @@ static void Lemerald_fall(int x, int y) { switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -3841,7 +3842,6 @@ static void Lemerald_fall(int x, int y) case Xfake_acid_6: case Xfake_acid_7: case Xfake_acid_8: - case Zplayer: cave[x][y] = Yemerald_sB; next[x][y] = Xblank; cave[x][y+1] = Yemerald_s; @@ -3870,13 +3870,12 @@ static void Lemerald_fall(int x, int y) { lev.wonderwall_state = 1; cave[x][y] = Yemerald_sB; + next[x][y] = Xblank; if (is_blank[cave[x][y+2]]) { cave[x][y+2] = Ydiamond_s; next[x][y+2] = Xdiamond_fall; } - - next[x][y] = Xblank; play_element_sound(x, y, SOUND_wonderfall, Xwonderwall); return; } @@ -3927,10 +3926,6 @@ static void Ldiamond(int x, int y) play_element_sound(x, y, SOUND_acid, Xacid_1); return; - case Xspring: - case Xspring_pause: - case Xspring_e: - case Xspring_w: case Xandroid: case Xandroid_1_n: case Xandroid_2_n: @@ -3940,24 +3935,20 @@ static void Ldiamond(int x, int y) case Xandroid_2_s: case Xandroid_1_w: case Xandroid_2_w: - case Xstone: - case Xstone_pause: case Xemerald: case Xemerald_pause: case Xdiamond: case Xdiamond_pause: + case Xstone: + case Xstone_pause: case Xbomb: case Xbomb_pause: - case Xballoon: - case Xacid_ne: - case Xacid_nw: - case Xball_1: - case Xball_2: case Xnut: case Xnut_pause: - case Xslide_ns: - case Xslide_ew: - case Xwonderwall: + case Xspring: + case Xspring_pause: + case Xspring_e: + case Xspring_w: case Xkey_1: case Xkey_2: case Xkey_3: @@ -3966,12 +3957,16 @@ static void Ldiamond(int x, int y) case Xkey_6: case Xkey_7: case Xkey_8: - case Xbumper: + case Xballoon: + case Xball_1: + case Xball_2: + case Xwonderwall: case Xswitch: - case Xsteel_1: - case Xsteel_2: - case Xsteel_3: - case Xsteel_4: + case Xbumper: + case Xacid_ne: + case Xacid_nw: + case Xslide_ns: + case Xslide_ew: case Xwall_1: case Xwall_2: case Xwall_3: @@ -3980,6 +3975,10 @@ static void Ldiamond(int x, int y) case Xroundwall_2: case Xroundwall_3: case Xroundwall_4: + case Xsteel_1: + case Xsteel_2: + case Xsteel_3: + case Xsteel_4: if (RANDOM(2)) { if (is_blank[cave[x+1][y]] && is_blank_or_acid[cave[x+1][y+1]]) @@ -4081,6 +4080,7 @@ static void Ldiamond_fall(int x, int y) { switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -4092,7 +4092,6 @@ static void Ldiamond_fall(int x, int y) case Xfake_acid_6: case Xfake_acid_7: case Xfake_acid_8: - case Zplayer: cave[x][y] = Ydiamond_sB; next[x][y] = Xblank; cave[x][y+1] = Ydiamond_s; @@ -4121,13 +4120,12 @@ static void Ldiamond_fall(int x, int y) { lev.wonderwall_state = 1; cave[x][y] = Ydiamond_sB; + next[x][y] = Xblank; if (is_blank[cave[x][y+2]]) { cave[x][y+2] = Ystone_s; next[x][y+2] = Xstone_fall; } - - next[x][y] = Xblank; play_element_sound(x, y, SOUND_wonderfall, Xwonderwall); return; } @@ -4187,10 +4185,6 @@ static void Lstone(int x, int y) next[x][y+1] = Xsand_sandstone_2; return; - case Xspring: - case Xspring_pause: - case Xspring_e: - case Xspring_w: case Xandroid: case Xandroid_1_n: case Xandroid_2_n: @@ -4200,23 +4194,20 @@ static void Lstone(int x, int y) case Xandroid_2_s: case Xandroid_1_w: case Xandroid_2_w: - case Xstone: - case Xstone_pause: case Xemerald: case Xemerald_pause: case Xdiamond: case Xdiamond_pause: + case Xstone: + case Xstone_pause: case Xbomb: case Xbomb_pause: - case Xballoon: - case Xacid_ne: - case Xacid_nw: - case Xball_1: - case Xball_2: case Xnut: case Xnut_pause: - case Xslide_ns: - case Xslide_ew: + case Xspring: + case Xspring_pause: + case Xspring_e: + case Xspring_w: case Xkey_1: case Xkey_2: case Xkey_3: @@ -4225,10 +4216,17 @@ static void Lstone(int x, int y) case Xkey_6: case Xkey_7: case Xkey_8: - case Xbumper: + case Xballoon: + case Xball_1: + case Xball_2: case Xswitch: + case Xbumper: + case Xacid_ne: + case Xacid_nw: case Xlenses: case Xmagnify: + case Xslide_ns: + case Xslide_ew: case Xroundwall_1: case Xroundwall_2: case Xroundwall_3: @@ -4325,6 +4323,7 @@ static void Lstone_fall(int x, int y) { switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -4336,7 +4335,6 @@ static void Lstone_fall(int x, int y) case Xfake_acid_6: case Xfake_acid_7: case Xfake_acid_8: - case Zplayer: cave[x][y] = Ystone_sB; next[x][y] = Xblank; cave[x][y+1] = Ystone_s; @@ -4360,13 +4358,22 @@ static void Lstone_fall(int x, int y) play_element_sound(x, y, SOUND_acid, Xacid_1); return; - case Xnut: - case Xnut_pause: - next[x][y] = Xstone; - cave[x][y+1] = Ynut_stone; - next[x][y+1] = Xemerald; - play_element_sound(x, y, SOUND_crack, Xnut); - score += lev.nut_score; + case Xeater_n: + case Xeater_e: + case Xeater_s: + case Xeater_w: + cave[x][y] = Ystone_sB; + cave[x][y+1] = Yeater_stone; + Lboom_eater(x, y+1, Xstone_fall); + score += lev.eater_score; + return; + + case Xalien: + case Xalien_pause: + cave[x][y] = Ystone_sB; + cave[x][y+1] = Yalien_stone; + Lboom_tank(x, y+1, Xstone_fall); + score += lev.alien_score; return; case Xbug_1_n: @@ -4397,82 +4404,11 @@ static void Lstone_fall(int x, int y) score += lev.tank_score; return; - case Xspring: - if (RANDOM(2)) - { - switch (cave[x+1][y+1]) - { - case Xblank: - case Xsplash_e: - case Xsplash_w: - case Xfake_acid_1: - case Xfake_acid_2: - case Xfake_acid_3: - case Xfake_acid_4: - case Xfake_acid_5: - case Xfake_acid_6: - case Xfake_acid_7: - case Xfake_acid_8: - case Xalien: - case Xalien_pause: - cave[x][y+1] = Xspring_e; - break; - - default: - cave[x][y+1] = Xspring_w; - break; - } - } - else - { - switch (cave[x-1][y+1]) - { - case Xblank: - case Xsplash_e: - case Xsplash_w: - case Xfake_acid_1: - case Xfake_acid_2: - case Xfake_acid_3: - case Xfake_acid_4: - case Xfake_acid_5: - case Xfake_acid_6: - case Xfake_acid_7: - case Xfake_acid_8: - case Xalien: - case Xalien_pause: - cave[x][y+1] = Xspring_w; - break; - default: - cave[x][y+1] = Xspring_e; - break; - } - } - - next[x][y] = Xstone; - return; - - case Xeater_n: - case Xeater_e: - case Xeater_s: - case Xeater_w: - cave[x][y] = Ystone_sB; - cave[x][y+1] = Yeater_stone; - Lboom_eater(x, y+1, Xstone_fall); - score += lev.eater_score; - return; - - case Xalien: - case Xalien_pause: - cave[x][y] = Ystone_sB; - cave[x][y+1] = Yalien_stone; - Lboom_tank(x, y+1, Xstone_fall); - score += lev.alien_score; - return; - - case Xdiamond: - case Xdiamond_pause: - switch (cave[x][y+2]) + case Xdiamond: + case Xdiamond_pause: + switch (cave[x][y+2]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -4484,7 +4420,25 @@ static void Lstone_fall(int x, int y) case Xfake_acid_6: case Xfake_acid_7: case Xfake_acid_8: - case Zplayer: + case Xplant: + case Yplant: + case Xacid_1: + case Xacid_2: + case Xacid_3: + case Xacid_4: + case Xacid_5: + case Xacid_6: + case Xacid_7: + case Xacid_8: + case Xandroid: + case Xandroid_1_n: + case Xandroid_2_n: + case Xandroid_1_e: + case Xandroid_2_e: + case Xandroid_1_s: + case Xandroid_2_s: + case Xandroid_1_w: + case Xandroid_2_w: case Xbug_1_n: case Xbug_1_e: case Xbug_1_s: @@ -4501,32 +4455,13 @@ static void Lstone_fall(int x, int y) case Xtank_2_e: case Xtank_2_s: case Xtank_2_w: - case Xspring_fall: - case Xandroid: - case Xandroid_1_n: - case Xandroid_2_n: - case Xandroid_1_e: - case Xandroid_2_e: - case Xandroid_1_s: - case Xandroid_2_s: - case Xandroid_1_w: - case Xandroid_2_w: - case Xstone_fall: case Xemerald_fall: case Xdiamond_fall: + case Xstone_fall: case Xbomb_fall: - case Xacid_s: - case Xacid_1: - case Xacid_2: - case Xacid_3: - case Xacid_4: - case Xacid_5: - case Xacid_6: - case Xacid_7: - case Xacid_8: case Xnut_fall: - case Xplant: - case Yplant: + case Xspring_fall: + case Xacid_s: next[x][y] = Xstone; play_element_sound(x, y, SOUND_stone, Xstone); return; @@ -4545,19 +4480,80 @@ static void Lstone_fall(int x, int y) Lboom_tank(x, y+1, Xstone_fall); return; + case Xnut: + case Xnut_pause: + next[x][y] = Xstone; + cave[x][y+1] = Ynut_stone; + next[x][y+1] = Xemerald; + play_element_sound(x, y, SOUND_crack, Xnut); + score += lev.nut_score; + return; + + case Xspring: + if (RANDOM(2)) + { + switch (cave[x+1][y+1]) + { + case Xblank: + case Xsplash_e: + case Xsplash_w: + case Xfake_acid_1: + case Xfake_acid_2: + case Xfake_acid_3: + case Xfake_acid_4: + case Xfake_acid_5: + case Xfake_acid_6: + case Xfake_acid_7: + case Xfake_acid_8: + case Xalien: + case Xalien_pause: + cave[x][y+1] = Xspring_e; + break; + + default: + cave[x][y+1] = Xspring_w; + break; + } + } + else + { + switch (cave[x-1][y+1]) + { + case Xblank: + case Xsplash_e: + case Xsplash_w: + case Xfake_acid_1: + case Xfake_acid_2: + case Xfake_acid_3: + case Xfake_acid_4: + case Xfake_acid_5: + case Xfake_acid_6: + case Xfake_acid_7: + case Xfake_acid_8: + case Xalien: + case Xalien_pause: + cave[x][y+1] = Xspring_w; + break; + default: + cave[x][y+1] = Xspring_e; + break; + } + } + + next[x][y] = Xstone; + return; + case Xwonderwall: if (lev.wonderwall_time) { lev.wonderwall_state = 1; cave[x][y] = Ystone_sB; - + next[x][y] = Xblank; if (is_blank[cave[x][y+2]]) { cave[x][y+2] = Yemerald_s; next[x][y+2] = Xemerald_fall; } - - next[x][y] = Xblank; play_element_sound(x, y, SOUND_wonderfall, Xwonderwall); return; } @@ -4608,10 +4604,6 @@ static void Lbomb(int x, int y) play_element_sound(x, y, SOUND_acid, Xacid_1); return; - case Xspring: - case Xspring_pause: - case Xspring_e: - case Xspring_w: case Xandroid: case Xandroid_1_n: case Xandroid_2_n: @@ -4621,23 +4613,20 @@ static void Lbomb(int x, int y) case Xandroid_2_s: case Xandroid_1_w: case Xandroid_2_w: - case Xstone: - case Xstone_pause: case Xemerald: case Xemerald_pause: case Xdiamond: case Xdiamond_pause: + case Xstone: + case Xstone_pause: case Xbomb: case Xbomb_pause: - case Xballoon: - case Xacid_ne: - case Xacid_nw: - case Xball_1: - case Xball_2: case Xnut: case Xnut_pause: - case Xslide_ns: - case Xslide_ew: + case Xspring: + case Xspring_pause: + case Xspring_e: + case Xspring_w: case Xkey_1: case Xkey_2: case Xkey_3: @@ -4646,8 +4635,15 @@ static void Lbomb(int x, int y) case Xkey_6: case Xkey_7: case Xkey_8: - case Xbumper: + case Xballoon: + case Xball_1: + case Xball_2: case Xswitch: + case Xbumper: + case Xacid_ne: + case Xacid_nw: + case Xslide_ns: + case Xslide_ew: case Xroundwall_1: case Xroundwall_2: case Xroundwall_3: @@ -4823,10 +4819,6 @@ static void Lnut(int x, int y) play_element_sound(x, y, SOUND_acid, Xacid_1); return; - case Xspring: - case Xspring_pause: - case Xspring_e: - case Xspring_w: case Xandroid: case Xandroid_1_n: case Xandroid_2_n: @@ -4836,23 +4828,20 @@ static void Lnut(int x, int y) case Xandroid_2_s: case Xandroid_1_w: case Xandroid_2_w: - case Xstone: - case Xstone_pause: case Xemerald: case Xemerald_pause: case Xdiamond: case Xdiamond_pause: + case Xstone: + case Xstone_pause: case Xbomb: case Xbomb_pause: - case Xballoon: - case Xacid_ne: - case Xacid_nw: - case Xball_1: - case Xball_2: case Xnut: case Xnut_pause: - case Xslide_ns: - case Xslide_ew: + case Xspring: + case Xspring_pause: + case Xspring_e: + case Xspring_w: case Xkey_1: case Xkey_2: case Xkey_3: @@ -4861,8 +4850,15 @@ static void Lnut(int x, int y) case Xkey_6: case Xkey_7: case Xkey_8: - case Xbumper: + case Xballoon: + case Xball_1: + case Xball_2: case Xswitch: + case Xbumper: + case Xacid_ne: + case Xacid_nw: + case Xslide_ns: + case Xslide_ew: case Xroundwall_1: case Xroundwall_2: case Xroundwall_3: @@ -4959,6 +4955,7 @@ static void Lnut_fall(int x, int y) { switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -4970,7 +4967,6 @@ static void Lnut_fall(int x, int y) case Xfake_acid_6: case Xfake_acid_7: case Xfake_acid_8: - case Zplayer: cave[x][y] = Ynut_sB; next[x][y] = Xblank; cave[x][y+1] = Ynut_s; @@ -5042,10 +5038,6 @@ static void Lspring(int x, int y) play_element_sound(x, y, SOUND_acid, Xacid_1); return; - case Xspring: - case Xspring_pause: - case Xspring_e: - case Xspring_w: case Xandroid: case Xandroid_1_n: case Xandroid_2_n: @@ -5055,23 +5047,20 @@ static void Lspring(int x, int y) case Xandroid_2_s: case Xandroid_1_w: case Xandroid_2_w: - case Xstone: - case Xstone_pause: case Xemerald: case Xemerald_pause: case Xdiamond: case Xdiamond_pause: + case Xstone: + case Xstone_pause: case Xbomb: case Xbomb_pause: - case Xballoon: - case Xacid_ne: - case Xacid_nw: - case Xball_1: - case Xball_2: case Xnut: case Xnut_pause: - case Xslide_ns: - case Xslide_ew: + case Xspring: + case Xspring_pause: + case Xspring_e: + case Xspring_w: case Xkey_1: case Xkey_2: case Xkey_3: @@ -5080,8 +5069,15 @@ static void Lspring(int x, int y) case Xkey_6: case Xkey_7: case Xkey_8: - case Xbumper: + case Xballoon: + case Xball_1: + case Xball_2: case Xswitch: + case Xbumper: + case Xacid_ne: + case Xacid_nw: + case Xslide_ns: + case Xslide_ew: case Xroundwall_1: case Xroundwall_2: case Xroundwall_3: @@ -5094,7 +5090,7 @@ static void Lspring(int x, int y) next[x][y] = Xblank; cave[x+1][y] = Yspring_e; if (cave[x][y+1] == Xbumper) - cave[x][y+1] = XbumperB; + cave[x][y+1] = Ybumper; #ifdef SPRING_ROLL next[x+1][y] = Xspring_e; @@ -5110,7 +5106,7 @@ static void Lspring(int x, int y) next[x][y] = Xblank; cave[x-1][y] = Yspring_w; if (cave[x][y+1] == Xbumper) - cave[x][y+1] = XbumperB; + cave[x][y+1] = Ybumper; #ifdef SPRING_ROLL next[x-1][y] = Xspring_w; @@ -5128,7 +5124,7 @@ static void Lspring(int x, int y) next[x][y] = Xblank; cave[x-1][y] = Yspring_w; if (cave[x][y+1] == Xbumper) - cave[x][y+1] = XbumperB; + cave[x][y+1] = Ybumper; #ifdef SPRING_ROLL next[x-1][y] = Xspring_w; @@ -5144,7 +5140,7 @@ static void Lspring(int x, int y) next[x][y] = Xblank; cave[x+1][y] = Yspring_e; if (cave[x][y+1] == Xbumper) - cave[x][y+1] = XbumperB; + cave[x][y+1] = Ybumper; #ifdef SPRING_ROLL next[x+1][y] = Xspring_e; @@ -5241,7 +5237,7 @@ static void Lspring_e(int x, int y) return; case Xbumper: - cave[x][y+1] = XbumperB; + cave[x][y+1] = Ybumper; } switch (cave[x+1][y]) @@ -5299,8 +5295,8 @@ static void Lspring_e(int x, int 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; @@ -5352,7 +5348,7 @@ static void Lspring_w(int x, int y) return; case Xbumper: - cave[x][y+1] = XbumperB; + cave[x][y+1] = Ybumper; } switch (cave[x-1][y]) @@ -5410,8 +5406,8 @@ static void Lspring_w(int x, int 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; @@ -5428,6 +5424,7 @@ static void Lspring_fall(int x, int y) { switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -5439,7 +5436,6 @@ static void Lspring_fall(int x, int y) case Xfake_acid_6: case Xfake_acid_7: case Xfake_acid_8: - case Zplayer: cave[x][y] = Yspring_sB; next[x][y] = Xblank; cave[x][y+1] = Yspring_s; @@ -5463,10 +5459,22 @@ static void Lspring_fall(int x, int y) play_element_sound(x, y, SOUND_acid, Xacid_1); return; - case Xbomb: - case Xbomb_pause: - cave[x][y+1] = Ybomb_blank; + case Xeater_n: + case Xeater_e: + case Xeater_s: + case Xeater_w: + cave[x][y] = Yspring_sB; + cave[x][y+1] = Yeater_spring; + Lboom_eater(x, y+1, Xspring_fall); + score += lev.eater_score; + return; + + case Xalien: + case Xalien_pause: + cave[x][y] = Yspring_sB; + cave[x][y+1] = Yalien_spring; Lboom_tank(x, y+1, Xspring_fall); + score += lev.alien_score; return; case Xbug_1_n: @@ -5497,22 +5505,10 @@ static void Lspring_fall(int x, int y) score += lev.tank_score; return; - case Xeater_n: - case Xeater_e: - case Xeater_s: - case Xeater_w: - cave[x][y] = Yspring_sB; - cave[x][y+1] = Yeater_spring; - Lboom_eater(x, y+1, Xspring_fall); - score += lev.eater_score; - return; - - case Xalien: - case Xalien_pause: - cave[x][y] = Yspring_sB; - cave[x][y+1] = Yalien_spring; + case Xbomb: + case Xbomb_pause: + cave[x][y+1] = Ybomb_blank; Lboom_tank(x, y+1, Xspring_fall); - score += lev.alien_score; return; default: @@ -5527,6 +5523,7 @@ static void Lpush_emerald_e(int x, int y) { switch (cave[x+1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5534,7 +5531,6 @@ static void Lpush_emerald_e(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xemerald; next[x][y] = Xemerald; return; @@ -5552,6 +5548,7 @@ static void Lpush_emerald_w(int x, int y) { switch (cave[x-1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5559,7 +5556,6 @@ static void Lpush_emerald_w(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xemerald; next[x][y] = Xemerald; return; @@ -5577,6 +5573,7 @@ static void Lpush_diamond_e(int x, int y) { switch (cave[x+1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5584,7 +5581,6 @@ static void Lpush_diamond_e(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xdiamond; next[x][y] = Xdiamond; return; @@ -5602,6 +5598,7 @@ static void Lpush_diamond_w(int x, int y) { switch (cave[x-1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5609,7 +5606,6 @@ static void Lpush_diamond_w(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xdiamond; next[x][y] = Xdiamond; return; @@ -5627,6 +5623,7 @@ static void Lpush_stone_e(int x, int y) { switch (cave[x+1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5634,7 +5631,6 @@ static void Lpush_stone_e(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xstone; next[x][y] = Xstone; return; @@ -5652,6 +5648,7 @@ static void Lpush_stone_w(int x, int y) { switch (cave[x-1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5659,7 +5656,6 @@ static void Lpush_stone_w(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xstone; next[x][y] = Xstone; return; @@ -5677,6 +5673,7 @@ static void Lpush_bomb_e(int x, int y) { switch (cave[x+1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5684,7 +5681,6 @@ static void Lpush_bomb_e(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xbomb; next[x][y] = Xbomb; return; @@ -5702,6 +5698,7 @@ static void Lpush_bomb_w(int x, int y) { switch (cave[x-1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5709,7 +5706,6 @@ static void Lpush_bomb_w(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xbomb; next[x][y] = Xbomb; return; @@ -5727,6 +5723,7 @@ static void Lpush_nut_e(int x, int y) { switch (cave[x+1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5734,7 +5731,6 @@ static void Lpush_nut_e(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xnut; next[x][y] = Xnut; return; @@ -5752,6 +5748,7 @@ static void Lpush_nut_w(int x, int y) { switch (cave[x-1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5759,7 +5756,6 @@ static void Lpush_nut_w(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xnut; next[x][y] = Xnut; return; @@ -5777,6 +5773,7 @@ static void Lpush_spring_e(int x, int y) { switch (cave[x+1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5784,7 +5781,6 @@ static void Lpush_spring_e(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xspring; next[x][y] = Xspring; return; @@ -5802,6 +5798,7 @@ static void Lpush_spring_w(int x, int y) { switch (cave[x-1][y]) { + case Zplayer: case Zborder: case Znormal: case Zdynamite: @@ -5809,7 +5806,6 @@ static void Lpush_spring_w(int x, int y) case Xboom_bomb: case Xboom_android: case Xboom_1: - case Zplayer: cave[x][y] = Xspring; next[x][y] = Xspring; return; @@ -6242,6 +6238,7 @@ static void Ldrip_fall(int x, int y) switch (cave[x][y+1]) { + case Zplayer: case Xblank: case Xsplash_e: case Xsplash_w: @@ -6255,7 +6252,6 @@ static void Ldrip_fall(int x, int y) case Xfake_acid_8: case Xplant: case Yplant: - case Zplayer: cave[x][y] = Ydrip_1_sB; next[x][y] = Xdrip_stretchB; cave[x][y+1] = Ydrip_1_s; @@ -6315,7 +6311,7 @@ static void Lwonderwall(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); } } @@ -6323,31 +6319,31 @@ static void Lwonderwall(int x, int y) 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) @@ -6572,11 +6568,11 @@ static void Lamoeba(int x, int y) case Xfake_acid_6: case Xfake_acid_7: case Xfake_acid_8: + case Xplant: + case Yplant: case Xgrass: case Xdirt: case Xsand: - case Xplant: - case Yplant: if (is_amoeba[cave[x][y-1]] || is_amoeba[cave[x+1][y]] || is_amoeba[cave[x][y+1]] || @@ -6603,11 +6599,6 @@ static void Lboom_one(int x, int y, boolean by_dynamite) case Xacid_6: case Xacid_7: case Xacid_8: - case Xacid_ne: - case Xacid_nw: - case Xacid_s: - case Xacid_se: - case Xacid_sw: case Xplant: case Yplant: case Xdoor_1: @@ -6626,6 +6617,11 @@ static void Lboom_one(int x, int y, boolean by_dynamite) case Xfake_door_6: case Xfake_door_7: case Xfake_door_8: + case Xacid_ne: + case Xacid_nw: + case Xacid_s: + case Xacid_se: + case Xacid_sw: case Xsteel_1: case Xsteel_2: case Xsteel_3: