rnd-20041001-1-src
[rocksndiamonds.git] / src / main.h
index 009736ffc4224aa68666f655eb8b7a4c89cbc108..65e3a7ee99166829fa151f200d9c9213f3051e98 100644 (file)
@@ -23,6 +23,7 @@
 #include <fcntl.h>
 
 #include "libgame/libgame.h"
+#include "game_em/game_em.h"
 
 #include "conf_gfx.h"  /* include auto-generated data structure definitions */
 #include "conf_snd.h"  /* include auto-generated data structure definitions */
 #define EL_SP_GRAVITY_OFF_PORT_LEFT    665
 #define EL_SP_GRAVITY_OFF_PORT_UP      666
 
-#define NUM_FILE_ELEMENTS              667
+
+/* the following EMC style elements are currently not implemented in R'n'D */
+#define EL_BALLOON_SWITCH_NONE         667
+#define EL_EMC_LEVEL_BORDER            668
+#define EL_EMC_ANDROID                 669
+#define EL_EMC_GRASS                   670
+#define EL_EMC_MAGIC_BALL              671
+#define EL_EMC_MAGIC_BALL_SWITCH       672
+#define EL_EMC_GATE_5                  673
+#define EL_EMC_GATE_6                  674
+#define EL_EMC_GATE_7                  675
+#define EL_EMC_GATE_8                  676
+#define EL_EMC_GATE_5_GRAY             677
+#define EL_EMC_GATE_6_GRAY             678
+#define EL_EMC_GATE_7_GRAY             679
+#define EL_EMC_GATE_8_GRAY             680
+#define EL_EMC_KEY_5                   681
+#define EL_EMC_KEY_6                   682
+#define EL_EMC_KEY_7                   683
+#define EL_EMC_KEY_8                   684
+#define EL_EMC_BUMPER                  685
+#define EL_EMC_PLANT                   686
+#define EL_EMC_LENSES                  687
+#define EL_EMC_MAGNIFIER               688
+#define EL_EMC_WALL_9                  689
+#define EL_EMC_WALL_10                 690
+#define EL_EMC_WALL_11                 691
+#define EL_EMC_WALL_12                 692
+#define EL_EMC_WALL_13                 693
+#define EL_EMC_WALL_14                 694
+#define EL_EMC_WALL_15                 695
+#define EL_EMC_WALL_16                 696
+#define EL_EMC_WALL_SLIPPERY_1         697
+#define EL_EMC_WALL_SLIPPERY_2         698
+#define EL_EMC_WALL_SLIPPERY_3         699
+#define EL_EMC_WALL_SLIPPERY_4         700
+
+#define NUM_FILE_ELEMENTS              701
 
 
 /* "real" (and therefore drawable) runtime elements */
 #define GFX_ARG_POST_DELAY_FIXED               28
 #define GFX_ARG_POST_DELAY_RANDOM              29
 #define GFX_ARG_NAME                           30
+#define GFX_ARG_SCALE_UP_FACTOR                        31
 
-#define NUM_GFX_ARGS                           31
+#define NUM_GFX_ARGS                           32
 
 
 /* values for sound configuration suffixes */
 #define SND_ARG_MODE_LOOP                      0
+#define SND_ARG_VOLUME                         1
+#define SND_ARG_PRIORITY                       2
 
-#define NUM_SND_ARGS                           1
+#define NUM_SND_ARGS                           3
 
 
 /* values for music configuration suffixes */
@@ -1382,7 +1423,6 @@ struct PlayerInfo
 
   boolean block_last_field;
   int block_delay;
-  int block_delay_value;
 
   boolean can_fall_into_acid;
 
@@ -1475,6 +1515,13 @@ struct LevelFileInfo
 
 struct LevelInfo
 {
+  struct LevelFileInfo file_info;
+
+  /* level stored in native format for the native game engines */
+  struct LevelInfo_EM *native_em_level;
+
+  int game_engine_type;
+
   int file_version;    /* file format version the level is stored with    */
   int game_version;    /* game release version the level was created with */
 
@@ -1512,13 +1559,16 @@ struct LevelInfo
   boolean double_speed;
   boolean initial_gravity;
   boolean em_slippery_gems;    /* EM style "gems slip from wall" behaviour */
-  boolean block_last_field;    /* player blocks previous field while moving */
-  boolean sp_block_last_field; /* player blocks previous field while moving */
   boolean use_spring_bug;      /* for compatibility with old levels */
   boolean instant_relocation;  /* no visual delay when relocating player */
   boolean can_pass_to_walkable;        /* player can pass to empty or walkable tile */
   boolean grow_into_diggable;  /* amoeba can grow into anything diggable */
 
+  boolean block_last_field;    /* player blocks previous field while moving */
+  boolean sp_block_last_field; /* player blocks previous field while moving */
+  int block_delay;             /* delay for blocking previous field */
+  int sp_block_delay;          /* delay for blocking previous field */
+
   /* ('int' instead of 'boolean' because used as selectbox value in editor) */
   int use_step_counter;                /* count steps instead of seconds for level */
 
@@ -1527,6 +1577,8 @@ struct LevelInfo
   boolean use_custom_template; /* use custom properties from template file */
 
   boolean no_valid_file;       /* set when level file missing or invalid */
+
+  boolean changed;             /* set when level was changed in the editor */
 };
 
 struct TapeInfo
@@ -1578,6 +1630,10 @@ struct GameInfo
   int initial_move_delay_value;
   int initial_push_delay_value;
 
+  /* flags to handle bugs in and changes between different engine versions */
+  /* (for the latest engine version, these flags should always be "FALSE") */
+  boolean use_bug_change_when_pushing;
+
   /* variable within running game */
   int yamyam_content_nr;
   boolean magic_wall_active;
@@ -1806,6 +1862,7 @@ struct GraphicInfo
   int crumbled_like;           /* element for cloning crumble graphics */
   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 anim_delay_fixed;                /* optional delay values for bored and   */
   int anim_delay_random;       /* sleeping player animations (animation */
@@ -1828,6 +1885,8 @@ struct GraphicInfo
 struct SoundInfo
 {
   boolean loop;
+  int volume;
+  int priority;
 };
 
 struct MusicInfo