X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fscreens.c;h=4989985a00d967c5406722e4185957d874848049;hp=5e1a17e3b6014583a1f524c2db862ab6ed64bc44;hb=643bbf5bfe5db8cf56ff57f7e835e67053bb30ff;hpb=13543405e2c3cb994b33161dd12202205158f919 diff --git a/src/screens.c b/src/screens.c index 5e1a17e3..4989985a 100644 --- a/src/screens.c +++ b/src/screens.c @@ -25,31 +25,6 @@ #include "init.h" #include "config.h" -/* screens in the setup menu */ -#define SETUP_MODE_MAIN 0 -#define SETUP_MODE_GAME 1 -#define SETUP_MODE_CHOOSE_GAME_SPEED 2 -#define SETUP_MODE_EDITOR 3 -#define SETUP_MODE_INPUT 4 -#define SETUP_MODE_SHORTCUT_1 5 -#define SETUP_MODE_SHORTCUT_2 6 -#define SETUP_MODE_GRAPHICS 7 -#define SETUP_MODE_CHOOSE_SCREEN_MODE 8 -#define SETUP_MODE_CHOOSE_SCROLL_DELAY 9 -#define SETUP_MODE_SOUND 10 -#define SETUP_MODE_ARTWORK 11 -#define SETUP_MODE_CHOOSE_GRAPHICS 12 -#define SETUP_MODE_CHOOSE_SOUNDS 13 -#define SETUP_MODE_CHOOSE_MUSIC 14 - -#define MAX_SETUP_MODES 15 - -/* for input setup functions */ -#define SETUPINPUT_SCREEN_POS_START 0 -#define SETUPINPUT_SCREEN_POS_END (SCR_FIELDY - 4) -#define SETUPINPUT_SCREEN_POS_EMPTY1 (SETUPINPUT_SCREEN_POS_START + 3) -#define SETUPINPUT_SCREEN_POS_EMPTY2 (SETUPINPUT_SCREEN_POS_END - 1) - /* screens on the info screen */ #define INFO_MODE_MAIN 0 #define INFO_MODE_TITLE 1 @@ -62,6 +37,37 @@ #define MAX_INFO_MODES 8 +/* screens on the setup screen */ +#define SETUP_MODE_MAIN 0 +#define SETUP_MODE_GAME 1 +#define SETUP_MODE_EDITOR 2 +#define SETUP_MODE_GRAPHICS 3 +#define SETUP_MODE_SOUND 4 +#define SETUP_MODE_ARTWORK 5 +#define SETUP_MODE_INPUT 6 +#define SETUP_MODE_SHORTCUTS_1 7 +#define SETUP_MODE_SHORTCUTS_2 8 + +/* sub-screens on the setup screen (generic) */ +#define SETUP_MODE_CHOOSE_ARTWORK 9 +#define SETUP_MODE_CHOOSE_OTHER 10 + +/* sub-screens on the setup screen (specific) */ +#define SETUP_MODE_CHOOSE_GAME_SPEED 11 +#define SETUP_MODE_CHOOSE_SCREEN_MODE 12 +#define SETUP_MODE_CHOOSE_SCROLL_DELAY 13 +#define SETUP_MODE_CHOOSE_GRAPHICS 14 +#define SETUP_MODE_CHOOSE_SOUNDS 15 +#define SETUP_MODE_CHOOSE_MUSIC 16 + +#define MAX_SETUP_MODES 17 + +/* for input setup functions */ +#define SETUPINPUT_SCREEN_POS_START 0 +#define SETUPINPUT_SCREEN_POS_END (SCR_FIELDY - 4) +#define SETUPINPUT_SCREEN_POS_EMPTY1 (SETUPINPUT_SCREEN_POS_START + 3) +#define SETUPINPUT_SCREEN_POS_EMPTY2 (SETUPINPUT_SCREEN_POS_END - 1) + /* for various menu stuff */ #define MENU_SCREEN_START_XPOS 1 #define MENU_SCREEN_START_YPOS 2 @@ -119,6 +125,7 @@ #define SC_BORDER_SIZE 14 +#if 0 /* other useful macro definitions */ #define BUTTON_GRAPHIC_ACTIVE(g) \ (g == IMG_MENU_BUTTON_LEFT ? IMG_MENU_BUTTON_LEFT_ACTIVE : \ @@ -129,7 +136,16 @@ g == IMG_MENU_BUTTON_ENTER_MENU ? IMG_MENU_BUTTON_ENTER_MENU_ACTIVE : \ g == IMG_MENU_BUTTON_PREV_LEVEL ? IMG_MENU_BUTTON_PREV_LEVEL_ACTIVE : \ g == IMG_MENU_BUTTON_NEXT_LEVEL ? IMG_MENU_BUTTON_NEXT_LEVEL_ACTIVE : \ + g == IMG_MENU_BUTTON_NAME ? IMG_MENU_BUTTON_NAME_ACTIVE : \ + g == IMG_MENU_BUTTON_LEVELS ? IMG_MENU_BUTTON_LEVELS_ACTIVE : \ + g == IMG_MENU_BUTTON_SCORES ? IMG_MENU_BUTTON_SCORES_ACTIVE : \ + g == IMG_MENU_BUTTON_EDITOR ? IMG_MENU_BUTTON_EDITOR_ACTIVE : \ + g == IMG_MENU_BUTTON_INFO ? IMG_MENU_BUTTON_INFO_ACTIVE : \ + g == IMG_MENU_BUTTON_GAME ? IMG_MENU_BUTTON_GAME_ACTIVE : \ + g == IMG_MENU_BUTTON_SETUP ? IMG_MENU_BUTTON_SETUP_ACTIVE : \ + g == IMG_MENU_BUTTON_QUIT ? IMG_MENU_BUTTON_QUIT_ACTIVE : \ IMG_MENU_BUTTON_ACTIVE) +#endif /* forward declarations of internal functions */ @@ -165,8 +181,8 @@ static void MapScreenTreeGadgets(TreeInfo *); static struct GadgetInfo *screen_gadget[NUM_SCREEN_GADGETS]; -static int setup_mode = SETUP_MODE_MAIN; static int info_mode = INFO_MODE_MAIN; +static int setup_mode = SETUP_MODE_MAIN; static TreeInfo *screen_modes = NULL; static TreeInfo *screen_mode_current = NULL; @@ -232,10 +248,18 @@ static struct (s) == GAME_MODE_PSEUDO_TYPENAME ? \ GAME_MODE_MAIN : GAME_MODE_DEFAULT) +/* (there are no draw offset definitions needed for INFO_MODE_TITLE) */ #define DRAW_MODE_INFO(i) ((i) >= INFO_MODE_ELEMENTS && \ (i) <= INFO_MODE_LEVELSET ? (i) : \ INFO_MODE_MAIN) +#define DRAW_MODE_SETUP(i) ((i) >= SETUP_MODE_MAIN && \ + (i) <= SETUP_MODE_SHORTCUTS_2 ? (i) : \ + (i) >= SETUP_MODE_CHOOSE_GRAPHICS && \ + (i) <= SETUP_MODE_CHOOSE_MUSIC ? \ + SETUP_MODE_CHOOSE_ARTWORK : \ + SETUP_MODE_CHOOSE_OTHER) + #define DRAW_XOFFSET_INFO(i) (DRAW_MODE_INFO(i) == INFO_MODE_MAIN ? \ menu.draw_xoffset[GAME_MODE_INFO] : \ menu.draw_xoffset_info[DRAW_MODE_INFO(i)]) @@ -243,11 +267,22 @@ static struct menu.draw_yoffset[GAME_MODE_INFO] : \ menu.draw_yoffset_info[DRAW_MODE_INFO(i)]) +#define DRAW_XOFFSET_SETUP(i) (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \ + menu.draw_xoffset[GAME_MODE_SETUP] : \ + menu.draw_xoffset_setup[DRAW_MODE_SETUP(i)]) +#define DRAW_YOFFSET_SETUP(i) (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \ + menu.draw_yoffset[GAME_MODE_SETUP] : \ + menu.draw_yoffset_setup[DRAW_MODE_SETUP(i)]) + #define DRAW_XOFFSET(s) ((s) == GAME_MODE_INFO ? \ DRAW_XOFFSET_INFO(info_mode) : \ + (s) == GAME_MODE_SETUP ? \ + DRAW_XOFFSET_SETUP(setup_mode) : \ menu.draw_xoffset[DRAW_MODE(s)]) #define DRAW_YOFFSET(s) ((s) == GAME_MODE_INFO ? \ DRAW_YOFFSET_INFO(info_mode) : \ + (s) == GAME_MODE_SETUP ? \ + DRAW_YOFFSET_SETUP(setup_mode) : \ menu.draw_yoffset[DRAW_MODE(s)]) #define mSX (SX + DRAW_XOFFSET(game_status)) @@ -351,49 +386,49 @@ static struct MainControlInfo main_controls[] = { { MAIN_CONTROL_NAME, - &menu.main.button.name, IMG_MENU_BUTTON, + &menu.main.button.name, IMG_MENU_BUTTON_NAME, &menu.main.text.name, &main_text_name, &menu.main.input.name, &setup.player_name, }, { MAIN_CONTROL_LEVELS, - &menu.main.button.levels, IMG_MENU_BUTTON_ENTER_MENU, + &menu.main.button.levels, IMG_MENU_BUTTON_LEVELS, &menu.main.text.levels, &main_text_levels, NULL, NULL, }, { MAIN_CONTROL_SCORES, - &menu.main.button.scores, IMG_MENU_BUTTON, + &menu.main.button.scores, IMG_MENU_BUTTON_SCORES, &menu.main.text.scores, &main_text_scores, NULL, NULL, }, { MAIN_CONTROL_EDITOR, - &menu.main.button.editor, IMG_MENU_BUTTON, + &menu.main.button.editor, IMG_MENU_BUTTON_EDITOR, &menu.main.text.editor, &main_text_editor, NULL, NULL, }, { MAIN_CONTROL_INFO, - &menu.main.button.info, IMG_MENU_BUTTON_ENTER_MENU, + &menu.main.button.info, IMG_MENU_BUTTON_INFO, &menu.main.text.info, &main_text_info, NULL, NULL, }, { MAIN_CONTROL_GAME, - &menu.main.button.game, IMG_MENU_BUTTON, + &menu.main.button.game, IMG_MENU_BUTTON_GAME, &menu.main.text.game, &main_text_game, NULL, NULL, }, { MAIN_CONTROL_SETUP, - &menu.main.button.setup, IMG_MENU_BUTTON_ENTER_MENU, + &menu.main.button.setup, IMG_MENU_BUTTON_SETUP, &menu.main.text.setup, &main_text_setup, NULL, NULL, }, { MAIN_CONTROL_QUIT, - &menu.main.button.quit, IMG_MENU_BUTTON, + &menu.main.button.quit, IMG_MENU_BUTTON_QUIT, &menu.main.text.quit, &main_text_quit, NULL, NULL, }, @@ -758,9 +793,13 @@ static void InitializeMainControls() /* set main control text values to dynamically determined values */ sprintf(main_text_name, "%s", local_team_mode ? "Team:" : "Name:"); - sprintf(main_text_first_level, "%03d", leveldir_current->first_level); - sprintf(main_text_last_level, "%03d", leveldir_current->last_level); - sprintf(main_text_level_number, "%s", int2str(level_nr, 3)); + + strcpy(main_text_first_level, int2str(leveldir_current->first_level, + menu.main.text.first_level.size)); + strcpy(main_text_last_level, int2str(leveldir_current->last_level, + menu.main.text.last_level.size)); + strcpy(main_text_level_number, int2str(level_nr, + menu.main.text.level_number.size)); main_text_level_year = leveldir_current->year; main_text_level_imported_from = leveldir_current->imported_from; @@ -892,7 +931,7 @@ static void DrawCursorAndText_Main_Ext(int nr, boolean active_text, if (active_text) { - button_graphic = BUTTON_GRAPHIC_ACTIVE(button_graphic); + button_graphic = BUTTON_ACTIVE(button_graphic); font_text = FONT_ACTIVE(font_text); } @@ -1002,7 +1041,7 @@ static void drawCursorExt(int xpos, int ypos, boolean active, int graphic) } if (active) - graphic = BUTTON_GRAPHIC_ACTIVE(graphic); + graphic = BUTTON_ACTIVE(graphic); DrawBackgroundForGraphic(x, y, TILEX, TILEY, graphic); DrawGraphicThruMaskExt(drawto, x, y, graphic, 0); @@ -1027,8 +1066,10 @@ static void drawChooseTreeCursor(int ypos, boolean active) { int last_game_status = game_status; /* save current game status */ +#if 0 /* force LEVELS draw offset on artwork setup screen */ game_status = GAME_MODE_LEVELS; +#endif drawCursorExt(0, ypos, active, -1); @@ -1253,11 +1294,28 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) title = title_default; #endif +#if 0 + { + int graphicA = element_info[EL_EM_DYNAMITE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_EDITOR]; + int graphicB = element_info[EL_EM_DYNAMITE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_PANEL]; + int graphic1 = element_info[EL_CONVEYOR_BELT_1_MIDDLE].special_graphic[GFX_SPECIAL_ARG_EDITOR]; + int graphic2 = element_info[EL_CONVEYOR_BELT_1_MIDDLE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_EDITOR]; + + printf("::: %d [%d] -> %d, %d [%d, %d]\n", + graphicA, graphicB, + graphic_info[graphicA].src_x, + graphic_info[graphicA].src_y, + graphic1, graphic2); + } +#endif + #if 0 printf("::: %d, %d\n", fading.anim_mode == ANIM_CROSSFADE, redraw_mask == REDRAW_ALL); #endif + FadeSetLeaveScreen(); + #if 1 FadeOut(redraw_mask); #endif @@ -1471,7 +1529,9 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) MapTapeButtons(); MapScreenMenuGadgets(SCREEN_MASK_MAIN); +#if 0 DrawMaskedBorder(REDRAW_ALL); +#endif #if 1 if (redraw_mask == REDRAW_ALL) @@ -1710,7 +1770,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) FadeOut(REDRAW_FIELD); #endif - FadeSetStartItem(); + FadeSetEnterScreen(); info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -1885,7 +1945,8 @@ void HandleMainMenu_SelectLevel(int step, int direction) #if 1 DrawText(mSX + mci->pos_text->x, mSY + mci->pos_text->y, - int2str(level_nr, 3), mci->pos_text->font); + int2str(level_nr, menu.main.text.level_number.size), + mci->pos_text->font); #else DrawText(mSX + 11 * 32, mSY + 3 * 32, int2str(level_nr, 3), FONT_VALUE_1); #endif @@ -2001,7 +2062,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) game_status = GAME_MODE_EDITOR; - FadeSetStartItem(); + FadeSetEnterScreen(); DrawLevelEd(); } @@ -2107,6 +2168,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) if (leveldir_first) { game_status = GAME_MODE_LEVELS; + SaveLevelSetup_LastSeries(); SaveLevelSetup_SeriesInfo(); @@ -2178,7 +2240,7 @@ static int num_info_info; static void execInfoTitleScreen() { #if 0 - FadeSetStartItem(); + FadeSetEnterScreen(); #endif info_mode = INFO_MODE_TITLE; @@ -2188,7 +2250,7 @@ static void execInfoTitleScreen() static void execInfoElements() { #if 0 - FadeSetStartItem(); + FadeSetEnterScreen(); #endif info_mode = INFO_MODE_ELEMENTS; @@ -2198,7 +2260,7 @@ static void execInfoElements() static void execInfoMusic() { #if 0 - FadeSetStartItem(); + FadeSetEnterScreen(); #endif info_mode = INFO_MODE_MUSIC; @@ -2208,7 +2270,7 @@ static void execInfoMusic() static void execInfoCredits() { #if 0 - FadeSetStartItem(); + FadeSetEnterScreen(); #endif info_mode = INFO_MODE_CREDITS; @@ -2218,7 +2280,7 @@ static void execInfoCredits() static void execInfoProgram() { #if 0 - FadeSetStartItem(); + FadeSetEnterScreen(); #endif info_mode = INFO_MODE_PROGRAM; @@ -2228,7 +2290,7 @@ static void execInfoProgram() static void execInfoVersion() { #if 0 - FadeSetStartItem(); + FadeSetEnterScreen(); #endif info_mode = INFO_MODE_VERSION; @@ -2238,7 +2300,7 @@ static void execInfoVersion() static void execInfoLevelSet() { #if 0 - FadeSetStartItem(); + FadeSetEnterScreen(); #endif info_mode = INFO_MODE_LEVELSET; @@ -2299,6 +2361,8 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading) /* (needed after displaying title screens which disable auto repeat) */ KeyboardAutoRepeatOn(); + FadeSetLeaveScreen(); + #if 1 FadeOut(redraw_mask); #endif @@ -3772,8 +3836,10 @@ static void drawChooseTreeList(int first_entry, int num_page_entries, DrawTextSCentered(mSY - SY + yoffset, FONT_TITLE_1, title_string); +#if 0 /* force LEVELS font on artwork setup screen */ game_status = GAME_MODE_LEVELS; +#endif #if 1 /* clear tree list area, but not title or scrollbar */ @@ -3867,8 +3933,10 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, int last_game_status = game_status; /* save current game status */ boolean position_set_by_scrollbar = (dx == 999); +#if 0 /* force LEVELS draw offset on choose level and artwork setup screen */ game_status = GAME_MODE_LEVELS; +#endif if (num_entries <= NUM_MENU_ENTRIES_ON_SCREEN) num_page_entries = num_entries; @@ -3947,8 +4015,10 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, { int last_game_status = game_status; /* save current game status */ +#if 0 /* force LEVELS draw offset on artwork setup screen */ game_status = GAME_MODE_LEVELS; +#endif x = (mx - mSX) / 32; y = (my - mSY) / 32 - MENU_SCREEN_START_YPOS; @@ -4089,7 +4159,7 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } else { - FadeSetStartItem(); + FadeSetEnterScreen(); node_cursor->cl_first = ti->cl_first; node_cursor->cl_cursor = ti->cl_cursor; @@ -4159,7 +4229,9 @@ void DrawHallOfFame(int highlight_position) if (highlight_position < 0) LoadScore(level_nr); - FadeSetStartItem(); + FadeSetEnterScreen(); + + // printf("::: %d: %d\n", game_status, menu.enter_screen[game_status]); #if 1 FadeOut(REDRAW_FIELD); @@ -4597,23 +4669,23 @@ static void execSetupInput() DrawSetupScreen(); } -static void execSetupShortcut1() +static void execSetupShortcuts1() { #if 0 FadeSetEnterMenu(); #endif - setup_mode = SETUP_MODE_SHORTCUT_1; + setup_mode = SETUP_MODE_SHORTCUTS_1; DrawSetupScreen(); } -static void execSetupShortcut2() +static void execSetupShortcuts2() { #if 0 FadeSetEnterMenu(); #endif - setup_mode = SETUP_MODE_SHORTCUT_2; + setup_mode = SETUP_MODE_SHORTCUTS_2; DrawSetupScreen(); } @@ -4645,8 +4717,8 @@ static struct TokenInfo setup_info_main[] = { TYPE_ENTER_MENU, execSetupSound, "Sound & Music" }, { TYPE_ENTER_MENU, execSetupArtwork, "Custom Artwork" }, { TYPE_ENTER_MENU, execSetupInput, "Input Devices" }, - { TYPE_ENTER_MENU, execSetupShortcut1, "Key Shortcuts 1" }, - { TYPE_ENTER_MENU, execSetupShortcut2, "Key Shortcuts 2" }, + { TYPE_ENTER_MENU, execSetupShortcuts1, "Key Shortcuts 1" }, + { TYPE_ENTER_MENU, execSetupShortcuts2, "Key Shortcuts 2" }, { TYPE_EMPTY, NULL, "" }, { TYPE_LEAVE_MENU, execExitSetup, "Exit" }, { TYPE_LEAVE_MENU, execSaveAndExitSetup, "Save and Exit" }, @@ -4785,7 +4857,7 @@ static struct TokenInfo setup_info_input[] = { 0, NULL, NULL } }; -static struct TokenInfo setup_info_shortcut_1[] = +static struct TokenInfo setup_info_shortcuts_1[] = { { TYPE_KEYTEXT, NULL, "Quick Save Game to Tape:", }, { TYPE_KEY, &setup.shortcut.save_game, "" }, @@ -4802,7 +4874,7 @@ static struct TokenInfo setup_info_shortcut_1[] = { 0, NULL, NULL } }; -static struct TokenInfo setup_info_shortcut_2[] = +static struct TokenInfo setup_info_shortcuts_2[] = { { TYPE_KEYTEXT, NULL, "Set Focus to Player 1:", }, { TYPE_KEY, &setup.shortcut.focus_player[0], "" }, @@ -5063,14 +5135,14 @@ static void DrawSetupScreen_Generic() setup_info = setup_info_artwork; title_string = "Custom Artwork"; } - else if (setup_mode == SETUP_MODE_SHORTCUT_1) + else if (setup_mode == SETUP_MODE_SHORTCUTS_1) { - setup_info = setup_info_shortcut_1; + setup_info = setup_info_shortcuts_1; title_string = "Setup Shortcuts"; } - else if (setup_mode == SETUP_MODE_SHORTCUT_2) + else if (setup_mode == SETUP_MODE_SHORTCUTS_2) { - setup_info = setup_info_shortcut_2; + setup_info = setup_info_shortcuts_2; title_string = "Setup Shortcuts"; } @@ -6353,8 +6425,10 @@ void CreateScreenGadgets() CreateScreenMenubuttons(); +#if 0 /* force LEVELS draw offset for scrollbar / scrollbutton gadgets */ game_status = GAME_MODE_LEVELS; +#endif CreateScreenScrollbuttons(); CreateScreenScrollbars();