X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=4325ae7fd65e3d319c460279339fd92fd050a5e1;hb=fffaec4e69e54c74cf5eea689191e81b8c19b85a;hp=71582633110a9483e0b0dc76659682f308253400;hpb=4e3bc17b6150a17a76cba2da2daa96af65bde5b9;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index 71582633..4325ae7f 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2001 Artsoft Entertainment * +* (c) 1994-2002 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -27,6 +27,14 @@ #include "x11.h" #endif +#if defined(PLATFORM_MACOSX) +/* some symbols are already defined on Mac OS X */ +#define Delay Delay_internal +#define DrawLine DrawLine_internal +#define DrawText DrawText_internal +#define GetPixel GetPixel_internal +#endif + /* the additional 'b' is needed for Win32 to open files in binary mode */ #define MODE_READ "rb" @@ -43,14 +51,20 @@ #define DEFAULT_KEY_RIGHT KSYM_Right #define DEFAULT_KEY_UP KSYM_Up #define DEFAULT_KEY_DOWN KSYM_Down +#if defined(PLATFORM_MACOSX) +#define DEFAULT_KEY_SNAP KSYM_Control_L +#define DEFAULT_KEY_BOMB KSYM_KP_Enter +#else #define DEFAULT_KEY_SNAP KSYM_Shift_L #define DEFAULT_KEY_BOMB KSYM_Shift_R +#endif #define DEFAULT_KEY_OKAY KSYM_Return #define DEFAULT_KEY_CANCEL KSYM_Escape /* default shortcut keys */ #define DEFAULT_KEY_SAVE_GAME KSYM_F1 #define DEFAULT_KEY_LOAD_GAME KSYM_F2 +#define DEFAULT_KEY_TOGGLE_PAUSE KSYM_space /* values for move directions and special "button" keys */ #define MV_NO_MOVING 0 @@ -58,10 +72,11 @@ #define MV_RIGHT (1 << 1) #define MV_UP (1 << 2) #define MV_DOWN (1 << 3) -#define MV_BUTTON_1 (1 << 4) -#define MV_BUTTON_2 (1 << 5) -#define MV_MOTION (MV_LEFT | MV_RIGHT | MV_UP | MV_DOWN) -#define MV_BUTTON (MV_BUTTON_1 | MV_BUTTON_2) +#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) /* values for button status */ #define MB_NOT_PRESSED FALSE @@ -113,6 +128,12 @@ /* default name for unknown player names */ #define ANONYMOUS_NAME "anonymous" +/* 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" @@ -170,6 +191,10 @@ #define VERSION_MINOR(x) (((x) % 10000) / 100) #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) + /* type definitions */ typedef int (*EventFilter)(const Event *); @@ -215,6 +240,7 @@ struct OptionInfo boolean network; boolean verbose; boolean debug; + char *debug_command; }; struct VideoSystemInfo @@ -228,21 +254,20 @@ struct VideoSystemInfo struct AudioSystemInfo { boolean sound_available; - boolean music_available; boolean loops_available; - boolean mods_available; - boolean sound_enabled; + boolean music_available; + boolean sound_enabled; boolean sound_deactivated; /* for temporarily disabling sound */ - int soundserver_pipe[2]; - int soundserver_pid; + int mixer_pipe[2]; + int mixer_pid; char *device_name; int device_fd; - int channels; + int num_channels; int music_channel; - int music_nr; + int first_sound_channel; }; struct GfxInfo @@ -299,6 +324,7 @@ struct SetupShortcutInfo { Key save_game; Key load_game; + Key toggle_pause; }; struct SetupInfo @@ -326,16 +352,23 @@ struct SetupInfo char *graphics_set; char *sounds_set; char *music_set; + boolean override_level_graphics; + boolean override_level_sounds; + boolean override_level_music; struct SetupShortcutInfo shortcut; struct SetupInputInfo input[MAX_PLAYERS]; }; #define TREE_TYPE_GENERIC 0 -#define TREE_TYPE_LEVEL_DIR 1 -#define TREE_TYPE_GRAPHICS_DIR 2 -#define TREE_TYPE_SOUNDS_DIR 3 -#define TREE_TYPE_MUSIC_DIR 4 +#define TREE_TYPE_GRAPHICS_DIR 1 +#define TREE_TYPE_SOUNDS_DIR 2 +#define TREE_TYPE_MUSIC_DIR 3 +#define TREE_TYPE_LEVEL_DIR 4 + +#define ARTWORK_TYPE_GRAPHICS TREE_TYPE_GRAPHICS_DIR +#define ARTWORK_TYPE_SOUNDS TREE_TYPE_SOUNDS_DIR +#define ARTWORK_TYPE_MUSIC TREE_TYPE_MUSIC_DIR struct TreeInfo { @@ -351,22 +384,32 @@ struct TreeInfo /* fields for "type == TREE_TYPE_LEVEL_DIR" */ - char *filename; /* level series single directory name */ - char *fullpath; /* complete path relative to level directory */ - char *basepath; /* absolute base path of level directory */ - char *name; /* level series name, as displayed on main screen */ - char *name_short; /* optional short name for level selection screen */ - char *name_sorting; /* optional sorting name for correct level sorting */ - char *author; /* level series author name levels without author */ - char *imported_from; /* optional comment for imported level series */ + char *filename; /* tree info sub-directory basename (may be ".") */ + char *fullpath; /* complete path relative to tree base directory */ + char *basepath; /* absolute base path of tree base directory */ + char *identifier; /* identifier string for configuration files */ + char *name; /* tree info name, as displayed in selection menues */ + char *name_sorting; /* optional sorting name for correct name sorting */ + char *author; /* level or artwork author name */ + char *imported_from; /* optional comment for imported levels or artwork */ + + char *graphics_set; /* optional custom graphics set (level tree only) */ + char *sounds_set; /* optional custom sounds set (level tree only) */ + char *music_set; /* optional custom music set (level tree only) */ + char *graphics_path; /* path to optional custom graphics set (level only) */ + char *sounds_path; /* path to optional custom sounds set (level only) */ + char *music_path; /* path to optional custom music set (level only) */ + int levels; /* number of levels in level series */ int first_level; /* first level number (to allow start with 0 or 1) */ int last_level; /* last level number (automatically calculated) */ int sort_priority; /* sort levels by 'sort_priority' and then by name */ + boolean level_group; /* directory contains more level series directories */ boolean parent_link; /* entry links back to parent directory */ boolean user_defined; /* user defined levels are stored in home directory */ boolean readonly; /* readonly levels can not be changed with editor */ + int color; /* color to use on selection screen for this level */ char *class_desc; /* description of level series class */ int handicap_level; /* number of the lowest unsolved level */ @@ -374,6 +417,7 @@ struct TreeInfo typedef struct TreeInfo TreeInfo; typedef struct TreeInfo LevelDirTree; +typedef struct TreeInfo ArtworkDirTree; typedef struct TreeInfo GraphicsDirTree; typedef struct TreeInfo SoundsDirTree; typedef struct TreeInfo MusicDirTree; @@ -387,9 +431,40 @@ struct ArtworkInfo MusicDirTree *mus_first; MusicDirTree *mus_current; - char *graphics_set_current; - char *sounds_set_current; - char *music_set_current; + char *gfx_current_identifier; + char *snd_current_identifier; + char *mus_current_identifier; +}; + +struct ConfigInfo +{ + char *token; + char *value; +}; + +struct FileInfo +{ + char *token; + char *default_filename; + + char *filename; +}; + +struct ListNodeInfo +{ + char *source_filename; /* primary key for node list */ + int num_references; +}; + +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 */ + void *(*load_artwork)(char *); /* constructor function */ + void (*free_artwork)(void *); /* destructor function */ };