added game panel values for native Boulder Dash game engine
authorHolger Schemel <info@artsoft.org>
Sat, 10 Feb 2024 23:52:29 +0000 (00:52 +0100)
committerHolger Schemel <info@artsoft.org>
Sun, 18 Feb 2024 14:57:40 +0000 (15:57 +0100)
src/conf_gfx.c
src/game.c
src/game.h

index 47353694ae0d32367d38569bf3e570cc9062fbed..dfea390125d89cf4b9acb80d85174f339eb078db 100644 (file)
@@ -9423,6 +9423,39 @@ struct ConfigInfo image_config[] =
   { "game.panel.gems.class",                   "none"                  },
   { "game.panel.gems.style",                   "none"                  },
 
+  { "game.panel.gems_total.x",                 "-1"                    },
+  { "game.panel.gems_total.y",                 "-1"                    },
+  { "game.panel.gems_total.align",             "left"                  },
+  { "game.panel.gems_total.valign",            "top"                   },
+  { "game.panel.gems_total.digits",            "-1"                    },
+  { "game.panel.gems_total.font",              "font.text_2"           },
+  { "game.panel.gems_total.draw_masked",       "true"                  },
+  { "game.panel.gems_total.draw_order",                "0"                     },
+  { "game.panel.gems_total.class",             "none"                  },
+  { "game.panel.gems_total.style",             "none"                  },
+
+  { "game.panel.gems_collected.x",             "-1"                    },
+  { "game.panel.gems_collected.y",             "-1"                    },
+  { "game.panel.gems_collected.align",         "left"                  },
+  { "game.panel.gems_collected.valign",                "top"                   },
+  { "game.panel.gems_collected.digits",                "-1"                    },
+  { "game.panel.gems_collected.font",          "font.text_2"           },
+  { "game.panel.gems_collected.draw_masked",   "true"                  },
+  { "game.panel.gems_collected.draw_order",    "0"                     },
+  { "game.panel.gems_collected.class",         "none"                  },
+  { "game.panel.gems_collected.style",         "none"                  },
+
+  { "game.panel.gems_score.x",                 "-1"                    },
+  { "game.panel.gems_score.y",                 "-1"                    },
+  { "game.panel.gems_score.align",             "left"                  },
+  { "game.panel.gems_score.valign",            "top"                   },
+  { "game.panel.gems_score.digits",            "-1"                    },
+  { "game.panel.gems_score.font",              "font.text_2"           },
+  { "game.panel.gems_score.draw_masked",       "true"                  },
+  { "game.panel.gems_score.draw_order",                "0"                     },
+  { "game.panel.gems_score.class",             "none"                  },
+  { "game.panel.gems_score.style",             "none"                  },
+
   { "game.panel.inventory_count.x",            "50"                    },
   { "game.panel.inventory_count.y",            "89"                    },
   { "game.panel.inventory_count.align",                "center"                },
index 789fb0159ba165689ba3b14896f58855ef41f7d0..e6e78cbf92b0c713ed52641422fb08e6c7c1254d 100644 (file)
 // game panel display and control definitions
 #define GAME_PANEL_LEVEL_NUMBER                        0
 #define GAME_PANEL_GEMS                                1
