rnd-20060313-1-src
[rocksndiamonds.git] / src / main.h
index 3fcf5c17f971a05ffbf70a46e85f598ef8cab8a0..bb7d8766f9146d446bc7d0b3be113c8293074556 100644 (file)
@@ -50,8 +50,8 @@
 #define MIN_LEV_FIELDY                 3
 #define STD_LEV_FIELDX                 64
 #define STD_LEV_FIELDY                 32
-#define MAX_LEV_FIELDX                 128
-#define MAX_LEV_FIELDY                 128
+#define MAX_LEV_FIELDX                 MAX_PLAYFIELD_WIDTH
+#define MAX_LEV_FIELDY                 MAX_PLAYFIELD_HEIGHT
 
 #define SCREENX(a)                     ((a) - scroll_x)
 #define SCREENY(a)                     ((a) - scroll_y)
 #define GFX_ELEMENT(e)         (element_info[e].use_gfx_element ?      \
                                 element_info[e].gfx_element : e)
 
+#if 1
+#define TILE_GFX_ELEMENT(x, y)                                         \
+                  (GfxElement[x][y] != EL_UNDEFINED &&                 \
+                   Feld[x][y] != EL_EXPLOSION ?                        \
+                   GfxElement[x][y] : Feld[x][y])
+#else
+#define TILE_GFX_ELEMENT(x, y)                                         \
+       GFX_ELEMENT(GfxElement[x][y] != EL_UNDEFINED &&                 \
+                   Feld[x][y] != EL_EXPLOSION ?                        \
+                   GfxElement[x][y] : Feld[x][y])
+#endif
+
 /* !!! "use sound" deactivated due to problems with level "bug machine" !!! */
 /* (solution: add separate "use sound of element" to level file and editor) */
 #if 0
 #define EL_CASCADE_TOGGLE(e)   (IS_EDITOR_CASCADE_INACTIVE(e) ? (e) + 1 :    \
                                 IS_EDITOR_CASCADE_ACTIVE(e)   ? (e) - 1 : (e))
 
-#define EL_NAME(e)             (element_info[e].token_name)
+#define EL_NAME(e)             ((e) >= 0 ? element_info[e].token_name : "(?)")
 
 /* fundamental game speed values */
 #define ONE_SECOND_DELAY       1000    /* delay value for one second */
 #define EL_EM_GATE_3_GRAY              252
 #define EL_EM_GATE_4_GRAY              253
 
-#define EL_UNUSED_254                  254
-#define EL_UNUSED_255                  255
+#define EL_EM_DYNAMITE                 254
+#define EL_EM_DYNAMITE_ACTIVE          255
 
 #define EL_PEARL                       256
 #define EL_CRYSTAL                     257
 
 #define EL_TRIGGER_CE_VALUE            705
 
-#define NUM_FILE_ELEMENTS              706
+#define EL_YAMYAM_LEFT                 706
+#define EL_YAMYAM_RIGHT                        707
+#define EL_YAMYAM_UP                   708
+#define EL_YAMYAM_DOWN                 709
+
+#define NUM_FILE_ELEMENTS              710
 
 
 /* "real" (and therefore drawable) runtime elements */
 #define ACTION_TURNING_FROM_DOWN       46
 #define ACTION_SMASHED_BY_ROCK         47
 #define ACTION_SMASHED_BY_SPRING       48
-#define ACTION_SLURPING                        49
+#define ACTION_EATING                  49
 #define ACTION_TWINKLING               50
 #define ACTION_SPLASHING               51
 #define ACTION_PAGE_1                  52
 
 #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"
@@ -1813,6 +1830,7 @@ struct PlayerInfo
   boolean is_pushing;
   boolean is_switching;
   boolean is_dropping;
+  boolean is_dropping_pressed;
 
   boolean is_bored;
   boolean is_sleeping;
@@ -1825,6 +1843,7 @@ struct PlayerInfo
   int anim_delay_counter;
   int post_delay_counter;
 
+  int dir_waiting;
   int action_waiting, last_action_waiting;
   int special_action_bored;
   int special_action_sleeping;
@@ -1848,6 +1867,7 @@ struct PlayerInfo
   unsigned long actual_frame_counter;
 
   int drop_delay;
+  int drop_pressed_delay;
 
   int step_counter;
 
@@ -1977,6 +1997,7 @@ struct LevelInfo
   boolean can_pass_to_walkable;        /* player can pass to empty or walkable tile */
   boolean grow_into_diggable;  /* amoeba can grow into anything diggable */
 
+  boolean continuous_snapping; /* repeated snapping without releasing key */
   boolean block_snap_field;    /* snapping blocks field to show animation */
   boolean block_last_field;    /* player blocks previous field while moving */
   boolean sp_block_last_field; /* player blocks previous field while moving */
@@ -2079,6 +2100,11 @@ struct GameInfo
 
   /* values for special game initialization control */
   boolean restart_level;
+
+  /* values for special game control */
+  int centered_player_nr;
+  int centered_player_nr_next;
+  boolean set_centered_player;
 };
 
 struct GlobalInfo