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_LEVEL_NAME_LEN 32
31 #define MM_MAX_LEVEL_AUTHOR_LEN 32
34 #define EL_MM_START_1_NATIVE 0
35 #define EL_MM_END_1_NATIVE 155
37 #define EL_MM_CHAR_START_NATIVE 160
38 #define EL_MM_CHAR_END_NATIVE 239
40 #define EL_MM_START_2_NATIVE 240
41 #define EL_MM_END_2_NATIVE 430
43 #define EL_MM_RUNTIME_START_NATIVE 500
44 #define EL_MM_RUNTIME_END_NATIVE 504
46 #define EL_MM_DUMMY_START_NATIVE 700
47 #define EL_MM_DUMMY_END_NATIVE 709
49 // elements to be specially mapped
50 #define EL_MM_EMPTY_NATIVE 0
51 #define EL_DF_EMPTY_NATIVE 304
54 #define SND_MM_GAME_LEVELTIME_CHARGING 0
55 #define SND_MM_GAME_HEALTH_CHARGING 1
58 // ----------------------------------------------------------------------------
59 // data structure definitions
60 // ----------------------------------------------------------------------------
100 struct DamageList damage[MAX_LASER_LEN + 10];
103 struct XY edge[MAX_LASER_LEN + 10];
106 struct BeamerInfo beamer[MAX_NUM_BEAMERS][2];
107 int beamer_edge[MAX_NUM_BEAMERS];
108 int beamer_nr[MAX_NUM_BEAMERS];
118 boolean stops_inside_element;
130 struct CycleList cycle[MM_MAX_PLAYFIELD_SIZE];
133 struct MovingList pacman[MM_MAX_PLAYFIELD_SIZE];
138 int kettles_still_needed;
139 int lights_still_needed;
142 boolean level_solved;
146 boolean cheat_no_overload;
147 boolean cheat_no_explosion;
149 int laser_overload_value;
150 boolean laser_enabled;
155 int file_version; // version of file the level was stored with
156 int game_version; // version of game engine to play this level
157 boolean encoding_16bit_field; // level contains 16-bit elements
163 boolean auto_count_kettles;
164 boolean laser_red, laser_green, laser_blue;
165 char name[MM_MAX_LEVEL_NAME_LEN + 1];
166 char author[MM_MAX_LEVEL_AUTHOR_LEN + 1];
167 int score[MM_LEVEL_SCORE_ELEMENTS];
174 short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
177 struct EngineSnapshotInfo_MM
179 struct GameInfo_MM game_mm;
181 struct LaserInfo laser;
183 short Ur[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
184 short Hit[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
185 short Box[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
186 short Angle[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
187 short Frame[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
189 short LX,LY, XS,YS, ELX,ELY;
192 int last_LX, last_LY, last_hit_mask;
196 unsigned int rotate_delay;
197 unsigned int pacman_delay;
198 unsigned int energy_delay;
199 unsigned int overload_delay;
203 // ----------------------------------------------------------------------------
204 // exported functions
205 // ----------------------------------------------------------------------------
207 extern struct GameInfo_MM game_mm;
208 extern struct LevelInfo_MM native_mm_level;
209 extern struct EngineSnapshotInfo_MM engine_snapshot_mm;
211 extern short Ur[MM_MAX_PLAYFIELD_WIDTH][MM_MAX_PLAYFIELD_HEIGHT];
213 void mm_open_all(void);
214 void mm_close_all(void);
216 void InitElementProperties_MM(void);
218 void InitGfxBuffers_MM(void);
220 void InitGameEngine_MM(void);
221 void InitGameActions_MM(void);
222 void GameActions_MM(struct MouseActionInfo, boolean);
224 void DrawLaser_MM(void);
225 void DrawTileCursor_MM(int, boolean);
227 boolean ClickElement(int, int, int);
229 unsigned int InitEngineRandom_MM(int);
231 void setLevelInfoToDefaults_MM(void);
232 void copyInternalEngineVars_MM(void);
233 boolean LoadNativeLevel_MM(char *, boolean);
234 void SaveNativeLevel_MM(char *);
236 int getFieldbufferOffsetX_MM(void);
237 int getFieldbufferOffsetY_MM(void);
239 void BlitScreenToBitmap_MM(Bitmap *);
240 void RedrawPlayfield_MM(void);
242 void LoadEngineSnapshotValues_MM(void);
243 void SaveEngineSnapshotValues_MM(ListNode **);
245 int getButtonFromTouchPosition(int, int, int, int);
247 #endif // GAME_MM_EXPORT_H