From 4abc7d07404767933918e25220cab6c2eae683e5 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 12 Mar 2007 23:46:36 +0100 Subject: [PATCH] rnd-20070312-4-src --- src/conf_gfx.c | 48 +++-- src/conf_var.c | 124 ++++++----- src/conftime.h | 2 +- src/game.c | 561 +++++++++++++++++++++++++++++++++++-------------- src/game.h | 28 ++- 5 files changed, 510 insertions(+), 253 deletions(-) diff --git a/src/conf_gfx.c b/src/conf_gfx.c index 6dfd5e4a..c9ae0772 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -5396,11 +5396,11 @@ struct ConfigInfo image_config[] = { "game.panel.key_8.y", "-1" }, { "game.panel.key_white.x", "-1" }, { "game.panel.key_white.y", "-1" }, - { "game.panel.white_keys.x", "-1" }, - { "game.panel.white_keys.y", "-1" }, - { "game.panel.white_keys.align", "left" }, - { "game.panel.white_keys.chars", "-1" }, - { "game.panel.white_keys.font", "font.text_2" }, + { "game.panel.key_white_count.x", "-1" }, + { "game.panel.key_white_count.y", "-1" }, + { "game.panel.key_white_count.align", "left" }, + { "game.panel.key_white_count.chars", "-1" }, + { "game.panel.key_white_count.font", "font.text_2" }, { "game.panel.shield_normal.x", "-1" }, { "game.panel.shield_normal.y", "-1" }, @@ -5430,6 +5430,8 @@ struct ConfigInfo image_config[] = { "game.panel.emc_magic_ball.x", "-1" }, { "game.panel.emc_magic_ball.y", "-1" }, + { "game.panel.emc_magic_ball_switch.x", "-1" }, + { "game.panel.emc_magic_ball_switch.y", "-1" }, { "game.panel.emc_magic_ball_time.x", "-1" }, { "game.panel.emc_magic_ball_time.y", "-1" }, { "game.panel.emc_magic_ball_time.align", "left" }, @@ -5509,18 +5511,18 @@ struct ConfigInfo image_config[] = { "game.panel.conveyor_belt_1.x", "-1" }, { "game.panel.conveyor_belt_1.y", "-1" }, - { "game.panel.conveyor_belt_2.x", "-1" }, - { "game.panel.conveyor_belt_2.y", "-1" }, - { "game.panel.conveyor_belt_3.x", "-1" }, - { "game.panel.conveyor_belt_3.y", "-1" }, - { "game.panel.conveyor_belt_4.x", "-1" }, - { "game.panel.conveyor_belt_4.y", "-1" }, { "game.panel.conveyor_belt_1_switch.x", "-1" }, { "game.panel.conveyor_belt_1_switch.y", "-1" }, + { "game.panel.conveyor_belt_2.x", "-1" }, + { "game.panel.conveyor_belt_2.y", "-1" }, { "game.panel.conveyor_belt_2_switch.x", "-1" }, { "game.panel.conveyor_belt_2_switch.y", "-1" }, + { "game.panel.conveyor_belt_3.x", "-1" }, + { "game.panel.conveyor_belt_3.y", "-1" }, { "game.panel.conveyor_belt_3_switch.x", "-1" }, { "game.panel.conveyor_belt_3_switch.y", "-1" }, + { "game.panel.conveyor_belt_4.x", "-1" }, + { "game.panel.conveyor_belt_4.y", "-1" }, { "game.panel.conveyor_belt_4_switch.x", "-1" }, { "game.panel.conveyor_belt_4_switch.y", "-1" }, @@ -5553,18 +5555,18 @@ struct ConfigInfo image_config[] = { "game.panel.level_author.chars", "-1" }, { "game.panel.level_author.font", "font.text_2" }, - { "game.panel.stop.x", "-1" }, - { "game.panel.stop.y", "-1" }, - { "game.panel.pause.x", "-1" }, - { "game.panel.pause.y", "-1" }, - { "game.panel.play.x", "-1" }, - { "game.panel.play.y", "-1" }, - { "game.panel.sound_music.x", "-1" }, - { "game.panel.sound_music.y", "-1" }, - { "game.panel.sound_loops.x", "-1" }, - { "game.panel.sound_loops.y", "-1" }, - { "game.panel.sound_simple.x", "-1" }, - { "game.panel.sound_simple.y", "-1" }, + { "game.button.stop.x", "-1" }, + { "game.button.stop.y", "-1" }, + { "game.button.pause.x", "-1" }, + { "game.button.pause.y", "-1" }, + { "game.button.play.x", "-1" }, + { "game.button.play.y", "-1" }, + { "game.button.sound_music.x", "-1" }, + { "game.button.sound_music.y", "-1" }, + { "game.button.sound_loops.x", "-1" }, + { "game.button.sound_loops.y", "-1" }, + { "game.button.sound_simple.x", "-1" }, + { "game.button.sound_simple.y", "-1" }, { "[player].boring_delay_fixed", "1000" }, { "[player].boring_delay_random", "1000" }, diff --git a/src/conf_var.c b/src/conf_var.c index 3132795d..997ba2b1 100644 --- a/src/conf_var.c +++ b/src/conf_var.c @@ -1697,24 +1697,24 @@ struct TokenIntPtrInfo image_config_vars[] = &game.panel.key_white.y }, { - "game.panel.white_keys.x", - &game.panel.white_keys.x + "game.panel.key_white_count.x", + &game.panel.key_white_count.x }, { - "game.panel.white_keys.y", - &game.panel.white_keys.y + "game.panel.key_white_count.y", + &game.panel.key_white_count.y }, { - "game.panel.white_keys.align", - &game.panel.white_keys.align + "game.panel.key_white_count.align", + &game.panel.key_white_count.align }, { - "game.panel.white_keys.chars", - &game.panel.white_keys.chars + "game.panel.key_white_count.chars", + &game.panel.key_white_count.chars }, { - "game.panel.white_keys.font", - &game.panel.white_keys.font + "game.panel.key_white_count.font", + &game.panel.key_white_count.font }, { "game.panel.shield_normal.x", @@ -1820,6 +1820,14 @@ struct TokenIntPtrInfo image_config_vars[] = "game.panel.emc_magic_ball.y", &game.panel.emc_magic_ball.y }, + { + "game.panel.emc_magic_ball_switch.x", + &game.panel.emc_magic_ball_switch.x + }, + { + "game.panel.emc_magic_ball_switch.y", + &game.panel.emc_magic_ball_switch.y + }, { "game.panel.emc_magic_ball_time.x", &game.panel.emc_magic_ball_time.x @@ -2092,30 +2100,6 @@ struct TokenIntPtrInfo image_config_vars[] = "game.panel.conveyor_belt_1.y", &game.panel.conveyor_belt_1.y }, - { - "game.panel.conveyor_belt_2.x", - &game.panel.conveyor_belt_2.x - }, - { - "game.panel.conveyor_belt_2.y", - &game.panel.conveyor_belt_2.y - }, - { - "game.panel.conveyor_belt_3.x", - &game.panel.conveyor_belt_3.x - }, - { - "game.panel.conveyor_belt_3.y", - &game.panel.conveyor_belt_3.y - }, - { - "game.panel.conveyor_belt_4.x", - &game.panel.conveyor_belt_4.x - }, - { - "game.panel.conveyor_belt_4.y", - &game.panel.conveyor_belt_4.y - }, { "game.panel.conveyor_belt_1_switch.x", &game.panel.conveyor_belt_1_switch.x @@ -2124,6 +2108,14 @@ struct TokenIntPtrInfo image_config_vars[] = "game.panel.conveyor_belt_1_switch.y", &game.panel.conveyor_belt_1_switch.y }, + { + "game.panel.conveyor_belt_2.x", + &game.panel.conveyor_belt_2.x + }, + { + "game.panel.conveyor_belt_2.y", + &game.panel.conveyor_belt_2.y + }, { "game.panel.conveyor_belt_2_switch.x", &game.panel.conveyor_belt_2_switch.x @@ -2132,6 +2124,14 @@ struct TokenIntPtrInfo image_config_vars[] = "game.panel.conveyor_belt_2_switch.y", &game.panel.conveyor_belt_2_switch.y }, + { + "game.panel.conveyor_belt_3.x", + &game.panel.conveyor_belt_3.x + }, + { + "game.panel.conveyor_belt_3.y", + &game.panel.conveyor_belt_3.y + }, { "game.panel.conveyor_belt_3_switch.x", &game.panel.conveyor_belt_3_switch.x @@ -2140,6 +2140,14 @@ struct TokenIntPtrInfo image_config_vars[] = "game.panel.conveyor_belt_3_switch.y", &game.panel.conveyor_belt_3_switch.y }, + { + "game.panel.conveyor_belt_4.x", + &game.panel.conveyor_belt_4.x + }, + { + "game.panel.conveyor_belt_4.y", + &game.panel.conveyor_belt_4.y + }, { "game.panel.conveyor_belt_4_switch.x", &game.panel.conveyor_belt_4_switch.x @@ -2253,52 +2261,52 @@ struct TokenIntPtrInfo image_config_vars[] = &game.panel.level_author.font }, { - "game.panel.stop.x", - &game.panel.stop.x + "game.button.stop.x", + &game.button.stop.x }, { - "game.panel.stop.y", - &game.panel.stop.y + "game.button.stop.y", + &game.button.stop.y }, { - "game.panel.pause.x", - &game.panel.pause.x + "game.button.pause.x", + &game.button.pause.x }, { - "game.panel.pause.y", - &game.panel.pause.y + "game.button.pause.y", + &game.button.pause.y }, { - "game.panel.play.x", - &game.panel.play.x + "game.button.play.x", + &game.button.play.x }, { - "game.panel.play.y", - &game.panel.play.y + "game.button.play.y", + &game.button.play.y }, { - "game.panel.sound_music.x", - &game.panel.sound_music.x + "game.button.sound_music.x", + &game.button.sound_music.x }, { - "game.panel.sound_music.y", - &game.panel.sound_music.y + "game.button.sound_music.y", + &game.button.sound_music.y }, { - "game.panel.sound_loops.x", - &game.panel.sound_loops.x + "game.button.sound_loops.x", + &game.button.sound_loops.x }, { - "game.panel.sound_loops.y", - &game.panel.sound_loops.y + "game.button.sound_loops.y", + &game.button.sound_loops.y }, { - "game.panel.sound_simple.x", - &game.panel.sound_simple.x + "game.button.sound_simple.x", + &game.button.sound_simple.x }, { - "game.panel.sound_simple.y", - &game.panel.sound_simple.y + "game.button.sound_simple.y", + &game.button.sound_simple.y }, { "[player].boring_delay_fixed", diff --git a/src/conftime.h b/src/conftime.h index ec71c3ff..7b4a23e4 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2007-03-12 16:57" +#define COMPILE_DATE_STRING "2007-03-12 23:44" diff --git a/src/game.c b/src/game.c index 840f476f..6b920a51 100644 --- a/src/game.c +++ b/src/game.c @@ -143,228 +143,444 @@ #define GAME_CONTROL_KEYS 3 #define GAME_CONTROL_SCORE 4 #define GAME_CONTROL_TIME 5 - - - -#define GAME_CONTROL_LEVELS 1 -#define GAME_CONTROL_SCORES 2 -#define GAME_CONTROL_EDITOR 3 -#define GAME_CONTROL_INFO 4 -#define GAME_CONTROL_GAME 5 -#define GAME_CONTROL_SETUP 6 -#define GAME_CONTROL_QUIT 7 -#define GAME_CONTROL_PREV_LEVEL 8 -#define GAME_CONTROL_NEXT_LEVEL 9 -#define GAME_CONTROL_CURRENT_LEVEL 10 -#define GAME_CONTROL_FIRST_LEVEL 11 -#define GAME_CONTROL_LAST_LEVEL 12 -#define GAME_CONTROL_LEVEL_INFO_1 13 -#define GAME_CONTROL_LEVEL_INFO_2 14 -#define GAME_CONTROL_LEVEL_NAME 15 -#define GAME_CONTROL_LEVEL_AUTHOR 16 -#define GAME_CONTROL_LEVEL_YEAR 17 -#define GAME_CONTROL_LEVEL_IMPORTED_FROM 18 -#define GAME_CONTROL_LEVEL_IMPORTED_BY 19 -#define GAME_CONTROL_LEVEL_TESTED_BY 20 -#define GAME_CONTROL_TITLE_1 21 -#define GAME_CONTROL_TITLE_2 22 -#define GAME_CONTROL_TITLE_3 23 - -static char str_game_text_name[10]; -static char str_game_text_current_level[10]; -static char str_game_text_first_level[10]; -static char str_game_text_last_level[10]; - -static char *game_text_name = str_game_text_name; -static char *game_text_current_level = str_game_text_current_level; -static char *game_text_first_level = str_game_text_first_level; -static char *game_text_last_level = str_game_text_last_level; -static char *game_text_levels = "Levelset"; -static char *game_text_scores = "Hall Of Fame"; -static char *game_text_editor = "Level Creator"; -static char *game_text_info = "Info Screen"; -static char *game_text_game = "Start Game"; -static char *game_text_setup = "Setup"; -static char *game_text_quit = "Quit"; -static char *game_text_level_name = level.name; -static char *game_text_level_author = level.author; -static char *game_text_level_year = NULL; -static char *game_text_level_imported_from = NULL; -static char *game_text_level_imported_by = NULL; -static char *game_text_level_tested_by = NULL; -static char *game_text_title_1 = PROGRAM_TITLE_STRING; -static char *game_text_title_2 = PROGRAM_COPYRIGHT_STRING; -static char *game_text_title_3 = PROGRAM_GAME_BY_STRING; +#define GAME_CONTROL_TIME_HH 6 +#define GAME_CONTROL_TIME_MM 7 +#define GAME_CONTROL_TIME_SS 8 +#define GAME_CONTROL_DROP_NEXT_1 9 +#define GAME_CONTROL_DROP_NEXT_2 10 +#define GAME_CONTROL_DROP_NEXT_3 11 +#define GAME_CONTROL_DROP_NEXT_4 12 +#define GAME_CONTROL_DROP_NEXT_5 13 +#define GAME_CONTROL_DROP_NEXT_6 14 +#define GAME_CONTROL_DROP_NEXT_7 15 +#define GAME_CONTROL_DROP_NEXT_8 16 +#define GAME_CONTROL_EMC_KEYS 17 +#define GAME_CONTROL_KEY_1 18 +#define GAME_CONTROL_KEY_2 19 +#define GAME_CONTROL_KEY_3 20 +#define GAME_CONTROL_KEY_4 21 +#define GAME_CONTROL_KEY_5 22 +#define GAME_CONTROL_KEY_6 23 +#define GAME_CONTROL_KEY_7 24 +#define GAME_CONTROL_KEY_8 25 +#define GAME_CONTROL_KEY_WHITE 26 +#define GAME_CONTROL_KEY_WHITE_COUNT 27 +#define GAME_CONTROL_SHIELD_NORMAL 28 +#define GAME_CONTROL_SHIELD_NORMAL_TIME 29 +#define GAME_CONTROL_SHIELD_DEADLY 30 +#define GAME_CONTROL_SHIELD_DEADLY_TIME 31 +#define GAME_CONTROL_EXIT 32 +#define GAME_CONTROL_EM_EXIT 33 +#define GAME_CONTROL_SP_EXIT 34 +#define GAME_CONTROL_STEEL_EXIT 35 +#define GAME_CONTROL_EM_STEEL_EXIT 36 +#define GAME_CONTROL_EMC_MAGIC_BALL 37 +#define GAME_CONTROL_EMC_MAGIC_BALL_TIME 38 +#define GAME_CONTROL_LIGHT_SWITCH 39 +#define GAME_CONTROL_LIGHT_SWITCH_TIME 40 +#define GAME_CONTROL_TIMEGATE_SWITCH 41 +#define GAME_CONTROL_TIMEGATE_SWITCH_TIME 42 +#define GAME_CONTROL_SWITCHGATE_SWITCH 43 +#define GAME_CONTROL_EMC_LENSES 44 +#define GAME_CONTROL_EMC_LENSES_TIME 45 +#define GAME_CONTROL_EMC_MAGNIFIER 46 +#define GAME_CONTROL_EMC_MAGNIFIER_TIME 47 +#define GAME_CONTROL_BALLOON_SWITCH 48 +#define GAME_CONTROL_DYNABOMB_NUMBER 49 +#define GAME_CONTROL_DYNABOMB_SIZE 50 +#define GAME_CONTROL_DYNABOMB_POWER 51 +#define GAME_CONTROL_PENGUINS 52 +#define GAME_CONTROL_SOKOBAN_OBJECTS 53 +#define GAME_CONTROL_SOKOBAN_FIELDS 54 +#define GAME_CONTROL_ROBOT_WHEEL 55 +#define GAME_CONTROL_CONVEYOR_BELT_1 56 +#define GAME_CONTROL_CONVEYOR_BELT_1_SWITCH 57 +#define GAME_CONTROL_CONVEYOR_BELT_2 58 +#define GAME_CONTROL_CONVEYOR_BELT_2_SWITCH 59 +#define GAME_CONTROL_CONVEYOR_BELT_3 60 +#define GAME_CONTROL_CONVEYOR_BELT_3_SWITCH 61 +#define GAME_CONTROL_CONVEYOR_BELT_4 62 +#define GAME_CONTROL_CONVEYOR_BELT_4_SWITCH 63 +#define GAME_CONTROL_MAGIC_WALL 64 +#define GAME_CONTROL_MAGIC_WALL_TIME 65 +#define GAME_CONTROL_BD_MAGIC_WALL 66 +#define GAME_CONTROL_DC_MAGIC_WALL 67 +#define GAME_CONTROL_PLAYER_NAME 68 +#define GAME_CONTROL_LEVEL_NAME 69 +#define GAME_CONTROL_LEVEL_AUTHOR 70 struct GameControlInfo { int nr; - struct MenuPosInfo *pos_button; - int button_graphic; - struct TextPosInfo *pos_text; - char **text; - - struct TextPosInfo *pos_input; - char **input; + int type; + void *ptr; }; static struct GameControlInfo game_controls[] = { { - GAME_CONTROL_NAME, - &menu.game.button.name, IMG_MENU_BUTTON, - &menu.game.text.name, &game_text_name, - &menu.game.input.name, &setup.player_name, + GAME_CONTROL_LEVEL, + &game.panel.level, + TYPE_INTEGER, }, { - GAME_CONTROL_LEVELS, - &menu.game.button.levels, IMG_MENU_BUTTON_ENTER_MENU, - &menu.game.text.levels, &game_text_levels, - NULL, NULL, + GAME_CONTROL_GEMS, + &game.panel.gems, + TYPE_INTEGER, }, { - GAME_CONTROL_SCORES, - &menu.game.button.scores, IMG_MENU_BUTTON, - &menu.game.text.scores, &game_text_scores, - NULL, NULL, + GAME_CONTROL_INVENTORY, + &game.panel.inventory, + TYPE_INTEGER, }, { - GAME_CONTROL_EDITOR, - &menu.game.button.editor, IMG_MENU_BUTTON, - &menu.game.text.editor, &game_text_editor, - NULL, NULL, + GAME_CONTROL_KEYS, + &game.panel.keys, + TYPE_INTEGER, }, { - GAME_CONTROL_INFO, - &menu.game.button.info, IMG_MENU_BUTTON_ENTER_MENU, - &menu.game.text.info, &game_text_info, - NULL, NULL, + GAME_CONTROL_SCORE, + &game.panel.score, + TYPE_INTEGER, }, { - GAME_CONTROL_GAME, - &menu.game.button.game, IMG_MENU_BUTTON, - &menu.game.text.game, &game_text_game, - NULL, NULL, + GAME_CONTROL_TIME, + &game.panel.time, + TYPE_INTEGER, }, { - GAME_CONTROL_SETUP, - &menu.game.button.setup, IMG_MENU_BUTTON_ENTER_MENU, - &menu.game.text.setup, &game_text_setup, - NULL, NULL, + GAME_CONTROL_TIME_HH, + &game.panel.time_hh, + TYPE_INTEGER, }, { - GAME_CONTROL_QUIT, - &menu.game.button.quit, IMG_MENU_BUTTON, - &menu.game.text.quit, &game_text_quit, - NULL, NULL, + GAME_CONTROL_TIME_MM, + &game.panel.time_mm, + TYPE_INTEGER, }, -#if 0 - /* (these two buttons are real gadgets) */ { - GAME_CONTROL_PREV_LEVEL, - &menu.game.button.prev_level, IMG_MENU_BUTTON_PREV_LEVEL, - NULL, NULL, - NULL, NULL, + GAME_CONTROL_TIME_SS, + &game.panel.time_ss, + TYPE_INTEGER, }, { - GAME_CONTROL_NEXT_LEVEL, - &menu.game.button.next_level, IMG_MENU_BUTTON_NEXT_LEVEL, - NULL, NULL, - NULL, NULL, + GAME_CONTROL_DROP_NEXT_1, + &game.panel.drop_next_1, + TYPE_INTEGER, }, -#endif { - GAME_CONTROL_CURRENT_LEVEL, - NULL, -1, - &menu.game.text.current_level, &game_text_current_level, - NULL, NULL, + GAME_CONTROL_DROP_NEXT_2, + &game.panel.drop_next_2, + TYPE_INTEGER, }, { - GAME_CONTROL_FIRST_LEVEL, - NULL, -1, - &menu.game.text.first_level, &game_text_first_level, - NULL, NULL, + GAME_CONTROL_DROP_NEXT_3, + &game.panel.drop_next_3, + TYPE_INTEGER, }, { - GAME_CONTROL_LAST_LEVEL, - NULL, -1, - &menu.game.text.last_level, &game_text_last_level, - NULL, NULL, + GAME_CONTROL_DROP_NEXT_4, + &game.panel.drop_next_4, + TYPE_INTEGER, }, { - GAME_CONTROL_LEVEL_INFO_1, - NULL, -1, - &menu.game.text.level_info_1, NULL, - NULL, NULL, + GAME_CONTROL_DROP_NEXT_5, + &game.panel.drop_next_5, + TYPE_INTEGER, }, { - GAME_CONTROL_LEVEL_INFO_2, - NULL, -1, - &menu.game.text.level_info_2, NULL, - NULL, NULL, + GAME_CONTROL_DROP_NEXT_6, + &game.panel.drop_next_6, + TYPE_INTEGER, }, { - GAME_CONTROL_LEVEL_NAME, - NULL, -1, - &menu.game.text.level_name, &game_text_level_name, - NULL, NULL, + GAME_CONTROL_DROP_NEXT_7, + &game.panel.drop_next_7, + TYPE_INTEGER, }, { - GAME_CONTROL_LEVEL_AUTHOR, - NULL, -1, - &menu.game.text.level_author, &game_text_level_author, - NULL, NULL, + GAME_CONTROL_DROP_NEXT_8, + &game.panel.drop_next_8, + TYPE_INTEGER, + }, + { + GAME_CONTROL_EMC_KEYS, + &game.panel.emc_keys, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_1, + &game.panel.key_1, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_2, + &game.panel.key_2, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_3, + &game.panel.key_3, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_4, + &game.panel.key_4, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_5, + &game.panel.key_5, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_6, + &game.panel.key_6, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_7, + &game.panel.key_7, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_8, + &game.panel.key_8, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_WHITE, + &game.panel.key_white, + TYPE_INTEGER, + }, + { + GAME_CONTROL_KEY_WHITE_COUNT, + &game.panel.key_white_count, + TYPE_INTEGER, + }, + { + GAME_CONTROL_SHIELD_NORMAL, + &game.panel.shield_normal, + TYPE_INTEGER, + }, + { + GAME_CONTROL_SHIELD_NORMAL_TIME, + &game.panel.shield_normal_time, + TYPE_INTEGER, + }, + { + GAME_CONTROL_SHIELD_DEADLY, + &game.panel.shield_deadly, + TYPE_INTEGER, + }, + { + GAME_CONTROL_SHIELD_DEADLY_TIME, + &game.panel.shield_deadly_time, + TYPE_INTEGER, + }, + { + GAME_CONTROL_EXIT, + &game.panel.exit, + TYPE_INTEGER, + }, + { + GAME_CONTROL_EM_EXIT, + &game.panel.em_exit, + TYPE_INTEGER, + }, + { + GAME_CONTROL_SP_EXIT, + &game.panel.sp_exit, + TYPE_INTEGER, + }, + { + GAME_CONTROL_STEEL_EXIT, + &game.panel.steel_exit, + TYPE_INTEGER, + }, + { + GAME_CONTROL_EM_STEEL_EXIT, + &game.panel.em_steel_exit, + TYPE_INTEGER, + }, + { + GAME_CONTROL_EMC_MAGIC_BALL, + &game.panel.emc_magic_ball, + TYPE_INTEGER, + }, + { + GAME_CONTROL_EMC_MAGIC_BALL_TIME, + &game.panel.emc_magic_ball_time, + TYPE_INTEGER, + }, + { + GAME_CONTROL_LIGHT_SWITCH, + &game.panel.light_switch, + TYPE_INTEGER, + }, + { + GAME_CONTROL_LIGHT_SWITCH_TIME, + &game.panel.light_switch_time, + TYPE_INTEGER, + }, + { + GAME_CONTROL_TIMEGATE_SWITCH, + &game.panel.timegate_switch, + TYPE_INTEGER, }, { - GAME_CONTROL_LEVEL_YEAR, - NULL, -1, - &menu.game.text.level_year, &game_text_level_year, - NULL, NULL, + GAME_CONTROL_TIMEGATE_SWITCH_TIME, + &game.panel.timegate_switch_time, + TYPE_INTEGER, }, { - GAME_CONTROL_LEVEL_IMPORTED_FROM, - NULL, -1, - &menu.game.text.level_imported_from, &game_text_level_imported_from, - NULL, NULL, + GAME_CONTROL_SWITCHGATE_SWITCH, + &game.panel.switchgate_switch, + TYPE_INTEGER, }, { - GAME_CONTROL_LEVEL_IMPORTED_BY, - NULL, -1, - &menu.game.text.level_imported_by, &game_text_level_imported_by, - NULL, NULL, + GAME_CONTROL_EMC_LENSES, + &game.panel.emc_lenses, + TYPE_INTEGER, }, { - GAME_CONTROL_LEVEL_TESTED_BY, - NULL, -1, - &menu.game.text.level_tested_by, &game_text_level_tested_by, - NULL, NULL, + GAME_CONTROL_EMC_LENSES_TIME, + &game.panel.emc_lenses_time, + TYPE_INTEGER, }, { - GAME_CONTROL_TITLE_1, - NULL, -1, - &menu.game.text.title_1, &game_text_title_1, - NULL, NULL, + GAME_CONTROL_EMC_MAGNIFIER, + &game.panel.emc_magnifier, + TYPE_INTEGER, }, { - GAME_CONTROL_TITLE_2, - NULL, -1, - &menu.game.text.title_2, &game_text_title_2, - NULL, NULL, + GAME_CONTROL_EMC_MAGNIFIER_TIME, + &game.panel.emc_magnifier_time, + TYPE_INTEGER, }, { - GAME_CONTROL_TITLE_3, - NULL, -1, - &menu.game.text.title_3, &game_text_title_3, - NULL, NULL, + GAME_CONTROL_BALLOON_SWITCH, + &game.panel.balloon_switch, + TYPE_INTEGER, + }, + { + GAME_CONTROL_DYNABOMB_NUMBER, + &game.panel.dynabomb_number, + TYPE_INTEGER, + }, + { + GAME_CONTROL_DYNABOMB_SIZE, + &game.panel.dynabomb_size, + TYPE_INTEGER, + }, + { + GAME_CONTROL_DYNABOMB_POWER, + &game.panel.dynabomb_power, + TYPE_INTEGER, + }, + { + GAME_CONTROL_PENGUINS, + &game.panel.penguins, + TYPE_INTEGER, + }, + { + GAME_CONTROL_SOKOBAN_OBJECTS, + &game.panel.sokoban_objects, + TYPE_INTEGER, + }, + { + GAME_CONTROL_SOKOBAN_FIELDS, + &game.panel.sokoban_fields, + TYPE_INTEGER, + }, + { + GAME_CONTROL_ROBOT_WHEEL, + &game.panel.robot_wheel, + TYPE_INTEGER, + }, + { + GAME_CONTROL_CONVEYOR_BELT_1, + &game.panel.conveyor_belt_1, + TYPE_INTEGER, + }, + { + GAME_CONTROL_CONVEYOR_BELT_1_SWITCH, + &game.panel.conveyor_belt_1_switch, + TYPE_INTEGER, + }, + { + GAME_CONTROL_CONVEYOR_BELT_2, + &game.panel.conveyor_belt_2, + TYPE_INTEGER, + }, + { + GAME_CONTROL_CONVEYOR_BELT_2_SWITCH, + &game.panel.conveyor_belt_2_switch, + TYPE_INTEGER, + }, + { + GAME_CONTROL_CONVEYOR_BELT_3, + &game.panel.conveyor_belt_3, + TYPE_INTEGER, + }, + { + GAME_CONTROL_CONVEYOR_BELT_3_SWITCH, + &game.panel.conveyor_belt_3_switch, + TYPE_INTEGER, + }, + { + GAME_CONTROL_CONVEYOR_BELT_4, + &game.panel.conveyor_belt_4, + TYPE_INTEGER, + }, + { + GAME_CONTROL_CONVEYOR_BELT_4_SWITCH, + &game.panel.conveyor_belt_4_switch, + TYPE_INTEGER, + }, + { + GAME_CONTROL_MAGIC_WALL, + &game.panel.magic_wall, + TYPE_INTEGER, + }, + { + GAME_CONTROL_MAGIC_WALL_TIME, + &game.panel.magic_wall_time, + TYPE_INTEGER, + }, + { + GAME_CONTROL_BD_MAGIC_WALL, + &game.panel.bd_magic_wall, + TYPE_INTEGER, + }, + { + GAME_CONTROL_DC_MAGIC_WALL, + &game.panel.dc_magic_wall, + TYPE_INTEGER, + }, + { + GAME_CONTROL_PLAYER_NAME, + &game.panel.player_name, + TYPE_INTEGER, + }, + { + GAME_CONTROL_LEVEL_NAME, + &game.panel.level_name, + TYPE_INTEGER, + }, + { + GAME_CONTROL_LEVEL_AUTHOR, + &game.panel.level_author, + TYPE_INTEGER, }, { -1, - NULL, -1, - NULL, NULL, - NULL, NULL, + NULL, + -1, + NULL } }; #endif @@ -1677,11 +1893,34 @@ void DrawGameValue_Keys(int key[MAX_NUM_KEYS]) int dst_x = PANEL_XPOS(pos) + i * MINI_TILEX; int dst_y = PANEL_YPOS(pos); +#if 0 + /* masked blit with tiles from half-size scaled bitmap does not work yet + (no mask bitmap created for these sizes after loading and scaling) -- + solution: load without creating mask, scale, then create final mask */ + + BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, src_x, src_y, + MINI_TILEX, MINI_TILEY, dst_x, dst_y); + + if (key[i]) + { + int graphic = el2edimg(base_key_graphic + i); + Bitmap *src_bitmap; + int src_x, src_y; + + getMiniGraphicSource(graphic, &src_bitmap, &src_x, &src_y); + + SetClipOrigin(src_bitmap, src_bitmap->stored_clip_gc, + dst_x - src_x, dst_y - src_y); + BlitBitmapMasked(src_bitmap, drawto, src_x, src_y, MINI_TILEX, MINI_TILEY, + dst_x, dst_y); + } +#else if (key[i]) DrawMiniGraphicExt(drawto, dst_x, dst_y, el2edimg(base_key_graphic + i)); else BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, src_x, src_y, MINI_TILEX, MINI_TILEY, dst_x, dst_y); +#endif } } diff --git a/src/game.h b/src/game.h index 9cea39c3..fcd284d5 100644 --- a/src/game.h +++ b/src/game.h @@ -53,7 +53,7 @@ struct GamePanelInfo struct TextPosInfo key_7; struct TextPosInfo key_8; struct TextPosInfo key_white; - struct TextPosInfo white_keys; + struct TextPosInfo key_white_count; struct TextPosInfo shield_normal; struct TextPosInfo shield_normal_time; struct TextPosInfo shield_deadly; @@ -64,6 +64,7 @@ struct GamePanelInfo struct TextPosInfo steel_exit; struct TextPosInfo em_steel_exit; struct TextPosInfo emc_magic_ball; + struct TextPosInfo emc_magic_ball_switch; struct TextPosInfo emc_magic_ball_time; struct TextPosInfo light_switch; struct TextPosInfo light_switch_time; @@ -83,12 +84,12 @@ struct GamePanelInfo struct TextPosInfo sokoban_fields; struct TextPosInfo robot_wheel; struct TextPosInfo conveyor_belt_1; - struct TextPosInfo conveyor_belt_2; - struct TextPosInfo conveyor_belt_3; - struct TextPosInfo conveyor_belt_4; struct TextPosInfo conveyor_belt_1_switch; + struct TextPosInfo conveyor_belt_2; struct TextPosInfo conveyor_belt_2_switch; + struct TextPosInfo conveyor_belt_3; struct TextPosInfo conveyor_belt_3_switch; + struct TextPosInfo conveyor_belt_4; struct TextPosInfo conveyor_belt_4_switch; struct TextPosInfo magic_wall; struct TextPosInfo magic_wall_time; @@ -97,14 +98,20 @@ struct GamePanelInfo struct TextPosInfo player_name; struct TextPosInfo level_name; struct TextPosInfo level_author; - struct TextPosInfo stop; - struct TextPosInfo pause; - struct TextPosInfo play; - struct TextPosInfo sound_music; - struct TextPosInfo sound_loops; - struct TextPosInfo sound_simple; }; + +struct GameButtonInfo +{ + struct MenuPosInfo stop; + struct MenuPosInfo pause; + struct MenuPosInfo play; + struct MenuPosInfo sound_music; + struct MenuPosInfo sound_loops; + struct MenuPosInfo sound_simple; +}; + #else + struct GamePanelInfo { struct XY level; @@ -120,6 +127,7 @@ struct GameInfo { /* values for control panel */ struct GamePanelInfo panel; + struct GameButtonInfo button; /* values for engine initialization */ int default_push_delay_fixed; -- 2.34.1