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