-#define GAME_PANEL_INVENTORY_COUNT             2
-#define GAME_PANEL_INVENTORY_FIRST_1           3
-#define GAME_PANEL_INVENTORY_FIRST_2           4
-#define GAME_PANEL_INVENTORY_FIRST_3           5
-#define GAME_PANEL_INVENTORY_FIRST_4           6
-#define GAME_PANEL_INVENTORY_FIRST_5           7
-#define GAME_PANEL_INVENTORY_FIRST_6           8
-#define GAME_PANEL_INVENTORY_FIRST_7           9
-#define GAME_PANEL_INVENTORY_FIRST_8           10
-#define GAME_PANEL_INVENTORY_LAST_1            11
-#define GAME_PANEL_INVENTORY_LAST_2            12
-#define GAME_PANEL_INVENTORY_LAST_3            13
-#define GAME_PANEL_INVENTORY_LAST_4            14
-#define GAME_PANEL_INVENTORY_LAST_5            15
-#define GAME_PANEL_INVENTORY_LAST_6            16
-#define GAME_PANEL_INVENTORY_LAST_7            17
-#define GAME_PANEL_INVENTORY_LAST_8            18
-#define GAME_PANEL_KEY_1                       19
-#define GAME_PANEL_KEY_2                       20
-#define GAME_PANEL_KEY_3                       21
-#define GAME_PANEL_KEY_4                       22
-#define GAME_PANEL_KEY_5                       23
-#define GAME_PANEL_KEY_6                       24
-#define GAME_PANEL_KEY_7                       25
-#define GAME_PANEL_KEY_8                       26
-#define GAME_PANEL_KEY_WHITE                   27
-#define GAME_PANEL_KEY_WHITE_COUNT             28
-#define GAME_PANEL_SCORE                       29
-#define GAME_PANEL_HIGHSCORE                   30
-#define GAME_PANEL_TIME                                31
-#define GAME_PANEL_TIME_HH                     32
-#define GAME_PANEL_TIME_MM                     33
-#define GAME_PANEL_TIME_SS                     34
-#define GAME_PANEL_TIME_ANIM                   35
-#define GAME_PANEL_HEALTH                      36
-#define GAME_PANEL_HEALTH_ANIM                 37
-#define GAME_PANEL_FRAME                       38
-#define GAME_PANEL_SHIELD_NORMAL               39
-#define GAME_PANEL_SHIELD_NORMAL_TIME          40
-#define GAME_PANEL_SHIELD_DEADLY               41
-#define GAME_PANEL_SHIELD_DEADLY_TIME          42
-#define GAME_PANEL_EXIT                                43
-#define GAME_PANEL_EMC_MAGIC_BALL              44
-#define GAME_PANEL_EMC_MAGIC_BALL_SWITCH       45
-#define GAME_PANEL_LIGHT_SWITCH                        46
-#define GAME_PANEL_LIGHT_SWITCH_TIME           47
-#define GAME_PANEL_TIMEGATE_SWITCH             48
-#define GAME_PANEL_TIMEGATE_SWITCH_TIME                49
-#define GAME_PANEL_SWITCHGATE_SWITCH           50
-#define GAME_PANEL_EMC_LENSES                  51
-#define GAME_PANEL_EMC_LENSES_TIME             52
-#define GAME_PANEL_EMC_MAGNIFIER               53
-#define GAME_PANEL_EMC_MAGNIFIER_TIME          54
-#define GAME_PANEL_BALLOON_SWITCH              55
-#define GAME_PANEL_DYNABOMB_NUMBER             56
-#define GAME_PANEL_DYNABOMB_SIZE               57
-#define GAME_PANEL_DYNABOMB_POWER              58
-#define GAME_PANEL_PENGUINS                    59
-#define GAME_PANEL_SOKOBAN_OBJECTS             60
-#define GAME_PANEL_SOKOBAN_FIELDS              61
-#define GAME_PANEL_ROBOT_WHEEL                 62
-#define GAME_PANEL_CONVEYOR_BELT_1             63
-#define GAME_PANEL_CONVEYOR_BELT_2             64
-#define GAME_PANEL_CONVEYOR_BELT_3             65
-#define GAME_PANEL_CONVEYOR_BELT_4             66
-#define GAME_PANEL_CONVEYOR_BELT_1_SWITCH      67
-#define GAME_PANEL_CONVEYOR_BELT_2_SWITCH      68
-#define GAME_PANEL_CONVEYOR_BELT_3_SWITCH      69
-#define GAME_PANEL_CONVEYOR_BELT_4_SWITCH      70
-#define GAME_PANEL_MAGIC_WALL                  71
-#define GAME_PANEL_MAGIC_WALL_TIME             72
-#define GAME_PANEL_GRAVITY_STATE               73
-#define GAME_PANEL_GRAPHIC_1                   74
-#define GAME_PANEL_GRAPHIC_2                   75
-#define GAME_PANEL_GRAPHIC_3                   76
-#define GAME_PANEL_GRAPHIC_4                   77
-#define GAME_PANEL_GRAPHIC_5                   78
-#define GAME_PANEL_GRAPHIC_6                   79
-#define GAME_PANEL_GRAPHIC_7                   80
-#define GAME_PANEL_GRAPHIC_8                   81
-#define GAME_PANEL_ELEMENT_1                   82
-#define GAME_PANEL_ELEMENT_2                   83
-#define GAME_PANEL_ELEMENT_3                   84
-#define GAME_PANEL_ELEMENT_4                   85
-#define GAME_PANEL_ELEMENT_5                   86
-#define GAME_PANEL_ELEMENT_6                   87
-#define GAME_PANEL_ELEMENT_7                   88
-#define GAME_PANEL_ELEMENT_8                   89
-#define GAME_PANEL_ELEMENT_COUNT_1             90
-#define GAME_PANEL_ELEMENT_COUNT_2             91
-#define GAME_PANEL_ELEMENT_COUNT_3             92
-#define GAME_PANEL_ELEMENT_COUNT_4             93
-#define GAME_PANEL_ELEMENT_COUNT_5             94
-#define GAME_PANEL_ELEMENT_COUNT_6             95
-#define GAME_PANEL_ELEMENT_COUNT_7             96
-#define GAME_PANEL_ELEMENT_COUNT_8             97
-#define GAME_PANEL_CE_SCORE_1                  98
-#define GAME_PANEL_CE_SCORE_2                  99
-#define GAME_PANEL_CE_SCORE_3                  100
-#define GAME_PANEL_CE_SCORE_4                  101
-#define GAME_PANEL_CE_SCORE_5                  102
-#define GAME_PANEL_CE_SCORE_6                  103
-#define GAME_PANEL_CE_SCORE_7                  104
-#define GAME_PANEL_CE_SCORE_8                  105
-#define GAME_PANEL_CE_SCORE_1_ELEMENT          106
-#define GAME_PANEL_CE_SCORE_2_ELEMENT          107
-#define GAME_PANEL_CE_SCORE_3_ELEMENT          108
-#define GAME_PANEL_CE_SCORE_4_ELEMENT          109
-#define GAME_PANEL_CE_SCORE_5_ELEMENT          110
-#define GAME_PANEL_CE_SCORE_6_ELEMENT          111
-#define GAME_PANEL_CE_SCORE_7_ELEMENT          112
-#define GAME_PANEL_CE_SCORE_8_ELEMENT          113
-#define GAME_PANEL_PLAYER_NAME                 114
-#define GAME_PANEL_LEVEL_NAME                  115
-#define GAME_PANEL_LEVEL_AUTHOR                        116
-
-#define NUM_GAME_PANEL_CONTROLS                        117
+#define GAME_PANEL_GEMS_TOTAL                  2
+#define GAME_PANEL_GEMS_COLLECTED              3
+#define GAME_PANEL_GEMS_SCORE                  4
+#define GAME_PANEL_INVENTORY_COUNT             5
+#define GAME_PANEL_INVENTORY_FIRST_1           6
+#define GAME_PANEL_INVENTORY_FIRST_2           7
+#define GAME_PANEL_INVENTORY_FIRST_3           8
+#define GAME_PANEL_INVENTORY_FIRST_4           9
+#define GAME_PANEL_INVENTORY_FIRST_5           10
+#define GAME_PANEL_INVENTORY_FIRST_6           11
+#define GAME_PANEL_INVENTORY_FIRST_7           12
+#define GAME_PANEL_INVENTORY_FIRST_8           13
+#define GAME_PANEL_INVENTORY_LAST_1            14
+#define GAME_PANEL_INVENTORY_LAST_2            15
+#define GAME_PANEL_INVENTORY_LAST_3            16
+#define GAME_PANEL_INVENTORY_LAST_4            17
+#define GAME_PANEL_INVENTORY_LAST_5            18
+#define GAME_PANEL_INVENTORY_LAST_6            19
+#define GAME_PANEL_INVENTORY_LAST_7            20
+#define GAME_PANEL_INVENTORY_LAST_8            21
+#define GAME_PANEL_KEY_1                       22
+#define GAME_PANEL_KEY_2                       23
+#define GAME_PANEL_KEY_3                       24
+#define GAME_PANEL_KEY_4                       25
+#define GAME_PANEL_KEY_5                       26
+#define GAME_PANEL_KEY_6                       27
+#define GAME_PANEL_KEY_7                       28
+#define GAME_PANEL_KEY_8                       29
+#define GAME_PANEL_KEY_WHITE                   30
+#define GAME_PANEL_KEY_WHITE_COUNT             31
+#define GAME_PANEL_SCORE                       32
+#define GAME_PANEL_HIGHSCORE                   33
+#define GAME_PANEL_TIME                                34
+#define GAME_PANEL_TIME_HH                     35
+#define GAME_PANEL_TIME_MM                     36
+#define GAME_PANEL_TIME_SS                     37
+#define GAME_PANEL_TIME_ANIM                   38
+#define GAME_PANEL_HEALTH                      39
+#define GAME_PANEL_HEALTH_ANIM                 40
+#define GAME_PANEL_FRAME                       41
+#define GAME_PANEL_SHIELD_NORMAL               42
+#define GAME_PANEL_SHIELD_NORMAL_TIME          43
+#define GAME_PANEL_SHIELD_DEADLY               44
+#define GAME_PANEL_SHIELD_DEADLY_TIME          45
+#define GAME_PANEL_EXIT                                46
+#define GAME_PANEL_EMC_MAGIC_BALL              47
+#define GAME_PANEL_EMC_MAGIC_BALL_SWITCH       48
+#define GAME_PANEL_LIGHT_SWITCH                        49
+#define GAME_PANEL_LIGHT_SWITCH_TIME           50
+#define GAME_PANEL_TIMEGATE_SWITCH             51
+#define GAME_PANEL_TIMEGATE_SWITCH_TIME                52
+#define GAME_PANEL_SWITCHGATE_SWITCH           53
+#define GAME_PANEL_EMC_LENSES                  54
+#define GAME_PANEL_EMC_LENSES_TIME             55
+#define GAME_PANEL_EMC_MAGNIFIER               56
+#define GAME_PANEL_EMC_MAGNIFIER_TIME          57
+#define GAME_PANEL_BALLOON_SWITCH              58
+#define GAME_PANEL_DYNABOMB_NUMBER             59
+#define GAME_PANEL_DYNABOMB_SIZE               60
+#define GAME_PANEL_DYNABOMB_POWER              61
+#define GAME_PANEL_PENGUINS                    62
+#define GAME_PANEL_SOKOBAN_OBJECTS             63
+#define GAME_PANEL_SOKOBAN_FIELDS              64
+#define GAME_PANEL_ROBOT_WHEEL                 65
+#define GAME_PANEL_CONVEYOR_BELT_1             66
+#define GAME_PANEL_CONVEYOR_BELT_2             67
+#define GAME_PANEL_CONVEYOR_BELT_3             68
+#define GAME_PANEL_CONVEYOR_BELT_4             69
+#define GAME_PANEL_CONVEYOR_BELT_1_SWITCH      70
+#define GAME_PANEL_CONVEYOR_BELT_2_SWITCH      71
+#define GAME_PANEL_CONVEYOR_BELT_3_SWITCH      72
+#define GAME_PANEL_CONVEYOR_BELT_4_SWITCH      73
+#define GAME_PANEL_MAGIC_WALL                  74
+#define GAME_PANEL_MAGIC_WALL_TIME             75
+#define GAME_PANEL_GRAVITY_STATE               76
+#define GAME_PANEL_GRAPHIC_1                   77
+#define GAME_PANEL_GRAPHIC_2                   78
+#define GAME_PANEL_GRAPHIC_3                   79
+#define GAME_PANEL_GRAPHIC_4                   80
+#define GAME_PANEL_GRAPHIC_5                   81
+#define GAME_PANEL_GRAPHIC_6                   82
+#define GAME_PANEL_GRAPHIC_7                   83
+#define GAME_PANEL_GRAPHIC_8                   84
+#define GAME_PANEL_ELEMENT_1                   85
+#define GAME_PANEL_ELEMENT_2                   86
+#define GAME_PANEL_ELEMENT_3                   87
+#define GAME_PANEL_ELEMENT_4                   88
+#define GAME_PANEL_ELEMENT_5                   89
+#define GAME_PANEL_ELEMENT_6                   90
+#define GAME_PANEL_ELEMENT_7                   91
+#define GAME_PANEL_ELEMENT_8                   92
+#define GAME_PANEL_ELEMENT_COUNT_1             93
+#define GAME_PANEL_ELEMENT_COUNT_2             94
+#define GAME_PANEL_ELEMENT_COUNT_3             95
+#define GAME_PANEL_ELEMENT_COUNT_4             96
+#define GAME_PANEL_ELEMENT_COUNT_5             97
+#define GAME_PANEL_ELEMENT_COUNT_6             98
+#define GAME_PANEL_ELEMENT_COUNT_7             99
+#define GAME_PANEL_ELEMENT_COUNT_8             100
+#define GAME_PANEL_CE_SCORE_1                  101
+#define GAME_PANEL_CE_SCORE_2                  102
+#define GAME_PANEL_CE_SCORE_3                  103
+#define GAME_PANEL_CE_SCORE_4                  104
+#define GAME_PANEL_CE_SCORE_5                  105
+#define GAME_PANEL_CE_SCORE_6                  106
+#define GAME_PANEL_CE_SCORE_7                  107
+#define GAME_PANEL_CE_SCORE_8                  108
+#define GAME_PANEL_CE_SCORE_1_ELEMENT          109
+#define GAME_PANEL_CE_SCORE_2_ELEMENT          110
+#define GAME_PANEL_CE_SCORE_3_ELEMENT          111
+#define GAME_PANEL_CE_SCORE_4_ELEMENT          112
+#define GAME_PANEL_CE_SCORE_5_ELEMENT          113
+#define GAME_PANEL_CE_SCORE_6_ELEMENT          114
+#define GAME_PANEL_CE_SCORE_7_ELEMENT          115
+#define GAME_PANEL_CE_SCORE_8_ELEMENT          116
+#define GAME_PANEL_PLAYER_NAME                 117
+#define GAME_PANEL_LEVEL_NAME                  118
+#define GAME_PANEL_LEVEL_AUTHOR                        119
+
+#define NUM_GAME_PANEL_CONTROLS                        120
 
 struct GamePanelOrderInfo
 {
@@ -242,6 +245,21 @@ static struct GamePanelControlInfo game_panel_controls[] =
     &game.panel.gems,
     TYPE_INTEGER,
   },
