#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_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
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;
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;
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];
int time_ball;
int time_block;
+ int num_ball_contents;
+ int ball_choice_mode;
+ int ball_content[MM_MAX_BALL_CONTENTS];
+
short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
};
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;
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);
void RedrawPlayfield_MM(void);
void LoadEngineSnapshotValues_MM(void);
-void SaveEngineSnapshotValues_MM(ListNode **);
+void SaveEngineSnapshotValues_MM(void);
int getButtonFromTouchPosition(int, int, int, int);