From ed0e6a47f8df7c4342c54f2bb3c501c8458ba90d Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sun, 5 May 2024 20:44:19 +0200 Subject: [PATCH 01/16] added property for growing BD engine game elements --- src/game_bd/bd_cave.h | 2 ++ src/game_bd/bd_cavedb.c | 40 ++++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/game_bd/bd_cave.h b/src/game_bd/bd_cave.h index 9a0c52a7..aea976e8 100644 --- a/src/game_bd/bd_cave.h +++ b/src/game_bd/bd_cave.h @@ -127,6 +127,7 @@ enum _element_property E_P_CAN_MOVE, // can move E_P_CAN_FALL, // can fall E_P_FALLING, // falling + E_P_GROWING, // growing (element birth) }; // properties @@ -165,6 +166,7 @@ enum _element_property #define P_CAN_MOVE (1 << E_P_CAN_MOVE) #define P_CAN_FALL (1 << E_P_CAN_FALL) #define P_FALLING (1 << E_P_FALLING) +#define P_GROWING (1 << E_P_GROWING) // These are states of the magic wall. typedef enum _magic_wall_state diff --git a/src/game_bd/bd_cavedb.c b/src/game_bd/bd_cavedb.c index 82add253..45da297e 100644 --- a/src/game_bd/bd_cavedb.c +++ b/src/game_bd/bd_cavedb.c @@ -282,9 +282,9 @@ GdElements gd_elements[] = { O_DRAGONFLY_3, N_("Dragonfly, right"), P_EXPLODES_BY_HIT | P_CCW | P_CAN_MOVE, "DRAGONFLYr", 0, i_dragonfly_3, -336, -336, 256 }, // has ckdelay { O_DRAGONFLY_4, N_("Dragonfly, down"), P_EXPLODES_BY_HIT | P_CCW | P_CAN_MOVE, "DRAGONFLYd", 0, i_dragonfly_4, -336, -336, 256 }, // has ckdelay - { O_PRE_PL_1, N_("Player birth (1)"), 0, "GUYBIRTH1", 0, 32, 32, 32 }, - { O_PRE_PL_2, N_("Player birth (2)"), 0, "GUYBIRTH2", 0, 33, 33, 33 }, - { O_PRE_PL_3, N_("Player birth (3)"), 0, "GUYBIRTH3", 0, 34, 34, 34 }, + { O_PRE_PL_1, N_("Player birth (1)"), P_GROWING, "GUYBIRTH1", 0, 32, 32, 32 }, + { O_PRE_PL_2, N_("Player birth (2)"), P_GROWING, "GUYBIRTH2", 0, 33, 33, 33 }, + { O_PRE_PL_3, N_("Player birth (3)"), P_GROWING, "GUYBIRTH3", 0, 34, 34, 34 }, { O_PLAYER, N_("Player"), P_BLOWS_UP_FLIES | P_EXPLODES_BY_HIT | P_PLAYER, "GUY", 0, i_player, i_player, 35, 32 }, // has ckdelay { O_PLAYER_BOMB, N_("Player with bomb"), P_BLOWS_UP_FLIES | P_EXPLODES_BY_HIT | P_PLAYER, "GUYBOMB", 0, 42, 42, 42, 25 }, // has ckdelay { O_PLAYER_ROCKET_LAUNCHER, N_("Player with rocket launcher"), P_BLOWS_UP_FLIES | P_EXPLODES_BY_HIT | P_PLAYER, "GUYROCKETLAUNCER", 0, 369, 369, 369, 25 }, // has ckdelay @@ -310,28 +310,28 @@ GdElements gd_elements[] = { O_NITRO_PACK_F, N_("Nitro pack, falling"), P_EXPLODES_BY_HIT | P_FALLING, "NITROf", 0, i_nitro_pack_f, i_nitro_pack_f, 288 }, { O_NITRO_PACK_EXPLODE, N_("Nitro pack, triggered"), P_EXPLODES_BY_HIT, "NITROtriggered", 0, i_nitro_explode, i_nitro_explode, 288 }, - { O_PRE_CLOCK_1, N_("Clock birth (1)"), P_EXPLOSION_FIRST_STAGE, "CLOCKBIRTH1", 0, 28, 28, 28, 280 }, // has ckdelay - { O_PRE_CLOCK_2, N_("Clock birth (2)"), 0, "CLOCKBIRTH2", 0, 29, 29, 29, 280 }, // has ckdelay - { O_PRE_CLOCK_3, N_("Clock birth (3)"), 0, "CLOCKBIRTH3", 0, 30, 30, 30, 280 }, // has ckdelay - { O_PRE_CLOCK_4, N_("Clock birth (4)"), 0, "CLOCKBIRTH4", 0, 31, 31, 31, 280 }, // has ckdelay - { O_PRE_DIA_1, N_("Diamond birth (1)"), P_EXPLOSION_FIRST_STAGE, "DIAMONDBIRTH1", 0, 56, 56, 56, 280 }, // has ckdelay - { O_PRE_DIA_2, N_("Diamond birth (2)"), 0, "DIAMONDBIRTH2", 0, 57, 57, 57, 280 }, // has ckdelay - { O_PRE_DIA_3, N_("Diamond birth (3)"), 0, "DIAMONDBIRTH3", 0, 58, 58, 58, 280 }, // has ckdelay - { O_PRE_DIA_4, N_("Diamond birth (4)"), 0, "DIAMONDBIRTH4", 0, 59, 59, 59, 280 }, // has ckdelay - { O_PRE_DIA_5, N_("Diamond birth (5)"), 0, "DIAMONDBIRTH5", 0, 60, 60, 60, 280 }, // has ckdelay + { O_PRE_CLOCK_1, N_("Clock birth (1)"), P_GROWING | P_EXPLOSION_FIRST_STAGE, "CLOCKBIRTH1", 0, 28, 28, 28, 280 }, // has ckdelay + { O_PRE_CLOCK_2, N_("Clock birth (2)"), P_GROWING, "CLOCKBIRTH2", 0, 29, 29, 29, 280 }, // has ckdelay + { O_PRE_CLOCK_3, N_("Clock birth (3)"), P_GROWING, "CLOCKBIRTH3", 0, 30, 30, 30, 280 }, // has ckdelay + { O_PRE_CLOCK_4, N_("Clock birth (4)"), P_GROWING, "CLOCKBIRTH4", 0, 31, 31, 31, 280 }, // has ckdelay + { O_PRE_DIA_1, N_("Diamond birth (1)"), P_GROWING | P_EXPLOSION_FIRST_STAGE, "DIAMONDBIRTH1", 0, 56, 56, 56, 280 }, // has ckdelay + { O_PRE_DIA_2, N_("Diamond birth (2)"), P_GROWING, "DIAMONDBIRTH2", 0, 57, 57, 57, 280 }, // has ckdelay + { O_PRE_DIA_3, N_("Diamond birth (3)"), P_GROWING, "DIAMONDBIRTH3", 0, 58, 58, 58, 280 }, // has ckdelay + { O_PRE_DIA_4, N_("Diamond birth (4)"), P_GROWING, "DIAMONDBIRTH4", 0, 59, 59, 59, 280 }, // has ckdelay + { O_PRE_DIA_5, N_("Diamond birth (5)"), P_GROWING, "DIAMONDBIRTH5", 0, 60, 60, 60, 280 }, // has ckdelay { O_EXPLODE_1, N_("Explosion (1)"), P_EXPLOSION | P_EXPLOSION_FIRST_STAGE, "EXPLOSION1", 0, 43, 43, 43, 280 }, // has ckdelay { O_EXPLODE_2, N_("Explosion (2)"), P_EXPLOSION, "EXPLOSION2", 0, 44, 44, 44, 280 }, // has ckdelay { O_EXPLODE_3, N_("Explosion (3)"), P_EXPLOSION, "EXPLOSION3", 0, 45, 45, 45, 280 }, // has ckdelay { O_EXPLODE_4, N_("Explosion (4)"), P_EXPLOSION, "EXPLOSION4", 0, 46, 46, 46, 280 }, // has ckdelay { O_EXPLODE_5, N_("Explosion (5)"), P_EXPLOSION, "EXPLOSION5", 0, 47, 47, 47, 280 }, // has ckdelay - { O_PRE_STONE_1, N_("Stone birth (1)"), P_EXPLOSION_FIRST_STAGE, "BOULDERBIRTH1", 0, 36, 36, 36, 280 }, // has ckdelay - { O_PRE_STONE_2, N_("Stone birth (2)"), 0, "BOULDERBIRTH2", 0, 37, 37, 37, 280 }, // has ckdelay - { O_PRE_STONE_3, N_("Stone birth (3)"), 0, "BOULDERBIRTH3", 0, 38, 38, 38, 280 }, // has ckdelay - { O_PRE_STONE_4, N_("Stone birth (4)"), 0, "BOULDERBIRTH4", 0, 39, 39, 39, 280 }, // has ckdelay - { O_PRE_STEEL_1, N_("Steel birth (1)"), P_EXPLOSION_FIRST_STAGE, "STEELWALLBIRTH1", 0, 24, 24, 24, 280 }, // has ckdelay - { O_PRE_STEEL_2, N_("Steel birth (2)"), 0, "STEELWALLBIRTH2", 0, 25, 25, 25, 280 }, // has ckdelay - { O_PRE_STEEL_3, N_("Steel birth (3)"), 0, "STEELWALLBIRTH3", 0, 26, 26, 26, 280 }, // has ckdelay - { O_PRE_STEEL_4, N_("Steel birth (4)"), 0, "STEELWALLBIRTH4", 0, 27, 27, 27, 280 }, // has ckdelay + { O_PRE_STONE_1, N_("Stone birth (1)"), P_GROWING | P_EXPLOSION_FIRST_STAGE, "BOULDERBIRTH1", 0, 36, 36, 36, 280 }, // has ckdelay + { O_PRE_STONE_2, N_("Stone birth (2)"), P_GROWING, "BOULDERBIRTH2", 0, 37, 37, 37, 280 }, // has ckdelay + { O_PRE_STONE_3, N_("Stone birth (3)"), P_GROWING, "BOULDERBIRTH3", 0, 38, 38, 38, 280 }, // has ckdelay + { O_PRE_STONE_4, N_("Stone birth (4)"), P_GROWING, "BOULDERBIRTH4", 0, 39, 39, 39, 280 }, // has ckdelay + { O_PRE_STEEL_1, N_("Steel birth (1)"), P_GROWING | P_EXPLOSION_FIRST_STAGE, "STEELWALLBIRTH1", 0, 24, 24, 24, 280 }, // has ckdelay + { O_PRE_STEEL_2, N_("Steel birth (2)"), P_GROWING, "STEELWALLBIRTH2", 0, 25, 25, 25, 280 }, // has ckdelay + { O_PRE_STEEL_3, N_("Steel birth (3)"), P_GROWING, "STEELWALLBIRTH3", 0, 26, 26, 26, 280 }, // has ckdelay + { O_PRE_STEEL_4, N_("Steel birth (4)"), P_GROWING, "STEELWALLBIRTH4", 0, 27, 27, 27, 280 }, // has ckdelay { O_GHOST_EXPL_1, N_("Ghost explosion (1)"), P_EXPLOSION | P_EXPLOSION_FIRST_STAGE, "GHOSTEXPLOSION1", 0, 80, 80, 80, 280 }, // has ckdelay { O_GHOST_EXPL_2, N_("Ghost explosion (2)"), P_EXPLOSION, "GHOSTEXPLOSION2", 0, 81, 81, 81, 280 }, // has ckdelay { O_GHOST_EXPL_3, N_("Ghost explosion (3)"), P_EXPLOSION, "GHOSTEXPLOSION3", 0, 82, 82, 82, 280 }, // has ckdelay -- 2.34.1 From 9a756fb2a33d286d88d694ea8e638abf7527fee1 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sun, 5 May 2024 20:52:06 +0200 Subject: [PATCH 02/16] added handling player running into enemy from top or left in BD engine --- src/game_bd/bd_graphics.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/game_bd/bd_graphics.c b/src/game_bd/bd_graphics.c index 0194f442..aa091ba1 100644 --- a/src/game_bd/bd_graphics.c +++ b/src/game_bd/bd_graphics.c @@ -564,6 +564,12 @@ static inline boolean el_falling(const int element) return (gd_elements[element & O_MASK].properties & P_FALLING) != 0; } +// returns true if the element is growing +static inline boolean el_growing(const int element) +{ + return (gd_elements[element & O_MASK].properties & P_GROWING) != 0; +} + // returns true if the element is exploding static inline boolean el_explosion(const int element) { @@ -588,9 +594,32 @@ static void gd_drawcave_tile(Bitmap *dest, GdGame *game, int x, int y, boolean d boolean is_moving = (is_movable_or_diggable && dir != GD_MV_STILL); boolean use_smooth_movements = use_bd_smooth_movements(); - // do not use smooth movement animation for exploding game elements (like player) - if (el_explosion(tile) && dir != GD_MV_STILL) + // do not use smooth movement animation for growing or exploding game elements + if ((el_growing(tile) || el_explosion(tile)) && dir != GD_MV_STILL) + { + int dx = (dir == GD_MV_LEFT ? +1 : dir == GD_MV_RIGHT ? -1 : 0); + int dy = (dir == GD_MV_UP ? +1 : dir == GD_MV_DOWN ? -1 : 0); + int old_x = cave->getx(cave, x + dx, y + dy); + int old_y = cave->gety(cave, x + dx, y + dy); + int last_tile_from = game->last_element_buffer[old_y][old_x] & ~SKIPPED; + boolean old_is_player = el_player(last_tile_from); + + // check special case of player running into enemy from top or left side + if (old_is_player) + { + game->element_buffer[y][x] = (dir == GD_MV_LEFT ? O_PLAYER_LEFT : + dir == GD_MV_RIGHT ? O_PLAYER_RIGHT : + dir == GD_MV_UP ? O_PLAYER_UP : + dir == GD_MV_DOWN ? O_PLAYER_DOWN : O_PLAYER); + + // draw player running into explosion (else player would disappear immediately) + gd_drawcave_tile(dest, game, x, y, draw_masked); + + game->element_buffer[y][x] = tile; + } + use_smooth_movements = FALSE; + } // do not use smooth movement animation for player entering exit (engine stopped) if (cave->player_state == GD_PL_EXITED) -- 2.34.1 From bc81bd2ee202b635901f1b24741bc0a715769d3f Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sun, 5 May 2024 20:57:41 +0200 Subject: [PATCH 03/16] fixed handling enter key just before asking to play again --- src/game.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/game.c b/src/game.c index 852f307f..831ec901 100644 --- a/src/game.c +++ b/src/game.c @@ -5171,7 +5171,16 @@ void GameEnd(void) // do not handle game end if game over and automatically asking for game restart if (game_over && setup.ask_on_game_over) + { + // (this is a special case: player pressed "return" key or fire button shortly before + // automatically asking to restart the game, so skip asking and restart right away) + + CloseDoor(DOOR_CLOSE_1); + + StartGameActions(network.enabled, setup.autorecord, level.random_seed); + return; + } // do not handle game end if request dialog is already active if (checkRequestActive()) -- 2.34.1 From 90dbc259f992de0b8d46224383cf048676279de7 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sun, 5 May 2024 23:54:28 +0200 Subject: [PATCH 04/16] added credits for the native BD engine --- CREDITS | 13 ++++++++----- docs/credits/credits_10.txt | 9 +++++++++ docs/credits/credits_7.txt | 27 ++++++++++++++++++++------- docs/credits/credits_8.txt | 15 ++++++++------- docs/credits/credits_9.txt | 26 +++++++++++++++++++++----- 5 files changed, 66 insertions(+), 24 deletions(-) create mode 100644 docs/credits/credits_10.txt diff --git a/CREDITS b/CREDITS index db28dc63..2773d03a 100644 --- a/CREDITS +++ b/CREDITS @@ -7,8 +7,7 @@ somebody should be added to this list of credits, please let me know! Special thanks to Peter Liepa for creating "Boulder Dash" that started it all! -Special thanks to Klaus Heinz and Volker Wertich for creating "Emerald Mine", -which took this kind of game to a new level! +Special thanks to Klaus Heinz and Volker Wertich for creating "Emerald Mine"! Special thanks to Michael Stopp and Philip Jespersen for creating "Supaplex"! @@ -23,9 +22,13 @@ Thanks to Steffest for ideas and inspiration by DX-Boulderdash. Thanks to Guido Schulz for the initial MS-DOS port of the game. -The native Emerald mine engine was derived from Emerald Mine for X11 -which was developed by David Tritscher as a very compatible Emerald Mine clone. -Thanks a lot for this contribution! +The native Boulder Dash engine was derived from GDash, which was developed by +Czirkos Zoltan as a highly compatible Boulder Dash clone. Thanks a lot for this +contribution! + +The native Emerald mine engine was derived from Emerald Mine for X11, which was +developed by David Tritscher as a very compatible Emerald Mine clone. Thanks a +lot for this contribution! The native Supaplex engine is based on MegaPlex by Frank Schindler, which is based on the Supaplex Speed Fix by Herman Perk, which is based on the original diff --git a/docs/credits/credits_10.txt b/docs/credits/credits_10.txt new file mode 100644 index 00000000..d14c2fcb --- /dev/null +++ b/docs/credits/credits_10.txt @@ -0,0 +1,9 @@ +# .font: font.text_2 +And not to forget: + +Many thanks to + +# .font: font.text_3 +All those who contributed +levels to this game +since 1995 diff --git a/docs/credits/credits_7.txt b/docs/credits/credits_7.txt index 27d4e658..ee5f8fb7 100644 --- a/docs/credits/credits_7.txt +++ b/docs/credits/credits_7.txt @@ -1,20 +1,33 @@ # .font: font.text_2 -Thanks to +Special thanks to # .font: font.text_3 -David Tritscher +Czirkos Zoltan # .font: font.text_2 -for the code base used for the -native Emerald Mine engine +for creating + +# .font: font.text_3 +"GDash" + +# .font: font.text_2 +used for the +native Boulder Dash engine # .font: font.text_2 -Thanks to +Special thanks to # .font: font.text_3 -Guido Schulz +David Tritscher + +# .font: font.text_2 +for creating + +# .font: font.text_3 +"Emerald Mine for X11" # .font: font.text_2 -for the initial DOS/Windows port +used for the +native Emerald Mine engine diff --git a/docs/credits/credits_8.txt b/docs/credits/credits_8.txt index 8482f066..ae332473 100644 --- a/docs/credits/credits_8.txt +++ b/docs/credits/credits_8.txt @@ -1,17 +1,18 @@ # .font: font.text_2 -Thanks to +Special thanks to # .font: font.text_3 -Thomas Andrae +Frank Schindler # .font: font.text_2 -and +for creating # .font: font.text_3 -Karl Hörnell +"MegaPlex" # .font: font.text_2 -for additional toon animations +used for the +native Supaplex engine @@ -19,7 +20,7 @@ for additional toon animations Thanks to # .font: font.text_3 -Majid Katzer +Guido Schulz # .font: font.text_2 -for additional sounds and music +for the initial DOS/Windows port diff --git a/docs/credits/credits_9.txt b/docs/credits/credits_9.txt index d14c2fcb..8482f066 100644 --- a/docs/credits/credits_9.txt +++ b/docs/credits/credits_9.txt @@ -1,9 +1,25 @@ # .font: font.text_2 -And not to forget: +Thanks to -Many thanks to +# .font: font.text_3 +Thomas Andrae + +# .font: font.text_2 +and # .font: font.text_3 -All those who contributed -levels to this game -since 1995 +Karl Hörnell + +# .font: font.text_2 +for additional toon animations + + + +# .font: font.text_2 +Thanks to + +# .font: font.text_3 +Majid Katzer + +# .font: font.text_2 +for additional sounds and music -- 2.34.1 From 444112752c923c5168ce64cf718a4b70e7887586 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 6 May 2024 00:29:24 +0200 Subject: [PATCH 05/16] changed prefix for native BD engine game element description files --- docs/elements/bd_amoeba.txt | 11 ++++++----- docs/elements/bd_butterfly.txt | 10 +++++----- docs/elements/bd_diamond.txt | 3 ++- docs/elements/bd_expandable_wall.txt | 9 ++++++--- docs/elements/bd_firefly.txt | 8 +++----- docs/elements/bd_magic_wall.txt | 10 +++++----- docs/elements/bd_rock.txt | 5 ++--- docs/elements/bd_wall.txt | 9 +++++---- docs/elements/{bd_acid.txt => bdx_acid.txt} | 0 docs/elements/bdx_amoeba.txt | 5 +++++ docs/elements/bdx_amoeba_1.txt | 6 ++++++ docs/elements/{bd_amoeba_2.txt => bdx_amoeba_2.txt} | 2 +- docs/elements/{bd_biter.txt => bdx_biter.txt} | 0 .../{bd_biter_switch.txt => bdx_biter_switch.txt} | 0 docs/elements/{bd_bladder.txt => bdx_bladder.txt} | 0 ...bd_bladder_spender.txt => bdx_bladder_spender.txt} | 0 docs/elements/{bd_bomb.txt => bdx_bomb.txt} | 0 docs/elements/{bd_box.txt => bdx_box.txt} | 0 docs/elements/bdx_butterfly.txt | 6 ++++++ .../{bd_chasing_rock.txt => bdx_chasing_rock.txt} | 0 docs/elements/{bd_clock.txt => bdx_clock.txt} | 0 docs/elements/{bd_conveyor.txt => bdx_conveyor.txt} | 0 ...yor_dir_switch.txt => bdx_conveyor_dir_switch.txt} | 0 ...bd_conveyor_switch.txt => bdx_conveyor_switch.txt} | 0 docs/elements/{bd_covered.txt => bdx_covered.txt} | 0 docs/elements/{bd_cow.txt => bdx_cow.txt} | 0 ...bd_creature_switch.txt => bdx_creature_switch.txt} | 0 docs/elements/bdx_diamond.txt | 1 + .../{bd_diamond_glued.txt => bdx_diamond_glued.txt} | 0 .../{bd_diamond_key.txt => bdx_diamond_key.txt} | 0 docs/elements/{bd_dragonfly.txt => bdx_dragonfly.txt} | 0 docs/elements/{bd_exit.txt => bdx_exit.txt} | 0 ...ble_steelwall.txt => bdx_expandable_steelwall.txt} | 0 docs/elements/bdx_expandable_wall.txt | 3 +++ ...wall_switch.txt => bdx_expandable_wall_switch.txt} | 0 ..._wall_switch.txt => bdx_expanding_wall_switch.txt} | 0 docs/elements/{bd_exploding.txt => bdx_exploding.txt} | 0 .../{bd_fake_bonus.txt => bdx_fake_bonus.txt} | 0 .../{bd_falling_wall.txt => bdx_falling_wall.txt} | 0 docs/elements/bdx_firefly.txt | 6 ++++++ .../{bd_flying_diamond.txt => bdx_flying_diamond.txt} | 0 .../{bd_flying_rock.txt => bdx_flying_rock.txt} | 0 docs/elements/{bd_gate.txt => bdx_gate.txt} | 0 docs/elements/{bd_ghost.txt => bdx_ghost.txt} | 0 .../{bd_gravestone.txt => bdx_gravestone.txt} | 0 .../{bd_gravity_switch.txt => bdx_gravity_switch.txt} | 0 docs/elements/{bd_inbox.txt => bdx_inbox.txt} | 0 .../{bd_invisible_exit.txt => bdx_invisible_exit.txt} | 0 docs/elements/{bd_key.txt => bdx_key.txt} | 0 docs/elements/{bd_lava.txt => bdx_lava.txt} | 0 docs/elements/bdx_magic_wall.txt | 8 ++++++++ docs/elements/{bd_mega_rock.txt => bdx_mega_rock.txt} | 0 .../{bd_nitro_pack.txt => bdx_nitro_pack.txt} | 0 docs/elements/{bd_nut.txt => bdx_nut.txt} | 0 docs/elements/{bd_player.txt => bdx_player.txt} | 0 ..._pneumatic_hammer.txt => bdx_pneumatic_hammer.txt} | 0 docs/elements/{bd_pot.txt => bdx_pot.txt} | 0 .../{bd_replicator.txt => bdx_replicator.txt} | 0 ...eplicator_switch.txt => bdx_replicator_switch.txt} | 0 docs/elements/bdx_rock.txt | 3 +++ .../{bd_rock_glued.txt => bdx_rock_glued.txt} | 0 docs/elements/{bd_rocket.txt => bdx_rocket.txt} | 0 ...bd_rocket_launcher.txt => bdx_rocket_launcher.txt} | 0 docs/elements/{bd_sand.txt => bdx_sand.txt} | 0 docs/elements/{bd_sand_ball.txt => bdx_sand_ball.txt} | 0 .../{bd_sand_glued.txt => bdx_sand_glued.txt} | 0 .../{bd_sand_loose.txt => bdx_sand_loose.txt} | 0 .../{bd_sand_sloped.txt => bdx_sand_sloped.txt} | 0 docs/elements/{bd_skeleton.txt => bdx_skeleton.txt} | 0 docs/elements/{bd_slime.txt => bdx_slime.txt} | 0 docs/elements/{bd_steelwall.txt => bdx_steelwall.txt} | 0 ...elwall_diggable.txt => bdx_steelwall_diggable.txt} | 0 ...ll_explodable.txt => bdx_steelwall_explodable.txt} | 0 ..._steelwall_sloped.txt => bdx_steelwall_sloped.txt} | 0 docs/elements/{bd_stonefly.txt => bdx_stonefly.txt} | 0 docs/elements/{bd_sweet.txt => bdx_sweet.txt} | 0 .../{bd_teleporter.txt => bdx_teleporter.txt} | 0 .../{bd_time_penalty.txt => bdx_time_penalty.txt} | 0 ...bd_trapped_diamond.txt => bdx_trapped_diamond.txt} | 0 .../{bd_voodoo_doll.txt => bdx_voodoo_doll.txt} | 0 .../{bd_waiting_rock.txt => bdx_waiting_rock.txt} | 0 docs/elements/bdx_wall.txt | 5 +++++ .../{bd_wall_diamond.txt => bdx_wall_diamond.txt} | 0 .../{bd_wall_diggable.txt => bdx_wall_diggable.txt} | 0 docs/elements/{bd_wall_key.txt => bdx_wall_key.txt} | 0 .../{bd_wall_sloped.txt => bdx_wall_sloped.txt} | 0 docs/elements/{bd_water.txt => bdx_water.txt} | 0 87 files changed, 78 insertions(+), 32 deletions(-) rename docs/elements/{bd_acid.txt => bdx_acid.txt} (100%) create mode 100644 docs/elements/bdx_amoeba.txt create mode 100644 docs/elements/bdx_amoeba_1.txt rename docs/elements/{bd_amoeba_2.txt => bdx_amoeba_2.txt} (54%) rename docs/elements/{bd_biter.txt => bdx_biter.txt} (100%) rename docs/elements/{bd_biter_switch.txt => bdx_biter_switch.txt} (100%) rename docs/elements/{bd_bladder.txt => bdx_bladder.txt} (100%) rename docs/elements/{bd_bladder_spender.txt => bdx_bladder_spender.txt} (100%) rename docs/elements/{bd_bomb.txt => bdx_bomb.txt} (100%) rename docs/elements/{bd_box.txt => bdx_box.txt} (100%) create mode 100644 docs/elements/bdx_butterfly.txt rename docs/elements/{bd_chasing_rock.txt => bdx_chasing_rock.txt} (100%) rename docs/elements/{bd_clock.txt => bdx_clock.txt} (100%) rename docs/elements/{bd_conveyor.txt => bdx_conveyor.txt} (100%) rename docs/elements/{bd_conveyor_dir_switch.txt => bdx_conveyor_dir_switch.txt} (100%) rename docs/elements/{bd_conveyor_switch.txt => bdx_conveyor_switch.txt} (100%) rename docs/elements/{bd_covered.txt => bdx_covered.txt} (100%) rename docs/elements/{bd_cow.txt => bdx_cow.txt} (100%) rename docs/elements/{bd_creature_switch.txt => bdx_creature_switch.txt} (100%) create mode 100644 docs/elements/bdx_diamond.txt rename docs/elements/{bd_diamond_glued.txt => bdx_diamond_glued.txt} (100%) rename docs/elements/{bd_diamond_key.txt => bdx_diamond_key.txt} (100%) rename docs/elements/{bd_dragonfly.txt => bdx_dragonfly.txt} (100%) rename docs/elements/{bd_exit.txt => bdx_exit.txt} (100%) rename docs/elements/{bd_expandable_steelwall.txt => bdx_expandable_steelwall.txt} (100%) create mode 100644 docs/elements/bdx_expandable_wall.txt rename docs/elements/{bd_expandable_wall_switch.txt => bdx_expandable_wall_switch.txt} (100%) rename docs/elements/{bd_expanding_wall_switch.txt => bdx_expanding_wall_switch.txt} (100%) rename docs/elements/{bd_exploding.txt => bdx_exploding.txt} (100%) rename docs/elements/{bd_fake_bonus.txt => bdx_fake_bonus.txt} (100%) rename docs/elements/{bd_falling_wall.txt => bdx_falling_wall.txt} (100%) create mode 100644 docs/elements/bdx_firefly.txt rename docs/elements/{bd_flying_diamond.txt => bdx_flying_diamond.txt} (100%) rename docs/elements/{bd_flying_rock.txt => bdx_flying_rock.txt} (100%) rename docs/elements/{bd_gate.txt => bdx_gate.txt} (100%) rename docs/elements/{bd_ghost.txt => bdx_ghost.txt} (100%) rename docs/elements/{bd_gravestone.txt => bdx_gravestone.txt} (100%) rename docs/elements/{bd_gravity_switch.txt => bdx_gravity_switch.txt} (100%) rename docs/elements/{bd_inbox.txt => bdx_inbox.txt} (100%) rename docs/elements/{bd_invisible_exit.txt => bdx_invisible_exit.txt} (100%) rename docs/elements/{bd_key.txt => bdx_key.txt} (100%) rename docs/elements/{bd_lava.txt => bdx_lava.txt} (100%) create mode 100644 docs/elements/bdx_magic_wall.txt rename docs/elements/{bd_mega_rock.txt => bdx_mega_rock.txt} (100%) rename docs/elements/{bd_nitro_pack.txt => bdx_nitro_pack.txt} (100%) rename docs/elements/{bd_nut.txt => bdx_nut.txt} (100%) rename docs/elements/{bd_player.txt => bdx_player.txt} (100%) rename docs/elements/{bd_pneumatic_hammer.txt => bdx_pneumatic_hammer.txt} (100%) rename docs/elements/{bd_pot.txt => bdx_pot.txt} (100%) rename docs/elements/{bd_replicator.txt => bdx_replicator.txt} (100%) rename docs/elements/{bd_replicator_switch.txt => bdx_replicator_switch.txt} (100%) create mode 100644 docs/elements/bdx_rock.txt rename docs/elements/{bd_rock_glued.txt => bdx_rock_glued.txt} (100%) rename docs/elements/{bd_rocket.txt => bdx_rocket.txt} (100%) rename docs/elements/{bd_rocket_launcher.txt => bdx_rocket_launcher.txt} (100%) rename docs/elements/{bd_sand.txt => bdx_sand.txt} (100%) rename docs/elements/{bd_sand_ball.txt => bdx_sand_ball.txt} (100%) rename docs/elements/{bd_sand_glued.txt => bdx_sand_glued.txt} (100%) rename docs/elements/{bd_sand_loose.txt => bdx_sand_loose.txt} (100%) rename docs/elements/{bd_sand_sloped.txt => bdx_sand_sloped.txt} (100%) rename docs/elements/{bd_skeleton.txt => bdx_skeleton.txt} (100%) rename docs/elements/{bd_slime.txt => bdx_slime.txt} (100%) rename docs/elements/{bd_steelwall.txt => bdx_steelwall.txt} (100%) rename docs/elements/{bd_steelwall_diggable.txt => bdx_steelwall_diggable.txt} (100%) rename docs/elements/{bd_steelwall_explodable.txt => bdx_steelwall_explodable.txt} (100%) rename docs/elements/{bd_steelwall_sloped.txt => bdx_steelwall_sloped.txt} (100%) rename docs/elements/{bd_stonefly.txt => bdx_stonefly.txt} (100%) rename docs/elements/{bd_sweet.txt => bdx_sweet.txt} (100%) rename docs/elements/{bd_teleporter.txt => bdx_teleporter.txt} (100%) rename docs/elements/{bd_time_penalty.txt => bdx_time_penalty.txt} (100%) rename docs/elements/{bd_trapped_diamond.txt => bdx_trapped_diamond.txt} (100%) rename docs/elements/{bd_voodoo_doll.txt => bdx_voodoo_doll.txt} (100%) rename docs/elements/{bd_waiting_rock.txt => bdx_waiting_rock.txt} (100%) create mode 100644 docs/elements/bdx_wall.txt rename docs/elements/{bd_wall_diamond.txt => bdx_wall_diamond.txt} (100%) rename docs/elements/{bd_wall_diggable.txt => bdx_wall_diggable.txt} (100%) rename docs/elements/{bd_wall_key.txt => bdx_wall_key.txt} (100%) rename docs/elements/{bd_wall_sloped.txt => bdx_wall_sloped.txt} (100%) rename docs/elements/{bd_water.txt => bdx_water.txt} (100%) diff --git a/docs/elements/bd_amoeba.txt b/docs/elements/bd_amoeba.txt index 18ce1725..47016a64 100644 --- a/docs/elements/bd_amoeba.txt +++ b/docs/elements/bd_amoeba.txt @@ -1,6 +1,7 @@ -The BD style Amoeba grows randomly through empty space and sand. -When it is enclosed, it stops growing and transforms into diamonds (or -some other, configurable game element). +The BD style amoeba has some special properties: When it is completely +surrounded, it instantly turns into the specified content. But if this +cannot be achieved in a certain amount of time, this amoeba instantly +turns to BD boulders instead. BD amoeba is the only amoeba that can be +smothered by the player. -When it has grown too big, it suddenly transforms into rocks. At the beginning, -it can grow slowly, but after some time it starts growing very rapidly. +All amoeba types must share the same settings. diff --git a/docs/elements/bd_butterfly.txt b/docs/elements/bd_butterfly.txt index 3cf63425..ac23f35a 100644 --- a/docs/elements/bd_butterfly.txt +++ b/docs/elements/bd_butterfly.txt @@ -1,6 +1,6 @@ -Butterflies move through empty space. Touching them is deadly.. Butterflies -blow up when hit by a falling rock or diamond. Amoeba is also deadly for them. -They explode into diamonds, producing a 3x3 square of diamonds. Butterflies are -spinning right. They prefer turning right, usually clockwise. +Butterflies always try to follow the right side of a wall or other elements. +Touching them is deadly. -There is another variant of the butterfly that is spinning left. +They will explode in 9 BD style diamonds if smashed by a rock or BD style +diamond. If dynabombed, they will become one BD style diamond. +Other explosions simply destroy them. diff --git a/docs/elements/bd_diamond.txt b/docs/elements/bd_diamond.txt index 0e599a46..a719dc3e 100644 --- a/docs/elements/bd_diamond.txt +++ b/docs/elements/bd_diamond.txt @@ -1 +1,2 @@ -A certain amount of these diamonds must be collected to solve a BD style level. +BD style levels require a certain amount of these diamonds to be collected +to complete the level. diff --git a/docs/elements/bd_expandable_wall.txt b/docs/elements/bd_expandable_wall.txt index 16f06692..1f778355 100644 --- a/docs/elements/bd_expandable_wall.txt +++ b/docs/elements/bd_expandable_wall.txt @@ -1,3 +1,6 @@ -Expandable wall expands in horizontal or vertical (or both) direction, if there -is an empty space to fill up. You should be very careful not to be catched by -the expanding wall. +This wall will grow on either side that is open. It will stop +growing on one side if it is blocked by a wall, even if said wall is later +destroyed. Gems and others, however, will stop it only temporarily. + +This particular growing wall is the only one that is visibly different +to the player from a normal wall, at least under the default graphics. diff --git a/docs/elements/bd_firefly.txt b/docs/elements/bd_firefly.txt index 88411fca..564dc2f4 100644 --- a/docs/elements/bd_firefly.txt +++ b/docs/elements/bd_firefly.txt @@ -1,6 +1,4 @@ -Fireflies move through empty space. Touching them is deadly.. Fireflies -blow up when hit by a falling rock or diamond. Amoeba is also deadly for them. -They explode into space, producing a 3x3 square of empty space. Fireflies are -spinning left. They prefer turning left, usually counter-clockwise. +Fireflies always try to follow the left side of a wall or other elements. +Touching them is deadly. -There is another variant of the firefly that is spinning right. +Fireflies can be smashed by BD style diamonds in addition to rocks. diff --git a/docs/elements/bd_magic_wall.txt b/docs/elements/bd_magic_wall.txt index 8dd95654..475d1103 100644 --- a/docs/elements/bd_magic_wall.txt +++ b/docs/elements/bd_magic_wall.txt @@ -1,8 +1,8 @@ -This BD style magic wall converts rocks into diamonds and vice versa. Note that -a magic wall can only be activated for some limited time. It can also turn mega -rocks into nitro packs, nitro packs into mega rocks. Even flying diamonds and -rocks pass them to be converted into each other, but they do that from bottom to -up, of course. +This is a BD style magic wall. It gets activated for a limited duration by +rocks or gems that fall on it. While activated, they can fall through it, and +rocks turn into BD style diamonds, and gems turn into BD style rocks. +After the magic wall has stopped running, it cannot be activated again. The duration in seconds for which magic walls are active is configurable. A duration of zero will let the wall run forever. +All magic walls share the same timer. diff --git a/docs/elements/bd_rock.txt b/docs/elements/bd_rock.txt index 5a6f4a87..11980132 100644 --- a/docs/elements/bd_rock.txt +++ b/docs/elements/bd_rock.txt @@ -1,3 +1,2 @@ -This is a BD style rock (also called stone or boulder). It can be pushed by the -player, and can be dropped on enemies to make them explode. -This rock can be jump-pushed by snapping it. +This is a BD style rock. It's not much different from a regular rock, +but it can be jump-pushed by snapping it. diff --git a/docs/elements/bd_wall.txt b/docs/elements/bd_wall.txt index 75822c6f..3cb9ffaa 100644 --- a/docs/elements/bd_wall.txt +++ b/docs/elements/bd_wall.txt @@ -1,5 +1,6 @@ -This is a BD style wall. It cannot be moved and cannot be passed by the player, -but explosion will destroy it. +This is the BD style wall. -Even though it may not look like that, objects that can fall will slip off this -wall to the left or to the right. +Unlike most other walls, falling objects slip off this wall, +although it does not look rounded or crumbled. + +It can be destroyed by explosions. diff --git a/docs/elements/bd_acid.txt b/docs/elements/bdx_acid.txt similarity index 100% rename from docs/elements/bd_acid.txt rename to docs/elements/bdx_acid.txt diff --git a/docs/elements/bdx_amoeba.txt b/docs/elements/bdx_amoeba.txt new file mode 100644 index 00000000..f167336a --- /dev/null +++ b/docs/elements/bdx_amoeba.txt @@ -0,0 +1,5 @@ +Amoebas grow randomly through empty space and sand. When enclosed, they stop +growing and transform into diamonds (or some other, configurable game element). + +When grown too big, they suddenly transform into rocks. At the beginning, +they can grow slowly, but after some time they start growing very rapidly. diff --git a/docs/elements/bdx_amoeba_1.txt b/docs/elements/bdx_amoeba_1.txt new file mode 100644 index 00000000..8df48daf --- /dev/null +++ b/docs/elements/bdx_amoeba_1.txt @@ -0,0 +1,6 @@ +The amoeba (first variant) grows randomly through empty space and sand. +When it is enclosed, it stops growing and transforms into diamonds (or +some other, configurable game element). + +When it has grown too big, it suddenly transforms into rocks. At the beginning, +it can grow slowly, but after some time it starts growing very rapidly. diff --git a/docs/elements/bd_amoeba_2.txt b/docs/elements/bdx_amoeba_2.txt similarity index 54% rename from docs/elements/bd_amoeba_2.txt rename to docs/elements/bdx_amoeba_2.txt index 50723254..612f966a 100644 --- a/docs/elements/bd_amoeba_2.txt +++ b/docs/elements/bdx_amoeba_2.txt @@ -1,3 +1,3 @@ -Another BD style amoeba, which behaves exactly like the other one. +The second variant of the amoeba behaves exactly like the first one. But it lives its own life. Sometimes, when they collide, they produce an explosion. diff --git a/docs/elements/bd_biter.txt b/docs/elements/bdx_biter.txt similarity index 100% rename from docs/elements/bd_biter.txt rename to docs/elements/bdx_biter.txt diff --git a/docs/elements/bd_biter_switch.txt b/docs/elements/bdx_biter_switch.txt similarity index 100% rename from docs/elements/bd_biter_switch.txt rename to docs/elements/bdx_biter_switch.txt diff --git a/docs/elements/bd_bladder.txt b/docs/elements/bdx_bladder.txt similarity index 100% rename from docs/elements/bd_bladder.txt rename to docs/elements/bdx_bladder.txt diff --git a/docs/elements/bd_bladder_spender.txt b/docs/elements/bdx_bladder_spender.txt similarity index 100% rename from docs/elements/bd_bladder_spender.txt rename to docs/elements/bdx_bladder_spender.txt diff --git a/docs/elements/bd_bomb.txt b/docs/elements/bdx_bomb.txt similarity index 100% rename from docs/elements/bd_bomb.txt rename to docs/elements/bdx_bomb.txt diff --git a/docs/elements/bd_box.txt b/docs/elements/bdx_box.txt similarity index 100% rename from docs/elements/bd_box.txt rename to docs/elements/bdx_box.txt diff --git a/docs/elements/bdx_butterfly.txt b/docs/elements/bdx_butterfly.txt new file mode 100644 index 00000000..3cf63425 --- /dev/null +++ b/docs/elements/bdx_butterfly.txt @@ -0,0 +1,6 @@ +Butterflies move through empty space. Touching them is deadly.. Butterflies +blow up when hit by a falling rock or diamond. Amoeba is also deadly for them. +They explode into diamonds, producing a 3x3 square of diamonds. Butterflies are +spinning right. They prefer turning right, usually clockwise. + +There is another variant of the butterfly that is spinning left. diff --git a/docs/elements/bd_chasing_rock.txt b/docs/elements/bdx_chasing_rock.txt similarity index 100% rename from docs/elements/bd_chasing_rock.txt rename to docs/elements/bdx_chasing_rock.txt diff --git a/docs/elements/bd_clock.txt b/docs/elements/bdx_clock.txt similarity index 100% rename from docs/elements/bd_clock.txt rename to docs/elements/bdx_clock.txt diff --git a/docs/elements/bd_conveyor.txt b/docs/elements/bdx_conveyor.txt similarity index 100% rename from docs/elements/bd_conveyor.txt rename to docs/elements/bdx_conveyor.txt diff --git a/docs/elements/bd_conveyor_dir_switch.txt b/docs/elements/bdx_conveyor_dir_switch.txt similarity index 100% rename from docs/elements/bd_conveyor_dir_switch.txt rename to docs/elements/bdx_conveyor_dir_switch.txt diff --git a/docs/elements/bd_conveyor_switch.txt b/docs/elements/bdx_conveyor_switch.txt similarity index 100% rename from docs/elements/bd_conveyor_switch.txt rename to docs/elements/bdx_conveyor_switch.txt diff --git a/docs/elements/bd_covered.txt b/docs/elements/bdx_covered.txt similarity index 100% rename from docs/elements/bd_covered.txt rename to docs/elements/bdx_covered.txt diff --git a/docs/elements/bd_cow.txt b/docs/elements/bdx_cow.txt similarity index 100% rename from docs/elements/bd_cow.txt rename to docs/elements/bdx_cow.txt diff --git a/docs/elements/bd_creature_switch.txt b/docs/elements/bdx_creature_switch.txt similarity index 100% rename from docs/elements/bd_creature_switch.txt rename to docs/elements/bdx_creature_switch.txt diff --git a/docs/elements/bdx_diamond.txt b/docs/elements/bdx_diamond.txt new file mode 100644 index 00000000..e176bf0a --- /dev/null +++ b/docs/elements/bdx_diamond.txt @@ -0,0 +1 @@ +A certain amount of these diamonds must be collected to solve a level. diff --git a/docs/elements/bd_diamond_glued.txt b/docs/elements/bdx_diamond_glued.txt similarity index 100% rename from docs/elements/bd_diamond_glued.txt rename to docs/elements/bdx_diamond_glued.txt diff --git a/docs/elements/bd_diamond_key.txt b/docs/elements/bdx_diamond_key.txt similarity index 100% rename from docs/elements/bd_diamond_key.txt rename to docs/elements/bdx_diamond_key.txt diff --git a/docs/elements/bd_dragonfly.txt b/docs/elements/bdx_dragonfly.txt similarity index 100% rename from docs/elements/bd_dragonfly.txt rename to docs/elements/bdx_dragonfly.txt diff --git a/docs/elements/bd_exit.txt b/docs/elements/bdx_exit.txt similarity index 100% rename from docs/elements/bd_exit.txt rename to docs/elements/bdx_exit.txt diff --git a/docs/elements/bd_expandable_steelwall.txt b/docs/elements/bdx_expandable_steelwall.txt similarity index 100% rename from docs/elements/bd_expandable_steelwall.txt rename to docs/elements/bdx_expandable_steelwall.txt diff --git a/docs/elements/bdx_expandable_wall.txt b/docs/elements/bdx_expandable_wall.txt new file mode 100644 index 00000000..16f06692 --- /dev/null +++ b/docs/elements/bdx_expandable_wall.txt @@ -0,0 +1,3 @@ +Expandable wall expands in horizontal or vertical (or both) direction, if there +is an empty space to fill up. You should be very careful not to be catched by +the expanding wall. diff --git a/docs/elements/bd_expandable_wall_switch.txt b/docs/elements/bdx_expandable_wall_switch.txt similarity index 100% rename from docs/elements/bd_expandable_wall_switch.txt rename to docs/elements/bdx_expandable_wall_switch.txt diff --git a/docs/elements/bd_expanding_wall_switch.txt b/docs/elements/bdx_expanding_wall_switch.txt similarity index 100% rename from docs/elements/bd_expanding_wall_switch.txt rename to docs/elements/bdx_expanding_wall_switch.txt diff --git a/docs/elements/bd_exploding.txt b/docs/elements/bdx_exploding.txt similarity index 100% rename from docs/elements/bd_exploding.txt rename to docs/elements/bdx_exploding.txt diff --git a/docs/elements/bd_fake_bonus.txt b/docs/elements/bdx_fake_bonus.txt similarity index 100% rename from docs/elements/bd_fake_bonus.txt rename to docs/elements/bdx_fake_bonus.txt diff --git a/docs/elements/bd_falling_wall.txt b/docs/elements/bdx_falling_wall.txt similarity index 100% rename from docs/elements/bd_falling_wall.txt rename to docs/elements/bdx_falling_wall.txt diff --git a/docs/elements/bdx_firefly.txt b/docs/elements/bdx_firefly.txt new file mode 100644 index 00000000..88411fca --- /dev/null +++ b/docs/elements/bdx_firefly.txt @@ -0,0 +1,6 @@ +Fireflies move through empty space. Touching them is deadly.. Fireflies +blow up when hit by a falling rock or diamond. Amoeba is also deadly for them. +They explode into space, producing a 3x3 square of empty space. Fireflies are +spinning left. They prefer turning left, usually counter-clockwise. + +There is another variant of the firefly that is spinning right. diff --git a/docs/elements/bd_flying_diamond.txt b/docs/elements/bdx_flying_diamond.txt similarity index 100% rename from docs/elements/bd_flying_diamond.txt rename to docs/elements/bdx_flying_diamond.txt diff --git a/docs/elements/bd_flying_rock.txt b/docs/elements/bdx_flying_rock.txt similarity index 100% rename from docs/elements/bd_flying_rock.txt rename to docs/elements/bdx_flying_rock.txt diff --git a/docs/elements/bd_gate.txt b/docs/elements/bdx_gate.txt similarity index 100% rename from docs/elements/bd_gate.txt rename to docs/elements/bdx_gate.txt diff --git a/docs/elements/bd_ghost.txt b/docs/elements/bdx_ghost.txt similarity index 100% rename from docs/elements/bd_ghost.txt rename to docs/elements/bdx_ghost.txt diff --git a/docs/elements/bd_gravestone.txt b/docs/elements/bdx_gravestone.txt similarity index 100% rename from docs/elements/bd_gravestone.txt rename to docs/elements/bdx_gravestone.txt diff --git a/docs/elements/bd_gravity_switch.txt b/docs/elements/bdx_gravity_switch.txt similarity index 100% rename from docs/elements/bd_gravity_switch.txt rename to docs/elements/bdx_gravity_switch.txt diff --git a/docs/elements/bd_inbox.txt b/docs/elements/bdx_inbox.txt similarity index 100% rename from docs/elements/bd_inbox.txt rename to docs/elements/bdx_inbox.txt diff --git a/docs/elements/bd_invisible_exit.txt b/docs/elements/bdx_invisible_exit.txt similarity index 100% rename from docs/elements/bd_invisible_exit.txt rename to docs/elements/bdx_invisible_exit.txt diff --git a/docs/elements/bd_key.txt b/docs/elements/bdx_key.txt similarity index 100% rename from docs/elements/bd_key.txt rename to docs/elements/bdx_key.txt diff --git a/docs/elements/bd_lava.txt b/docs/elements/bdx_lava.txt similarity index 100% rename from docs/elements/bd_lava.txt rename to docs/elements/bdx_lava.txt diff --git a/docs/elements/bdx_magic_wall.txt b/docs/elements/bdx_magic_wall.txt new file mode 100644 index 00000000..9cfca9cb --- /dev/null +++ b/docs/elements/bdx_magic_wall.txt @@ -0,0 +1,8 @@ +This magic wall converts rocks into diamonds and vice versa. Note that +a magic wall can only be activated for some limited time. It can also turn mega +rocks into nitro packs, nitro packs into mega rocks. Even flying diamonds and +rocks pass them to be converted into each other, but they do that from bottom to +up, of course. + +The duration in seconds for which magic walls are active is configurable. +A duration of zero will let the wall run forever. diff --git a/docs/elements/bd_mega_rock.txt b/docs/elements/bdx_mega_rock.txt similarity index 100% rename from docs/elements/bd_mega_rock.txt rename to docs/elements/bdx_mega_rock.txt diff --git a/docs/elements/bd_nitro_pack.txt b/docs/elements/bdx_nitro_pack.txt similarity index 100% rename from docs/elements/bd_nitro_pack.txt rename to docs/elements/bdx_nitro_pack.txt diff --git a/docs/elements/bd_nut.txt b/docs/elements/bdx_nut.txt similarity index 100% rename from docs/elements/bd_nut.txt rename to docs/elements/bdx_nut.txt diff --git a/docs/elements/bd_player.txt b/docs/elements/bdx_player.txt similarity index 100% rename from docs/elements/bd_player.txt rename to docs/elements/bdx_player.txt diff --git a/docs/elements/bd_pneumatic_hammer.txt b/docs/elements/bdx_pneumatic_hammer.txt similarity index 100% rename from docs/elements/bd_pneumatic_hammer.txt rename to docs/elements/bdx_pneumatic_hammer.txt diff --git a/docs/elements/bd_pot.txt b/docs/elements/bdx_pot.txt similarity index 100% rename from docs/elements/bd_pot.txt rename to docs/elements/bdx_pot.txt diff --git a/docs/elements/bd_replicator.txt b/docs/elements/bdx_replicator.txt similarity index 100% rename from docs/elements/bd_replicator.txt rename to docs/elements/bdx_replicator.txt diff --git a/docs/elements/bd_replicator_switch.txt b/docs/elements/bdx_replicator_switch.txt similarity index 100% rename from docs/elements/bd_replicator_switch.txt rename to docs/elements/bdx_replicator_switch.txt diff --git a/docs/elements/bdx_rock.txt b/docs/elements/bdx_rock.txt new file mode 100644 index 00000000..d63a3be7 --- /dev/null +++ b/docs/elements/bdx_rock.txt @@ -0,0 +1,3 @@ +This is a rock (also called stone or boulder). It can be pushed by the +player, and can be dropped on enemies to make them explode. +This rock can be jump-pushed by snapping it. diff --git a/docs/elements/bd_rock_glued.txt b/docs/elements/bdx_rock_glued.txt similarity index 100% rename from docs/elements/bd_rock_glued.txt rename to docs/elements/bdx_rock_glued.txt diff --git a/docs/elements/bd_rocket.txt b/docs/elements/bdx_rocket.txt similarity index 100% rename from docs/elements/bd_rocket.txt rename to docs/elements/bdx_rocket.txt diff --git a/docs/elements/bd_rocket_launcher.txt b/docs/elements/bdx_rocket_launcher.txt similarity index 100% rename from docs/elements/bd_rocket_launcher.txt rename to docs/elements/bdx_rocket_launcher.txt diff --git a/docs/elements/bd_sand.txt b/docs/elements/bdx_sand.txt similarity index 100% rename from docs/elements/bd_sand.txt rename to docs/elements/bdx_sand.txt diff --git a/docs/elements/bd_sand_ball.txt b/docs/elements/bdx_sand_ball.txt similarity index 100% rename from docs/elements/bd_sand_ball.txt rename to docs/elements/bdx_sand_ball.txt diff --git a/docs/elements/bd_sand_glued.txt b/docs/elements/bdx_sand_glued.txt similarity index 100% rename from docs/elements/bd_sand_glued.txt rename to docs/elements/bdx_sand_glued.txt diff --git a/docs/elements/bd_sand_loose.txt b/docs/elements/bdx_sand_loose.txt similarity index 100% rename from docs/elements/bd_sand_loose.txt rename to docs/elements/bdx_sand_loose.txt diff --git a/docs/elements/bd_sand_sloped.txt b/docs/elements/bdx_sand_sloped.txt similarity index 100% rename from docs/elements/bd_sand_sloped.txt rename to docs/elements/bdx_sand_sloped.txt diff --git a/docs/elements/bd_skeleton.txt b/docs/elements/bdx_skeleton.txt similarity index 100% rename from docs/elements/bd_skeleton.txt rename to docs/elements/bdx_skeleton.txt diff --git a/docs/elements/bd_slime.txt b/docs/elements/bdx_slime.txt similarity index 100% rename from docs/elements/bd_slime.txt rename to docs/elements/bdx_slime.txt diff --git a/docs/elements/bd_steelwall.txt b/docs/elements/bdx_steelwall.txt similarity index 100% rename from docs/elements/bd_steelwall.txt rename to docs/elements/bdx_steelwall.txt diff --git a/docs/elements/bd_steelwall_diggable.txt b/docs/elements/bdx_steelwall_diggable.txt similarity index 100% rename from docs/elements/bd_steelwall_diggable.txt rename to docs/elements/bdx_steelwall_diggable.txt diff --git a/docs/elements/bd_steelwall_explodable.txt b/docs/elements/bdx_steelwall_explodable.txt similarity index 100% rename from docs/elements/bd_steelwall_explodable.txt rename to docs/elements/bdx_steelwall_explodable.txt diff --git a/docs/elements/bd_steelwall_sloped.txt b/docs/elements/bdx_steelwall_sloped.txt similarity index 100% rename from docs/elements/bd_steelwall_sloped.txt rename to docs/elements/bdx_steelwall_sloped.txt diff --git a/docs/elements/bd_stonefly.txt b/docs/elements/bdx_stonefly.txt similarity index 100% rename from docs/elements/bd_stonefly.txt rename to docs/elements/bdx_stonefly.txt diff --git a/docs/elements/bd_sweet.txt b/docs/elements/bdx_sweet.txt similarity index 100% rename from docs/elements/bd_sweet.txt rename to docs/elements/bdx_sweet.txt diff --git a/docs/elements/bd_teleporter.txt b/docs/elements/bdx_teleporter.txt similarity index 100% rename from docs/elements/bd_teleporter.txt rename to docs/elements/bdx_teleporter.txt diff --git a/docs/elements/bd_time_penalty.txt b/docs/elements/bdx_time_penalty.txt similarity index 100% rename from docs/elements/bd_time_penalty.txt rename to docs/elements/bdx_time_penalty.txt diff --git a/docs/elements/bd_trapped_diamond.txt b/docs/elements/bdx_trapped_diamond.txt similarity index 100% rename from docs/elements/bd_trapped_diamond.txt rename to docs/elements/bdx_trapped_diamond.txt diff --git a/docs/elements/bd_voodoo_doll.txt b/docs/elements/bdx_voodoo_doll.txt similarity index 100% rename from docs/elements/bd_voodoo_doll.txt rename to docs/elements/bdx_voodoo_doll.txt diff --git a/docs/elements/bd_waiting_rock.txt b/docs/elements/bdx_waiting_rock.txt similarity index 100% rename from docs/elements/bd_waiting_rock.txt rename to docs/elements/bdx_waiting_rock.txt diff --git a/docs/elements/bdx_wall.txt b/docs/elements/bdx_wall.txt new file mode 100644 index 00000000..b8bb46cf --- /dev/null +++ b/docs/elements/bdx_wall.txt @@ -0,0 +1,5 @@ +This is a normal wall. It cannot be moved and cannot be passed by the player, +but explosion will destroy it. + +Even though it may not look like that, objects that can fall will slip off this +wall to the left or to the right. diff --git a/docs/elements/bd_wall_diamond.txt b/docs/elements/bdx_wall_diamond.txt similarity index 100% rename from docs/elements/bd_wall_diamond.txt rename to docs/elements/bdx_wall_diamond.txt diff --git a/docs/elements/bd_wall_diggable.txt b/docs/elements/bdx_wall_diggable.txt similarity index 100% rename from docs/elements/bd_wall_diggable.txt rename to docs/elements/bdx_wall_diggable.txt diff --git a/docs/elements/bd_wall_key.txt b/docs/elements/bdx_wall_key.txt similarity index 100% rename from docs/elements/bd_wall_key.txt rename to docs/elements/bdx_wall_key.txt diff --git a/docs/elements/bd_wall_sloped.txt b/docs/elements/bdx_wall_sloped.txt similarity index 100% rename from docs/elements/bd_wall_sloped.txt rename to docs/elements/bdx_wall_sloped.txt diff --git a/docs/elements/bd_water.txt b/docs/elements/bdx_water.txt similarity index 100% rename from docs/elements/bd_water.txt rename to docs/elements/bdx_water.txt -- 2.34.1 From 02ff4fe225b552d69ddd7ba7d51787f473389dd3 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 6 May 2024 00:47:29 +0200 Subject: [PATCH 06/16] fixed default graphics for growing or exploding BD engine elements --- src/conf_gfx.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/conf_gfx.c b/src/conf_gfx.c index 6263049d..71d13cd0 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -103,6 +103,20 @@ struct ConfigInfo image_config[] = // images for Boulder Dash style elements and actions + { "[bdx_default].exploding", "RocksElements.png" }, + { "[bdx_default].exploding.xpos", "0" }, + { "[bdx_default].exploding.ypos", "4" }, + { "[bdx_default].exploding.frames", "8" }, + { "[bdx_default].exploding.delay", "5" }, + { "[bdx_default].exploding.anim_mode", "linear" }, + + { "[bdx_default].growing", "RocksElements.png" }, + { "[bdx_default].growing.xpos", "0" }, + { "[bdx_default].growing.ypos", "4" }, + { "[bdx_default].growing.frames", "8" }, + { "[bdx_default].growing.delay", "4" }, + { "[bdx_default].growing.anim_mode", "linear" }, + { "bdx_player", UNDEFINED_FILENAME }, { "bdx_player.clone_from", "player_1" }, { "bdx_player.down", UNDEFINED_FILENAME }, @@ -153,8 +167,6 @@ struct ConfigInfo image_config[] = { "bdx_player.snapping.left.clone_from", "player_1.snapping.left" }, { "bdx_player.snapping.right", UNDEFINED_FILENAME }, { "bdx_player.snapping.right.clone_from", "player_1.snapping.right" }, - { "bdx_player.growing", UNDEFINED_FILENAME }, - { "bdx_player.growing.clone_from", "[default].exploding" }, { "bdx_player_glued", UNDEFINED_FILENAME }, { "bdx_player_glued.clone_from", "bdx_player" }, -- 2.34.1 From 656a83b1c74df5c481f83c3815942fa952bbf8a1 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 6 May 2024 00:56:41 +0200 Subject: [PATCH 07/16] changed order of BD style graphics and sounds (no functional change) --- src/conf_gfx.c | 376 +++++++++++++++++++++++++------------------------ src/conf_snd.c | 40 +++--- 2 files changed, 210 insertions(+), 206 deletions(-) diff --git a/src/conf_gfx.c b/src/conf_gfx.c index 71d13cd0..fa517c7e 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -103,93 +103,6 @@ struct ConfigInfo image_config[] = // images for Boulder Dash style elements and actions - { "[bdx_default].exploding", "RocksElements.png" }, - { "[bdx_default].exploding.xpos", "0" }, - { "[bdx_default].exploding.ypos", "4" }, - { "[bdx_default].exploding.frames", "8" }, - { "[bdx_default].exploding.delay", "5" }, - { "[bdx_default].exploding.anim_mode", "linear" }, - - { "[bdx_default].growing", "RocksElements.png" }, - { "[bdx_default].growing.xpos", "0" }, - { "[bdx_default].growing.ypos", "4" }, - { "[bdx_default].growing.frames", "8" }, - { "[bdx_default].growing.delay", "4" }, - { "[bdx_default].growing.anim_mode", "linear" }, - - { "bdx_player", UNDEFINED_FILENAME }, - { "bdx_player.clone_from", "player_1" }, - { "bdx_player.down", UNDEFINED_FILENAME }, - { "bdx_player.down.clone_from", "player_1.down" }, - { "bdx_player.up", UNDEFINED_FILENAME }, - { "bdx_player.up.clone_from", "player_1.up" }, - { "bdx_player.left", UNDEFINED_FILENAME }, - { "bdx_player.left.clone_from", "player_1.left" }, - { "bdx_player.right", UNDEFINED_FILENAME }, - { "bdx_player.right.clone_from", "player_1.right" }, - { "bdx_player.moving.down", UNDEFINED_FILENAME }, - { "bdx_player.moving.down.clone_from", "player_1.moving.down" }, - { "bdx_player.moving.up", UNDEFINED_FILENAME }, - { "bdx_player.moving.up.clone_from", "player_1.moving.up" }, - { "bdx_player.moving.left", UNDEFINED_FILENAME }, - { "bdx_player.moving.left.clone_from", "player_1.moving.left" }, - { "bdx_player.moving.right", UNDEFINED_FILENAME }, - { "bdx_player.moving.right.clone_from", "player_1.moving.right" }, - { "bdx_player.digging.down", UNDEFINED_FILENAME }, - { "bdx_player.digging.down.clone_from", "player_1.digging.down" }, - { "bdx_player.digging.up", UNDEFINED_FILENAME }, - { "bdx_player.digging.up.clone_from", "player_1.digging.up" }, - { "bdx_player.digging.left", UNDEFINED_FILENAME }, - { "bdx_player.digging.left.clone_from", "player_1.digging.left" }, - { "bdx_player.digging.right", UNDEFINED_FILENAME }, - { "bdx_player.digging.right.clone_from", "player_1.digging.right" }, - { "bdx_player.collecting.down", UNDEFINED_FILENAME }, - { "bdx_player.collecting.down.clone_from", "player_1.collecting.down" }, - { "bdx_player.collecting.up", UNDEFINED_FILENAME }, - { "bdx_player.collecting.up.clone_from", "player_1.collecting.up" }, - { "bdx_player.collecting.left", UNDEFINED_FILENAME }, - { "bdx_player.collecting.left.clone_from", "player_1.collecting.left" }, - { "bdx_player.collecting.right", UNDEFINED_FILENAME }, - { "bdx_player.collecting.right.clone_from", "player_1.collecting.right" }, - { "bdx_player.pushing.down", UNDEFINED_FILENAME }, - { "bdx_player.pushing.down.clone_from", "player_1.pushing.down" }, - { "bdx_player.pushing.up", UNDEFINED_FILENAME }, - { "bdx_player.pushing.up.clone_from", "player_1.pushing.up" }, - { "bdx_player.pushing.left", UNDEFINED_FILENAME }, - { "bdx_player.pushing.left.clone_from", "player_1.pushing.left" }, - { "bdx_player.pushing.right", UNDEFINED_FILENAME }, - { "bdx_player.pushing.right.clone_from", "player_1.pushing.right" }, - { "bdx_player.snapping.down", UNDEFINED_FILENAME }, - { "bdx_player.snapping.down.clone_from", "player_1.snapping.down" }, - { "bdx_player.snapping.up", UNDEFINED_FILENAME }, - { "bdx_player.snapping.up.clone_from", "player_1.snapping.up" }, - { "bdx_player.snapping.left", UNDEFINED_FILENAME }, - { "bdx_player.snapping.left.clone_from", "player_1.snapping.left" }, - { "bdx_player.snapping.right", UNDEFINED_FILENAME }, - { "bdx_player.snapping.right.clone_from", "player_1.snapping.right" }, - - { "bdx_player_glued", UNDEFINED_FILENAME }, - { "bdx_player_glued.clone_from", "bdx_player" }, - { "bdx_player_glued.EDITOR", "RocksBD2.png" }, - { "bdx_player_glued.EDITOR.xpos", "1" }, - { "bdx_player_glued.EDITOR.ypos", "0" }, - - { "bdx_player_with_bomb", "RocksBD.png" }, - { "bdx_player_with_bomb.xpos", "8" }, - { "bdx_player_with_bomb.ypos", "7" }, - { "bdx_player_with_bomb.frames", "1" }, - - { "bdx_player_with_rocket_launcher", "RocksBD.png" }, - { "bdx_player_with_rocket_launcher.xpos", "10" }, - { "bdx_player_with_rocket_launcher.ypos", "7" }, - { "bdx_player_with_rocket_launcher.frames", "1" }, - - { "bdx_player_stirring", "RocksBD.png" }, - { "bdx_player_stirring.xpos", "8" }, - { "bdx_player_stirring.ypos", "8" }, - { "bdx_player_stirring.frames", "4" }, - { "bdx_player_stirring.delay", "4" }, - { "bd_wall", "RocksDC.png" }, { "bd_wall.xpos", "12" }, { "bd_wall.ypos", "9" }, @@ -198,11 +111,6 @@ struct ConfigInfo image_config[] = { "bd_wall.EDITOR.xpos", "14" }, { "bd_wall.EDITOR.ypos", "13" }, - { "bdx_wall", UNDEFINED_FILENAME }, - { "bdx_wall.clone_from", "bd_wall" }, - { "bdx_wall.EDITOR", UNDEFINED_FILENAME }, - { "bdx_wall.EDITOR.clone_from", "bd_wall.EDITOR" }, - { "bd_rock", "RocksDC.png" }, { "bd_rock.xpos", "12" }, { "bd_rock.ypos", "10" }, @@ -235,22 +143,6 @@ struct ConfigInfo image_config[] = { "bd_rock.pushing.right.start_frame", "1" }, { "bd_rock.pushing.right.delay", "2" }, - { "bdx_rock", UNDEFINED_FILENAME }, - { "bdx_rock.clone_from", "bd_rock" }, - { "bdx_rock.EDITOR", UNDEFINED_FILENAME }, - { "bdx_rock.EDITOR.clone_from", "bd_rock.EDITOR" }, - { "bdx_rock.moving.left", UNDEFINED_FILENAME }, - { "bdx_rock.moving.left.clone_from", "bd_rock.moving.left" }, - { "bdx_rock.moving.right", UNDEFINED_FILENAME }, - { "bdx_rock.moving.right.clone_from", "bd_rock.moving.right" }, - { "bdx_rock.pushing.left", UNDEFINED_FILENAME }, - { "bdx_rock.pushing.left.clone_from", "bd_rock.pushing.left" }, - { "bdx_rock.pushing.right", UNDEFINED_FILENAME }, - { "bdx_rock.pushing.right.clone_from", "bd_rock.pushing.right" }, - { "bdx_rock.falling.EDITOR", "RocksBD2.png" }, - { "bdx_rock.falling.EDITOR.xpos", "1" }, - { "bdx_rock.falling.EDITOR.ypos", "3" }, - { "bd_diamond", "RocksElements.png" }, { "bd_diamond.xpos", "0" }, { "bd_diamond.ypos", "10" }, @@ -273,18 +165,6 @@ struct ConfigInfo image_config[] = { "bd_diamond.collecting.frames", "7" }, { "bd_diamond.collecting.anim_mode", "linear" }, - { "bdx_diamond", UNDEFINED_FILENAME }, - { "bdx_diamond.clone_from", "bd_diamond" }, - { "bdx_diamond.moving", UNDEFINED_FILENAME }, - { "bdx_diamond.moving.clone_from", "bd_diamond.moving" }, - { "bdx_diamond.falling", UNDEFINED_FILENAME }, - { "bdx_diamond.falling.clone_from", "bd_diamond.falling" }, - { "bdx_diamond.collecting", UNDEFINED_FILENAME }, - { "bdx_diamond.collecting.clone_from", "bd_diamond.collecting" }, - { "bdx_diamond.falling.EDITOR", "RocksBD2.png" }, - { "bdx_diamond.falling.EDITOR.xpos", "0" }, - { "bdx_diamond.falling.EDITOR.ypos", "3" }, - { "bd_magic_wall", "RocksElements.png" }, { "bd_magic_wall.xpos", "12" }, { "bd_magic_wall.ypos", "10" }, @@ -322,11 +202,6 @@ struct ConfigInfo image_config[] = { "bd_magic_wall_dead.ypos", "10" }, { "bd_magic_wall_dead.frames", "1" }, - { "bdx_magic_wall", UNDEFINED_FILENAME }, - { "bdx_magic_wall.clone_from", "bd_magic_wall" }, - { "bdx_magic_wall.active", UNDEFINED_FILENAME }, - { "bdx_magic_wall.active.clone_from", "bd_magic_wall.active" }, - { "bd_amoeba", "RocksElements.png" }, { "bd_amoeba.xpos", "8" }, { "bd_amoeba.ypos", "6" }, @@ -336,12 +211,6 @@ struct ConfigInfo image_config[] = { "bd_amoeba.EDITOR.xpos", "8" }, { "bd_amoeba.EDITOR.ypos", "7" }, - { "bdx_amoeba_1", UNDEFINED_FILENAME }, - { "bdx_amoeba_1.clone_from", "bd_amoeba" }, - - { "bdx_amoeba_2", UNDEFINED_FILENAME }, - { "bdx_amoeba_2.clone_from", "bd_amoeba" }, - { "bd_butterfly", "RocksElements.png" }, { "bd_butterfly.xpos", "4" }, { "bd_butterfly.ypos", "12" }, @@ -390,6 +259,195 @@ struct ConfigInfo image_config[] = { "bd_butterfly.down.EDITOR.xpos", "11" }, { "bd_butterfly.down.EDITOR.ypos", "12" }, + { "bd_firefly", "RocksElements.png" }, + { "bd_firefly.xpos", "6" }, + { "bd_firefly.ypos", "12" }, + { "bd_firefly.frames", "2" }, + { "bd_firefly.anim_mode", "pingpong" }, + { "bd_firefly.delay", "4" }, + { "bd_firefly.global_sync", "true" }, + { "bd_firefly.right", "RocksElements.png" }, + { "bd_firefly.right.xpos", "6" }, + { "bd_firefly.right.ypos", "12" }, + { "bd_firefly.right.frames", "2" }, + { "bd_firefly.right.anim_mode", "pingpong" }, + { "bd_firefly.right.delay", "4" }, + { "bd_firefly.right.global_sync", "true" }, + { "bd_firefly.right.EDITOR", "RocksElements.png" }, + { "bd_firefly.right.EDITOR.xpos", "12" }, + { "bd_firefly.right.EDITOR.ypos", "12" }, + { "bd_firefly.up", "RocksElements.png" }, + { "bd_firefly.up.xpos", "6" }, + { "bd_firefly.up.ypos", "12" }, + { "bd_firefly.up.frames", "2" }, + { "bd_firefly.up.anim_mode", "pingpong" }, + { "bd_firefly.up.delay", "4" }, + { "bd_firefly.up.global_sync", "true" }, + { "bd_firefly.up.EDITOR", "RocksElements.png" }, + { "bd_firefly.up.EDITOR.xpos", "13" }, + { "bd_firefly.up.EDITOR.ypos", "12" }, + { "bd_firefly.left", "RocksElements.png" }, + { "bd_firefly.left.xpos", "6" }, + { "bd_firefly.left.ypos", "12" }, + { "bd_firefly.left.frames", "2" }, + { "bd_firefly.left.anim_mode", "pingpong" }, + { "bd_firefly.left.delay", "4" }, + { "bd_firefly.left.global_sync", "true" }, + { "bd_firefly.left.EDITOR", "RocksElements.png" }, + { "bd_firefly.left.EDITOR.xpos", "14" }, + { "bd_firefly.left.EDITOR.ypos", "12" }, + { "bd_firefly.down", "RocksElements.png" }, + { "bd_firefly.down.xpos", "6" }, + { "bd_firefly.down.ypos", "12" }, + { "bd_firefly.down.frames", "2" }, + { "bd_firefly.down.anim_mode", "pingpong" }, + { "bd_firefly.down.delay", "4" }, + { "bd_firefly.down.global_sync", "true" }, + { "bd_firefly.down.EDITOR", "RocksElements.png" }, + { "bd_firefly.down.EDITOR.xpos", "15" }, + { "bd_firefly.down.EDITOR.ypos", "12" }, + + { "bd_expandable_wall", "RocksElements.png" }, + { "bd_expandable_wall.xpos", "5" }, + { "bd_expandable_wall.ypos", "9" }, + { "bd_expandable_wall.frames", "1" }, + { "bd_expandable_wall.EDITOR", "RocksDC.png" }, + { "bd_expandable_wall.EDITOR.xpos", "15" }, + { "bd_expandable_wall.EDITOR.ypos", "15" }, + + // images for Boulder Dash style elements and actions (native game engine) + + { "[bdx_default].exploding", "RocksElements.png" }, + { "[bdx_default].exploding.xpos", "0" }, + { "[bdx_default].exploding.ypos", "4" }, + { "[bdx_default].exploding.frames", "8" }, + { "[bdx_default].exploding.delay", "5" }, + { "[bdx_default].exploding.anim_mode", "linear" }, + + { "[bdx_default].growing", "RocksElements.png" }, + { "[bdx_default].growing.xpos", "0" }, + { "[bdx_default].growing.ypos", "4" }, + { "[bdx_default].growing.frames", "8" }, + { "[bdx_default].growing.delay", "4" }, + { "[bdx_default].growing.anim_mode", "linear" }, + + { "bdx_player", UNDEFINED_FILENAME }, + { "bdx_player.clone_from", "player_1" }, + { "bdx_player.down", UNDEFINED_FILENAME }, + { "bdx_player.down.clone_from", "player_1.down" }, + { "bdx_player.up", UNDEFINED_FILENAME }, + { "bdx_player.up.clone_from", "player_1.up" }, + { "bdx_player.left", UNDEFINED_FILENAME }, + { "bdx_player.left.clone_from", "player_1.left" }, + { "bdx_player.right", UNDEFINED_FILENAME }, + { "bdx_player.right.clone_from", "player_1.right" }, + { "bdx_player.moving.down", UNDEFINED_FILENAME }, + { "bdx_player.moving.down.clone_from", "player_1.moving.down" }, + { "bdx_player.moving.up", UNDEFINED_FILENAME }, + { "bdx_player.moving.up.clone_from", "player_1.moving.up" }, + { "bdx_player.moving.left", UNDEFINED_FILENAME }, + { "bdx_player.moving.left.clone_from", "player_1.moving.left" }, + { "bdx_player.moving.right", UNDEFINED_FILENAME }, + { "bdx_player.moving.right.clone_from", "player_1.moving.right" }, + { "bdx_player.digging.down", UNDEFINED_FILENAME }, + { "bdx_player.digging.down.clone_from", "player_1.digging.down" }, + { "bdx_player.digging.up", UNDEFINED_FILENAME }, + { "bdx_player.digging.up.clone_from", "player_1.digging.up" }, + { "bdx_player.digging.left", UNDEFINED_FILENAME }, + { "bdx_player.digging.left.clone_from", "player_1.digging.left" }, + { "bdx_player.digging.right", UNDEFINED_FILENAME }, + { "bdx_player.digging.right.clone_from", "player_1.digging.right" }, + { "bdx_player.collecting.down", UNDEFINED_FILENAME }, + { "bdx_player.collecting.down.clone_from", "player_1.collecting.down" }, + { "bdx_player.collecting.up", UNDEFINED_FILENAME }, + { "bdx_player.collecting.up.clone_from", "player_1.collecting.up" }, + { "bdx_player.collecting.left", UNDEFINED_FILENAME }, + { "bdx_player.collecting.left.clone_from", "player_1.collecting.left" }, + { "bdx_player.collecting.right", UNDEFINED_FILENAME }, + { "bdx_player.collecting.right.clone_from", "player_1.collecting.right" }, + { "bdx_player.pushing.down", UNDEFINED_FILENAME }, + { "bdx_player.pushing.down.clone_from", "player_1.pushing.down" }, + { "bdx_player.pushing.up", UNDEFINED_FILENAME }, + { "bdx_player.pushing.up.clone_from", "player_1.pushing.up" }, + { "bdx_player.pushing.left", UNDEFINED_FILENAME }, + { "bdx_player.pushing.left.clone_from", "player_1.pushing.left" }, + { "bdx_player.pushing.right", UNDEFINED_FILENAME }, + { "bdx_player.pushing.right.clone_from", "player_1.pushing.right" }, + { "bdx_player.snapping.down", UNDEFINED_FILENAME }, + { "bdx_player.snapping.down.clone_from", "player_1.snapping.down" }, + { "bdx_player.snapping.up", UNDEFINED_FILENAME }, + { "bdx_player.snapping.up.clone_from", "player_1.snapping.up" }, + { "bdx_player.snapping.left", UNDEFINED_FILENAME }, + { "bdx_player.snapping.left.clone_from", "player_1.snapping.left" }, + { "bdx_player.snapping.right", UNDEFINED_FILENAME }, + { "bdx_player.snapping.right.clone_from", "player_1.snapping.right" }, + + { "bdx_player_glued", UNDEFINED_FILENAME }, + { "bdx_player_glued.clone_from", "bdx_player" }, + { "bdx_player_glued.EDITOR", "RocksBD2.png" }, + { "bdx_player_glued.EDITOR.xpos", "1" }, + { "bdx_player_glued.EDITOR.ypos", "0" }, + + { "bdx_player_with_bomb", "RocksBD.png" }, + { "bdx_player_with_bomb.xpos", "8" }, + { "bdx_player_with_bomb.ypos", "7" }, + { "bdx_player_with_bomb.frames", "1" }, + + { "bdx_player_with_rocket_launcher", "RocksBD.png" }, + { "bdx_player_with_rocket_launcher.xpos", "10" }, + { "bdx_player_with_rocket_launcher.ypos", "7" }, + { "bdx_player_with_rocket_launcher.frames", "1" }, + + { "bdx_player_stirring", "RocksBD.png" }, + { "bdx_player_stirring.xpos", "8" }, + { "bdx_player_stirring.ypos", "8" }, + { "bdx_player_stirring.frames", "4" }, + { "bdx_player_stirring.delay", "4" }, + + { "bdx_wall", UNDEFINED_FILENAME }, + { "bdx_wall.clone_from", "bd_wall" }, + { "bdx_wall.EDITOR", UNDEFINED_FILENAME }, + { "bdx_wall.EDITOR.clone_from", "bd_wall.EDITOR" }, + + { "bdx_rock", UNDEFINED_FILENAME }, + { "bdx_rock.clone_from", "bd_rock" }, + { "bdx_rock.EDITOR", UNDEFINED_FILENAME }, + { "bdx_rock.EDITOR.clone_from", "bd_rock.EDITOR" }, + { "bdx_rock.moving.left", UNDEFINED_FILENAME }, + { "bdx_rock.moving.left.clone_from", "bd_rock.moving.left" }, + { "bdx_rock.moving.right", UNDEFINED_FILENAME }, + { "bdx_rock.moving.right.clone_from", "bd_rock.moving.right" }, + { "bdx_rock.pushing.left", UNDEFINED_FILENAME }, + { "bdx_rock.pushing.left.clone_from", "bd_rock.pushing.left" }, + { "bdx_rock.pushing.right", UNDEFINED_FILENAME }, + { "bdx_rock.pushing.right.clone_from", "bd_rock.pushing.right" }, + { "bdx_rock.falling.EDITOR", "RocksBD2.png" }, + { "bdx_rock.falling.EDITOR.xpos", "1" }, + { "bdx_rock.falling.EDITOR.ypos", "3" }, + + { "bdx_diamond", UNDEFINED_FILENAME }, + { "bdx_diamond.clone_from", "bd_diamond" }, + { "bdx_diamond.moving", UNDEFINED_FILENAME }, + { "bdx_diamond.moving.clone_from", "bd_diamond.moving" }, + { "bdx_diamond.falling", UNDEFINED_FILENAME }, + { "bdx_diamond.falling.clone_from", "bd_diamond.falling" }, + { "bdx_diamond.collecting", UNDEFINED_FILENAME }, + { "bdx_diamond.collecting.clone_from", "bd_diamond.collecting" }, + { "bdx_diamond.falling.EDITOR", "RocksBD2.png" }, + { "bdx_diamond.falling.EDITOR.xpos", "0" }, + { "bdx_diamond.falling.EDITOR.ypos", "3" }, + + { "bdx_magic_wall", UNDEFINED_FILENAME }, + { "bdx_magic_wall.clone_from", "bd_magic_wall" }, + { "bdx_magic_wall.active", UNDEFINED_FILENAME }, + { "bdx_magic_wall.active.clone_from", "bd_magic_wall.active" }, + + { "bdx_amoeba_1", UNDEFINED_FILENAME }, + { "bdx_amoeba_1.clone_from", "bd_amoeba" }, + + { "bdx_amoeba_2", UNDEFINED_FILENAME }, + { "bdx_amoeba_2.clone_from", "bd_amoeba" }, + { "bdx_butterfly_1", UNDEFINED_FILENAME }, { "bdx_butterfly_1.clone_from", "bd_butterfly" }, { "bdx_butterfly_1.right", UNDEFINED_FILENAME }, @@ -449,54 +507,6 @@ struct ConfigInfo image_config[] = { "bdx_butterfly_2.down.EDITOR.xpos", "7" }, { "bdx_butterfly_2.down.EDITOR.ypos", "0" }, - { "bd_firefly", "RocksElements.png" }, - { "bd_firefly.xpos", "6" }, - { "bd_firefly.ypos", "12" }, - { "bd_firefly.frames", "2" }, - { "bd_firefly.anim_mode", "pingpong" }, - { "bd_firefly.delay", "4" }, - { "bd_firefly.global_sync", "true" }, - { "bd_firefly.right", "RocksElements.png" }, - { "bd_firefly.right.xpos", "6" }, - { "bd_firefly.right.ypos", "12" }, - { "bd_firefly.right.frames", "2" }, - { "bd_firefly.right.anim_mode", "pingpong" }, - { "bd_firefly.right.delay", "4" }, - { "bd_firefly.right.global_sync", "true" }, - { "bd_firefly.right.EDITOR", "RocksElements.png" }, - { "bd_firefly.right.EDITOR.xpos", "12" }, - { "bd_firefly.right.EDITOR.ypos", "12" }, - { "bd_firefly.up", "RocksElements.png" }, - { "bd_firefly.up.xpos", "6" }, - { "bd_firefly.up.ypos", "12" }, - { "bd_firefly.up.frames", "2" }, - { "bd_firefly.up.anim_mode", "pingpong" }, - { "bd_firefly.up.delay", "4" }, - { "bd_firefly.up.global_sync", "true" }, - { "bd_firefly.up.EDITOR", "RocksElements.png" }, - { "bd_firefly.up.EDITOR.xpos", "13" }, - { "bd_firefly.up.EDITOR.ypos", "12" }, - { "bd_firefly.left", "RocksElements.png" }, - { "bd_firefly.left.xpos", "6" }, - { "bd_firefly.left.ypos", "12" }, - { "bd_firefly.left.frames", "2" }, - { "bd_firefly.left.anim_mode", "pingpong" }, - { "bd_firefly.left.delay", "4" }, - { "bd_firefly.left.global_sync", "true" }, - { "bd_firefly.left.EDITOR", "RocksElements.png" }, - { "bd_firefly.left.EDITOR.xpos", "14" }, - { "bd_firefly.left.EDITOR.ypos", "12" }, - { "bd_firefly.down", "RocksElements.png" }, - { "bd_firefly.down.xpos", "6" }, - { "bd_firefly.down.ypos", "12" }, - { "bd_firefly.down.frames", "2" }, - { "bd_firefly.down.anim_mode", "pingpong" }, - { "bd_firefly.down.delay", "4" }, - { "bd_firefly.down.global_sync", "true" }, - { "bd_firefly.down.EDITOR", "RocksElements.png" }, - { "bd_firefly.down.EDITOR.xpos", "15" }, - { "bd_firefly.down.EDITOR.ypos", "12" }, - { "bdx_firefly_1", UNDEFINED_FILENAME }, { "bdx_firefly_1.clone_from", "bd_firefly" }, { "bdx_firefly_1.right", UNDEFINED_FILENAME }, @@ -3918,14 +3928,6 @@ struct ConfigInfo image_config[] = { "expandable_steelwall_any.EDITOR.xpos", "8" }, { "expandable_steelwall_any.EDITOR.ypos", "2" }, - { "bd_expandable_wall", "RocksElements.png" }, - { "bd_expandable_wall.xpos", "5" }, - { "bd_expandable_wall.ypos", "9" }, - { "bd_expandable_wall.frames", "1" }, - { "bd_expandable_wall.EDITOR", "RocksDC.png" }, - { "bd_expandable_wall.EDITOR.xpos", "15" }, - { "bd_expandable_wall.EDITOR.ypos", "15" }, - { "expandable_wall.growing.left", "RocksElements.png" }, { "expandable_wall.growing.left.xpos", "8" }, { "expandable_wall.growing.left.ypos", "10" }, diff --git a/src/conf_snd.c b/src/conf_snd.c index 1ce3e643..3b38b50d 100644 --- a/src/conf_snd.c +++ b/src/conf_snd.c @@ -43,22 +43,37 @@ struct ConfigInfo sound_config[] = { "[mm_default].exploding", "kabumm.wav" }, // sounds for Boulder Dash style elements and actions + { "bd_diamond.collecting", "pong.wav" }, + { "bd_diamond.falling", UNDEFINED_FILENAME }, + { "bd_diamond.impact", "pling.wav" }, + { "bd_rock.pushing", "pusch.wav" }, + { "bd_rock.falling", UNDEFINED_FILENAME }, + { "bd_rock.impact", "klopf.wav" }, + { "bd_magic_wall.activating", "quirk.wav" }, + { "bd_magic_wall.active", "miep.wav" }, + { "bd_magic_wall.filling", "quirk.wav" }, + { "bd_amoeba.waiting", UNDEFINED_FILENAME }, + { "bd_amoeba.growing", "amoebe.wav" }, + { "bd_amoeba.turning_to_gem", "pling.wav" }, + { "bd_amoeba.turning_to_gem.mode_loop", "false" }, + { "bd_amoeba.turning_to_rock", "klopf.wav" }, + { "bd_amoeba.turning_to_rock.mode_loop", "false" }, + { "bd_butterfly.moving", "klapper.wav" }, + { "bd_butterfly.waiting", "klapper.wav" }, + { "bd_firefly.moving", "roehr.wav" }, + { "bd_firefly.waiting", "roehr.wav" }, + + // sounds for Boulder Dash style elements and actions (native game engine) { "bdx_sand_ball.falling", UNDEFINED_FILENAME }, { "bdx_sand_ball.impact", "schlurf.wav" }, { "bdx_sand_loose.falling", UNDEFINED_FILENAME }, { "bdx_sand_loose.impact", "schlurf.wav" }, - { "bd_diamond.collecting", "pong.wav" }, - { "bd_diamond.falling", UNDEFINED_FILENAME }, - { "bd_diamond.impact", "pling.wav" }, { "bdx_diamond.collecting", "pong.wav" }, { "bdx_diamond.falling", UNDEFINED_FILENAME }, { "bdx_diamond.impact", "pling.wav" }, { "bdx_flying_diamond.collecting", "pong.wav" }, { "bdx_flying_diamond.falling", UNDEFINED_FILENAME }, { "bdx_flying_diamond.impact", "pling.wav" }, - { "bd_rock.pushing", "pusch.wav" }, - { "bd_rock.falling", UNDEFINED_FILENAME }, - { "bd_rock.impact", "klopf.wav" }, { "bdx_rock.pushing", "pusch.wav" }, { "bdx_rock.falling", UNDEFINED_FILENAME }, { "bdx_rock.impact", "klopf.wav" }, @@ -78,23 +93,10 @@ struct ConfigInfo sound_config[] = { "bdx_nitro_pack.impact", "klopf.wav" }, { "bdx_bomb.collecting", "pong.wav" }, { "bdx_bomb.dropping", "zisch.wav" }, - { "bd_magic_wall.activating", "quirk.wav" }, - { "bd_magic_wall.active", "miep.wav" }, - { "bd_magic_wall.filling", "quirk.wav" }, { "bdx_magic_wall.active", "miep.wav" }, - { "bd_amoeba.waiting", UNDEFINED_FILENAME }, - { "bd_amoeba.growing", "amoebe.wav" }, - { "bd_amoeba.turning_to_gem", "pling.wav" }, - { "bd_amoeba.turning_to_gem.mode_loop", "false" }, - { "bd_amoeba.turning_to_rock", "klopf.wav" }, - { "bd_amoeba.turning_to_rock.mode_loop", "false" }, { "bdx_amoeba_1.active", UNDEFINED_FILENAME }, { "bdx_amoeba_1.other", UNDEFINED_FILENAME }, { "bdx_amoeba_2.active", UNDEFINED_FILENAME }, - { "bd_butterfly.moving", "klapper.wav" }, - { "bd_butterfly.waiting", "klapper.wav" }, - { "bd_firefly.moving", "roehr.wav" }, - { "bd_firefly.waiting", "roehr.wav" }, { "bdx_pneumatic_hammer.active", "hammer.wav" }, { "bdx_covered.active", "jingle.wav" }, { "bdx_inbox.opening", "crash.wav" }, -- 2.34.1 From 3160ba4d4fc516cfa286a000439a288fa123c605 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 6 May 2024 01:25:13 +0200 Subject: [PATCH 08/16] added new graphics for BD engine amoeba elements --- graphics/gfx_classic/RocksBD.png | Bin 18650 -> 19072 bytes src/conf_gfx.c | 22 +++++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/graphics/gfx_classic/RocksBD.png b/graphics/gfx_classic/RocksBD.png index bb0b1bb8433209f2a3182cca5b3f3e1e49edc720..639080c5d183a3b44ae310da8efa0bfa39eacea4 100644 GIT binary patch delta 18373 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 LNkvXXu0mjf++jW; diff --git a/src/conf_gfx.c b/src/conf_gfx.c index fa517c7e..7262ac97 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -442,11 +442,19 @@ struct ConfigInfo image_config[] = { "bdx_magic_wall.active", UNDEFINED_FILENAME }, { "bdx_magic_wall.active.clone_from", "bd_magic_wall.active" }, - { "bdx_amoeba_1", UNDEFINED_FILENAME }, - { "bdx_amoeba_1.clone_from", "bd_amoeba" }, - - { "bdx_amoeba_2", UNDEFINED_FILENAME }, - { "bdx_amoeba_2.clone_from", "bd_amoeba" }, + { "bdx_amoeba_1", "RocksBD.png" }, + { "bdx_amoeba_1.xpos", "4" }, + { "bdx_amoeba_1.ypos", "11" }, + { "bdx_amoeba_1.frames", "4" }, + { "bdx_amoeba_1.delay", "4" }, + { "bdx_amoeba_1.anim_mode", "pingpong2" }, + + { "bdx_amoeba_2", "RocksBD.png" }, + { "bdx_amoeba_2.xpos", "8" }, + { "bdx_amoeba_2.ypos", "11" }, + { "bdx_amoeba_2.frames", "4" }, + { "bdx_amoeba_2.delay", "4" }, + { "bdx_amoeba_2.anim_mode", "pingpong2" }, { "bdx_butterfly_1", UNDEFINED_FILENAME }, { "bdx_butterfly_1.clone_from", "bd_butterfly" }, @@ -849,8 +857,8 @@ struct ConfigInfo image_config[] = { "bdx_nut.falling.EDITOR.ypos", "2" }, { "bdx_bladder", "RocksBD.png" }, - { "bdx_bladder.xpos", "4" }, - { "bdx_bladder.ypos", "11" }, + { "bdx_bladder.xpos", "8" }, + { "bdx_bladder.ypos", "12" }, { "bdx_bladder.frames", "4" }, { "bdx_bladder.delay", "4" }, { "bdx_bladder.anim_mode", "pingpong2" }, -- 2.34.1 From 9620ea48260115db4a5c3a8af93959b06c4768b3 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 6 May 2024 01:35:34 +0200 Subject: [PATCH 09/16] changed naming of "ECS/AGA" graphics setup to more generic "old/new" --- src/libgame/setup.c | 2 +- src/screens.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 65f0eec4..4104a042 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -4883,7 +4883,7 @@ char *getSetupValue(int type, void *value) break; case TYPE_ECS_AGA: - strcpy(value_string, (*(boolean *)value ? "AGA" : "ECS")); + strcpy(value_string, (*(boolean *)value ? "new" : "old")); break; case TYPE_KEY: diff --git a/src/screens.c b/src/screens.c index 2f53800c..a31e6121 100644 --- a/src/screens.c +++ b/src/screens.c @@ -7984,6 +7984,8 @@ static struct TokenInfo setup_info_engines[] = { TYPE_ENTER_LIST, &execSetupChooseGameEngineType, "Default Game Engine:" }, { TYPE_STRING, &game_engine_type_text, "" }, { TYPE_EMPTY, NULL, "" }, + { TYPE_ECS_AGA, &setup.prefer_aga_graphics, "Game Graphics Style:" }, + { TYPE_EMPTY, NULL, "" }, { TYPE_HEADLINE, NULL, "Boulder Dash" }, { TYPE_SWITCH, &setup.bd_skip_uncovering, "Skip (un)covering screen:" }, { TYPE_SWITCH, &setup.bd_skip_hatching, "Skip hatching player:" }, @@ -8005,7 +8007,6 @@ static struct TokenInfo setup_info_engines[] = { TYPE_EMPTY, NULL, "" }, { TYPE_HEADLINE, NULL, "Emerald Mine" }, { TYPE_SWITCH, &setup.forced_scroll_delay, "Scroll Delay:" }, - { TYPE_ECS_AGA, &setup.prefer_aga_graphics, "Amiga Graphics Chipset:" }, { TYPE_SWITCH, &setup.prefer_lowpass_sounds, "Low-Pass Filter Sounds:" }, { TYPE_SWITCH, &setup.prefer_extra_panel_items,"Show Dynamite and Keys:" }, { TYPE_EMPTY, NULL, "" }, @@ -10323,7 +10324,7 @@ static struct SCREEN_CTRL_ID_SWITCH_ECS_AGA, SCREEN_MASK_MAIN, GD_EVENT_RELEASED | GD_EVENT_OFF_BORDERS, - FALSE, "switch ECS/AGA chipset" + FALSE, "switch old/new graphics" }, { IMG_MENU_BUTTON_TOUCH_BACK, IMG_MENU_BUTTON_TOUCH_BACK, -1, -- 2.34.1 From 9136de29eeefa86ceff295c76baf6eefb93b1a21 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Tue, 7 May 2024 23:58:11 +0200 Subject: [PATCH 10/16] added functions to check if native BD cave or caveset has levels --- src/game_bd/bd_cave.c | 57 +++++++++++++++++++++++++++++++++++++++++++ src/game_bd/bd_cave.h | 3 +++ src/game_bd/main_bd.c | 4 ++- 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/game_bd/bd_cave.c b/src/game_bd/bd_cave.c index d946bac4..6a22a637 100644 --- a/src/game_bd/bd_cave.c +++ b/src/game_bd/bd_cave.c @@ -1678,3 +1678,60 @@ unsigned int gd_cave_adler_checksum(GdCave *cave) gd_cave_adler_checksum_more(cave, &a, &b); return (b << 16) + a; } + +boolean gd_cave_has_levels(GdCave *cave) +{ + GdCave c = *cave; + int *cave_level_value[] = + { + c.level_diamonds, + c.level_speed, + c.level_ckdelay, + c.level_time, + c.level_magic_wall_time, + c.level_amoeba_time, + c.level_amoeba_threshold, + c.level_amoeba_2_time, + c.level_amoeba_2_threshold, + c.level_slime_permeability, + c.level_slime_permeability_c64, + c.level_slime_seed_c64, + c.level_hatching_delay_frame, + c.level_hatching_delay_time, + c.level_bonus_time, + c.level_penalty_time, + + NULL + }; + int i, j; + + for (i = 0; cave_level_value[i] != NULL; i++) + for (j = 1; j < 5; j++) + if (cave_level_value[i][j] != cave_level_value[i][0]) + return TRUE; + + for (j = 1; j < 5; j++) + if (cave->level_rand[j] != j && + cave->level_rand[j - 1] != j - 1 && + cave->level_rand[j] != cave->level_rand[0]) + return TRUE; + + for (j = 1; j < 5; j++) + if (cave->level_timevalue[j] != j + 1 && + cave->level_timevalue[j - 1] != j && + cave->level_timevalue[j] != cave->level_timevalue[0]) + return TRUE; + + return FALSE; +} + +boolean gd_caveset_has_levels(void) +{ + List *iter; + + for (iter = gd_caveset; iter != NULL; iter = iter->next) + if (gd_cave_has_levels((GdCave *)iter->data)) + return TRUE; + + return FALSE; +} diff --git a/src/game_bd/bd_cave.h b/src/game_bd/bd_cave.h index aea976e8..1a85776a 100644 --- a/src/game_bd/bd_cave.h +++ b/src/game_bd/bd_cave.h @@ -721,4 +721,7 @@ void gd_replay_store_movement(GdReplay *replay, GdDirection player_move, boolean unsigned int gd_cave_adler_checksum(GdCave *cave); void gd_cave_adler_checksum_more(GdCave *cave, unsigned int *a, unsigned int *b); +boolean gd_cave_has_levels(GdCave *cave); +boolean gd_caveset_has_levels(void); + #endif // BD_CAVE_H diff --git a/src/game_bd/main_bd.c b/src/game_bd/main_bd.c index 25eb0631..f69f440e 100644 --- a/src/game_bd/main_bd.c +++ b/src/game_bd/main_bd.c @@ -183,7 +183,9 @@ boolean SaveNativeLevel_BD(char *filename) void DumpLevelset_BD(void) { - Print("Number of levels: %d\n", 5 * gd_caveset_count()); + int num_levels_per_cave = (gd_caveset_has_levels() ? 5 : 1); + + Print("Number of levels: %d\n", num_levels_per_cave * gd_caveset_count()); Print("First level number: %d\n", 1); } -- 2.34.1 From eb50550a874e978f61179b0f6f2d681a006b23f9 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Wed, 8 May 2024 01:05:17 +0200 Subject: [PATCH 11/16] added fast uncovering of native BD games when started from editor --- src/editor.c | 5 +++++ src/editor.h | 2 ++ src/game_bd/import_bd.h | 2 ++ src/game_bd/main_bd.c | 4 +++- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/editor.c b/src/editor.c index c6f6d7bd..0ab57221 100644 --- a/src/editor.c +++ b/src/editor.c @@ -7389,6 +7389,11 @@ static struct XY xy_directions[] = // functions // ---------------------------------------------------------------------------- +boolean isLevelEditorTestGame(void) +{ + return level_editor_test_game; +} + static int getMaxInfoTextLength(void) { return (SXSIZE / getFontWidth(INFOTEXT_FONT)); diff --git a/src/editor.h b/src/editor.h index 1b674331..96fe6f29 100644 --- a/src/editor.h +++ b/src/editor.h @@ -14,6 +14,8 @@ #include "main.h" +boolean isLevelEditorTestGame(void); + void CreateLevelEditorGadgets(void); void FreeLevelEditorGadgets(void); void UnmapLevelEditorGadgets(void); diff --git a/src/game_bd/import_bd.h b/src/game_bd/import_bd.h index 199492ce..ace426db 100644 --- a/src/game_bd/import_bd.h +++ b/src/game_bd/import_bd.h @@ -38,4 +38,6 @@ byte *TapePlayAction_BD(void); byte *TapeCorrectAction_BD(byte *); boolean TapeIsPlaying_ReplayBD(void); +boolean isLevelEditorTestGame(void); + #endif // IMPORT_BD_H diff --git a/src/game_bd/main_bd.c b/src/game_bd/main_bd.c index f69f440e..06ecfd04 100644 --- a/src/game_bd/main_bd.c +++ b/src/game_bd/main_bd.c @@ -356,8 +356,10 @@ void InitGameEngine_BD(void) // when skipping uncovering, continue with uncovered playfield if (setup.bd_skip_uncovering) game_bd.game->state_counter = GAME_INT_UNCOVER_ALL + 1; + else if (isLevelEditorTestGame()) + game_bd.game->state_counter = GAME_INT_UNCOVER_ALL - 8; - if (setup.bd_skip_uncovering) + if (setup.bd_skip_uncovering || isLevelEditorTestGame()) gd_scroll(game_bd.game, TRUE, TRUE); ClearRectangle(gd_screen_bitmap, 0, 0, SXSIZE, SYSIZE); -- 2.34.1 From 72baf2035efe4643ddafab987670953402ef186a Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Wed, 8 May 2024 21:49:45 +0200 Subject: [PATCH 12/16] version number set to 4.4.0.0-test-1 --- src/main.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.h b/src/main.h index 9d02a4fb..309229ee 100644 --- a/src/main.h +++ b/src/main.h @@ -3023,7 +3023,7 @@ enum #define PROGRAM_VERSION_MAJOR 4 #define PROGRAM_VERSION_MINOR 0 #define PROGRAM_VERSION_PATCH 0 -#define PROGRAM_VERSION_EXTRA "" +#define PROGRAM_VERSION_EXTRA "-test-1" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" -- 2.34.1 From f8089296d798fe0cc07aef4789f3b049730f9daa Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Thu, 9 May 2024 00:14:49 +0200 Subject: [PATCH 13/16] fixed wrong sound position in BD engine --- src/game_bd/bd_caveengine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game_bd/bd_caveengine.c b/src/game_bd/bd_caveengine.c index 2793d26f..ee1b4ee2 100644 --- a/src/game_bd/bd_caveengine.c +++ b/src/game_bd/bd_caveengine.c @@ -3633,7 +3633,7 @@ void gd_cave_iterate(GdCave *cave, GdDirection player_move, boolean player_fire, { if ((amoeba_count > 0 && cave->amoeba_state == GD_AM_AWAKE) || (amoeba_2_count > 0 && cave->amoeba_2_state == GD_AM_AWAKE)) - play_sound_of_element(cave, O_AMOEBA, x, y); + play_sound_of_element(cave, O_AMOEBA, -1, -1); } // pneumatic hammer sound - overrides everything. -- 2.34.1 From 78e022fbdda3c4d49bf5c051f8eea618b2a671e6 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Thu, 9 May 2024 00:15:25 +0200 Subject: [PATCH 14/16] fixed compiler warning --- src/game_bd/bd_random.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/game_bd/bd_random.c b/src/game_bd/bd_random.c index fc7998cb..b40ee4fc 100644 --- a/src/game_bd/bd_random.c +++ b/src/game_bd/bd_random.c @@ -40,11 +40,14 @@ #include #include +#include "main_bd.h" + #if defined(PLATFORM_WINDOWS) #include // for getpid() +#if (defined(_MSC_VER) && _MSC_VER >= 1400) || defined(__MINGW64_VERSION_MAJOR) +extern errno_t rand_s (unsigned int *randomValue); +#endif #endif - -#include "main_bd.h" /** -- 2.34.1 From 1f90d27f076aa0971ab263f1c6c7d387c6f9b9fd Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Thu, 9 May 2024 00:58:14 +0200 Subject: [PATCH 15/16] fixed some more compiler warnings --- src/libgame/types.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/libgame/types.h b/src/libgame/types.h index f7d8ad46..7dc2a7d4 100644 --- a/src/libgame/types.h +++ b/src/libgame/types.h @@ -76,12 +76,24 @@ typedef unsigned char byte; #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) +#if defined(__x86_64__) + +#define PTR_TO_INT(p) ((int) (long long) (p)) +#define PTR_TO_UINT(p) ((unsigned int) (unsigned long long) (p)) + +#define INT_TO_PTR(i) ((void *) (long long) (i)) +#define UINT_TO_PTR(u) ((void *) (unsigned long long) (u)) + +#else + #define PTR_TO_INT(p) ((int) (long) (p)) #define PTR_TO_UINT(p) ((unsigned int) (unsigned long) (p)) #define INT_TO_PTR(i) ((void *) (long) (i)) #define UINT_TO_PTR(u) ((void *) (unsigned long) (u)) +#endif + #define STRUCT_OFFSET(s, m) (offsetof(s, m)) -- 2.34.1 From ec6a3e4bedb7bf854defdcf58a7aabd8e5a75beb Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Thu, 9 May 2024 01:13:50 +0200 Subject: [PATCH 16/16] added support for BD game engine to Makefile for Android --- src/Android.mk | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Android.mk b/src/Android.mk index a644d93a..f076793a 100644 --- a/src/Android.mk +++ b/src/Android.mk @@ -1,7 +1,7 @@ # ============================================================================= # Rocks'n'Diamonds - McDuffin Strikes Back! # ----------------------------------------------------------------------------- -# (c) 1995-2014 by Artsoft Entertainment +# (c) 1995-2024 by Artsoft Entertainment # Holger Schemel # info@artsoft.org # https://www.artsoft.org/ @@ -46,6 +46,7 @@ LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \ libgame/image.c \ libgame/random.c \ libgame/hash.c \ + libgame/list.c \ libgame/http.c \ libgame/base64.c \ libgame/setup.c \ @@ -55,6 +56,19 @@ LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \ libgame/zip/iowin32.c \ libgame/zip/unzip.c \ libgame/zip/miniunz.c \ + game_bd/main_bd.c \ + game_bd/bd_cave.c \ + game_bd/bd_cavedb.c \ + game_bd/bd_caveengine.c \ + game_bd/bd_caveobject.c \ + game_bd/bd_bdcff.c \ + game_bd/bd_caveset.c \ + game_bd/bd_c64import.c \ + game_bd/bd_gameplay.c \ + game_bd/bd_graphics.c \ + game_bd/bd_colors.c \ + game_bd/bd_random.c \ + game_bd/bd_sound.c \ game_em/cave.c \ game_em/convert.c \ game_em/graphics.c \ -- 2.34.1