X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=ad6976c8781cf13e424e5eea556c9aa8eb5ef9b4;hp=98aa9c734422c31ac6b867feab2dc92539e49ccb;hb=5c5685a92a0ca8060018c4d035e6b37fea7e0f5a;hpb=2178db0a0652bc87717aa1a55c888258ad6701e5 diff --git a/src/libgame/system.h b/src/libgame/system.h index 98aa9c73..ad6976c8 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,9 +59,33 @@ #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" +#define TOUCH_CONTROL_FOLLOW_FINGER "follow_finger" #define TOUCH_CONTROL_DEFAULT TOUCH_CONTROL_VIRTUAL_BUTTONS @@ -69,6 +93,15 @@ #define TOUCH_DROP_DISTANCE_DEFAULT 5 +/* values for special settings for mobile devices */ +#if defined(PLATFORM_ANDROID) +#define USE_TOUCH_INPUT_OVERLAY +#define USE_COMPLETE_DISPLAY +#define HAS_SCREEN_KEYBOARD +#define SCREEN_KEYBOARD_POS(h) ((h) / 2) +#endif + + /* default input keys */ #define DEFAULT_KEY_LEFT KSYM_Left #define DEFAULT_KEY_RIGHT KSYM_Right @@ -107,6 +140,34 @@ #define DEFAULT_KEY_SNAP_UP KSYM_UNDEFINED #define DEFAULT_KEY_SNAP_DOWN KSYM_UNDEFINED +/* default debug setup keys and values */ +#define DEFAULT_FRAME_DELAY_0 20 // 100 % speed +#define DEFAULT_FRAME_DELAY_1 500 // 4 % speed +#define DEFAULT_FRAME_DELAY_2 250 // 8 % speed +#define DEFAULT_FRAME_DELAY_3 125 // 16 % speed +#define DEFAULT_FRAME_DELAY_4 60 // 33 % speed +#define DEFAULT_FRAME_DELAY_5 40 // 50 % speed +#define DEFAULT_FRAME_DELAY_6 30 // 66 % speed +#define DEFAULT_FRAME_DELAY_7 10 // 200 % speed +#define DEFAULT_FRAME_DELAY_8 5 // 400 % speed +#define DEFAULT_FRAME_DELAY_9 0 // maximum speed + +#define DEFAULT_KEY_FRAME_DELAY_0 KSYM_0 +#define DEFAULT_KEY_FRAME_DELAY_1 KSYM_1 +#define DEFAULT_KEY_FRAME_DELAY_2 KSYM_2 +#define DEFAULT_KEY_FRAME_DELAY_3 KSYM_3 +#define DEFAULT_KEY_FRAME_DELAY_4 KSYM_4 +#define DEFAULT_KEY_FRAME_DELAY_5 KSYM_5 +#define DEFAULT_KEY_FRAME_DELAY_6 KSYM_6 +#define DEFAULT_KEY_FRAME_DELAY_7 KSYM_7 +#define DEFAULT_KEY_FRAME_DELAY_8 KSYM_8 +#define DEFAULT_KEY_FRAME_DELAY_9 KSYM_9 + +#define NUM_DEBUG_FRAME_DELAY_KEYS 10 + +#define DEFAULT_FRAME_DELAY_USE_MOD_KEY FALSE +#define DEFAULT_FRAME_DELAY_GAME_ONLY TRUE + /* values for key_status */ #define KEY_NOT_PRESSED FALSE #define KEY_RELEASED FALSE @@ -128,12 +189,12 @@ #define MB_WHEEL_DOWN 5 #define MB_WHEEL_LEFT 6 #define MB_WHEEL_RIGHT 7 -#define IS_WHEEL_BUTTON_VERTICAL(b) ((b) >= MB_WHEEL_UP && \ - (b) <= MB_WHEEL_DOWN) -#define IS_WHEEL_BUTTON_HORIZONTAL(b) ((b) >= MB_WHEEL_LEFT && \ - (b) <= MB_WHEEL_RIGHT) -#define IS_WHEEL_BUTTON(b) ((b) >= MB_WHEEL_UP && \ - (b) <= MB_WHEEL_DOWN) +#define IS_WHEEL_BUTTON_VERTICAL(b) ((b) == MB_WHEEL_UP || \ + (b) == MB_WHEEL_DOWN) +#define IS_WHEEL_BUTTON_HORIZONTAL(b) ((b) == MB_WHEEL_LEFT || \ + (b) == MB_WHEEL_RIGHT) +#define IS_WHEEL_BUTTON(b) (IS_WHEEL_BUTTON_VERTICAL(b) || \ + IS_WHEEL_BUTTON_HORIZONTAL(b)) #define DEFAULT_WHEEL_STEPS 3 #define BUTTON_STEPSIZE(b) ((b) == MB_LEFTBUTTON ? 1 : \ @@ -169,11 +230,12 @@ #define DRAW_GLOBAL_ANIM_STAGE_1 1 #define DRAW_GLOBAL_ANIM_STAGE_2 2 -/* values for drawing target for global border */ -#define DRAW_BORDER_TO_BACKBUFFER 0 -#define DRAW_BORDER_TO_SCREEN 1 -#define DRAW_BORDER_TO_FADE_SOURCE 2 -#define DRAW_BORDER_TO_FADE_TARGET 3 +/* 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 @@ -347,6 +409,7 @@ /* fundamental game speed values */ #define ONE_SECOND_DELAY 1000 /* delay value for one second */ +#define MENU_FRAME_DELAY 20 /* frame delay in milliseconds */ #define GAME_FRAME_DELAY 20 /* frame delay in milliseconds */ #define FFWD_FRAME_DELAY 10 /* 200% speed for fast forward */ #define FRAMES_PER_SECOND (ONE_SECOND_DELAY / GAME_FRAME_DELAY) @@ -445,6 +508,7 @@ #define SOUNDSINFO_FILENAME "soundsinfo.conf" #define MUSICINFO_FILENAME "musicinfo.conf" #define ARTWORKINFO_CACHE_FILE "artworkinfo.cache" +#define LEVELTEMPLATE_FILENAME "template.level" #define LEVELFILE_EXTENSION "level" #define TAPEFILE_EXTENSION "tape" #define SCOREFILE_EXTENSION "score" @@ -662,14 +726,6 @@ } -/* type definitions */ -#if defined(TARGET_SDL2) -typedef int (*EventFilter)(void *, Event *); -#else -typedef int (*EventFilter)(const Event *); -#endif - - /* structure definitions */ struct ProgramInfo @@ -705,11 +761,13 @@ struct ProgramInfo char *(*window_title_function)(void); void (*exit_message_function)(char *, va_list); void (*exit_function)(int); + + boolean global_scores; + boolean many_scores_per_name; }; struct OptionInfo { - char *display_name; char *server_host; int server_port; @@ -725,32 +783,39 @@ struct OptionInfo char *special_flags; + boolean mytapes; boolean serveronly; boolean network; boolean verbose; boolean debug; }; -struct ScreenModeInfo -{ - int width, height; -}; - struct VideoSystemInfo { int default_depth; int width, height, depth; int window_width, window_height; + int display_width, display_height; + int screen_width, screen_height; + int screen_xoffset, screen_yoffset; 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 shifted_up; + int shifted_up_pos; + int shifted_up_pos_last; + unsigned int shifted_up_delay; + unsigned int shifted_up_delay_value; boolean initialized; }; @@ -817,6 +882,7 @@ struct GfxInfo Bitmap *background_bitmap; int background_bitmap_mask; + Bitmap *fade_bitmap_backup; Bitmap *fade_bitmap_source; Bitmap *fade_bitmap_target; Bitmap *fade_bitmap_black; @@ -825,9 +891,7 @@ struct GfxInfo int fade_border_target_status; Bitmap *masked_border_bitmap_ptr; -#if USE_FINAL_SCREEN_BITMAP Bitmap *final_screen_bitmap; -#endif boolean clipping_enabled; int clip_x, clip_y; @@ -847,12 +911,17 @@ struct GfxInfo int anim_random_frame; void (*draw_busy_anim_function)(void); - void (*draw_global_anim_function)(int); + void (*draw_global_anim_function)(int, int); void (*draw_global_border_function)(int); int cursor_mode; }; +struct OverlayInfo +{ + boolean active; +}; + struct JoystickInfo { int status; @@ -900,6 +969,8 @@ struct SetupEditorInfo boolean el_dx_boulderdash; boolean el_chars; boolean el_steel_chars; + + boolean el_classic; boolean el_custom; boolean el_user_defined; boolean el_dynamic; @@ -991,6 +1062,14 @@ struct SetupInternalInfo boolean choose_from_top_leveldir; }; +struct SetupDebugInfo +{ + int frame_delay[10]; + Key frame_delay_key[10]; + boolean frame_delay_use_mod_key; + boolean frame_delay_game_only; +}; + struct SetupInfo { char *player_name; @@ -1003,6 +1082,7 @@ struct SetupInfo boolean scroll_delay; boolean scroll_delay_value; char *engine_snapshot_mode; + int engine_snapshot_memory; boolean fade_screens; boolean autorecord; boolean show_titlescreen; @@ -1012,9 +1092,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; @@ -1043,6 +1123,8 @@ struct SetupInfo struct SetupTouchInfo touch; struct SetupSystemInfo system; struct SetupInternalInfo internal; + struct SetupDebugInfo debug; + struct OptionInfo options; }; @@ -1235,6 +1317,12 @@ struct XY int x, y; }; +struct XYTileSize +{ + int x, y; + int tile_size; +}; + struct Rect { int x, y; @@ -1299,6 +1387,7 @@ extern struct OptionInfo options; extern struct VideoSystemInfo video; extern struct AudioSystemInfo audio; extern struct GfxInfo gfx; +extern struct OverlayInfo overlay; extern struct AnimInfo anim; extern struct ArtworkInfo artwork; extern struct JoystickInfo joystick; @@ -1317,6 +1406,7 @@ extern DrawBuffer *drawto; extern int button_status; extern boolean motion_status; +extern int wheel_steps; #if defined(TARGET_SDL2) extern boolean keyrepeat_status; #endif @@ -1331,6 +1421,7 @@ extern int FrameCounter; void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *, int); +void InitScoresInfo(); void SetWindowTitle(); void InitWindowTitleFunction(char *(*window_title_function)(void)); @@ -1348,10 +1439,13 @@ 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 InitGfxDrawGlobalAnimFunction(void (*draw_global_anim_function)(int, int)); void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int)); void InitGfxCustomArtworkInfo(); void InitGfxOtherSettings(); +void InitOverlayInfo(); +void SetOverlayActive(boolean); +boolean GetOverlayActive(); void SetDrawDeactivationMask(int); void SetDrawBackgroundMask(int); void SetWindowBackgroundBitmap(Bitmap *); @@ -1366,16 +1460,17 @@ void CloseVideoDisplay(void); void InitVideoBuffer(int, int, int, boolean); Bitmap *CreateBitmapStruct(void); Bitmap *CreateBitmap(int, int, int); -void ReCreateBitmap(Bitmap **, int, int, int); +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 FadeRectangle(Bitmap *bitmap, 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 ClearRectangle(Bitmap *, int, int, int, int); void ClearRectangleOnBackground(Bitmap *, int, int, int, int); void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int); +boolean DrawingDeactivated(int, int, int, int); boolean DrawingOnBackground(int, int); boolean DrawingAreaChanged(); void BlitBitmapOnBackground(Bitmap *, Bitmap *, int, int, int, int, int, int); @@ -1393,13 +1488,14 @@ Pixel GetPixelFromRGBcompact(Bitmap *, unsigned int); void KeyboardAutoRepeatOn(void); void KeyboardAutoRepeatOff(void); boolean SetVideoMode(boolean); +void SetVideoFrameDelay(unsigned int); +unsigned int GetVideoFrameDelay(); boolean ChangeVideoModeIfNeeded(boolean); Bitmap *LoadImage(char *); Bitmap *LoadCustomImage(char *); void ReloadCustomImage(Bitmap *, char *); -Bitmap *ZoomBitmap(Bitmap *, int, int); void ReCreateGameTileSizeBitmap(Bitmap **); void CreateBitmapWithSmallBitmaps(Bitmap **, int, int); void CreateBitmapTextures(Bitmap **); @@ -1412,7 +1508,6 @@ void OpenAudio(void); void CloseAudio(void); void SetAudioMode(boolean); -void InitEventFilter(EventFilter); boolean PendingEvent(void); void NextEvent(Event *event); void PeekEvent(Event *event); @@ -1420,6 +1515,8 @@ Key GetEventKey(KeyEvent *, boolean); KeyMod HandleKeyModState(Key, int); KeyMod GetKeyModState(); KeyMod GetKeyModStateFromEvents(); +void StartTextInput(int, int, int, int); +void StopTextInput(); boolean CheckCloseWindowEvent(ClientMessageEvent *); void InitJoysticks();