/* 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_SCREEN_MODE 18
-#define SETUP_MODE_CHOOSE_WINDOW_SIZE 19
-#define SETUP_MODE_CHOOSE_SCALING_TYPE 20
-#define SETUP_MODE_CHOOSE_GRAPHICS 21
-#define SETUP_MODE_CHOOSE_SOUNDS 22
-#define SETUP_MODE_CHOOSE_MUSIC 23
-#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 24
-#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 25
-#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 26
-#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 27
-#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 28
-#define SETUP_MODE_CHOOSE_DROP_DISTANCE 29
-
-#define MAX_SETUP_MODES 30
+#define SETUP_MODE_CHOOSE_SNAPSHOT_MODE 18
+#define SETUP_MODE_CHOOSE_SCREEN_MODE 19
+#define SETUP_MODE_CHOOSE_WINDOW_SIZE 20
+#define SETUP_MODE_CHOOSE_SCALING_TYPE 21
+#define SETUP_MODE_CHOOSE_GRAPHICS 22
+#define SETUP_MODE_CHOOSE_SOUNDS 23
+#define SETUP_MODE_CHOOSE_MUSIC 24
+#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 25
+#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 26
+#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 27
+#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 28
+#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 29
+#define SETUP_MODE_CHOOSE_DROP_DISTANCE 30
+
+#define MAX_SETUP_MODES 31
/* for input setup functions */
#define SETUPINPUT_SCREEN_POS_START 0
static TreeInfo *scroll_delays = NULL;
static TreeInfo *scroll_delay_current = NULL;
+static TreeInfo *snapshot_modes = NULL;
+static TreeInfo *snapshot_mode_current = NULL;
+
static TreeInfo *game_speeds = NULL;
static TreeInfo *game_speed_current = NULL;
{ -1, NULL },
};
+static struct
+{
+ char *value;
+ char *text;
+} snapshot_modes_list[] =
+{
+ { STR_SNAPSHOT_MODE_OFF, "Off" },
+ { STR_SNAPSHOT_MODE_EVERY_STEP, "Every Step" },
+ { STR_SNAPSHOT_MODE_EVERY_MOVE, "Every Move" },
+
+ { NULL, NULL },
+};
+
static struct
{
int value;
static char *main_text_level_imported_from = NULL;
static char *main_text_level_imported_by = NULL;
static char *main_text_level_tested_by = NULL;
-static char *main_text_title_1 = PROGRAM_TITLE_STRING;
-static char *main_text_title_2 = PROGRAM_COPYRIGHT_STRING;
-static char *main_text_title_3 = PROGRAM_GAME_BY_STRING;
struct MainControlInfo
{
{
MAIN_CONTROL_TITLE_1,
NULL, -1,
- &menu.main.text.title_1, &main_text_title_1,
+ &menu.main.text.title_1, &setup.internal.program_title,
NULL, NULL,
},
{
MAIN_CONTROL_TITLE_2,
NULL, -1,
- &menu.main.text.title_2, &main_text_title_2,
+ &menu.main.text.title_2, &setup.internal.program_copyright,
NULL, NULL,
},
{
MAIN_CONTROL_TITLE_3,
NULL, -1,
- &menu.main.text.title_3, &main_text_title_3,
+ &menu.main.text.title_3, &setup.internal.program_company,
NULL, NULL,
},
void DrawHeadline()
{
- DrawTextSCentered(MENU_TITLE1_YPOS, FONT_TITLE_1, PROGRAM_TITLE_STRING);
- DrawTextSCentered(MENU_TITLE2_YPOS, FONT_TITLE_2, PROGRAM_COPYRIGHT_STRING);
+ DrawTextSCentered(MENU_TITLE1_YPOS, FONT_TITLE_1, getProgramTitleString());
+ DrawTextSCentered(MENU_TITLE2_YPOS, FONT_TITLE_2,
+ setup.internal.program_copyright);
}
int effectiveGameStatus()
DrawMainMenuExt(REDRAW_ALL, FALSE);
}
-#if defined(CREATE_SPECIAL_EDITION_RND_JUE)
static void gotoTopLevelDir()
{
- /* move upwards to top level directory */
- while (leveldir_current->node_parent)
+ /* 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 */
if (leveldir_current->node_parent->node_group->cl_first == -1)
leveldir_current = leveldir_current->node_parent;
}
}
-#endif
void HandleTitleScreen(int mx, int my, int dx, int dy, int button)
{
button_pressed = TRUE;
if (button_pressed != button_pressed_last)
+ {
DrawCursorAndText_Main(choice, TRUE, button_pressed);
+
+ if (button_pressed)
+ PlaySound(SND_MENU_BUTTON_PRESSING);
+ else
+ PlaySound(SND_MENU_BUTTON_RELEASING);
+ }
}
else if (dx || dy) /* keyboard input */
{
SaveLevelSetup_LastSeries();
SaveLevelSetup_SeriesInfo();
-#if defined(CREATE_SPECIAL_EDITION_RND_JUE)
- gotoTopLevelDir();
-#endif
+ if (setup.internal.choose_from_top_leveldir)
+ gotoTopLevelDir();
ChangeViewportPropertiesIfNeeded();
DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_2,
"If you like it, send e-mail to:");
DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_3,
- PROGRAM_EMAIL_STRING);
+ setup.internal.program_email);
DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2,
"More information and levels:");
DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3,
- PROGRAM_WEBSITE_STRING);
+ setup.internal.program_website);
DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_2,
"If you have created new levels,");
DrawTextSCentered(ystart2 + 8 * ystep, FONT_TEXT_2,
DrawTextSCentered(ystart1, FONT_TEXT_1, "Version Information:");
DrawTextF(xstart1, ystart2, font_header, "Name");
- DrawTextF(xstart2, ystart2, font_text, PROGRAM_TITLE_STRING);
+ DrawTextF(xstart2, ystart2, font_text, getProgramTitleString());
ystart2 += ystep;
DrawTextF(xstart1, ystart2, font_header, "Version");
node->class_desc);
/* let BackToFront() redraw only what is needed */
- redraw_mask = last_redraw_mask | REDRAW_TILES;
+ redraw_mask = last_redraw_mask;
for (x = 0; x < SCR_FIELDX; x++)
MarkTileDirty(x, 1);
}
else if (game_status == GAME_MODE_SETUP)
{
if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED ||
- setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY)
+ setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY ||
+ setup_mode == SETUP_MODE_CHOOSE_SNAPSHOT_MODE)
execSetupGame();
else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE ||
setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE ||
ti->cl_first, ti);
}
-
return;
}
if (game_status == GAME_MODE_SETUP)
{
if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED ||
- setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY)
+ setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY ||
+ setup_mode == SETUP_MODE_CHOOSE_SNAPSHOT_MODE)
execSetupGame();
else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE ||
setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE ||
SetDrawDeactivationMask(REDRAW_NONE);
SetDrawBackgroundMask(REDRAW_FIELD);
- CloseDoor(DOOR_CLOSE_2);
+ CloseDoor(DOOR_CLOSE_ALL);
if (highlight_position < 0)
LoadScore(level_nr);
static char *window_size_text;
static char *scaling_type_text;
static char *scroll_delay_text;
+static char *snapshot_mode_text;
static char *game_speed_text;
static char *graphics_set_name;
static char *sounds_set_name;
scroll_delay_text = scroll_delay_current->name;
}
+static void execSetupGame_setSnapshotModes()
+{
+ if (snapshot_modes == NULL)
+ {
+ int i;
+
+ for (i = 0; snapshot_modes_list[i].value != NULL; i++)
+ {
+ TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED);
+ char identifier[32], name[32];
+ char *value = snapshot_modes_list[i].value;
+ char *text = snapshot_modes_list[i].text;
+
+ ti->node_top = &snapshot_modes;
+ ti->sort_priority = i;
+
+ sprintf(identifier, "%s", value);
+ sprintf(name, "%s", text);
+
+ setString(&ti->identifier, identifier);
+ setString(&ti->name, name);
+ setString(&ti->name_sorting, name);
+ setString(&ti->infotext, "Snapshot Mode");
+
+ pushTreeInfo(&snapshot_modes, ti);
+ }
+
+ /* sort snapshot mode values to start with lowest snapshot mode value */
+ sortTreeInfo(&snapshot_modes);
+
+ /* 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 (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 (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 */
+ snapshot_mode_text = snapshot_mode_current->name;
+}
+
static void execSetupGame()
{
execSetupGame_setGameSpeeds();
execSetupGame_setScrollDelays();
+ execSetupGame_setSnapshotModes();
setup_mode = SETUP_MODE_GAME;
DrawSetupScreen();
}
+static void execSetupChooseSnapshotMode()
+{
+ setup_mode = SETUP_MODE_CHOOSE_SNAPSHOT_MODE;
+
+ DrawSetupScreen();
+}
+
static void execSetupEditor()
{
setup_mode = SETUP_MODE_EDITOR;
{ TYPE_ENTER_LIST, execSetupChooseScrollDelay, "Scroll Delay:" },
{ TYPE_STRING, &scroll_delay_text, "" },
#endif
+ { TYPE_ENTER_LIST, execSetupChooseSnapshotMode,"Game Engine Snapshot Mode:" },
+ { TYPE_STRING, &snapshot_mode_text, "" },
{ TYPE_EMPTY, NULL, "" },
{ TYPE_LEAVE_MENU, execSetupMain, "Back" },
DrawChooseTree(&game_speed_current);
else if (setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY)
DrawChooseTree(&scroll_delay_current);
+ else if (setup_mode == SETUP_MODE_CHOOSE_SNAPSHOT_MODE)
+ DrawChooseTree(&snapshot_mode_current);
else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
DrawChooseTree(&screen_mode_current);
else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE)
HandleChooseTree(mx, my, dx, dy, button, &game_speed_current);
else if (setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY)
HandleChooseTree(mx, my, dx, dy, button, &scroll_delay_current);
+ else if (setup_mode == SETUP_MODE_CHOOSE_SNAPSHOT_MODE)
+ HandleChooseTree(mx, my, dx, dy, button, &snapshot_mode_current);
else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
HandleChooseTree(mx, my, dx, dy, button, &screen_mode_current);
else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE)