X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=df3c8b1344bb1e384b77a799c220e6245d4b97d8;hb=53eb378f7b2264e792eedf961575e07e3e587528;hp=b050950d7ff899a5894b31fcef21b98f9bc42aa9;hpb=fd72fbf3b83fc7215347e131aa6fc3c87ad7b4d5;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index b050950d..df3c8b13 100644 --- a/src/game.c +++ b/src/game.c @@ -89,7 +89,7 @@ // game panel display and control definitions #define GAME_PANEL_LEVEL_NUMBER 0 #define GAME_PANEL_GEMS 1 -#define GAME_PANEL_GEMS_TOTAL 2 +#define GAME_PANEL_GEMS_NEEDED 2 #define GAME_PANEL_GEMS_COLLECTED 3 #define GAME_PANEL_GEMS_SCORE 4 #define GAME_PANEL_INVENTORY_COUNT 5 @@ -246,8 +246,8 @@ static struct GamePanelControlInfo game_panel_controls[] = TYPE_INTEGER, }, { - GAME_PANEL_GEMS_TOTAL, - &game.panel.gems_total, + GAME_PANEL_GEMS_NEEDED, + &game.panel.gems_needed, TYPE_INTEGER, }, { @@ -1835,6 +1835,28 @@ static void InitPlayerField(int x, int y, int element, boolean init_game) } } +static void InitFieldForEngine_RND(int x, int y) +{ + int element = Tile[x][y]; + + // convert BD engine elements to corresponding R'n'D engine elements + element = (element == EL_BD_EMPTY ? EL_EMPTY : + element == EL_BD_INBOX ? EL_PLAYER_1 : + element == EL_BD_SAND ? EL_SAND : + element == EL_BD_STEELWALL ? EL_STEELWALL : + element == EL_BD_EXIT_CLOSED ? EL_EXIT_CLOSED : + element == EL_BD_EXIT_OPEN ? EL_EXIT_OPEN : + element); + + Tile[x][y] = element; +} + +static void InitFieldForEngine(int x, int y) +{ + if (level.game_engine_type == GAME_ENGINE_TYPE_RND) + InitFieldForEngine_RND(x, y); +} + static void InitField(int x, int y, boolean init_game) { int element = Tile[x][y]; @@ -2291,10 +2313,10 @@ static void UpdateGameControlValues(void) level.game_engine_type == GAME_ENGINE_TYPE_MM ? game_mm.kettles_still_needed : game.gems_still_needed); - int gems_total = level.gems_needed; + int gems_needed = level.gems_needed; int gems_collected = (level.game_engine_type == GAME_ENGINE_TYPE_BD ? game_bd.game->cave->diamonds_collected : - gems_total - gems); + gems_needed - gems); int gems_score = (level.game_engine_type == GAME_ENGINE_TYPE_BD ? game_bd.game->cave->diamond_value : level.score[SC_EMERALD]); @@ -2325,7 +2347,7 @@ static void UpdateGameControlValues(void) // used instead of "level_nr" (for network games) game_panel_controls[GAME_PANEL_LEVEL_NUMBER].value = levelset.level_nr; game_panel_controls[GAME_PANEL_GEMS].value = gems; - game_panel_controls[GAME_PANEL_GEMS_TOTAL].value = gems_total; + game_panel_controls[GAME_PANEL_GEMS_NEEDED].value = gems_needed; game_panel_controls[GAME_PANEL_GEMS_COLLECTED].value = gems_collected; game_panel_controls[GAME_PANEL_GEMS_SCORE].value = gems_score; @@ -4007,6 +4029,8 @@ void InitGame(void) SCAN_PLAYFIELD(x, y) { + InitFieldForEngine(x, y); + if (emulate_bd && !IS_BD_ELEMENT(Tile[x][y])) emulate_bd = FALSE; if (emulate_sp && !IS_SP_ELEMENT(Tile[x][y]))