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