#define DEBUG_JOYSTICKS 0
-/* screens on the info screen */
+// screens on the info screen
#define INFO_MODE_MAIN 0
#define INFO_MODE_TITLE 1
#define INFO_MODE_ELEMENTS 2
#define MAX_INFO_MODES 8
-/* screens on the setup screen */
-/* (must match GFX_SPECIAL_ARG_SETUP_* values as defined in src/main.h) */
-/* (should also match corresponding entries in src/conf_gfx.c) */
+// screens on the setup screen
+// (must match GFX_SPECIAL_ARG_SETUP_* values as defined in src/main.h)
+// (should also match corresponding entries in src/conf_gfx.c)
#define SETUP_MODE_MAIN 0
#define SETUP_MODE_GAME 1
#define SETUP_MODE_EDITOR 2
#define SETUP_MODE_SHORTCUTS_4 12
#define SETUP_MODE_SHORTCUTS_5 13
-/* sub-screens on the setup screen (generic) */
+// sub-screens on the setup screen (generic)
#define SETUP_MODE_CHOOSE_ARTWORK 14
#define SETUP_MODE_CHOOSE_OTHER 15
-/* sub-screens on the setup screen (specific) */
+// sub-screens on the setup screen (specific)
#define SETUP_MODE_CHOOSE_GAME_SPEED 16
#define SETUP_MODE_CHOOSE_SCROLL_DELAY 17
#define SETUP_MODE_CHOOSE_SNAPSHOT_MODE 18
#define MAX_MENU_MODES MAX(MAX_INFO_MODES, MAX_SETUP_MODES)
-/* setup screen titles */
+// setup screen titles
#define STR_SETUP_MAIN "Setup"
#define STR_SETUP_GAME "Game & Menu"
#define STR_SETUP_EDITOR "Editor"
#define STR_SETUP_CHOOSE_GRID_XSIZE_1 "Horiz. Buttons"
#define STR_SETUP_CHOOSE_GRID_YSIZE_1 "Vert. Buttons"
-/* for input setup functions */
+// for input setup functions
#define SETUPINPUT_SCREEN_POS_START 0
#define SETUPINPUT_SCREEN_POS_EMPTY1 3
#define SETUPINPUT_SCREEN_POS_EMPTY2 12
#define MAX_SETUP_TEXT_INPUT_LEN 28
-/* for various menu stuff */
+// for various menu stuff
#define MENU_SCREEN_START_XPOS 1
#define MENU_SCREEN_START_YPOS 2
#define MENU_SCREEN_VALUE_XPOS (SCR_FIELDX - 3)
#define MAX_MENU_TEXT_LENGTH_BIG 13
#define MAX_MENU_TEXT_LENGTH_MEDIUM (MAX_MENU_TEXT_LENGTH_BIG * 2)
-/* screen gadget identifiers */
+// screen gadget identifiers
#define SCREEN_CTRL_ID_PREV_LEVEL 0
#define SCREEN_CTRL_ID_NEXT_LEVEL 1
#define SCREEN_CTRL_ID_PREV_PLAYER 2
#define SCREEN_MASK_MAIN_HAS_SOLUTION (1 << 1)
#define SCREEN_MASK_INPUT (1 << 2)
-/* graphic position and size values for buttons and scrollbars */
+// graphic position and size values for buttons and scrollbars
#define SC_MENUBUTTON_XSIZE TILEX
#define SC_MENUBUTTON_YSIZE TILEY
#define SC_BORDER_SIZE 14
-/* forward declarations of internal functions */
+// forward declarations of internal functions
static void HandleScreenGadgets(struct GadgetInfo *);
static void HandleSetupScreen_Generic(int, int, int, int, int);
static void HandleSetupScreen_Input(int, int, int, int, int);
static void HandleInfoScreen_Program(int);
static void HandleInfoScreen_Version(int);
+static void ModifyGameSpeedIfNeeded(void);
+static void DisableVsyncIfNeeded(void);
+
static void MapScreenMenuGadgets(int);
static void MapScreenGadgets(int);
static void MapScreenTreeGadgets(TreeInfo *);
static TreeInfo *snapshot_modes = NULL;
static TreeInfo *snapshot_mode_current = NULL;
+static TreeInfo *game_speeds_normal = NULL;
+static TreeInfo *game_speeds_extended = NULL;
static TreeInfo *game_speeds = NULL;
static TreeInfo *game_speed_current = NULL;
static TreeInfo *level_number = NULL;
static TreeInfo *level_number_current = NULL;
-static struct
-{
- int value;
- char *text;
-} window_sizes_list[] =
+static struct ValueTextInfo window_sizes_list[] =
{
{ 50, "50 %" },
{ 80, "80 %" },
{ -1, NULL },
};
-static struct
-{
- char *value;
- char *text;
-} scaling_types_list[] =
+static struct StringValueTextInfo scaling_types_list[] =
{
{ SCALING_QUALITY_NEAREST, "Off" },
{ SCALING_QUALITY_LINEAR, "Linear" },
{ NULL, NULL },
};
-static struct
-{
- char *value;
- char *text;
-} rendering_modes_list[] =
+static struct StringValueTextInfo rendering_modes_list[] =
{
{ STR_SPECIAL_RENDERING_OFF, "Off (May show artifacts, fast)" },
{ STR_SPECIAL_RENDERING_BITMAP, "Bitmap/Texture mode (slower)" },
{ NULL, NULL },
};
-static struct
-{
- char *value;
- char *text;
-} vsync_modes_list[] =
+static struct StringValueTextInfo vsync_modes_list[] =
{
{ STR_VSYNC_MODE_OFF, "Off" },
{ STR_VSYNC_MODE_NORMAL, "Normal" },
{ NULL, NULL },
};
-static struct
-{
- int value;
- char *text;
-} game_speeds_list[] =
+static struct ValueTextInfo game_speeds_list_normal[] =
{
-#if 1
{ 30, "Very Slow" },
{ 25, "Slow" },
{ 20, "Normal" },
{ 15, "Fast" },
{ 10, "Very Fast" },
-#else
- { 1000, "1/1s (Extremely Slow)" },
- { 500, "1/2s" },
- { 200, "1/5s" },
- { 100, "1/10s" },
- { 50, "1/20s" },
- { 29, "1/35s (Original Supaplex)" },
- { 25, "1/40s" },
- { 20, "1/50s (Normal Speed)" },
- { 14, "1/70s (Maximum Supaplex)" },
- { 10, "1/100s" },
- { 5, "1/200s" },
- { 2, "1/500s" },
- { 1, "1/1000s (Extremely Fast)" },
-#endif
{ -1, NULL },
};
-static struct
-{
- int value;
- char *text;
-} scroll_delays_list[] =
+static struct ValueTextInfo game_speeds_list_extended[] =
+{
+ { 1000, "1 fps (Extremely Slow)" },
+ { 500, "2 fps" },
+ { 200, "5 fps" },
+ { 100, "10 fps" },
+ { 50, "20 fps" },
+ { 29, "35 fps (Original Supaplex)" },
+ { 25, "40 fps" },
+ { 20, "50 fps (=== Normal Speed ===)" },
+ { 16, "60 fps (60 Hz VSync Speed)" },
+ { 14, "70 fps (Maximum Supaplex)" },
+ { 10, "100 fps" },
+ { 5, "200 fps" },
+ { 2, "500 fps" },
+ { 1, "1000 fps (Extremely Fast)" },
+
+ { -1, NULL },
+};
+
+static struct ValueTextInfo *game_speeds_list;
+
+static struct ValueTextInfo scroll_delays_list[] =
{
{ 0, "0 Tiles (No Scroll Delay)" },
{ 1, "1 Tile" },
{ -1, NULL },
};
-static struct
-{
- char *value;
- char *text;
-} snapshot_modes_list[] =
+static struct StringValueTextInfo snapshot_modes_list[] =
{
{ STR_SNAPSHOT_MODE_OFF, "Off" },
{ STR_SNAPSHOT_MODE_EVERY_STEP, "Every Step" },
{ NULL, NULL },
};
-static struct
-{
- int value;
- char *text;
-} volumes_list[] =
+static struct ValueTextInfo volumes_list[] =
{
{ 0, "0 %" },
{ 1, "1 %" },
{ -1, NULL },
};
-static struct
-{
- char *value;
- char *text;
-} touch_controls_list[] =
+static struct StringValueTextInfo touch_controls_list[] =
{
{ TOUCH_CONTROL_OFF, "Off" },
{ TOUCH_CONTROL_VIRTUAL_BUTTONS, "Virtual Buttons" },
{ NULL, NULL },
};
-static struct
-{
- int value;
- char *text;
-} distances_list[] =
+static struct ValueTextInfo distances_list[] =
{
{ 1, "1 %" },
{ 2, "2 %" },
{ -1, NULL },
};
-static struct
-{
- int value;
- char *text;
-} transparencies_list[] =
+static struct ValueTextInfo transparencies_list[] =
{
{ 0, "0 % (Opaque)" },
{ 10, "10 %" },
{ -1, NULL },
};
-static struct
-{
- int value;
- char *text;
-} grid_sizes_list[] =
+static struct ValueTextInfo grid_sizes_list[] =
{
{ 3, "3" },
{ 4, "4" },
(s) == GAME_MODE_PSEUDO_TYPENAME ? \
GAME_MODE_MAIN : GAME_MODE_DEFAULT)
-/* (there are no draw offset definitions needed for INFO_MODE_TITLE) */
+// (there are no draw offset definitions needed for INFO_MODE_TITLE)
#define DRAW_MODE_INFO(i) ((i) >= INFO_MODE_TITLE && \
(i) <= INFO_MODE_LEVELSET ? (i) : \
INFO_MODE_MAIN)
NUM_MENU_ENTRIES_ON_SCREEN)
-/* title display and control definitions */
+// title display and control definitions
#define MAX_NUM_TITLE_SCREENS (2 * MAX_NUM_TITLE_IMAGES + \
2 * MAX_NUM_TITLE_MESSAGES)
struct TitleControlInfo title_controls[MAX_NUM_TITLE_SCREENS];
-/* main menu display and control definitions */
+// main menu display and control definitions
#define MAIN_CONTROL_NAME 0
#define MAIN_CONTROL_LEVELS 1
NULL, NULL,
},
#if 0
- /* (these two buttons are real gadgets) */
+ // (these two buttons are real gadgets)
{
MAIN_CONTROL_PREV_LEVEL,
&menu.main.button.prev_level, IMG_MENU_BUTTON_PREV_LEVEL,
title_controls[num_title_screens].local_nr = nr;
title_controls[num_title_screens].sort_priority = sort_priority;
- title_controls[num_title_screens].first = FALSE; /* will be set later */
+ title_controls[num_title_screens].first = FALSE; // will be set later
num_title_screens++;
}
{
num_title_screens = 0;
- /* 1st step: initialize title screens for game start (only when starting) */
+ // 1st step: initialize title screens for game start (only when starting)
if (show_title_initial)
InitializeTitleControls_CheckTitleInfo(TRUE);
- /* 2nd step: initialize title screens for current level set */
+ // 2nd step: initialize title screens for current level set
InitializeTitleControls_CheckTitleInfo(FALSE);
- /* sort title screens according to sort_priority and title number */
+ // sort title screens according to sort_priority and title number
qsort(title_controls, num_title_screens, sizeof(struct TitleControlInfo),
compareTitleControlInfo);
- /* mark first title screen */
+ // mark first title screen
title_controls[0].first = TRUE;
}
boolean local_team_mode = (!network.enabled && setup.team_mode);
int i;
- /* set main control text values to dynamically determined values */
+ // set main control text values to dynamically determined values
sprintf(main_text_name, "%s", local_team_mode ? "Team:" : "Name:");
strcpy(main_text_first_level, int2str(leveldir_current->first_level,
main_text_title_2 = getConfigProgramCopyrightString();
main_text_title_3 = getConfigProgramCompanyString();
- /* set main control screen positions to dynamically determined values */
+ // set main control screen positions to dynamically determined values
for (i = 0; main_controls[i].nr != -1; i++)
{
struct MainControlInfo *mci = &main_controls[i];
menu.main.input.name.height = input_height;
}
- if (pos_button != NULL) /* (x/y may be -1/-1 here) */
+ if (pos_button != NULL) // (x/y may be -1/-1 here)
{
pos_button->width = button_width;
pos_button->height = button_height;
}
- if (pos_text != NULL) /* (x/y may be -1/-1 here) */
+ if (pos_text != NULL) // (x/y may be -1/-1 here)
{
- /* calculate text size -- needed for text alignment */
+ // calculate text size -- needed for text alignment
boolean calculate_text_size = (text != NULL);
if (pos_text->width == -1 || calculate_text_size)
}
}
- if (pos_input != NULL) /* (x/y may be -1/-1 here) */
+ if (pos_input != NULL) // (x/y may be -1/-1 here)
{
if (visibleTextPos(pos_text))
{
int y = mSY + ALIGNED_TEXT_YPOS(pos);
#if 1
- /* (check why/if this is needed) */
+ // (check why/if this is needed)
DrawBackgroundForFont(x, y, pos->width, pos->height, font_text);
#endif
DrawText(x, y, text, font_text);
int y = mSY + ALIGNED_TEXT_YPOS(pos);
#if 1
- /* (check why/if this is needed) */
+ // (check why/if this is needed)
DrawBackgroundForFont(x, y, pos->width, pos->height, font_input);
#endif
DrawText(x, y, input, font_input);
{
int scrollbar_xpos = mSX + SC_SCROLLBAR_XPOS + menu.scrollbar_xoffset;
- /* correct scrollbar position if placed outside menu (playfield) area */
+ // correct scrollbar position if placed outside menu (playfield) area
if (scrollbar_xpos > SX + SC_SCROLLBAR_XPOS)
scrollbar_xpos = SX + SC_SCROLLBAR_XPOS;
- /* clear menu list area, but not title or scrollbar */
+ // clear menu list area, but not title or scrollbar
DrawBackground(mSX, mSY + MENU_SCREEN_START_YPOS * 32,
scrollbar_xpos - mSX, NUM_MENU_ENTRIES_ON_SCREEN * 32);
}
if (width > WIN_XSIZE)
{
- /* image width too large for window => center image horizontally */
+ // image width too large for window => center image horizontally
src_x = (width - WIN_XSIZE) / 2;
width = WIN_XSIZE;
}
if (height > WIN_YSIZE)
{
- /* image height too large for window => center image vertically */
+ // image height too large for window => center image vertically
src_y = (height - WIN_YSIZE) / 2;
height = WIN_YSIZE;
}
- /* always display title screens centered */
+ // always display title screens centered
dst_x = (WIN_XSIZE - width) / 2;
dst_y = (WIN_YSIZE - height) / 2;
if (filename == NULL)
return;
- /* force TITLE font on title message screen */
+ // force TITLE font on title message screen
SetFontStatus(getTitleMessageGameMode(initial));
- /* if chars *and* width set to "-1", automatically determine width */
+ // if chars *and* width set to "-1", automatically determine width
if (tmi->chars == -1 && tmi->width == -1)
tmi->width = viewport.window[game_status].width;
- /* if lines *and* height set to "-1", automatically determine height */
+ // if lines *and* height set to "-1", automatically determine height
if (tmi->lines == -1 && tmi->height == -1)
tmi->height = viewport.window[game_status].height;
- /* if chars set to "-1", automatically determine by text and font width */
+ // if chars set to "-1", automatically determine by text and font width
if (tmi->chars == -1)
tmi->chars = tmi->width / getFontWidth(tmi->font);
else
tmi->width = tmi->chars * getFontWidth(tmi->font);
- /* if lines set to "-1", automatically determine by text and font height */
+ // if lines set to "-1", automatically determine by text and font height
if (tmi->lines == -1)
tmi->lines = tmi->height / getFontHeight(tmi->font);
else
tmi->height = tmi->lines * getFontHeight(tmi->font);
- /* if x set to "-1", automatically determine by width and alignment */
+ // if x set to "-1", automatically determine by width and alignment
if (tmi->x == -1)
tmi->x = -1 * ALIGNED_XPOS(0, tmi->width, tmi->align);
- /* if y set to "-1", automatically determine by height and alignment */
+ // if y set to "-1", automatically determine by height and alignment
if (tmi->y == -1)
tmi->y = -1 * ALIGNED_YPOS(0, tmi->height, tmi->valign);
static boolean show_title_initial = TRUE;
boolean show_titlescreen = FALSE;
- /* needed to be able to skip title screen, if no image or message defined */
+ // needed to be able to skip title screen, if no image or message defined
InitializeTitleControls(show_title_initial);
if (setup.show_titlescreen && (show_title_initial || levelset_has_changed))
show_titlescreen = TRUE;
- /* show initial title images and messages only once at program start */
+ // show initial title images and messages only once at program start
show_title_initial = FALSE;
return (show_titlescreen && num_title_screens > 0);
FadeSetLeaveScreen();
- /* do not fade out here -- function may continue and fade on editor screen */
+ // do not fade out here -- function may continue and fade on editor screen
UnmapAllGadgets();
FadeMenuSoundsAndMusic();
GetPlayerConfig();
- /* needed if last screen was the playing screen, invoked from level editor */
+ // needed if last screen was the playing screen, invoked from level editor
if (level_editor_test_game)
{
CloseDoor(DOOR_CLOSE_ALL);
return;
}
- /* needed if last screen was the setup screen and fullscreen state changed */
+ // 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) */
+ // leveldir_current may be invalid (level group, parent link)
if (!validLevelSeries(leveldir_current))
leveldir_current = getFirstValidTreeInfoEntry(leveldir_last_valid);
if (leveldir_current != leveldir_last_valid)
levelset_has_changed = TRUE;
- /* store valid level series information */
+ // store valid level series information
leveldir_last_valid = leveldir_current;
- init_last = init; /* switch to new busy animation */
+ init_last = init; // switch to new busy animation
- /* needed if last screen (level choice) changed graphics, sounds or music */
+ // needed if last screen (level choice) changed graphics, sounds or music
ReloadCustomArtwork(0);
if (CheckTitleScreen(levelset_has_changed))
if (redraw_mask & REDRAW_ALL)
fade_mask = REDRAW_ALL;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
FadeOut(fade_mask);
- /* needed if different viewport properties defined for menues */
+ // needed if different viewport properties defined for menues
ChangeViewportPropertiesIfNeeded();
SetDrawtoField(DRAW_TO_BACKBUFFER);
- /* level_nr may have been set to value over handicap with level editor */
+ // level_nr may have been set to value over handicap with level editor
if (setup.handicap && level_nr > leveldir_current->handicap_level)
level_nr = leveldir_current->handicap_level;
PlayMenuSoundsAndMusic();
- /* create gadgets for main menu screen */
+ // create gadgets for main menu screen
FreeScreenGadgets();
CreateScreenGadgets();
- /* may be required if audio buttons shown on tape and changed in setup menu */
+ // may be required if audio buttons shown on tape and changed in setup menu
FreeGameButtons();
CreateGameButtons();
- /* map gadgets for main menu screen */
+ // map gadgets for main menu screen
MapTapeButtons();
MapScreenMenuGadgets(SCREEN_MASK_MAIN);
UpdateScreenMenuGadgets(SCREEN_MASK_MAIN_HAS_SOLUTION, hasSolutionTape());
- /* copy actual game door content to door double buffer for OpenDoor() */
+ // copy actual game door content to door double buffer for OpenDoor()
BlitBitmap(drawto, bitmap_db_door_1, DX, DY, DXSIZE, DYSIZE, 0, 0);
BlitBitmap(drawto, bitmap_db_door_2, VX, VY, VXSIZE, VYSIZE, 0, 0);
FadeIn(fade_mask);
FadeSetEnterMenu();
- /* update screen area with special editor door */
+ // update screen area with special editor door
redraw_mask |= REDRAW_ALL;
BackToFront();
static void gotoTopLevelDir(void)
{
- /* move upwards until inside (but not above) top level directory */
+ // move upwards until inside (but not above) top level directory
while (leveldir_current->node_parent &&
!strEqual(leveldir_current->node_parent->subdir, STRING_TOP_DIRECTORY))
{
- /* write a "path" into level tree for easy navigation to last level */
+ // write a "path" into level tree for easy navigation to last level
if (leveldir_current->node_parent->node_group->cl_first == -1)
{
int num_leveldirs = numTreeInfoInGroup(leveldir_current);
{
FadeSetEnterScreen();
- /* use individual title fading instead of global "enter screen" fading */
+ // use individual title fading instead of global "enter screen" fading
fading = getTitleFading(tci);
}
{
if (num_title_screens == 0)
{
- /* switch game mode from title screen mode back to info screen mode */
+ // switch game mode from title screen mode back to info screen mode
SetGameStatus(GAME_MODE_INFO);
- /* store that last screen was info screen, not main menu screen */
+ // store that last screen was info screen, not main menu screen
game_status_last_screen = GAME_MODE_INFO;
DrawInfoScreen_NotAvailable("Title screen information:",
FadeOut(REDRAW_ALL);
- /* title screens may have different window size */
+ // title screens may have different window size
ChangeViewportPropertiesIfNeeded();
- /* only required to update logic for redrawing global border */
+ // only required to update logic for redrawing global border
ClearField();
if (tci->is_image)
FadeIn(REDRAW_ALL);
- DelayReached(&title_delay, 0); /* reset delay counter */
+ DelayReached(&title_delay, 0); // reset delay counter
return;
}
FadeIn(REDRAW_ALL);
- DelayReached(&title_delay, 0); /* reset delay counter */
+ DelayReached(&title_delay, 0); // reset delay counter
}
else
{
{
SetMouseCursor(CURSOR_DEFAULT);
- /* force full menu screen redraw after displaying title screens */
+ // force full menu screen redraw after displaying title screens
redraw_mask = REDRAW_ALL;
if (game_status_last_screen == GAME_MODE_INFO)
DrawInfoScreen();
}
- else /* default: return to main menu */
+ else // default: return to main menu
{
SetGameStatus(GAME_MODE_MAIN);
if (setup.handicap && new_level_nr > leveldir_current->handicap_level)
{
- /* skipping levels is only allowed when trying to skip single level */
+ // skipping levels is only allowed when trying to skip single level
if (setup.skip_levels && new_level_nr == old_level_nr + 1 &&
Request("Level still unsolved! Skip despite handicap?", REQ_ASK))
{
UpdateScreenMenuGadgets(SCREEN_MASK_MAIN_HAS_SOLUTION, hasSolutionTape());
- /* needed because DrawPreviewLevelInitial() takes some time */
+ // needed because DrawPreviewLevelInitial() takes some time
BackToFront();
- /* SyncDisplay(); */
+ // SyncDisplay();
}
}
return;
}
- if (mx || my) /* mouse input */
+ if (mx || my) // mouse input
{
pos = -1;
}
}
- /* check if level preview was clicked */
+ // check if level preview was clicked
if (insidePreviewRect(&preview, mx - SX, my - SY))
pos = MAIN_CONTROL_GAME;
PlaySound(SND_MENU_BUTTON_RELEASING);
}
}
- else if (dx || dy) /* keyboard input */
+ else if (dx || dy) // keyboard input
{
if (dx > 0 && (choice == MAIN_CONTROL_INFO ||
choice == MAIN_CONTROL_SETUP))
}
-/* ========================================================================= */
-/* info screen functions */
-/* ========================================================================= */
+// ============================================================================
+// info screen functions
+// ============================================================================
static struct TokenInfo *info_info;
-static int num_info_info; /* number of info entries shown on screen */
-static int max_info_info; /* total number of info entries in list */
+static int num_info_info; // number of info entries shown on screen
+static int max_info_info; // total number of info entries in list
static void execInfoTitleScreen(void)
{
struct TokenInfo *si = &menu_info[menu_info_pos];
void *value_ptr = si->value;
- /* set some entries to "unchangeable" according to other variables */
+ // set some entries to "unchangeable" according to other variables
if ((value_ptr == &setup.sound_simple && !audio.sound_available) ||
(value_ptr == &setup.sound_loops && !audio.loops_available) ||
(value_ptr == &setup.sound_music && !audio.music_available) ||
if (redraw_mask & REDRAW_ALL)
fade_mask = REDRAW_ALL;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
UnmapAllGadgets();
FreeScreenGadgets();
CreateScreenGadgets();
- /* (needed after displaying title screens which disable auto repeat) */
+ // (needed after displaying title screens which disable auto repeat)
KeyboardAutoRepeatOn();
FadeSetLeaveScreen();
FadeOut(fade_mask);
- /* needed if different viewport properties defined for info screen */
+ // needed if different viewport properties defined for info screen
ChangeViewportPropertiesIfNeeded();
SetMainBackgroundImage(IMG_BACKGROUND_INFO);
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];
- int choice = choice_store[mode]; /* starts with 0 */
- int first_entry = first_entry_store[mode]; /* starts with 0 */
+ int choice = choice_store[mode]; // starts with 0
+ int first_entry = first_entry_store[mode]; // starts with 0
int x = 0;
int y = choice - first_entry;
int y_old = y;
num_page_entries_last[mode] = num_page_entries;
}
- /* advance to first valid menu entry */
+ // advance to first valid menu entry
while (choice < num_page_entries &&
menu_info[choice].type & TYPE_SKIP_ENTRY)
choice++;
menu_callback_function();
- break; /* absolutely needed because function changes 'menu_info'! */
+ break; // absolutely needed because function changes 'menu_info'!
}
}
return;
}
- if (mx || my) /* mouse input */
+ if (mx || my) // mouse input
{
x = (mx - mSX) / 32;
y = (my - mSY) / 32 - MENU_SCREEN_START_YPOS;
}
- else if (dx || dy) /* keyboard or scrollbar/scrollbutton input */
+ else if (dx || dy) // keyboard or scrollbar/scrollbutton input
{
- /* move cursor instead of scrolling when already at start/end of list */
+ // move cursor instead of scrolling when already at start/end of list
if (dy == -1 * SCROLL_LINE && first_entry == 0)
dy = -1;
else if (dy == +1 * SCROLL_LINE &&
first_entry + num_page_entries == max_page_entries)
dy = 1;
- /* handle scrolling screen one line or page */
+ // handle scrolling screen one line or page
if (y + dy < 0 ||
y + dy > num_page_entries - 1)
{
if (dy < 0 && first_entry > 0)
{
- /* scroll page/line up */
+ // scroll page/line up
first_entry -= step;
if (first_entry < 0)
}
else if (dy > 0 && first_entry + num_page_entries < max_page_entries)
{
- /* scroll page/line down */
+ // scroll page/line down
first_entry += step;
if (first_entry + num_page_entries > max_page_entries)
else if (dy)
y += dy;
- /* jump to next non-empty menu entry (up or down) */
+ // jump to next non-empty menu entry (up or down)
while (first_entry + y > 0 &&
first_entry + y < max_page_entries - 1 &&
menu_info[first_entry + y].type & TYPE_SKIP_ENTRY)
menu_callback_function();
- /* absolutely needed because function changes 'menu_info'! */
+ // absolutely needed because function changes 'menu_info'!
break;
}
}
{
PlaySound(SND_MENU_ITEM_SELECTING);
- /* when selecting key headline, execute function for key value change */
+ // when selecting key headline, execute function for key value change
if (menu_info[first_entry + y].type & TYPE_KEYTEXT &&
menu_info[first_entry + y + 1].type & TYPE_KEY)
y++;
- /* when selecting string value, execute function for list selection */
+ // when selecting string value, execute function for list selection
if (menu_info[first_entry + y].type & TYPE_STRING && y > 0 &&
menu_info[first_entry + y - 1].type & TYPE_ENTER_LIST)
y--;
- /* when selecting string value, execute function for text input gadget */
+ // when selecting string value, execute function for text input gadget
if (menu_info[first_entry + y].type & TYPE_STRING && y > 0 &&
menu_info[first_entry + y - 1].type & TYPE_TEXT_INPUT)
y--;
int max_lines_per_text = 2;
char *text = NULL;
- if (action != -1 && direction != -1) /* element.action.direction */
+ if (action != -1 && direction != -1) // element.action.direction
text = getHelpText(element, action, direction);
- if (text == NULL && action != -1) /* element.action */
+ if (text == NULL && action != -1) // element.action
text = getHelpText(element, action, -1);
- if (text == NULL && direction != -1) /* element.direction */
+ if (text == NULL && direction != -1) // element.direction
text = getHelpText(element, -1, direction);
- if (text == NULL) /* base element */
+ if (text == NULL) // base element
text = getHelpText(element, -1, -1);
- if (text == NULL) /* not found */
+ if (text == NULL) // not found
text = "No description available";
- if (strlen(text) <= max_chars_per_line) /* only one line of text */
+ if (strlen(text) <= max_chars_per_line) // only one line of text
ystart += getFontHeight(font_nr) / 2;
DrawTextBuffer(xstart, ystart + ypos * ystep, text, font_nr,
SDL_version sdl_version_compiled;
const SDL_version *sdl_version_linked;
int driver_name_len = 10;
-#if defined(TARGET_SDL2)
SDL_version sdl_version_linked_ext;
const char *driver_name = NULL;
-#else
- char driver_name[driver_name_len];
-#endif
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_VERSION);
ystart += ystep_head;
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
DrawTextF(xstart1, ystart, font_text, "SDL");
DrawTextF(xstart2, ystart, font_text, "%d.%d.%d",
DrawTextF(xstart3, ystart, font_head, "Used");
ystart += ystep_head;
-#if defined(TARGET_SDL2)
driver_name = getStringCopyNStatic(SDL_GetVideoDriver(0), driver_name_len);
-#else
- SDL_VideoDriverName(driver_name, driver_name_len);
-#endif
DrawTextF(xstart1, ystart, font_text, "SDL_VideoDriver");
DrawTextF(xstart2, ystart, font_text, "%s", setup.system.sdl_videodriver);
DrawTextF(xstart3, ystart, font_text, "%s", driver_name);
ystart += ystep_line;
-#if defined(TARGET_SDL2)
driver_name = getStringCopyNStatic(SDL_GetAudioDriver(0), driver_name_len);
-#else
- SDL_AudioDriverName(driver_name, driver_name_len);
-#endif
DrawTextF(xstart1, ystart, font_text, "SDL_AudioDriver");
DrawTextF(xstart2, ystart, font_text, "%s", setup.system.sdl_audiodriver);
DrawTextSCentered(ystart, FONT_TEXT_1, title);
- /* if x position set to "-1", automatically determine by playfield width */
+ // if x position set to "-1", automatically determine by playfield width
if (tmi->x == -1)
tmi->x = SXSIZE / 2;
- /* if y position set to "-1", use static default value */
+ // if y position set to "-1", use static default value
if (tmi->y == -1)
tmi->y = 150;
- /* if width set to "-1", automatically determine by playfield width */
+ // if width set to "-1", automatically determine by playfield width
if (tmi->width == -1)
tmi->width = SXSIZE - 2 * TILEX;
- /* if height set to "-1", automatically determine by playfield height */
+ // if height set to "-1", automatically determine by playfield height
if (tmi->height == -1)
tmi->height = MENU_SCREEN_INFO_YBOTTOM - tmi->y - 10;
- /* if chars set to "-1", automatically determine by text and font width */
+ // if chars set to "-1", automatically determine by text and font width
if (tmi->chars == -1)
tmi->chars = tmi->width / getFontWidth(tmi->font);
else
tmi->width = tmi->chars * getFontWidth(tmi->font);
- /* if lines set to "-1", automatically determine by text and font height */
+ // if lines set to "-1", automatically determine by text and font height
if (tmi->lines == -1)
tmi->lines = tmi->height / getFontHeight(tmi->font);
else
}
-/* ========================================================================= */
-/* type name functions */
-/* ========================================================================= */
+// ============================================================================
+// type name functions
+// ============================================================================
void HandleTypeName(int newxpos, Key key)
{
}
-/* ========================================================================= */
-/* tree menu functions */
-/* ========================================================================= */
+// ============================================================================
+// tree menu functions
+// ============================================================================
static void DrawChooseTree(TreeInfo **ti_ptr)
{
int fade_mask = REDRAW_FIELD;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
if (strEqual((*ti_ptr)->subdir, STRING_TOP_DIRECTORY))
FadeOut(fade_mask);
- /* needed if different viewport properties defined for choosing level (set) */
+ // needed if different viewport properties defined for choosing level (set)
ChangeViewportPropertiesIfNeeded();
if (game_status == GAME_MODE_LEVELNR)
node->levels, (node->levels > 1 ? "levels" : "level"),
node->class_desc);
- /* let BackToFront() redraw only what is needed */
+ // let BackToFront() redraw only what is needed
redraw_mask = last_redraw_mask;
for (x = 0; x < SCR_FIELDX; x++)
MarkTileDirty(x, 1);
if (ti->cl_first == -1)
{
- /* only on initialization */
+ // only on initialization
ti->cl_first = MAX(0, entry_pos - num_page_entries + 1);
ti->cl_cursor = entry_pos - ti->cl_first;
}
(num_entries > num_page_entries &&
num_entries - ti->cl_first < num_page_entries))
{
- /* only after change of list size (by custom graphic configuration) */
+ // only after change of list size (by custom graphic configuration)
ti->cl_first = MAX(0, entry_pos - num_page_entries + 1);
ti->cl_cursor = entry_pos - ti->cl_first;
}
return;
}
- if (mx || my) /* mouse input */
+ if (mx || my) // mouse input
{
x = (mx - mSX) / 32;
y = (my - mSY) / 32 - MENU_SCREEN_START_YPOS;
}
- else if (dx || dy) /* keyboard or scrollbar/scrollbutton input */
+ else if (dx || dy) // keyboard or scrollbar/scrollbutton input
{
- /* move cursor instead of scrolling when already at start/end of list */
+ // move cursor instead of scrolling when already at start/end of list
if (dy == -1 * SCROLL_LINE && ti->cl_first == 0)
dy = -1;
else if (dy == +1 * SCROLL_LINE &&
ti->cl_first + num_page_entries == num_entries)
dy = 1;
- /* handle scrolling screen one line or page */
+ // handle scrolling screen one line or page
if (ti->cl_cursor + dy < 0 ||
ti->cl_cursor + dy > num_page_entries - 1)
{
if (dy < 0 && ti->cl_first > 0)
{
- /* scroll page/line up */
+ // scroll page/line up
ti->cl_first -= step;
if (ti->cl_first < 0)
}
else if (dy > 0 && ti->cl_first + num_page_entries < num_entries)
{
- /* scroll page/line down */
+ // scroll page/line down
ti->cl_first += step;
if (ti->cl_first + num_page_entries > num_entries)
return;
}
- /* handle moving cursor one line */
+ // handle moving cursor one line
y = ti->cl_cursor + dy;
}
char identifier[32], name[32];
int value = i;
- /* temporarily load level info to get level name */
+ // temporarily load level info to get level name
LoadLevelInfoOnly(i);
ti->node_top = &level_number;
pushTreeInfo(&level_number, ti);
}
- /* sort level number values to start with lowest level number */
+ // sort level number values to start with lowest level number
sortTreeInfo(&level_number);
- /* set current level number to current level number */
+ // set current level number to current level number
level_number_current =
getTreeInfoFromIdentifier(level_number, i_to_a(level_nr));
- /* if that also fails, set current level number to first available level */
+ // if that also fails, set current level number to first available level
if (level_number_current == NULL)
level_number_current = level_number;
{
int fade_mask = REDRAW_FIELD;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
UnmapAllGadgets();
FadeMenuSoundsAndMusic();
- /* (this is needed when called from GameEnd() after winning a game) */
+ // (this is needed when called from GameEnd() after winning a game)
KeyboardAutoRepeatOn();
- /* (this is needed when called from GameEnd() after winning a game) */
+ // (this is needed when called from GameEnd() after winning a game)
SetDrawDeactivationMask(REDRAW_NONE);
SetDrawBackgroundMask(REDRAW_FIELD);
FadeOut(fade_mask);
- /* needed if different viewport properties defined for scores */
+ // needed if different viewport properties defined for scores
ChangeViewportPropertiesIfNeeded();
PlayMenuSoundsAndMusic();
return;
}
- if (ABS(dy) == SCROLL_PAGE) /* handle scrolling one page */
+ if (ABS(dy) == SCROLL_PAGE) // handle scrolling one page
step = NUM_MENU_ENTRIES_ON_SCREEN - 1;
if (dy < 0)
if (game_status_last_screen == GAME_MODE_PLAYING &&
setup.auto_play_next_level && setup.increment_levels &&
+ level_nr < leveldir_current->last_level &&
!network_playing)
{
StartGameActions(network.enabled, setup.autorecord, level.random_seed);
}
-/* ========================================================================= */
-/* setup screen functions */
-/* ========================================================================= */
+// ============================================================================
+// setup screen functions
+// ============================================================================
static struct TokenInfo *setup_info;
-static int num_setup_info; /* number of setup entries shown on screen */
-static int max_setup_info; /* total number of setup entries in list */
+static int num_setup_info; // number of setup entries shown on screen
+static int max_setup_info; // total number of setup entries in list
static char *window_size_text;
static char *scaling_type_text;
static void execSetupGame_setGameSpeeds(boolean update_value)
{
+ if (setup.game_speed_extended)
+ {
+ game_speeds_list = game_speeds_list_extended;
+ game_speeds = game_speeds_extended;
+ }
+ else
+ {
+ game_speeds_list = game_speeds_list_normal;
+ game_speeds = game_speeds_normal;
+ }
+
if (game_speeds == NULL)
{
int i;
pushTreeInfo(&game_speeds, ti);
}
- /* sort game speed values to start with slowest game speed */
+ // sort game speed values to start with slowest game speed
sortTreeInfo(&game_speeds);
update_value = TRUE;
if (update_value)
{
- /* set current game speed to configured game speed value */
+ // set current game speed to configured game speed value
game_speed_current =
getTreeInfoFromIdentifier(game_speeds, i_to_a(setup.game_frame_delay));
- /* if that fails, set current game speed to reliable default value */
+ // if that fails, set current game speed to reliable default value
if (game_speed_current == NULL)
game_speed_current =
getTreeInfoFromIdentifier(game_speeds, i_to_a(GAME_FRAME_DELAY));
- /* if that also fails, set current game speed to first available speed */
+ // if that also fails, set current game speed to first available speed
if (game_speed_current == NULL)
game_speed_current = game_speeds;
+
+ if (setup.game_speed_extended)
+ game_speeds_extended = game_speeds;
+ else
+ game_speeds_normal = game_speeds;
}
setup.game_frame_delay = atoi(game_speed_current->identifier);
- /* needed for displaying game speed text instead of identifier */
+ // needed for displaying game speed text instead of identifier
game_speed_text = game_speed_current->name;
}
pushTreeInfo(&scroll_delays, ti);
}
- /* sort scroll delay values to start with lowest scroll delay value */
+ // sort scroll delay values to start with lowest scroll delay value
sortTreeInfo(&scroll_delays);
- /* set current scroll delay value to configured scroll delay value */
+ // set current scroll delay value to configured scroll delay value
scroll_delay_current =
getTreeInfoFromIdentifier(scroll_delays,i_to_a(setup.scroll_delay_value));
- /* if that fails, set current scroll delay to reliable default value */
+ // if that fails, set current scroll delay to reliable default value
if (scroll_delay_current == NULL)
scroll_delay_current =
getTreeInfoFromIdentifier(scroll_delays, i_to_a(STD_SCROLL_DELAY));
- /* if that also fails, set current scroll delay to first available value */
+ // if that also fails, set current scroll delay to first available value
if (scroll_delay_current == NULL)
scroll_delay_current = scroll_delays;
}
setup.scroll_delay_value = atoi(scroll_delay_current->identifier);
- /* needed for displaying scroll delay text instead of identifier */
+ // needed for displaying scroll delay text instead of identifier
scroll_delay_text = scroll_delay_current->name;
}
pushTreeInfo(&snapshot_modes, ti);
}
- /* sort snapshot mode values to start with lowest snapshot mode value */
+ // sort snapshot mode values to start with lowest snapshot mode value
sortTreeInfo(&snapshot_modes);
- /* set current snapshot mode value to configured snapshot mode value */
+ // set current snapshot mode value to configured snapshot mode value
snapshot_mode_current =
getTreeInfoFromIdentifier(snapshot_modes, setup.engine_snapshot_mode);
- /* if that fails, set current snapshot mode to reliable default value */
+ // if that fails, set current snapshot mode to reliable default value
if (snapshot_mode_current == NULL)
snapshot_mode_current =
getTreeInfoFromIdentifier(snapshot_modes, STR_SNAPSHOT_MODE_DEFAULT);
- /* if that also fails, set current snapshot mode to first available value */
+ // if that also fails, set current snapshot mode to first available value
if (snapshot_mode_current == NULL)
snapshot_mode_current = snapshot_modes;
}
setup.engine_snapshot_mode = snapshot_mode_current->identifier;
- /* needed for displaying snapshot mode text instead of identifier */
+ // needed for displaying snapshot mode text instead of identifier
snapshot_mode_text = snapshot_mode_current->name;
}
network_server_hostname[MAX_SETUP_TEXT_INPUT_LEN] = '\0';
}
- /* needed for displaying network server text instead of identifier */
+ // needed for displaying network server text instead of identifier
network_server_text = network_server_hostname;
}
-static void CheckGameSpeedForVsync(boolean force_vsync_game_speed)
-{
- if (strEqual(setup.vsync_mode, STR_VSYNC_MODE_OFF) ||
- setup.game_frame_delay <= MAX_VSYNC_FRAME_DELAY)
- return;
-
- if (force_vsync_game_speed)
- {
- /* set game speed to existing list value that is fast enough for vsync */
- setup.game_frame_delay = 15;
-
- execSetupGame_setGameSpeeds(TRUE);
-
- Request("Game speed was set to \"fast\" for VSync to work!", REQ_CONFIRM);
- }
- else
- {
- Request("Warning! Game speed too low for VSync to work!", REQ_CONFIRM);
- }
-}
-
static void execSetupGame(void)
{
- boolean check_vsync_game_speed = (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED);
+ boolean check_vsync_mode = (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED);
execSetupGame_setGameSpeeds(FALSE);
execSetupGame_setScrollDelays();
DrawSetupScreen();
- // check if game speed is high enough for 60 Hz vsync to work
- if (check_vsync_game_speed)
- CheckGameSpeedForVsync(FALSE);
+ // check if vsync needs to be disabled for this game speed to work
+ if (check_vsync_mode)
+ DisableVsyncIfNeeded();
}
static void execSetupChooseGameSpeed(void)
pushTreeInfo(&window_sizes, ti);
}
- /* sort window size values to start with lowest window size value */
+ // sort window size values to start with lowest window size value
sortTreeInfo(&window_sizes);
- /* set current window size value to configured window size value */
+ // set current window size value to configured window size value
window_size_current =
getTreeInfoFromIdentifier(window_sizes,
i_to_a(setup.window_scaling_percent));
- /* if that fails, set current window size to reliable default value */
+ // if that fails, set current window size to reliable default value
if (window_size_current == NULL)
window_size_current =
getTreeInfoFromIdentifier(window_sizes,
i_to_a(STD_WINDOW_SCALING_PERCENT));
- /* if that also fails, set current window size to first available value */
+ // if that also fails, set current window size to first available value
if (window_size_current == NULL)
window_size_current = window_sizes;
}
setup.window_scaling_percent = atoi(window_size_current->identifier);
- /* needed for displaying window size text instead of identifier */
+ // needed for displaying window size text instead of identifier
window_size_text = window_size_current->name;
}
pushTreeInfo(&scaling_types, ti);
}
- /* sort scaling type values to start with lowest scaling type value */
+ // sort scaling type values to start with lowest scaling type value
sortTreeInfo(&scaling_types);
- /* set current scaling type value to configured scaling type value */
+ // set current scaling type value to configured scaling type value
scaling_type_current =
getTreeInfoFromIdentifier(scaling_types, setup.window_scaling_quality);
- /* if that fails, set current scaling type to reliable default value */
+ // if that fails, set current scaling type to reliable default value
if (scaling_type_current == NULL)
scaling_type_current =
getTreeInfoFromIdentifier(scaling_types, SCALING_QUALITY_DEFAULT);
- /* if that also fails, set current scaling type to first available value */
+ // if that also fails, set current scaling type to first available value
if (scaling_type_current == NULL)
scaling_type_current = scaling_types;
}
setup.window_scaling_quality = scaling_type_current->identifier;
- /* needed for displaying scaling type text instead of identifier */
+ // needed for displaying scaling type text instead of identifier
scaling_type_text = scaling_type_current->name;
}
pushTreeInfo(&rendering_modes, ti);
}
- /* sort rendering mode values to start with lowest rendering mode value */
+ // sort rendering mode values to start with lowest rendering mode value
sortTreeInfo(&rendering_modes);
- /* set current rendering mode value to configured rendering mode value */
+ // set current rendering mode value to configured rendering mode value
rendering_mode_current =
getTreeInfoFromIdentifier(rendering_modes, setup.screen_rendering_mode);
- /* if that fails, set current rendering mode to reliable default value */
+ // if that fails, set current rendering mode to reliable default value
if (rendering_mode_current == NULL)
rendering_mode_current =
getTreeInfoFromIdentifier(rendering_modes,
STR_SPECIAL_RENDERING_DEFAULT);
- /* if that also fails, set current rendering mode to first available one */
+ // if that also fails, set current rendering mode to first available one
if (rendering_mode_current == NULL)
rendering_mode_current = rendering_modes;
}
setup.screen_rendering_mode = rendering_mode_current->identifier;
- /* needed for displaying rendering mode text instead of identifier */
+ // needed for displaying rendering mode text instead of identifier
rendering_mode_text = rendering_mode_current->name;
}
-static void execSetupGraphics_setVsyncModes(void)
+static void execSetupGraphics_setVsyncModes(boolean update_value)
{
if (vsync_modes == NULL)
{
pushTreeInfo(&vsync_modes, ti);
}
- /* sort vsync mode values to start with lowest vsync mode value */
+ // sort vsync mode values to start with lowest vsync mode value
sortTreeInfo(&vsync_modes);
- /* set current vsync mode value to configured vsync mode value */
+ update_value = TRUE;
+ }
+
+ if (update_value)
+ {
+ // set current vsync mode value to configured vsync mode value
vsync_mode_current =
getTreeInfoFromIdentifier(vsync_modes, setup.vsync_mode);
- /* if that fails, set current vsync mode to reliable default value */
+ // if that fails, set current vsync mode to reliable default value
if (vsync_mode_current == NULL)
vsync_mode_current =
getTreeInfoFromIdentifier(vsync_modes, STR_VSYNC_MODE_DEFAULT);
- /* if that also fails, set current vsync mode to first available one */
+ // if that also fails, set current vsync mode to first available one
if (vsync_mode_current == NULL)
vsync_mode_current = vsync_modes;
}
setup.vsync_mode = vsync_mode_current->identifier;
- /* needed for displaying vsync mode text instead of identifier */
+ // needed for displaying vsync mode text instead of identifier
vsync_mode_text = vsync_mode_current->name;
}
static void execSetupGraphics(void)
{
- boolean check_vsync_game_speed = (setup_mode == SETUP_MODE_CHOOSE_VSYNC);
+ boolean check_game_speed = (setup_mode == SETUP_MODE_CHOOSE_VSYNC);
// update "setup.window_scaling_percent" from list selection
// (in this case, window scaling was changed on setup screen)
execSetupGraphics_setScalingTypes();
execSetupGraphics_setRenderingModes();
- execSetupGraphics_setVsyncModes();
+ execSetupGraphics_setVsyncModes(FALSE);
setup_mode = SETUP_MODE_GRAPHICS;
DrawSetupScreen();
// check if game speed is high enough for 60 Hz vsync to work
- if (check_vsync_game_speed)
- CheckGameSpeedForVsync(TRUE);
+ if (check_game_speed)
+ ModifyGameSpeedIfNeeded();
-#if defined(TARGET_SDL2)
// window scaling may have changed at this point
ToggleFullscreenOrChangeWindowScalingIfNeeded();
// screen vsync mode may have changed at this point
SDLSetScreenVsyncMode(setup.vsync_mode);
-#endif
}
static void execSetupChooseWindowSize(void)
pushTreeInfo(&volumes_simple, ti);
}
- /* sort volume values to start with lowest volume value */
+ // sort volume values to start with lowest volume value
sortTreeInfo(&volumes_simple);
- /* set current volume value to configured volume value */
+ // 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 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 that also fails, set current volume to first available value
if (volume_simple_current == NULL)
volume_simple_current = volumes_simple;
}
pushTreeInfo(&volumes_loops, ti);
}
- /* sort volume values to start with lowest volume value */
+ // sort volume values to start with lowest volume value
sortTreeInfo(&volumes_loops);
- /* set current volume value to configured volume value */
+ // 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 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 that also fails, set current volume to first available value
if (volume_loops_current == NULL)
volume_loops_current = volumes_loops;
}
pushTreeInfo(&volumes_music, ti);
}
- /* sort volume values to start with lowest volume value */
+ // sort volume values to start with lowest volume value
sortTreeInfo(&volumes_music);
- /* set current volume value to configured volume value */
+ // 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 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 that also fails, set current volume to first available value
if (volume_music_current == NULL)
volume_music_current = volumes_music;
}
setup.volume_loops = atoi(volume_loops_current->identifier);
setup.volume_music = atoi(volume_music_current->identifier);
- /* needed for displaying volume text instead of 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;
pushTreeInfo(&touch_controls, ti);
}
- /* sort touch control values to start with lowest touch control value */
+ // sort touch control values to start with lowest touch control value
sortTreeInfo(&touch_controls);
- /* set current touch control value to configured touch control value */
+ // set current touch control value to configured touch control value
touch_control_current =
getTreeInfoFromIdentifier(touch_controls, setup.touch.control_type);
- /* if that fails, set current touch control to reliable default value */
+ // if that fails, set current touch control to reliable default value
if (touch_control_current == NULL)
touch_control_current =
getTreeInfoFromIdentifier(touch_controls, TOUCH_CONTROL_DEFAULT);
- /* if that also fails, set current touch control to first available value */
+ // if that also fails, set current touch control to first available value
if (touch_control_current == NULL)
touch_control_current = touch_controls;
}
pushTreeInfo(&move_distances, ti);
}
- /* sort distance values to start with lowest distance value */
+ // sort distance values to start with lowest distance value
sortTreeInfo(&move_distances);
- /* set current distance value to configured distance value */
+ // set current distance value to configured distance value
move_distance_current =
getTreeInfoFromIdentifier(move_distances,
i_to_a(setup.touch.move_distance));
- /* if that fails, set current distance to reliable default value */
+ // if that fails, set current distance to reliable default value
if (move_distance_current == NULL)
move_distance_current =
getTreeInfoFromIdentifier(move_distances,
i_to_a(TOUCH_MOVE_DISTANCE_DEFAULT));
- /* if that also fails, set current distance to first available value */
+ // if that also fails, set current distance to first available value
if (move_distance_current == NULL)
move_distance_current = move_distances;
}
pushTreeInfo(&drop_distances, ti);
}
- /* sort distance values to start with lowest distance value */
+ // sort distance values to start with lowest distance value
sortTreeInfo(&drop_distances);
- /* set current distance value to configured distance value */
+ // set current distance value to configured distance value
drop_distance_current =
getTreeInfoFromIdentifier(drop_distances,
i_to_a(setup.touch.drop_distance));
- /* if that fails, set current distance to reliable default value */
+ // if that fails, set current distance to reliable default value
if (drop_distance_current == NULL)
drop_distance_current =
getTreeInfoFromIdentifier(drop_distances,
i_to_a(TOUCH_DROP_DISTANCE_DEFAULT));
- /* if that also fails, set current distance to first available value */
+ // if that also fails, set current distance to first available value
if (drop_distance_current == NULL)
drop_distance_current = drop_distances;
}
pushTreeInfo(&transparencies, ti);
}
- /* sort transparency values to start with lowest transparency value */
+ // sort transparency values to start with lowest transparency value
sortTreeInfo(&transparencies);
- /* set current transparency value to configured transparency value */
+ // set current transparency value to configured transparency value
transparency_current =
getTreeInfoFromIdentifier(transparencies,
i_to_a(setup.touch.transparency));
- /* if that fails, set current transparency to reliable default value */
+ // if that fails, set current transparency to reliable default value
if (transparency_current == NULL)
transparency_current =
getTreeInfoFromIdentifier(transparencies,
i_to_a(TOUCH_TRANSPARENCY_DEFAULT));
- /* if that also fails, set current transparency to first available value */
+ // if that also fails, set current transparency to first available value
if (transparency_current == NULL)
transparency_current = transparencies;
}
pushTreeInfo(&grid_sizes[i][j], ti);
}
- /* sort grid size values to start with lowest grid size value */
+ // sort grid size values to start with lowest grid size value
sortTreeInfo(&grid_sizes[i][j]);
- /* set current grid size value to configured grid size value */
+ // set current grid size value to configured grid size value
grid_size_current[i][j] =
getTreeInfoFromIdentifier(grid_sizes[i][j],
i_to_a(j == 0 ?
setup.touch.grid_xsize[i] :
setup.touch.grid_ysize[i]));
- /* if that fails, set current grid size to reliable default value */
+ // if that fails, set current grid size to reliable default value
if (grid_size_current[i][j] == NULL)
grid_size_current[i][j] =
getTreeInfoFromIdentifier(grid_sizes[i][j],
DEFAULT_GRID_XSIZE(i) :
DEFAULT_GRID_YSIZE(i)));
- /* if that also fails, set current grid size to first available value */
+ // if that also fails, set current grid size to first available value
if (grid_size_current[i][j] == NULL)
grid_size_current[i][j] = grid_sizes[i][j];
}
}
}
- /* needed for displaying value text instead of identifier */
+ // needed for displaying value text instead of identifier
touch_controls_text = touch_control_current->name;
move_distance_text = move_distance_current->name;
drop_distance_text = drop_distance_current->name;
setup.sounds_set = artwork.snd_current->identifier;
setup.music_set = artwork.mus_current->identifier;
- /* needed if last screen (setup choice) changed graphics, sounds or music */
+ // needed if last screen (setup choice) changed graphics, sounds or music
ReloadCustomArtwork(0);
- /* needed for displaying artwork name instead of artwork identifier */
+ // needed for displaying artwork name instead of artwork identifier
graphics_set_name = artwork.gfx_current->name;
sounds_set_name = artwork.snd_current->name;
music_set_name = artwork.mus_current->name;
DrawSetupScreen();
}
+static void ToggleGameSpeedsListIfNeeded(void)
+{
+ boolean using_game_speeds_extended = (game_speeds == game_speeds_extended);
+
+ if (setup.game_speed_extended == using_game_speeds_extended)
+ return;
+
+ // try to match similar values when changing game speeds list
+ if (setup.game_speed_extended)
+ setup.game_frame_delay = (setup.game_frame_delay == 15 ? 16 :
+ setup.game_frame_delay == 30 ? 29 :
+ setup.game_frame_delay);
+ else
+ setup.game_frame_delay = (setup.game_frame_delay == 14 ? 15 :
+ setup.game_frame_delay == 16 ? 15 :
+ setup.game_frame_delay >= 29 ? 30 :
+ setup.game_frame_delay <= 10 ? 10 :
+ setup.game_frame_delay);
+
+ execSetupGame_setGameSpeeds(TRUE);
+
+ DrawSetupScreen();
+}
+
+static void ModifyGameSpeedIfNeeded(void)
+{
+ if (strEqual(setup.vsync_mode, STR_VSYNC_MODE_OFF) ||
+ setup.game_frame_delay <= MAX_VSYNC_FRAME_DELAY)
+ return;
+
+ char message[100];
+ char *game_speed_text = "Fast";
+ int game_speed_value = 15;
+
+ if (setup.game_speed_extended)
+ {
+ game_speed_text = "60 fps";
+ game_speed_value = 16;
+ }
+
+ sprintf(message, "Game speed set to %s for VSync to work!", game_speed_text);
+
+ // set game speed to existing list value that is fast enough for vsync
+ setup.game_frame_delay = game_speed_value;
+
+ execSetupGame_setGameSpeeds(TRUE);
+
+ Request(message, REQ_CONFIRM);
+}
+
+static void DisableVsyncIfNeeded(void)
+{
+ if (strEqual(setup.vsync_mode, STR_VSYNC_MODE_OFF) ||
+ (setup.game_frame_delay >= MIN_VSYNC_FRAME_DELAY &&
+ setup.game_frame_delay <= MAX_VSYNC_FRAME_DELAY))
+ return;
+
+ // disable vsync for the selected game speed to work
+ setup.vsync_mode = STR_VSYNC_MODE_OFF;
+
+ execSetupGraphics_setVsyncModes(TRUE);
+
+ Request("VSync disabled for this game speed to work!", REQ_CONFIRM);
+}
+
static struct
{
void *value;
{ 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_YES_NO, &setup.ask_on_game_over, "Ask on Game Over:" },
{ TYPE_SWITCH, &setup.autorecord, "Auto-Record Tapes:" },
{ TYPE_ENTER_LIST, execSetupChooseGameSpeed, "Game Speed:" },
{ TYPE_STRING, &game_speed_text, "" },
+ { TYPE_SWITCH, &setup.game_speed_extended, "Game Speed Extended List:" },
#if 1
{ TYPE_ENTER_LIST, execSetupChooseScrollDelay, "Scroll Delay:" },
{ TYPE_STRING, &scroll_delay_text, "" },
static struct TokenInfo setup_info_graphics[] =
{
-#if defined(TARGET_SDL2) && !defined(PLATFORM_ANDROID)
+#if !defined(PLATFORM_ANDROID)
{ TYPE_SWITCH, &setup.fullscreen, "Fullscreen:" },
{ TYPE_ENTER_LIST, execSetupChooseWindowSize, "Window Scaling:" },
{ TYPE_STRING, &window_size_text, "" },
{
key = GetEventKey((KeyEvent *)&event, TRUE);
- /* press 'Escape' or 'Enter' to keep the existing key binding */
+ // press 'Escape' or 'Enter' to keep the existing key binding
if (key == KSYM_Escape || key == KSYM_Return)
- key = KSYM_UNDEFINED; /* keep old value */
+ key = KSYM_UNDEFINED; // keep old value
got_key_event = TRUE;
}
}
}
- /* downward compatibility correction for Juergen Bonhagen's menu settings */
+ // downward compatibility correction for Juergen Bonhagen's menu settings
if (setup_mode != SETUP_MODE_INPUT)
{
int max_menu_text_length_big = (menu_screen_value_xpos -
MENU_SCREEN_START_XPOS);
int max_menu_text_length_medium = max_menu_text_length_big * 2;
- int check_font_nr = FONT_OPTION_ON; /* known font that needs correction */
+ int check_font_nr = FONT_OPTION_ON; // known font that needs correction
int font1_xoffset = getFontBitmapInfo(font_nr)->draw_xoffset;
int font2_xoffset = getFontBitmapInfo(check_font_nr)->draw_xoffset;
int text_startx = mSX + MENU_SCREEN_START_XPOS * 32;
startx + font2_xoffset < text_startx + text_width + text_font_xoffset)
correct_font_draw_xoffset = TRUE;
- /* check if setup value would overlap with setup text when printed */
- /* (this can happen for extreme/wrong values for font draw offset) */
+ // check if setup value would overlap with setup text when printed
+ // (this can happen for extreme/wrong values for font draw offset)
if (correct_font_draw_xoffset)
{
font_draw_xoffset_old = getFontBitmapInfo(font_nr)->draw_xoffset;
// network mode may have changed at this point
if (si->value == &setup.network_mode)
ToggleNetworkModeIfNeeded();
+
+ // game speed list may have changed at this point
+ if (si->value == &setup.game_speed_extended)
+ ToggleGameSpeedsListIfNeeded();
}
static struct TokenInfo *getSetupInfoFinal(struct TokenInfo *setup_info_orig)
int list_pos = 0;
int i;
- /* determine maximum list size of target list */
+ // determine maximum list size of target list
while (setup_info_orig[list_size++].type != 0);
- /* free, allocate and clear memory for target list */
+ // free, allocate and clear memory for target list
checked_free(setup_info_final);
setup_info_final = checked_calloc(list_size * sizeof(struct TokenInfo));
- /* copy setup info list without setup entries marked as hidden */
+ // copy setup info list without setup entries marked as hidden
for (i = 0; setup_info_orig[i].type != 0; i++)
{
- /* skip setup entries configured to be hidden */
+ // skip setup entries configured to be hidden
if (hideSetupEntry(setup_info_orig[i].value))
continue;
- /* skip skippable setup entries if screen is lower than usual */
+ // skip skippable setup entries if screen is lower than usual
if (SCR_FIELDY < SCR_FIELDY_DEFAULT &&
setup_info_orig[i].type == TYPE_SKIPPABLE)
continue;
char *title_string = NULL;
int i;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
UnmapAllGadgets();
FadeOut(fade_mask);
- /* needed if different viewport properties defined for setup screen */
+ // needed if different viewport properties defined for setup screen
ChangeViewportPropertiesIfNeeded();
SetMainBackgroundImage(IMG_BACKGROUND_SETUP);
title_string = STR_SETUP_SHORTCUTS;
}
- /* use modified setup info without setup entries marked as hidden */
+ // use modified setup info without setup entries marked as hidden
setup_info = getSetupInfoFinal(setup_info);
DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, title_string);
DrawCursorAndText_Setup(i, -1, FALSE);
}
- /* create gadgets for setup input menu screen */
+ // create gadgets for setup input menu screen
FreeScreenGadgets();
CreateScreenGadgets();
- /* map gadgets for setup input menu screen */
+ // map gadgets for setup input menu screen
MapScreenMenuGadgets(SCREEN_MASK_INPUT);
HandleSetupScreen_Input(0, 0, 0, 0, MB_MENU_INITIALIZE);
for (i = 0; setup_info_input[i].type != 0; i++)
{
- /* adjust menu structure according to skipped setup entries */
+ // adjust menu structure according to skipped setup entries
if (setup_info_input[i].type == TYPE_SKIPPABLE)
{
pos_empty2--;
if (button == MB_MENU_INITIALIZE)
{
- /* input setup menu may have changed size due to graphics configuration */
+ // input setup menu may have changed size due to graphics configuration
if (choice >= pos_empty1)
choice = pos_end;
return;
}
- if (mx || my) /* mouse input */
+ if (mx || my) // mouse input
{
x = (mx - mSX) / 32;
y = (my - mSY) / 32 - MENU_SCREEN_START_YPOS;
}
- else if (dx || dy) /* keyboard input */
+ else if (dx || dy) // keyboard input
{
if (dx && choice == 0)
x = (dx < 0 ? 10 : 12);
font_nr_new = FONT_VALUE_NARROW;
}
- /* read existing key bindings from player setup */
+ // read existing key bindings from player setup
custom_key = setup.input[player_nr].key;
FadeSetEnterMenu();
{
Key key = GetEventKey((KeyEvent *)&event, FALSE);
- /* press 'Escape' to abort and keep the old key bindings */
+ // press 'Escape' to abort and keep the old key bindings
if (key == KSYM_Escape)
{
FadeSkipNextFadeIn();
break;
}
- /* press 'Enter' to keep the existing key binding */
+ // press 'Enter' to keep the existing key binding
if (key == KSYM_Return)
key = *customize_step[step_nr].key;
- /* check if key already used */
+ // check if key already used
for (i = 0; i < step_nr; i++)
if (*customize_step[i].key == key)
break;
if (i < step_nr)
break;
- /* got new key binding */
+ // got new key binding
*customize_step[step_nr].key = key;
DrawText(mSX + 4 * 32, mSY + (2 + 2 * step_nr + 1) * 32,
" ", font_nr_new);
getKeyNameFromKey(key), font_nr_new);
step_nr++;
- /* un-highlight last query */
+ // un-highlight last query
DrawText(mSX, mSY + (2 + 2 * (step_nr - 1)) * 32,
customize_step[step_nr - 1].text, FONT_MENU_1);
DrawText(mSX, mSY + (2 + 2 * (step_nr - 1) + 1) * 32,
"Key:", FONT_MENU_1);
- /* all keys configured */
+ // all keys configured
if (step_nr == 6)
{
finished = TRUE;
break;
}
- /* query next key binding */
+ // query next key binding
DrawText(mSX, mSY + (2 + 2 * step_nr) * 32,
customize_step[step_nr].text, FONT_INPUT_1_ACTIVE);
DrawText(mSX, mSY + (2 + 2 * step_nr + 1) * 32,
BackToFront();
}
- /* write new key bindings back to player setup, if successfully finished */
+ // write new key bindings back to player setup, if successfully finished
if (success)
setup.input[player_nr].key = custom_key;
DrawSetupScreen_Input();
}
-/* game controller mapping generator by Gabriel Jacobo <gabomdq@gmail.com> */
+// game controller mapping generator by Gabriel Jacobo <gabomdq@gmail.com>
#define MARKER_BUTTON 1
#define MARKER_AXIS_X 2
static boolean ConfigureJoystickMapButtonsAndAxes(SDL_Joystick *joystick)
{
-#if defined(TARGET_SDL2)
static boolean bitmaps_initialized = FALSE;
boolean screen_initialized = FALSE;
static Bitmap *controller, *button, *axis_x, *axis_y;
name = getFormattedJoystickName(SDL_JoystickName(joystick));
#if DEBUG_JOYSTICKS
- /* print info about the joystick we are watching */
+ // print info about the joystick we are watching
Error(ERR_DEBUG, "watching joystick %d: (%s)\n",
SDL_JoystickInstanceID(joystick), name);
Error(ERR_DEBUG, "joystick has %d axes, %d hats, %d balls, and %d buttons\n",
SDL_JoystickNumBalls(joystick), SDL_JoystickNumButtons(joystick));
#endif
- /* initialize mapping with GUID and name */
+ // initialize mapping with GUID and name
SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joystick), temp, sizeof(temp));
snprintf(mapping, sizeof(mapping), "%s,%s,platform:%s,",
temp, name, SDL_GetPlatform());
- /* loop through all steps (buttons and axes), getting joystick events */
+ // loop through all steps (buttons and axes), getting joystick events
for (i = 0; i < SDL_arraysize(steps) && !done;)
{
- Bitmap *marker = button; /* initialize with reliable default value */
+ Bitmap *marker = button; // initialize with reliable default value
step = &steps[i];
strcpy(step->mapping, mapping);
break;
case SDL_JOYHATMOTION:
- /* ignore centering; we're probably just coming back
- to the center from the previous item we set */
+ // ignore centering; we're probably just coming back
+ // to the center from the previous item we set
if (event.jhat.value == SDL_HAT_CENTERED)
break;
case SDL_FINGERDOWN:
case SDL_MOUSEBUTTONDOWN:
- /* skip this step */
+ // skip this step
i++;
next = TRUE;
{
if (i == 0)
{
- /* leave screen */
+ // leave screen
success = FALSE;
done = TRUE;
break;
}
- /* undo this step */
+ // undo this step
prev_step = &steps[i - 1];
strcpy(mapping, prev_step->mapping);
i--;
event.key.keysym.sym == KSYM_Return ||
event.key.keysym.sym == KSYM_Menu)
{
- /* skip this step */
+ // skip this step
i++;
next = TRUE;
if (event.key.keysym.sym == KSYM_Escape)
{
- /* leave screen */
+ // leave screen
success = FALSE;
done = TRUE;
}
SaveSetup_AddGameControllerMapping(mapping);
}
- /* wait until the last pending event was removed from event queue */
+ // wait until the last pending event was removed from event queue
while (NextValidEvent(&event));
return success;
-#else
- return TRUE;
-#endif
}
static int ConfigureJoystickMain(int player_nr)
{
Key key = GetEventKey((KeyEvent *)&event, FALSE);
- /* press 'Escape' to abort and keep the old key bindings */
+ // press 'Escape' to abort and keep the old key bindings
if (key == KSYM_Escape)
{
for (x = 0; x < MAX_GRID_XSIZE; x++)
break;
}
- /* press 'Enter' to keep the existing key binding */
+ // press 'Enter' to keep the existing key binding
if (key == KSYM_Return ||
-#if defined(TARGET_SDL2)
key == KSYM_Menu ||
-#endif
key == KSYM_space)
{
step_nr++;
}
- else if (key == KSYM_BackSpace
-#if defined(TARGET_SDL2)
- ||
- key == KSYM_Back
-#endif
- )
+ else if (key == KSYM_BackSpace ||
+ key == KSYM_Back)
{
if (step_nr == 0)
{
break;
}
- /* all virtual buttons configured */
+ // all virtual buttons configured
if (step_nr == 6)
{
finished = TRUE;
overlay.grid_button_highlight = grid_button[step_nr];
- /* query next virtual button */
+ // query next virtual button
ClearField();
}
break;
-#if defined(TARGET_SDL2)
case SDL_WINDOWEVENT:
HandleWindowEvent((WindowEvent *) &event);
case SDL_APP_DIDENTERFOREGROUND:
HandlePauseResumeEvent((PauseResumeEvent *) &event);
break;
-#endif
default:
HandleOtherEvents(&event);
void HandleGameActions(void)
{
+ if (setup.ask_on_game_over)
+ CheckGameOver();
+
if (game.restart_game_message != NULL)
+ {
RequestRestartGame(game.restart_game_message);
+ return;
+ }
+
if (game_status != GAME_MODE_PLAYING)
return;
- GameActions(); /* main game loop */
+ GameActions(); // main game loop
if (tape.auto_play && !tape.playing)
- AutoPlayTape(); /* continue automatically playing next tape */
+ AutoPlayTape(); // continue automatically playing next tape
}
-/* ---------- new screen button stuff -------------------------------------- */
+// ---------- new screen button stuff --------------------------------------
static void getScreenMenuButtonPos(int *x, int *y, int gadget_id)
{
{
{
IMG_MENU_BUTTON_UP, IMG_MENU_BUTTON_UP_ACTIVE,
- -1, -1, /* these values are not constant, but can change at runtime */
+ -1, -1, // these values are not constant, but can change at runtime
SCREEN_CTRL_ID_SCROLL_UP,
"scroll up"
},
{
IMG_MENU_BUTTON_DOWN, IMG_MENU_BUTTON_DOWN_ACTIVE,
- -1, -1, /* these values are not constant, but can change at runtime */
+ -1, -1, // these values are not constant, but can change at runtime
SCREEN_CTRL_ID_SCROLL_DOWN,
"scroll down"
}
{
{
IMG_MENU_SCROLLBAR, IMG_MENU_SCROLLBAR_ACTIVE,
- -1, -1, /* these values are not constant, but can change at runtime */
- -1, -1, /* these values are not constant, but can change at runtime */
+ -1, -1, // these values are not constant, but can change at runtime
+ -1, -1, // these values are not constant, but can change at runtime
GD_TYPE_SCROLLBAR_VERTICAL,
SCREEN_CTRL_ID_SCROLL_VERTICAL,
"scroll level series vertically"
{
IMG_SETUP_INPUT_TEXT,
SCREEN_CTRL_ID_NETWORK_SERVER,
- -1, -1, /* these values are not constant, but can change at runtime */
+ -1, -1, // these values are not constant, but can change at runtime
MAX_SETUP_TEXT_INPUT_LEN,
network_server_hostname,
"Network Server Hostname / IP"
unsigned int event_mask;
int i;
- /* these values are not constant, but can change at runtime */
+ // these values are not constant, but can change at runtime
scrollbutton_info[0].x = SC_SCROLL_UP_XPOS;
scrollbutton_info[0].y = SC_SCROLL_UP_YPOS;
scrollbutton_info[1].x = SC_SCROLL_DOWN_XPOS;
width = SC_SCROLLBUTTON_XSIZE;
height = SC_SCROLLBUTTON_YSIZE;
- /* correct scrollbar position if placed outside menu (playfield) area */
+ // correct scrollbar position if placed outside menu (playfield) area
if (x > SX + SC_SCROLL_UP_XPOS)
x = SX + SC_SCROLL_UP_XPOS;
{
int i;
- /* these values are not constant, but can change at runtime */
+ // these values are not constant, but can change at runtime
scrollbar_info[0].x = SC_SCROLL_VERTICAL_XPOS;
scrollbar_info[0].y = SC_SCROLL_VERTICAL_YPOS;
scrollbar_info[0].width = SC_SCROLL_VERTICAL_XSIZE;
width = scrollbar_info[i].width;
height = scrollbar_info[i].height;
- /* correct scrollbar position if placed outside menu (playfield) area */
+ // correct scrollbar position if placed outside menu (playfield) area
if (x > SX + SC_SCROLL_VERTICAL_XPOS)
x = SX + SC_SCROLL_VERTICAL_XPOS;