rocksndiamonds-3.1.2
[rocksndiamonds.git] / src / main.h
index 7805f3496b79e0e167eeb75878a1d9a01f60ad7f..2de55a4e53d280cdbe06df2ffa67c4c25877d8dc 100644 (file)
 #define EP_WALK_TO_OBJECT      81
 #define EP_DEADLY              82
 
-/* values for internal purpose only (game engine) */
-#define EP_HAS_ACTION          83
-#define EP_CAN_CHANGE_OR_HAS_ACTION    84
-
-#define NUM_ELEMENT_PROPERTIES 85
+#define NUM_ELEMENT_PROPERTIES 83
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 #define CE_PLAYER_PUSHES_X     13
 #define CE_PLAYER_COLLECTS_X   14
 #define CE_PLAYER_DROPS_X      15
-#define CE_COUNT_AT_ZERO       16
-#define CE_COUNT_AT_ZERO_OF_X  17
+#define CE_BY_PLAYER_OBSOLETE  16      /* obsolete; now CE_BY_DIRECT_ACTION */
+#define CE_BY_COLLISION_OBSOLETE 17    /* obsolete; now CE_BY_DIRECT_ACTION */
 #define CE_BY_OTHER_ACTION     18      /* activates other element events */
 #define CE_BY_DIRECT_ACTION    19      /* activates direct element events */
 #define CE_PLAYER_DIGS_X       20
 
 #define CE_BITMASK_DEFAULT     0
 
+#if 1
+
 #define CH_EVENT_VAR(e,c)      (element_info[e].change->has_event[c])
 #define CH_ANY_EVENT_VAR(e,c)  (element_info[e].has_change_event[c])
 
 #define SET_ANY_CHANGE_EVENT(e,c,v) (IS_CUSTOM_ELEMENT(e) ?            \
                                     CH_ANY_EVENT_VAR(e,c) = (v) : 0)
 
-/* values for player bitmasks */
-#define PLAYER_BITS_NONE       0
-#define PLAYER_BITS_1          (1 << 0)
-#define PLAYER_BITS_2          (1 << 1)
-#define PLAYER_BITS_3          (1 << 2)
-#define PLAYER_BITS_4          (1 << 3)
-#define PLAYER_BITS_ANY                (PLAYER_BITS_1 | \
-                                PLAYER_BITS_2 | \
-                                PLAYER_BITS_3 | \
-                                PLAYER_BITS_4)
-#define PLAYER_BITS_TRIGGER    (1 << 4)
+#else
+
+#define CH_EVENT_BIT(c)                (1 << (c))
+#define CH_EVENT_VAR(e)                (element_info[e].change->events)
+#define CH_ANY_EVENT_VAR(e)    (element_info[e].change_events)
+
+#define HAS_CHANGE_EVENT(e,c)  (IS_CUSTOM_ELEMENT(e) &&                  \
+                                (CH_EVENT_VAR(e) & CH_EVENT_BIT(c)) != 0)
+#define HAS_ANY_CHANGE_EVENT(e,c) (IS_CUSTOM_ELEMENT(e) &&               \
+                                (CH_ANY_EVENT_VAR(e) & CH_EVENT_BIT(c)) != 0)
+#define SET_CHANGE_EVENT(e,c,v)        (IS_CUSTOM_ELEMENT(e) ?                   \
+                                ((v) ?                                   \
+                                 (CH_EVENT_VAR(e) |=  CH_EVENT_BIT(c)) : \
+                                 (CH_EVENT_VAR(e) &= ~CH_EVENT_BIT(c))) : 0)
+#define SET_ANY_CHANGE_EVENT(e,c,v) (IS_CUSTOM_ELEMENT(e) ?              \
+                              ((v) ?                                     \
+                               (CH_ANY_EVENT_VAR(e) |=  CH_EVENT_BIT(c)) : \
+                               (CH_ANY_EVENT_VAR(e) &= ~CH_EVENT_BIT(c))) : 0)
+#endif
 
 /* values for change side for custom elements */
