X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=2392bcf0a159648444733d651b82ce164d379e61;hb=faad97c450f035fb84748e8ca72048e53c92de78;hp=77b906030d440733ce5c9451365af96acec53d54;hpb=80aa0e4b2b060112407417a9d2896395023a21cc;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 77b90603..2392bcf0 100644 --- a/src/screens.c +++ b/src/screens.c @@ -63,8 +63,11 @@ #define SETUP_MODE_CHOOSE_GRAPHICS 18 #define SETUP_MODE_CHOOSE_SOUNDS 19 #define SETUP_MODE_CHOOSE_MUSIC 20 +#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 21 +#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 22 +#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 23 -#define MAX_SETUP_MODES 21 +#define MAX_SETUP_MODES 24 /* for input setup functions */ #define SETUPINPUT_SCREEN_POS_START 0 @@ -138,6 +141,7 @@ static void CustomizeKeyboard(int); static void CalibrateJoystick(int); static void execSetupGame(void); static void execSetupGraphics(void); +static void execSetupSound(void); static void execSetupArtwork(void); static void HandleChooseTree(int, int, int, int, int, TreeInfo **); @@ -176,6 +180,15 @@ static TreeInfo *scroll_delay_current = NULL; static TreeInfo *game_speeds = NULL; static TreeInfo *game_speed_current = NULL; +static TreeInfo *volumes_simple = NULL; +static TreeInfo *volume_simple_current = NULL; + +static TreeInfo *volumes_loops = NULL; +static TreeInfo *volume_loops_current = NULL; + +static TreeInfo *volumes_music = NULL; +static TreeInfo *volume_music_current = NULL; + static TreeInfo *level_number = NULL; static TreeInfo *level_number_current = NULL; @@ -229,6 +242,27 @@ static struct { -1, NULL }, }; +static struct +{ + int value; + char *text; +} volumes_list[] = +{ + { 0, "0 %" }, + { 10, "10 %" }, + { 20, "20 %" }, + { 30, "30 %" }, + { 40, "40 %" }, + { 50, "50 %" }, + { 60, "60 %" }, + { 70, "70 %" }, + { 80, "80 %" }, + { 90, "90 %" }, + { 100, "100 %" }, + + { -1, NULL }, +}; + #define DRAW_MODE(s) ((s) >= GAME_MODE_MAIN && \ (s) <= GAME_MODE_SETUP ? (s) : \ (s) == GAME_MODE_PSEUDO_TYPENAME ? \ @@ -2849,6 +2883,18 @@ void DrawInfoScreen_Program() "If you like it, send e-mail to:"); DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_3, PROGRAM_EMAIL_STRING); +#if 1 + DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2, + "More information and levels:"); + DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3, + PROGRAM_WEBSITE_STRING); + DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_2, + "If you have created new levels,"); + DrawTextSCentered(ystart2 + 8 * ystep, FONT_TEXT_2, + "send them to me to include them!"); + DrawTextSCentered(ystart2 + 9 * ystep, FONT_TEXT_2, + ":-)"); +#else DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_2, "or SnailMail to:"); DrawTextSCentered(ystart2 + 4 * ystep + 0, FONT_TEXT_3, @@ -2869,6 +2915,7 @@ void DrawInfoScreen_Program() "send them to me to include them!"); DrawTextSCentered(ystart2 + 11 * ystep, FONT_TEXT_2, ":-)"); +#endif DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for info menu"); @@ -2922,9 +2969,16 @@ void DrawInfoScreen_Version() #if defined(TARGET_SDL) int xstart3 = mSX + 29 * xstep; SDL_version sdl_version_compiled; +#if defined(TARGET_SDL2) + SDL_version sdl_version_linked_ext; +#endif const SDL_version *sdl_version_linked; +#if defined(TARGET_SDL2) + const char *driver_name = NULL; +#else int driver_name_len = 8; char driver_name[driver_name_len]; +#endif #endif SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_VERSION); @@ -2964,7 +3018,12 @@ void DrawInfoScreen_Version() DrawTextF(xstart3, ystart2, font_header, "linked"); SDL_VERSION(&sdl_version_compiled); +#if defined(TARGET_SDL2) + SDL_GetVersion(&sdl_version_linked_ext); + sdl_version_linked = &sdl_version_linked_ext; +#else sdl_version_linked = SDL_Linked_Version(); +#endif ystart2 += 2 * ystep; DrawTextF(xstart1, ystart2, font_text, "SDL"); @@ -3024,14 +3083,22 @@ void DrawInfoScreen_Version() DrawTextF(xstart2, ystart2, font_header, "Requested"); DrawTextF(xstart3, ystart2, font_header, "Used"); +#if defined(TARGET_SDL2) + driver_name = SDL_GetVideoDriver(0); +#else SDL_VideoDriverName(driver_name, driver_name_len); +#endif ystart2 += 2 * ystep; DrawTextF(xstart1, ystart2, font_text, "SDL_VideoDriver"); DrawTextF(xstart2, ystart2, font_text, "%s", setup.system.sdl_videodriver); DrawTextF(xstart3, ystart2, font_text, "%s", driver_name); +#if defined(TARGET_SDL2) + driver_name = SDL_GetAudioDriver(0); +#else SDL_AudioDriverName(driver_name, driver_name_len); +#endif ystart2 += ystep; DrawTextF(xstart1, ystart2, font_text, "SDL_AudioDriver"); @@ -3525,6 +3592,10 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE || setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) execSetupGraphics(); + else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_SIMPLE || + setup_mode == SETUP_MODE_CHOOSE_VOLUME_LOOPS || + setup_mode == SETUP_MODE_CHOOSE_VOLUME_MUSIC) + execSetupSound(); else execSetupArtwork(); } @@ -3711,6 +3782,10 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE || setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) execSetupGraphics(); + else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_SIMPLE || + setup_mode == SETUP_MODE_CHOOSE_VOLUME_LOOPS || + setup_mode == SETUP_MODE_CHOOSE_VOLUME_MUSIC) + execSetupSound(); else execSetupArtwork(); } @@ -3976,6 +4051,9 @@ static char *game_speed_text; static char *graphics_set_name; static char *sounds_set_name; static char *music_set_name; +static char *volume_simple_text; +static char *volume_loops_text; +static char *volume_music_text; static void execSetupMain() { @@ -4160,9 +4238,11 @@ static void execSetupGraphics() #endif setup_mode = SETUP_MODE_GRAPHICS; + DrawSetupScreen(); } +#if !defined(TARGET_SDL2) static void execSetupChooseScreenMode() { if (!video.fullscreen_available) @@ -4172,6 +4252,7 @@ static void execSetupChooseScreenMode() DrawSetupScreen(); } +#endif static void execSetupChooseScrollDelay() { @@ -4180,8 +4261,166 @@ static void execSetupChooseScrollDelay() DrawSetupScreen(); } +static void execSetupChooseVolumeSimple() +{ + setup_mode = SETUP_MODE_CHOOSE_VOLUME_SIMPLE; + + DrawSetupScreen(); +} + +static void execSetupChooseVolumeLoops() +{ + setup_mode = SETUP_MODE_CHOOSE_VOLUME_LOOPS; + + DrawSetupScreen(); +} + +static void execSetupChooseVolumeMusic() +{ + setup_mode = SETUP_MODE_CHOOSE_VOLUME_MUSIC; + + DrawSetupScreen(); +} + static void execSetupSound() { +#if 1 + if (volumes_simple == NULL) + { + int i; + + for (i = 0; volumes_list[i].value != -1; i++) + { + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int value = volumes_list[i].value; + char *text = volumes_list[i].text; + + ti->node_top = &volumes_simple; + ti->sort_priority = value; + + sprintf(identifier, "%d", value); + sprintf(name, "%s", text); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, "Sound Volume"); + + pushTreeInfo(&volumes_simple, ti); + } + + /* sort volume values to start with lowest volume value */ + sortTreeInfo(&volumes_simple); + + /* set current volume value to configured volume value */ + volume_simple_current = + getTreeInfoFromIdentifier(volumes_simple,i_to_a(setup.volume_simple)); + + /* if that fails, set current volume to reliable default value */ + if (volume_simple_current == NULL) + volume_simple_current = + getTreeInfoFromIdentifier(volumes_simple, i_to_a(100)); + + /* if that also fails, set current volume to first available value */ + if (volume_simple_current == NULL) + volume_simple_current = volumes_simple; + } + + if (volumes_loops == NULL) + { + int i; + + for (i = 0; volumes_list[i].value != -1; i++) + { + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int value = volumes_list[i].value; + char *text = volumes_list[i].text; + + ti->node_top = &volumes_loops; + ti->sort_priority = value; + + sprintf(identifier, "%d", value); + sprintf(name, "%s", text); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, "Loops Volume"); + + pushTreeInfo(&volumes_loops, ti); + } + + /* sort volume values to start with lowest volume value */ + sortTreeInfo(&volumes_loops); + + /* set current volume value to configured volume value */ + volume_loops_current = + getTreeInfoFromIdentifier(volumes_loops,i_to_a(setup.volume_loops)); + + /* if that fails, set current volume to reliable default value */ + if (volume_loops_current == NULL) + volume_loops_current = + getTreeInfoFromIdentifier(volumes_loops, i_to_a(100)); + + /* if that also fails, set current volume to first available value */ + if (volume_loops_current == NULL) + volume_loops_current = volumes_loops; + } + + if (volumes_music == NULL) + { + int i; + + for (i = 0; volumes_list[i].value != -1; i++) + { + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int value = volumes_list[i].value; + char *text = volumes_list[i].text; + + ti->node_top = &volumes_music; + ti->sort_priority = value; + + sprintf(identifier, "%d", value); + sprintf(name, "%s", text); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, "Music Volume"); + + pushTreeInfo(&volumes_music, ti); + } + + /* sort volume values to start with lowest volume value */ + sortTreeInfo(&volumes_music); + + /* set current volume value to configured volume value */ + volume_music_current = + getTreeInfoFromIdentifier(volumes_music,i_to_a(setup.volume_music)); + + /* if that fails, set current volume to reliable default value */ + if (volume_music_current == NULL) + volume_music_current = + getTreeInfoFromIdentifier(volumes_music, i_to_a(100)); + + /* if that also fails, set current volume to first available value */ + if (volume_music_current == NULL) + volume_music_current = volumes_music; + } + + setup.volume_simple = atoi(volume_simple_current->identifier); + setup.volume_loops = atoi(volume_loops_current->identifier); + setup.volume_music = atoi(volume_music_current->identifier); + + /* needed for displaying volume text instead of identifier */ + volume_simple_text = volume_simple_current->name; + volume_loops_text = volume_loops_current->name; + volume_music_text = volume_music_current->name; +#endif + setup_mode = SETUP_MODE_SOUND; DrawSetupScreen(); @@ -4364,8 +4603,10 @@ static struct TokenInfo setup_info_editor[] = static struct TokenInfo setup_info_graphics[] = { { TYPE_SWITCH, &setup.fullscreen, "Fullscreen:" }, +#if !defined(TARGET_SDL2) { TYPE_ENTER_LIST, execSetupChooseScreenMode, "Fullscreen Mode:" }, { TYPE_STRING, &screen_mode_text, "" }, +#endif #if 0 { TYPE_SWITCH, &setup.scroll_delay, "Scroll Delay:" }, #endif @@ -4394,6 +4635,13 @@ static struct TokenInfo setup_info_sound[] = { TYPE_SWITCH, &setup.sound_loops, "Sound Effects (Looping):" }, { TYPE_SWITCH, &setup.sound_music, "Music:" }, { TYPE_EMPTY, NULL, "" }, + { TYPE_ENTER_LIST, execSetupChooseVolumeSimple, "Sound Volume (Normal):" }, + { TYPE_STRING, &volume_simple_text, "" }, + { TYPE_ENTER_LIST, execSetupChooseVolumeLoops, "Sound Volume (Looping):" }, + { TYPE_STRING, &volume_loops_text, "" }, + { TYPE_ENTER_LIST, execSetupChooseVolumeMusic, "Music Volume:" }, + { TYPE_STRING, &volume_music_text, "" }, + { TYPE_EMPTY, NULL, "" }, { TYPE_LEAVE_MENU, execSetupMain, "Back" }, { 0, NULL, NULL } @@ -5723,6 +5971,12 @@ void DrawSetupScreen() DrawChooseTree(&artwork.snd_current); else if (setup_mode == SETUP_MODE_CHOOSE_MUSIC) DrawChooseTree(&artwork.mus_current); + else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_SIMPLE) + DrawChooseTree(&volume_simple_current); + else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_LOOPS) + DrawChooseTree(&volume_loops_current); + else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_MUSIC) + DrawChooseTree(&volume_music_current); else DrawSetupScreen_Generic(); @@ -5752,6 +6006,12 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) 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 if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_SIMPLE) + HandleChooseTree(mx, my, dx, dy, button, &volume_simple_current); + else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_LOOPS) + HandleChooseTree(mx, my, dx, dy, button, &volume_loops_current); + else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_MUSIC) + HandleChooseTree(mx, my, dx, dy, button, &volume_music_current); else HandleSetupScreen_Generic(mx, my, dx, dy, button);