From 79dff95b844bfab7bf35b0e4359e352df9b62034 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sun, 10 Mar 2024 17:40:10 +0100 Subject: [PATCH] added support for line-shifting wrap-around in BD engine to level editor --- src/editor.c | 12 +++++++++++- src/files.c | 10 ++++++++++ src/main.h | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/editor.c b/src/editor.c index 6d8bd174..f0c1cc23 100644 --- a/src/editor.c +++ b/src/editor.c @@ -664,6 +664,7 @@ enum GADGET_ID_RANDOM_RESTRICTED, GADGET_ID_BD_INTERMISSION, GADGET_ID_BD_PAL_TIMING, + GADGET_ID_BD_LINE_SHIFTING_BORDERS, GADGET_ID_STICK_ELEMENT, GADGET_ID_EM_SLIPPERY_GEMS, GADGET_ID_EM_EXPLODES_BY_FIRE, @@ -991,6 +992,7 @@ enum ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2, ED_CHECKBUTTON_ID_BD_INTERMISSION, ED_CHECKBUTTON_ID_BD_PAL_TIMING, + ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS, ED_CHECKBUTTON_ID_STICK_ELEMENT, ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS, ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE, @@ -1072,7 +1074,7 @@ enum #define ED_CHECKBUTTON_ID_EDITOR_LAST ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2 #define ED_CHECKBUTTON_ID_ENGINE_FIRST ED_CHECKBUTTON_ID_BD_INTERMISSION -#define ED_CHECKBUTTON_ID_ENGINE_LAST ED_CHECKBUTTON_ID_BD_PAL_TIMING +#define ED_CHECKBUTTON_ID_ENGINE_LAST ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS #define ED_CHECKBUTTON_ID_CUSTOM1_FIRST ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC #define ED_CHECKBUTTON_ID_CUSTOM1_LAST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE @@ -3343,6 +3345,14 @@ static struct NULL, NULL, "PAL timing", "use slower timer (like PAL C64)" }, + { + ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5), + GADGET_ID_BD_LINE_SHIFTING_BORDERS, GADGET_ID_NONE, + &level.bd_line_shifting_borders, + NULL, NULL, + "line-shifting borders", "use line-shifting wrap-around" + }, // ---------- element settings: configure (various elements) ---------------- diff --git a/src/files.c b/src/files.c index 8044d338..e6e22816 100644 --- a/src/files.c +++ b/src/files.c @@ -315,6 +315,12 @@ static struct LevelFileConfigInfo chunk_config_INFO[] = &li.bd_hatching_delay_seconds, 2 }, + { + -1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(20), + &li.bd_line_shifting_borders, FALSE + }, + { -1, -1, -1, -1, @@ -3768,6 +3774,8 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level) cave->intermission = level->bd_intermission; cave->diagonal_movements = level->bd_diagonal_movements; + cave->lineshift = level->bd_line_shifting_borders; + strncpy(cave->name, level->name, sizeof(GdString)); cave->name[sizeof(GdString) - 1] = '\0'; @@ -3804,6 +3812,8 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level) level->bd_intermission = cave->intermission; level->bd_diagonal_movements = cave->diagonal_movements; + level->bd_line_shifting_borders = cave->lineshift; + char *cave_name = getStringPrint("%s / %d", cave->name, bd_level_nr + 1); strncpy(level->name, cave_name, MAX_LEVEL_NAME_LEN); diff --git a/src/main.h b/src/main.h index 90bd7ae0..fcdcaf26 100644 --- a/src/main.h +++ b/src/main.h @@ -3486,6 +3486,7 @@ struct LevelInfo int bd_hatching_delay_seconds; // BD hatching delay (in seconds) int bd_scheduling_type; // BD engine scheduling type boolean bd_pal_timing; // BD engine uses special PAL timing + boolean bd_line_shifting_borders; // BD engine uses line-shifting wrap-around boolean bd_intermission; // BD level is intermission boolean bd_diagonal_movements; // BD style diagonal movements boolean em_slippery_gems; // EM style "gems slip from wall" behaviour -- 2.34.1