#include "init.h"
#include "config.h"
-/* screens in the setup menu */
-#define SETUP_MODE_MAIN 0
-#define SETUP_MODE_GAME 1
-#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_CHOOSE_SCROLL_DELAY 9
-#define SETUP_MODE_SOUND 10
-#define SETUP_MODE_ARTWORK 11
-#define SETUP_MODE_CHOOSE_GRAPHICS 12
-#define SETUP_MODE_CHOOSE_SOUNDS 13
-#define SETUP_MODE_CHOOSE_MUSIC 14
-
-#define MAX_SETUP_MODES 15
-
-/* for input setup functions */
-#define SETUPINPUT_SCREEN_POS_START 0
-#define SETUPINPUT_SCREEN_POS_END (SCR_FIELDY - 4)
-#define SETUPINPUT_SCREEN_POS_EMPTY1 (SETUPINPUT_SCREEN_POS_START + 3)
-#define SETUPINPUT_SCREEN_POS_EMPTY2 (SETUPINPUT_SCREEN_POS_END - 1)
-
/* screens on the info screen */
#define INFO_MODE_MAIN 0
#define INFO_MODE_TITLE 1
#define MAX_INFO_MODES 8
+/* screens on the setup screen */
+#define SETUP_MODE_MAIN 0
+#define SETUP_MODE_GAME 1
+#define SETUP_MODE_EDITOR 2
+#define SETUP_MODE_GRAPHICS 3
+#define SETUP_MODE_SOUND 4
+#define SETUP_MODE_ARTWORK 5
+#define SETUP_MODE_INPUT 6
+#define SETUP_MODE_SHORTCUTS_1 7
+#define SETUP_MODE_SHORTCUTS_2 8
+
+/* sub-screens on the setup screen (generic) */
+#define SETUP_MODE_CHOOSE_ARTWORK 9
+#define SETUP_MODE_CHOOSE_OTHER 10
+
+/* sub-screens on the setup screen (specific) */
+#define SETUP_MODE_CHOOSE_GAME_SPEED 11
+#define SETUP_MODE_CHOOSE_SCREEN_MODE 12
+#define SETUP_MODE_CHOOSE_SCROLL_DELAY 13
+#define SETUP_MODE_CHOOSE_GRAPHICS 14
+#define SETUP_MODE_CHOOSE_SOUNDS 15
+#define SETUP_MODE_CHOOSE_MUSIC 16
+
+#define MAX_SETUP_MODES 17
+
+/* for input setup functions */
+#define SETUPINPUT_SCREEN_POS_START 0
+#define SETUPINPUT_SCREEN_POS_END (SCR_FIELDY - 4)
+#define SETUPINPUT_SCREEN_POS_EMPTY1 (SETUPINPUT_SCREEN_POS_START + 3)
+#define SETUPINPUT_SCREEN_POS_EMPTY2 (SETUPINPUT_SCREEN_POS_END - 1)
+
/* for various menu stuff */
#define MENU_SCREEN_START_XPOS 1
#define MENU_SCREEN_START_YPOS 2
#define SC_BORDER_SIZE 14
+#if 0
/* other useful macro definitions */
#define BUTTON_GRAPHIC_ACTIVE(g) \
(g == IMG_MENU_BUTTON_LEFT ? IMG_MENU_BUTTON_LEFT_ACTIVE : \
g == IMG_MENU_BUTTON_ENTER_MENU ? IMG_MENU_BUTTON_ENTER_MENU_ACTIVE : \
g == IMG_MENU_BUTTON_PREV_LEVEL ? IMG_MENU_BUTTON_PREV_LEVEL_ACTIVE : \
g == IMG_MENU_BUTTON_NEXT_LEVEL ? IMG_MENU_BUTTON_NEXT_LEVEL_ACTIVE : \
+ g == IMG_MENU_BUTTON_NAME ? IMG_MENU_BUTTON_NAME_ACTIVE : \
+ g == IMG_MENU_BUTTON_LEVELS ? IMG_MENU_BUTTON_LEVELS_ACTIVE : \
+ g == IMG_MENU_BUTTON_SCORES ? IMG_MENU_BUTTON_SCORES_ACTIVE : \
+ g == IMG_MENU_BUTTON_EDITOR ? IMG_MENU_BUTTON_EDITOR_ACTIVE : \
+ g == IMG_MENU_BUTTON_INFO ? IMG_MENU_BUTTON_INFO_ACTIVE : \
+ g == IMG_MENU_BUTTON_GAME ? IMG_MENU_BUTTON_GAME_ACTIVE : \
+ g == IMG_MENU_BUTTON_SETUP ? IMG_MENU_BUTTON_SETUP_ACTIVE : \
+ g == IMG_MENU_BUTTON_QUIT ? IMG_MENU_BUTTON_QUIT_ACTIVE : \
IMG_MENU_BUTTON_ACTIVE)
+#endif
/* forward declarations of internal functions */
static struct GadgetInfo *screen_gadget[NUM_SCREEN_GADGETS];
-static int setup_mode = SETUP_MODE_MAIN;
static int info_mode = INFO_MODE_MAIN;
+static int setup_mode = SETUP_MODE_MAIN;
static TreeInfo *screen_modes = NULL;
static TreeInfo *screen_mode_current = NULL;
(s) == GAME_MODE_PSEUDO_TYPENAME ? \
GAME_MODE_MAIN : GAME_MODE_DEFAULT)
+/* (there are no draw offset definitions needed for INFO_MODE_TITLE) */
#define DRAW_MODE_INFO(i) ((i) >= INFO_MODE_ELEMENTS && \
(i) <= INFO_MODE_LEVELSET ? (i) : \
INFO_MODE_MAIN)
+#define DRAW_MODE_SETUP(i) ((i) >= SETUP_MODE_MAIN && \
+ (i) <= SETUP_MODE_SHORTCUTS_2 ? (i) : \
+ (i) >= SETUP_MODE_CHOOSE_GRAPHICS && \
+ (i) <= SETUP_MODE_CHOOSE_MUSIC ? \
+ SETUP_MODE_CHOOSE_ARTWORK : \
+ SETUP_MODE_CHOOSE_OTHER)
+
#define DRAW_XOFFSET_INFO(i) (DRAW_MODE_INFO(i) == INFO_MODE_MAIN ? \
menu.draw_xoffset[GAME_MODE_INFO] : \
menu.draw_xoffset_info[DRAW_MODE_INFO(i)])
menu.draw_yoffset[GAME_MODE_INFO] : \
menu.draw_yoffset_info[DRAW_MODE_INFO(i)])
+#define DRAW_XOFFSET_SETUP(i) (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \
+ menu.draw_xoffset[GAME_MODE_SETUP] : \
+ menu.draw_xoffset_setup[DRAW_MODE_SETUP(i)])
+#define DRAW_YOFFSET_SETUP(i) (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \
+ menu.draw_yoffset[GAME_MODE_SETUP] : \
+ menu.draw_yoffset_setup[DRAW_MODE_SETUP(i)])
+
#define DRAW_XOFFSET(s) ((s) == GAME_MODE_INFO ? \
DRAW_XOFFSET_INFO(info_mode) : \
+ (s) == GAME_MODE_SETUP ? \
+ DRAW_XOFFSET_SETUP(setup_mode) : \
menu.draw_xoffset[DRAW_MODE(s)])
#define DRAW_YOFFSET(s) ((s) == GAME_MODE_INFO ? \
DRAW_YOFFSET_INFO(info_mode) : \
+ (s) == GAME_MODE_SETUP ? \
+ DRAW_YOFFSET_SETUP(setup_mode) : \
menu.draw_yoffset[DRAW_MODE(s)])
#define mSX (SX + DRAW_XOFFSET(game_status))
{
{
MAIN_CONTROL_NAME,
- &menu.main.button.name, IMG_MENU_BUTTON,
+ &menu.main.button.name, IMG_MENU_BUTTON_NAME,
&menu.main.text.name, &main_text_name,
&menu.main.input.name, &setup.player_name,
},
{
MAIN_CONTROL_LEVELS,
- &menu.main.button.levels, IMG_MENU_BUTTON_ENTER_MENU,
+ &menu.main.button.levels, IMG_MENU_BUTTON_LEVELS,
&menu.main.text.levels, &main_text_levels,
NULL, NULL,
},
{
MAIN_CONTROL_SCORES,
- &menu.main.button.scores, IMG_MENU_BUTTON,
+ &menu.main.button.scores, IMG_MENU_BUTTON_SCORES,
&menu.main.text.scores, &main_text_scores,
NULL, NULL,
},
{
MAIN_CONTROL_EDITOR,
- &menu.main.button.editor, IMG_MENU_BUTTON,
+ &menu.main.button.editor, IMG_MENU_BUTTON_EDITOR,
&menu.main.text.editor, &main_text_editor,
NULL, NULL,
},
{
MAIN_CONTROL_INFO,
- &menu.main.button.info, IMG_MENU_BUTTON_ENTER_MENU,
+ &menu.main.button.info, IMG_MENU_BUTTON_INFO,
&menu.main.text.info, &main_text_info,
NULL, NULL,
},
{
MAIN_CONTROL_GAME,
- &menu.main.button.game, IMG_MENU_BUTTON,
+ &menu.main.button.game, IMG_MENU_BUTTON_GAME,
&menu.main.text.game, &main_text_game,
NULL, NULL,
},
{
MAIN_CONTROL_SETUP,
- &menu.main.button.setup, IMG_MENU_BUTTON_ENTER_MENU,
+ &menu.main.button.setup, IMG_MENU_BUTTON_SETUP,
&menu.main.text.setup, &main_text_setup,
NULL, NULL,
},
{
MAIN_CONTROL_QUIT,
- &menu.main.button.quit, IMG_MENU_BUTTON,
+ &menu.main.button.quit, IMG_MENU_BUTTON_QUIT,
&menu.main.text.quit, &main_text_quit,
NULL, NULL,
},
/* set main control text values to dynamically determined values */
sprintf(main_text_name, "%s", local_team_mode ? "Team:" : "Name:");
- sprintf(main_text_first_level, "%03d", leveldir_current->first_level);
- sprintf(main_text_last_level, "%03d", leveldir_current->last_level);
- sprintf(main_text_level_number, "%s", int2str(level_nr, 3));
+
+ strcpy(main_text_first_level, int2str(leveldir_current->first_level,
+ menu.main.text.first_level.size));
+ strcpy(main_text_last_level, int2str(leveldir_current->last_level,
+ menu.main.text.last_level.size));
+ strcpy(main_text_level_number, int2str(level_nr,
+ menu.main.text.level_number.size));
main_text_level_year = leveldir_current->year;
main_text_level_imported_from = leveldir_current->imported_from;
if (active_text)
{
- button_graphic = BUTTON_GRAPHIC_ACTIVE(button_graphic);
+ button_graphic = BUTTON_ACTIVE(button_graphic);
font_text = FONT_ACTIVE(font_text);
}
}
if (active)
- graphic = BUTTON_GRAPHIC_ACTIVE(graphic);
+ graphic = BUTTON_ACTIVE(graphic);
DrawBackgroundForGraphic(x, y, TILEX, TILEY, graphic);
DrawGraphicThruMaskExt(drawto, x, y, graphic, 0);
{
int last_game_status = game_status; /* save current game status */
+#if 0
/* force LEVELS draw offset on artwork setup screen */
game_status = GAME_MODE_LEVELS;
+#endif
drawCursorExt(0, ypos, active, -1);
title = title_default;
#endif
+#if 0
+ {
+ int graphicA = element_info[EL_EM_DYNAMITE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_EDITOR];
+ int graphicB = element_info[EL_EM_DYNAMITE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_PANEL];
+ int graphic1 = element_info[EL_CONVEYOR_BELT_1_MIDDLE].special_graphic[GFX_SPECIAL_ARG_EDITOR];
+ int graphic2 = element_info[EL_CONVEYOR_BELT_1_MIDDLE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_EDITOR];
+
+ printf("::: %d [%d] -> %d, %d [%d, %d]\n",
+ graphicA, graphicB,
+ graphic_info[graphicA].src_x,
+ graphic_info[graphicA].src_y,
+ graphic1, graphic2);
+ }
+#endif
+
#if 0
printf("::: %d, %d\n", fading.anim_mode == ANIM_CROSSFADE,
redraw_mask == REDRAW_ALL);
#endif
+ FadeSetLeaveScreen();
+
#if 1
FadeOut(redraw_mask);
#endif
FadeOut(REDRAW_FIELD);
#endif
- FadeSetStartItem();
+ FadeSetEnterScreen();
info_mode = INFO_MODE_MAIN;
DrawAndFadeInInfoScreen(REDRAW_FIELD);
#if 1
DrawText(mSX + mci->pos_text->x, mSY + mci->pos_text->y,
- int2str(level_nr, 3), mci->pos_text->font);
+ int2str(level_nr, menu.main.text.level_number.size),
+ mci->pos_text->font);
#else
DrawText(mSX + 11 * 32, mSY + 3 * 32, int2str(level_nr, 3), FONT_VALUE_1);
#endif
game_status = GAME_MODE_EDITOR;
- FadeSetStartItem();
+ FadeSetEnterScreen();
DrawLevelEd();
}
if (leveldir_first)
{
game_status = GAME_MODE_LEVELS;
+
SaveLevelSetup_LastSeries();
SaveLevelSetup_SeriesInfo();
static void execInfoTitleScreen()
{
#if 0
- FadeSetStartItem();
+ FadeSetEnterScreen();
#endif
info_mode = INFO_MODE_TITLE;
static void execInfoElements()
{
#if 0
- FadeSetStartItem();
+ FadeSetEnterScreen();
#endif
info_mode = INFO_MODE_ELEMENTS;
static void execInfoMusic()
{
#if 0
- FadeSetStartItem();
+ FadeSetEnterScreen();
#endif
info_mode = INFO_MODE_MUSIC;
static void execInfoCredits()
{
#if 0
- FadeSetStartItem();
+ FadeSetEnterScreen();
#endif
info_mode = INFO_MODE_CREDITS;
static void execInfoProgram()
{
#if 0
- FadeSetStartItem();
+ FadeSetEnterScreen();
#endif
info_mode = INFO_MODE_PROGRAM;
static void execInfoVersion()
{
#if 0
- FadeSetStartItem();
+ FadeSetEnterScreen();
#endif
info_mode = INFO_MODE_VERSION;
static void execInfoLevelSet()
{
#if 0
- FadeSetStartItem();
+ FadeSetEnterScreen();
#endif
info_mode = INFO_MODE_LEVELSET;
/* (needed after displaying title screens which disable auto repeat) */
KeyboardAutoRepeatOn();
+ FadeSetLeaveScreen();
+
#if 1
FadeOut(redraw_mask);
#endif
DrawTextSCentered(mSY - SY + yoffset, FONT_TITLE_1, title_string);
+#if 0
/* force LEVELS font on artwork setup screen */
game_status = GAME_MODE_LEVELS;
+#endif
#if 1
/* clear tree list area, but not title or scrollbar */
int last_game_status = game_status; /* save current game status */
boolean position_set_by_scrollbar = (dx == 999);
+#if 0
/* force LEVELS draw offset on choose level and artwork setup screen */
game_status = GAME_MODE_LEVELS;
+#endif
if (num_entries <= NUM_MENU_ENTRIES_ON_SCREEN)
num_page_entries = num_entries;
{
int last_game_status = game_status; /* save current game status */
+#if 0
/* force LEVELS draw offset on artwork setup screen */
game_status = GAME_MODE_LEVELS;
+#endif
x = (mx - mSX) / 32;
y = (my - mSY) / 32 - MENU_SCREEN_START_YPOS;
}
else
{
- FadeSetStartItem();
+ FadeSetEnterScreen();
node_cursor->cl_first = ti->cl_first;
node_cursor->cl_cursor = ti->cl_cursor;
if (highlight_position < 0)
LoadScore(level_nr);
- FadeSetStartItem();
+ FadeSetEnterScreen();
+
+ // printf("::: %d: %d\n", game_status, menu.enter_screen[game_status]);
#if 1
FadeOut(REDRAW_FIELD);
DrawSetupScreen();
}
-static void execSetupShortcut1()
+static void execSetupShortcuts1()
{
#if 0
FadeSetEnterMenu();
#endif
- setup_mode = SETUP_MODE_SHORTCUT_1;
+ setup_mode = SETUP_MODE_SHORTCUTS_1;
DrawSetupScreen();
}
-static void execSetupShortcut2()
+static void execSetupShortcuts2()
{
#if 0
FadeSetEnterMenu();
#endif
- setup_mode = SETUP_MODE_SHORTCUT_2;
+ setup_mode = SETUP_MODE_SHORTCUTS_2;
DrawSetupScreen();
}
{ TYPE_ENTER_MENU, execSetupSound, "Sound & Music" },
{ TYPE_ENTER_MENU, execSetupArtwork, "Custom Artwork" },
{ TYPE_ENTER_MENU, execSetupInput, "Input Devices" },
- { TYPE_ENTER_MENU, execSetupShortcut1, "Key Shortcuts 1" },
- { TYPE_ENTER_MENU, execSetupShortcut2, "Key Shortcuts 2" },
+ { TYPE_ENTER_MENU, execSetupShortcuts1, "Key Shortcuts 1" },
+ { TYPE_ENTER_MENU, execSetupShortcuts2, "Key Shortcuts 2" },
{ TYPE_EMPTY, NULL, "" },
{ TYPE_LEAVE_MENU, execExitSetup, "Exit" },
{ TYPE_LEAVE_MENU, execSaveAndExitSetup, "Save and Exit" },
{ 0, NULL, NULL }
};
-static struct TokenInfo setup_info_shortcut_1[] =
+static struct TokenInfo setup_info_shortcuts_1[] =
{
{ TYPE_KEYTEXT, NULL, "Quick Save Game to Tape:", },
{ TYPE_KEY, &setup.shortcut.save_game, "" },
{ 0, NULL, NULL }
};
-static struct TokenInfo setup_info_shortcut_2[] =
+static struct TokenInfo setup_info_shortcuts_2[] =
{
{ TYPE_KEYTEXT, NULL, "Set Focus to Player 1:", },
{ TYPE_KEY, &setup.shortcut.focus_player[0], "" },
setup_info = setup_info_artwork;
title_string = "Custom Artwork";
}
- else if (setup_mode == SETUP_MODE_SHORTCUT_1)
+ else if (setup_mode == SETUP_MODE_SHORTCUTS_1)
{
- setup_info = setup_info_shortcut_1;
+ setup_info = setup_info_shortcuts_1;
title_string = "Setup Shortcuts";
}
- else if (setup_mode == SETUP_MODE_SHORTCUT_2)
+ else if (setup_mode == SETUP_MODE_SHORTCUTS_2)
{
- setup_info = setup_info_shortcut_2;
+ setup_info = setup_info_shortcuts_2;
title_string = "Setup Shortcuts";
}
AutoPlayTape(); /* continue automatically playing next tape */
}
+#if 0
+void ChangeGameStatus(int new_game_status)
+{
+ /* for fading out last screen, use the last game status */
+ global.border_status = game_status;
+ global.fading_status = game_status;
+
+ /* ... */
+
+ /* for fading in next screen, use the new game status */
+ global.border_status = new_game_status;
+ global.fading_status = new_game_status;
+}
+#endif
+
/* ---------- new screen button stuff -------------------------------------- */
CreateScreenMenubuttons();
+#if 0
/* force LEVELS draw offset for scrollbar / scrollbutton gadgets */
game_status = GAME_MODE_LEVELS;
+#endif
CreateScreenScrollbuttons();
CreateScreenScrollbars();