X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=ea4dbd173c86917f0a78f0d1837b98046bdea839;hp=f96d530f0b8aef6041007f456a59660ca0c90c23;hb=328e3b0f53ca41e626fda33427f5c51325bc700b;hpb=2a1101854ff7336e35d52f76a3114870c8a6b15d diff --git a/src/libgame/system.h b/src/libgame/system.h index f96d530f..ea4dbd17 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2002 Artsoft Entertainment * +* (c) 1994-2006 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -72,6 +72,14 @@ #define DEFAULT_KEY_FOCUS_PLAYER_3 KSYM_F7 #define DEFAULT_KEY_FOCUS_PLAYER_4 KSYM_F8 #define DEFAULT_KEY_FOCUS_PLAYER_ALL KSYM_F9 +#define DEFAULT_KEY_TAPE_EJECT KSYM_UNDEFINED +#define DEFAULT_KEY_TAPE_STOP KSYM_UNDEFINED +#define DEFAULT_KEY_TAPE_PAUSE KSYM_UNDEFINED +#define DEFAULT_KEY_TAPE_RECORD KSYM_UNDEFINED +#define DEFAULT_KEY_TAPE_PLAY KSYM_UNDEFINED +#define DEFAULT_KEY_SOUND_SIMPLE KSYM_UNDEFINED +#define DEFAULT_KEY_SOUND_LOOPS KSYM_UNDEFINED +#define DEFAULT_KEY_SOUND_MUSIC KSYM_UNDEFINED /* values for key_status */ #define KEY_NOT_PRESSED FALSE @@ -90,7 +98,17 @@ #define MB_LEFTBUTTON 1 #define MB_MIDDLEBUTTON 2 #define MB_RIGHTBUTTON 3 - +#define MB_WHEEL_UP 4 +#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 DEFAULT_WHEEL_STEPS 3 /* values for move directions */ #define MV_BIT_LEFT 0 @@ -184,10 +202,57 @@ /* values for special (non game element) animation modes */ #define ANIM_HORIZONTAL (1 << 10) #define ANIM_VERTICAL (1 << 11) -#define ANIM_STATIC_PANEL (1 << 12) +#define ANIM_CENTERED (1 << 12) +#define ANIM_STATIC_PANEL (1 << 13) #define ANIM_DEFAULT ANIM_LOOP +/* values for special drawing styles (currently only for crumbled graphics) */ +#define STYLE_NONE 0 +#define STYLE_ACCURATE_BORDERS (1 << 0) +#define STYLE_WITH_INNER_CORNERS (1 << 1) + +#define STYLE_DEFAULT STYLE_NONE + +/* values for fade mode */ +#define FADE_TYPE_NONE 0 +#define FADE_TYPE_FADE_IN (1 << 0) +#define FADE_TYPE_FADE_OUT (1 << 1) +#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_MODE_NONE (FADE_TYPE_NONE) +#define FADE_MODE_FADE_IN (FADE_TYPE_FADE_IN) +#define FADE_MODE_FADE_OUT (FADE_TYPE_FADE_OUT) +#define FADE_MODE_FADE (FADE_TYPE_FADE_IN | FADE_TYPE_FADE_OUT) +#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_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 text alignment */ +#define ALIGN_LEFT (1 << 0) +#define ALIGN_RIGHT (1 << 1) +#define ALIGN_CENTER (1 << 2) +#define ALIGN_DEFAULT ALIGN_LEFT + +#define VALIGN_TOP (1 << 0) +#define VALIGN_BOTTOM (1 << 1) +#define VALIGN_MIDDLE (1 << 2) +#define VALIGN_DEFAULT VALIGN_TOP + +#define ALIGNED_XPOS(x,w,a) ((a) == ALIGN_CENTER ? (x) - (w) / 2 : \ + (a) == ALIGN_RIGHT ? (x) - (w) : (x)) +#define ALIGNED_YPOS(y,h,v) ((v) == VALIGN_MIDDLE ? (y) - (h) / 2 : \ + (v) == VALIGN_BOTTOM ? (y) - (h) : (y)) +#define ALIGNED_TEXT_XPOS(p) ALIGNED_XPOS((p)->x, (p)->width, (p)->align) +#define ALIGNED_TEXT_YPOS(p) ALIGNED_YPOS((p)->y, (p)->height, (p)->valign) + /* values for redraw_mask */ #define REDRAW_NONE (0) #define REDRAW_ALL (1 << 0) @@ -213,10 +278,6 @@ #define REDRAW_FPS (1 << 11) #define REDRAWTILES_THRESHOLD (SCR_FIELDX * SCR_FIELDY / 2) -#define FADE_MODE_FADE_IN 0 -#define FADE_MODE_FADE_OUT 1 -#define FADE_MODE_CROSSFADE 2 - #define IN_GFX_SCREEN(x, y) (x >= gfx.sx && x < gfx.sx + gfx.sxsize && \ y >= gfx.sy && y < gfx.sy + gfx.sysize) #define IN_GFX_DOOR(x, y) (x >= gfx.dx && x < gfx.dx + gfx.dxsize && \ @@ -226,7 +287,8 @@ /* values for mouse cursor */ #define CURSOR_DEFAULT 0 -#define CURSOR_PLAYFIELD 1 +#define CURSOR_NONE 1 +#define CURSOR_PLAYFIELD 2 /* fundamental game speed values */ #define ONE_SECOND_DELAY 1000 /* delay value for one second */ @@ -289,6 +351,7 @@ #define TAPES_DIRECTORY "tapes" #define SCORES_DIRECTORY "scores" #define DOCS_DIRECTORY "docs" +#define CACHE_DIRECTORY "cache" #if !defined(PLATFORM_MSDOS) #define GFX_CLASSIC_SUBDIR "gfx_classic" @@ -300,6 +363,22 @@ #define MUS_CLASSIC_SUBDIR "mus_orig" #endif +#if defined(CREATE_SPECIAL_EDITION_RND_JUE) +#define GFX_DEFAULT_SUBDIR "jue0" +#define SND_DEFAULT_SUBDIR "jue0" +#define MUS_DEFAULT_SUBDIR "jue0" +#else +#define GFX_DEFAULT_SUBDIR GFX_CLASSIC_SUBDIR +#define SND_DEFAULT_SUBDIR SND_CLASSIC_SUBDIR +#define MUS_DEFAULT_SUBDIR MUS_CLASSIC_SUBDIR +#endif + +#if defined(CREATE_SPECIAL_EDITION) +#define GFX_FALLBACK_FILENAME "fallback.pcx" +#define SND_FALLBACK_FILENAME "fallback.wav" +#define MUS_FALLBACK_FILENAME "fallback.wav" +#endif + /* file names and filename extensions */ #if !defined(PLATFORM_MSDOS) #define LEVELSETUP_DIRECTORY "levelsetup" @@ -313,6 +392,7 @@ #define GRAPHICSINFO_FILENAME "graphicsinfo.conf" #define SOUNDSINFO_FILENAME "soundsinfo.conf" #define MUSICINFO_FILENAME "musicinfo.conf" +#define ARTWORKINFO_CACHE_FILE "artworkinfo.cache" #define LEVELFILE_EXTENSION "level" #define TAPEFILE_EXTENSION "tape" #define SCOREFILE_EXTENSION "score" @@ -328,6 +408,7 @@ #define GRAPHICSINFO_FILENAME "gfxinfo.cnf" #define SOUNDSINFO_FILENAME "sndinfo.cnf" #define MUSICINFO_FILENAME "musinfo.cnf" +#define ARTWORKINFO_CACHE_FILE "artinfo.cac" #define LEVELFILE_EXTENSION "lvl" #define TAPEFILE_EXTENSION "tap" #define SCOREFILE_EXTENSION "sco" @@ -416,6 +497,21 @@ #define NUM_TREE_TYPES 4 +#define INFOTEXT_UNDEFINED "" +#define INFOTEXT_GRAPHICS_DIR "Custom Graphics" +#define INFOTEXT_SOUNDS_DIR "Custom Sounds" +#define INFOTEXT_MUSIC_DIR "Custom Music" +#define INFOTEXT_LEVEL_DIR "Level Sets" + +#define TREE_INFOTEXT(t) ((t) == TREE_TYPE_LEVEL_DIR ? \ + INFOTEXT_LEVEL_DIR : \ + (t) == TREE_TYPE_GRAPHICS_DIR ? \ + INFOTEXT_GRAPHICS_DIR : \ + (t) == TREE_TYPE_SOUNDS_DIR ? \ + INFOTEXT_SOUNDS_DIR : \ + (t) == TREE_TYPE_MUSIC_DIR ? \ + INFOTEXT_MUSIC_DIR : \ + INFOTEXT_UNDEFINED) /* values for artwork handling */ #define LEVELDIR_ARTWORK_SET_PTR(leveldir, type) \ @@ -460,6 +556,13 @@ (setup).override_level_sounds : \ (setup).override_level_music) +#define GFX_OVERRIDE_ARTWORK(type) \ + ((type) == ARTWORK_TYPE_GRAPHICS ? \ + gfx.override_level_graphics : \ + (type) == ARTWORK_TYPE_SOUNDS ? \ + gfx.override_level_sounds : \ + gfx.override_level_music) + #define ARTWORK_FIRST_NODE(artwork, type) \ ((type) == ARTWORK_TYPE_GRAPHICS ? \ (artwork).gfx_first : \ @@ -505,6 +608,12 @@ (type) == ARTWORK_TYPE_MUSIC ? \ options.music_directory : "") +#define UPDATE_BUSY_STATE() \ +{ \ + if (gfx.draw_busy_anim_function != NULL) \ + gfx.draw_busy_anim_function(); \ +} + /* type definitions */ typedef int (*EventFilter)(const Event *); @@ -516,7 +625,10 @@ struct ProgramInfo { char *command_basepath; /* directory that contains the program */ char *command_basename; /* base filename of the program binary */ - char *userdata_directory; /* personal user data 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; char *window_title; @@ -524,6 +636,7 @@ struct ProgramInfo char *x11_icon_filename; char *x11_iconmask_filename; + char *sdl_icon_filename; char *msdos_cursor_filename; char *cookie_prefix; @@ -552,20 +665,32 @@ struct OptionInfo char *sounds_directory; char *music_directory; char *docs_directory; + char *execute_command; + char *special_flags; + boolean serveronly; boolean network; boolean verbose; boolean debug; + boolean debug_x11_sync; +}; + +struct ScreenModeInfo +{ + int width, height; }; struct VideoSystemInfo { int default_depth; int width, height, depth; + boolean fullscreen_available; boolean fullscreen_enabled; + struct ScreenModeInfo *fullscreen_modes; + char *fullscreen_mode_current; }; struct AudioSystemInfo @@ -619,6 +744,8 @@ struct GfxInfo int vx, vy; int vxsize, vysize; + int win_xsize, win_ysize; + int draw_deactivation_mask; int draw_background_mask; @@ -627,11 +754,20 @@ struct GfxInfo Bitmap *background_bitmap; int background_bitmap_mask; + boolean override_level_graphics; + boolean override_level_sounds; + boolean override_level_music; + + boolean draw_init_text; + int num_fonts; struct FontBitmapInfo *font_bitmap_info; int (*select_font_function)(int); + int (*get_font_from_token_function)(char *); int anim_random_frame; + + void (*draw_busy_anim_function)(void); }; struct JoystickInfo @@ -673,6 +809,7 @@ struct SetupEditorInfo boolean el_diamond_caves; boolean el_dx_boulderdash; boolean el_chars; + boolean el_steel_chars; boolean el_custom; boolean el_user_defined; boolean el_dynamic; @@ -696,6 +833,7 @@ struct SetupEditorCascadeInfo boolean el_dc; boolean el_dx; boolean el_chars; + boolean el_steel_chars; boolean el_ce; boolean el_ge; boolean el_ref; @@ -711,10 +849,21 @@ struct SetupShortcutInfo Key focus_player[MAX_PLAYERS]; Key focus_player_all; + + Key tape_eject; + Key tape_stop; + Key tape_pause; + Key tape_record; + Key tape_play; + + Key sound_simple; + Key sound_loops; + Key sound_music; }; struct SetupSystemInfo { + char *sdl_videodriver; char *sdl_audiodriver; int audio_fragment_size; }; @@ -728,11 +877,10 @@ struct SetupInfo boolean sound_music; boolean sound_simple; boolean toons; - boolean double_buffering; - boolean direct_draw; /* !double_buffering (redundant!) */ boolean scroll_delay; + boolean scroll_delay_value; boolean soft_scrolling; - boolean fading; + boolean fade_screens; boolean autorecord; boolean show_titlescreen; boolean quick_doors; @@ -741,18 +889,21 @@ struct SetupInfo boolean skip_levels; boolean time_limit; boolean fullscreen; + char *fullscreen_mode; boolean ask_on_escape; boolean ask_on_escape_editor; boolean quick_switch; boolean input_on_focus; boolean prefer_aga_graphics; + int game_frame_delay; + boolean sp_show_border_elements; char *graphics_set; char *sounds_set; char *music_set; - boolean override_level_graphics; - boolean override_level_sounds; - boolean override_level_music; + int override_level_graphics; /* not boolean -- can also be "AUTO" */ + int override_level_sounds; /* not boolean -- can also be "AUTO" */ + int override_level_music; /* not boolean -- can also be "AUTO" */ struct SetupEditorInfo editor; struct SetupEditorCascadeInfo editor_cascade; @@ -783,8 +934,10 @@ struct TreeInfo 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 *year; /* optional year of creation for levels or artwork */ 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 */ char *graphics_set_ecs; /* special EMC custom graphics set (ECS graphics) */ char *graphics_set_aga; /* special EMC custom graphics set (AGA graphics) */ @@ -798,6 +951,8 @@ struct TreeInfo char *level_filename; /* filename of level file (for packed level file) */ char *level_filetype; /* type of levels in level directory or level file */ + char *special_flags; /* flags for special actions performed on level file */ + 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) */ @@ -816,6 +971,8 @@ struct TreeInfo 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 */ + + char *infotext; /* optional text to describe the tree type (headline) */ }; typedef struct TreeInfo TreeInfo; @@ -876,6 +1033,7 @@ struct FileInfo boolean redefined; boolean fallback_to_default; + boolean default_is_cloned; }; struct SetupFileList @@ -939,6 +1097,36 @@ struct ArtworkListInfo void (*free_artwork)(void *); /* destructor function */ }; +struct XY +{ + int x, y; +}; + +struct Rect +{ + int x, y; + int width, height; +}; + +struct MenuPosInfo +{ + int x, y; + int width, height; + int align, valign; +}; + +struct TextPosInfo +{ + int x, y; + int width, height; + int align, valign; + int size; + int font, font_alt; + boolean draw_masked; + int sort_priority; + int id; +}; + /* ========================================================================= */ /* exported variables */ @@ -980,7 +1168,7 @@ extern int FrameCounter; /* function definitions */ void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *, - char *, char *, char *, int); + char *, char *, char *, char *, char *, int); void InitExitFunction(void (*exit_function)(int)); void InitPlatformDependentStuff(void); @@ -989,20 +1177,25 @@ void ClosePlatformDependentStuff(void); void InitGfxFieldInfo(int, int, int, int, int, int, int, int, Bitmap *); void InitGfxDoor1Info(int, int, int, int); void InitGfxDoor2Info(int, int, int, int); +void InitGfxWindowInfo(int, int); void InitGfxScrollbufferInfo(int, int); +void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void)); +void InitGfxCustomArtworkInfo(); void SetDrawDeactivationMask(int); void SetDrawBackgroundMask(int); +void SetWindowBackgroundBitmap(Bitmap *); void SetMainBackgroundBitmap(Bitmap *); void SetDoorBackgroundBitmap(Bitmap *); void InitVideoDisplay(void); void CloseVideoDisplay(void); -void InitVideoBuffer(DrawBuffer **,DrawWindow **, int,int,int, boolean); +void InitVideoBuffer(int, int, int, boolean); Bitmap *CreateBitmapStruct(void); Bitmap *CreateBitmap(int, int, int); void FreeBitmap(Bitmap *); void BlitBitmap(Bitmap *, Bitmap *, int, int, int, int, int, int); -void FadeScreen(Bitmap *bitmap, int, int, int); +void FadeRectangle(Bitmap *bitmap, 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); @@ -1047,6 +1240,7 @@ void PeekEvent(Event *event); Key GetEventKey(KeyEvent *, boolean); KeyMod HandleKeyModState(Key, int); KeyMod GetKeyModState(); +KeyMod GetKeyModStateFromEvents(); boolean CheckCloseWindowEvent(ClientMessageEvent *); void InitJoysticks();