-#define CH_SIDE_NONE           MV_NONE
+#define CH_SIDE_NONE           MV_NO_MOVING
 #define CH_SIDE_LEFT           MV_LEFT
 #define CH_SIDE_RIGHT          MV_RIGHT
 #define CH_SIDE_TOP            MV_UP
 #define CH_SIDE_ANY            MV_ANY_DIRECTION
 
 /* values for change player for custom elements */
-#define CH_PLAYER_NONE         PLAYER_BITS_NONE
-#define CH_PLAYER_1            PLAYER_BITS_1
-#define CH_PLAYER_2            PLAYER_BITS_2
-#define CH_PLAYER_3            PLAYER_BITS_3
-#define CH_PLAYER_4            PLAYER_BITS_4
-#define CH_PLAYER_ANY          PLAYER_BITS_ANY
+#define CH_PLAYER_NONE         0
+#define CH_PLAYER_1            (1 << 0)
+#define CH_PLAYER_2            (1 << 1)
+#define CH_PLAYER_3            (1 << 2)
+#define CH_PLAYER_4            (1 << 3)
+#define CH_PLAYER_ANY          (CH_PLAYER_1 | CH_PLAYER_2 | CH_PLAYER_3 | \
+                                CH_PLAYER_4)
 
 /* values for change page for custom elements */
 #define CH_PAGE_ANY_FILE       (0xff)
 #define CP_WHEN_REMOVABLE      4
 #define CP_WHEN_WALKABLE       5
 
-/* values for change actions for custom elements */
-#define CA_NO_ACTION           0
-#define CA_EXIT_PLAYER         1
-#define CA_KILL_PLAYER         2
-#define CA_RESTART_LEVEL       3
-#define CA_SHOW_ENVELOPE       4
-#define CA_ADD_KEY             5
-#define CA_DEL_KEY             6
-#define CA_SET_PLAYER_SPEED    7
-#define CA_SET_GEMS            8
-#define CA_SET_TIME            9
-#define CA_SET_SCORE           10
-#define CA_SET_CE_SCORE                11
-#define CA_SET_CE_COUNT                12
-#define CA_SET_DYNABOMB_NUMBER 13
-#define CA_SET_DYNABOMB_SIZE   14
-#define CA_SET_DYNABOMB_POWER  15
-#define CA_TOGGLE_PLAYER_GRAVITY  16
-#define CA_ENABLE_PLAYER_GRAVITY  17
-#define CA_DISABLE_PLAYER_GRAVITY 18
-
-/* values for change action mode for custom elements */
-#define CA_MODE_UNDEFINED      0
-#define CA_MODE_SET            1
-#define CA_MODE_ADD            2
-#define CA_MODE_SUBTRACT       3
-#define CA_MODE_MULTIPLY       4
-#define CA_MODE_DIVIDE         5
-#define CA_MODE_MODULO         6
-
-/* values for change action parameters for custom elements */
-#define CA_ARG_MIN             0
-#define CA_ARG_0               0
-#define CA_ARG_1               1
-#define CA_ARG_2               2
-#define CA_ARG_3               3
-#define CA_ARG_4               4
-#define CA_ARG_5               5
-#define CA_ARG_10              10
-#define CA_ARG_100             100
-#define CA_ARG_1000            1000
-#define CA_ARG_MAX             9999
-#define CA_ARG_PLAYER          10000
-#define CA_ARG_PLAYER_HEADLINE (CA_ARG_PLAYER + 0)
-#define CA_ARG_PLAYER_1                (CA_ARG_PLAYER + PLAYER_BITS_1)
-#define CA_ARG_PLAYER_2                (CA_ARG_PLAYER + PLAYER_BITS_2)
-#define CA_ARG_PLAYER_3                (CA_ARG_PLAYER + PLAYER_BITS_3)
-#define CA_ARG_PLAYER_4                (CA_ARG_PLAYER + PLAYER_BITS_4)
-#define CA_ARG_PLAYER_ANY      (CA_ARG_PLAYER + PLAYER_BITS_ANY)
-#define CA_ARG_PLAYER_TRIGGER  (CA_ARG_PLAYER + PLAYER_BITS_TRIGGER)
-#define CA_ARG_NUMBER          20000
-#define CA_ARG_NUMBER_HEADLINE (CA_ARG_NUMBER + 0)
-#define CA_ARG_NUMBER_MIN      (CA_ARG_NUMBER + 1)
-#define CA_ARG_NUMBER_MAX      (CA_ARG_NUMBER + 2)
-#define CA_ARG_NUMBER_NORMAL   (CA_ARG_NUMBER + 3)
-#define CA_ARG_NUMBER_RESET    (CA_ARG_NUMBER + 4)
-#define CA_ARG_NUMBER_CE_SCORE (CA_ARG_NUMBER + 5)
-#define CA_ARG_NUMBER_CE_COUNT (CA_ARG_NUMBER + 6)
-#define CA_ARG_NUMBER_CE_DELAY (CA_ARG_NUMBER + 7)
-#define CA_ARG_ELEMENT         30000
-#define CA_ARG_ELEMENT_HEADLINE        (CA_ARG_ELEMENT + 0)
-#define CA_ARG_ELEMENT_TARGET  (CA_ARG_ELEMENT + 1)
-#define CA_ARG_ELEMENT_TRIGGER (CA_ARG_ELEMENT + 2)
-#define CA_ARG_UNDEFINED       30999
-
 /* values for custom move patterns (bits 0 - 3: basic move directions) */
 #define MV_BIT_TOWARDS_PLAYER  4
 #define MV_BIT_AWAY_FROM_PLAYER        5
 #define MV_BIT_TURNING_LEFT_RIGHT 14
 #define MV_BIT_TURNING_RIGHT_LEFT 15
 #define MV_BIT_TURNING_RANDOM  16
