X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=711b227355959cd6e7a28a1523c78c1ab9d34be9;hp=9c95802d34d0bed74bae579b123a2cbe9441f523;hb=17c7213a32d3a0e4c84727937f2ed79028461798;hpb=f1dae0af49fa331f6fedc6cbdf59eed0909ae391 diff --git a/src/libgame/system.h b/src/libgame/system.h index 9c95802d..711b2273 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -82,16 +82,41 @@ #define SPECIAL_RENDERING_DEFAULT SPECIAL_RENDERING_BITMAP #endif +/* values for vertical screen retrace synchronization (vsync) */ +#define STR_VSYNC_MODE_OFF "off" +#define STR_VSYNC_MODE_NORMAL "normal" +#define STR_VSYNC_MODE_ADAPTIVE "adaptive" + +#define STR_VSYNC_MODE_DEFAULT STR_VSYNC_MODE_OFF + +#define VSYNC_MODE_OFF 0 +#define VSYNC_MODE_NORMAL 1 +#define VSYNC_MODE_ADAPTIVE -1 + +#define VSYNC_MODE_DEFAULT VSYNC_MODE_OFF + +/* values for network server settings */ +#define STR_NETWORK_AUTO_DETECT "auto_detect_network_server" +#define STR_NETWORK_AUTO_DETECT_SETUP "(auto detect network server)" + /* values for touch control */ +#define TOUCH_CONTROL_OFF "off" #define TOUCH_CONTROL_VIRTUAL_BUTTONS "virtual_buttons" #define TOUCH_CONTROL_WIPE_GESTURES "wipe_gestures" #define TOUCH_CONTROL_FOLLOW_FINGER "follow_finger" +#if defined(PLATFORM_ANDROID) #define TOUCH_CONTROL_DEFAULT TOUCH_CONTROL_VIRTUAL_BUTTONS +#else +#define TOUCH_CONTROL_DEFAULT TOUCH_CONTROL_OFF +#endif #define TOUCH_MOVE_DISTANCE_DEFAULT 2 #define TOUCH_DROP_DISTANCE_DEFAULT 5 +#define TOUCH_TRANSPARENCY_DEFAULT 50 +#define ALPHA_FROM_TRANSPARENCY(x) ((100 - x) * SDL_ALPHA_OPAQUE / 100) +#define ALPHA_FADING_STEPSIZE(x) ((x) / 25) /* values for special settings for mobile devices */ #if defined(PLATFORM_ANDROID) @@ -101,7 +126,6 @@ #define SCREEN_KEYBOARD_POS(h) ((h) / 2) #endif - /* default input keys */ #define DEFAULT_KEY_LEFT KSYM_Left #define DEFAULT_KEY_RIGHT KSYM_Right @@ -321,14 +345,30 @@ #define STYLE_NONE 0 #define STYLE_ACCURATE_BORDERS (1 << 0) #define STYLE_INNER_CORNERS (1 << 1) +#define STYLE_REVERSE (1 << 2) + +/* values for special event handling style (used for global animation) */ +#define STYLE_PASSTHROUGH (1 << 3) +#define STYLE_MULTIPLE_ACTIONS (1 << 4) #define STYLE_DEFAULT STYLE_NONE +/* values for special global animation events */ #define ANIM_EVENT_NONE 0 -#define ANIM_EVENT_CLICK (1 << 0) +#define ANIM_EVENT_SELF (1 << 16) +#define ANIM_EVENT_ANY (1 << 17) + +#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) @@ -362,6 +402,7 @@ #define POS_LOWER 5 #define POS_BOTTOM 6 #define POS_ANY 7 +#define POS_LAST 8 /* values for text alignment */ #define ALIGN_LEFT (1 << 0) @@ -417,6 +458,8 @@ #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 MIN_VSYNC_FRAME_DELAY 15 /* minimum value for vsync to keep */ +#define MAX_VSYNC_FRAME_DELAY 16 /* maximum value for vsync to work */ #define FRAMES_PER_SECOND (ONE_SECOND_DELAY / GAME_FRAME_DELAY) #define FRAMES_PER_SECOND_SP 35 @@ -433,6 +476,63 @@ /* maximum number of levels in a level set */ #define MAX_LEVELS 1000 +/* maximum number of global animation and parts */ +#define MAX_GLOBAL_ANIMS 32 +#define MAX_GLOBAL_ANIM_PARTS 32 + +/* minimum/maximum/default x/y grid size for virtual buttons */ +#define MIN_GRID_XSIZE 3 +#define MIN_GRID_YSIZE 3 +#define MAX_GRID_XSIZE 32 +#define MAX_GRID_YSIZE 32 +#define GRID_REAL_WIDTH MAX(1, MAX(video.screen_width, \ + video.screen_height)) +#define GRID_REAL_HEIGHT MAX(1, MIN(video.screen_width, \ + video.screen_height)) +#define DEFAULT_GRID_XSIZE_0 18 +#define DEFAULT_GRID_YSIZE_0 MIN(MAX(MIN_GRID_YSIZE, \ + DEFAULT_GRID_XSIZE_0 * \ + GRID_REAL_HEIGHT / \ + GRID_REAL_WIDTH), \ + MAX_GRID_YSIZE) +#define DEFAULT_GRID_XSIZE_1 13 +#define DEFAULT_GRID_YSIZE_1 MIN(MAX(MIN_GRID_YSIZE, \ + DEFAULT_GRID_XSIZE_1 * \ + GRID_REAL_WIDTH / \ + GRID_REAL_HEIGHT), \ + MAX_GRID_YSIZE) + +#define DEFAULT_GRID_XSIZE(n) ((n) == 0 ? DEFAULT_GRID_XSIZE_0 : \ + DEFAULT_GRID_XSIZE_1) +#define DEFAULT_GRID_YSIZE(n) ((n) == 0 ? DEFAULT_GRID_YSIZE_0 : \ + DEFAULT_GRID_YSIZE_1) + +#define GRID_ACTIVE_NR() (video.screen_width > \ + video.screen_height ? 0 : 1) + +/* values for grid button characters for virtual buttons */ +#define CHAR_GRID_BUTTON_NONE ' ' +#define CHAR_GRID_BUTTON_LEFT '<' +#define CHAR_GRID_BUTTON_RIGHT '>' +#define CHAR_GRID_BUTTON_UP '^' +#define CHAR_GRID_BUTTON_DOWN 'v' +#define CHAR_GRID_BUTTON_SNAP '1' +#define CHAR_GRID_BUTTON_DROP '2' + +#define GET_ACTION_FROM_GRID_BUTTON(c) ((c) == CHAR_GRID_BUTTON_LEFT ? \ + JOY_LEFT : \ + (c) == CHAR_GRID_BUTTON_RIGHT ? \ + JOY_RIGHT : \ + (c) == CHAR_GRID_BUTTON_UP ? \ + JOY_UP : \ + (c) == CHAR_GRID_BUTTON_DOWN ? \ + JOY_DOWN : \ + (c) == CHAR_GRID_BUTTON_SNAP ? \ + JOY_BUTTON_1 : \ + (c) == CHAR_GRID_BUTTON_DROP ? \ + JOY_BUTTON_2 : \ + JOY_NO_ACTION) + /* default name for empty highscore entry */ #define EMPTY_PLAYER_NAME "no name" @@ -485,6 +585,8 @@ #define SCORES_DIRECTORY "scores" #define DOCS_DIRECTORY "docs" #define CACHE_DIRECTORY "cache" +#define CONF_DIRECTORY "conf" +#define NETWORK_DIRECTORY "network" #define GFX_CLASSIC_SUBDIR "gfx_classic" #define SND_CLASSIC_SUBDIR "snd_classic" @@ -503,6 +605,7 @@ /* file names and filename extensions */ #define LEVELSETUP_DIRECTORY "levelsetup" #define SETUP_FILENAME "setup.conf" +#define AUTOSETUP_FILENAME "autosetup.conf" #define LEVELSETUP_FILENAME "levelsetup.conf" #define EDITORSETUP_FILENAME "editorsetup.conf" #define EDITORCASCADE_FILENAME "editorcascade.conf" @@ -518,6 +621,8 @@ #define TAPEFILE_EXTENSION "tape" #define SCOREFILE_EXTENSION "score" +#define GAMECONTROLLER_BASENAME "gamecontrollerdb.txt" + #define LOG_OUT_BASENAME "stdout.txt" #define LOG_ERR_BASENAME "stderr.txt" @@ -573,10 +678,15 @@ /* macros for version handling */ -#define VERSION_MAJOR(x) ((x) / 1000000) -#define VERSION_MINOR(x) (((x) % 1000000) / 10000) -#define VERSION_PATCH(x) (((x) % 10000) / 100) -#define VERSION_BUILD(x) ((x) % 100) +#define VERSION_PART_1(x) ((x) / 1000000) +#define VERSION_PART_2(x) (((x) % 1000000) / 10000) +#define VERSION_PART_3(x) (((x) % 10000) / 100) +#define VERSION_PART_4(x) ((x) % 100) + +#define VERSION_SUPER(x) VERSION_PART_1(x) +#define VERSION_MAJOR(x) VERSION_PART_2(x) +#define VERSION_MINOR(x) VERSION_PART_3(x) +#define VERSION_PATCH(x) VERSION_PART_4(x) #define VERSION_IDENT(a,b,c,d) ((a) * 1000000 + (b) * 10000 + (c) * 100 + (d)) @@ -757,12 +867,14 @@ struct ProgramInfo 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_super; int version_major; int version_minor; int version_patch; - int version_build; int version_ident; + char *version_string; + char *(*window_title_function)(void); void (*exit_message_function)(char *, va_list); void (*exit_function)(int); @@ -773,6 +885,17 @@ struct ProgramInfo boolean headless; }; +struct NetworkInfo +{ + boolean enabled; + boolean connected; + boolean serveronly; + + char *server_host; + int server_port; + +}; + struct OptionInfo { char *server_host; @@ -785,6 +908,7 @@ struct OptionInfo char *sounds_directory; char *music_directory; char *docs_directory; + char *conf_directory; char *execute_command; @@ -814,6 +938,7 @@ struct VideoSystemInfo int window_scaling_percent; char *window_scaling_quality; int screen_rendering_mode; + int vsync_mode; unsigned int frame_delay; unsigned int frame_delay_value; @@ -850,8 +975,11 @@ struct FontBitmapInfo { Bitmap *bitmap; - int src_x, src_y; /* start position of animation frames */ - int width, height; /* width/height of each animation frame */ + int src_x, src_y; /* start position of font characters */ + int width, height; /* width / height of font characters */ + + int offset_x; /* offset to next font character */ + int offset_y; /* offset to next font character */ int draw_xoffset; /* offset for drawing font characters */ int draw_yoffset; /* offset for drawing font characters */ @@ -920,19 +1048,44 @@ struct GfxInfo void (*draw_busy_anim_function)(void); void (*draw_global_anim_function)(int, int); void (*draw_global_border_function)(int); + void (*draw_tile_cursor_function)(int); int cursor_mode; }; +struct TileCursorInfo +{ + boolean enabled; /* tile cursor generally enabled or disabled */ + boolean active; /* tile cursor activated (depending on game) */ + boolean moving; /* tile cursor moving to target position */ + + int xpos, ypos; /* tile cursor level playfield position */ + int x, y; /* tile cursor current screen position */ + int target_x, target_y; /* tile cursor target screen position */ + + int sx, sy; /* tile cursor screen start position */ +}; + struct OverlayInfo { - boolean active; + boolean enabled; /* overlay generally enabled or disabled */ + boolean active; /* overlay activated (depending on game mode) */ + + boolean show_grid; + + int grid_xsize; + int grid_ysize; + + char grid_button[MAX_GRID_XSIZE][MAX_GRID_YSIZE]; + char grid_button_highlight; + + int grid_button_action; }; struct JoystickInfo { int status; - int fd[MAX_PLAYERS]; /* file descriptor of player's joystick */ + int nr[MAX_PLAYERS]; /* joystick number for each player */ }; struct SetupJoystickInfo @@ -955,6 +1108,17 @@ struct SetupTouchInfo char *control_type; int move_distance; int drop_distance; + + int grid_xsize[2]; + int grid_ysize[2]; + + char grid_button[2][MAX_GRID_XSIZE][MAX_GRID_YSIZE]; + + int transparency; /* in percent (0 == opaque, 100 == invisible) */ + boolean draw_outlined; + boolean draw_pressed; + + boolean grid_initialized; }; struct SetupInputInfo @@ -974,6 +1138,10 @@ struct SetupEditorInfo boolean el_supaplex; boolean el_diamond_caves; boolean el_dx_boulderdash; + + boolean el_mirror_magic; + boolean el_deflektor; + boolean el_chars; boolean el_steel_chars; @@ -992,6 +1160,11 @@ struct SetupEditorInfo boolean use_template_for_new_levels; }; +struct SetupAutoSetupInfo +{ + int editor_zoom_tilesize; +}; + struct SetupEditorCascadeInfo { boolean el_bd; @@ -1002,6 +1175,8 @@ struct SetupEditorCascadeInfo boolean el_sp; boolean el_dc; boolean el_dx; + boolean el_mm; + boolean el_df; boolean el_chars; boolean el_steel_chars; boolean el_ce; @@ -1047,6 +1222,7 @@ struct SetupSystemInfo struct SetupInternalInfo { char *program_title; + char *program_version; char *program_author; char *program_email; char *program_website; @@ -1069,6 +1245,7 @@ struct SetupInternalInfo int default_window_height; boolean choose_from_top_leveldir; + boolean show_scaling_in_title; }; struct SetupDebugInfo @@ -1077,6 +1254,7 @@ struct SetupDebugInfo Key frame_delay_key[10]; boolean frame_delay_use_mod_key; boolean frame_delay_game_only; + boolean show_frames_per_second; }; struct SetupInfo @@ -1100,16 +1278,21 @@ struct SetupInfo boolean handicap; boolean skip_levels; boolean increment_levels; + boolean auto_play_next_level; + boolean skip_scores_after_game; boolean time_limit; boolean fullscreen; int window_scaling_percent; char *window_scaling_quality; char *screen_rendering_mode; + char *vsync_mode; boolean ask_on_escape; boolean ask_on_escape_editor; + boolean ask_on_game_over; boolean quick_switch; boolean input_on_focus; boolean prefer_aga_graphics; + boolean game_speed_extended; int game_frame_delay; boolean sp_show_border_elements; boolean small_game_graphics; @@ -1126,6 +1309,11 @@ struct SetupInfo int volume_loops; int volume_music; + boolean network_mode; + int network_player_nr; + char *network_server_hostname; + + struct SetupAutoSetupInfo auto_setup; struct SetupEditorInfo editor; struct SetupEditorCascadeInfo editor_cascade; struct SetupShortcutInfo shortcut; @@ -1160,6 +1348,11 @@ struct TreeInfo char *name_sorting; /* optional sorting name for correct name sorting */ char *author; /* level or artwork author name */ char *year; /* optional year of creation for levels or artwork */ + + char *program_title; /* optional alternative text for program title */ + char *program_copyright; /* optional alternative text for program copyright */ + char *program_company; /* optional alternative text for program company */ + char *imported_from; /* optional comment for imported levels or artwork */ char *imported_by; /* optional comment for imported levels or artwork */ char *tested_by; /* optional comment to name people who tested a set */ @@ -1227,6 +1420,12 @@ struct ValueTextInfo char *text; }; +struct StringValueTextInfo +{ + char *value; + char *text; +}; + struct ConfigInfo { char *token; @@ -1371,6 +1570,7 @@ struct TextPosInfo int x, y; int xoffset; /* special case for tape date and time */ int xoffset2; /* special case for tape date */ + int yoffset; /* special case for list of preview players */ int width, height; int align, valign; int size; /* also used for suffix ".digits" */ @@ -1379,6 +1579,29 @@ struct TextPosInfo boolean draw_player; /* special case for network player buttons */ int sort_priority; /* also used for suffix ".draw_order" */ int id; + + int direction; /* needed for panel time/health graphics */ + int class; /* needed for panel time/health graphics */ + int style; /* needed for panel time/health graphics */ + + int tile_size; /* special case for list of network players */ + int border_size; /* special case for list of preview players */ + int vertical; /* special case for list of preview players */ +}; + +struct MouseActionInfo +{ + int lx, ly; + int button; + int button_hint; +}; + +struct LevelSetInfo +{ + int music[MAX_LEVELS]; + + char *identifier; + int level_nr; }; struct LevelStats @@ -1393,10 +1616,12 @@ struct LevelStats /* ========================================================================= */ extern struct ProgramInfo program; +extern struct NetworkInfo network; extern struct OptionInfo options; extern struct VideoSystemInfo video; 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; @@ -1408,6 +1633,7 @@ extern LevelDirTree *leveldir_first; extern LevelDirTree *leveldir_current; extern int level_nr; +extern struct LevelSetInfo levelset; extern struct LevelStats level_stats[]; extern DrawWindow *window; @@ -1429,10 +1655,11 @@ extern int FrameCounter; /* function definitions */ void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *, - int); + char *, int); +void InitNetworkInfo(boolean, boolean, boolean, char *, int); -void InitScoresInfo(); -void SetWindowTitle(); +void InitScoresInfo(void); +void SetWindowTitle(void); void InitWindowTitleFunction(char *(*window_title_function)(void)); void InitExitMessageFunction(void (*exit_message_function)(char *, va_list)); @@ -1451,12 +1678,22 @@ void InitGfxClipRegion(boolean, int, int, int, int); void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void)); void InitGfxDrawGlobalAnimFunction(void (*draw_global_anim_function)(int, int)); void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int)); -void InitGfxCustomArtworkInfo(); -void InitGfxOtherSettings(); -void InitOverlayInfo(); +void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int)); +void InitGfxCustomArtworkInfo(void); +void InitGfxOtherSettings(void); +void InitTileCursorInfo(void); +void InitOverlayInfo(void); +void SetTileCursorEnabled(boolean); +void SetTileCursorActive(boolean); +void SetTileCursorTargetXY(int, int); +void SetTileCursorXY(int, int); +void SetTileCursorSXSY(int, int); +void SetOverlayEnabled(boolean); void SetOverlayActive(boolean); -boolean GetOverlayActive(); +void SetOverlayShowGrid(boolean); +boolean GetOverlayActive(void); void SetDrawDeactivationMask(int); +int GetDrawDeactivationMask(void); void SetDrawBackgroundMask(int); void SetWindowBackgroundBitmap(Bitmap *); void SetMainBackgroundBitmap(Bitmap *); @@ -1465,6 +1702,7 @@ void SetRedrawMaskFromArea(int, int, int, int); void LimitScreenUpdates(boolean); +void InitVideoDefaults(void); void InitVideoDisplay(void); void CloseVideoDisplay(void); void InitVideoBuffer(int, int, int, boolean); @@ -1480,9 +1718,10 @@ 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 DrawingDeactivatedField(void); boolean DrawingDeactivated(int, int, int, int); boolean DrawingOnBackground(int, int); -boolean DrawingAreaChanged(); +boolean DrawingAreaChanged(void); 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); @@ -1499,7 +1738,7 @@ void KeyboardAutoRepeatOn(void); void KeyboardAutoRepeatOff(void); boolean SetVideoMode(boolean); void SetVideoFrameDelay(unsigned int); -unsigned int GetVideoFrameDelay(); +unsigned int GetVideoFrameDelay(void); boolean ChangeVideoModeIfNeeded(boolean); Bitmap *LoadImage(char *); @@ -1519,17 +1758,20 @@ void CloseAudio(void); void SetAudioMode(boolean); boolean PendingEvent(void); -void NextEvent(Event *event); +void WaitEvent(Event *event); void PeekEvent(Event *event); +void CheckQuitEvent(void); Key GetEventKey(KeyEvent *, boolean); KeyMod HandleKeyModState(Key, int); -KeyMod GetKeyModState(); -KeyMod GetKeyModStateFromEvents(); +KeyMod GetKeyModState(void); +KeyMod GetKeyModStateFromEvents(void); void StartTextInput(int, int, int, int); -void StopTextInput(); +void StopTextInput(void); boolean CheckCloseWindowEvent(ClientMessageEvent *); -void InitJoysticks(); +void InitJoysticks(void); boolean ReadJoystick(int, int *, int *, boolean *, boolean *); +boolean CheckJoystickOpened(int); +void ClearJoystickState(void); #endif /* SYSTEM_H */