// values for drawing stages for global animations
#define DRAW_GLOBAL_ANIM_STAGE_1 1
#define DRAW_GLOBAL_ANIM_STAGE_2 2
+#define DRAW_GLOBAL_ANIM_STAGE_3 3
+#define DRAW_GLOBAL_ANIM_STAGE_RESTART 4
// values for drawing target (various functions)
#define DRAW_TO_BACKBUFFER 0
#define ANIM_CE_DELAY (1 << 7)
#define ANIM_REVERSE (1 << 8)
#define ANIM_OPAQUE_PLAYER (1 << 9)
+#define ANIM_LEVEL_NR (1 << 10)
// values for special (non game element) animation modes
// (not stored in level files -- can be changed, if needed)
-#define ANIM_HORIZONTAL (1 << 10)
-#define ANIM_VERTICAL (1 << 11)
-#define ANIM_CENTERED (1 << 12)
-#define ANIM_STATIC_PANEL (1 << 13)
-#define ANIM_ALL (1 << 14)
-#define ANIM_ONCE (1 << 15)
-#define ANIM_TILED (1 << 16)
-#define ANIM_RANDOM_STATIC (1 << 17)
+#define ANIM_HORIZONTAL (1 << 11)
+#define ANIM_VERTICAL (1 << 12)
+#define ANIM_CENTERED (1 << 13)
+#define ANIM_STATIC_PANEL (1 << 14)
+#define ANIM_ALL (1 << 15)
+#define ANIM_ONCE (1 << 16)
+#define ANIM_TILED (1 << 17)
+#define ANIM_RANDOM_STATIC (1 << 18)
#define ANIM_DEFAULT ANIM_LOOP
+// values for special global animation events
+#define ANIM_EVENT_UNDEFINED -1
+#define ANIM_EVENT_NONE 0
+#define ANIM_EVENT_SELF (1 << 0)
+#define ANIM_EVENT_ANY (1 << 1)
+#define ANIM_EVENT_CLICK (1 << 2)
+#define ANIM_EVENT_INIT (1 << 3)
+#define ANIM_EVENT_START (1 << 4)
+#define ANIM_EVENT_END (1 << 5)
+#define ANIM_EVENT_POST (1 << 6)
+#define ANIM_EVENT_UNCLICK_ANY (1 << 7)
+#define ANIM_EVENT_CE_CHANGE (1 << 8)
+
+// event mask: bits 0-15
+// CE number: bits 16-23
+// anim number: bits 16-23
+// page number: bits 24-31
+// part number: bits 24-31
+#define ANIM_EVENT_CE_BIT 16
+#define ANIM_EVENT_ANIM_BIT 16
+#define ANIM_EVENT_PAGE_BIT 24
+#define ANIM_EVENT_PART_BIT 24
+
+#define ANIM_EVENT_CE_MASK (0xff << ANIM_EVENT_CE_BIT)
+#define ANIM_EVENT_ANIM_MASK (0xff << ANIM_EVENT_ANIM_BIT)
+#define ANIM_EVENT_PAGE_MASK (0xff << ANIM_EVENT_PAGE_BIT)
+#define ANIM_EVENT_PART_MASK (0xff << ANIM_EVENT_PART_BIT)
+
+#define ANIM_EVENT_DEFAULT ANIM_EVENT_NONE
+
+// values for special global animation event actions
+#define ANIM_EVENT_ACTION_NONE -1
+
+// values for special global animation delay types
+#define ANIM_DELAY_UNDEFINED -1
+#define ANIM_DELAY_NONE 0
+#define ANIM_DELAY_INIT 1
+#define ANIM_DELAY_ANIM 2
+#define ANIM_DELAY_POST 3
+
+// values for special global animation delay actions
+#define ANIM_DELAY_ACTION_NONE -1
+
// values for special drawing styles and event handling
#define STYLE_NONE 0
#define STYLE_BLOCK (1 << 4)
#define STYLE_PASSTHROUGH (1 << 5)
#define STYLE_MULTIPLE_ACTIONS (1 << 6)
+#define STYLE_CONSUME_CE_EVENT (1 << 7)
#define STYLE_DEFAULT STYLE_NONE
-// values for special global animation delay types
-#define ANIM_DELAY_UNDEFINED -1
-#define ANIM_DELAY_NONE 0
-#define ANIM_DELAY_INIT 1
-#define ANIM_DELAY_ANIM 2
-#define ANIM_DELAY_POST 3
-
-// values for special global animation delay actions
-#define ANIM_DELAY_ACTION_NONE -1
-
-// values for special global animation events
-#define ANIM_EVENT_UNDEFINED -1
-#define ANIM_EVENT_NONE 0
-#define ANIM_EVENT_SELF (1 << 16)
-#define ANIM_EVENT_ANY (1 << 17)
-#define ANIM_EVENT_CLICK (1 << 18)
-#define ANIM_EVENT_INIT (1 << 19)
-#define ANIM_EVENT_START (1 << 20)
-#define ANIM_EVENT_END (1 << 21)
-#define ANIM_EVENT_POST (1 << 22)
-#define ANIM_EVENT_UNCLICK_ANY (1 << 23)
-
-// anim number: bits 0-7
-// part number: bits 8-15
-#define ANIM_EVENT_ANIM_BIT 0
-#define ANIM_EVENT_PART_BIT 8
-
-#define ANIM_EVENT_ANIM_MASK (0xff << ANIM_EVENT_ANIM_BIT)
-#define ANIM_EVENT_PART_MASK (0xff << ANIM_EVENT_PART_BIT)
-
-#define ANIM_EVENT_DEFAULT ANIM_EVENT_NONE
-
-// values for special global animation event actions
-#define ANIM_EVENT_ACTION_NONE -1
-
// values for fade mode
#define FADE_TYPE_NONE 0
#define FADE_TYPE_FADE_IN (1 << 0)
#define POS_LOWER 5
#define POS_BOTTOM 6
#define POS_ANY 7
-#define POS_LAST 8
+#define POS_CE 8
+#define POS_CE_TRIGGER 9
+#define POS_LAST 10
// values for text alignment
#define ALIGN_LEFT (1 << 0)
#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 FALLBACK_TEXT_FILENAME "fallback.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 STRING_PARENT_DIRECTORY ".."
#define STRING_TOP_DIRECTORY "/"
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;
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;
+ int anim_first_level;
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);
+ void (*draw_tile_cursor_function)(int, int);
+ void (*draw_envelope_request_function)(int);
int cursor_mode;
int cursor_mode_override;
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;
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 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
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 InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int, int));
+void InitGfxDrawEnvelopeRequestFunction(void (*draw_envelope_request_function)(int));
void InitGfxCustomArtworkInfo(void);
void InitGfxOtherSettings(void);
void InitTileCursorInfo(void);
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 InitVideoDisplay(void);
void CloseVideoDisplay(void);
void InitVideoBuffer(int, int, int, boolean);
+void ResetBitmapAlpha(Bitmap *);
Bitmap *CreateBitmapStruct(void);
Bitmap *CreateBitmap(int, int, int);
void ReCreateBitmap(Bitmap **, int, int);
void FreeBitmap(Bitmap *);
+void SetBitmapAlphaNextBlit(Bitmap *, int);
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 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 GetPixelFromRGB(Bitmap *, unsigned int, unsigned int, unsigned int);
void KeyboardAutoRepeatOn(void);
void KeyboardAutoRepeatOff(void);