-#define MV_BIT_WIND_DIRECTION  17
 
 /* values for custom move patterns */
 #define MV_TOWARDS_PLAYER      (1 << MV_BIT_TOWARDS_PLAYER)
 #define MV_TURNING_LEFT_RIGHT  (1 << MV_BIT_TURNING_LEFT_RIGHT)
 #define MV_TURNING_RIGHT_LEFT  (1 << MV_BIT_TURNING_RIGHT_LEFT)
 #define MV_TURNING_RANDOM      (1 << MV_BIT_TURNING_RANDOM)
-#define MV_WIND_DIRECTION      (1 << MV_BIT_WIND_DIRECTION)
 
 /* values for initial move direction (bits 0 - 3: basic move directions) */
 #define MV_START_BIT_PREVIOUS  4
 
 /* values for initial move direction */
-#define MV_START_NONE          (MV_NONE)
-#define MV_START_AUTOMATIC     (MV_NONE)
+#define MV_START_AUTOMATIC     (MV_NO_MOVING)
 #define MV_START_LEFT          (MV_LEFT)
 #define MV_START_RIGHT         (MV_RIGHT)
 #define MV_START_UP            (MV_UP)
                                HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_EXPLOSION)
 #define COULD_MOVE_INTO_ACID(e)        HAS_PROPERTY(e, EP_COULD_MOVE_INTO_ACID)
 #define MAYBE_DONT_COLLIDE_WITH(e) HAS_PROPERTY(e, EP_MAYBE_DONT_COLLIDE_WITH)
-#define HAS_ACTION(e)          HAS_PROPERTY(e, EP_HAS_ACTION)
-#define CAN_CHANGE_OR_HAS_ACTION(e)    \
-                               HAS_PROPERTY(e, EP_CAN_CHANGE_OR_HAS_ACTION)
 
 /* special macros used in game engine */
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&              \
 #define PLAYERINFO(x,y)                (&stored_player[StorePlayer[x][y]-EL_PLAYER_1])
 #define SHIELD_ON(p)           ((p)->shield_normal_time_left > 0)
 
+#if 1
+
 #define ENEMY_PROTECTED_FIELD(x,y)     (IS_PROTECTED(Feld[x][y]) ||       \
                                         IS_PROTECTED(Back[x][y]))
 #define EXPLOSION_PROTECTED_FIELD(x,y)  (IS_EXPLOSION_PROOF(Feld[x][y]))
 #define PLAYER_EXPLOSION_PROTECTED(x,y) (SHIELD_ON(PLAYERINFO(x, y)) ||           \
                                         EXPLOSION_PROTECTED_FIELD(x, y))
 
