rocks_n_diamonds-0.9b
[rocksndiamonds.git] / src / main.h
1 /***********************************************************
2 *  Rocks'n'Diamonds -- McDuffin Strikes Back!              *
3 *----------------------------------------------------------*
4 *  ©1995 Artsoft Development                               *
5 *        Holger Schemel                                    *
6 *        33659 Bielefeld-Senne                             *
7 *        Telefon: (0521) 493245                            *
8 *        eMail: aeglos@valinor.owl.de                      *
9 *               aeglos@uni-paderborn.de                    *
10 *               q99492@pbhrzx.uni-paderborn.de             *
11 *----------------------------------------------------------*
12 *  main.h                                                  *
13 ***********************************************************/
14
15 #ifndef MAIN_H
16 #define MAIN_H
17
18 #define XK_MISCELLANY
19 #define XK_LATIN1
20
21 #include <X11/Xlib.h>
22 #include <X11/Xutil.h>
23 #include <X11/Xos.h>
24 #include <X11/Intrinsic.h>
25 #include <X11/keysymdef.h>
26
27 #include XPM_INCLUDE_FILE
28
29 #include <sys/types.h>
30 #include <sys/stat.h>
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34 #include <errno.h>
35
36 typedef int BOOL;
37
38 #define TRUE            1
39 #define FALSE           0
40
41 #define WIN_XPOS        0
42 #define WIN_YPOS        0
43 #define WIN_XSIZE       672
44 #define WIN_YSIZE       560
45 #define SCR_FIELDX      17
46 #define SCR_FIELDY      17
47
48 #define MIN_LEV_FIELDX  (SCR_FIELDX-2)
49 #define MIN_LEV_FIELDY  (SCR_FIELDY-2)
50 #define STD_LEV_FIELDX  64
51 #define STD_LEV_FIELDY  32
52 #define MAX_LEV_FIELDX  128
53 #define MAX_LEV_FIELDY  128
54
55 #define MIN(a,b)        ((a)<(b) ? (a) : (b))
56 #define MAX(a,b)        ((a)>(b) ? (a) : (b))
57 #define ABS(a)          ((a)<0 ? -(a) : (a))
58 #define SIGN(a)         ((a)<0 ? -1 : ((a)>0 ? 1 : 0))
59 #define SCROLLX(a)      ((a)-scroll_x)
60 #define SCROLLY(a)      ((a)-scroll_y)
61 #define UNSCROLLX(a)    ((a)+scroll_x)
62 #define UNSCROLLY(a)    ((a)+scroll_y)
63 #define IN_SCR_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
64 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
65 #define PLAYER(x,y)     (JX==(x) && JY==(y))
66 #define IS_FREE(x,y)    (Feld[x][y]==EL_LEERRAUM && !PLAYER(x,y))
67 #define IS_MOVING(x,y)  (MovPos[x][y]!=0)
68 #define IS_BLOCKED(x,y) (Feld[x][y]==EL_BLOCKED)
69
70 /*
71
72 #define IS_AMOEBALIVE(e) ((e)==EL_AMOEBE_NASS || (e)==EL_AMOEBE_NORM || (e)==EL_AMOEBE_VOLL)
73 #define IS_AMOEBOID(e)  ((e)==EL_AMOEBE_TOT || IS_AMOEBALIVE(e))
74 #define IS_BADEWANNOID(e) ((e)>=EL_BADEWANNE1 && (e)<=EL_BADEWANNE5)
75 #define IS_SCHLUESSEL(e) ((e)>=EL_SCHLUESSEL1 && (e)<=EL_SCHLUESSEL4)
76 #define IS_PFORTE(e)    ((e)>=EL_PFORTE1 && (e)<=EL_PFORTE4X)
77
78 #define IS_SOLID(e)     ((e)==EL_BETON || (e)==EL_MAUERWERK || (e)==EL_FELSBODEN || (e)==EL_AUSGANG_ZU || (e)==EL_AUSGANG_ACT || (e)==EL_AUSGANG_AUF || IS_AMOEBOID(e) || (e)==EL_MORAST_VOLL || (e)==EL_MORAST_LEER || (e)==EL_SIEB_VOLL || (e)==EL_SIEB_LEER || (e)==EL_LIFE || (e)==EL_LIFE_ASYNC || IS_BADEWANNOID(e))
79
80 #define IS_MASSIV(e)    ((e)==EL_BETON || (e)==EL_SALZSAEURE || IS_BADEWANNOID(e) || IS_PFORTE(e))
81
82 #define IS_SLIPPERY(e)  ((e)==EL_FELSBODEN || (e)==EL_FELSBROCKEN || (e)==EL_EDELSTEIN || (e)==EL_DIAMANT || (e)==EL_BOMBE || (e)==EL_KOKOSNUSS || (e)==EL_ABLENK_EIN || (e)==EL_ABLENK_AUS || (e)==EL_ZEIT_VOLL || (e)==EL_ZEIT_LEER || (e)==EL_BIRNE_EIN || (e)==EL_BIRNE_AUS || (e)==EL_BADEWANNE1 || (e)==EL_BADEWANNE2)
83
84 #define IS_ENEMY(e)     ((e)==EL_KAEFER || (e)==EL_FLIEGER || (e)==EL_MAMPFER || (e)==EL_ZOMBIE || (e)==EL_PACMAN)
85
86 #define CAN_FALL(e)     ((e)==EL_FELSBROCKEN || (e)==EL_EDELSTEIN || (e)==EL_DIAMANT || (e)==EL_BOMBE || (e)==EL_KOKOSNUSS || (e)==EL_TROPFEN || (e)==EL_MORAST_VOLL || (e)==EL_SIEB_VOLL || (e)==EL_ZEIT_VOLL || (e)==EL_ZEIT_LEER)
87
88 #define CAN_SMASH(e)    ((e)==EL_FELSBROCKEN || (e)==EL_EDELSTEIN || (e)==EL_DIAMANT || IS_SCHLUESSEL(e) || (e)==EL_BOMBE || (e)==EL_KOKOSNUSS || (e)==EL_TROPFEN || (e)==EL_ZEIT_VOLL || (e)==EL_ZEIT_LEER)
89
90 #define CAN_CHANGE(e)   ((e)==EL_FELSBROCKEN || (e)==EL_EDELSTEIN || (e)==EL_DIAMANT)
91
92 #define CAN_MOVE(e)     ((e)==EL_KAEFER || (e)==EL_FLIEGER || (e)==EL_MAMPFER || (e)==EL_ZOMBIE || (e)==EL_PACMAN)
93
94 #define COULD_MOVE(e)   (((e)>=EL_KAEFER_R && (e)<=EL_KAEFER_U) || ((e)>=EL_FLIEGER_R && (e)<=EL_FLIEGER_U) || ((e)>=EL_PACMAN_R && (e)==EL_PACMAN_U))
95
96 #define DONT_TOUCH(e)   ((e)==EL_KAEFER || (e)==EL_FLIEGER)
97 #define DONT_GO_TO(e)   (IS_ENEMY(e) || (e)==EL_TROPFEN || (e)==EL_SALZSAEURE)
98
99 #define IS_CHAR(e)      ((e)>=EL_CHAR_START && (e)<=EL_CHAR_END)
100
101 */
102
103
104 #define EP_BIT_AMOEBALIVE       (1<<0)
105 #define EP_BIT_AMOEBOID         (1<<1)
106 #define EP_BIT_BADEWANNOID      (1<<2)
107 #define EP_BIT_SCHLUESSEL       (1<<3)
108 #define EP_BIT_PFORTE           (1<<4)
109 #define EP_BIT_SOLID            (1<<5)
110 #define EP_BIT_MASSIV           (1<<6)
111 #define EP_BIT_SLIPPERY         (1<<7)
112 #define EP_BIT_ENEMY            (1<<8)
113 #define EP_BIT_CAN_FALL         (1<<9)
114 #define EP_BIT_CAN_SMASH        (1<<10)
115 #define EP_BIT_CAN_CHANGE       (1<<11)
116 #define EP_BIT_CAN_MOVE         (1<<12)
117 #define EP_BIT_COULD_MOVE       (1<<13)
118 #define EP_BIT_DONT_TOUCH       (1<<14)
119 #define EP_BIT_DONT_GO_TO       (1<<15)
120 #define EP_BIT_CHAR             (1<<16)
121
122 #define IS_AMOEBALIVE(e)        (Elementeigenschaften[e] & EP_BIT_AMOEBALIVE)
123 #define IS_AMOEBOID(e)          (Elementeigenschaften[e] & EP_BIT_AMOEBOID)
124 #define IS_BADEWANNOID(e)       (Elementeigenschaften[e] & EP_BIT_BADEWANNOID)
125 #define IS_SCHLUESSEL(e)        (Elementeigenschaften[e] & EP_BIT_SCHLUESSEL)
126 #define IS_PFORTE(e)            (Elementeigenschaften[e] & EP_BIT_PFORTE)
127 #define IS_SOLID(e)             (Elementeigenschaften[e] & EP_BIT_SOLID)
128 #define IS_MASSIV(e)            (Elementeigenschaften[e] & EP_BIT_MASSIV)
129 #define IS_SLIPPERY(e)          (Elementeigenschaften[e] & EP_BIT_SLIPPERY)
130 #define IS_ENEMY(e)             (Elementeigenschaften[e] & EP_BIT_ENEMY)
131 #define CAN_FALL(e)             (Elementeigenschaften[e] & EP_BIT_CAN_FALL)
132 #define CAN_SMASH(e)            (Elementeigenschaften[e] & EP_BIT_CAN_SMASH)
133 #define CAN_CHANGE(e)           (Elementeigenschaften[e] & EP_BIT_CAN_CHANGE)
134 #define CAN_MOVE(e)             (Elementeigenschaften[e] & EP_BIT_CAN_MOVE)
135 #define COULD_MOVE(e)           (Elementeigenschaften[e] & EP_BIT_COULD_MOVE)
136 #define DONT_TOUCH(e)           (Elementeigenschaften[e] & EP_BIT_DONT_TOUCH)
137 #define DONT_GO_TO(e)           (Elementeigenschaften[e] & EP_BIT_DONT_GO_TO)
138 #define IS_CHAR(e)              (Elementeigenschaften[e] & EP_BIT_CHAR)
139
140 #define EL_CHANGED(e)           ((e)==EL_FELSBROCKEN ? EL_EDELSTEIN :   \
141                                  (e)==EL_EDELSTEIN   ? EL_DIAMANT :     \
142                                  EL_FELSBROCKEN)
143 #define IS_DRAWABLE(e)          ((e)<EL_BLOCKED)
144 #define IS_NOT_DRAWABLE(e)      ((e)>=EL_BLOCKED)
145 #define TIMESIZE                (TimeLeft*100/level.time)
146 #define LEVELDIR_SIZE(x)        ((x).num_ready + (x).num_free)
147 #define TAPE_IS_EMPTY(x)        ((x).length == 0)
148
149 /* Pixmaps with Xpm or X11 Bitmap files */
150 #define PIX_BACK                0
151 #define PIX_DOOR                1
152 #define PIX_TOONS               2
153 #define PIX_BIGFONT             3
154 #define PIX_SMALLFONT           4
155 /* Pixmaps without them */
156 #define PIX_DB_BACK             5
157 #define PIX_DB_DOOR             6
158 #define PIX_FADEMASK            7
159
160 #define NUM_PICTURES            5
161 #define NUM_PIXMAPS             8
162
163 /* boundaries of arrays etc. */
164 #define MAX_NAMELEN             (10+1)
165
166 #define MAX_LEVNAMLEN           32
167 #define MAX_SC_ENTRIES          15
168 #define MAX_TAPELEN             10000
169
170 #define MAX_LEVDIR_FILENAME     (64+1)
171 #define MAX_LEVDIR_NAME         (16+1)
172 #define MAX_LEVDIR_ENTRIES      15
173 #define MAX_SCORE_ENTRIES       15
174
175 #define MAX_FILENAME            256
176 #define MAX_NUM_AMOEBA          100
177 #define MAX_ELEMENTS            512
178
179 struct PictureFile
180 {
181   char *picture_filename;
182   char *picturemask_filename;
183 };
184
185 struct HiScore
186 {
187   char Name[MAX_NAMELEN];
188   int Score;
189 };
190
191 struct PlayerInfo
192 {
193   char login_name[MAX_NAMELEN];
194   char alias_name[MAX_NAMELEN];
195   int handicap;
196   unsigned int setup;
197   int leveldir_nr;
198 };
199
200 struct LevelInfo
201 {
202   int fieldx;
203   int fieldy;
204   int time;
205   int edelsteine;
206   char name[MAX_LEVNAMLEN];
207   int score[MAX_SC_ENTRIES];
208   int amoebe_inhalt;
209   int mampfer_inhalt[4][3][3];
210   int tempo_amoebe;
211   int dauer_sieb;
212   int dauer_ablenk;
213 };
214
215 struct LevelDirInfo
216 {
217   char filename[MAX_LEVDIR_FILENAME];
218   char name[MAX_LEVDIR_NAME];
219   int num_ready;
220   int num_free;
221 };
222
223 struct RecordingInfo
224 {
225   int level_nr;
226   unsigned int random_seed;
227   unsigned long date;
228   unsigned long counter;
229   unsigned long length;
230   BOOL recording, playing, pausing;
231   struct
232   {
233     unsigned char joystickdata;
234     unsigned char delay;
235   } pos[MAX_TAPELEN];
236 };
237
238 struct JoystickInfo
239 {
240   int xleft, xright, xmiddle;
241   int yupper, ylower, ymiddle;
242 };
243
244 extern Display         *display;
245 extern int              screen;
246 extern Window           window;
247 extern GC               gc, plane_gc;
248 extern GC               clip_gc[];
249 extern XImage          *image[];
250 extern Pixmap           clipmask[];
251 extern Pixmap           pix[];
252 extern XpmAttributes    xpm_att[];
253 extern Drawable         drawto, drawto_field, backbuffer;
254 extern Colormap         cmap;
255
256 extern int              sound_pipe[2];
257 extern int              sound_device;
258 extern char            *sound_device_name;
259 extern int              joystick_device;
260 extern char            *joystick_device_name[2];
261 extern int              width, height;
262 extern unsigned long    pen_fg, pen_bg;
263
264 extern int              game_status;
265 extern int              button_status, motion_status;
266 extern int              key_status;
267 extern int              global_joystick_status, joystick_status;
268 extern int              sound_status, sound_on;
269 extern int              sound_loops_allowed, sound_loops_on;
270 extern int              sound_music_on;
271 extern int              toons_on;
272 extern int              direct_draw_on;
273 extern int              fading_on;
274 extern int              autorecord_on;
275 extern int              joystick_nr;
276 extern int              quick_doors;
277
278 extern BOOL             redraw[SCR_FIELDX][SCR_FIELDY];
279 extern int              redraw_mask;
280 extern int              redraw_tiles;
281
282 extern int              Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
283 extern int              Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
284 extern int              MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
285 extern int              MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
286 extern int              MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
287 extern int              Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
288 extern int              Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
289 extern int              Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
290 extern int              Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
291 extern int              AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
292 extern int              AmoebaCnt[MAX_NUM_AMOEBA];
293 extern long             Elementeigenschaften[MAX_ELEMENTS];
294
295 extern int              level_nr, leveldir_nr, num_leveldirs;
296 extern int              lev_fieldx,lev_fieldy, scroll_x,scroll_y;
297
298 extern int              LevelSolved,GameOver, JX,JY, ZX,ZY;
299 extern int              Gems,Dynamite,Key[4],TimeLeft,Score,MampferNr;
300 extern int              CheckMoving,CheckExploding, SiebAktiv;
301
302 extern struct LevelDirInfo      leveldir[];
303 extern struct LevelInfo         level;
304 extern struct PlayerInfo        player;
305 extern struct HiScore           highscore[];
306 extern struct RecordingInfo     tape, master_tape;
307 extern struct JoystickInfo      joystick[];
308
309 extern int              background_loop[];
310 extern int              num_bg_loops;
311
312 extern char            *progname;
313
314
315 /* often used screen positions */
316 #define SX              8
317 #define SY              8
318 #define REAL_SX         (SX-2)
319 #define REAL_SY         (SY-2)
320 #define DX              566
321 #define DY              60
322 #define VX              DX
323 #define VY              400
324 #define TILEX           32
325 #define TILEY           32
326 #define MINI_TILEX      (TILEX/2)
327 #define MINI_TILEY      (TILEY/2)
328 #define MICRO_TILEX     (TILEX/8)
329 #define MICRO_TILEY     (TILEY/8)
330 #define MIDPOSX         (SCR_FIELDX/2)
331 #define MIDPOSY         (SCR_FIELDY/2)
332 #define SXSIZE          (SCR_FIELDX*TILEX)
333 #define SYSIZE          (SCR_FIELDY*TILEY)
334 #define DXSIZE          100
335 #define DYSIZE          280
336 #define VXSIZE          DXSIZE
337 #define VYSIZE          100
338 #define FULL_SXSIZE     (2+SXSIZE+2)
339 #define FULL_SYSIZE     (2+SYSIZE+2)
340 #define MICROLEV_XPOS   (SX+4*32+16)
341 #define MICROLEV_YPOS   (SX+12*32)
342 #define MICROLEV_XSIZE  (STD_LEV_FIELDX*MICRO_TILEX)
343 #define MICROLEV_YSIZE  (STD_LEV_FIELDY*MICRO_TILEY)
344 #define MICROLABEL_YPOS (MICROLEV_YPOS+MICROLEV_YSIZE+12)
345 #define FONT1_XSIZE     32
346 #define FONT1_YSIZE     32
347 #define FONT2_XSIZE     14
348 #define FONT2_YSIZE     14
349 #define FONT3_XSIZE     11
350 #define FONT3_YSIZE     14
351 #define FONT4_XSIZE     16
352 #define FONT4_YSIZE     16
353
354 #define GFX_STARTX              SX
355 #define GFX_STARTY              SY
356 #define MINI_GFX_STARTX         SX
357 #define MINI_GFX_STARTY         432
358 #define MICRO_GFX_STARTX        SX
359 #define MICRO_GFX_STARTY        528
360 #define GFX_PER_LINE            16
361 #define MINI_GFX_PER_LINE       32
362 #define MICRO_GFX_PER_LINE      128
363 #define FONT_CHARS_PER_LINE     16
364 #define FONT_LINES_PER_FONT     4
365
366 /* game elements:
367 **        0 - 255: real elements, stored in level file
368 **      256 - 511: flag elements, only used at runtime
369 */
370 /* "real" level elements */
371 #define EL_LEERRAUM     0
372 #define EL_ERDREICH     1
373 #define EL_MAUERWERK    2
374 #define EL_FELSBODEN    3
375 #define EL_FELSBROCKEN  4
376 #define EL_SCHLUESSEL   5
377 #define EL_EDELSTEIN    6
378 #define EL_AUSGANG_ZU   7
379 #define EL_SPIELFIGUR   8
380 #define EL_KAEFER       9
381 #define EL_FLIEGER      10
382 #define EL_MAMPFER      11
383 #define EL_ZOMBIE       12
384 #define EL_BETON        13
385 #define EL_DIAMANT      14
386 #define EL_AMOEBE_TOT   15
387 #define EL_MORAST_LEER  16
388 #define EL_MORAST_VOLL  17
389 #define EL_TROPFEN      18
390 #define EL_BOMBE        19
391 #define EL_SIEB_LEER    20
392 #define EL_SIEB_VOLL    21
393 #define EL_SALZSAEURE   22
394 #define EL_AMOEBE_NASS  23
395 #define EL_AMOEBE_NORM  24
396 #define EL_KOKOSNUSS    25
397 #define EL_LIFE         26
398 #define EL_LIFE_ASYNC   27
399 #define EL_DYNAMIT      28
400 #define EL_BADEWANNE    29
401 #define EL_ABLENK_AUS   30
402 #define EL_ABLENK_EIN   31
403 #define EL_SCHLUESSEL1  32
404 #define EL_SCHLUESSEL2  33
405 #define EL_SCHLUESSEL3  34
406 #define EL_SCHLUESSEL4  35
407 #define EL_PFORTE1      36
408 #define EL_PFORTE2      37
409 #define EL_PFORTE3      38
410 #define EL_PFORTE4      39
411 #define EL_PFORTE1X     40
412 #define EL_PFORTE2X     41
413 #define EL_PFORTE3X     42
414 #define EL_PFORTE4X     43
415 #define EL_DYNAMIT_AUS  44
416 #define EL_PACMAN       45
417 #define EL_UNSICHTBAR   46
418 #define EL_BIRNE_AUS    47
419 #define EL_BIRNE_EIN    48
420 #define EL_ERZ_EDEL     49
421 #define EL_ERZ_DIAM     50
422 #define EL_AMOEBE_VOLL  51
423 #define EL_AMOEBA2DIAM  52
424 #define EL_ZEIT_VOLL    53
425 #define EL_ZEIT_LEER    54
426
427 #define EL_SPIELER1     80
428 #define EL_SPIELER2     81
429 #define EL_SPIELER3     82
430 #define EL_SPIELER4     83
431 #define EL_KAEFER_R     84
432 #define EL_KAEFER_O     85
433 #define EL_KAEFER_L     86
434 #define EL_KAEFER_U     87
435 #define EL_FLIEGER_R    88
436 #define EL_FLIEGER_O    89
437 #define EL_FLIEGER_L    90
438 #define EL_FLIEGER_U    91
439 #define EL_PACMAN_R     92
440 #define EL_PACMAN_O     93
441 #define EL_PACMAN_L     94
442 #define EL_PACMAN_U     95
443
444 #define EL_BADEWANNE1   100
445 #define EL_BADEWANNE2   101
446 #define EL_BADEWANNE3   102
447 #define EL_BADEWANNE4   103
448 #define EL_BADEWANNE5   104
449 #define EL_SIEB_TOT     105
450 #define EL_AUSGANG_ACT  106
451 #define EL_AUSGANG_AUF  107
452
453 #define EL_CHAR_START   120
454 #define EL_CHAR_ASCII0  (EL_CHAR_START-32)
455 #define EL_CHAR_AUSRUF  (EL_CHAR_ASCII0+33)
456 #define EL_CHAR_ZOLL    (EL_CHAR_ASCII0+34)
457 #define EL_CHAR_DOLLAR  (EL_CHAR_ASCII0+36)
458 #define EL_CHAR_PROZ    (EL_CHAR_ASCII0+37)
459 #define EL_CHAR_APOSTR  (EL_CHAR_ASCII0+39)
460 #define EL_CHAR_KLAMM1  (EL_CHAR_ASCII0+40)
461 #define EL_CHAR_KLAMM2  (EL_CHAR_ASCII0+41)
462 #define EL_CHAR_PLUS    (EL_CHAR_ASCII0+43)
463 #define EL_CHAR_KOMMA   (EL_CHAR_ASCII0+44)
464 #define EL_CHAR_MINUS   (EL_CHAR_ASCII0+45)
465 #define EL_CHAR_PUNKT   (EL_CHAR_ASCII0+46)
466 #define EL_CHAR_SLASH   (EL_CHAR_ASCII0+47)
467 #define EL_CHAR_0       (EL_CHAR_ASCII0+48)
468 #define EL_CHAR_9       (EL_CHAR_ASCII0+57)
469 #define EL_CHAR_DOPPEL  (EL_CHAR_ASCII0+58)
470 #define EL_CHAR_SEMIKL  (EL_CHAR_ASCII0+59)
471 #define EL_CHAR_LT      (EL_CHAR_ASCII0+60)
472 #define EL_CHAR_GLEICH  (EL_CHAR_ASCII0+61)
473 #define EL_CHAR_GT      (EL_CHAR_ASCII0+62)
474 #define EL_CHAR_FRAGE   (EL_CHAR_ASCII0+63)
475 #define EL_CHAR_AT      (EL_CHAR_ASCII0+64)
476 #define EL_CHAR_A       (EL_CHAR_ASCII0+65)
477 #define EL_CHAR_Z       (EL_CHAR_ASCII0+90)
478 #define EL_CHAR_AE      (EL_CHAR_ASCII0+91)
479 #define EL_CHAR_OE      (EL_CHAR_ASCII0+92)
480 #define EL_CHAR_UE      (EL_CHAR_ASCII0+93)
481 #define EL_CHAR_COPY    (EL_CHAR_ASCII0+94)
482 #define EL_CHAR_END     (EL_CHAR_START+79)
483
484 /* "unreal" runtime elements */
485 #define EL_BLOCKED      300
486 #define EL_EXPLODING    301
487 #define EL_CRACKINGNUT  302
488 #define EL_BLURB_LEFT   303
489 #define EL_BLURB_RIGHT  304
490 #define EL_AMOEBING     305
491
492 /* names for the graphic objects */
493 /* Zeile 0 (0) */
494 #define GFX_LEERRAUM    (-1)
495 #define GFX_ERDREICH    0
496 #define GFX_ERDENRAND   1
497 #define GFX_MORAST_LEER 2
498 #define GFX_MORAST_VOLL 3
499 #define GFX_BETON       4
500 #define GFX_MAUERWERK   5
501 #define GFX_FELSBODEN   6
502 #define GFX_BOMBE_MM    7
503 #define GFX_EDELSTEIN   8
504 #define GFX_DIAMANT     10
505 #define GFX_FELSBROCKEN 12
506 /* Zeile 1 (16) */
507 #define GFX_BADEWANNE1  16
508 #define GFX_SALZSAEURE  17
509 #define GFX_BADEWANNE2  18
510 #define GFX_UNSICHTBAR  19
511 #define GFX_SCHLUESSEL1 20
512 #define GFX_SCHLUESSEL2 21
513 #define GFX_SCHLUESSEL3 22
514 #define GFX_SCHLUESSEL4 23
515 #define GFX_LIFE        24
516 #define GFX_LIFE_ASYNC  25
517 #define GFX_BADEWANNE   26
518 #define GFX_BOMBE       27
519 #define GFX_KOKOSNUSS   28
520 #define GFX_CRACKINGNUT 29
521 /* Zeile 2 (32) */
522 #define GFX_BADEWANNE3  32
523 #define GFX_BADEWANNE4  33
524 #define GFX_BADEWANNE5  34
525 #define GFX_SPIELFIGUR  35
526 #define GFX_PFORTE1     36
527 #define GFX_PFORTE2     37
528 #define GFX_PFORTE3     38
529 #define GFX_PFORTE4     39
530 #define GFX_PFORTE1X    40
531 #define GFX_PFORTE2X    41
532 #define GFX_PFORTE3X    42
533 #define GFX_PFORTE4X    43
534 #define GFX_AUSGANG_ZU  44
535 #define GFX_AUSGANG_ACT 44
536 #define GFX_AUSGANG_AUF 47
537 /* Zeile 3 (48) */
538 #define GFX_DYNAMIT_AUS 48
539 #define GFX_DYNAMIT     49
540 #define GFX_FLIEGER     56
541 #define GFX_FLIEGER_R   56
542 #define GFX_FLIEGER_O   57
543 #define GFX_FLIEGER_L   58
544 #define GFX_FLIEGER_U   59
545 /* Zeile 4 (64) */
546 #define GFX_EXPLOSION   64
547 #define GFX_KAEFER      72
548 #define GFX_KAEFER_R    72
549 #define GFX_KAEFER_O    73
550 #define GFX_KAEFER_L    74
551 #define GFX_KAEFER_U    75
552 /* Zeile 5 (80) */
553 #define GFX_MAMPFER     80
554 #define GFX_ZOMBIE      84
555 #define GFX_PACMAN      88
556 #define GFX_PACMAN_R    88
557 #define GFX_PACMAN_O    89
558 #define GFX_PACMAN_L    90
559 #define GFX_PACMAN_U    91
560 /* Zeile 6 (96) */
561 #define GFX_ABLENK      96
562 #define GFX_ABLENK_EIN  GFX_ABLENK
563 #define GFX_ABLENK_AUS  GFX_ABLENK
564 #define GFX_AMOEBE_NASS 100
565 #define GFX_TROPFEN     101
566 #define GFX_AMOEBING    GFX_TROPFEN
567 #define GFX_AMOEBE_LEBT 104
568 #define GFX_AMOEBE_NORM GFX_AMOEBE_LEBT
569 #define GFX_AMOEBE_TOT  108
570 #define GFX_AMOEBA2DIAM GFX_AMOEBE_TOT
571 #define GFX_ZEIT_VOLL   114
572 #define GFX_ZEIT_LEER   115
573 /* Zeile 7 (112) */
574 #define GFX_GEBLUBBER   124
575 /* Zeile 8 (128) */
576 #define GFX_SIEB_LEER   128
577 #define GFX_SIEB_VOLL   GFX_SIEB_LEER
578 #define GFX_SIEB_TOT    GFX_SIEB_LEER
579 #define GFX_ERZ_EDEL    132
580 #define GFX_ERZ_DIAM    133
581 #define GFX_BIRNE_AUS   134
582 #define GFX_BIRNE_EIN   135
583 #define GFX_AMOEBE_VOLL 136
584 #define GFX_KUGEL_ROT   140
585 #define GFX_KUGEL_BLAU  141
586 #define GFX_KUGEL_GELB  142
587 /* Zeile 9 (144) */
588 #define GFX_BLURB_LEFT  144
589 #define GFX_BLURB_RIGHT 148
590
591 #define GFX_SCHLUESSEL  GFX_SCHLUESSEL1
592
593 #define GFX_SPIELER1    116
594 #define GFX_SPIELER2    117
595 #define GFX_SPIELER3    118
596 #define GFX_SPIELER4    119
597
598 /* nicht in "RocksScreen" sondern woanders :) */
599 #define GFX_CHAR_START  256
600 #define GFX_CHAR_ASCII0 (GFX_CHAR_START-32)
601 #define GFX_CHAR_AUSRUF (GFX_CHAR_ASCII0+33)
602 #define GFX_CHAR_ZOLL   (GFX_CHAR_ASCII0+34)
603 #define GFX_CHAR_DOLLAR (GFX_CHAR_ASCII0+36)
604 #define GFX_CHAR_PROZ   (GFX_CHAR_ASCII0+37)
605 #define GFX_CHAR_APOSTR (GFX_CHAR_ASCII0+39)
606 #define GFX_CHAR_KLAMM1 (GFX_CHAR_ASCII0+40)
607 #define GFX_CHAR_KLAMM2 (GFX_CHAR_ASCII0+41)
608 #define GFX_CHAR_PLUS   (GFX_CHAR_ASCII0+43)
609 #define GFX_CHAR_KOMMA  (GFX_CHAR_ASCII0+44)
610 #define GFX_CHAR_MINUS  (GFX_CHAR_ASCII0+45)
611 #define GFX_CHAR_PUNKT  (GFX_CHAR_ASCII0+46)
612 #define GFX_CHAR_SLASH  (GFX_CHAR_ASCII0+47)
613 #define GFX_CHAR_0      (GFX_CHAR_ASCII0+48)
614 #define GFX_CHAR_9      (GFX_CHAR_ASCII0+57)
615 #define GFX_CHAR_DOPPEL (GFX_CHAR_ASCII0+58)
616 #define GFX_CHAR_SEMIKL (GFX_CHAR_ASCII0+59)
617 #define GFX_CHAR_LT     (GFX_CHAR_ASCII0+60)
618 #define GFX_CHAR_GLEICH (GFX_CHAR_ASCII0+61)
619 #define GFX_CHAR_GT     (GFX_CHAR_ASCII0+62)
620 #define GFX_CHAR_FRAGE  (GFX_CHAR_ASCII0+63)
621 #define GFX_CHAR_AT     (GFX_CHAR_ASCII0+64)
622 #define GFX_CHAR_A      (GFX_CHAR_ASCII0+65)
623 #define GFX_CHAR_Z      (GFX_CHAR_ASCII0+90)
624 #define GFX_CHAR_AE     (GFX_CHAR_ASCII0+91)
625 #define GFX_CHAR_OE     (GFX_CHAR_ASCII0+92)
626 #define GFX_CHAR_UE     (GFX_CHAR_ASCII0+93)
627 #define GFX_CHAR_COPY   (GFX_CHAR_ASCII0+94)
628 #define GFX_CHAR_END    (GFX_CHAR_START+79)
629
630 /* score for elements */
631 #define SC_EDELSTEIN    0
632 #define SC_DIAMANT      1
633 #define SC_KAEFER       2
634 #define SC_FLIEGER      3
635 #define SC_MAMPFER      4
636 #define SC_ZOMBIE       5
637 #define SC_PACMAN       6
638 #define SC_KOKOSNUSS    7
639 #define SC_DYNAMIT      8
640 #define SC_SCHLUESSEL   9
641 #define SC_ZEITBONUS    10
642
643 /* the names of the sounds */
644 #define SND_ALCHEMY     0
645 #define SND_AMOEBE      1
646 #define SND_ANTIGRAV    2
647 #define SND_AUTSCH      3
648 #define SND_BLURB       4
649 #define SND_BONG        5
650 #define SND_BUING       6
651 #define SND_CHASE       7
652 #define SND_CZARDASZ    8
653 #define SND_DENG        9
654 #define SND_FUEL        10
655 #define SND_GONG        11
656 #define SND_HALLOFFAME  12
657 #define SND_HOLZ        13
658 #define SND_HUI         14
659 #define SND_KABUMM      15
660 #define SND_KINK        16
661 #define SND_KLAPPER     17
662 #define SND_KLING       18
663 #define SND_KLOPF       19
664 #define SND_KLUMPF      20
665 #define SND_KNACK       21
666 #define SND_KNURK       22
667 #define SND_KRACH       23
668 #define SND_LACHEN      24
669 #define SND_LASER       25
670 #define SND_MIEP        26
671 #define SND_NETWORK     27
672 #define SND_NJAM        28
673 #define SND_OEFFNEN     29
674 #define SND_PLING       30
675 #define SND_PONG        31
676 #define SND_PUSCH       32
677 #define SND_QUIEK       33
678 #define SND_QUIRK       34
679 #define SND_RHYTHMLOOP  35
680 #define SND_ROAAAR      36
681 #define SND_ROEHR       37
682 #define SND_RUMMS       38
683 #define SND_SCHLOPP     39
684 #define SND_SCHLURF     40
685 #define SND_SCHRFF      41
686 #define SND_SCHWIRR     42
687 #define SND_SIRR        43
688 #define SND_SLURP       44
689 #define SND_SPROING     45
690 #define SND_TWILIGHT    46
691 #define SND_TYGER       47
692 #define SND_VOYAGER     48
693 #define SND_WARNTON     49
694 #define SND_WHOOSH      50
695 #define SND_ZISCH       51
696
697 #define NUM_SOUNDS      52
698
699 #define IS_LOOP_SOUND(s)        ((s)==SND_KLAPPER || (s)==SND_ROEHR ||  \
700                                  (s)==SND_NJAM || (s)==SND_MIEP)
701 #define IS_MUSIC_SOUND(s)       ((s)==SND_ALCHEMY || (s)==SND_CHASE || \
702                                  (s)==SND_NETWORK || (s)==SND_CZARDASZ || \
703                                  (s)==SND_TYGER || (s)==SND_VOYAGER || \
704                                  (s)==SND_TWILIGHT)
705 extern char *sound_name[NUM_SOUNDS];
706
707 /* this structure contains the sound data for the sound server */
708 extern struct SoundInfo Sound[NUM_SOUNDS];
709
710 /* directions for moving */
711 #define MV_NO_MOVING    0
712 #define MV_LEFT         1
713 #define MV_RIGHT        2
714 #define MV_UP           4
715 #define MV_DOWN         8
716
717 /* font types */
718 #define FS_SMALL        0
719 #define FS_BIG          1
720 /* font colors */
721 #define FC_RED          0
722 #define FC_BLUE         1
723 #define FC_GREEN        2
724 #define FC_YELLOW       3
725 #define FC_SPECIAL1     4
726 #define FC_SPECIAL2     5
727
728 /* values for game_status */
729 #define MAINMENU        0
730 #define PLAYING         1
731 #define LEVELED         2
732 #define HELPSCREEN      3
733 #define CHOOSELEVEL     4
734 #define TYPENAME        5
735 #define HALLOFFAME      6
736 #define SETUP           7
737 #define EXITGAME        8
738
739 /* return values for GameActions */
740 #define ACT_GO_ON       0
741 #define ACT_GAME_OVER   1
742 #define ACT_NEW_GAME    2
743
744 /* values for the joystick */
745 #define JOYSTICK_OFF            0
746 #define JOYSTICK_AVAILABLE      1
747 #ifdef __FreeBSD__
748 #define DEV_JOYSTICK_0          "/dev/joy0"
749 #define DEV_JOYSTICK_1          "/dev/joy1"
750 #else
751 #define DEV_JOYSTICK_0          "/dev/js0"
752 #define DEV_JOYSTICK_1          "/dev/js1"
753 #endif
754
755 /* get these values from the program 'js' from the joystick package, */
756 /* set JOYSTICK_PERCENT to a threshold appropriate for your joystick */
757 #define JOYSTICK_XLEFT          30
758 #define JOYSTICK_XRIGHT         1250
759 #define JOYSTICK_XMIDDLE        530
760 #define JOYSTICK_YUPPER         40
761 #define JOYSTICK_YLOWER         1440
762 #define JOYSTICK_YMIDDLE        680
763 #define JOYSTICK_PERCENT        25
764 #define JOY_LEFT                MV_LEFT
765 #define JOY_RIGHT               MV_RIGHT
766 #define JOY_UP                  MV_UP
767 #define JOY_DOWN                MV_DOWN
768 #define JOY_BUTTON_1            16
769 #define JOY_BUTTON_2            32
770 #define JOY_BUTTON              (JOY_BUTTON_1 | JOY_BUTTON_2)
771 #define JOY_BUTTON_NOT_PRESSED  0
772 #define JOY_BUTTON_PRESSED      1
773 #define JOY_BUTTON_NEW_PRESSED  2
774 #define JOY_BUTTON_NEW_RELEASED 3
775
776 #ifdef NO_JOYSTICK
777 #define JOYSTICK_STATUS JOYSTICK_OFF
778 #else
779 #define JOYSTICK_STATUS JOYSTICK_AVAILABLE
780 #endif
781
782 #ifndef GAME_DIR
783 #define GAME_DIR        "."
784 #endif
785
786 #ifndef GFX_PATH
787 #define GFX_PATH        GAME_DIR "/graphics"
788 #endif
789 #ifndef SND_PATH
790 #define SND_PATH        GAME_DIR "/sounds"
791 #endif
792 #ifndef LEVEL_PATH
793 #define LEVEL_PATH      GAME_DIR "/levels"
794 #endif
795 #ifndef SCORE_PATH
796 #define SCORE_PATH      LEVEL_PATH
797 #endif
798 #ifndef NAMES_PATH
799 #define NAMES_PATH      LEVEL_PATH
800 #endif
801 #ifndef CONFIG_PATH
802 #define CONFIG_PATH     GAME_DIR
803 #endif
804 #ifndef JOYDAT_PATH
805 #define JOYDAT_PATH     GAME_DIR
806 #endif
807
808 #define SCORE_FILENAME  "ROCKS.score"
809 #define NAMES_FILENAME  "ROCKS.names"
810 #define LEVDIR_FILENAME "ROCKS.levelinfo"
811 #define JOYDAT_FILENAME "ROCKS.joystick"
812
813 #define JOYDAT_FILE     JOYDAT_PATH "/" JOYDAT_FILENAME
814
815 #define LEVEL_PERMS     (S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP | S_IROTH|S_IWOTH)
816 #define SCORE_PERMS     LEVEL_PERMS
817 #define NAMES_PERMS     LEVEL_PERMS
818 #define LEVDIR_PERMS    LEVEL_PERMS
819 #define LEVREC_PERMS    LEVEL_PERMS
820 #define JOYDAT_PERMS    LEVEL_PERMS
821
822 #define LEVEL_COOKIE    "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_1.0"
823 #define SCORE_COOKIE    "ROCKSNDIAMONDS_SCORE_FILE_VERSION_1.0"
824 #define NAMES_COOKIE    "ROCKSNDIAMONDS_NAMES_FILE_VERSION_1.0"
825 #define LEVELDIR_COOKIE "ROCKSNDIAMONDS_LEVELDIR_FILE_VERSION_1.0"
826 #define LEVELREC_COOKIE "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.0"
827 #define JOYSTICK_COOKIE "ROCKSNDIAMONDS_JOYSTICK_FILE_VERSION_1.0"
828 #define LEVEL_COOKIE_LEN        (strlen(LEVEL_COOKIE)+1)
829 #define SCORE_COOKIE_LEN        (strlen(SCORE_COOKIE)+1)
830 #define NAMES_COOKIE_LEN        (strlen(NAMES_COOKIE)+1)
831 #define LEVELDIR_COOKIE_LEN     (strlen(LEVELDIR_COOKIE)+1)
832 #define LEVELREC_COOKIE_LEN     (strlen(LEVELREC_COOKIE)+1)
833 #define JOYSTICK_COOKIE_LEN     (strlen(JOYSTICK_COOKIE)+1)
834
835 /* Leerer Login- und Alias-Name */
836 #define EMPTY_LOGIN     "NO_LOGIN"
837 #define EMPTY_ALIAS     "NO_NAME"
838
839 /* values for button_status */
840 #define MB_NOT_PRESSED  FALSE
841 #define MB_RELEASED     FALSE
842 #define MB_PRESSED      TRUE
843 #define MB_MENU_CHOICE  FALSE
844 #define MB_MENU_MARK    TRUE
845 #define MB_LEFT         1
846 #define MB_MIDDLE       2
847 #define MB_RIGHT        3
848
849 /* values for key_status */
850 #define KEY_NOT_PRESSED FALSE
851 #define KEY_RELEASED    FALSE
852 #define KEY_PRESSED     TRUE
853
854 /* values for focus_status */
855 #define FOCUS_OUT       FALSE
856 #define FOCUS_IN        TRUE
857
858 /* values for redraw_mask */
859 #define REDRAW_ALL      (1L<<0)
860 #define REDRAW_FIELD    (1L<<1)
861 #define REDRAW_TILES    (1L<<2)
862 #define REDRAW_DOOR_1   (1L<<3)
863 #define REDRAW_VIDEO_1  (1L<<4)
864 #define REDRAW_VIDEO_2  (1L<<5)
865 #define REDRAW_VIDEO_3  (1L<<6)
866 #define REDRAW_MICROLEV (1L<<7)
867 #define REDRAW_DOOR_2   (REDRAW_VIDEO_1 | REDRAW_VIDEO_2 | REDRAW_VIDEO_3)
868 #define REDRAW_DOORS    (REDRAW_DOOR_1 | REDRAW_DOOR_2)
869 #define REDRAW_MAIN     (REDRAW_FIELD | REDRAW_TILES | REDRAW_MICROLEV)
870 #define REDRAWTILES_TH  SCR_FIELDX*SCR_FIELDY/2
871
872 /* positions in the game control window */
873 #define XX_LEVEL        37
874 #define YY_LEVEL        20
875 #define XX_EMERALDS     29
876 #define YY_EMERALDS     54
877 #define XX_DYNAMITE     29
878 #define YY_DYNAMITE     89
879 #define XX_KEYS         18
880 #define YY_KEYS         123
881 #define XX_SCORE        15
882 #define YY_SCORE        159
883 #define XX_TIME         29
884 #define YY_TIME         194
885
886 #define DX_LEVEL        (DX+XX_LEVEL)
887 #define DY_LEVEL        (DY+YY_LEVEL)
888 #define DX_EMERALDS     (DX+XX_EMERALDS)
889 #define DY_EMERALDS     (DY+YY_EMERALDS)
890 #define DX_DYNAMITE     (DX+XX_DYNAMITE)
891 #define DY_DYNAMITE     (DY+YY_DYNAMITE)
892 #define DX_KEYS         (DX+XX_KEYS)
893 #define DY_KEYS         (DY+YY_KEYS)
894 #define DX_SCORE        (DX+XX_SCORE)
895 #define DY_SCORE        (DY+YY_SCORE)
896 #define DX_TIME         (DX+XX_TIME)
897 #define DY_TIME         (DY+YY_TIME)
898
899 /* Felder in PIX_DOOR */
900 /* Bedeutung in PIX_DB_DOOR: (3 PAGEs)
901    PAGEX1: 1. Zwischenspeicher für DOOR_1
902    PAGEX2: 2. Zwischenspeicher für DOOR_1
903    PAGEX3: Pufferspeicher für Animationen
904 */
905
906 #define DOOR_GFX_PAGESIZE       DXSIZE
907 #define DOOR_GFX_PAGEX1         (0*DOOR_GFX_PAGESIZE)
908 #define DOOR_GFX_PAGEX2         (1*DOOR_GFX_PAGESIZE)
909 #define DOOR_GFX_PAGEX3         (2*DOOR_GFX_PAGESIZE)
910 #define DOOR_GFX_PAGEX4         (3*DOOR_GFX_PAGESIZE)
911 #define DOOR_GFX_PAGEX5         (4*DOOR_GFX_PAGESIZE)
912 #define DOOR_GFX_PAGEX6         (5*DOOR_GFX_PAGESIZE)
913 #define DOOR_GFX_PAGEY1         0
914 #define DOOR_GFX_PAGEY2         DYSIZE
915
916 #endif