#include "types.h"
-#if defined(PLATFORM_MACOSX)
+#if defined(PLATFORM_MAC)
#include "macosx.h"
-#elif defined(PLATFORM_WIN32)
+#elif defined(PLATFORM_WINDOWS)
#include "windows.h"
#elif defined(PLATFORM_ANDROID)
#include "android.h"
#define API_SERVER_METHOD "POST"
#define API_SERVER_URI_ADD "/api/scores/add"
#define API_SERVER_URI_GET "/api/scores/get"
+#define API_SERVER_URI_GETTAPE "/api/scores/gettape"
#define API_SERVER_URI_RENAME "/api/players/rename"
#define API_SERVER_URI_RESETUUID "/api/players/resetuuid"
#define USE_TOUCH_INPUT_OVERLAY
#define USE_COMPLETE_DISPLAY
#define HAS_SCREEN_KEYBOARD
-#define SCREEN_KEYBOARD_POS(h) ((h) / 2)
+#define SCREEN_KEYBOARD_POS(h) ((h) * 40 / 100)
#endif
// values for drag-and-drop support (some parts not added before SDL 2.0.5)
#define DEFAULT_KEY_RIGHT KSYM_Right
#define DEFAULT_KEY_UP KSYM_Up
#define DEFAULT_KEY_DOWN KSYM_Down
-#if defined(PLATFORM_MACOSX)
+#if defined(PLATFORM_MAC)
#define DEFAULT_KEY_SNAP KSYM_Control_L
#define DEFAULT_KEY_DROP KSYM_KP_Enter
#else
// default shortcut keys
#define DEFAULT_KEY_SAVE_GAME KSYM_F1
#define DEFAULT_KEY_LOAD_GAME KSYM_F2
+#define DEFAULT_KEY_RESTART_GAME KSYM_F3
+#define DEFAULT_KEY_PAUSE_BEFORE_END KSYM_F4
#define DEFAULT_KEY_TOGGLE_PAUSE KSYM_space
#define DEFAULT_KEY_FOCUS_PLAYER_1 KSYM_F5
#define DEFAULT_KEY_FOCUS_PLAYER_2 KSYM_F6
#define MB_MENU_MARK TRUE
#define MB_MENU_INITIALIZE (-1)
#define MB_MENU_LEAVE (-2)
+#define MB_MENU_CONTINUE (-3)
#define MB_LEFTBUTTON 1
#define MB_MIDDLEBUTTON 2
#define MB_RIGHTBUTTON 3
#define VALIGN_MIDDLE (1 << 2)
#define VALIGN_DEFAULT VALIGN_TOP
-#define ALIGNED_XPOS(x,w,a) ((a) == ALIGN_CENTER ? (x) - (w) / 2 : \
+#define ALIGNED_XPOS(x, w, a) ((a) == ALIGN_CENTER ? (x) - (w) / 2 : \
(a) == ALIGN_RIGHT ? (x) - (w) : (x))
-#define ALIGNED_YPOS(y,h,v) ((v) == VALIGN_MIDDLE ? (y) - (h) / 2 : \
+#define ALIGNED_YPOS(y, h, v) ((v) == VALIGN_MIDDLE ? (y) - (h) / 2 : \
(v) == VALIGN_BOTTOM ? (y) - (h) : (y))
#define ALIGNED_TEXT_XPOS(p) ALIGNED_XPOS((p)->x, (p)->width, (p)->align)
#define ALIGNED_TEXT_YPOS(p) ALIGNED_YPOS((p)->y, (p)->height, (p)->valign)
JOY_NO_ACTION)
// maximum number of level sets in the level set history
-#define MAX_LEVELDIR_HISTORY 12
+#define MAX_LEVELDIR_HISTORY 100
// default name for empty highscore entry
#define EMPTY_PLAYER_NAME "no name"
// default value for undefined password
#define UNDEFINED_PASSWORD "[undefined]"
-// default value for undefined parameter
+// default value for undefined string parameter
+#define ARG_UNDEFINED_STRING "[undefined]"
+
+// default value for default string parameter
#define ARG_DEFAULT "[DEFAULT]"
-// default values for undefined configuration file parameters
+// default values for undefined numerical parameter (as string and integer)
#define ARG_UNDEFINED "-1000000"
#define ARG_UNDEFINED_VALUE (-1000000)
#define TAPES_DIRECTORY "tapes"
#define SCORES_DIRECTORY "scores"
#define DOCS_DIRECTORY "docs"
+#define ELEMENTS_DIRECTORY "elements"
+#define CREDITS_DIRECTORY "credits"
+#define PROGRAM_INFO_DIRECTORY "program"
+#define LEVELSET_INFO_DIRECTORY "levelset"
#define CACHE_DIRECTORY "cache"
#define CONF_DIRECTORY "conf"
#define NETWORK_DIRECTORY "network"
#define USERS_DIRECTORY "users"
+#define PERSISTENT_DIRECTORY "/persistent"
#define GFX_CLASSIC_SUBDIR "gfx_classic"
#define SND_CLASSIC_SUBDIR "snd_classic"
#define GAMECONTROLLER_BASENAME "gamecontrollerdb.txt"
-#define LOG_OUT_BASENAME "stdout.txt"
-#define LOG_ERR_BASENAME "stderr.txt"
-
-#define LOG_OUT_ID 0
-#define LOG_ERR_ID 1
-#define NUM_LOGS 2
+#define FALLBACK_TEXT_FILENAME "fallback.txt"
#define STRING_PARENT_DIRECTORY ".."
#define STRING_TOP_DIRECTORY "/"
#define STRING_NEWLINE_UNIX "\n"
#define STRING_NEWLINE_DOS "\r\n"
-#if defined(PLATFORM_WIN32)
+#if defined(PLATFORM_WINDOWS)
#define CHAR_PATH_SEPARATOR CHAR_PATH_SEPARATOR_DOS
#define STRING_PATH_SEPARATOR STRING_PATH_SEPARATOR_DOS
#define STRING_NEWLINE STRING_NEWLINE_DOS
#define TREE_TYPE_LEVEL_DIR 3
#define TREE_TYPE_LEVEL_NR 4
#define TREE_TYPE_PLAYER_NAME 5
+#define TREE_TYPE_SCORE_ENTRY 6
#define NUM_BASE_TREE_TYPES 4
-#define NUM_TREE_TYPES 6
+#define NUM_TREE_TYPES 7
#define TREE_TYPE_IS_DIR(type) ((type) == TREE_TYPE_GRAPHICS_DIR || \
(type) == TREE_TYPE_SOUNDS_DIR || \
#define INFOTEXT_LEVEL_DIR "Level Sets"
#define INFOTEXT_LEVEL_NR "Levels"
#define INFOTEXT_PLAYER_NAME "Players & Teams"
+#define INFOTEXT_SCORE_ENTRY "Hall of Fame"
#define BACKLINK_TEXT_MAIN ".. (main menu)"
#define BACKLINK_TEXT_SETUP ".. (setup menu)"
#define BACKLINK_TEXT_PARENT ".. (parent directory)"
+#define BACKLINK_TEXT_BACK "back"
+#define BACKLINK_TEXT_NEXT "next"
-#define TREE_INFOTEXT(t) ((t) == TREE_TYPE_PLAYER_NAME ? \
+#define TREE_INFOTEXT(t) ((t) == TREE_TYPE_SCORE_ENTRY ? \
+ INFOTEXT_SCORE_ENTRY : \
+ (t) == TREE_TYPE_PLAYER_NAME ? \
INFOTEXT_PLAYER_NAME : \
(t) == TREE_TYPE_LEVEL_NR ? \
INFOTEXT_LEVEL_NR : \
INFOTEXT_MUSIC_DIR : \
INFOTEXT_UNDEFINED)
-#define TREE_BACKLINK_TEXT(t) ((t) == TREE_TYPE_LEVEL_DIR ? \
+#define TREE_BACKLINK_TEXT(t) ((t) == TREE_TYPE_SCORE_ENTRY ? \
+ BACKLINK_TEXT_BACK : \
+ (t) == TREE_TYPE_LEVEL_DIR ? \
BACKLINK_TEXT_MAIN : \
BACKLINK_TEXT_SETUP)
#define UPDATE_BUSY_STATE() \
{ \
if (gfx.draw_busy_anim_function != NULL) \
- gfx.draw_busy_anim_function(); \
+ gfx.draw_busy_anim_function(TRUE); \
+}
+#define UPDATE_BUSY_STATE_NOT_LOADING() \
+{ \
+ if (gfx.draw_busy_anim_function != NULL) \
+ gfx.draw_busy_anim_function(FALSE); \
}
char *userdata_subdir; // personal user game data directory
char *userdata_path; // resulting full path to game data directory
+ char *program_basename;
char *program_title;
char *window_title;
- char *icon_title;
char *icon_filename;
char *cookie_prefix;
- char *log_filename[NUM_LOGS]; // log filenames for out/err messages
- FILE *log_file[NUM_LOGS]; // log file handles for out/err files
- FILE *log_file_default[NUM_LOGS]; // default log file handles (out/err)
+ char *log_filename; // filename for log messages
+ FILE *log_file; // file handle for log files
+ FILE *log_file_default; // default log file handle
int version_super;
int version_major;
char *identifier;
char *level_nr;
+ int display_nr;
+
boolean mytapes;
boolean serveronly;
boolean network;
int vsync_mode;
unsigned int frame_counter;
- unsigned int frame_delay;
- unsigned int frame_delay_value;
+ DelayCounter frame_delay;
boolean shifted_up;
int shifted_up_pos;
int shifted_up_pos_last;
- unsigned int shifted_up_delay;
- unsigned int shifted_up_delay_value;
+ DelayCounter shifted_up_delay;
boolean initialized;
};
struct FontBitmapInfo *font_bitmap_info;
int (*select_font_function)(int);
int (*get_font_from_token_function)(char *);
+ char * (*get_token_from_font_function)(int);
int anim_random_frame;
- void (*draw_busy_anim_function)(void);
+ void (*draw_busy_anim_function)(boolean);
void (*draw_global_anim_function)(int, int);
void (*draw_global_border_function)(int);
void (*draw_tile_cursor_function)(int);
boolean draw_pressed;
boolean grid_initialized;
+
+ boolean overlay_buttons;
};
struct SetupInputInfo
boolean el_steel_chars;
boolean el_ce;
boolean el_ge;
+ boolean el_es;
boolean el_ref;
boolean el_user;
boolean el_dynamic;
{
Key save_game;
Key load_game;
+ Key restart_game;
+ Key pause_before_end;
Key toggle_pause;
Key focus_player[MAX_PLAYERS];
boolean choose_from_top_leveldir;
boolean show_scaling_in_title;
boolean create_user_levelset;
+ boolean info_screens_from_main;
boolean menu_game;
boolean menu_engines;
boolean menu_shortcuts;
boolean menu_exit;
boolean menu_save_and_exit;
+
+ boolean menu_shortcuts_various;
+ boolean menu_shortcuts_focus;
+ boolean menu_shortcuts_tape;
+ boolean menu_shortcuts_sound;
+ boolean menu_shortcuts_snap;
+
+ boolean info_title;
+ boolean info_elements;
+ boolean info_music;
+ boolean info_credits;
+ boolean info_program;
+ boolean info_version;
+ boolean info_levelset;
+ boolean info_exit;
};
struct SetupDebugInfo
int engine_snapshot_memory;
boolean fade_screens;
boolean autorecord;
+ boolean autorecord_after_replay;
+ boolean auto_pause_on_start;
boolean show_titlescreen;
boolean quick_doors;
boolean team_mode;
char *special_flags; // flags for special actions performed on level file
+ char *empty_level_name; // name pattern if level title is "nameless level"
+ boolean force_level_name; // force also renaming non-nameless level titles
+
int levels; // number of levels in level series
int first_level; // first level number (to allow start with 0 or 1)
int last_level; // last level number (automatically calculated)
int sort_priority; // sort levels by 'sort_priority' and then by name
+ int pos; // custom position information of node in tree
boolean latest_engine;// force level set to use the latest game engine
boolean user_defined; // levels in user directory and marked as "private"
boolean readonly; // readonly levels can not be changed with editor
boolean handicap; // level set has no handicap when set to "false"
+ boolean time_limit; // level set has no time limit when set to "false"
boolean skip_levels; // levels can be skipped when set to "true"
boolean use_emc_tiles;// use (swapped) V5/V6 EMC tiles when set to "true"
+ boolean info_screens_from_main; // can invoke info screens from main menu
int color; // color to use on selection screen for this level
char *class_desc; // description of level series class
extern struct GfxInfo gfx;
extern struct TileCursorInfo tile_cursor;
extern struct OverlayInfo overlay;
-extern struct AnimInfo anim;
extern struct ArtworkInfo artwork;
extern struct JoystickInfo joystick;
extern struct SetupInfo setup;
void InitGfxWindowInfo(int, int);
void InitGfxScrollbufferInfo(int, int);
void InitGfxClipRegion(boolean, int, int, int, int);
-void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void));
+void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(boolean));
void InitGfxDrawGlobalAnimFunction(void (*draw_global_anim_function)(int, int));
void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int));
void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int));
void SetDrawDeactivationMask(int);
int GetDrawDeactivationMask(void);
void SetDrawBackgroundMask(int);
-void SetWindowBackgroundBitmap(Bitmap *);
-void SetMainBackgroundBitmap(Bitmap *);
-void SetDoorBackgroundBitmap(Bitmap *);
+void SetBackgroundBitmap(Bitmap *, int, int, int, int, int);
void SetRedrawMaskFromArea(int, int, int, int);
void LimitScreenUpdates(boolean);
void ReCreateBitmap(Bitmap **, int, int);
void FreeBitmap(Bitmap *);
void BlitBitmap(Bitmap *, Bitmap *, int, int, int, int, int, int);
-void BlitBitmapTiled(Bitmap *, Bitmap *, int, int, int, int, int, int, int,int);
+void BlitBitmapTiled(Bitmap *, Bitmap *, int, int, int, int, int, int, int, int);
void FadeRectangle(int, int, int, int, int, int, int,
void (*draw_border_function)(void));
void FillRectangle(Bitmap *, int, int, int, int, Pixel);
void ClearRectangleOnBackground(Bitmap *, int, int, int, int);
void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int);
boolean DrawingDeactivatedField(void);
-boolean DrawingDeactivated(int, int, int, int);
+boolean DrawingDeactivated(int, int);
boolean DrawingOnBackground(int, int);
boolean DrawingAreaChanged(void);
void BlitBitmapOnBackground(Bitmap *, Bitmap *, int, int, int, int, int, int);
void BlitTextureMasked(Bitmap *, int, int, int, int, int, int);
void BlitToScreen(Bitmap *, int, int, int, int, int, int);
void BlitToScreenMasked(Bitmap *, int, int, int, int, int, int);
-void DrawSimpleBlackLine(Bitmap *, int, int, int, int);
void DrawSimpleWhiteLine(Bitmap *, int, int, int, int);
void DrawLines(Bitmap *, struct XY *, int, Pixel);
Pixel GetPixel(Bitmap *, int, int);
-Pixel GetPixelFromRGB(Bitmap *, unsigned int,unsigned int,unsigned int);
-Pixel GetPixelFromRGBcompact(Bitmap *, unsigned int);
+Pixel GetPixelFromRGB(Bitmap *, unsigned int, unsigned int, unsigned int);
void KeyboardAutoRepeatOn(void);
void KeyboardAutoRepeatOff(void);
void PeekEvent(Event *event);
void PumpEvents(void);
void CheckQuitEvent(void);
-Key GetEventKey(KeyEvent *, boolean);
+Key GetEventKey(KeyEvent *);
KeyMod HandleKeyModState(Key, int);
KeyMod GetKeyModState(void);
KeyMod GetKeyModStateFromEvents(void);
void StartTextInput(int, int, int, int);
void StopTextInput(void);
void PushUserEvent(int, int, int);
+boolean PendingEscapeKeyEvent(void);
void InitJoysticks(void);
boolean ReadJoystick(int, int *, int *, boolean *, boolean *);