X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=73d50ddc0b4ccfcb2b9df2c6b908aa197fae4b61;hp=60a2d7cc40b369ab302cd645f6e282ba903db3b0;hb=HEAD;hpb=d522e996ec9a28cd01c056764799996a4ac5474e diff --git a/src/libgame/system.h b/src/libgame/system.h index 60a2d7cc..73d50ddc 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -16,9 +16,9 @@ #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" @@ -163,7 +163,7 @@ #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 @@ -288,6 +288,8 @@ // 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 @@ -364,20 +366,64 @@ #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 @@ -393,44 +439,10 @@ #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) @@ -469,7 +481,9 @@ #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) @@ -482,9 +496,9 @@ #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) @@ -607,7 +621,7 @@ 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" @@ -633,10 +647,13 @@ // 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) @@ -659,6 +676,7 @@ #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" @@ -703,12 +721,7 @@ #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 "/" @@ -722,7 +735,7 @@ #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 @@ -1024,17 +1037,17 @@ struct ProgramInfo 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; @@ -1096,6 +1109,8 @@ struct OptionInfo char *identifier; char *level_nr; + int display_nr; + boolean mytapes; boolean serveronly; boolean network; @@ -1123,14 +1138,12 @@ struct VideoSystemInfo 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; }; @@ -1225,13 +1238,16 @@ struct GfxInfo 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; @@ -1307,6 +1323,8 @@ struct SetupTouchInfo boolean draw_pressed; boolean grid_initialized; + + boolean overlay_buttons; }; struct SetupInputInfo @@ -1446,6 +1464,7 @@ struct SetupInternalInfo 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; @@ -1459,6 +1478,12 @@ struct SetupInternalInfo 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; @@ -1493,6 +1518,7 @@ struct SetupInfo boolean sound_music; boolean sound_simple; boolean toons; + boolean global_animations; boolean scroll_delay; boolean forced_scroll_delay; int scroll_delay_value; @@ -1500,6 +1526,7 @@ struct SetupInfo int engine_snapshot_memory; boolean fade_screens; boolean autorecord; + boolean autorecord_after_replay; boolean auto_pause_on_start; boolean show_titlescreen; boolean quick_doors; @@ -1643,9 +1670,11 @@ struct TreeInfo 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 @@ -1899,7 +1928,6 @@ extern struct AudioSystemInfo audio; 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; @@ -1954,7 +1982,8 @@ void InitGfxClipRegion(boolean, int, int, int, int); 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); @@ -1973,9 +2002,7 @@ boolean GetOverlayActive(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); @@ -1984,12 +2011,14 @@ void InitVideoDefaults(void); 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); @@ -1997,7 +2026,7 @@ void ClearRectangle(Bitmap *, int, int, int, int); 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); @@ -2005,12 +2034,10 @@ void BlitTexture(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); @@ -2044,7 +2071,7 @@ void WaitEvent(Event *event); 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);