added using MM default action sound for unknown MM style elements
[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 #define EL_MM_DUMMY_START_NATIVE        700
47 #define EL_MM_DUMMY_END_NATIVE          709
48
49 /* elements to be specially mapped */
50 #define EL_MM_EMPTY_NATIVE              0
51 #define EL_DF_EMPTY_NATIVE              304
52
53 /* sounds */
54 #define SND_MM_GAME_LEVELTIME_CHARGING  0
55
56
57 /* ------------------------------------------------------------------------- */
58 /* data structure definitions                                                */
59 /* ------------------------------------------------------------------------- */
60
61 struct GlobalInfo_MM
62 {
63 };
64
65 struct CycleList
66 {
67   int x, y;
68   int steps;
69 };
70
71 struct MovingList
72 {
73   int x, y;
74   int dir;
75 };
76
77 struct DamageList
78 {
79   int x, y;
80   int edge, angle;
81   boolean is_mirror;
82 };
83
84 struct BeamerInfo
85 {
86   int x, y;
87   int num;
88 };
89
90 struct PacMan
91 {
92   int XP, YP;
93   int Dr;
94 };
95
96 struct LaserInfo
97 {
98   struct XY start_edge;
99   int start_angle;
100
101   int current_angle;
102
103   struct DamageList damage[MAX_LASER_LEN + 10];
104   int num_damages;
105
106   struct XY edge[MAX_LASER_LEN + 10];
107   int num_edges;
108
109   struct BeamerInfo beamer[MAX_NUM_BEAMERS][2];
110   int beamer_edge[MAX_NUM_BEAMERS];
111   int beamer_nr[MAX_NUM_BEAMERS];
112   int num_beamers;
113
114   boolean overloaded;
115   int overload_value;
116
117   boolean fuse_off;
118   int fuse_x, fuse_y;
119
120   int dest_element;
121   boolean stops_inside_element;
122
123   boolean redraw;
124
125   int wall_mask;
126 };
127
128 struct GameInfo_MM
129 {
130   boolean LevelSolved;
131   boolean GameOver;
132
133   struct CycleList cycle[MM_MAX_PLAYFIELD_SIZE];
134   int num_cycle;
135
136   struct MovingList pacman[MM_MAX_PLAYFIELD_SIZE];
137   int num_pacman;
138
139   int score;
140   int energy_left;
141   int kettles_still_needed;
142   int lights_still_needed;
143   int num_keys;
144
145   boolean level_solved;
146   boolean game_over;
147   int game_over_cause;
148
149   boolean cheat_no_overload;
150   boolean cheat_no_explosion;
151
152   int laser_overload_value;
153 };
154
155 struct LevelInfo_MM
156 {
157   int file_version;             /* version of file the level was stored with */
158   int game_version;             /* version of game engine to play this level */
159   boolean encoding_16bit_field;         /* level contains 16-bit elements */
160
161   int fieldx;
162   int fieldy;
163   int time;
164   int kettles_needed;
165   boolean auto_count_kettles;
166   boolean laser_red, laser_green, laser_blue;
167   char name[MM_MAX_LEVEL_NAME_LEN + 1];
168   char author[MM_MAX_LEVEL_AUTHOR_LEN + 1];
169   int score[MM_LEVEL_SCORE_ELEMENTS];
170   int amoeba_speed;
171   int time_fuse;
172
173   short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
174 };
175
176 struct GraphicInfo_MM
177 {
178 };
179
180 struct EngineSnapshotInfo_MM
181 {
182   struct GameInfo_MM game_mm;
183 };
184
185
186 /* ------------------------------------------------------------------------- */
187 /* exported functions                                                        */
188 /* ------------------------------------------------------------------------- */
189
190 extern struct GlobalInfo_MM global_mm_info;
191 extern struct GameInfo_MM game_mm;
192 extern struct LevelInfo_MM native_mm_level;
193 extern struct EngineSnapshotInfo_MM engine_snapshot_mm;
194
195 extern short Ur[MM_MAX_PLAYFIELD_WIDTH][MM_MAX_PLAYFIELD_HEIGHT];
196
197 extern void mm_open_all();
198 extern void mm_close_all();
199
200 void InitElementProperties_MM();
201
202 extern void InitGfxBuffers_MM();
203
204 extern void InitGameEngine_MM();
205 extern void InitGameActions_MM();
206 extern void GameActions_MM(struct MouseActionInfo, boolean);
207
208 extern void ClickElement(int, int, int);
209
210 extern unsigned int InitEngineRandom_MM(int);
211
212 extern void setLevelInfoToDefaults_MM();
213 extern void copyInternalEngineVars_MM();
214 extern boolean LoadNativeLevel_MM(char *, boolean);
215 extern void SaveNativeLevel_MM(char *);
216
217 extern int getFieldbufferOffsetX_MM();
218 extern int getFieldbufferOffsetY_MM();
219
220 extern void BlitScreenToBitmap_MM(Bitmap *);
221 extern void RedrawPlayfield_MM();
222
223 extern void LoadEngineSnapshotValues_MM();
224 extern void SaveEngineSnapshotValues_MM(ListNode **);
225
226 #endif  /* GAME_MM_EXPORT_H */