#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 EL_SP_GRAVITY_OFF_PORT_LEFT 665
#define EL_SP_GRAVITY_OFF_PORT_UP 666
-#if 1
-
-#define NUM_FILE_ELEMENTS 667
-
-/* the following EMC style elements are currently not implemented in R'n'D */
-#define EL_BALLOON_SWITCH_NONE EL_UNKNOWN
-#define EL_EMC_LEVEL_BORDER EL_UNKNOWN
-#define EL_EMC_ANDROID EL_UNKNOWN
-#define EL_EMC_ANDROID_RIGHT EL_UNKNOWN
-#define EL_EMC_ANDROID_UP EL_UNKNOWN
-#define EL_EMC_ANDROID_LEFT EL_UNKNOWN
-#define EL_EMC_ANDROID_DOWN EL_UNKNOWN
-#define EL_EMC_ANDROID_LEFT_UP EL_UNKNOWN
-#define EL_EMC_ANDROID_LEFT_DOWN EL_UNKNOWN
-#define EL_EMC_ANDROID_RIGHT_UP EL_UNKNOWN
-#define EL_EMC_ANDROID_RIGHT_DOWN EL_UNKNOWN
-#define EL_EMC_GRASS EL_UNKNOWN
-#define EL_EMC_GENERATOR_BALL EL_UNKNOWN
-#define EL_EMC_GROW EL_UNKNOWN
-#define EL_EMC_GATE_1 EL_UNKNOWN
-#define EL_EMC_GATE_2 EL_UNKNOWN
-#define EL_EMC_GATE_3 EL_UNKNOWN
-#define EL_EMC_GATE_4 EL_UNKNOWN
-#define EL_EMC_GATE_5 EL_UNKNOWN
-#define EL_EMC_GATE_6 EL_UNKNOWN
-#define EL_EMC_GATE_7 EL_UNKNOWN
-#define EL_EMC_GATE_8 EL_UNKNOWN
-#define EL_EMC_GATE_1_GRAY EL_UNKNOWN
-#define EL_EMC_GATE_2_GRAY EL_UNKNOWN
-#define EL_EMC_GATE_3_GRAY EL_UNKNOWN
-#define EL_EMC_GATE_4_GRAY EL_UNKNOWN
-#define EL_EMC_GATE_5_GRAY EL_UNKNOWN
-#define EL_EMC_GATE_6_GRAY EL_UNKNOWN
-#define EL_EMC_GATE_7_GRAY EL_UNKNOWN
-#define EL_EMC_GATE_8_GRAY EL_UNKNOWN
-#define EL_EMC_KEY_1 EL_UNKNOWN
-#define EL_EMC_KEY_2 EL_UNKNOWN
-#define EL_EMC_KEY_3 EL_UNKNOWN
-#define EL_EMC_KEY_4 EL_UNKNOWN
-#define EL_EMC_KEY_5 EL_UNKNOWN
-#define EL_EMC_KEY_6 EL_UNKNOWN
-#define EL_EMC_KEY_7 EL_UNKNOWN
-#define EL_EMC_KEY_8 EL_UNKNOWN
-#define EL_EMC_BUMPER EL_UNKNOWN
-#define EL_EMC_PLANT EL_UNKNOWN
-#define EL_EMC_LENSES EL_UNKNOWN
-#define EL_EMC_MAGNIFY EL_UNKNOWN
-
-#else
/* 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_ANDROID_RIGHT 670
-#define EL_EMC_ANDROID_UP 671
-#define EL_EMC_ANDROID_LEFT 672
-#define EL_EMC_ANDROID_DOWN 673
-#define EL_EMC_ANDROID_LEFT_UP 674
-#define EL_EMC_ANDROID_LEFT_DOWN 675
-#define EL_EMC_ANDROID_RIGHT_UP 676
-#define EL_EMC_ANDROID_RIGHT_DOWN 677
-#define EL_EMC_GRASS 678
-#define EL_EMC_GENERATOR_BALL 679
-#define EL_EMC_GROW 680
-#define EL_EMC_GATE_1 681
-#define EL_EMC_GATE_2 682
-#define EL_EMC_GATE_3 683
-#define EL_EMC_GATE_4 684
-#define EL_EMC_GATE_5 685
-#define EL_EMC_GATE_6 686
-#define EL_EMC_GATE_7 687
-#define EL_EMC_GATE_8 688
-#define EL_EMC_GATE_1_GRAY 689
-#define EL_EMC_GATE_2_GRAY 690
-#define EL_EMC_GATE_3_GRAY 691
-#define EL_EMC_GATE_4_GRAY 692
-#define EL_EMC_GATE_5_GRAY 693
-#define EL_EMC_GATE_6_GRAY 694
-#define EL_EMC_GATE_7_GRAY 695
-#define EL_EMC_GATE_8_GRAY 696
-#define EL_EMC_KEY_1 697
-#define EL_EMC_KEY_2 698
-#define EL_EMC_KEY_3 699
-#define EL_EMC_KEY_4 700
-#define EL_EMC_KEY_5 701
-#define EL_EMC_KEY_6 702
-#define EL_EMC_KEY_7 703
-#define EL_EMC_KEY_8 704
-#define EL_EMC_BUMPER 705
-#define EL_EMC_PLANT 706
-#define EL_EMC_LENSES 707
-#define EL_EMC_MAGNIFY 708
-
-#define NUM_FILE_ELEMENTS 709
-
-#endif
+#define EL_EM_GATE_5 668
+#define EL_EM_GATE_6 669
+#define EL_EM_GATE_7 670
+#define EL_EM_GATE_8 671
+#define EL_EM_GATE_5_GRAY 672
+#define EL_EM_GATE_6_GRAY 673
+#define EL_EM_GATE_7_GRAY 674
+#define EL_EM_GATE_8_GRAY 675
+#define EL_EM_KEY_5 676
+#define EL_EM_KEY_6 677
+#define EL_EM_KEY_7 678
+#define EL_EM_KEY_8 679
+#define EL_EMC_ANDROID 680
+#define EL_EMC_GRASS 681
+#define EL_EMC_MAGIC_BALL 682
+#define EL_EMC_MAGIC_BALL_SWITCH 683
+#define EL_EMC_SPRING_BUMPER 684
+#define EL_EMC_PLANT 685
+#define EL_EMC_LENSES 686
+#define EL_EMC_MAGNIFIER 687
+#define EL_EMC_WALL_9 688
+#define EL_EMC_WALL_10 689
+#define EL_EMC_WALL_11 690
+#define EL_EMC_WALL_12 691
+#define EL_EMC_WALL_13 692
+#define EL_EMC_WALL_14 693
+#define EL_EMC_WALL_15 694
+#define EL_EMC_WALL_16 695
+#define EL_EMC_WALL_SLIPPERY_1 696
+#define EL_EMC_WALL_SLIPPERY_2 697
+#define EL_EMC_WALL_SLIPPERY_3 698
+#define EL_EMC_WALL_SLIPPERY_4 699
+#define EL_EMC_DRIPPER 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 31
+#define GFX_ARG_SCALE_UP_FACTOR 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 */
{
struct LevelFileInfo file_info;
- /* level stored in native format for the native game engines */
- struct LevelInfo_EM *native_em_level;
-
int game_engine_type;
+ /* level stored in native format for the alternative native game engines */
+ struct LevelInfo_EM *native_em_level;
+
int file_version; /* file format version the level is stored with */
int game_version; /* game release version the level was created with */
int fieldx, fieldy;
- int time;
+ int time; /* available time (seconds) */
int gems_needed;
char name[MAX_LEVEL_NAME_LEN + 1];
int time_light;
int time_timegate;
+ /* values for the new EMC elements */
+ int android_move_time;
+ int android_clone_time;
+ boolean ball_random;
+ boolean ball_state_initial;
+ int ball_time;
+ int lenses_score;
+ int magnify_score;
+ int slurp_score;
+ int lenses_time;
+ int magnify_time;
+ int wind_direction_initial;
+ 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 */
int dont_collide_with_bits; /* bitfield to store property for elements */
struct SoundInfo
{
boolean loop;
+ int volume;
+ int priority;
};
struct MusicInfo