f600993f4dfc0d4b9e4d607316ec988e2935b8cf
[rocksndiamonds.git] / src / game_mm / export.h
1 #ifndef GAME_MM_EXPORT_H
2 #define GAME_MM_EXPORT_H
3
4 // ============================================================================
5 // functions and definitions exported from game_mm to main program
6 // ============================================================================
7
8 // ----------------------------------------------------------------------------
9 // constant definitions
10 // ----------------------------------------------------------------------------
11
12 #define MM_MAX_PLAYFIELD_WIDTH          MAX_PLAYFIELD_WIDTH
13 #define MM_MAX_PLAYFIELD_HEIGHT         MAX_PLAYFIELD_HEIGHT
14
15 #define MM_STD_PLAYFIELD_WIDTH          16
16 #define MM_STD_PLAYFIELD_HEIGHT         12
17
18 #define MM_MAX_PLAYFIELD_SIZE           (MM_MAX_PLAYFIELD_WIDTH *       \
19                                          MM_MAX_PLAYFIELD_HEIGHT)
20
21 #define MAX_NUM_AMOEBA                  100
22 #define MAX_NUM_BEAMERS                 8
23
24 #define MAX_LASER_LEN                   256
25 #define MAX_LASER_ENERGY                100
26 #define MAX_LASER_OVERLOAD              100
27
28 #define MM_LEVEL_SCORE_ELEMENTS         16
29
30 #define MM_MAX_LEVEL_NAME_LEN           32
31 #define MM_MAX_LEVEL_AUTHOR_LEN         32
32
33
34 #define EL_MM_START_1_NATIVE            0
35 #define EL_MM_END_1_NATIVE              155
36
37 #define EL_MM_CHAR_START_NATIVE         160
38 #define EL_MM_CHAR_END_NATIVE           239
39
40 #define EL_MM_START_2_NATIVE            240
41 #define EL_MM_END_2_NATIVE              430
42
43 #define EL_MM_RUNTIME_START_NATIVE      500
44 #define EL_MM_RUNTIME_END_NATIVE        504
45
46 // elements to be specially mapped
47 #define EL_MM_EMPTY_NATIVE              0
48 #define EL_DF_EMPTY_NATIVE              304
49
50 // sounds
51 #define SND_MM_GAME_LEVELTIME_CHARGING  0
52 #define SND_MM_GAME_HEALTH_CHARGING     1
53
54
55 // ----------------------------------------------------------------------------
56 // data structure definitions
57 // ----------------------------------------------------------------------------
58
59 struct CycleList
60 {
61   int x, y;
62   int steps;
63 };
64
65 struct MovingList
66 {
67   int x, y;
68   int dir;
69 };
70
71 struct DamageList
72 {
73   int x, y;
74   int edge, angle;
75   boolean is_mirror;
76 };
77
78 struct BeamerInfo
79 {
80   int x, y;
81   int num;
82 };
83
84 struct PacMan
85 {
86   int XP, YP;
87   int Dr;
88 };
89
90 struct LaserInfo
91 {
92   struct XY start_edge;
93   int start_angle;
94
95   int current_angle;
96
97   struct DamageList damage[MAX_LASER_LEN + 10];
98   int num_damages;
99
100   struct XY edge[MAX_LASER_LEN + 10];
101   int num_edges;
102
103   struct BeamerInfo beamer[MAX_NUM_BEAMERS][2];
104   int beamer_edge[MAX_NUM_BEAMERS];
105   int beamer_nr[MAX_NUM_BEAMERS];
106   int num_beamers;
107
108   boolean overloaded;
109   int overload_value;
110
111   boolean fuse_off;
112   int fuse_x, fuse_y;
113
114   int dest_element;
115   boolean stops_inside_element;
116
117   boolean redraw;
118
119   int wall_mask;
120 };
121
122 struct GameInfo_MM
123 {
124   boolean LevelSolved;
125   boolean GameOver;
126
127   struct CycleList cycle[MM_MAX_PLAYFIELD_SIZE];
128   int num_cycle;
129
130   struct MovingList pacman[MM_MAX_PLAYFIELD_SIZE];
131   int num_pacman;
132
133   int score;
134   int energy_left;
135   int kettles_still_needed;
136   int lights_still_needed;
137   int num_keys;
138
139   boolean level_solved;
140   boolean game_over;
141   int game_over_cause;
142
143   boolean cheat_no_overload;
144   boolean cheat_no_explosion;
145
146   int laser_overload_value;
147   boolean laser_enabled;
148 };
149
150 struct LevelInfo_MM
151 {
152   int file_version;             // version of file the level was stored with
153   int game_version;             // version of game engine to play this level
154   boolean encoding_16bit_field;         // level contains 16-bit elements
155
156   int fieldx;
157   int fieldy;
158   int time;
159   int kettles_needed;
160   boolean auto_count_kettles;
161   boolean laser_red, laser_green, laser_blue;
162   char name[MM_MAX_LEVEL_NAME_LEN + 1];
163   char author[MM_MAX_LEVEL_AUTHOR_LEN + 1];
164   int score[MM_LEVEL_SCORE_ELEMENTS];
165   int amoeba_speed;
166   int time_fuse;
167   int time_bomb;
168   int time_ball;
169   int time_block;
170
171   short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
172 };
173
174 struct EngineSnapshotInfo_MM
175 {
176   struct GameInfo_MM game_mm;
177
178   struct LaserInfo laser;
179
180   short Ur[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
181   short Hit[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
182   short Box[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
183   short Angle[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
184
185   short LX,LY, XS,YS, ELX,ELY;
186   short CT,Ct;
187
188   int last_LX, last_LY, last_hit_mask;
189   int hold_x, hold_y;
190   int pacman_nr;
191
192   DelayCounter rotate_delay;
193   DelayCounter pacman_delay;
194   DelayCounter energy_delay;
195   DelayCounter overload_delay;
196 };
197
198
199 // ----------------------------------------------------------------------------
200 // exported functions
201 // ----------------------------------------------------------------------------
202
203 extern struct GameInfo_MM game_mm;
204 extern struct LevelInfo_MM native_mm_level;
205 extern struct EngineSnapshotInfo_MM engine_snapshot_mm;
206
207 extern short Ur[MM_MAX_PLAYFIELD_WIDTH][MM_MAX_PLAYFIELD_HEIGHT];
208
209 void mm_open_all(void);
210
211 void InitElementProperties_MM(void);
212
213 void InitGfxBuffers_MM(void);
214
215 void InitGameEngine_MM(void);
216 void InitGameActions_MM(void);
217 void GameActions_MM(struct MouseActionInfo);
218
219 void DrawLaser_MM(void);
220 void DrawTileCursor_MM(int, boolean);
221
222 boolean ClickElement(int, int, int);
223
224 unsigned int InitEngineRandom_MM(int);
225
226 void setLevelInfoToDefaults_MM(void);
227 void copyInternalEngineVars_MM(void);
228 boolean LoadNativeLevel_MM(char *, boolean);
229 void SaveNativeLevel_MM(char *);
230
231 int getFieldbufferOffsetX_MM(void);
232 int getFieldbufferOffsetY_MM(void);
233
234 void BlitScreenToBitmap_MM(Bitmap *);
235 void RedrawPlayfield_MM(void);
236
237 void LoadEngineSnapshotValues_MM(void);
238 void SaveEngineSnapshotValues_MM(void);
239
240 int getButtonFromTouchPosition(int, int, int, int);
241
242 #endif  // GAME_MM_EXPORT_H