#define TAPE_IS_STOPPED(x) (!(x).recording && !(x).playing)
#define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_PLAYER1])
-#define SHIELD_ON(p) ((p)->shield_passive_time_left > 0)
+#define SHIELD_ON(p) ((p)->shield_normal_time_left > 0)
#define PROTECTED_FIELD(x,y) (IS_TUBE(Feld[x][y]))
#define PLAYER_PROTECTED(x,y) (SHIELD_ON(PLAYERINFO(x, y)) || \
PROTECTED_FIELD(x, y))
+#define PLAYER_NR_GFX(g,i) ((g) + i * (IMG_PLAYER2 - IMG_PLAYER1))
+
+
+#if 0
+
+/* Bitmaps with graphic file */
+#define PIX_BACK 0
+#define PIX_DOOR 1
+#define PIX_TOONS 2
+#define PIX_FONT_BIG 3
+#define PIX_FONT_SMALL 4
+#define PIX_FONT_MEDIUM 5
+#define PIX_FONT_EM 6
+/* Bitmaps without graphic file */
+#define PIX_DB_DOOR 7
+#define PIX_DB_FIELD 8
+
+#define NUM_PICTURES 7
+#define NUM_BITMAPS 9
+
+#else
+
/* Bitmaps with graphic file */
#define PIX_BACK 0
#define PIX_ELEMENTS 1
#define NUM_PICTURES 12
#define NUM_BITMAPS 14
+#endif
+
/* boundaries of arrays etc. */
#define MAX_LEVEL_NAME_LEN 32
#define MAX_LEVEL_AUTHOR_LEN 32
#define EL_TIMEGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 20)
#define EL_PEARL_BREAKING (EL_FIRST_RUNTIME_REAL + 21)
#define EL_TRAP_ACTIVE (EL_FIRST_RUNTIME_REAL + 22)
-#define EL_SPRING_MOVING (EL_FIRST_RUNTIME_REAL + 23)
-#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 24)
-#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 25)
-#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 26)
-#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 27)
-#define EL_AMOEBA_DRIPPING (EL_FIRST_RUNTIME_REAL + 28)
-#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 29)
-#define EL_INVISIBLE_STEELWALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 30)
-#define EL_INVISIBLE_SAND_ACTIVE (EL_FIRST_RUNTIME_REAL + 31)
-#define EL_INVISIBLE_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 32)
-#define EL_CONVEYOR_BELT1_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 33)
-#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 34)
-#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 35)
-#define EL_CONVEYOR_BELT2_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 36)
-#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 37)
-#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 38)
-#define EL_CONVEYOR_BELT3_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 39)
-#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 40)
-#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 41)
-#define EL_CONVEYOR_BELT4_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 42)
-#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 43)
-#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 44)
+#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 23)
+#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 24)
+#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 25)
+#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 26)
+#define EL_AMOEBA_DRIPPING (EL_FIRST_RUNTIME_REAL + 27)
+#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 28)
+#define EL_INVISIBLE_STEELWALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 29)
+#define EL_INVISIBLE_SAND_ACTIVE (EL_FIRST_RUNTIME_REAL + 30)
+#define EL_INVISIBLE_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 31)
+#define EL_CONVEYOR_BELT1_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 32)
+#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 33)
+#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 34)
+#define EL_CONVEYOR_BELT2_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 35)
+#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 36)
+#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 37)
+#define EL_CONVEYOR_BELT3_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 38)
+#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 39)
+#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 40)
+#define EL_CONVEYOR_BELT4_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 41)
+#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 42)
+#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 43)
/* "unreal" (and therefore not drawable) runtime elements */
-#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 45)
+#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 44)
#define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0)
#define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1)
-#define EL_CRACKINGNUT (EL_FIRST_RUNTIME_UNREAL + 2)
-#define EL_ACID_SPLASHING_LEFT (EL_FIRST_RUNTIME_UNREAL + 3)
-#define EL_ACID_SPLASHING_RIGHT (EL_FIRST_RUNTIME_UNREAL + 4)
+#define EL_NUT_CRACKING (EL_FIRST_RUNTIME_UNREAL + 2)
+#define EL_ACID_SPLASH_LEFT (EL_FIRST_RUNTIME_UNREAL + 3)
+#define EL_ACID_SPLASH_RIGHT (EL_FIRST_RUNTIME_UNREAL + 4)
#define EL_AMOEBA_CREATING (EL_FIRST_RUNTIME_UNREAL + 5)
#define EL_AMOEBA_SHRINKING (EL_FIRST_RUNTIME_UNREAL + 6)
#define EL_WALL_GROWING_ACTIVE (EL_FIRST_RUNTIME_UNREAL + 7)
#define GFX_ACTION_PASSING 8
#define GFX_ACTION_IMPACT 9
#define GFX_ACTION_CRACKING 10
-#define GFX_ACTION_ACTIVATING 11
-#define GFX_ACTION_EATING 12
-#define GFX_ACTION_ATTACKING 13
-#define GFX_ACTION_GROWING 14
-#define GFX_ACTION_OTHER 15
-
-#define NUM_GFX_ACTIONS 16
+#define GFX_ACTION_BREAKING 11
+#define GFX_ACTION_ACTIVATING 12
+#define GFX_ACTION_OPENING 13
+#define GFX_ACTION_CLOSING 14
+#define GFX_ACTION_EATING 15
+#define GFX_ACTION_ATTACKING 16
+#define GFX_ACTION_GROWING 17
+#define GFX_ACTION_SHRINKING 18
+#define GFX_ACTION_OTHER 19
+
+#define NUM_GFX_ACTIONS 20
#define NUM_GFX_ACTIONS_MAPPED 8
#define GFX_ARG_OFFSET 2
#define GFX_ARG_VERTICAL 3
#define GFX_ARG_FRAMES 4
-#define GFX_ARG_DELAY 5
-#define GFX_ARG_MODE_LOOP 6
-#define GFX_ARG_MODE_LINEAR 7
-#define GFX_ARG_MODE_PINGPONG 8
-#define GFX_ARG_MODE_PINGPONG2 9
-#define GFX_ARG_MODE_REVERSE 10
-#define GFX_ARG_GLOBAL_SYNC 11
+#define GFX_ARG_START_FRAME 5
+#define GFX_ARG_DELAY 6
+#define GFX_ARG_MODE_LOOP 7
+#define GFX_ARG_MODE_LINEAR 8
+#define GFX_ARG_MODE_PINGPONG 9
+#define GFX_ARG_MODE_PINGPONG2 10
+#define GFX_ARG_MODE_REVERSE 11
+#define GFX_ARG_GLOBAL_SYNC 12
+
+#define NUM_GFX_ARGS 13
+
/* values for sound configuration suffixes */
/* (currently none) */
int key[4];
int dynamite;
int dynabomb_count, dynabomb_size, dynabombs_left, dynabomb_xl;
- int shield_passive_time_left;
- int shield_active_time_left;
+ int shield_normal_time_left;
+ int shield_deadly_time_left;
};
struct LevelInfo
int src_x, src_y; /* derived from (tile sized) .xpos/.ypos */
int offset_x, offset_y; /* x/y offset to next animation frame */
int anim_frames;
+ int anim_start_frame;
int anim_delay; /* important: delay of 1 means "no delay"! */
int anim_mode;
boolean anim_global_sync;
};
extern GC tile_clip_gc;
+#if 0
extern Bitmap *pix[];
+#endif
+extern Bitmap *bitmap_db_field, *bitmap_db_door;
extern Pixmap tile_clipmask[];
extern DrawBuffer *fieldbuffer;
extern DrawBuffer *drawto_field;