added option to rotate newly created gray ball content for MM engine
[rocksndiamonds.git] / src / game_mm / export.h
index 710d2ee9311d1abe6af475c703ae30880a12ebb9..7f31d68cdb2eeb741e6b8b06d5c166049997a12e 100644 (file)
 
 #define MM_LEVEL_SCORE_ELEMENTS                16
 
+#define MM_MAX_BALL_CONTENTS           16
+
 #define MM_MAX_LEVEL_NAME_LEN          32
 #define MM_MAX_LEVEL_AUTHOR_LEN                32
 
 
 #define EL_MM_START_1_NATIVE           0
-#define EL_MM_END_1_NATIVE             155
+#define EL_MM_END_1_NATIVE             159
 
 #define EL_MM_CHAR_START_NATIVE                160
 #define EL_MM_CHAR_END_NATIVE          239
@@ -43,9 +45,6 @@
 #define EL_MM_RUNTIME_START_NATIVE     500
 #define EL_MM_RUNTIME_END_NATIVE       504
 
-#define EL_MM_DUMMY_START_NATIVE       700
-#define EL_MM_DUMMY_END_NATIVE         709
-
 // elements to be specially mapped
 #define EL_MM_EMPTY_NATIVE             0
 #define EL_DF_EMPTY_NATIVE             304
@@ -115,6 +114,9 @@ struct LaserInfo
   int fuse_x, fuse_y;
 
   int dest_element;
+  int dest_element_last;
+  int dest_element_last_x;
+  int dest_element_last_y;
   boolean stops_inside_element;
 
   boolean redraw;
@@ -138,6 +140,8 @@ struct GameInfo_MM
   int kettles_still_needed;
   int lights_still_needed;
   int num_keys;
+  int ball_choice_pos;         // current content element choice position
+  boolean laser_red, laser_green, laser_blue;
 
   boolean level_solved;
   boolean game_over;
@@ -161,7 +165,8 @@ struct LevelInfo_MM
   int time;
   int kettles_needed;
   boolean auto_count_kettles;
-  boolean laser_red, laser_green, laser_blue;
+  boolean mm_laser_red, mm_laser_green, mm_laser_blue;
+  boolean df_laser_red, df_laser_green, df_laser_blue;
   char name[MM_MAX_LEVEL_NAME_LEN + 1];
   char author[MM_MAX_LEVEL_AUTHOR_LEN + 1];
   int score[MM_LEVEL_SCORE_ELEMENTS];
@@ -171,6 +176,11 @@ struct LevelInfo_MM
   int time_ball;
   int time_block;
 
+  int num_ball_contents;
+  int ball_choice_mode;
+  int ball_content[MM_MAX_BALL_CONTENTS];
+  boolean rotate_ball_content;
+
   short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
 };
 
@@ -184,7 +194,6 @@ struct EngineSnapshotInfo_MM
   short Hit[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
   short Box[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
   short Angle[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
-  short Frame[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
 
   short LX,LY, XS,YS, ELX,ELY;
   short CT,Ct;
@@ -211,7 +220,6 @@ extern struct EngineSnapshotInfo_MM engine_snapshot_mm;
 extern short Ur[MM_MAX_PLAYFIELD_WIDTH][MM_MAX_PLAYFIELD_HEIGHT];
 
 void mm_open_all(void);
-void mm_close_all(void);
 
 void InitElementProperties_MM(void);
 
@@ -219,7 +227,7 @@ void InitGfxBuffers_MM(void);
 
 void InitGameEngine_MM(void);
 void InitGameActions_MM(void);
-void GameActions_MM(struct MouseActionInfo, boolean);
+void GameActions_MM(struct MouseActionInfo);
 
 void DrawLaser_MM(void);
 void DrawTileCursor_MM(int, boolean);
@@ -240,7 +248,7 @@ void BlitScreenToBitmap_MM(Bitmap *);
 void RedrawPlayfield_MM(void);
 
 void LoadEngineSnapshotValues_MM(void);
-void SaveEngineSnapshotValues_MM(ListNode **);
+void SaveEngineSnapshotValues_MM(void);
 
 int getButtonFromTouchPosition(int, int, int, int);