// (c) 1995-2014 by Artsoft Entertainment
// Holger Schemel
// info@artsoft.org
-// http://www.artsoft.org/
+// https://www.artsoft.org/
// ----------------------------------------------------------------------------
// screens.c
// ============================================================================
static void execSetupArtwork(void);
static void HandleChooseTree(int, int, int, int, int, TreeInfo **);
+static void DrawChoosePlayerName(void);
static void DrawChooseLevelSet(void);
static void DrawChooseLevelNr(void);
static void DrawInfoScreen(void);
static void DrawSetupScreen(void);
+static void DrawTypeName(void);
static void DrawInfoScreen_NotAvailable(char *, char *);
static void DrawInfoScreen_HelpAnim(int, int, boolean);
static TreeInfo *grid_sizes[2][2] = { { NULL, NULL }, { NULL, NULL } };
static TreeInfo *grid_size_current[2][2] = { { NULL, NULL }, { NULL, NULL } };
+static TreeInfo *player_name = NULL;
+static TreeInfo *player_name_current = NULL;
+
static TreeInfo *level_number = NULL;
static TreeInfo *level_number_current = NULL;
#define DRAW_MODE(s) ((s) >= GAME_MODE_MAIN && \
(s) <= GAME_MODE_SETUP ? (s) : \
(s) == GAME_MODE_PSEUDO_TYPENAME ? \
- GAME_MODE_MAIN : GAME_MODE_DEFAULT)
+ GAME_MODE_MAIN : \
+ (s) == GAME_MODE_PSEUDO_TYPENAMES ? \
+ GAME_MODE_NAMES : GAME_MODE_DEFAULT)
// (there are no draw offset definitions needed for INFO_MODE_TITLE)
#define DRAW_MODE_INFO(i) ((i) >= INFO_MODE_TITLE && \
static char *main_text_title_2 = NULL;
static char *main_text_title_3 = NULL;
+extern char debug_xsn_mode[];
+
struct MainControlInfo
{
int nr;
int sound_local = base + nr;
#if 0
- printf("::: %d, %d, %d: %d ['%s'], %d ['%s']\n",
- nr, initial, is_image,
- sound_global, getSoundListEntry(sound_global)->filename,
- sound_local, getSoundListEntry(sound_local)->filename);
+ Debug("screens:getTitleSound", "%d, %d, %d: %d ['%s'], %d ['%s']",
+ nr, initial, is_image,
+ sound_global, getSoundListEntry(sound_global)->filename,
+ sound_local, getSoundListEntry(sound_local)->filename);
#endif
if (!strEqual(getSoundListEntry(sound_local)->filename, UNDEFINED_FILENAME))
int music_local = base + nr;
#if 0
- printf("::: %d, %d, %d: %d ['%s'], %d ['%s']\n",
- nr, initial, is_image,
- music_global, getMusicListEntry(music_global)->filename,
- music_local, getMusicListEntry(music_local)->filename);
+ Debug("screens:getTitleMusic", "%d, %d, %d: %d ['%s'], %d ['%s']",
+ nr, initial, is_image,
+ music_global, getMusicListEntry(music_global)->filename,
+ music_local, getMusicListEntry(music_local)->filename);
#endif
if (!strEqual(getMusicListEntry(music_local)->filename, UNDEFINED_FILENAME))
int rect_y = ALIGNED_TEXT_YPOS(rect);
#if 0
- printf("::: insideTextPosRect: (%d, %d), (%d, %d) [%d, %d] (%d, %d) => %d\n",
- x, y, rect_x, rect_y, rect->x, rect->y, rect->width, rect->height,
- (x >= rect_x && x < rect_x + rect->width &&
- y >= rect_y && y < rect_y + rect->height));
+ Debug("screens:insideTextPosRect",
+ "(%d, %d), (%d, %d) [%d, %d] (%d, %d) => %d",
+ x, y, rect_x, rect_y, rect->x, rect->y, rect->width, rect->height,
+ (x >= rect_x && x < rect_x + rect->width &&
+ y >= rect_y && y < rect_y + rect->height));
#endif
return (x >= rect_x && x < rect_x + rect->width &&
return;
}
- // needed if last screen was the setup screen and fullscreen state changed
- // (moved to "execSetupGraphics()" to change fullscreen state directly)
- // ToggleFullscreenOrChangeWindowScalingIfNeeded();
-
// leveldir_current may be invalid (level group, parent link)
if (!validLevelSeries(leveldir_current))
leveldir_current = getFirstValidTreeInfoEntry(leveldir_last_valid);
}
else
{
- SetGameStatus(GAME_MODE_PSEUDO_TYPENAME);
+ if (0 && setup.multiple_users) // (not used yet)
+ {
+ CloseDoor(DOOR_CLOSE_2);
+
+ SetGameStatus(GAME_MODE_NAMES);
+
+ DrawChoosePlayerName();
+ }
+ else
+ {
+ SetGameStatus(GAME_MODE_PSEUDO_TYPENAME);
- HandleTypeName(strlen(setup.player_name), 0);
+ DrawTypeName();
+ }
}
}
else if (pos == MAIN_CONTROL_LEVELS)
static int num_page_entries_all_last[NUM_SPECIAL_GFX_ARGS][MAX_MENU_MODES];
static int choice_stores[NUM_SPECIAL_GFX_ARGS][MAX_MENU_MODES];
static int first_entry_stores[NUM_SPECIAL_GFX_ARGS][MAX_MENU_MODES];
+ boolean has_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->mapped;
+ int mx_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x;
+ int mx_right_border = (has_scrollbar ? mx_scrollbar : SX + SXSIZE);
int *num_page_entries_last = num_page_entries_all_last[game_status];
int *choice_store = choice_stores[game_status];
int *first_entry_store = first_entry_stores[game_status];
if (!anyScrollbarGadgetActive() &&
IN_VIS_MENU(x, y) &&
- mx < screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x &&
+ mx < mx_right_border &&
y >= 0 && y < num_page_entries)
{
if (button)
}
DrawTextF(xstart1, ystart, font_head, "Platform");
- DrawTextF(xstart2, ystart, font_text, PLATFORM_STRING);
+ DrawTextF(xstart2, ystart, font_text, "%s (%s)",
+ PLATFORM_STRING,
+ PLATFORM_XX_BIT_STRING);
ystart += ystep_line;
DrawTextF(xstart1, ystart, font_head, "Target");
DrawTextF(xstart1, ystart, font_head, "Source date");
DrawTextF(xstart2, ystart, font_text, getSourceDateString());
+ ystart += ystep_line;
+
+ DrawTextF(xstart1, ystart, font_head, "Commit hash");
+ DrawTextF(xstart2, ystart, font_text, getSourceHashString());
ystart += ystep_para;
DrawTextF(xstart1, ystart, font_head, "Library");
DrawTextF(xstart3, ystart, font_head, "Used");
ystart += ystep_head;
- driver_name = getStringCopyNStatic(SDL_GetVideoDriver(0), driver_name_len);
+ driver_name =
+ getStringCopyNStatic(SDLGetRendererName(), driver_name_len);
- DrawTextF(xstart1, ystart, font_text, "SDL_VideoDriver");
+ DrawTextF(xstart1, ystart, font_text, "Render Driver");
+ DrawTextF(xstart2, ystart, font_text, "%s", setup.system.sdl_renderdriver);
+ DrawTextF(xstart3, ystart, font_text, "%s", driver_name);
+ ystart += ystep_line;
+
+ driver_name =
+ getStringCopyNStatic(SDL_GetCurrentVideoDriver(), driver_name_len);
+
+ DrawTextF(xstart1, ystart, font_text, "Video Driver");
DrawTextF(xstart2, ystart, font_text, "%s", setup.system.sdl_videodriver);
DrawTextF(xstart3, ystart, font_text, "%s", driver_name);
ystart += ystep_line;
- driver_name = getStringCopyNStatic(SDL_GetAudioDriver(0), driver_name_len);
+ driver_name =
+ getStringCopyNStatic(SDL_GetCurrentAudioDriver(), driver_name_len);
- DrawTextF(xstart1, ystart, font_text, "SDL_AudioDriver");
+ DrawTextF(xstart1, ystart, font_text, "Audio Driver");
DrawTextF(xstart2, ystart, font_text, "%s", setup.system.sdl_audiodriver);
DrawTextF(xstart3, ystart, font_text, "%s", driver_name);
// type name functions
// ============================================================================
-void HandleTypeName(int newxpos, Key key)
+static char type_name_last[MAX_PLAYER_NAME_LEN + 1] = { 0 };
+
+static void getTypeNameValues(char *name, struct TextPosInfo *pos, int *xpos)
{
- static char last_player_name[MAX_PLAYER_NAME_LEN + 1];
struct MainControlInfo *mci = getMainControlInfo(MAIN_CONTROL_NAME);
- struct TextPosInfo *pos = mci->pos_input;
- int startx = mSX + ALIGNED_TEXT_XPOS(pos);
- int starty = mSY + ALIGNED_TEXT_YPOS(pos);
+
+ *pos = *mci->pos_input;
+
+ strcpy(name, setup.player_name);
+ strcpy(type_name_last, name);
+
+ if (strEqual(name, EMPTY_PLAYER_NAME))
+ strcpy(name, "");
+
+ *xpos = strlen(name);
+}
+
+static void setTypeNameValues(char *name, int *font, boolean success)
+{
+ if (!success)
+ strcpy(name, type_name_last);
+
+ if (strEqual(name, ""))
+ strcpy(name, EMPTY_PLAYER_NAME);
+
+ if (!success)
+ return;
+
+ // change name of edited user in setup structure
+ strcpy(setup.player_name, name);
+
+ // save setup of edited user
+ SaveSetup();
+}
+
+static void HandleTypeNameExt(boolean initialize, Key key)
+{
+ static struct TextPosInfo pos_name = { 0 };
+ static char name[MAX_PLAYER_NAME_LEN + 1] = { 0 };
static int xpos = 0;
+
+ if (initialize)
+ getTypeNameValues(name, &pos_name, &xpos);
+
+ struct TextPosInfo *pos = &pos_name;
+ int sx = mSX + ALIGNED_TEXT_XPOS(pos);
+ int sy = mSY + ALIGNED_TEXT_YPOS(pos);
int font_nr = pos->font;
int font_active_nr = FONT_ACTIVE(font_nr);
int font_width = getFontWidth(font_active_nr);
boolean is_valid_key_char = (key_char != 0 && (key_char != ' ' || xpos > 0));
boolean is_active = TRUE;
- DrawBackgroundForFont(startx,starty, pos->width, pos->height, font_active_nr);
+ DrawBackgroundForFont(sx, sy, pos->width, pos->height, font_active_nr);
- if (newxpos)
+ if (initialize)
{
- strcpy(last_player_name, setup.player_name);
-
- xpos = newxpos;
-
- StartTextInput(startx, starty, pos->width, pos->height);
+ StartTextInput(sx, sy, pos->width, pos->height);
}
else if (is_valid_key_char && xpos < MAX_PLAYER_NAME_LEN)
{
- setup.player_name[xpos] = key_char;
- setup.player_name[xpos + 1] = 0;
+ name[xpos] = key_char;
+ name[xpos + 1] = 0;
xpos++;
}
{
xpos--;
- setup.player_name[xpos] = 0;
+ name[xpos] = 0;
}
- else if (key == KSYM_Return && xpos > 0)
+ else if (key == KSYM_Return)
{
- SaveSetup();
+ setTypeNameValues(name, &font_nr, TRUE);
is_active = FALSE;
-
- SetGameStatus(GAME_MODE_MAIN);
}
else if (key == KSYM_Escape)
{
- strcpy(setup.player_name, last_player_name);
+ setTypeNameValues(name, &font_nr, FALSE);
is_active = FALSE;
-
- SetGameStatus(GAME_MODE_MAIN);
}
if (is_active)
{
- pos->width = (strlen(setup.player_name) + 1) * font_width;
- startx = mSX + ALIGNED_TEXT_XPOS(pos);
+ pos->width = (strlen(name) + 1) * font_width;
+ sx = mSX + ALIGNED_TEXT_XPOS(pos);
- DrawText(startx, starty, setup.player_name, font_active_nr);
- DrawText(startx + xpos * font_width, starty, "_", font_active_nr);
+ DrawText(sx, sy, name, font_active_nr);
+ DrawText(sx + xpos * font_width, sy, "_", font_active_nr);
}
else
{
- pos->width = strlen(setup.player_name) * font_width;
- startx = mSX + ALIGNED_TEXT_XPOS(pos);
+ SetGameStatus(game_status_last_screen);
+
+ pos->width = strlen(name) * font_width;
+ sx = mSX + ALIGNED_TEXT_XPOS(pos);
- DrawText(startx, starty, setup.player_name, font_nr);
+ DrawText(sx, sy, name, font_nr);
StopTextInput();
}
}
+static void DrawTypeName(void)
+{
+ HandleTypeNameExt(TRUE, 0);
+}
+
+void HandleTypeName(Key key)
+{
+ HandleTypeNameExt(FALSE, key);
+}
+
// ============================================================================
// tree menu functions
// needed if different viewport properties defined for choosing level (set)
ChangeViewportPropertiesIfNeeded();
- if (game_status == GAME_MODE_LEVELNR)
+ if (game_status == GAME_MODE_NAMES)
+ SetMainBackgroundImage(IMG_BACKGROUND_NAMES);
+ else if (game_status == GAME_MODE_LEVELNR)
SetMainBackgroundImage(IMG_BACKGROUND_LEVELNR);
else if (game_status == GAME_MODE_LEVELS)
SetMainBackgroundImage(IMG_BACKGROUND_LEVELS);
TreeInfo **ti_ptr)
{
TreeInfo *ti = *ti_ptr;
+ boolean has_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->mapped;
+ int mx_scrollbar = screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x;
+ int mx_right_border = (has_scrollbar ? mx_scrollbar : SX + SXSIZE);
int x = 0;
int y = ti->cl_cursor;
int step = (button == 1 ? 1 : button == 2 ? 5 : 10);
if (!anyScrollbarGadgetActive() &&
IN_VIS_MENU(x, y) &&
- mx < screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x &&
+ mx < mx_right_border &&
y >= 0 && y < num_page_entries)
{
if (button)
}
}
+void DrawChoosePlayerName(void)
+{
+ int i;
+
+ FadeMenuSoundsAndMusic();
+
+ if (player_name != NULL)
+ {
+ freeTreeInfo(player_name);
+
+ player_name = NULL;
+ }
+
+ for (i = 0; i < MAX_PLAYER_NAMES; i++)
+ {
+ boolean team_mode = (!network.enabled && setup.team_mode);
+ int tree_type = (team_mode ? TREE_TYPE_PLAYER_TEAM : TREE_TYPE_PLAYER_NAME);
+ TreeInfo *ti = newTreeInfo_setDefaults(tree_type);
+ char identifier[32], name[MAX_PLAYER_NAME_LEN + 1];
+ int value = i;
+
+ ti->node_top = &player_name;
+ ti->sort_priority = 10000 + value;
+ ti->color = FC_RED;
+
+ if (strEqual(global.user_names[i], EMPTY_PLAYER_NAME))
+ ti->color = FC_BLUE;
+
+ snprintf(identifier, sizeof(identifier), "%d", value);
+ snprintf(name, sizeof(name), "%s", global.user_names[i]);
+
+ setString(&ti->identifier, identifier);
+ setString(&ti->name, name);
+ setString(&ti->name_sorting, name);
+
+ pushTreeInfo(&player_name, ti);
+ }
+
+ // sort player entries by player number
+ sortTreeInfo(&player_name);
+
+ // set current player entry to selected player entry
+ player_name_current =
+ getTreeInfoFromIdentifier(player_name, i_to_a(user.nr));
+
+ // if that fails, set current player name to first available name
+ if (player_name_current == NULL)
+ player_name_current = player_name;
+
+ DrawChooseTree(&player_name_current);
+
+ PlayMenuSoundsAndMusic();
+}
+
+void HandleChoosePlayerName(int mx, int my, int dx, int dy, int button)
+{
+ HandleChooseTree(mx, my, dx, dy, button, &player_name_current);
+}
+
void DrawChooseLevelSet(void)
{
FadeMenuSoundsAndMusic();
if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE)
execSetupGraphics_setWindowSizes(FALSE);
+ // update "setup.vsync_mode" from list selection
+ // (in this case, vsync mode was changed on setup screen)
+ if (setup_mode == SETUP_MODE_CHOOSE_VSYNC)
+ execSetupGraphics_setVsyncModes(FALSE);
+
// update list selection from "setup.window_scaling_percent"
// (window scaling may have changed by resizing the window)
execSetupGraphics_setWindowSizes(TRUE);
+ // update list selection from "setup.vsync_mode"
+ // (vsync_mode may have changed by re-creating the renderer)
+ execSetupGraphics_setVsyncModes(TRUE);
+
execSetupGraphics_setScalingTypes();
execSetupGraphics_setRenderingModes();
- execSetupGraphics_setVsyncModes(FALSE);
setup_mode = SETUP_MODE_GRAPHICS;
ModifyGameSpeedIfNeeded();
// window scaling may have changed at this point
- ToggleFullscreenOrChangeWindowScalingIfNeeded();
+ ChangeWindowScalingIfNeeded();
// window scaling quality may have changed at this point
if (!strEqual(setup.window_scaling_quality, video.window_scaling_quality))
// screen rendering mode may have changed at this point
SDLSetScreenRenderingMode(setup.screen_rendering_mode);
+ int setup_vsync_mode = VSYNC_MODE_STR_TO_INT(setup.vsync_mode);
+ int video_vsync_mode = video.vsync_mode;
+
// screen vsync mode may have changed at this point
- SDLSetScreenVsyncMode(setup.vsync_mode);
+ ChangeVsyncModeIfNeeded();
+
+ // check if setting vsync mode to selected value failed
+ if (setup_vsync_mode != video_vsync_mode &&
+ setup_vsync_mode != video.vsync_mode)
+ {
+ // changing vsync mode to selected value failed -- reset displayed value
+ execSetupGraphics_setVsyncModes(TRUE);
+
+ Request("Setting VSync failed!", REQ_CONFIRM);
+
+ DrawSetupScreen();
+ }
}
static void execSetupChooseWindowSize(void)
static void execSetupArtwork(void)
{
#if 0
- printf("::: '%s', '%s', '%s'\n",
- artwork.gfx_current->subdir,
- artwork.gfx_current->fullpath,
- artwork.gfx_current->basepath);
+ Debug("screens:execSetupArtwork", "'%s', '%s', '%s'",
+ artwork.gfx_current->subdir,
+ artwork.gfx_current->fullpath,
+ artwork.gfx_current->basepath);
#endif
setup.graphics_set = artwork.gfx_current->identifier;
{ TYPE_PLAYER, &setup.network_player_nr,"Preferred Network Player:" },
{ TYPE_TEXT_INPUT, execGadgetNetworkServer, "Network Server Hostname:" },
{ TYPE_STRING, &network_server_text, "" },
+ { TYPE_SWITCH, &setup.multiple_users, "Multiple Users/Teams:" },
{ TYPE_YES_NO, &setup.input_on_focus, "Only Move Focussed Player:" },
{ TYPE_SWITCH, &setup.time_limit, "Time Limit:" },
{ TYPE_SWITCH, &setup.handicap, "Handicap:" },
{ TYPE_SWITCH, &setup.show_titlescreen,"Show Title Screens:" },
{ TYPE_SWITCH, &setup.toons, "Show Menu Animations:" },
{ TYPE_SWITCH, &setup.small_game_graphics, "Small Game Graphics:" },
+ { TYPE_YES_NO_AUTO, &setup.debug.xsn_mode, debug_xsn_mode },
{ TYPE_EMPTY, NULL, "" },
{ TYPE_LEAVE_MENU, execSetupMain, "Back" },
if (startx + font_xoffset < text_startx + text_width + text_font_xoffset)
{
+ // when using narrow font, left-shifting text "auto" not needed
+ if (type & TYPE_YES_NO_AUTO)
+ xpos += 1;
+
xpos += 1;
startx = mSX + xpos * 32;
// fullscreen state may have changed at this point
if (si->value == &setup.fullscreen)
- ToggleFullscreenOrChangeWindowScalingIfNeeded();
+ ToggleFullscreenIfNeeded();
// network mode may have changed at this point
if (si->value == &setup.network_mode)
Event event;
int alpha = 200, alpha_step = -1;
int alpha_ticks = 0;
- char mapping[4096], temp[4096];
+ char mapping[4096], temp[256];
int font_name = MENU_SETUP_FONT_TITLE;
int font_info = MENU_SETUP_FONT_TEXT;
int spacing_name = menu.line_spacing_setup[SETUP_MODE_INPUT];
#if DEBUG_JOYSTICKS
// print info about the joystick we are watching
- Error(ERR_DEBUG, "watching joystick %d: (%s)\n",
+ Debug("joystick", "watching joystick %d: (%s)",
SDL_JoystickInstanceID(joystick), name);
- Error(ERR_DEBUG, "joystick has %d axes, %d hats, %d balls, and %d buttons\n",
+ Debug("joystick", "joystick has %d axes, %d hats, %d balls, and %d buttons",
SDL_JoystickNumAxes(joystick), SDL_JoystickNumHats(joystick),
SDL_JoystickNumBalls(joystick), SDL_JoystickNumButtons(joystick));
#endif
if (success)
{
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "New game controller mapping:\n\n%s\n\n", mapping);
+ Debug("joystick", "New game controller mapping:\n\n%s\n\n", mapping);
#endif
// activate mapping for this game
overlay.grid_button_highlight = grid_button[step_nr];
+ UnmapAllGadgets();
+
FadeSetEnterMenu();
FadeOut(REDRAW_FIELD);
GameActions(); // main game loop
if (tape.auto_play && !tape.playing)
- AutoPlayTape(); // continue automatically playing next tape
+ AutoPlayTapes(); // continue automatically playing next tape
}
GDI_END);
if (gi == NULL)
- Error(ERR_EXIT, "cannot create gadget");
+ Fail("cannot create gadget");
screen_gadget[id] = gi;
}
GDI_END);
if (gi == NULL)
- Error(ERR_EXIT, "cannot create gadget");
+ Fail("cannot create gadget");
screen_gadget[id] = gi;
}
GDI_END);
if (gi == NULL)
- Error(ERR_EXIT, "cannot create gadget");
+ Fail("cannot create gadget");
screen_gadget[id] = gi;
}
GDI_END);
if (gi == NULL)
- Error(ERR_EXIT, "cannot create gadget");
+ Fail("cannot create gadget");
screen_gadget[id] = gi;
}
break;
case SCREEN_CTRL_ID_SCROLL_UP:
- if (game_status == GAME_MODE_LEVELS)
+ if (game_status == GAME_MODE_NAMES)
+ HandleChoosePlayerName(0,0, 0, -1 * SCROLL_LINE, MB_MENU_MARK);
+ else if (game_status == GAME_MODE_LEVELS)
HandleChooseLevelSet(0,0, 0, -1 * SCROLL_LINE, MB_MENU_MARK);
else if (game_status == GAME_MODE_LEVELNR)
HandleChooseLevelNr(0,0, 0, -1 * SCROLL_LINE, MB_MENU_MARK);
break;
case SCREEN_CTRL_ID_SCROLL_DOWN:
- if (game_status == GAME_MODE_LEVELS)
+ if (game_status == GAME_MODE_NAMES)
+ HandleChoosePlayerName(0,0, 0, +1 * SCROLL_LINE, MB_MENU_MARK);
+ else if (game_status == GAME_MODE_LEVELS)
HandleChooseLevelSet(0,0, 0, +1 * SCROLL_LINE, MB_MENU_MARK);
else if (game_status == GAME_MODE_LEVELNR)
HandleChooseLevelNr(0,0, 0, +1 * SCROLL_LINE, MB_MENU_MARK);
break;
case SCREEN_CTRL_ID_SCROLL_VERTICAL:
- if (game_status == GAME_MODE_LEVELS)
+ if (game_status == GAME_MODE_NAMES)
+ HandleChoosePlayerName(0,0,999,gi->event.item_position,MB_MENU_INITIALIZE);
+ else if (game_status == GAME_MODE_LEVELS)
HandleChooseLevelSet(0,0,999,gi->event.item_position,MB_MENU_INITIALIZE);
else if (game_status == GAME_MODE_LEVELNR)
HandleChooseLevelNr(0,0,999,gi->event.item_position,MB_MENU_INITIALIZE);