X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=107d5ae08aed10897ac9abbc841d1976df36b4c9;hp=162e153653a74d67cc1a458f387d75b5309e2fcd;hb=0a69f419ffadee5822bc103be9e85d378e0d0274;hpb=c3c190ae0fb103b7843b84b964bdfa1acb9b0091 diff --git a/src/libgame/system.h b/src/libgame/system.h index 162e1536..107d5ae0 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -1,15 +1,13 @@ -/*********************************************************** -* Artsoft Retro-Game Library * -*----------------------------------------------------------* -* (c) 1994-2006 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* system.h * -***********************************************************/ +// ============================================================================ +// Artsoft Retro-Game Library +// ---------------------------------------------------------------------------- +// (c) 1995-2014 by Artsoft Entertainment +// Holger Schemel +// info@artsoft.org +// http://www.artsoft.org/ +// ---------------------------------------------------------------------------- +// system.h +// ============================================================================ #ifndef SYSTEM_H #define SYSTEM_H @@ -138,6 +136,10 @@ (b) <= MB_WHEEL_DOWN) #define DEFAULT_WHEEL_STEPS 3 +#define BUTTON_STEPSIZE(b) ((b) == MB_LEFTBUTTON ? 1 : \ + (b) == MB_MIDDLEBUTTON ? 5 : \ + (b) == MB_RIGHTBUTTON ? 10 : 1) + /* values for move directions */ #define MV_BIT_LEFT 0 #define MV_BIT_RIGHT 1 @@ -236,6 +238,7 @@ #define ANIM_VERTICAL (1 << 11) #define ANIM_CENTERED (1 << 12) #define ANIM_STATIC_PANEL (1 << 13) +#define ANIM_ALL (1 << 14) #define ANIM_DEFAULT ANIM_LOOP @@ -253,7 +256,8 @@ #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_TYPE_CURTAIN (1 << 5) +#define FADE_TYPE_SKIP (1 << 6) #define FADE_MODE_NONE (FADE_TYPE_NONE) #define FADE_MODE_FADE_IN (FADE_TYPE_FADE_IN) @@ -262,11 +266,23 @@ #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_CURTAIN (FADE_MODE_TRANSFORM | FADE_TYPE_CURTAIN) #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 toon positions */ +#define POS_UNDEFINED -1 +#define POS_LEFT 0 +#define POS_RIGHT 1 +#define POS_TOP 2 +#define POS_UPPER 3 +#define POS_MIDDLE 4 +#define POS_LOWER 5 +#define POS_BOTTOM 6 +#define POS_ANY 7 + /* values for text alignment */ #define ALIGN_LEFT (1 << 0) #define ALIGN_RIGHT (1 << 1) @@ -289,30 +305,14 @@ #define REDRAW_NONE (0) #define REDRAW_ALL (1 << 0) #define REDRAW_FIELD (1 << 1) -#define REDRAW_TILES (1 << 2) -#define REDRAW_DOOR_1 (1 << 3) -#define REDRAW_VIDEO_1 (1 << 4) -#define REDRAW_VIDEO_2 (1 << 5) -#define REDRAW_VIDEO_3 (1 << 6) -#define REDRAW_MICROLEVEL (1 << 7) -#define REDRAW_MICROLABEL (1 << 8) -#define REDRAW_FROM_BACKBUFFER (1 << 9) -#define REDRAW_DOOR_2 (REDRAW_VIDEO_1 | \ - REDRAW_VIDEO_2 | \ - REDRAW_VIDEO_3) -#define REDRAW_DOOR_3 (1 << 10) +#define REDRAW_DOOR_1 (1 << 2) +#define REDRAW_DOOR_2 (1 << 3) +#define REDRAW_DOOR_3 (1 << 4) +#define REDRAW_FPS (1 << 5) + #define REDRAW_DOORS (REDRAW_DOOR_1 | \ REDRAW_DOOR_2 | \ REDRAW_DOOR_3) -#define REDRAW_MAIN (REDRAW_FIELD | \ - REDRAW_TILES | \ - REDRAW_MICROLEVEL) -#define REDRAW_FPS (1 << 11) - -/* on modern graphics systems and when using the SDL target, the old tile redraw - optimization can slow things down a lot due to many small blits compared to - one single playfield-sized blit (especially observed on Mac OS X with SDL) */ -#define REDRAWTILES_THRESHOLD 0 #define IN_GFX_FIELD_PLAY(x, y) (x >= gfx.sx && x < gfx.sx + gfx.sxsize && \ y >= gfx.sy && y < gfx.sy + gfx.sysize) @@ -370,6 +370,9 @@ /* default value for undefined filename */ #define UNDEFINED_FILENAME "[NONE]" +/* default value for undefined levelset */ +#define UNDEFINED_LEVELSET "[NONE]" + /* default value for undefined parameter */ #define ARG_DEFAULT "[DEFAULT]" @@ -406,21 +409,15 @@ #define SND_CLASSIC_SUBDIR "snd_classic" #define MUS_CLASSIC_SUBDIR "mus_classic" -#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 +#define GFX_DEFAULT_SUBDIR (setup.internal.default_graphics_set) +#define SND_DEFAULT_SUBDIR (setup.internal.default_sounds_set) +#define MUS_DEFAULT_SUBDIR (setup.internal.default_music_set) -#if defined(CREATE_SPECIAL_EDITION) -#define GFX_FALLBACK_FILENAME "fallback.pcx" -#define SND_FALLBACK_FILENAME "fallback.wav" -#define MUS_FALLBACK_FILENAME "fallback.wav" -#endif +#define GFX_FALLBACK_FILENAME (setup.internal.fallback_graphics_file) +#define SND_FALLBACK_FILENAME (setup.internal.fallback_sounds_file) +#define MUS_FALLBACK_FILENAME (setup.internal.fallback_music_file) + +#define DEFAULT_LEVELSET (setup.internal.default_level_series) /* file names and filename extensions */ #define LEVELSETUP_DIRECTORY "levelsetup" @@ -439,7 +436,15 @@ #define TAPEFILE_EXTENSION "tape" #define SCOREFILE_EXTENSION "score" -#define ERROR_BASENAME "stderr.txt" +#define LOG_OUT_BASENAME "stdout.txt" +#define LOG_ERR_BASENAME "stderr.txt" + +#define LOG_OUT_ID 0 +#define LOG_ERR_ID 1 +#define NUM_LOGS 2 + +#define STRING_PARENT_DIRECTORY ".." +#define STRING_TOP_DIRECTORY "/" #define CHAR_PATH_SEPARATOR_UNIX '/' #define CHAR_PATH_SEPARATOR_DOS '\\' @@ -659,22 +664,24 @@ struct ProgramInfo char *command_basepath; /* path to the program binary */ char *command_basename; /* base filename of the program binary */ + char *config_filename; /* optional global program config filename */ + char *maindata_path; /* main game data (installation) 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; char *icon_title; - char *sdl_icon_filename; + char *icon_filename; char *cookie_prefix; - char *error_filename; /* filename where to write error messages to */ - FILE *error_file; /* (used instead of 'stderr' on some systems) */ + char *log_filename[NUM_LOGS]; /* log filenames for out/err messages */ + 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_major; int version_minor; @@ -709,7 +716,6 @@ struct OptionInfo boolean network; boolean verbose; boolean debug; - boolean debug_x11_sync; }; struct ScreenModeInfo @@ -732,6 +738,8 @@ struct VideoSystemInfo boolean window_scaling_available; int window_scaling_percent; char *window_scaling_quality; + + boolean initialized; }; struct AudioSystemInfo @@ -796,6 +804,10 @@ struct GfxInfo Bitmap *background_bitmap; int background_bitmap_mask; +#if USE_FINAL_SCREEN_BITMAP + Bitmap *final_screen_bitmap; +#endif + boolean clipping_enabled; int clip_x, clip_y; int clip_width, clip_height; @@ -814,6 +826,9 @@ struct GfxInfo int anim_random_frame; void (*draw_busy_anim_function)(void); + void (*draw_global_anim_function)(void); + + int cursor_mode; }; struct JoystickInfo @@ -927,6 +942,30 @@ struct SetupSystemInfo int audio_fragment_size; }; +struct SetupInternalInfo +{ + char *program_title; + char *program_author; + char *program_email; + char *program_website; + char *program_copyright; + char *program_company; + + char *program_icon_file; + + char *default_graphics_set; + char *default_sounds_set; + char *default_music_set; + + char *fallback_graphics_file; + char *fallback_sounds_file; + char *fallback_music_file; + + char *default_level_series; + + boolean choose_from_top_leveldir; +}; + struct SetupInfo { char *player_name; @@ -938,7 +977,7 @@ struct SetupInfo boolean toons; boolean scroll_delay; boolean scroll_delay_value; - boolean soft_scrolling; + char *engine_snapshot_mode; boolean fade_screens; boolean autorecord; boolean show_titlescreen; @@ -959,6 +998,7 @@ struct SetupInfo int game_frame_delay; boolean sp_show_border_elements; boolean small_game_graphics; + boolean show_snapshot_buttons; char *graphics_set; char *sounds_set; @@ -977,6 +1017,7 @@ struct SetupInfo struct SetupInputInfo input[MAX_PLAYERS]; struct SetupTouchInfo touch; struct SetupSystemInfo system; + struct SetupInternalInfo internal; struct OptionInfo options; }; @@ -1205,13 +1246,15 @@ struct DoorPartPosInfo struct TextPosInfo { int x, y; + int xoffset; /* special case for tape date and time */ + int xoffset2; /* special case for tape date */ int width, height; int align, valign; - int size; + int size; /* also used for suffix ".digits" */ int font, font_alt; boolean draw_masked; boolean draw_player; /* special case for network player buttons */ - int sort_priority; + int sort_priority; /* also used for suffix ".draw_order" */ int id; }; @@ -1243,11 +1286,6 @@ extern int level_nr; extern struct LevelStats level_stats[]; -extern Display *display; -extern Visual *visual; -extern int screen; -extern Colormap cmap; - extern DrawWindow *window; extern DrawBuffer *backbuffer; extern DrawBuffer *drawto; @@ -1259,7 +1297,6 @@ extern boolean keyrepeat_status; #endif extern int redraw_mask; -extern int redraw_tiles; extern int FrameCounter; @@ -1286,12 +1323,15 @@ 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)(void)); void InitGfxCustomArtworkInfo(); +void InitGfxOtherSettings(); void SetDrawDeactivationMask(int); void SetDrawBackgroundMask(int); void SetWindowBackgroundBitmap(Bitmap *); void SetMainBackgroundBitmap(Bitmap *); void SetDoorBackgroundBitmap(Bitmap *); +void SetRedrawMaskFromArea(int, int, int, int); void LimitScreenUpdates(boolean); @@ -1309,11 +1349,14 @@ void FadeRectangle(Bitmap *bitmap, int, int, int, int, int, int, int, void FillRectangle(Bitmap *, int, int, int, int, Pixel); void ClearRectangle(Bitmap *, int, int, int, int); void ClearRectangleOnBackground(Bitmap *, int, int, int, int); -void SetClipMask(Bitmap *, GC, Pixmap); -void SetClipOrigin(Bitmap *, GC, int, int); void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int); boolean DrawingOnBackground(int, int); +boolean DrawingAreaChanged(); 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); +void BlitToScreen(Bitmap *, int, int, int, int, int, int); +void BlitToScreenMasked(Bitmap *, int, int, int, int, int, int); void DrawSimpleBlackLine(Bitmap *, int, int, int, int); void DrawSimpleWhiteLine(Bitmap *, int, int, int, int); void DrawLines(Bitmap *, struct XY *, int, Pixel); @@ -1321,11 +1364,8 @@ Pixel GetPixel(Bitmap *, int, int); Pixel GetPixelFromRGB(Bitmap *, unsigned int,unsigned int,unsigned int); Pixel GetPixelFromRGBcompact(Bitmap *, unsigned int); -void FlushDisplay(void); -void SyncDisplay(void); void KeyboardAutoRepeatOn(void); void KeyboardAutoRepeatOff(void); -boolean PointerInWindow(DrawWindow *); boolean SetVideoMode(boolean); boolean ChangeVideoModeIfNeeded(boolean); @@ -1334,8 +1374,11 @@ Bitmap *LoadCustomImage(char *); void ReloadCustomImage(Bitmap *, char *); Bitmap *ZoomBitmap(Bitmap *, int, int); -void CreateBitmapWithSmallBitmaps(Bitmap *, int, int); -void ScaleBitmap(Bitmap *, int); +void ReCreateGameTileSizeBitmap(Bitmap **); +void CreateBitmapWithSmallBitmaps(Bitmap **, int, int); +void CreateBitmapTextures(Bitmap **); +void FreeBitmapTextures(Bitmap **); +void ScaleBitmap(Bitmap **, int); void SetMouseCursor(int);