+#else
+
+#define PROTECTED_FIELD(x,y)   (IS_ACCESSIBLE_INSIDE(Feld[x][y]) &&    \
+                                IS_INDESTRUCTIBLE(Feld[x][y]))
+#define PLAYER_ENEMY_PROTECTED(x,y)    (SHIELD_ON(PLAYERINFO(x, y)) || \
+                                PROTECTED_FIELD(x, y))
+#define PLAYER_EXPLOSION_PROTECTED(x,y)        (SHIELD_ON(PLAYERINFO(x, y)) || \
+                                PROTECTED_FIELD(x, y))
+#endif
+
 #define PLAYER_SWITCHING(p,x,y)        ((p)->is_switching &&                   \
                                 (p)->switch_x == (x) && (p)->switch_y == (y))
 
 #define MIN_ELEMENT_CONTENTS   1
 #define STD_ELEMENT_CONTENTS   4
 #define MAX_ELEMENT_CONTENTS   8
+#define NUM_MAGIC_BALL_CONTENTS        8
 
 #define LEVEL_SCORE_ELEMENTS   16      /* level elements with score */
 
 #define ACTION_SLURPED_BY_SPRING       49
 #define ACTION_TWINKLING               50
 #define ACTION_SPLASHING               51
-#define ACTION_PAGE_1                  52
-#define ACTION_PAGE_2                  53
-#define ACTION_PAGE_3                  54
-#define ACTION_PAGE_4                  55
-#define ACTION_PAGE_5                  56
-#define ACTION_PAGE_6                  57
-#define ACTION_PAGE_7                  58
-#define ACTION_PAGE_8                  59
-#define ACTION_PAGE_9                  60
-#define ACTION_PAGE_10                 61
-#define ACTION_PAGE_11                 62
-#define ACTION_PAGE_12                 63
-#define ACTION_PAGE_13                 64
-#define ACTION_PAGE_14                 65
-#define ACTION_PAGE_15                 66
-#define ACTION_PAGE_16                 67
-#define ACTION_PAGE_17                 68
-#define ACTION_PAGE_18                 69
-#define ACTION_PAGE_19                 70
-#define ACTION_PAGE_20                 71
-#define ACTION_PAGE_21                 72
-#define ACTION_PAGE_22                 73
-#define ACTION_PAGE_23                 74
-#define ACTION_PAGE_24                 75
-#define ACTION_PAGE_25                 76
-#define ACTION_PAGE_26                 77
-#define ACTION_PAGE_27                 78
-#define ACTION_PAGE_28                 79
-#define ACTION_PAGE_29                 80
-#define ACTION_PAGE_30                 81
-#define ACTION_PAGE_31                 82
-#define ACTION_PAGE_32                 83
-#define ACTION_OTHER                   84
-
-#define NUM_ACTIONS                    85
+#define ACTION_OTHER                   52
+
+#define NUM_ACTIONS                    53
 
 #define ACTION_BORING_LAST             ACTION_BORING_10
 #define ACTION_SLEEPING_LAST           ACTION_SLEEPING_3
 #define GFX_ARG_POST_DELAY_RANDOM      35
 #define GFX_ARG_NAME                   36
 #define GFX_ARG_SCALE_UP_FACTOR                37
-#define GFX_ARG_CLONE_FROM             38
 
-#define NUM_GFX_ARGS                   39
+#define NUM_GFX_ARGS                   38
 
 
 /* values for sound configuration suffixes */
 
 /* program information and versioning definitions */
 
-#define RELEASE_3_1_2                  FALSE
+#define RELEASE_312                    TRUE
 
-#if RELEASE_3_1_2
 #define PROGRAM_VERSION_MAJOR          3
 #define PROGRAM_VERSION_MINOR          1
 #define PROGRAM_VERSION_PATCH          2
 #define PROGRAM_VERSION_BUILD          0
