#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
#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
#define MAX_INITIAL_INVENTORY_SIZE 8
/* often used screen positions */
+#if 0
#define SX 8
#define SY 8
#define REAL_SX (SX - 2)
#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
#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
#define DXSIZE 100
#define DYSIZE 280
#define VXSIZE DXSIZE
#define VYSIZE 100
#define EXSIZE DXSIZE
#define EYSIZE (VYSIZE + 44)
+#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)
#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
#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
#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_SHORTCUTS 7
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_1 8
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_2 9
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_3 10
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_4 11
+#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_5 12
+#define GFX_SPECIAL_ARG_SETUP_CHOOSE_ARTWORK 13
+#define GFX_SPECIAL_ARG_SETUP_CHOOSE_OTHER 14
-#define NUM_SPECIAL_GFX_SETUP_ARGS 11
+#define NUM_SPECIAL_GFX_SETUP_ARGS 15
/* values for image configuration suffixes */
#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 */
#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
/* program information and versioning definitions */
#define PROGRAM_VERSION_MAJOR 3
-#define PROGRAM_VERSION_MINOR 2
-#define PROGRAM_VERSION_PATCH 6
-#define PROGRAM_VERSION_BUILD 2
+#define PROGRAM_VERSION_MINOR 3
+#define PROGRAM_VERSION_PATCH 1
+#define PROGRAM_VERSION_BUILD 3
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
-#define PROGRAM_COPYRIGHT_STRING "Copyright ©1995-2009 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"
#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.)
int anim_mode;
};
+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];
int year;
int month;
int day;
+
+ enum
+ {
+ DATE_SRC_CLOCK,
+ DATE_SRC_LEVELFILE
+ } src;
};
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 */
int fading_status;
int fading_type;
#endif
+
+ boolean use_envelope_request;
};
struct ElementChangeInfo
/* ---------- 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 */
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)
};
+extern Bitmap *bitmap_db_store;
extern Bitmap *bitmap_db_cross;
extern Bitmap *bitmap_db_field;
extern Bitmap *bitmap_db_panel;
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];
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 SX, SY;
+extern int REAL_SX, REAL_SY;
+extern int DX, DY;
+extern int VX, VY;
+extern int EX, EY;
+extern int dDX, dDY;
+extern int SXSIZE, SYSIZE;
+extern int FULL_SXSIZE, FULL_SYSIZE;
+extern int TILESIZE_VAR;
+
extern int FX, FY;
extern int ScrollStepSize;
extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos;
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;
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 PreviewInfo preview;