X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=b7da38b53adcd21081a749a56c6609c8d36ddf37;hb=0b35d42d7e09d2f9ac90b57f20ac77df07841e19;hp=b2840a2456f4f337b06a34d182434f2eadfc8321;hpb=9afa3bb01a86fb8640e763afb05b492619958b7f;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index b2840a24..b7da38b5 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -47,9 +47,9 @@ #define WINDOW_SCALING_NOT_AVAILABLE FALSE #define WINDOW_SCALING_AVAILABLE TRUE -#define MIN_WINDOW_SCALING_PERCENT 50 +#define MIN_WINDOW_SCALING_PERCENT 30 #define STD_WINDOW_SCALING_PERCENT 100 -#define MAX_WINDOW_SCALING_PERCENT 300 +#define MAX_WINDOW_SCALING_PERCENT 400 #define STEP_WINDOW_SCALING_PERCENT 10 /* values for window scaling quality */ @@ -59,6 +59,29 @@ #define SCALING_QUALITY_DEFAULT SCALING_QUALITY_LINEAR +/* values for screen rendering mode */ +#define STR_SPECIAL_RENDERING_OFF "stream_texture_only" +#define STR_SPECIAL_RENDERING_BITMAP "bitmap_and_stream_texture" +#define STR_SPECIAL_RENDERING_TARGET "target_texture_only" +#define STR_SPECIAL_RENDERING_DOUBLE "stream_and_target_texture" + +#if defined(TARGET_SDL2) +#define STR_SPECIAL_RENDERING_DEFAULT STR_SPECIAL_RENDERING_DOUBLE +#else +#define STR_SPECIAL_RENDERING_DEFAULT STR_SPECIAL_RENDERING_BITMAP +#endif + +#define SPECIAL_RENDERING_OFF 0 +#define SPECIAL_RENDERING_BITMAP 1 +#define SPECIAL_RENDERING_TARGET 2 +#define SPECIAL_RENDERING_DOUBLE 3 + +#if defined(TARGET_SDL2) +#define SPECIAL_RENDERING_DEFAULT SPECIAL_RENDERING_DOUBLE +#else +#define SPECIAL_RENDERING_DEFAULT SPECIAL_RENDERING_BITMAP +#endif + /* values for touch control */ #define TOUCH_CONTROL_VIRTUAL_BUTTONS "virtual_buttons" #define TOUCH_CONTROL_WIPE_GESTURES "wipe_gestures" @@ -165,6 +188,17 @@ /* values for special "focus player" bitmasks */ #define BIT_SET_FOCUS 6 +/* values for drawing stages for global animations */ +#define DRAW_GLOBAL_ANIM_STAGE_1 1 +#define DRAW_GLOBAL_ANIM_STAGE_2 2 + +/* values for drawing target (various functions) */ +#define DRAW_TO_BACKBUFFER 0 +#define DRAW_TO_FIELDBUFFER 1 +#define DRAW_TO_SCREEN 2 +#define DRAW_TO_FADE_SOURCE 3 +#define DRAW_TO_FADE_TARGET 4 + /* values for move directions and special "button" key bitmasks */ #define MV_NONE 0 #define MV_LEFT (1 << MV_BIT_LEFT) @@ -221,6 +255,7 @@ MV_NONE) /* values for animation mode (frame order and direction) */ +/* (stored in level files -- never change existing values) */ #define ANIM_NONE 0 #define ANIM_LOOP (1 << 0) #define ANIM_LINEAR (1 << 1) @@ -234,10 +269,13 @@ #define ANIM_OPAQUE_PLAYER (1 << 9) /* 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_DEFAULT ANIM_LOOP @@ -255,7 +293,8 @@ #define FADE_TYPE_TRANSFORM (1 << 2) #define FADE_TYPE_CROSSFADE (1 << 3) #define FADE_TYPE_MELT (1 << 4) -#define FADE_TYPE_SKIP (1 << 5) +#define FADE_TYPE_CURTAIN (1 << 5) +#define FADE_TYPE_SKIP (1 << 6) #define FADE_MODE_NONE (FADE_TYPE_NONE) #define FADE_MODE_FADE_IN (FADE_TYPE_FADE_IN) @@ -264,11 +303,23 @@ #define FADE_MODE_TRANSFORM (FADE_TYPE_TRANSFORM | FADE_TYPE_FADE_IN) #define FADE_MODE_CROSSFADE (FADE_MODE_TRANSFORM | FADE_TYPE_CROSSFADE) #define FADE_MODE_MELT (FADE_MODE_TRANSFORM | FADE_TYPE_MELT) +#define FADE_MODE_CURTAIN (FADE_MODE_TRANSFORM | FADE_TYPE_CURTAIN) #define FADE_MODE_SKIP_FADE_IN (FADE_TYPE_SKIP | FADE_TYPE_FADE_IN) #define FADE_MODE_SKIP_FADE_OUT (FADE_TYPE_SKIP | FADE_TYPE_FADE_OUT) #define FADE_MODE_DEFAULT FADE_MODE_FADE +/* values for toon positions */ +#define POS_UNDEFINED -1 +#define POS_LEFT 0 +#define POS_RIGHT 1 +#define POS_TOP 2 +#define POS_UPPER 3 +#define POS_MIDDLE 4 +#define POS_LOWER 5 +#define POS_BOTTOM 6 +#define POS_ANY 7 + /* values for text alignment */ #define ALIGN_LEFT (1 << 0) #define ALIGN_RIGHT (1 << 1) @@ -291,30 +342,14 @@ #define REDRAW_NONE (0) #define REDRAW_ALL (1 << 0) #define REDRAW_FIELD (1 << 1) -#define REDRAW_TILES (1 << 2) -#define REDRAW_DOOR_1 (1 << 3) -#define REDRAW_VIDEO_1 (1 << 4) -#define REDRAW_VIDEO_2 (1 << 5) -#define REDRAW_VIDEO_3 (1 << 6) -#define REDRAW_MICROLEVEL (1 << 7) -#define REDRAW_MICROLABEL (1 << 8) -#define REDRAW_FROM_BACKBUFFER (1 << 9) -#define REDRAW_DOOR_2 (REDRAW_VIDEO_1 | \ - REDRAW_VIDEO_2 | \ - REDRAW_VIDEO_3) -#define REDRAW_DOOR_3 (1 << 10) +#define REDRAW_DOOR_1 (1 << 2) +#define REDRAW_DOOR_2 (1 << 3) +#define REDRAW_DOOR_3 (1 << 4) +#define REDRAW_FPS (1 << 5) + #define REDRAW_DOORS (REDRAW_DOOR_1 | \ REDRAW_DOOR_2 | \ REDRAW_DOOR_3) -#define REDRAW_MAIN (REDRAW_FIELD | \ - REDRAW_TILES | \ - REDRAW_MICROLEVEL) -#define REDRAW_FPS (1 << 11) - -/* on modern graphics systems and when using the SDL target, the old tile redraw - optimization can slow things down a lot due to many small blits compared to - one single playfield-sized blit (especially observed on Mac OS X with SDL) */ -#define REDRAWTILES_THRESHOLD 0 #define IN_GFX_FIELD_PLAY(x, y) (x >= gfx.sx && x < gfx.sx + gfx.sxsize && \ y >= gfx.sy && y < gfx.sy + gfx.sysize) @@ -438,7 +473,12 @@ #define TAPEFILE_EXTENSION "tape" #define SCOREFILE_EXTENSION "score" -#define ERROR_BASENAME "stderr.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 "/" @@ -666,7 +706,6 @@ struct ProgramInfo char *maindata_path; /* main game data (installation) directory */ char *userdata_subdir; /* personal user game data directory */ - char *userdata_subdir_unix; /* personal user game data directory (Unix) */ char *userdata_path; /* resulting full path to game data directory */ char *program_title; @@ -677,8 +716,9 @@ struct ProgramInfo char *cookie_prefix; - char *error_filename; /* filename where to write error messages to */ - FILE *error_file; /* (used instead of 'stderr' on some systems) */ + 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) */ int version_major; int version_minor; @@ -693,7 +733,6 @@ struct ProgramInfo struct OptionInfo { - char *display_name; char *server_host; int server_port; @@ -715,11 +754,6 @@ struct OptionInfo boolean debug; }; -struct ScreenModeInfo -{ - int width, height; -}; - struct VideoSystemInfo { int default_depth; @@ -729,12 +763,14 @@ struct VideoSystemInfo boolean fullscreen_available; boolean fullscreen_enabled; boolean fullscreen_initial; - struct ScreenModeInfo *fullscreen_modes; - char *fullscreen_mode_current; boolean window_scaling_available; int window_scaling_percent; char *window_scaling_quality; + int screen_rendering_mode; + + unsigned int frame_delay; + unsigned int frame_delay_value; boolean initialized; }; @@ -796,13 +832,21 @@ struct GfxInfo int draw_deactivation_mask; int draw_background_mask; - boolean drawing_area_changed; - Bitmap *field_save_buffer; Bitmap *background_bitmap; int background_bitmap_mask; + Bitmap *fade_bitmap_source; + Bitmap *fade_bitmap_target; + Bitmap *fade_bitmap_black; + + int fade_border_source_status; + int fade_border_target_status; + Bitmap *masked_border_bitmap_ptr; + + Bitmap *final_screen_bitmap; + boolean clipping_enabled; int clip_x, clip_y; int clip_width, clip_height; @@ -821,6 +865,8 @@ struct GfxInfo int anim_random_frame; void (*draw_busy_anim_function)(void); + void (*draw_global_anim_function)(int); + void (*draw_global_border_function)(int); int cursor_mode; }; @@ -957,6 +1003,9 @@ struct SetupInternalInfo char *default_level_series; + int default_window_width; + int default_window_height; + boolean choose_from_top_leveldir; }; @@ -972,7 +1021,6 @@ struct SetupInfo boolean scroll_delay; boolean scroll_delay_value; char *engine_snapshot_mode; - boolean soft_scrolling; boolean fade_screens; boolean autorecord; boolean show_titlescreen; @@ -982,9 +1030,9 @@ struct SetupInfo boolean skip_levels; boolean time_limit; boolean fullscreen; - char *fullscreen_mode; int window_scaling_percent; char *window_scaling_quality; + char *screen_rendering_mode; boolean ask_on_escape; boolean ask_on_escape_editor; boolean quick_switch; @@ -993,6 +1041,7 @@ struct SetupInfo int game_frame_delay; boolean sp_show_border_elements; boolean small_game_graphics; + boolean show_snapshot_buttons; char *graphics_set; char *sounds_set; @@ -1291,7 +1340,6 @@ extern boolean keyrepeat_status; #endif extern int redraw_mask; -extern int redraw_tiles; extern int FrameCounter; @@ -1299,7 +1347,7 @@ extern int FrameCounter; /* function definitions */ void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *, - char *, int); + int); void SetWindowTitle(); @@ -1318,6 +1366,8 @@ void InitGfxWindowInfo(int, int); void InitGfxScrollbufferInfo(int, int); void InitGfxClipRegion(boolean, int, int, int, int); void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void)); +void InitGfxDrawGlobalAnimFunction(void (*draw_global_anim_function)(int)); +void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int)); void InitGfxCustomArtworkInfo(); void InitGfxOtherSettings(); void SetDrawDeactivationMask(int); @@ -1325,6 +1375,7 @@ void SetDrawBackgroundMask(int); void SetWindowBackgroundBitmap(Bitmap *); void SetMainBackgroundBitmap(Bitmap *); void SetDoorBackgroundBitmap(Bitmap *); +void SetRedrawMaskFromArea(int, int, int, int); void LimitScreenUpdates(boolean); @@ -1346,6 +1397,10 @@ void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int); boolean DrawingOnBackground(int, int); boolean DrawingAreaChanged(); void BlitBitmapOnBackground(Bitmap *, Bitmap *, int, int, int, int, int, int); +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); @@ -1355,8 +1410,9 @@ Pixel GetPixelFromRGBcompact(Bitmap *, unsigned int); void KeyboardAutoRepeatOn(void); void KeyboardAutoRepeatOff(void); -boolean PointerInWindow(DrawWindow *); boolean SetVideoMode(boolean); +void SetVideoFrameDelay(unsigned int); +unsigned int GetVideoFrameDelay(); boolean ChangeVideoModeIfNeeded(boolean); Bitmap *LoadImage(char *); @@ -1366,6 +1422,8 @@ void ReloadCustomImage(Bitmap *, char *); Bitmap *ZoomBitmap(Bitmap *, int, int); void ReCreateGameTileSizeBitmap(Bitmap **); void CreateBitmapWithSmallBitmaps(Bitmap **, int, int); +void CreateBitmapTextures(Bitmap **); +void FreeBitmapTextures(Bitmap **); void ScaleBitmap(Bitmap **, int); void SetMouseCursor(int);