added optional button to restart game (door, panel and touch variants)
[rocksndiamonds.git] / src / game_mm / export.h
index f9b401160881f248ba0ba1a4533f225a82975232..1d063969510dadd2c37382dd25e1875d9ef50b76 100644 (file)
@@ -1,13 +1,13 @@
 #ifndef GAME_MM_EXPORT_H
 #define GAME_MM_EXPORT_H
 
-/* ========================================================================= */
-/* functions and definitions exported from game_mm to main program           */
-/* ========================================================================= */
+// ============================================================================
+// functions and definitions exported from game_mm to main program
+// ============================================================================
 
-/* ------------------------------------------------------------------------- */
-/* constant definitions                                                      */
-/* ------------------------------------------------------------------------- */
+// ----------------------------------------------------------------------------
+// constant definitions
+// ----------------------------------------------------------------------------
 
 #define MM_MAX_PLAYFIELD_WIDTH         MAX_PLAYFIELD_WIDTH
 #define MM_MAX_PLAYFIELD_HEIGHT                MAX_PLAYFIELD_HEIGHT
 
 #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
 #define EL_MM_START_2_NATIVE           240
 #define EL_MM_END_2_NATIVE             430
 
+#define EL_MM_START_3_NATIVE           431
+#define EL_MM_END_3_NATIVE             450
+
 #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 */
+// elements to be specially mapped
 #define EL_MM_EMPTY_NATIVE             0
 #define EL_DF_EMPTY_NATIVE             304
 
-/* sounds */
+// sounds
 #define SND_MM_GAME_LEVELTIME_CHARGING 0
 #define SND_MM_GAME_HEALTH_CHARGING    1
 
 
-/* ------------------------------------------------------------------------- */
-/* data structure definitions                                                */
-/* ------------------------------------------------------------------------- */
-
-struct GlobalInfo_MM
-{
-};
+// ----------------------------------------------------------------------------
+// data structure definitions
+// ----------------------------------------------------------------------------
 
 struct CycleList
 {
@@ -119,6 +117,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;
@@ -142,10 +143,14 @@ 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 has_mcduffin;
   boolean level_solved;
   boolean game_over;
   int game_over_cause;
+  char *game_over_message;
 
   boolean cheat_no_overload;
   boolean cheat_no_explosion;
@@ -156,16 +161,17 @@ struct GameInfo_MM
 
 struct LevelInfo_MM
 {
-  int file_version;            /* version of file the level was stored with */
-  int game_version;            /* version of game engine to play this level */
-  boolean encoding_16bit_field;                /* level contains 16-bit elements */
+  int file_version;            // version of file the level was stored with
+  int game_version;            // version of game engine to play this level
+  boolean encoding_16bit_field;                // level contains 16-bit elements
 
   int fieldx;
   int fieldy;
   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];
@@ -175,11 +181,13 @@ struct LevelInfo_MM
   int time_ball;
   int time_block;
 
-  short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
-};
+  int num_ball_contents;
+  int ball_choice_mode;
+  int ball_content[MM_MAX_BALL_CONTENTS];
+  boolean rotate_ball_content;
+  boolean explode_ball;
 
-struct GraphicInfo_MM
-{
+  short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
 };
 
 struct EngineSnapshotInfo_MM
@@ -192,27 +200,27 @@ 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;
+  short LX, LY;
+  short XS, YS;
+  short ELX, ELY;
+  short CT, Ct;
 
   int last_LX, last_LY, last_hit_mask;
   int hold_x, hold_y;
   int pacman_nr;
 
-  unsigned int rotate_delay;
-  unsigned int pacman_delay;
-  unsigned int energy_delay;
-  unsigned int overload_delay;
+  DelayCounter rotate_delay;
+  DelayCounter pacman_delay;
+  DelayCounter energy_delay;
+  DelayCounter overload_delay;
 };
 
 
-/* ------------------------------------------------------------------------- */
-/* exported functions                                                        */
-/* ------------------------------------------------------------------------- */
+// ----------------------------------------------------------------------------
+// exported functions
+// ----------------------------------------------------------------------------
 
-extern struct GlobalInfo_MM global_mm_info;
 extern struct GameInfo_MM game_mm;
 extern struct LevelInfo_MM native_mm_level;
 extern struct EngineSnapshotInfo_MM engine_snapshot_mm;
@@ -220,7 +228,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);
 
@@ -228,9 +235,10 @@ 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, int, boolean);
 
 boolean ClickElement(int, int, int);
 
@@ -244,12 +252,16 @@ void SaveNativeLevel_MM(char *);
 int getFieldbufferOffsetX_MM(void);
 int getFieldbufferOffsetY_MM(void);
 
+int getFlippedTileX_MM(int);
+int getFlippedTileY_MM(int);
+int getFlippedTileXY_MM(int);
+
 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);
 
-#endif /* GAME_MM_EXPORT_H */
+#endif // GAME_MM_EXPORT_H