X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=ece8b097db923651cbc872a395e33111231c8b1c;hb=066b410c0573fe64a1783116daf9d64883e9f03e;hp=50383cdf86ab1e3cd4ec6a880b7091a210f252ee;hpb=335f4db8f7a8bea9b06eeea911b6d1e1d4de4623;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 50383cdf..ece8b097 100644 --- a/src/screens.c +++ b/src/screens.c @@ -30,9 +30,11 @@ #define SETUP_MODE_SHORTCUT 2 #define SETUP_MODE_GRAPHICS 3 #define SETUP_MODE_SOUND 4 -#define SETUP_MODE_CHOOSE_SOUNDS 5 +#define SETUP_MODE_CHOOSE_GRAPHICS 5 +#define SETUP_MODE_CHOOSE_SOUNDS 6 +#define SETUP_MODE_CHOOSE_MUSIC 7 -#define MAX_SETUP_MODES 6 +#define MAX_SETUP_MODES 8 /* for input setup functions */ #define SETUPINPUT_SCREEN_POS_START 0 @@ -150,6 +152,9 @@ void DrawMainMenu() /* needed if last screen was the setup screen and fullscreen state changed */ ToggleFullscreenIfNeeded(); + /* needed if last screen (setup/level) changed graphics, sounds or music */ + ReloadCustomArtwork(); + #ifdef TARGET_SDL SetDrawtoField(DRAW_BACKBUFFER); #endif @@ -159,7 +164,7 @@ void DrawMainMenu() /* leveldir_current may be invalid (level group, parent link) */ if (!validLevelSeries(leveldir_current)) - leveldir_current = getFirstValidLevelSeries(leveldir_last_valid); + leveldir_current = getFirstValidTreeInfoEntry(leveldir_last_valid); /* store valid level series information */ leveldir_last_valid = leveldir_current; @@ -229,7 +234,6 @@ void DrawMainMenu() #if 0 ClearEventQueue(); #endif - } static void gotoTopLevelDir() @@ -1348,7 +1352,6 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) static struct TokenInfo *setup_info; static int num_setup_info; -static char *custom_artwork; static void execSetupMain() { @@ -1356,20 +1359,41 @@ static void execSetupMain() DrawSetupScreen(); } +static void execSetupGraphics() +{ + setup.graphics_set = artwork.gfx_current->name; + + setup_mode = SETUP_MODE_GRAPHICS; + DrawSetupScreen(); +} + static void execSetupSound() { - custom_artwork = artwork.snd_current->name; + setup.sounds_set = artwork.snd_current->name; + setup.music_set = artwork.mus_current->name; setup_mode = SETUP_MODE_SOUND; DrawSetupScreen(); } +static void execSetupChooseGraphics() +{ + setup_mode = SETUP_MODE_CHOOSE_GRAPHICS; + DrawSetupScreen(); +} + static void execSetupChooseSounds() { setup_mode = SETUP_MODE_CHOOSE_SOUNDS; DrawSetupScreen(); } +static void execSetupChooseMusic() +{ + setup_mode = SETUP_MODE_CHOOSE_MUSIC; + DrawSetupScreen(); +} + static void execSetupInput() { setup_mode = SETUP_MODE_INPUT; @@ -1384,7 +1408,9 @@ static void execSetupShortcut() static void execExitSetupChooseArtwork() { - if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS) + if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS) + execSetupGraphics(); + else execSetupSound(); } @@ -1402,49 +1428,56 @@ static void execSaveAndExitSetup() static struct TokenInfo setup_info_main[] = { - { TYPE_ENTER_MENU, execSetupSound, "Sound Setup" }, - { TYPE_ENTER_MENU, execSetupInput, "Input Devices" }, - { TYPE_ENTER_MENU, execSetupShortcut, "Key Shortcuts" }, -#if 0 - { TYPE_EMPTY, NULL, "" }, - { TYPE_SWITCH, &setup.sound, "Sound:", }, - { TYPE_SWITCH, &setup.sound_loops, " Sound Loops:" }, - { TYPE_SWITCH, &setup.sound_music, " Game Music:" }, -#endif - { TYPE_SWITCH, &setup.toons, "Toons:" }, -#if 0 - { TYPE_SWITCH, &setup.double_buffering,"Buffered gfx:" }, -#endif - { TYPE_SWITCH, &setup.scroll_delay, "Scroll Delay:" }, - { TYPE_SWITCH, &setup.soft_scrolling, "Soft Scroll.:" }, + { TYPE_ENTER_MENU, execSetupGraphics, "Graphics Setup" }, + { TYPE_ENTER_MENU, execSetupSound, "Sound Setup" }, + { TYPE_ENTER_MENU, execSetupInput, "Input Devices" }, + { TYPE_ENTER_MENU, execSetupShortcut, "Key Shortcuts" }, + { TYPE_EMPTY, NULL, "" }, #if 0 - { TYPE_SWITCH, &setup.fading, "Fading:" }, + { TYPE_SWITCH, &setup.double_buffering,"Buffered gfx:" }, + { TYPE_SWITCH, &setup.fading, "Fading:" }, #endif - { TYPE_SWITCH, &setup.fullscreen, "Fullscreen:" }, - { TYPE_SWITCH, &setup.quick_doors, "Quick Doors:" }, - { TYPE_SWITCH, &setup.autorecord, "Auto-Record:" }, - { TYPE_SWITCH, &setup.team_mode, "Team-Mode:" }, - { TYPE_SWITCH, &setup.handicap, "Handicap:" }, - { TYPE_SWITCH, &setup.time_limit, "Timelimit:" }, - { TYPE_EMPTY, NULL, "" }, - { TYPE_LEAVE_MENU, execExitSetup, "Exit" }, - { TYPE_LEAVE_MENU, execSaveAndExitSetup, "Save and exit" }, - { 0, NULL, NULL } + { TYPE_SWITCH, &setup.quick_doors, "Quick Doors:" }, + { TYPE_SWITCH, &setup.ask_on_escape, "Ask on Esc:" }, + { TYPE_SWITCH, &setup.toons, "Toons:" }, + { TYPE_SWITCH, &setup.autorecord, "Auto-Record:" }, + { TYPE_SWITCH, &setup.team_mode, "Team-Mode:" }, + { TYPE_SWITCH, &setup.handicap, "Handicap:" }, + { TYPE_SWITCH, &setup.time_limit, "Timelimit:" }, + { TYPE_EMPTY, NULL, "" }, + { TYPE_LEAVE_MENU, execExitSetup, "Exit" }, + { TYPE_LEAVE_MENU, execSaveAndExitSetup, "Save and exit" }, + { 0, NULL, NULL } +}; + +static struct TokenInfo setup_info_graphics[] = +{ + { TYPE_ENTER_MENU, execSetupChooseGraphics,"Custom Graphics" }, + { TYPE_STRING, &setup.graphics_set, "" }, + { TYPE_EMPTY, NULL, "" }, + { TYPE_SWITCH, &setup.fullscreen, "Fullscreen:" }, + { TYPE_SWITCH, &setup.scroll_delay, "Scroll Delay:" }, + { TYPE_SWITCH, &setup.soft_scrolling, "Soft Scroll.:" }, + { TYPE_EMPTY, NULL, "" }, + { TYPE_LEAVE_MENU, execSetupMain, "Exit" }, + { 0, NULL, NULL } }; static struct TokenInfo setup_info_sound[] = { - { TYPE_SWITCH, &setup.sound, "Sound:", }, - { TYPE_EMPTY, NULL, "" }, - { TYPE_SWITCH, &setup.sound_simple, "Simple Sound:" }, - { TYPE_SWITCH, &setup.sound_loops, "Sound Loops:" }, - { TYPE_SWITCH, &setup.sound_music, "Game Music:" }, - { TYPE_EMPTY, NULL, "" }, - { TYPE_ENTER_MENU, execSetupChooseSounds, "Custom Sounds" }, - { TYPE_STRING, &custom_artwork, "" }, - { TYPE_EMPTY, NULL, "" }, - { TYPE_LEAVE_MENU, execSetupMain, "Exit" }, - { 0, NULL, NULL } + { TYPE_SWITCH, &setup.sound, "Sound:", }, + { TYPE_EMPTY, NULL, "" }, + { TYPE_SWITCH, &setup.sound_simple, "Simple Sound:" }, + { TYPE_SWITCH, &setup.sound_loops, "Sound Loops:" }, + { TYPE_SWITCH, &setup.sound_music, "Game Music:" }, + { TYPE_EMPTY, NULL, "" }, + { TYPE_ENTER_MENU, execSetupChooseSounds, "Custom Sounds" }, + { TYPE_STRING, &setup.sounds_set, "" }, + { TYPE_ENTER_MENU, execSetupChooseMusic, "Custom Music" }, + { TYPE_STRING, &setup.music_set, "" }, + { TYPE_EMPTY, NULL, "" }, + { TYPE_LEAVE_MENU, execSetupMain, "Exit" }, + { 0, NULL, NULL } }; static struct TokenInfo setup_info_shortcut[] = @@ -1509,7 +1542,8 @@ static void drawSetupValue(int pos) { int xpos = MENU_SCREEN_VALUE_XPOS; int ypos = MENU_SCREEN_START_YPOS + pos; - int value_color = FC_YELLOW; + int font_size = FS_BIG; + int font_color = FC_YELLOW; char *value_string = getSetupValue(setup_info[pos].type & ~TYPE_GHOSTED, setup_info[pos].value); @@ -1520,23 +1554,26 @@ static void drawSetupValue(int pos) if (setup_info[pos].type & TYPE_QUERY) { value_string = ""; - value_color = FC_RED; + font_color = FC_RED; } } else if (setup_info[pos].type & TYPE_STRING) { - xpos = 3; + int max_value_len = (SCR_FIELDX - 2) * 2; + + xpos = 1; + font_size = FS_MEDIUM; - if (strlen(value_string) > 14) - value_string[14] = '\0'; + if (strlen(value_string) > max_value_len) + value_string[max_value_len] = '\0'; } else if (setup_info[pos].type & TYPE_BOOLEAN_STYLE && !*(boolean *)(setup_info[pos].value)) - value_color = FC_BLUE; + font_color = FC_BLUE; DrawText(SX + xpos * 32, SY + ypos * 32, (xpos == 3 ? " " : " "), FS_BIG, FC_YELLOW); - DrawText(SX + xpos * 32, SY + ypos * 32, value_string, FS_BIG, value_color); + DrawText(SX + xpos * 32, SY + ypos * 32, value_string, font_size,font_color); } static void changeSetupValue(int pos) @@ -1575,6 +1612,11 @@ static void DrawSetupScreen_Generic() setup_info = setup_info_main; title_string = "Setup"; } + else if (setup_mode == SETUP_MODE_GRAPHICS) + { + setup_info = setup_info_graphics; + title_string = "Setup Graphics"; + } else if (setup_mode == SETUP_MODE_SOUND) { setup_info = setup_info_sound; @@ -1593,6 +1635,7 @@ static void DrawSetupScreen_Generic() { void *value_ptr = setup_info[i].value; int ypos = MENU_SCREEN_START_YPOS + i; + int font_size = FS_BIG; /* set some entries to "unchangeable" according to other variables */ if ((value_ptr == &setup.sound && !audio.sound_available) || @@ -1602,7 +1645,10 @@ static void DrawSetupScreen_Generic() (value_ptr == &setup.fullscreen && !video.fullscreen_available)) setup_info[i].type |= TYPE_GHOSTED; - DrawText(SX + 32, SY + ypos * 32, setup_info[i].text, FS_BIG, FC_GREEN); + if (setup_info[i].type & TYPE_ENTER_OR_LEAVE_MENU) + font_size = FS_BIG; + + DrawText(SX + 32, SY + ypos * 32, setup_info[i].text, font_size, FC_GREEN); if (setup_info[i].type & TYPE_ENTER_MENU) initCursor(i, GFX_ARROW_BLUE_RIGHT); @@ -2303,8 +2349,12 @@ void DrawSetupScreen() { if (setup_mode == SETUP_MODE_INPUT) DrawSetupScreen_Input(); + else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS) + DrawChooseTree(&artwork.gfx_current); else if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS) DrawChooseTree(&artwork.snd_current); + else if (setup_mode == SETUP_MODE_CHOOSE_MUSIC) + DrawChooseTree(&artwork.mus_current); else DrawSetupScreen_Generic(); } @@ -2313,8 +2363,12 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) { if (setup_mode == SETUP_MODE_INPUT) HandleSetupScreen_Input(mx, my, dx, dy, button); + else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS) + HandleChooseTree(mx, my, dx, dy, button, &artwork.gfx_current); else if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS) HandleChooseTree(mx, my, dx, dy, button, &artwork.snd_current); + else if (setup_mode == SETUP_MODE_CHOOSE_MUSIC) + HandleChooseTree(mx, my, dx, dy, button, &artwork.mus_current); else HandleSetupScreen_Generic(mx, my, dx, dy, button); }