From 7b34743564e27c65b4d9c1ef55c3b12f6cf8a94a Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Tue, 11 Apr 2023 16:19:34 +0200 Subject: [PATCH] added Deflektor style fixed mirror game elements to MM engine --- graphics/gfx_classic/RocksDF.png | Bin 16608 -> 18288 bytes src/conf_gfx.c | 65 +++++++++++++++++++++++++ src/editor.c | 22 ++++++++- src/game_mm/export.h | 3 ++ src/game_mm/mm_game.c | 4 +- src/game_mm/mm_main.h | 23 ++++++++- src/game_mm/mm_tools.c | 5 +- src/main.c | 80 +++++++++++++++++++++++++++++++ src/main.h | 25 +++++++++- src/tools.c | 8 ++++ 10 files changed, 229 insertions(+), 6 deletions(-) diff --git a/graphics/gfx_classic/RocksDF.png b/graphics/gfx_classic/RocksDF.png index 7eb105be566fcef0feb1eadfaeeba8a5eef29bb6..3d881babd8129d136d44cd45867a9f0713726203 100644 GIT binary patch delta 17579 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 diff --git a/src/conf_gfx.c b/src/conf_gfx.c index e2c7c350..67fc1807 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -5787,6 +5787,71 @@ struct ConfigInfo image_config[] = { "df_mine.active.delay", "6" }, { "df_mine.active.anim_mode", "pingpong" }, + { "df_mirror_fixed_1", "RocksDF.png" }, + { "df_mirror_fixed_1.xpos", "0" }, + { "df_mirror_fixed_1.ypos", "10" }, + { "df_mirror_fixed_1.frames", "1" }, + { "df_mirror_fixed_2", "RocksDF.png" }, + { "df_mirror_fixed_2.xpos", "1" }, + { "df_mirror_fixed_2.ypos", "10" }, + { "df_mirror_fixed_2.frames", "1" }, + { "df_mirror_fixed_3", "RocksDF.png" }, + { "df_mirror_fixed_3.xpos", "2" }, + { "df_mirror_fixed_3.ypos", "10" }, + { "df_mirror_fixed_3.frames", "1" }, + { "df_mirror_fixed_4", "RocksDF.png" }, + { "df_mirror_fixed_4.xpos", "3" }, + { "df_mirror_fixed_4.ypos", "10" }, + { "df_mirror_fixed_4.frames", "1" }, + { "df_mirror_fixed_5", "RocksDF.png" }, + { "df_mirror_fixed_5.xpos", "4" }, + { "df_mirror_fixed_5.ypos", "10" }, + { "df_mirror_fixed_5.frames", "1" }, + { "df_mirror_fixed_6", "RocksDF.png" }, + { "df_mirror_fixed_6.xpos", "5" }, + { "df_mirror_fixed_6.ypos", "10" }, + { "df_mirror_fixed_6.frames", "1" }, + { "df_mirror_fixed_7", "RocksDF.png" }, + { "df_mirror_fixed_7.xpos", "6" }, + { "df_mirror_fixed_7.ypos", "10" }, + { "df_mirror_fixed_7.frames", "1" }, + { "df_mirror_fixed_8", "RocksDF.png" }, + { "df_mirror_fixed_8.xpos", "7" }, + { "df_mirror_fixed_8.ypos", "10" }, + { "df_mirror_fixed_8.frames", "1" }, + { "df_mirror_fixed_9", "RocksDF.png" }, + { "df_mirror_fixed_9.xpos", "8" }, + { "df_mirror_fixed_9.ypos", "10" }, + { "df_mirror_fixed_9.frames", "1" }, + { "df_mirror_fixed_10", "RocksDF.png" }, + { "df_mirror_fixed_10.xpos", "9" }, + { "df_mirror_fixed_10.ypos", "10" }, + { "df_mirror_fixed_10.frames", "1" }, + { "df_mirror_fixed_11", "RocksDF.png" }, + { "df_mirror_fixed_11.xpos", "10" }, + { "df_mirror_fixed_11.ypos", "10" }, + { "df_mirror_fixed_11.frames", "1" }, + { "df_mirror_fixed_12", "RocksDF.png" }, + { "df_mirror_fixed_12.xpos", "11" }, + { "df_mirror_fixed_12.ypos", "10" }, + { "df_mirror_fixed_12.frames", "1" }, + { "df_mirror_fixed_13", "RocksDF.png" }, + { "df_mirror_fixed_13.xpos", "12" }, + { "df_mirror_fixed_13.ypos", "10" }, + { "df_mirror_fixed_13.frames", "1" }, + { "df_mirror_fixed_14", "RocksDF.png" }, + { "df_mirror_fixed_14.xpos", "13" }, + { "df_mirror_fixed_14.ypos", "10" }, + { "df_mirror_fixed_14.frames", "1" }, + { "df_mirror_fixed_15", "RocksDF.png" }, + { "df_mirror_fixed_15.xpos", "14" }, + { "df_mirror_fixed_15.ypos", "10" }, + { "df_mirror_fixed_15.frames", "1" }, + { "df_mirror_fixed_16", "RocksDF.png" }, + { "df_mirror_fixed_16.xpos", "15" }, + { "df_mirror_fixed_16.ypos", "10" }, + { "df_mirror_fixed_16.frames", "1" }, + // (these are only defined as elements to support ".PANEL" definitions) { "graphic_1", UNDEFINED_FILENAME }, { "graphic_2", UNDEFINED_FILENAME }, diff --git a/src/editor.c b/src/editor.c index fc122b24..d7aa2122 100644 --- a/src/editor.c +++ b/src/editor.c @@ -4697,8 +4697,8 @@ static int editor_el_deflektor[] = EL_DF_MIRROR_START, EL_DF_MIRROR_ROTATING_START, + EL_DF_MIRROR_FIXED_START, EL_DF_CELL, - EL_DF_MINE, EL_DF_FIBRE_OPTIC_RED_1, EL_DF_FIBRE_OPTIC_YELLOW_1, @@ -4713,7 +4713,7 @@ static int editor_el_deflektor[] = EL_DF_STEEL_WALL, EL_DF_WOODEN_WALL, EL_DF_REFRACTOR, - EL_EMPTY + EL_DF_MINE }; static int *editor_hl_deflektor_ptr = editor_hl_deflektor; static int *editor_el_deflektor_ptr = editor_el_deflektor; @@ -11918,6 +11918,24 @@ static void SetElementIntelliDraw(int x, int y, int dx, int dy, int new_element, EL_DF_MIRROR_ROTATING_3, EL_DF_MIRROR_ROTATING_2 }, + { + EL_DF_MIRROR_FIXED_1, + EL_DF_MIRROR_FIXED_16, + EL_DF_MIRROR_FIXED_15, + EL_DF_MIRROR_FIXED_14, + EL_DF_MIRROR_FIXED_13, + EL_DF_MIRROR_FIXED_12, + EL_DF_MIRROR_FIXED_11, + EL_DF_MIRROR_FIXED_10, + EL_DF_MIRROR_FIXED_9, + EL_DF_MIRROR_FIXED_8, + EL_DF_MIRROR_FIXED_7, + EL_DF_MIRROR_FIXED_6, + EL_DF_MIRROR_FIXED_5, + EL_DF_MIRROR_FIXED_4, + EL_DF_MIRROR_FIXED_3, + EL_DF_MIRROR_FIXED_2 + }, { -1, diff --git a/src/game_mm/export.h b/src/game_mm/export.h index 014f5deb..11ee7258 100644 --- a/src/game_mm/export.h +++ b/src/game_mm/export.h @@ -42,6 +42,9 @@ #define EL_MM_START_2_NATIVE 240 #define EL_MM_END_2_NATIVE 430 +#define EL_MM_START_3_NATIVE 431 +#define EL_MM_END_3_NATIVE 446 + #define EL_MM_RUNTIME_START_NATIVE 500 #define EL_MM_RUNTIME_END_NATIVE 504 diff --git a/src/game_mm/mm_game.c b/src/game_mm/mm_game.c index 87ee350c..be1bfad6 100644 --- a/src/game_mm/mm_game.c +++ b/src/game_mm/mm_game.c @@ -1692,6 +1692,7 @@ static boolean HitElement(int element, int hit_mask) IS_POLAR_CROSS(element) || IS_DF_MIRROR(element) || IS_DF_MIRROR_AUTO(element) || + IS_DF_MIRROR_FIXED(element) || element == EL_PRISM || element == EL_REFRACTOR) { @@ -1710,7 +1711,8 @@ static boolean HitElement(int element, int hit_mask) if (IS_MIRROR(element) || IS_MIRROR_FIXED(element) || IS_DF_MIRROR(element) || - IS_DF_MIRROR_AUTO(element)) + IS_DF_MIRROR_AUTO(element) || + IS_DF_MIRROR_FIXED(element)) laser.current_angle = get_mirrored_angle(laser.current_angle, get_element_angle(element)); diff --git a/src/game_mm/mm_main.h b/src/game_mm/mm_main.h index 40397e8a..96ff6f28 100644 --- a/src/game_mm/mm_main.h +++ b/src/game_mm/mm_main.h @@ -103,6 +103,8 @@ (e) <= EL_DF_MIRROR_END) #define IS_DF_MIRROR_AUTO(e) ((e) >= EL_DF_MIRROR_AUTO_START && \ (e) <= EL_DF_MIRROR_AUTO_END) +#define IS_DF_MIRROR_FIXED(e) ((e) >= EL_DF_MIRROR_FIXED_START && \ + (e) <= EL_DF_MIRROR_FIXED_END) #define IS_LASER(e) ((e) >= EL_LASER_START && \ (e) <= EL_LASER_END) #define IS_RECEIVER(e) ((e) >= EL_RECEIVER_START && \ @@ -585,7 +587,26 @@ extern int num_element_info; #define EL_DF_WALL_STEEL 429 #define EL_DF_WALL_WOOD 430 -#define EL_MM_END_2 430 +#define EL_DF_MIRROR_FIXED_START 431 +#define EL_DF_MIRROR_FIXED_00 (EL_DF_MIRROR_FIXED_START + 0) +#define EL_DF_MIRROR_FIXED_01 (EL_DF_MIRROR_FIXED_START + 1) +#define EL_DF_MIRROR_FIXED_02 (EL_DF_MIRROR_FIXED_START + 2) +#define EL_DF_MIRROR_FIXED_03 (EL_DF_MIRROR_FIXED_START + 3) +#define EL_DF_MIRROR_FIXED_04 (EL_DF_MIRROR_FIXED_START + 4) +#define EL_DF_MIRROR_FIXED_05 (EL_DF_MIRROR_FIXED_START + 5) +#define EL_DF_MIRROR_FIXED_06 (EL_DF_MIRROR_FIXED_START + 6) +#define EL_DF_MIRROR_FIXED_07 (EL_DF_MIRROR_FIXED_START + 7) +#define EL_DF_MIRROR_FIXED_08 (EL_DF_MIRROR_FIXED_START + 8) +#define EL_DF_MIRROR_FIXED_09 (EL_DF_MIRROR_FIXED_START + 9) +#define EL_DF_MIRROR_FIXED_10 (EL_DF_MIRROR_FIXED_START + 10) +#define EL_DF_MIRROR_FIXED_11 (EL_DF_MIRROR_FIXED_START + 11) +#define EL_DF_MIRROR_FIXED_12 (EL_DF_MIRROR_FIXED_START + 12) +#define EL_DF_MIRROR_FIXED_13 (EL_DF_MIRROR_FIXED_START + 13) +#define EL_DF_MIRROR_FIXED_14 (EL_DF_MIRROR_FIXED_START + 14) +#define EL_DF_MIRROR_FIXED_15 (EL_DF_MIRROR_FIXED_START + 15) +#define EL_DF_MIRROR_FIXED_END EL_DF_MIRROR_FIXED_15 + +#define EL_MM_END_2 446 #define EL_MM_END EL_MM_END_2 // "real" (and therefore drawable) runtime elements diff --git a/src/game_mm/mm_tools.c b/src/game_mm/mm_tools.c index 48c99912..6a2067a4 100644 --- a/src/game_mm/mm_tools.c +++ b/src/game_mm/mm_tools.c @@ -1147,6 +1147,8 @@ int get_base_element(int element) return EL_DF_MIRROR_START; else if (IS_DF_MIRROR_AUTO(element)) return EL_DF_MIRROR_AUTO_START; + else if (IS_DF_MIRROR_FIXED(element)) + return EL_DF_MIRROR_FIXED_START; else if (IS_PACMAN(element)) return EL_PACMAN_START; else if (IS_GRID_STEEL(element)) @@ -1190,7 +1192,8 @@ int get_num_elements(int element) IS_POLAR(element) || IS_BEAMER(element) || IS_DF_MIRROR(element) || - IS_DF_MIRROR_AUTO(element)) + IS_DF_MIRROR_AUTO(element) || + IS_DF_MIRROR_FIXED(element)) return 16; else if (IS_GRID_STEEL_FIXED(element) || IS_GRID_WOOD_FIXED(element) || diff --git a/src/main.c b/src/main.c index 95de1f87..1767aff4 100644 --- a/src/main.c +++ b/src/main.c @@ -6360,6 +6360,86 @@ struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] = "empty_space", "empty space 16" }, + { + "df_mirror_fixed_1", + "df_mirror_fixed", + "fixed mirror (DF style) (0\xb0)" + }, + { + "df_mirror_fixed_2", + "df_mirror_fixed", + "fixed mirror (DF style) (11.25\xb0)" + }, + { + "df_mirror_fixed_3", + "df_mirror_fixed", + "fixed mirror (DF style) (22.5\xb0)" + }, + { + "df_mirror_fixed_4", + "df_mirror_fixed", + "fixed mirror (DF style) (33.75\xb0)" + }, + { + "df_mirror_fixed_5", + "df_mirror_fixed", + "fixed mirror (DF style) (45\xb0)" + }, + { + "df_mirror_fixed_6", + "df_mirror_fixed", + "fixed mirror (DF style) (56.25\xb0)" + }, + { + "df_mirror_fixed_7", + "df_mirror_fixed", + "fixed mirror (DF style) (67.5\xb0)" + }, + { + "df_mirror_fixed_8", + "df_mirror_fixed", + "fixed mirror (DF style) (78.75\xb0)" + }, + { + "df_mirror_fixed_9", + "df_mirror_fixed", + "fixed mirror (DF style) (90\xb0)" + }, + { + "df_mirror_fixed_10", + "df_mirror_fixed", + "fixed mirror (DF style) (101.25\xb0)" + }, + { + "df_mirror_fixed_11", + "df_mirror_fixed", + "fixed mirror (DF style) (112.5\xb0)" + }, + { + "df_mirror_fixed_12", + "df_mirror_fixed", + "fixed mirror (DF style) (123.75\xb0)" + }, + { + "df_mirror_fixed_13", + "df_mirror_fixed", + "fixed mirror (DF style) (135\xb0)" + }, + { + "df_mirror_fixed_14", + "df_mirror_fixed", + "fixed mirror (DF style) (146.25\xb0)" + }, + { + "df_mirror_fixed_15", + "df_mirror_fixed", + "fixed mirror (DF style) (157.5\xb0)" + }, + { + "df_mirror_fixed_16", + "df_mirror_fixed", + "fixed mirror (DF style) (168.75\xb0)" + }, // -------------------------------------------------------------------------- // "real" (and therefore drawable) runtime elements diff --git a/src/main.h b/src/main.h index 643d62bb..32c87752 100644 --- a/src/main.h +++ b/src/main.h @@ -1947,7 +1947,30 @@ #define EL_EMPTY_SPACE_END 1232 // ---------- end of empty space elements section ----------------------------- -#define NUM_FILE_ELEMENTS 1233 +#define EL_MM_START_3 EL_DF_MIRROR_FIXED_START + +#define EL_DF_MIRROR_FIXED_START 1233 +#define EL_DF_MIRROR_FIXED_1 (EL_DF_MIRROR_FIXED_START + 0) +#define EL_DF_MIRROR_FIXED_2 (EL_DF_MIRROR_FIXED_START + 1) +#define EL_DF_MIRROR_FIXED_3 (EL_DF_MIRROR_FIXED_START + 2) +#define EL_DF_MIRROR_FIXED_4 (EL_DF_MIRROR_FIXED_START + 3) +#define EL_DF_MIRROR_FIXED_5 (EL_DF_MIRROR_FIXED_START + 4) +#define EL_DF_MIRROR_FIXED_6 (EL_DF_MIRROR_FIXED_START + 5) +#define EL_DF_MIRROR_FIXED_7 (EL_DF_MIRROR_FIXED_START + 6) +#define EL_DF_MIRROR_FIXED_8 (EL_DF_MIRROR_FIXED_START + 7) +#define EL_DF_MIRROR_FIXED_9 (EL_DF_MIRROR_FIXED_START + 8) +#define EL_DF_MIRROR_FIXED_10 (EL_DF_MIRROR_FIXED_START + 9) +#define EL_DF_MIRROR_FIXED_11 (EL_DF_MIRROR_FIXED_START + 10) +#define EL_DF_MIRROR_FIXED_12 (EL_DF_MIRROR_FIXED_START + 11) +#define EL_DF_MIRROR_FIXED_13 (EL_DF_MIRROR_FIXED_START + 12) +#define EL_DF_MIRROR_FIXED_14 (EL_DF_MIRROR_FIXED_START + 13) +#define EL_DF_MIRROR_FIXED_15 (EL_DF_MIRROR_FIXED_START + 14) +#define EL_DF_MIRROR_FIXED_16 (EL_DF_MIRROR_FIXED_START + 15) +#define EL_DF_MIRROR_FIXED_END EL_DF_MIRROR_FIXED_16 + +#define EL_MM_END_3 EL_DF_MIRROR_FIXED_END + +#define NUM_FILE_ELEMENTS 1249 // "real" (and therefore drawable) runtime elements diff --git a/src/tools.c b/src/tools.c index fde8811d..e321f18c 100644 --- a/src/tools.c +++ b/src/tools.c @@ -8228,6 +8228,10 @@ int map_element_RND_to_MM(int element_rnd) element_rnd <= EL_MM_END_2 ? EL_MM_START_2_NATIVE + element_rnd - EL_MM_START_2 : + element_rnd >= EL_MM_START_3 && + element_rnd <= EL_MM_END_3 ? + EL_MM_START_3_NATIVE + element_rnd - EL_MM_START_3 : + element_rnd >= EL_CHAR_START && element_rnd <= EL_CHAR_END ? EL_MM_CHAR_START_NATIVE + element_rnd - EL_CHAR_START : @@ -8253,6 +8257,10 @@ int map_element_MM_to_RND(int element_mm) element_mm <= EL_MM_END_2_NATIVE ? EL_MM_START_2 + element_mm - EL_MM_START_2_NATIVE : + element_mm >= EL_MM_START_3_NATIVE && + element_mm <= EL_MM_END_3_NATIVE ? + EL_MM_START_3 + element_mm - EL_MM_START_3_NATIVE : + element_mm >= EL_MM_CHAR_START_NATIVE && element_mm <= EL_MM_CHAR_END_NATIVE ? EL_CHAR_START + element_mm - EL_MM_CHAR_START_NATIVE : -- 2.34.1