rnd-20060219-1-src
[rocksndiamonds.git] / src / main.h
index 13481c98f09281b592a79a86fa02030c394a2116..8ae104915bb26aefe87e8b4f064f0da00454b17c 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 EP_BITMASK_DEFAULT             0
 
 #define PROPERTY_BIT(p)                        (1 << ((p) % 32))
+#if 1
+#define PROPERTY_VAR(e,p)              (element_info[e].properties[(p) / 32])
+#else
 #define PROPERTY_VAR(e,p)              (Properties[e][(p) / 32])
+#endif
 #define HAS_PROPERTY(e,p)      ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0)
 #define SET_PROPERTY(e,p,v)    ((v) ?                                     \
                                 (PROPERTY_VAR(e,p) |=  PROPERTY_BIT(p)) : \
 #define CA_ARG_ELEMENT_RESET           (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_ELEMENT_HEADLINE                (CA_ARG_ELEMENT + 999)
+#define CA_ARG_ELEMENT_HEADLINE                (CA_ARG_ELEMENT + 998)
+#define CA_ARG_ELEMENT_CV_TARGET       (CA_ARG_ELEMENT_TARGET)
+#define CA_ARG_ELEMENT_CV_TRIGGER      (CA_ARG_ELEMENT_TRIGGER)
+#define CA_ARG_ELEMENT_CV_HEADLINE     (CA_ARG_ELEMENT_HEADLINE)
+#define CA_ARG_ELEMENT_NR_TARGET       (CA_ARG_ELEMENT + 3)
+#define CA_ARG_ELEMENT_NR_TRIGGER      (CA_ARG_ELEMENT + 4)
+#define CA_ARG_ELEMENT_NR_HEADLINE     (CA_ARG_ELEMENT + 999)
 #define CA_ARG_SPEED                   13000
 #define CA_ARG_SPEED_NOT_MOVING                (CA_ARG_SPEED + STEPSIZE_NOT_MOVING)
 #define CA_ARG_SPEED_VERY_SLOW         (CA_ARG_SPEED + STEPSIZE_VERY_SLOW)
 #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_ELEMENT             657
 #define EL_TRIGGER_PLAYER              658
 
+/* SP style elements */
 #define EL_SP_GRAVITY_ON_PORT_RIGHT    659
 #define EL_SP_GRAVITY_ON_PORT_DOWN     660
 #define EL_SP_GRAVITY_ON_PORT_LEFT     661
 #define EL_SP_GRAVITY_OFF_PORT_LEFT    665
 #define EL_SP_GRAVITY_OFF_PORT_UP      666
 
-
-/* the following EMC style elements are currently not implemented in R'n'D */
+/* EMC style elements */
 #define EL_BALLOON_SWITCH_NONE         667
 #define EL_EMC_GATE_5                  668
 #define EL_EMC_GATE_6                  669
 #define EL_EMC_FAKE_ACID               703
 #define EL_EMC_DRIPPER                 704
 
-#define NUM_FILE_ELEMENTS              705
+#define EL_TRIGGER_CE_VALUE            705
+
+#define NUM_FILE_ELEMENTS              706
 
 
 /* "real" (and therefore drawable) runtime elements */
 #define EL_DIAGONAL_SHRINKING          (EL_FIRST_RUNTIME_UNREAL + 19)
 #define EL_DIAGONAL_GROWING            (EL_FIRST_RUNTIME_UNREAL + 20)
 
+#define NUM_RUNTIME_ELEMENTS           (EL_FIRST_RUNTIME_UNREAL + 21)
+
 /* dummy elements (never used as game elements, only used as graphics) */
-#define EL_FIRST_DUMMY                 (EL_FIRST_RUNTIME_UNREAL + 21)
+#define EL_FIRST_DUMMY                 NUM_RUNTIME_ELEMENTS
 
 #define EL_STEELWALL_TOPLEFT           (EL_FIRST_DUMMY + 0)
 #define EL_STEELWALL_TOPRIGHT          (EL_FIRST_DUMMY + 1)
 #define ACTION_TURNING_FROM_DOWN       46
 #define ACTION_SMASHED_BY_ROCK         47
 #define ACTION_SMASHED_BY_SPRING       48
-#define ACTION_SLURPED_BY_SPRING       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"
@@ -2065,6 +2079,10 @@ struct GameInfo
 
   /* values for special game initialization control */
   boolean restart_level;
+
+  /* values for special game control */
+  int centered_to_player;
+  int centered_to_player_next;
 };
 
 struct GlobalInfo
@@ -2189,6 +2207,8 @@ struct ElementInfo
 
   /* ---------- special element property values ---------- */
 
+  unsigned long properties[NUM_EP_BITFIELDS];  /* element base properties */
+
   boolean use_gfx_element;     /* use custom graphic element */
   int gfx_element;             /* optional custom graphic element */
 
@@ -2426,7 +2446,9 @@ extern short                      ExplodeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     RunnerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     PlayerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 
+#if 0
 extern unsigned long           Properties[MAX_NUM_ELEMENTS][NUM_EP_BITFIELDS];
+#endif
 
 extern int                     GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];