1 #ifndef GAME_MM_EXPORT_H
2 #define GAME_MM_EXPORT_H
4 // ============================================================================
5 // functions and definitions exported from game_mm to main program
6 // ============================================================================
8 // ----------------------------------------------------------------------------
9 // constant definitions
10 // ----------------------------------------------------------------------------
12 #define MM_MAX_PLAYFIELD_WIDTH MAX_PLAYFIELD_WIDTH
13 #define MM_MAX_PLAYFIELD_HEIGHT MAX_PLAYFIELD_HEIGHT
15 #define MM_STD_PLAYFIELD_WIDTH 16
16 #define MM_STD_PLAYFIELD_HEIGHT 12
18 #define MM_MAX_PLAYFIELD_SIZE (MM_MAX_PLAYFIELD_WIDTH * \
19 MM_MAX_PLAYFIELD_HEIGHT)
21 #define MAX_NUM_AMOEBA 100
22 #define MAX_NUM_BEAMERS 8
24 #define MAX_LASER_LEN 256
25 #define MAX_LASER_ENERGY 100
26 #define MAX_LASER_OVERLOAD 100
28 #define MM_LEVEL_SCORE_ELEMENTS 16
30 #define MM_MAX_BALL_CONTENTS 16
32 #define MM_MAX_LEVEL_NAME_LEN 32
33 #define MM_MAX_LEVEL_AUTHOR_LEN 32
36 #define EL_MM_START_1_NATIVE 0
37 #define EL_MM_END_1_NATIVE 159
39 #define EL_MM_CHAR_START_NATIVE 160
40 #define EL_MM_CHAR_END_NATIVE 239
42 #define EL_MM_START_2_NATIVE 240
43 #define EL_MM_END_2_NATIVE 430
45 #define EL_MM_RUNTIME_START_NATIVE 500
46 #define EL_MM_RUNTIME_END_NATIVE 504
48 // elements to be specially mapped
49 #define EL_MM_EMPTY_NATIVE 0
50 #define EL_DF_EMPTY_NATIVE 304
53 #define SND_MM_GAME_LEVELTIME_CHARGING 0
54 #define SND_MM_GAME_HEALTH_CHARGING 1
57 // ----------------------------------------------------------------------------
58 // data structure definitions
59 // ----------------------------------------------------------------------------
99 struct DamageList damage[MAX_LASER_LEN + 10];
102 struct XY edge[MAX_LASER_LEN + 10];
105 struct BeamerInfo beamer[MAX_NUM_BEAMERS][2];
106 int beamer_edge[MAX_NUM_BEAMERS];
107 int beamer_nr[MAX_NUM_BEAMERS];
117 int dest_element_last;
118 int dest_element_last_x;
119 int dest_element_last_y;
120 boolean stops_inside_element;
132 struct CycleList cycle[MM_MAX_PLAYFIELD_SIZE];
135 struct MovingList pacman[MM_MAX_PLAYFIELD_SIZE];
140 int kettles_still_needed;
141 int lights_still_needed;
143 int ball_choice_pos; // current content element choice position
144 boolean laser_red, laser_green, laser_blue;
146 boolean has_mcduffin;
147 boolean level_solved;
150 char *game_over_message;
152 boolean cheat_no_overload;
153 boolean cheat_no_explosion;
155 int laser_overload_value;
156 boolean laser_enabled;
161 int file_version; // version of file the level was stored with
162 int game_version; // version of game engine to play this level
163 boolean encoding_16bit_field; // level contains 16-bit elements
169 boolean auto_count_kettles;
170 boolean mm_laser_red, mm_laser_green, mm_laser_blue;
171 boolean df_laser_red, df_laser_green, df_laser_blue;
172 char name[MM_MAX_LEVEL_NAME_LEN + 1];
173 char author[MM_MAX_LEVEL_AUTHOR_LEN + 1];
174 int score[MM_LEVEL_SCORE_ELEMENTS];
181 int num_ball_contents;
182 int ball_choice_mode;
183 int ball_content[MM_MAX_BALL_CONTENTS];
184 boolean rotate_ball_content;
185 boolean explode_ball;
187 short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
190 struct EngineSnapshotInfo_MM
192 struct GameInfo_MM game_mm;
194 struct LaserInfo laser;
196 short Ur[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
197 short Hit[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
198 short Box[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
199 short Angle[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
201 short LX,LY, XS,YS, ELX,ELY;
204 int last_LX, last_LY, last_hit_mask;
208 DelayCounter rotate_delay;
209 DelayCounter pacman_delay;
210 DelayCounter energy_delay;
211 DelayCounter overload_delay;
215 // ----------------------------------------------------------------------------
216 // exported functions
217 // ----------------------------------------------------------------------------
219 extern struct GameInfo_MM game_mm;
220 extern struct LevelInfo_MM native_mm_level;
221 extern struct EngineSnapshotInfo_MM engine_snapshot_mm;
223 extern short Ur[MM_MAX_PLAYFIELD_WIDTH][MM_MAX_PLAYFIELD_HEIGHT];
225 void mm_open_all(void);
227 void InitElementProperties_MM(void);
229 void InitGfxBuffers_MM(void);
231 void InitGameEngine_MM(void);
232 void InitGameActions_MM(void);
233 void GameActions_MM(struct MouseActionInfo);
235 void DrawLaser_MM(void);
236 void DrawTileCursor_MM(int, boolean);
238 boolean ClickElement(int, int, int);
240 unsigned int InitEngineRandom_MM(int);
242 void setLevelInfoToDefaults_MM(void);
243 void copyInternalEngineVars_MM(void);
244 boolean LoadNativeLevel_MM(char *, boolean);
245 void SaveNativeLevel_MM(char *);
247 int getFieldbufferOffsetX_MM(void);
248 int getFieldbufferOffsetY_MM(void);
250 void BlitScreenToBitmap_MM(Bitmap *);
251 void RedrawPlayfield_MM(void);
253 void LoadEngineSnapshotValues_MM(void);
254 void SaveEngineSnapshotValues_MM(void);
256 int getButtonFromTouchPosition(int, int, int, int);
258 #endif // GAME_MM_EXPORT_H