/* screens in the setup menu */
#define SETUP_MODE_MAIN 0
-#define SETUP_MODE_INPUT 1
-#define SETUP_MODE_SHORTCUT 2
-#define SETUP_MODE_GRAPHICS 3
-#define SETUP_MODE_SOUND 4
-#define SETUP_MODE_CHOOSE_GRAPHICS 5
-#define SETUP_MODE_CHOOSE_SOUNDS 6
-#define SETUP_MODE_CHOOSE_MUSIC 7
-
-#define MAX_SETUP_MODES 8
+#define SETUP_MODE_GAME 1
+#define SETUP_MODE_INPUT 2
+#define SETUP_MODE_SHORTCUT 3
+#define SETUP_MODE_GRAPHICS 4
+#define SETUP_MODE_SOUND 5
+#define SETUP_MODE_ARTWORK 6
+#define SETUP_MODE_CHOOSE_GRAPHICS 7
+#define SETUP_MODE_CHOOSE_SOUNDS 8
+#define SETUP_MODE_CHOOSE_MUSIC 9
+
+#define MAX_SETUP_MODES 10
/* for input setup functions */
#define SETUPINPUT_SCREEN_POS_START 0
/* forward declarations of internal functions */
static void HandleScreenGadgets(struct GadgetInfo *);
-static void execExitSetupChooseArtwork(void);
static void HandleSetupScreen_Generic(int, int, int, int, int);
static void HandleSetupScreen_Input(int, int, int, int, int);
static void CustomizeKeyboard(int);
static void CalibrateJoystick(int);
+static void execSetupArtwork(void);
static void HandleChooseTree(int, int, int, int, int, TreeInfo **);
static struct GadgetInfo *screen_gadget[NUM_SCREEN_GADGETS];
/* needed if last screen was the setup screen and fullscreen state changed */
ToggleFullscreenIfNeeded();
- /* needed if last screen (setup/level) changed graphics, sounds or music */
+ /* needed if last screen (level choice) changed graphics, sounds or music */
ReloadCustomArtwork();
#ifdef TARGET_SDL
}
else if (game_status == SETUP)
{
- execExitSetupChooseArtwork();
+ execSetupArtwork();
}
else
{
if (game_status == SETUP)
{
- execExitSetupChooseArtwork();
+ execSetupArtwork();
}
else
{
DrawSetupScreen();
}
-static void execSetupGraphics()
+static void execSetupGame()
{
- setup.graphics_set = artwork.gfx_current->name;
+ setup_mode = SETUP_MODE_GAME;
+ DrawSetupScreen();
+}
+static void execSetupGraphics()
+{
setup_mode = SETUP_MODE_GRAPHICS;
DrawSetupScreen();
}
static void execSetupSound()
{
+ setup_mode = SETUP_MODE_SOUND;
+ DrawSetupScreen();
+}
+
+static void execSetupArtwork()
+{
+ /* needed if last screen (setup choice) changed graphics, sounds or music */
+ ReloadCustomArtwork();
+
+ setup.graphics_set = artwork.gfx_current->name;
setup.sounds_set = artwork.snd_current->name;
setup.music_set = artwork.mus_current->name;
- setup_mode = SETUP_MODE_SOUND;
+ setup_mode = SETUP_MODE_ARTWORK;
DrawSetupScreen();
}
DrawSetupScreen();
}
-static void execExitSetupChooseArtwork()
-{
- if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS)
- execSetupGraphics();
- else
- execSetupSound();
-}
-
static void execExitSetup()
{
game_status = MAINMENU;
static struct TokenInfo setup_info_main[] =
{
- { TYPE_ENTER_MENU, execSetupGraphics, "Graphics Setup" },
- { TYPE_ENTER_MENU, execSetupSound, "Sound Setup" },
+ { TYPE_ENTER_MENU, execSetupGame, "Game Settings" },
+ { TYPE_ENTER_MENU, execSetupGraphics, "Graphics" },
+ { TYPE_ENTER_MENU, execSetupSound, "Sound & Music" },
+ { TYPE_ENTER_MENU, execSetupArtwork, "Custom Artwork" },
{ TYPE_ENTER_MENU, execSetupInput, "Input Devices" },
{ TYPE_ENTER_MENU, execSetupShortcut, "Key Shortcuts" },
{ TYPE_EMPTY, NULL, "" },
-#if 0
- { TYPE_SWITCH, &setup.double_buffering,"Buffered gfx:" },
- { TYPE_SWITCH, &setup.fading, "Fading:" },
-#endif
- { 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_LEAVE_MENU, execExitSetup, "Exit" },
+ { TYPE_LEAVE_MENU, execSaveAndExitSetup, "Save and exit" },
+ { 0, NULL, NULL }
+};
+
+static struct TokenInfo setup_info_game[] =
+{
{ TYPE_SWITCH, &setup.team_mode, "Team-Mode:" },
{ TYPE_SWITCH, &setup.handicap, "Handicap:" },
{ TYPE_SWITCH, &setup.time_limit, "Timelimit:" },
+ { TYPE_SWITCH, &setup.autorecord, "Auto-Record:" },
{ TYPE_EMPTY, NULL, "" },
- { TYPE_LEAVE_MENU, execExitSetup, "Exit" },
- { TYPE_LEAVE_MENU, execSaveAndExitSetup, "Save and exit" },
+ { TYPE_LEAVE_MENU, execSetupMain, "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.:" },
+#if 0
+ { TYPE_SWITCH, &setup.double_buffering,"Buffered gfx:" },
+ { TYPE_SWITCH, &setup.fading, "Fading:" },
+#endif
+ { TYPE_SWITCH, &setup.quick_doors, "Quick Doors:" },
+ { TYPE_SWITCH, &setup.toons, "Toons:" },
{ TYPE_EMPTY, NULL, "" },
{ TYPE_LEAVE_MENU, execSetupMain, "Exit" },
{ 0, NULL, NULL }
{ TYPE_SWITCH, &setup.sound_loops, "Sound Loops:" },
{ TYPE_SWITCH, &setup.sound_music, "Game Music:" },
{ TYPE_EMPTY, NULL, "" },
+ { TYPE_LEAVE_MENU, execSetupMain, "Exit" },
+ { 0, NULL, NULL }
+};
+
+static struct TokenInfo setup_info_artwork[] =
+{
+ { TYPE_ENTER_MENU, execSetupChooseGraphics,"Custom Graphics" },
+ { TYPE_STRING, &setup.graphics_set, "" },
{ 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_STRING, NULL, "Override Level Artwork:"},
+ { TYPE_YES_NO, &setup.override_level_graphics, "Graphics:" },
+ { TYPE_YES_NO, &setup.override_level_sounds, "Sounds:" },
+ { TYPE_YES_NO, &setup.override_level_music, "Music:" },
+ { TYPE_EMPTY, NULL, "" },
{ TYPE_LEAVE_MENU, execSetupMain, "Exit" },
{ 0, NULL, NULL }
};
{ TYPE_KEYTEXT, NULL, "Toggle Pause:", },
{ TYPE_KEY, &setup.shortcut.toggle_pause, "" },
{ TYPE_EMPTY, NULL, "" },
+ { TYPE_YES_NO, &setup.ask_on_escape, "Ask on Esc:" },
+ { TYPE_EMPTY, NULL, "" },
{ TYPE_LEAVE_MENU, execSetupMain, "Exit" },
{ 0, NULL, NULL }
};
char *value_string = getSetupValue(setup_info[pos].type & ~TYPE_GHOSTED,
setup_info[pos].value);
+ if (value_string == NULL)
+ return;
+
if (setup_info[pos].type & TYPE_KEY)
{
xpos = 3;
setup_info = setup_info_main;
title_string = "Setup";
}
+ else if (setup_mode == SETUP_MODE_GAME)
+ {
+ setup_info = setup_info_game;
+ title_string = "Setup Game";
+ }
else if (setup_mode == SETUP_MODE_GRAPHICS)
{
setup_info = setup_info_graphics;
setup_info = setup_info_sound;
title_string = "Setup Sound";
}
+ else if (setup_mode == SETUP_MODE_ARTWORK)
+ {
+ setup_info = setup_info_artwork;
+ title_string = "Custom Artwork";
+ }
else if (setup_mode == SETUP_MODE_SHORTCUT)
{
setup_info = setup_info_shortcut;
if ((value_ptr == &setup.sound && !audio.sound_available) ||
(value_ptr == &setup.sound_loops && !audio.loops_available) ||
(value_ptr == &setup.sound_music && !audio.music_available) ||
- (value_ptr == &setup.sound_music && !audio.music_available) ||
(value_ptr == &setup.fullscreen && !video.fullscreen_available))
setup_info[i].type |= TYPE_GHOSTED;
- if (setup_info[i].type & TYPE_ENTER_OR_LEAVE_MENU)
- font_size = FS_BIG;
+ if (setup_info[i].type & TYPE_STRING)
+ font_size = FS_MEDIUM;
DrawText(SX + 32, SY + ypos * 32, setup_info[i].text, font_size, FC_GREEN);
}
else if (!(setup_info[y].type & TYPE_GHOSTED))
{
-#if 0
- if (setup_info[y].type & TYPE_BOOLEAN_STYLE)
- {
- boolean new_value = !*(boolean *)(setup_info[y].value);
-
- *(boolean *)setup_info[y].value = new_value;
- drawSetupValue(y);
- }
- else if (setup_info[y].type == TYPE_KEYTEXT &&
- setup_info[y + 1].type == TYPE_KEY)
- {
- changeSetupValue(y + 1);
- }
- else if (setup_info[y].type & TYPE_ENTER_OR_LEAVE_MENU)
- {
- void (*menu_callback_function)(void) = setup_info[choice].value;
-
- menu_callback_function();
- }
-#else
if (setup_info[y].type & TYPE_ENTER_OR_LEAVE_MENU)
{
void (*menu_callback_function)(void) = setup_info[choice].value;
if (setup_info[y].type & TYPE_VALUE)
changeSetupValue(y);
}
-#endif
}
}
SC_SCROLLBUTTON_XPOS + 0 * SC_SCROLLBUTTON_XSIZE, SC_SCROLLBUTTON_YPOS,
SC_SCROLL_UP_XPOS, SC_SCROLL_UP_YPOS,
SCREEN_CTRL_ID_SCROLL_UP,
- "scroll level series up"
+ "scroll up"
},
{
SC_SCROLLBUTTON_XPOS + 1 * SC_SCROLLBUTTON_XSIZE, SC_SCROLLBUTTON_YPOS,
SC_SCROLL_DOWN_XPOS, SC_SCROLL_DOWN_YPOS,
SCREEN_CTRL_ID_SCROLL_DOWN,
- "scroll level series down"
+ "scroll down"
}
};
{
int id = gi->custom_id;
- if (game_status != CHOOSELEVEL)
+ if (game_status != CHOOSELEVEL && game_status != SETUP)
return;
switch (id)
{
case SCREEN_CTRL_ID_SCROLL_UP:
- HandleChooseLevel(SX,SY + 32, 0,0, MB_MENU_MARK);
+ if (game_status == CHOOSELEVEL)
+ HandleChooseLevel(SX,SY + 32, 0,0, MB_MENU_MARK);
+ else if (game_status == SETUP)
+ HandleSetupScreen(SX,SY + 32, 0,0, MB_MENU_MARK);
break;
case SCREEN_CTRL_ID_SCROLL_DOWN:
- HandleChooseLevel(SX,SY + SYSIZE - 32, 0,0, MB_MENU_MARK);
+ if (game_status == CHOOSELEVEL)
+ HandleChooseLevel(SX,SY + SYSIZE - 32, 0,0, MB_MENU_MARK);
+ else if (game_status == SETUP)
+ HandleSetupScreen(SX,SY + SYSIZE - 32, 0,0, MB_MENU_MARK);
break;
case SCREEN_CTRL_ID_SCROLL_VERTICAL:
- HandleChooseLevel(0,0, 999,gi->event.item_position, MB_MENU_INITIALIZE);
+ if (game_status == CHOOSELEVEL)
+ HandleChooseLevel(0,0, 999,gi->event.item_position,MB_MENU_INITIALIZE);
+ else if (game_status == SETUP)
+ HandleSetupScreen(0,0, 999,gi->event.item_position,MB_MENU_INITIALIZE);
break;
default: