/* screens in the setup menu */
#define SETUP_MODE_MAIN 0
#define SETUP_MODE_GAME 1
-#define SETUP_MODE_EDITOR 2
-#define SETUP_MODE_INPUT 3
-#define SETUP_MODE_SHORTCUT_1 4
-#define SETUP_MODE_SHORTCUT_2 5
-#define SETUP_MODE_GRAPHICS 6
-#define SETUP_MODE_CHOOSE_SCREEN_MODE 7
-#define SETUP_MODE_SOUND 8
-#define SETUP_MODE_ARTWORK 9
-#define SETUP_MODE_CHOOSE_GRAPHICS 10
-#define SETUP_MODE_CHOOSE_SOUNDS 11
-#define SETUP_MODE_CHOOSE_MUSIC 12
-
-#define MAX_SETUP_MODES 13
+#define SETUP_MODE_CHOOSE_GAME_SPEED 2
+#define SETUP_MODE_EDITOR 3
+#define SETUP_MODE_INPUT 4
+#define SETUP_MODE_SHORTCUT_1 5
+#define SETUP_MODE_SHORTCUT_2 6
+#define SETUP_MODE_GRAPHICS 7
+#define SETUP_MODE_CHOOSE_SCREEN_MODE 8
+#define SETUP_MODE_SOUND 9
+#define SETUP_MODE_ARTWORK 10
+#define SETUP_MODE_CHOOSE_GRAPHICS 11
+#define SETUP_MODE_CHOOSE_SOUNDS 12
+#define SETUP_MODE_CHOOSE_MUSIC 13
+
+#define MAX_SETUP_MODES 14
/* for input setup functions */
#define SETUPINPUT_SCREEN_POS_START 0
static void HandleSetupScreen_Input(int, int, int, int, int);
static void CustomizeKeyboard(int);
static void CalibrateJoystick(int);
+static void execSetupGame(void);
static void execSetupGraphics(void);
static void execSetupArtwork(void);
static void HandleChooseTree(int, int, int, int, int, TreeInfo **);
static TreeInfo *screen_modes = NULL;
static TreeInfo *screen_mode_current = NULL;
+static TreeInfo *game_speeds = NULL;
+static TreeInfo *game_speed_current = NULL;
+
+static struct
+{
+ int value;
+ char *text;
+} game_speeds_list[] =
+{
+#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 },
+};
+
#define DRAW_MODE(s) ((s) >= GAME_MODE_MAIN && \
(s) <= GAME_MODE_SETUP ? (s) : \
(s) == GAME_MODE_PSEUDO_TYPENAME ? \
int font_nr = FONT_TEXT_1;
int font_width;
int font_height;
- int pad_x = 16;
- int pad_y = 32;
+ int pad_x = 16 + 4;
+ int pad_y = 32 + 14;
int sx = pad_x;
int sy = pad_y;
int max_chars_per_line;
else
BackToFront();
+ SetMouseCursor(CURSOR_DEFAULT);
+
InitAnimation();
OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2);
title.auto_delay_final = -1;
}
+ SetMouseCursor(CURSOR_NONE);
+
FadeIn(REDRAW_ALL);
DelayReached(&title_delay, 0); /* reset delay counter */
RedrawBackground();
+ SetMouseCursor(CURSOR_DEFAULT);
+
if (game_status == GAME_MODE_INFO)
{
OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
void DrawInfoScreen_NotAvailable(char *text_title, char *text_error)
{
+#if 1
+ int ystart1 = mSY - SY + 100;
+ int ystart2 = mSY - SY + 150;
+ int ybottom = mSY - SY + SYSIZE - 20;
+#else
int ystart1 = 100;
int ystart2 = 150;
int ybottom = SYSIZE - 20;
+#endif
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
static int infoscreen_step[MAX_INFO_ELEMENTS_ON_SCREEN];
static int infoscreen_frame[MAX_INFO_ELEMENTS_ON_SCREEN];
int xstart = mSX + 16;
- int ystart = mSY + 64 + 2 * 32;
+ int ystart1 = mSY - SY + 100;
+ int ystart2 = mSY + 64 + 2 * 32;
+ int ybottom = mSY - SY + SYSIZE - 20;
int ystep = TILEY + 4;
int element, action, direction;
int graphic;
ClearWindow();
DrawHeadline();
- DrawTextSCentered(100, FONT_TEXT_1, "The Game Elements:");
+ DrawTextSCentered(ystart1, FONT_TEXT_1, "The Game Elements:");
- DrawTextSCentered(SYSIZE - 20, FONT_TEXT_4,
+ DrawTextSCentered(ybottom, FONT_TEXT_4,
"Press any key or button for next page");
FrameCounter = 0;
j++;
- ClearRectangleOnBackground(drawto, xstart, ystart + (i - start) * ystep,
+ ClearRectangleOnBackground(drawto, xstart, ystart2 + (i - start) * ystep,
TILEX, TILEY);
- DrawGraphicAnimationExt(drawto, xstart, ystart + (i - start) * ystep,
+ DrawGraphicAnimationExt(drawto, xstart, ystart2 + (i - start) * ystep,
graphic, sync_frame, USE_MASKING);
if (init)
void HandleInfoScreen_Music(int button)
{
static struct MusicFileInfo *list = NULL;
- int ystart = 150, dy = 30;
- int ybottom = SYSIZE - 20;
+ int ystart1 = mSY - SY + 100;
+ int ystart2 = mSY - SY + 150;
+ int ybottom = mSY - SY + SYSIZE - 20;
+ int dy = 30;
if (button == MB_MENU_INITIALIZE)
{
ClearWindow();
DrawHeadline();
- DrawTextSCentered(100, FONT_TEXT_1, "No music info for this level set.");
+ DrawTextSCentered(ystart1, FONT_TEXT_1,
+ "No music info for this level set.");
DrawTextSCentered(ybottom, FONT_TEXT_4,
"Press any key or button for info menu");
else
PlaySound(sound);
- DrawTextSCentered(100, FONT_TEXT_1, "The Game Background Sounds:");
+ DrawTextSCentered(ystart1, FONT_TEXT_1, "The Game Background Sounds:");
}
else
{
PlayMusic(list->music);
- DrawTextSCentered(100, FONT_TEXT_1, "The Game Background Music:");
+ DrawTextSCentered(ystart1, FONT_TEXT_1, "The Game Background Music:");
}
if (!strEqual(list->title, UNKNOWN_NAME))
{
if (!strEqual(list->title_header, UNKNOWN_NAME))
- DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, list->title_header);
+ DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, list->title_header);
- DrawTextFCentered(ystart + y++ * dy, FONT_TEXT_3, "\"%s\"", list->title);
+ DrawTextFCentered(ystart2 + y++ * dy, FONT_TEXT_3, "\"%s\"", list->title);
}
if (!strEqual(list->artist, UNKNOWN_NAME))
{
if (!strEqual(list->artist_header, UNKNOWN_NAME))
- DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, list->artist_header);
+ DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, list->artist_header);
else
- DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, "by");
+ DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, "by");
- DrawTextFCentered(ystart + y++ * dy, FONT_TEXT_3, "%s", list->artist);
+ DrawTextFCentered(ystart2 + y++ * dy, FONT_TEXT_3, "%s", list->artist);
}
if (!strEqual(list->album, UNKNOWN_NAME))
{
if (!strEqual(list->album_header, UNKNOWN_NAME))
- DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, list->album_header);
+ DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, list->album_header);
else
- DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, "from the album");
+ DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, "from the album");
- DrawTextFCentered(ystart + y++ * dy, FONT_TEXT_3, "\"%s\"", list->album);
+ DrawTextFCentered(ystart2 + y++ * dy, FONT_TEXT_3, "\"%s\"", list->album);
}
if (!strEqual(list->year, UNKNOWN_NAME))
{
if (!strEqual(list->year_header, UNKNOWN_NAME))
- DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, list->year_header);
+ DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, list->year_header);
else
- DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, "from the year");
+ DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, "from the year");
- DrawTextFCentered(ystart + y++ * dy, FONT_TEXT_3, "%s", list->year);
+ DrawTextFCentered(ystart2 + y++ * dy, FONT_TEXT_3, "%s", list->year);
}
DrawTextSCentered(ybottom, FONT_TEXT_4,
static boolean DrawInfoScreen_CreditsScreen(int screen_nr)
{
- int ystart = 150, ystep = 30;
- int ybottom = SYSIZE - 20;
+ int ystart1 = mSY - SY + 100;
+ int ystart2 = mSY - SY + 150;
+ int ybottom = mSY - SY + SYSIZE - 20;
+ int ystep = 30;
if (screen_nr > 8)
return FALSE;
ClearWindow();
DrawHeadline();
- DrawTextSCentered(100, FONT_TEXT_1, "Credits:");
+ DrawTextSCentered(ystart1, FONT_TEXT_1, "Credits:");
if (screen_nr == 0)
{
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"Special thanks to");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3,
"Peter Liepa");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2,
"for creating");
- DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3,
"\"Boulder Dash\"");
- DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2,
"in the year");
- DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3,
"1984");
- DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2,
"published by");
- DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_3,
"First Star Software");
}
else if (screen_nr == 1)
{
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"Special thanks to");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3,
"Klaus Heinz & Volker Wertich");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2,
"for creating");
- DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3,
"\"Emerald Mine\"");
- DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2,
"in the year");
- DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3,
"1987");
- DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2,
"published by");
- DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_3,
"Kingsoft");
}
else if (screen_nr == 2)
{
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"Special thanks to");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3,
"Michael Stopp & Philip Jespersen");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2,
"for creating");
- DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3,
"\"Supaplex\"");
- DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2,
"in the year");
- DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3,
"1991");
- DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2,
"published by");
- DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_3,
"Digital Integration");
}
else if (screen_nr == 3)
{
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"Special thanks to");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3,
"Hiroyuki Imabayashi");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2,
"for creating");
- DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3,
"\"Sokoban\"");
- DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2,
"in the year");
- DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3,
"1982");
- DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2,
"published by");
- DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_3,
"Thinking Rabbit");
}
else if (screen_nr == 4)
{
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"Special thanks to");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3,
"Alan Bond");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2,
"and");
- DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3,
"Jürgen Bonhagen");
- DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2,
"for the continuous creation");
- DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_2,
"of outstanding level sets");
}
else if (screen_nr == 5)
{
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"Thanks to");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3,
"Peter Elzner");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2,
"for ideas and inspiration by");
- DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3,
"Diamond Caves");
- DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_2,
"Thanks to");
- DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_3,
"Steffest");
- DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_2,
"for ideas and inspiration by");
- DrawTextSCentered(ystart + 8 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 8 * ystep, FONT_TEXT_3,
"DX-Boulderdash");
}
else if (screen_nr == 6)
{
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"Thanks to");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3,
"David Tritscher");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2,
"for the new Emerald Mine engine");
}
else if (screen_nr == 7)
{
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"Thanks to");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3,
"Guido Schulz");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2,
"for the initial DOS port");
- DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2,
"Thanks to");
- DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3,
"Karl Hörnell");
- DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2,
"for some additional toons");
}
else if (screen_nr == 8)
{
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"And not to forget:");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_2,
"Many thanks to");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_3,
"All those who contributed");
- DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3,
"levels to this game");
- DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_3,
"since 1995");
}
#if 0
void DrawInfoScreen_Program()
{
- int ystart = 150, ystep = 30;
- int ybottom = SYSIZE - 20;
+ int ystart1 = mSY - SY + 100;
+ int ystart2 = mSY - SY + 150;
+ int ybottom = mSY - SY + SYSIZE - 20;
+ int ystep = 30;
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_PROGRAM);
ClearWindow();
DrawHeadline();
- DrawTextSCentered(100, FONT_TEXT_1, "Program Information:");
+ DrawTextSCentered(ystart1, FONT_TEXT_1, "Program Information:");
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2,
"This game is Freeware!");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_2,
"If you like it, send e-mail to:");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_3,
PROGRAM_EMAIL_STRING);
- DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_2,
"or SnailMail to:");
- DrawTextSCentered(ystart + 4 * ystep + 0, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 4 * ystep + 0, FONT_TEXT_3,
"Holger Schemel");
- DrawTextSCentered(ystart + 4 * ystep + 20, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 4 * ystep + 20, FONT_TEXT_3,
"Detmolder Strasse 189");
- DrawTextSCentered(ystart + 4 * ystep + 40, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 4 * ystep + 40, FONT_TEXT_3,
"33604 Bielefeld");
- DrawTextSCentered(ystart + 4 * ystep + 60, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 4 * ystep + 60, FONT_TEXT_3,
"Germany");
- DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_2,
"More information and levels:");
- DrawTextSCentered(ystart + 8 * ystep, FONT_TEXT_3,
+ DrawTextSCentered(ystart2 + 8 * ystep, FONT_TEXT_3,
PROGRAM_WEBSITE_STRING);
- DrawTextSCentered(ystart + 9 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 9 * ystep, FONT_TEXT_2,
"If you have created new levels,");
- DrawTextSCentered(ystart + 10 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 10 * ystep, FONT_TEXT_2,
"send them to me to include them!");
- DrawTextSCentered(ystart + 11 * ystep, FONT_TEXT_2,
+ DrawTextSCentered(ystart2 + 11 * ystep, FONT_TEXT_2,
":-)");
DrawTextSCentered(ybottom, FONT_TEXT_4,
int font_text = FONT_TEXT_2;
int xstep = getFontWidth(font_text);
int ystep = getFontHeight(font_text);
- int ystart = 150;
- int ybottom = SYSIZE - 20;
- int xstart1 = SX + 2 * xstep;
- int xstart2 = SX + 18 * xstep;
+ int ystart1 = mSY - SY + 100;
+ int ystart2 = mSY - SY + 150;
+ int ybottom = mSY - SY + SYSIZE - 20;
+ int xstart1 = mSX + 2 * xstep;
+ int xstart2 = mSX + 18 * xstep;
#if defined(TARGET_SDL)
- int xstart3 = SX + 28 * xstep;
+ int xstart3 = mSX + 28 * xstep;
SDL_version sdl_version_compiled;
const SDL_version *sdl_version_linked;
#endif
ClearWindow();
DrawHeadline();
- DrawTextSCentered(100, FONT_TEXT_1, "Version Information:");
+ DrawTextSCentered(ystart1, FONT_TEXT_1, "Version Information:");
- DrawTextF(xstart1, ystart, font_header, "Name");
- DrawTextF(xstart2, ystart, font_text, PROGRAM_TITLE_STRING);
+ DrawTextF(xstart1, ystart2, font_header, "Name");
+ DrawTextF(xstart2, ystart2, font_text, PROGRAM_TITLE_STRING);
- ystart += ystep;
- DrawTextF(xstart1, ystart, font_header, "Version");
- DrawTextF(xstart2, ystart, font_text, getProgramFullVersionString());
+ ystart2 += ystep;
+ DrawTextF(xstart1, ystart2, font_header, "Version");
+ DrawTextF(xstart2, ystart2, font_text, getProgramFullVersionString());
- ystart += ystep;
- DrawTextF(xstart1, ystart, font_header, "Platform");
- DrawTextF(xstart2, ystart, font_text, PLATFORM_STRING);
+ ystart2 += ystep;
+ DrawTextF(xstart1, ystart2, font_header, "Platform");
+ DrawTextF(xstart2, ystart2, font_text, PLATFORM_STRING);
- ystart += ystep;
- DrawTextF(xstart1, ystart, font_header, "Target");
- DrawTextF(xstart2, ystart, font_text, TARGET_STRING);
+ ystart2 += ystep;
+ DrawTextF(xstart1, ystart2, font_header, "Target");
+ DrawTextF(xstart2, ystart2, font_text, TARGET_STRING);
- ystart += ystep;
- DrawTextF(xstart1, ystart, font_header, "Compile time");
- DrawTextF(xstart2, ystart, font_text, getCompileDateString());
+ ystart2 += ystep;
+ DrawTextF(xstart1, ystart2, font_header, "Compile time");
+ DrawTextF(xstart2, ystart2, font_text, getCompileDateString());
#if defined(TARGET_SDL)
- ystart += 3 * ystep;
- DrawTextF(xstart1, ystart, font_header, "Library");
- DrawTextF(xstart2, ystart, font_header, "compiled");
- DrawTextF(xstart3, ystart, font_header, "linked");
+ ystart2 += 3 * ystep;
+ DrawTextF(xstart1, ystart2, font_header, "Library");
+ DrawTextF(xstart2, ystart2, font_header, "compiled");
+ DrawTextF(xstart3, ystart2, font_header, "linked");
SDL_VERSION(&sdl_version_compiled);
sdl_version_linked = SDL_Linked_Version();
- ystart += 2 * ystep;
- DrawTextF(xstart1, ystart, font_text, "SDL");
- DrawTextF(xstart2, ystart, font_text, "%d.%d.%d",
+ ystart2 += 2 * ystep;
+ DrawTextF(xstart1, ystart2, font_text, "SDL");
+ DrawTextF(xstart2, ystart2, font_text, "%d.%d.%d",
sdl_version_compiled.major,
sdl_version_compiled.minor,
sdl_version_compiled.patch);
- DrawTextF(xstart3, ystart, font_text, "%d.%d.%d",
+ DrawTextF(xstart3, ystart2, font_text, "%d.%d.%d",
sdl_version_linked->major,
sdl_version_linked->minor,
sdl_version_linked->patch);
SDL_IMAGE_VERSION(&sdl_version_compiled);
sdl_version_linked = IMG_Linked_Version();
- ystart += ystep;
- DrawTextF(xstart1, ystart, font_text, "SDL_image");
- DrawTextF(xstart2, ystart, font_text, "%d.%d.%d",
+ ystart2 += ystep;
+ DrawTextF(xstart1, ystart2, font_text, "SDL_image");
+ DrawTextF(xstart2, ystart2, font_text, "%d.%d.%d",
sdl_version_compiled.major,
sdl_version_compiled.minor,
sdl_version_compiled.patch);
- DrawTextF(xstart3, ystart, font_text, "%d.%d.%d",
+ DrawTextF(xstart3, ystart2, font_text, "%d.%d.%d",
sdl_version_linked->major,
sdl_version_linked->minor,
sdl_version_linked->patch);
SDL_MIXER_VERSION(&sdl_version_compiled);
sdl_version_linked = Mix_Linked_Version();
- ystart += ystep;
- DrawTextF(xstart1, ystart, font_text, "SDL_mixer");
- DrawTextF(xstart2, ystart, font_text, "%d.%d.%d",
+ ystart2 += ystep;
+ DrawTextF(xstart1, ystart2, font_text, "SDL_mixer");
+ DrawTextF(xstart2, ystart2, font_text, "%d.%d.%d",
sdl_version_compiled.major,
sdl_version_compiled.minor,
sdl_version_compiled.patch);
- DrawTextF(xstart3, ystart, font_text, "%d.%d.%d",
+ DrawTextF(xstart3, ystart2, font_text, "%d.%d.%d",
sdl_version_linked->major,
sdl_version_linked->minor,
sdl_version_linked->patch);
SDL_NET_VERSION(&sdl_version_compiled);
sdl_version_linked = SDLNet_Linked_Version();
- ystart += ystep;
- DrawTextF(xstart1, ystart, font_text, "SDL_net");
- DrawTextF(xstart2, ystart, font_text, "%d.%d.%d",
+ ystart2 += ystep;
+ DrawTextF(xstart1, ystart2, font_text, "SDL_net");
+ DrawTextF(xstart2, ystart2, font_text, "%d.%d.%d",
sdl_version_compiled.major,
sdl_version_compiled.minor,
sdl_version_compiled.patch);
- DrawTextF(xstart3, ystart, font_text, "%d.%d.%d",
+ DrawTextF(xstart3, ystart2, font_text, "%d.%d.%d",
sdl_version_linked->major,
sdl_version_linked->minor,
sdl_version_linked->patch);
void DrawInfoScreen_LevelSet()
{
- int ystart = 150;
- int ybottom = SYSIZE - 20;
+ int ystart1 = mSY - SY + 100;
+ int ystart2 = mSY - SY + 150;
+ int ybottom = mSY - SY + SYSIZE - 20;
char *filename = getLevelSetInfoFilename();
#if 1
int font_nr = FONT_INFO_LEVELSET;
int font_width = getFontWidth(font_nr);
int font_height = getFontHeight(font_nr);
int pad_x = 32;
- int pad_y = ystart;
- int sx = SX + pad_x;
- int sy = SY + pad_y;
+ int pad_y = 150;
+ int sx = mSX + pad_x;
+ int sy = mSY + pad_y;
int max_chars_per_line = (SXSIZE - 2 * pad_x) / font_width;
int max_lines_per_screen = (SYSIZE - pad_y) / font_height - 1;
ClearWindow();
DrawHeadline();
- DrawTextSCentered(100, FONT_TEXT_1, "Level Set Information:");
+ DrawTextSCentered(ystart1, FONT_TEXT_1, "Level Set Information:");
DrawTextSCentered(ybottom, FONT_TEXT_4,
"Press any key or button for info menu");
DrawTextFromFile(sx, sy, filename, font_nr, max_chars_per_line,
max_lines_per_screen, TRUE);
else
- DrawTextSCentered(ystart, FONT_TEXT_2,
+ DrawTextSCentered(ystart2, FONT_TEXT_2,
"No information for this level set.");
FadeIn(REDRAW_FIELD);
DrawText(startx, starty, setup.player_name, font_nr);
}
+
+ sprintf(main_input_name, "%s", setup.player_name);
}
}
else if (game_status == GAME_MODE_SETUP)
{
- if (game_status == GAME_MODE_SETUP)
- {
- if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
- execSetupGraphics();
- else
- execSetupArtwork();
- }
+ if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED)
+ execSetupGame();
+ else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
+ execSetupGraphics();
+ else
+ execSetupArtwork();
}
else
{
if (game_status == GAME_MODE_SETUP)
{
- if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
+ if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED)
+ execSetupGame();
+ else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
execSetupGraphics();
else
execSetupArtwork();
static int num_setup_info;
static char *screen_mode_text;
+static char *game_speed_text;
static char *graphics_set_name;
static char *sounds_set_name;
static char *music_set_name;
static void execSetupGame()
{
+ if (game_speeds == NULL)
+ {
+ int i;
+
+ for (i = 0; game_speeds_list[i].value != -1; i++)
+ {
+ TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED);
+ char identifier[32], name[32];
+ int value = game_speeds_list[i].value;
+ char *text = game_speeds_list[i].text;
+
+ ti->node_top = &game_speeds;
+ ti->sort_priority = 10000 - value;
+
+ sprintf(identifier, "%d", value);
+ sprintf(name, "%s", text);
+
+ setString(&ti->identifier, identifier);
+ setString(&ti->name, name);
+ setString(&ti->name_sorting, name);
+ setString(&ti->infotext, "Game Speed");
+
+ pushTreeInfo(&game_speeds, ti);
+ }
+
+ /* sort game speed values to start with slowest game speed */
+ sortTreeInfo(&game_speeds);
+
+ /* 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 (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 (game_speed_current == NULL)
+ game_speed_current = game_speeds;
+ }
+
+ setup.game_frame_delay = atoi(game_speed_current->identifier);
+
+ /* needed for displaying game speed text instead of identifier */
+ game_speed_text = game_speed_current->name;
+
setup_mode = SETUP_MODE_GAME;
DrawSetupScreen();
}
+static void execSetupChooseGameSpeed()
+{
+ setup_mode = SETUP_MODE_CHOOSE_GAME_SPEED;
+ DrawSetupScreen();
+}
+
static void execSetupEditor()
{
setup_mode = SETUP_MODE_EDITOR;
ti->sort_priority = x * 10000 + y;
sprintf(identifier, "%dx%d", x, y);
- sprintf(name, "%d x %d [%d:%d]", x, y, xx, yy);
+ sprintf(name, "%d x %d [%d:%d]", x, y, xx, yy);
setString(&ti->identifier, identifier);
setString(&ti->name, name);
{ TYPE_SWITCH, &setup.skip_levels, "Skip Unsolved Levels:" },
{ TYPE_SWITCH, &setup.time_limit, "Time Limit:" },
{ TYPE_SWITCH, &setup.autorecord, "Auto-Record Tapes:" },
+ { TYPE_ENTER_LIST, execSetupChooseGameSpeed, "Game Speed:" },
+ { TYPE_STRING, &game_speed_text, "" },
{ TYPE_EMPTY, NULL, "" },
{ TYPE_LEAVE_MENU, execSetupMain, "Back" },
if (setup_mode == SETUP_MODE_INPUT)
DrawSetupScreen_Input();
+ else if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED)
+ DrawChooseTree(&game_speed_current);
else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
DrawChooseTree(&screen_mode_current);
else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS)
{
if (setup_mode == SETUP_MODE_INPUT)
HandleSetupScreen_Input(mx, my, dx, dy, button);
+ else if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED)
+ HandleChooseTree(mx, my, dx, dy, button, &game_speed_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_GRAPHICS)