-#else
-/* !!! make sure that packaging script can find unique version number !!! */
-#define PROGRAM_VERSION_MAJOR          3
-#define PROGRAM_VERSION_MINOR          2
-#define PROGRAM_VERSION_PATCH          0
-#define PROGRAM_VERSION_BUILD          5
-#endif
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
-#define PROGRAM_COPYRIGHT_STRING       "Copyright ©1995-2005 by Holger Schemel"
+#define PROGRAM_COPYRIGHT_STRING       "Copyright ©1995-2006 by Holger Schemel"
 
 #define ICON_TITLE_STRING              PROGRAM_TITLE_STRING
 #define COOKIE_PREFIX                  "ROCKSNDIAMONDS"
@@ -1586,11 +1494,6 @@ struct HiScore
   int Score;
 };
 
-struct Content
-{
-  int e[3][3];
-};
-
 struct PlayerInfo
 {
   boolean present;             /* player present in level playfield */
@@ -1657,13 +1560,23 @@ struct PlayerInfo
 
   int show_envelope;
 
+#if 1  /* USE_NEW_MOVE_DELAY */
   int move_delay;
   int move_delay_value;
-  int move_delay_value_next;
+#else
+  unsigned long move_delay;
+  int move_delay_value;
+#endif
+
   int move_delay_reset_counter;
 
+#if 1  /* USE_NEW_PUSH_DELAY */
   int push_delay;
   int push_delay_value;
+#else
+  unsigned long push_delay;
+  unsigned long push_delay_value;
+#endif
 
   unsigned long actual_frame_counter;
 
@@ -1729,26 +1642,17 @@ struct LevelInfo
 
   int score[LEVEL_SCORE_ELEMENTS];
 
-  struct Content yamyam_content[MAX_ELEMENT_CONTENTS];
+  int yamyam_content[MAX_ELEMENT_CONTENTS][3][3];
   int num_yamyam_contents;
 
   int amoeba_speed;
   int amoeba_content;
 
-  int game_of_life[4];
-  int biomaze[4];
-
   int time_magic_wall;
   int time_wheel;
   int time_light;
   int time_timegate;
 
-  int shield_normal_time;
-  int shield_deadly_time;
-
-  int extra_time;
-  int time_orb_time;
-
   /* values for the new EMC elements */
   int android_move_time;
   int android_clone_time;
@@ -1761,7 +1665,7 @@ struct LevelInfo
   int lenses_time;
   int magnify_time;
   int wind_direction_initial;
-  struct Content ball_content[MAX_ELEMENT_CONTENTS];
+  int ball_content[NUM_MAGIC_BALL_CONTENTS][3][3];
   boolean android_array[16];
 
   int can_move_into_acid_bits; /* bitfield to store property for elements */
@@ -1778,6 +1682,11 @@ struct LevelInfo
   boolean block_last_field;    /* player blocks previous field while moving */
   boolean sp_block_last_field; /* player blocks previous field while moving */
 
+#if 0  /* !!! THIS IS NOT A LEVEL SETTING => LOGIC MOVED TO "game.c" !!! */
+  int block_delay;             /* delay for blocking previous field */
+  int sp_block_delay;          /* delay for blocking previous field */
+#endif
+
   /* ('int' instead of 'boolean' because used as selectbox value in editor) */
   int use_step_counter;                /* count steps instead of seconds for level */
 
@@ -1853,7 +1762,7 @@ struct GameInfo
   int belt_dir[4];
   int belt_dir_nr[4];
   int switchgate_pos;
-  int wind_direction;
+  int balloon_dir;
   boolean gravity;
   boolean explosions_delayed;
   boolean envelope_active;
@@ -1863,9 +1772,6 @@ struct GameInfo
   int player_boring_delay_random;
   int player_sleeping_delay_fixed;
   int player_sleeping_delay_random;
-
-  /* values for special game initialization control */
-  boolean restart_level;
 };
 
 struct GlobalInfo