+  {
+    GAME_PANEL_GEMS_TOTAL,
+    &game.panel.gems_total,
+    TYPE_INTEGER,
+  },
+  {
+    GAME_PANEL_GEMS_COLLECTED,
+    &game.panel.gems_collected,
+    TYPE_INTEGER,
+  },
+  {
+    GAME_PANEL_GEMS_SCORE,
+    &game.panel.gems_score,
+    TYPE_INTEGER,
+  },
   {
     GAME_PANEL_INVENTORY_COUNT,
     &game.panel.inventory_count,
@@ -2267,6 +2285,9 @@ 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_collected = gems_total - gems;
+  int gems_score = level.score[SC_EMERALD];
   int exit_closed = (level.game_engine_type == GAME_ENGINE_TYPE_EM ?
                     game_em.lev->gems_needed > 0 :
                     level.game_engine_type == GAME_ENGINE_TYPE_SP ?
@@ -2292,6 +2313,9 @@ 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_COLLECTED].value = gems_collected;
+  game_panel_controls[GAME_PANEL_GEMS_SCORE].value = gems_score;
 
   game_panel_controls[GAME_PANEL_INVENTORY_COUNT].value = 0;
   for (i = 0; i < MAX_NUM_KEYS; i++)
index 3752ba00a7ed37d657bcb9a59b281cf54b9fb86a..03dd47ea0058c3cc3c06ee3a98905e616b4a6779 100644 (file)
@@ -52,6 +52,9 @@ struct GamePanelInfo
 {
   struct TextPosInfo level_number;
   struct TextPosInfo gems;
+  struct TextPosInfo gems_total;
+  struct TextPosInfo gems_collected;
+  struct TextPosInfo gems_score;
   struct TextPosInfo inventory_count;
   struct TextPosInfo inventory_first[NUM_PANEL_INVENTORY];
   struct TextPosInfo inventory_last[NUM_PANEL_INVENTORY];