X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=0e2259a58bd9cbf579dbf59c86df5f943c2e18a1;hb=2486a7a849210371bb59e733e37b0271a4332d8b;hp=68f1eed082c22ec8b93d9b9e902c93f65ca9849d;hpb=ade0034b74cb1213bfe0a73213f459081e10b85a;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 68f1eed0..0e2259a5 100644 --- a/src/main.h +++ b/src/main.h @@ -24,14 +24,20 @@ #include "libgame/libgame.h" #include "game_em/game_em.h" +#include "game_sp/game_sp.h" #include "conf_gfx.h" /* include auto-generated data structure definitions */ #include "conf_snd.h" /* include auto-generated data structure definitions */ #include "conf_mus.h" /* include auto-generated data structure definitions */ + +#define NEW_TILESIZE 1 +#define NEW_SCROLL 1 + #define IMG_UNDEFINED (-1) #define IMG_EMPTY IMG_EMPTY_SPACE -#define IMG_SP_EMPTY IMG_SP_EMPTY_SPACE +#define IMG_SP_EMPTY IMG_EMPTY_SPACE +#define IMG_SP_EMPTY_SPACE IMG_EMPTY_SPACE #define IMG_EXPLOSION IMG_DEFAULT_EXPLODING #define IMG_CHAR_START IMG_CHAR_SPACE #define IMG_STEEL_CHAR_START IMG_STEEL_CHAR_SPACE @@ -40,13 +46,17 @@ #define SND_UNDEFINED (-1) #define MUS_UNDEFINED (-1) +#if 0 #define WIN_XSIZE 672 #define WIN_YSIZE 560 +#endif #define DEFAULT_FULLSCREEN_MODE "800x600" +#if 0 #define SCR_FIELDX 17 #define SCR_FIELDY 17 +#endif #define MAX_BUF_XSIZE (SCR_FIELDX + 2) #define MAX_BUF_YSIZE (SCR_FIELDY + 2) #define MIN_LEV_FIELDX 3 @@ -940,6 +950,7 @@ #define MAX_INITIAL_INVENTORY_SIZE 8 /* often used screen positions */ +#if 0 #define SX 8 #define SY 8 #define REAL_SX (SX - 2) @@ -950,9 +961,12 @@ #define VY 400 #define EX DX #define EY (VY - 44) +#endif #define TILESIZE 32 #define TILEX TILESIZE #define TILEY TILESIZE +#define TILEX_VAR TILESIZE_VAR +#define TILEY_VAR TILESIZE_VAR #define MINI_TILESIZE (TILESIZE / 2) #define MINI_TILEX MINI_TILESIZE #define MINI_TILEY MINI_TILESIZE @@ -961,18 +975,53 @@ #define MICRO_TILEY MICRO_TILESIZE #define MIDPOSX (SCR_FIELDX / 2) #define MIDPOSY (SCR_FIELDY / 2) +#if NEW_TILESIZE +#if NEW_SCROLL +#if 0 +#define SXSIZE (SCR_FIELDX * TILEX_VAR) +#define SYSIZE (SCR_FIELDY * TILEY_VAR) +#endif +#define FXSIZE ((2 + SCR_FIELDX + 2) * TILEX_VAR) +#define FYSIZE ((2 + SCR_FIELDY + 2) * TILEY_VAR) +#else +#if 0 +#define SXSIZE (SCR_FIELDX * TILEX_VAR) +#define SYSIZE (SCR_FIELDY * TILEY_VAR) +#endif +#define FXSIZE ((SCR_FIELDX + 2) * TILEX_VAR) +#define FYSIZE ((SCR_FIELDY + 2) * TILEY_VAR) +#endif +#else +#if NEW_SCROLL +#if 0 #define SXSIZE (SCR_FIELDX * TILEX) #define SYSIZE (SCR_FIELDY * TILEY) +#endif +#define FXSIZE ((2 + SCR_FIELDX + 2) * TILEX) +#define FYSIZE ((2 + SCR_FIELDY + 2) * TILEY) +#else +#if 0 +#define SXSIZE (SCR_FIELDX * TILEX) +#define SYSIZE (SCR_FIELDY * TILEY) +#endif #define FXSIZE ((SCR_FIELDX + 2) * TILEX) #define FYSIZE ((SCR_FIELDY + 2) * TILEY) +#endif +#endif + +#if 0 #define DXSIZE 100 #define DYSIZE 280 #define VXSIZE DXSIZE #define VYSIZE 100 #define EXSIZE DXSIZE #define EYSIZE (VYSIZE + 44) +#endif + +#if 0 #define FULL_SXSIZE (2 + SXSIZE + 2) #define FULL_SYSIZE (2 + SYSIZE + 2) +#endif #define MICROLEVEL_XSIZE ((STD_LEV_FIELDX + 2) * MICRO_TILEX) #define MICROLEVEL_YSIZE ((STD_LEV_FIELDY + 2) * MICRO_TILEY) #define MICROLEVEL_XPOS (SX + (SXSIZE - MICROLEVEL_XSIZE) / 2) @@ -1516,7 +1565,9 @@ #define EL_QUICKSAND_FAST_EMPTY 861 #define EL_QUICKSAND_FAST_FULL 862 -#define NUM_FILE_ELEMENTS 863 +#define EL_FROM_LEVEL_TEMPLATE 863 + +#define NUM_FILE_ELEMENTS 864 /* "real" (and therefore drawable) runtime elements */ @@ -1811,17 +1862,19 @@ #define GFX_SPECIAL_ARG_TITLE 3 #define GFX_SPECIAL_ARG_MAIN 4 #define GFX_SPECIAL_ARG_LEVELS 5 -#define GFX_SPECIAL_ARG_SCORES 6 -#define GFX_SPECIAL_ARG_EDITOR 7 -#define GFX_SPECIAL_ARG_INFO 8 -#define GFX_SPECIAL_ARG_SETUP 9 -#define GFX_SPECIAL_ARG_PLAYING 10 -#define GFX_SPECIAL_ARG_DOOR 11 -#define GFX_SPECIAL_ARG_PANEL 12 -#define GFX_SPECIAL_ARG_PREVIEW 13 -#define GFX_SPECIAL_ARG_CRUMBLED 14 - -#define NUM_SPECIAL_GFX_ARGS 15 +#define GFX_SPECIAL_ARG_LEVELNR 6 +#define GFX_SPECIAL_ARG_SCORES 7 +#define GFX_SPECIAL_ARG_EDITOR 8 +#define GFX_SPECIAL_ARG_INFO 9 +#define GFX_SPECIAL_ARG_SETUP 10 +#define GFX_SPECIAL_ARG_PLAYING 11 +#define GFX_SPECIAL_ARG_DOOR 12 +#define GFX_SPECIAL_ARG_TAPE 13 +#define GFX_SPECIAL_ARG_PANEL 14 +#define GFX_SPECIAL_ARG_PREVIEW 15 +#define GFX_SPECIAL_ARG_CRUMBLED 16 + +#define NUM_SPECIAL_GFX_ARGS 17 /* these additional definitions are currently only used for draw offsets */ #define GFX_SPECIAL_ARG_INFO_MAIN 0 @@ -1836,6 +1889,8 @@ #define NUM_SPECIAL_GFX_INFO_ARGS 8 /* these additional definitions are currently only used for draw offsets */ +/* (must match SETUP_MODE_* values as defined in src/screens.c) */ +/* (should also match corresponding entries in src/conf_gfx.c) */ #define GFX_SPECIAL_ARG_SETUP_MAIN 0 #define GFX_SPECIAL_ARG_SETUP_GAME 1 #define GFX_SPECIAL_ARG_SETUP_EDITOR 2 @@ -1843,12 +1898,17 @@ #define GFX_SPECIAL_ARG_SETUP_SOUND 4 #define GFX_SPECIAL_ARG_SETUP_ARTWORK 5 #define GFX_SPECIAL_ARG_SETUP_INPUT 6 -#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_1 7 -#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_2 8 -#define GFX_SPECIAL_ARG_SETUP_CHOOSE_ARTWORK 9 -#define GFX_SPECIAL_ARG_SETUP_CHOOSE_OTHER 10 +#define GFX_SPECIAL_ARG_SETUP_TOUCH 7 +#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS 8 +#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_1 9 +#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_2 10 +#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_3 11 +#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_4 12 +#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_5 13 +#define GFX_SPECIAL_ARG_SETUP_CHOOSE_ARTWORK 14 +#define GFX_SPECIAL_ARG_SETUP_CHOOSE_OTHER 15 -#define NUM_SPECIAL_GFX_SETUP_ARGS 11 +#define NUM_SPECIAL_GFX_SETUP_ARGS 16 /* values for image configuration suffixes */ @@ -1898,8 +1958,14 @@ #define GFX_ARG_ALIGN 43 #define GFX_ARG_VALIGN 44 #define GFX_ARG_SORT_PRIORITY 45 +#define GFX_ARG_CLASS 46 +#define GFX_ARG_STYLE 47 +#define GFX_ARG_ACTIVE_XOFFSET 48 +#define GFX_ARG_ACTIVE_YOFFSET 49 +#define GFX_ARG_PRESSED_XOFFSET 50 +#define GFX_ARG_PRESSED_YOFFSET 51 -#define NUM_GFX_ARGS 46 +#define NUM_GFX_ARGS 52 /* values for sound configuration suffixes */ @@ -1939,23 +2005,24 @@ #define FONT_ENVELOPE_2 19 #define FONT_ENVELOPE_3 20 #define FONT_ENVELOPE_4 21 -#define FONT_INPUT_1_ACTIVE 22 -#define FONT_INPUT_2_ACTIVE 23 -#define FONT_INPUT_1 24 -#define FONT_INPUT_2 25 -#define FONT_OPTION_OFF 26 -#define FONT_OPTION_ON 27 -#define FONT_VALUE_1 28 -#define FONT_VALUE_2 29 -#define FONT_VALUE_OLD 30 -#define FONT_LEVEL_NUMBER_ACTIVE 31 -#define FONT_LEVEL_NUMBER 32 -#define FONT_TAPE_RECORDER 33 -#define FONT_GAME_INFO 34 -#define FONT_INFO_ELEMENTS 35 -#define FONT_INFO_LEVELSET 36 - -#define NUM_FONTS 37 +#define FONT_REQUEST 22 +#define FONT_INPUT_1_ACTIVE 23 +#define FONT_INPUT_2_ACTIVE 24 +#define FONT_INPUT_1 25 +#define FONT_INPUT_2 26 +#define FONT_OPTION_OFF 27 +#define FONT_OPTION_ON 28 +#define FONT_VALUE_1 29 +#define FONT_VALUE_2 30 +#define FONT_VALUE_OLD 31 +#define FONT_LEVEL_NUMBER_ACTIVE 32 +#define FONT_LEVEL_NUMBER 33 +#define FONT_TAPE_RECORDER 34 +#define FONT_GAME_INFO 35 +#define FONT_INFO_ELEMENTS 36 +#define FONT_INFO_LEVELSET 37 + +#define NUM_FONTS 38 #define NUM_INITIAL_FONTS 4 #if 0 @@ -1979,24 +2046,25 @@ #define GAME_MODE_TITLE 3 #define GAME_MODE_MAIN 4 #define GAME_MODE_LEVELS 5 -#define GAME_MODE_SCORES 6 -#define GAME_MODE_EDITOR 7 -#define GAME_MODE_INFO 8 -#define GAME_MODE_SETUP 9 -#define GAME_MODE_PLAYING 10 -#define GAME_MODE_PSEUDO_DOOR 11 -#define GAME_MODE_PSEUDO_PANEL 12 -#define GAME_MODE_PSEUDO_PREVIEW 13 -#define GAME_MODE_PSEUDO_CRUMBLED 14 +#define GAME_MODE_LEVELNR 6 +#define GAME_MODE_SCORES 7 +#define GAME_MODE_EDITOR 8 +#define GAME_MODE_INFO 9 +#define GAME_MODE_SETUP 10 +#define GAME_MODE_PLAYING 11 +#define GAME_MODE_PSEUDO_DOOR 12 +#define GAME_MODE_PSEUDO_TAPE 13 +#define GAME_MODE_PSEUDO_PANEL 14 +#define GAME_MODE_PSEUDO_PREVIEW 15 +#define GAME_MODE_PSEUDO_CRUMBLED 16 /* there are no special config file suffixes for these modes */ -#define GAME_MODE_PSEUDO_TYPENAME 15 -#define GAME_MODE_QUIT 16 +#define GAME_MODE_PSEUDO_TYPENAME 17 +#define GAME_MODE_QUIT 18 /* special definitions currently only used for custom artwork configuration */ #define MUSIC_PREFIX_BACKGROUND 0 #define NUM_MUSIC_PREFIXES 1 -#define MAX_LEVELS 1000 /* definitions for demo animation lists */ #define HELPANIM_LIST_NEXT -1 @@ -2004,14 +2072,14 @@ /* program information and versioning definitions */ -#define PROGRAM_VERSION_MAJOR 3 -#define PROGRAM_VERSION_MINOR 2 -#define PROGRAM_VERSION_PATCH 6 -#define PROGRAM_VERSION_BUILD 1 +#define PROGRAM_VERSION_MAJOR 4 +#define PROGRAM_VERSION_MINOR 0 +#define PROGRAM_VERSION_PATCH 0 +#define PROGRAM_VERSION_BUILD 0 #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" -#define PROGRAM_COPYRIGHT_STRING "Copyright ©1995-2008 by Holger Schemel" +#define PROGRAM_COPYRIGHT_STRING "Copyright ©1995-2014 by Holger Schemel" #define PROGRAM_EMAIL_STRING "info@artsoft.org" #define PROGRAM_WEBSITE_STRING "http://www.artsoft.org/" #define PROGRAM_GAME_BY_STRING "A Game by Artsoft Entertainment" @@ -2045,7 +2113,7 @@ #define X11_ICON_FILENAME "rocks_icon.xbm" #define X11_ICONMASK_FILENAME "rocks_iconmask.xbm" -#define SDL_ICON_FILENAME "rocks_icon_32x32.pcx" +#define SDL_ICON_FILENAME "RocksIcon32x32.png" #define MSDOS_POINTER_FILENAME "mouse.pcx" /* file version numbers for resource files (levels, tapes, score, setup, etc.) @@ -2099,8 +2167,9 @@ #define GAME_ENGINE_TYPE_UNKNOWN LEVEL_FILE_TYPE_UNKNOWN #define GAME_ENGINE_TYPE_RND LEVEL_FILE_TYPE_RND #define GAME_ENGINE_TYPE_EM LEVEL_FILE_TYPE_EM +#define GAME_ENGINE_TYPE_SP LEVEL_FILE_TYPE_SP -#define NUM_ENGINE_TYPES 3 +#define NUM_ENGINE_TYPES 4 struct BorderInfo @@ -2109,6 +2178,17 @@ struct BorderInfo boolean draw_masked_when_fading; }; +struct RequestButtonInfo +{ + struct TextPosInfo yes; + struct TextPosInfo no; + struct TextPosInfo confirm; + struct TextPosInfo player_1; + struct TextPosInfo player_2; + struct TextPosInfo player_3; + struct TextPosInfo player_4; +}; + struct MenuMainButtonInfo { struct MenuPosInfo name; @@ -2221,6 +2301,17 @@ struct MenuInfo struct DoorInfo { + struct DoorPartPosInfo part_1; + struct DoorPartPosInfo part_2; + struct DoorPartPosInfo part_3; + struct DoorPartPosInfo part_4; + struct DoorPartPosInfo part_5; + struct DoorPartPosInfo part_6; + struct DoorPartPosInfo part_7; + struct DoorPartPosInfo part_8; + + struct DoorPartPosInfo panel; + int width; int height; int step_offset; @@ -2228,6 +2319,21 @@ struct DoorInfo int anim_mode; }; +struct RequestInfo +{ + struct RequestButtonInfo button; + int x, y; + int width, height; + int border_size; + int line_spacing; + int step_offset; + int step_delay; + int anim_mode; + boolean autowrap; + boolean centered; + boolean wrap_single_words; +}; + struct PreviewInfo { int x, y; @@ -2240,6 +2346,29 @@ struct PreviewInfo int anim_mode; }; +struct EditorPaletteInfo +{ + int x, y; + int cols, rows; + + struct XY element_left; + struct XY element_middle; + struct XY element_right; +}; + +struct EditorInfo +{ + struct EditorPaletteInfo palette; +}; + +struct ViewportInfo +{ + struct RectWithBorder window; + struct RectWithBorder playfield[NUM_SPECIAL_GFX_ARGS]; + struct RectWithBorder door_1[NUM_SPECIAL_GFX_ARGS]; + struct RectWithBorder door_2[NUM_SPECIAL_GFX_ARGS]; +}; + struct HiScore { char Name[MAX_PLAYER_NAME_LEN + 1]; @@ -2281,6 +2410,12 @@ struct DateInfo int year; int month; int day; + + enum + { + DATE_SRC_CLOCK, + DATE_SRC_LEVELFILE + } src; }; struct LevelInfo @@ -2291,6 +2426,7 @@ struct LevelInfo /* level stored in native format for the alternative native game engines */ struct LevelInfo_EM *native_em_level; + struct LevelInfo_SP *native_sp_level; int file_version; /* file format version the level is stored with */ int game_version; /* game release version the level was created with */ @@ -2383,6 +2519,7 @@ struct LevelInfo boolean shifted_relocation; /* no level centering when relocating player */ boolean can_pass_to_walkable; /* player can pass to empty or walkable tile */ boolean grow_into_diggable; /* amoeba can grow into anything diggable */ + boolean auto_exit_sokoban; /* automatically finish solved Sokoban levels */ boolean continuous_snapping; /* repeated snapping without releasing key */ boolean block_snap_field; /* snapping blocks field to show animation */ @@ -2427,6 +2564,8 @@ struct GlobalInfo int fading_status; int fading_type; #endif + + boolean use_envelope_request; }; struct ElementChangeInfo @@ -2540,7 +2679,7 @@ struct ElementInfo /* ---------- special element property values ---------- */ - unsigned long properties[NUM_EP_BITFIELDS]; /* element base properties */ + unsigned int properties[NUM_EP_BITFIELDS]; /* element base properties */ boolean use_gfx_element; /* use custom graphic element */ int gfx_element_initial; /* initial optional custom graphic element */ @@ -2680,6 +2819,14 @@ struct GraphicInfo int align, valign; /* optional setting for drawing title screens */ int sort_priority; /* optional setting for drawing title screens */ + int class; + int style; + + int active_xoffset; + int active_yoffset; + int pressed_xoffset; + int pressed_yoffset; + boolean use_image_size; /* use image size as default width and height */ #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) @@ -2756,10 +2903,15 @@ struct HelpAnimInfo }; +extern Bitmap *bitmap_db_store; extern Bitmap *bitmap_db_cross; extern Bitmap *bitmap_db_field; extern Bitmap *bitmap_db_panel; +#if 0 extern Bitmap *bitmap_db_door; +#endif +extern Bitmap *bitmap_db_door_1; +extern Bitmap *bitmap_db_door_2; extern Bitmap *bitmap_db_toons; extern Pixmap tile_clipmask[]; extern DrawBuffer *fieldbuffer; @@ -2776,7 +2928,15 @@ extern SDL_Thread *server_thread; extern int key_joystick_mapping; +#if 1 +#if NEW_SCROLL +extern boolean redraw[2 + MAX_LEV_FIELDX + 2][2 + MAX_LEV_FIELDY + 2]; +#else +extern boolean redraw[MAX_LEV_FIELDX + 2][MAX_LEV_FIELDY + 2]; +#endif +#else extern boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; +#endif extern int redraw_x1, redraw_y1; extern short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -2821,6 +2981,21 @@ extern int ActiveFont[NUM_FONTS]; extern int lev_fieldx, lev_fieldy; extern int scroll_x, scroll_y; +extern int WIN_XSIZE, WIN_YSIZE; +extern int SCR_FIELDX, SCR_FIELDY; +extern int REAL_SX, REAL_SY; +extern int SX, SY; +extern int DX, DY; +extern int VX, VY; +extern int EX, EY; +extern int dDX, dDY; +extern int FULL_SXSIZE, FULL_SYSIZE; +extern int SXSIZE, SYSIZE; +extern int DXSIZE, DYSIZE; +extern int VXSIZE, VYSIZE; +extern int EXSIZE, EYSIZE; +extern int TILESIZE_VAR; + extern int FX, FY; extern int ScrollStepSize; extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos; @@ -2847,6 +3022,7 @@ extern struct HiScore highscore[]; extern struct TapeInfo tape; extern struct GlobalInfo global; extern struct BorderInfo border; +extern struct ViewportInfo viewport; extern struct TitleFadingInfo fading; extern struct TitleFadingInfo fading_none; extern struct TitleFadingInfo title_initial_default; @@ -2856,10 +3032,12 @@ extern struct TitleMessageInfo titlemessage_initial[]; extern struct TitleMessageInfo titlemessage_default; extern struct TitleMessageInfo titlemessage[]; extern struct TitleMessageInfo readme; -extern struct InitInfo init; +extern struct InitInfo init, init_last; extern struct MenuInfo menu; extern struct DoorInfo door_1, door_2; +extern struct RequestInfo request; extern struct PreviewInfo preview; +extern struct EditorInfo editor; extern struct ElementInfo element_info[]; extern struct ElementNameInfo element_name_info[]; extern struct ElementActionInfo element_action_info[];