static void InitializeMainControls()
{
- boolean local_team_mode = (!options.network && setup.team_mode);
+ boolean local_team_mode = (!network.enabled && setup.team_mode);
int i;
/* set main control text values to dynamically determined values */
DrawCursorAndText_Main(-1, FALSE, FALSE);
DrawPreviewLevelInitial();
+ DrawNetworkPlayers();
HandleMainMenu(0, 0, 0, 0, MB_MENU_INITIALIZE);
SetGameStatus(GAME_MODE_SCORES);
- DrawHallOfFame(-1);
+ DrawHallOfFame(level_nr, -1);
}
else if (pos == MAIN_CONTROL_EDITOR)
{
}
else if (pos == MAIN_CONTROL_GAME)
{
- StartGameActions(options.network, setup.autorecord, level.random_seed);
+ StartGameActions(network.enabled, setup.autorecord, level.random_seed);
}
else if (pos == MAIN_CONTROL_SETUP)
{
TYPE_YES_NO |
TYPE_YES_NO_AUTO |
TYPE_STRING |
+ TYPE_PLAYER |
TYPE_ECS_AGA |
TYPE_KEYTEXT |
TYPE_ENTER_LIST))
if (menu_info[choice].type & menu_navigation_type ||
menu_info[choice].type & TYPE_BOOLEAN_STYLE ||
- menu_info[choice].type & TYPE_YES_NO_AUTO)
+ menu_info[choice].type & TYPE_YES_NO_AUTO ||
+ menu_info[choice].type & TYPE_PLAYER)
button = MB_MENU_CHOICE;
}
else if (dy)
HandleChooseTree(mx, my, dx, dy, button, &level_number_current);
}
-void DrawHallOfFame(int highlight_position)
+void DrawHallOfFame(int level_nr, int highlight_position)
{
int fade_mask = REDRAW_FIELD;
OpenDoor(GetDoorState() | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
- HandleHallOfFame(highlight_position, 0, 0, 0, MB_MENU_INITIALIZE);
+ HandleHallOfFame(level_nr, highlight_position, 0, 0, MB_MENU_INITIALIZE);
DrawMaskedBorder(fade_mask);
FadeIn(fade_mask);
}
-static void drawHallOfFameList(int first_entry, int highlight_position)
+static void drawHallOfFameList(int level_nr, int first_entry,
+ int highlight_position)
{
int i, j;
void HandleHallOfFame(int mx, int my, int dx, int dy, int button)
{
+ static int level_nr = 0;
static int first_entry = 0;
static int highlight_position = 0;
int step = (button == 1 ? 1 : button == 2 ? 5 : 10);
if (button == MB_MENU_INITIALIZE)
{
+ level_nr = mx;
first_entry = 0;
- highlight_position = mx;
- drawHallOfFameList(first_entry, highlight_position);
+ highlight_position = my;
+
+ drawHallOfFameList(level_nr, first_entry, highlight_position);
return;
}
if (first_entry < 0)
first_entry = 0;
- drawHallOfFameList(first_entry, highlight_position);
+ drawHallOfFameList(level_nr, first_entry, highlight_position);
}
}
else if (dy > 0)
if (first_entry + NUM_MENU_ENTRIES_ON_SCREEN > MAX_SCORE_ENTRIES)
first_entry = MAX(0, MAX_SCORE_ENTRIES - NUM_MENU_ENTRIES_ON_SCREEN);
- drawHallOfFameList(first_entry, highlight_position);
+ drawHallOfFameList(level_nr, first_entry, highlight_position);
}
}
- else if (button == MB_MENU_LEAVE)
- {
- PlaySound(SND_MENU_ITEM_SELECTING);
-
- FadeSound(SND_BACKGROUND_SCORES);
-
- SetGameStatus(GAME_MODE_MAIN);
-
- DrawMainMenu();
- }
- else if (button == MB_MENU_CHOICE)
+ else if (button == MB_MENU_LEAVE || button == MB_MENU_CHOICE)
{
PlaySound(SND_MENU_ITEM_SELECTING);
FadeSound(SND_BACKGROUND_SCORES);
- SetGameStatus(GAME_MODE_MAIN);
+ if (game_status_last_screen == GAME_MODE_PLAYING &&
+ setup.auto_play_next_level && setup.increment_levels &&
+ !network_playing)
+ {
+ StartGameActions(network.enabled, setup.autorecord, level.random_seed);
+ }
+ else
+ {
+ SetGameStatus(GAME_MODE_MAIN);
- DrawMainMenu();
+ DrawMainMenu();
+ }
}
if (game_status == GAME_MODE_SCORES)
{
{ TYPE_SWITCH, &setup.team_mode, "Team-Mode (Multi-Player):" },
{ TYPE_SWITCH, &setup.network_mode, "Network Multi-Player Mode:" },
+ { TYPE_PLAYER, &setup.network_player_nr,"Preferred Network Player:" },
{ 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.skip_levels, "Skip Unsolved Levels:" },
{ TYPE_SWITCH, &setup.increment_levels,"Increment Solved Levels:" },
+ { TYPE_SWITCH, &setup.auto_play_next_level,"Auto-play Next Level:" },
+ { TYPE_SWITCH, &setup.skip_scores_after_game,"Skip Scores After Game:" },
{ TYPE_SWITCH, &setup.autorecord, "Auto-Record Tapes:" },
{ TYPE_ENTER_LIST, execSetupChooseGameSpeed, "Game Speed:" },
{ TYPE_STRING, &game_speed_text, "" },
else if (type & TYPE_YES_NO_AUTO)
return (*(int *)value == AUTO ? FONT_OPTION_ON :
*(int *)value == FALSE ? FONT_OPTION_OFF : FONT_OPTION_ON);
+ else if (type & TYPE_PLAYER)
+ return FONT_VALUE_1;
else
return FONT_VALUE_1;
}
{
xpos = menu_screen_value_xpos - 1;
}
+ else if (type & TYPE_PLAYER)
+ {
+ int displayed_player_nr = *(int *)value + 1;
+
+ value_string = getSetupValue(TYPE_INTEGER, (void *)&displayed_player_nr);
+ }
startx = mSX + xpos * 32;
starty = mSY + ypos * 32;
DrawText(startx, starty, value_string, font_nr);
+ if (type & TYPE_PLAYER)
+ {
+ int player_nr = *(int *)value;
+ int xoff = getFontWidth(font_nr);
+
+ DrawFixedGraphicThruMaskExt(drawto, startx + xoff, starty,
+ PLAYER_NR_GFX(IMG_PLAYER_1, player_nr), 0);
+ }
+
if (font_draw_xoffset_modified)
getFontBitmapInfo(font_nr)->draw_xoffset = font_draw_xoffset_old;
}
if (key != KSYM_UNDEFINED)
*(Key *)si->value = key;
}
+ else if (si->type & TYPE_PLAYER)
+ {
+ int player_nr = *(int *)si->value;
+
+ if (dx)
+ player_nr += dx;
+ else
+ player_nr = Request("Choose player", REQ_PLAYER) - 1;
+
+ *(int *)si->value = MIN(MAX(0, player_nr), MAX_PLAYERS - 1);
+ }
drawSetupValue(screen_pos, setup_info_pos_raw);
ToggleFullscreenOrChangeWindowScalingIfNeeded();
if (si->value == &setup.network_mode &&
- setup.network_mode &&
- !options.network)
- Request("Please restart game to enable network games!", REQ_CONFIRM);
+ setup.network_mode != network.enabled)
+ {
+ network.enabled = setup.network_mode;
+
+ FadeOut(REDRAW_ALL);
+
+ ClearField();
+
+ FadeIn(REDRAW_ALL);
+
+ if (network.enabled)
+ InitNetworkServer();
+ else
+ DisconnectFromNetworkServer();
+
+ DrawSetupScreen();
+ }
}
static struct TokenInfo *getSetupInfoFinal(struct TokenInfo *setup_info_orig)