@@ -1888,7 +1794,11 @@ struct ElementChangeInfo
 {
   boolean can_change;          /* use or ignore this change info */
 
+#if 1
   boolean has_event[NUM_CHANGE_EVENTS];                /* change events */
+#else
+  unsigned long events;                /* change events */
+#endif
 
   int trigger_player;          /* player triggering change */
   int trigger_side;            /* side triggering change */
@@ -1902,7 +1812,7 @@ struct ElementChangeInfo
 
   short trigger_element;       /* element triggering change */
 
-  struct Content target_content;/* elements for extended change target */
+  int target_content[3][3];    /* elements for extended change target */
   boolean use_target_content;  /* use extended change target */
   boolean only_if_complete;    /* only use complete target content */
   boolean use_random_replace;  /* use random value for replacing elements */
@@ -1911,11 +1821,6 @@ struct ElementChangeInfo
 
   boolean explode;             /* explode instead of change */
 
-  boolean has_action;          /* execute action on specified condition */
-  int action_type;             /* type of action */
-  int action_mode;             /* mode of action */
-  int action_arg;              /* parameter of action */
-
   /* ---------- internal values used at runtime when playing ---------- */
 
   /* functions that are called before, while and after the change of an
@@ -1927,8 +1832,6 @@ struct ElementChangeInfo
   short actual_trigger_element;        /* element that actually triggered change */
   int actual_trigger_player;   /* player which actually triggered change */
 
-  boolean can_change_or_has_action;    /* can_change | has_action */
-
   /* ---------- internal values used in level editor ---------- */
 
   int direct_action;           /* change triggered by actions on element */
@@ -1993,8 +1896,8 @@ struct ElementInfo
 
   int access_direction;                /* accessible from which direction */
 
-  int collect_score_initial;   /* initial score value for collecting */
-  int collect_count_initial;   /* initial count value for collecting */
+  int collect_score;           /* score value for collecting */
+  int collect_count;           /* count value for collecting */
 
   int push_delay_fixed;                /* constant delay before pushing */
   int push_delay_random;       /* additional random delay before pushing */
@@ -2013,7 +1916,7 @@ struct ElementInfo
 
   int slippery_type;           /* how/where other elements slip away */
 
-  struct Content content;      /* new elements after explosion */
+  int content[3][3];           /* new elements after explosion */
 
   int explosion_type;          /* type of explosion, like 3x3, 3+3 or 1x1 */
   int explosion_delay;         /* duration of explosion of this element */
@@ -2029,14 +1932,21 @@ struct ElementInfo
 
   /* ---------- internal values used at runtime when playing ---------- */
 
+#if 1
   boolean has_change_event[NUM_CHANGE_EVENTS];
+#else
+  unsigned long change_events; /* bitfield for combined change events */
+#endif
 
   int event_page_nr[NUM_CHANGE_EVENTS]; /* page number for each event */
   struct ElementChangeInfo *event_page[NUM_CHANGE_EVENTS]; /* page for event */
 
   boolean in_group[NUM_GROUP_ELEMENTS];
 
-  int collect_score;           /* runtime score value for collecting */
+#if 0
+  boolean can_leave_element;   /* element can leave other element behind */
+  boolean can_leave_element_last;
+#endif
 
   /* ---------- internal values used in level editor ---------- */
 
@@ -2068,9 +1978,6 @@ struct FontInfo
 struct GraphicInfo
 {
   Bitmap *bitmap;
-  int src_image_width;         /* scaled bitmap size, but w/o small images */
-  int src_image_height;                /* scaled bitmap size, but w/o small images */
-
   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 */
@@ -2087,7 +1994,6 @@ struct GraphicInfo
   int diggable_like;           /* element for cloning digging graphics */
   int border_size;             /* border size for "crumbled" graphics */
   int scale_up_factor;         /* optional factor for scaling image up */
-  int clone_from;              /* graphic for cloning *all* settings */
 
   int anim_delay_fixed;                /* optional delay values for bored and   */
   int anim_delay_random;       /* sleeping player animations (animation */
@@ -2175,6 +2081,10 @@ struct HelpAnimInfo
 };
 
 
+#if 0
+extern GC                      tile_clip_gc;
+extern Bitmap                 *pix[];
+#endif
 extern Bitmap                 *bitmap_db_field, *bitmap_db_door;
 extern Pixmap                  tile_clipmask[];
 extern DrawBuffer            *fieldbuffer;
@@ -2200,7 +2110,6 @@ extern short                      MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   ChangeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   ChangePage[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short                   Count[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];