#include "libgame/libgame.h"
-#include "conf_gfx.h"
-#include "conf_snd.h"
+#include "conf_gfx.h" /* include auto-generated data structure definitions */
+#include "conf_snd.h" /* include auto-generated data structure definitions */
#define IMG_UNDEFINED (-1)
#define IMG_EMPTY IMG_EMPTY_SPACE
#define EP_BIT_SCHLUESSEL (1 << 2)
#define EP_BIT_PFORTE (1 << 3)
#define EP_BIT_SOLID (1 << 4)
-#define EP_BIT_MASSIVE (1 << 5)
+#define EP_BIT_INDESTRUCTIBLE (1 << 5)
#define EP_BIT_SLIPPERY (1 << 6)
#define EP_BIT_ENEMY (1 << 7)
#define EP_BIT_MAUER (1 << 8)
#define EP_BIT_TUBE (1 << 3)
#define EP_BIT_EM_SLIPPERY_WALL (1 << 4)
+#define EP_BITMASK_DEFAULT 0
+
#define IS_AMOEBALIVE(e) (Properties1[e] & EP_BIT_AMOEBALIVE)
#define IS_AMOEBOID(e) (Properties1[e] & EP_BIT_AMOEBOID)
#define IS_SCHLUESSEL(e) (Properties1[e] & EP_BIT_SCHLUESSEL)
#define IS_PFORTE(e) (Properties1[e] & EP_BIT_PFORTE)
#define IS_SOLID(e) (Properties1[e] & EP_BIT_SOLID)
-#define IS_MASSIVE(e) (Properties1[e] & EP_BIT_MASSIVE)
+#define IS_INDESTRUCTIBLE(e) (Properties1[e] & EP_BIT_INDESTRUCTIBLE)
#define IS_SLIPPERY(e) (Properties1[e] & EP_BIT_SLIPPERY)
#define IS_ENEMY(e) (Properties1[e] & EP_BIT_ENEMY)
#define IS_MAUER(e) (Properties1[e] & EP_BIT_MAUER)
#define IS_ANIMATED(g) (ANIM_FRAMES(g) > 1)
#define IS_NEW_DELAY(f, g) ((f) % ANIM_DELAY(g) == 0)
#define IS_NEW_FRAME(f, g) (IS_ANIMATED(g) && IS_NEW_DELAY(f, g))
+#define IS_NEXT_FRAME(f, g) (IS_NEW_FRAME(f, g) && (f) > 0)
#define IS_LOOP_SOUND(s) (sound_info[s].loop)
#define EL_MOLE 110
#define EL_PENGUIN 111
#define EL_SATELLITE 112
-#define EL_ARROW_BLUE_LEFT 113
-#define EL_ARROW_BLUE_RIGHT 114
-#define EL_ARROW_BLUE_UP 115
-#define EL_ARROW_BLUE_DOWN 116
+#define EL_ARROW_LEFT 113
+#define EL_ARROW_RIGHT 114
+#define EL_ARROW_UP 115
+#define EL_ARROW_DOWN 116
#define EL_PIG 117
#define EL_DRAGON 118
#define EL_CHAR_START 120
#define EL_CHAR_ASCII0 (EL_CHAR_START - 32)
#define EL_CHAR_ASCII0_START (EL_CHAR_ASCII0 + 32)
-#define EL_CHAR_EXCLAM (EL_CHAR_ASCII0 + 33)
-#define EL_CHAR_QUOTEDBL (EL_CHAR_ASCII0 + 34)
-#define EL_CHAR_NUMBERSIGN (EL_CHAR_ASCII0 + 35)
-#define EL_CHAR_DOLLAR (EL_CHAR_ASCII0 + 36)
-#define EL_CHAR_PROCENT (EL_CHAR_ASCII0 + 37)
-#define EL_CHAR_AMPERSAND (EL_CHAR_ASCII0 + 38)
-#define EL_CHAR_APOSTROPHE (EL_CHAR_ASCII0 + 39)
-#define EL_CHAR_PARENLEFT (EL_CHAR_ASCII0 + 40)
-#define EL_CHAR_PARENRIGHT (EL_CHAR_ASCII0 + 41)
-#define EL_CHAR_ASTERISK (EL_CHAR_ASCII0 + 42)
-#define EL_CHAR_PLUS (EL_CHAR_ASCII0 + 43)
-#define EL_CHAR_COMMA (EL_CHAR_ASCII0 + 44)
-#define EL_CHAR_MINUS (EL_CHAR_ASCII0 + 45)
-#define EL_CHAR_PERIOD (EL_CHAR_ASCII0 + 46)
-#define EL_CHAR_SLASH (EL_CHAR_ASCII0 + 47)
-#define EL_CHAR_0 (EL_CHAR_ASCII0 + 48)
-#define EL_CHAR_9 (EL_CHAR_ASCII0 + 57)
-#define EL_CHAR_COLON (EL_CHAR_ASCII0 + 58)
-#define EL_CHAR_SEMICOLON (EL_CHAR_ASCII0 + 59)
-#define EL_CHAR_LESS (EL_CHAR_ASCII0 + 60)
-#define EL_CHAR_EQUAL (EL_CHAR_ASCII0 + 61)
-#define EL_CHAR_GREATER (EL_CHAR_ASCII0 + 62)
-#define EL_CHAR_QUESTION (EL_CHAR_ASCII0 + 63)
-#define EL_CHAR_AT (EL_CHAR_ASCII0 + 64)
-#define EL_CHAR_A (EL_CHAR_ASCII0 + 65)
-#define EL_CHAR_Z (EL_CHAR_ASCII0 + 90)
-#define EL_CHAR_AE (EL_CHAR_ASCII0 + 91)
-#define EL_CHAR_OE (EL_CHAR_ASCII0 + 92)
-#define EL_CHAR_UE (EL_CHAR_ASCII0 + 93)
-#define EL_CHAR_COPYRIGHT (EL_CHAR_ASCII0 + 94)
-#define EL_CHAR_UNDERSCORE (EL_CHAR_ASCII0 + 95)
-#define EL_CHAR_EMPTY (EL_CHAR_ASCII0 + 96)
-#define EL_CHAR_DEGREE (EL_CHAR_ASCII0 + 97)
-#define EL_CHAR_TM (EL_CHAR_ASCII0 + 98)
-#define EL_CHAR_CURSOR (EL_CHAR_ASCII0 + 99)
+
+#include "conf_chr.h" /* include auto-generated data structure definitions */
+
#define EL_CHAR_ASCII0_END (EL_CHAR_ASCII0 + 111)
#define EL_CHAR_END (EL_CHAR_START + 79)
#define EL_UNUSED_359 359
#define EL_CUSTOM_START 360
-#define EL_CUSTOM_1 (EL_CUSTOM_START + 0)
-#define EL_CUSTOM_128 (EL_CUSTOM_START + 127)
+
+#include "conf_cus.h" /* include auto-generated data structure definitions */
+
#define EL_CUSTOM_END (EL_CUSTOM_START + 127)
#define NUM_CUSTOM_ELEMENTS 128
#define EL_INVISIBLE_STEELWALL_HORIZONTAL (EL_FIRST_DUMMY + 10)
#define EL_INVISIBLE_STEELWALL_VERTICAL (EL_FIRST_DUMMY + 11)
#define EL_SAND_CRUMBLED (EL_FIRST_DUMMY + 12)
-#define EL_BD_AMOEBA_PART1 (EL_FIRST_DUMMY + 13)
-#define EL_BD_AMOEBA_PART2 (EL_FIRST_DUMMY + 14)
-#define EL_BD_AMOEBA_PART3 (EL_FIRST_DUMMY + 15)
-#define EL_BD_AMOEBA_PART4 (EL_FIRST_DUMMY + 16)
-#define EL_AMOEBA_WET_PART1 (EL_FIRST_DUMMY + 17)
-#define EL_AMOEBA_WET_PART2 (EL_FIRST_DUMMY + 18)
-#define EL_AMOEBA_WET_PART3 (EL_FIRST_DUMMY + 19)
-#define EL_AMOEBA_WET_PART4 (EL_FIRST_DUMMY + 20)
-#define EL_AMOEBA_DRY_PART1 (EL_FIRST_DUMMY + 21)
-#define EL_AMOEBA_DRY_PART2 (EL_FIRST_DUMMY + 22)
-#define EL_AMOEBA_DRY_PART3 (EL_FIRST_DUMMY + 23)
-#define EL_AMOEBA_DRY_PART4 (EL_FIRST_DUMMY + 24)
-#define EL_AMOEBA_FULL_PART1 (EL_FIRST_DUMMY + 25)
-#define EL_AMOEBA_FULL_PART2 (EL_FIRST_DUMMY + 26)
-#define EL_AMOEBA_FULL_PART3 (EL_FIRST_DUMMY + 27)
-#define EL_AMOEBA_FULL_PART4 (EL_FIRST_DUMMY + 28)
-#define EL_AMOEBA_DEAD_PART1 (EL_FIRST_DUMMY + 29)
-#define EL_AMOEBA_DEAD_PART2 (EL_FIRST_DUMMY + 30)
-#define EL_AMOEBA_DEAD_PART3 (EL_FIRST_DUMMY + 31)
-#define EL_AMOEBA_DEAD_PART4 (EL_FIRST_DUMMY + 32)
-#define EL_DYNABOMB_ACTIVE (EL_FIRST_DUMMY + 33)
-#define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 34)
-#define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 35)
-#define EL_ARROW_RED_LEFT (EL_FIRST_DUMMY + 36)
-#define EL_ARROW_RED_RIGHT (EL_FIRST_DUMMY + 37)
-#define EL_ARROW_RED_UP (EL_FIRST_DUMMY + 38)
-#define EL_ARROW_RED_DOWN (EL_FIRST_DUMMY + 39)
-
-#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 40)
+#define EL_DYNABOMB_ACTIVE (EL_FIRST_DUMMY + 13)
+#define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 14)
+#define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 15)
+
+#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 16)
/* values for graphics/sounds action types */
/* values for image configuration suffixes */
-#define GFX_ARG_XPOS 0
-#define GFX_ARG_YPOS 1
-#define GFX_ARG_OFFSET 2
-#define GFX_ARG_VERTICAL 3
-#define GFX_ARG_XOFFSET 4
-#define GFX_ARG_YOFFSET 5
-#define GFX_ARG_FRAMES 6
-#define GFX_ARG_START_FRAME 7
-#define GFX_ARG_DELAY 8
-#define GFX_ARG_MODE_LOOP 9
-#define GFX_ARG_MODE_LINEAR 10
-#define GFX_ARG_MODE_PINGPONG 11
-#define GFX_ARG_MODE_PINGPONG2 12
-#define GFX_ARG_MODE_RANDOM 13
-#define GFX_ARG_MODE_REVERSE 14
-#define GFX_ARG_GLOBAL_SYNC 15
-
-#define NUM_GFX_ARGS 16
+#define GFX_ARG_X 0
+#define GFX_ARG_Y 1
+#define GFX_ARG_XPOS 2
+#define GFX_ARG_YPOS 3
+#define GFX_ARG_WIDTH 4
+#define GFX_ARG_HEIGHT 5
+#define GFX_ARG_OFFSET 6
+#define GFX_ARG_VERTICAL 7
+#define GFX_ARG_XOFFSET 8
+#define GFX_ARG_YOFFSET 9
+#define GFX_ARG_FRAMES 10
+#define GFX_ARG_START_FRAME 11
+#define GFX_ARG_DELAY 12
+#define GFX_ARG_MODE_LOOP 13
+#define GFX_ARG_MODE_LINEAR 14
+#define GFX_ARG_MODE_PINGPONG 15
+#define GFX_ARG_MODE_PINGPONG2 16
+#define GFX_ARG_MODE_RANDOM 17
+#define GFX_ARG_MODE_REVERSE 18
+#define GFX_ARG_GLOBAL_SYNC 19
+#define GFX_ARG_STEP_OFFSET 20
+#define GFX_ARG_STEP_DELAY 21
+#define GFX_ARG_DIRECTION 22
+#define GFX_ARG_POSITION 23
+#define GFX_ARG_DRAW_XOFFSET 24
+#define GFX_ARG_DRAW_YOFFSET 25
+#define GFX_ARG_NAME 26
+
+#define NUM_GFX_ARGS 27
/* values for sound configuration suffixes */
#define NUM_SND_ARGS 1
+/* values for font configuration */
+
+#define FIRST_IMG_FONT IMG_FONT_INITIAL_1
+#define LAST_IMG_FONT IMG_FONT_NARROW
+
+#define NUM_IMG_FONTS (LAST_IMG_FONT - \
+ FIRST_IMG_FONT + 1)
+#define NUM_INITIAL_FONTS 4
+
+
/* values for game_status */
#define EXITGAME 0
#define MAINMENU 1
#define PROGRAM_VERSION_MAJOR 2
#define PROGRAM_VERSION_MINOR 2
#define PROGRAM_VERSION_PATCH 0
-#define PROGRAM_VERSION_STRING "2.2.0rc3"
+#define PROGRAM_VERSION_STRING "2.2.0rc4"
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
int MovDir, MovPos, GfxPos;
int Frame;
+ int GfxAction;
+
+ boolean use_murphy_graphic;
+
boolean Pushing;
boolean Switching;
boolean LevelSolved, GameOver;
boolean snapped;
int last_move_dir;
- int is_moving;
+ boolean is_moving;
+
+ boolean is_digging;
+ boolean is_waiting;
unsigned long move_delay;
int move_delay_value;
unsigned long push_delay;
unsigned long push_delay_value;
- int frame_reset_delay;
-
unsigned long actual_frame_counter;
int score;
char *autoplay_leveldir;
int autoplay_level_nr;
+ int num_toons;
+
float frames_per_second;
boolean fps_slowdown;
int fps_slowdown_factor;
struct GraphicInfo
{
Bitmap *bitmap;
- int src_x, src_y; /* derived from (tile sized) .xpos/.ypos */
+ int src_x, src_y; /* start position of animation frames */
+ int width, height; /* width/height of each animation frame */
int offset_x, offset_y; /* x/y offset to next animation frame */
int anim_frames;
int anim_start_frame;
int anim_mode;
boolean anim_global_sync;
+ int step_offset; /* optional step offset of toon animations */
+ int step_delay; /* optional step delay of toon animations */
+
+ int draw_x, draw_y; /* optional offset for drawing fonts chars */
+
#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
Pixmap clip_mask; /* single-graphic-only clip mask for X11 */
GC clip_gc; /* single-graphic-only clip gc for X11 */