X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=511355d31e0ce28a64ce8d9f98393065978d5b12;hb=84a3ee86461e2311032274e0b7d7a857e02a76ab;hp=4325ae7fd65e3d319c460279339fd92fd050a5e1;hpb=fffaec4e69e54c74cf5eea689191e81b8c19b85a;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index 4325ae7f..511355d3 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -67,17 +67,27 @@ #define DEFAULT_KEY_TOGGLE_PAUSE KSYM_space /* values for move directions and special "button" keys */ +#define MV_BIT_LEFT 0 +#define MV_BIT_RIGHT 1 +#define MV_BIT_UP 2 +#define MV_BIT_DOWN 3 +#define NUM_DIRECTIONS 4 + #define MV_NO_MOVING 0 -#define MV_LEFT (1 << 0) -#define MV_RIGHT (1 << 1) -#define MV_UP (1 << 2) -#define MV_DOWN (1 << 3) +#define MV_LEFT (1 << MV_BIT_LEFT) +#define MV_RIGHT (1 << MV_BIT_RIGHT) +#define MV_UP (1 << MV_BIT_UP) +#define MV_DOWN (1 << MV_BIT_DOWN) #define KEY_BUTTON_1 (1 << 4) #define KEY_BUTTON_2 (1 << 5) #define KEY_MOTION (MV_LEFT | MV_RIGHT | MV_UP | MV_DOWN) #define KEY_BUTTON (KEY_BUTTON_1 | KEY_BUTTON_2) #define KEY_ACTION (KEY_MOTION | KEY_BUTTON) +#define MV_DIR_BIT(x) ((x) == MV_LEFT ? MV_BIT_LEFT : \ + (x) == MV_RIGHT ? MV_BIT_RIGHT : \ + (x) == MV_UP ? MV_BIT_UP : MV_BIT_DOWN) + /* values for button status */ #define MB_NOT_PRESSED FALSE #define MB_NOT_RELEASED TRUE @@ -128,14 +138,18 @@ /* default name for unknown player names */ #define ANONYMOUS_NAME "anonymous" +/* default name for new levels */ +#define NAMELESS_LEVEL_NAME "nameless level" + /* default text for non-existant artwork */ #define NOT_AVAILABLE "(not available)" /* default value for undefined filename */ #define UNDEFINED_FILENAME "[NONE]" -/* default name for new levels */ -#define NAMELESS_LEVEL_NAME "nameless level" +/* default values for undefined configuration file parameters */ +#define ARG_UNDEFINED "-1000000" +#define ARG_UNDEFINED_VALUE (atoi(ARG_UNDEFINED)) /* definitions for game sub-directories */ #ifndef RO_GAME_DIR @@ -192,9 +206,13 @@ #define VERSION_PATCH(x) ((x) % 100) /* functions for parent/child process identification */ -#define IS_PARENT_PROCESS(pid) ((pid) > 0) -#define IS_CHILD_PROCESS(pid) ((pid) == 0) - +#if defined(PLATFORM_UNIX) +#define IS_PARENT_PROCESS() (audio.mixer_pid != getpid()) +#define IS_CHILD_PROCESS() (audio.mixer_pid == getpid()) +#else +#define IS_PARENT_PROCESS() TRUE +#define IS_CHILD_PROCESS() FALSE +#endif /* type definitions */ typedef int (*EventFilter)(const Event *); @@ -230,17 +248,19 @@ struct OptionInfo char *display_name; char *server_host; int server_port; + char *ro_base_directory; char *rw_base_directory; char *level_directory; char *graphics_directory; char *sounds_directory; char *music_directory; + char *execute_command; + boolean serveronly; boolean network; boolean verbose; boolean debug; - char *debug_command; }; struct VideoSystemInfo @@ -284,7 +304,27 @@ struct GfxInfo int vx, vy; int vxsize, vysize; - boolean draw_deactivation_mask; + int draw_deactivation_mask; + int draw_background_mask; + + Bitmap *background_bitmap; + int background_bitmap_mask; + + boolean menu_main_hide_static_text; +}; + +struct FontInfo +{ + Bitmap *bitmap_initial; + Bitmap *bitmap_big; + Bitmap *bitmap_medium; + Bitmap *bitmap_small; + Bitmap *bitmap_tile; +}; + +struct AnimInfo +{ + int random_frame; }; struct JoystickInfo @@ -320,6 +360,19 @@ struct SetupInputInfo struct SetupKeyboardInfo key; }; +struct SetupEditorInfo +{ + boolean el_boulderdash; + boolean el_emerald_mine; + boolean el_more; + boolean el_sokoban; + boolean el_supaplex; + boolean el_diamond_caves; + boolean el_dx_boulderdash; + boolean el_chars; + boolean el_custom; +}; + struct SetupShortcutInfo { Key save_game; @@ -356,6 +409,7 @@ struct SetupInfo boolean override_level_sounds; boolean override_level_music; + struct SetupEditorInfo editor; struct SetupShortcutInfo shortcut; struct SetupInputInfo input[MAX_PLAYERS]; }; @@ -440,14 +494,28 @@ struct ConfigInfo { char *token; char *value; + int type; }; struct FileInfo { char *token; - char *default_filename; + char *default_filename; char *filename; + + char **default_parameter; /* array of file parameters */ + char **parameter; /* array of file parameters */ + + boolean redefined; +}; + +struct SetupFileList +{ + char *token; + char *value; + + struct SetupFileList *next; }; struct ListNodeInfo @@ -456,13 +524,49 @@ struct ListNodeInfo int num_references; }; +struct PropertyMapping +{ + int base_index; + int ext1_index; + int ext2_index; + int ext3_index; + + int artwork_index; +}; + struct ArtworkListInfo { int type; /* type of artwork */ - int num_list_entries; - struct FileInfo *file_list; /* static artwork file list */ - struct ListNodeInfo **artwork_list; /* static artwork list */ - struct ListNode *content_list; /* dynamic artwork list */ + + int num_file_list_entries; + int num_dynamic_file_list_entries; + struct FileInfo *file_list; /* static artwork file array */ + struct FileInfo *dynamic_file_list; /* dynamic artwrk file array */ + + int num_suffix_list_entries; + struct ConfigInfo *suffix_list; /* parameter suffixes array */ + + int num_base_prefixes; + int num_ext1_suffixes; + int num_ext2_suffixes; + int num_ext3_suffixes; + char **base_prefixes; /* base token prefixes array */ + char **ext1_suffixes; /* property suffixes array 1 */ + char **ext2_suffixes; /* property suffixes array 2 */ + char **ext3_suffixes; /* property suffixes array 3 */ + + int num_ignore_tokens; + char **ignore_tokens; /* file tokens to be ignored */ + + int num_property_mapping_entries; + struct PropertyMapping *property_mapping; /* mapping token -> artwork */ + + int sizeof_artwork_list_entry; + + struct ListNodeInfo **artwork_list; /* static artwork node array */ + struct ListNodeInfo **dynamic_artwork_list; /* dynamic artwrk node array */ + struct ListNode *content_list; /* dynamic artwork node list */ + void *(*load_artwork)(char *); /* constructor function */ void (*free_artwork)(void *); /* destructor function */ }; @@ -477,6 +581,8 @@ extern struct OptionInfo options; extern struct VideoSystemInfo video; extern struct AudioSystemInfo audio; extern struct GfxInfo gfx; +extern struct FontInfo font; +extern struct AnimInfo anim; extern struct ArtworkInfo artwork; extern struct JoystickInfo joystick; extern struct SetupInfo setup; @@ -517,7 +623,10 @@ void InitGfxFieldInfo(int, int, int, int, int, int, int, int); void InitGfxDoor1Info(int, int, int, int); void InitGfxDoor2Info(int, int, int, int); void InitGfxScrollbufferInfo(int, int); -void SetDrawDeactivationMask(int ); +void SetDrawDeactivationMask(int); +void SetDrawBackgroundMask(int); +void SetMainBackgroundBitmap(Bitmap *); +void SetDoorBackgroundBitmap(Bitmap *); inline void InitVideoDisplay(void); inline void CloseVideoDisplay(void); @@ -527,9 +636,13 @@ inline Bitmap *CreateBitmap(int, int, int); inline void FreeBitmap(Bitmap *); inline void BlitBitmap(Bitmap *, Bitmap *, int, int, int, int, int, int); inline void ClearRectangle(Bitmap *, int, int, int, int); +inline void ClearRectangleOnBackground(Bitmap *, int, int, int, int); inline void SetClipMask(Bitmap *, GC, Pixmap); inline void SetClipOrigin(Bitmap *, GC, int, int); inline void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int); +inline boolean DrawingOnBackground(int, int); +inline void BlitBitmapOnBackground(Bitmap *, Bitmap *, int, int, int, int, int, + int); inline void DrawSimpleWhiteLine(Bitmap *, int, int, int, int); inline void DrawLines(Bitmap *, struct XY *, int, Pixel); inline Pixel GetPixel(Bitmap *, int, int); @@ -548,6 +661,9 @@ Bitmap *LoadImage(char *); Bitmap *LoadCustomImage(char *); void ReloadCustomImage(Bitmap *, char *); +Bitmap *ZoomBitmap(Bitmap *, int, int); +void CreateBitmapWithSmallBitmaps(Bitmap *); + inline void OpenAudio(void); inline void CloseAudio(void); inline void SetAudioMode(boolean);