rocks_n_diamonds-0.9
[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 *  Letzte Aenderung: 15.06.1995                            *
15 ***********************************************************/
16
17 #ifndef MAIN_H
18 #define MAIN_H
19
20 #define XK_MISCELLANY
21 #define XK_LATIN1
22
23 #include <X11/Xlib.h>
24 #include <X11/Xutil.h>
25 #include <X11/Xos.h>
26 #include <X11/Intrinsic.h>
27 #include <X11/keysymdef.h>
28
29 #include XPM_INCLUDE_FILE
30
31 #include <sys/types.h>
32 #include <sys/stat.h>
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <string.h>
36 #include <errno.h>
37
38 typedef int BOOL;
39
40 #define TRUE            1
41 #define FALSE           0
42
43 #define WIN_XPOS        0
44 #define WIN_YPOS        0
45 #define WIN_XSIZE       672
46 #define WIN_YSIZE       560
47 #define SCR_FIELDX      17
48 #define SCR_FIELDY      17
49
50 /*
51
52 #define LEV_FIELDX      64
53 #define LEV_FIELDY      32
54
55 */
56
57 #define MIN_LEV_FIELDX  (SCR_FIELDX-2)
58 #define MIN_LEV_FIELDY  (SCR_FIELDY-2)
59 #define STD_LEV_FIELDX  64
60 #define STD_LEV_FIELDY  32
61 #define MAX_LEV_FIELDX  128
62 #define MAX_LEV_FIELDY  128
63
64 #define MIN(a,b)        ((a)<(b) ? (a) : (b))
65 #define MAX(a,b)        ((a)>(b) ? (a) : (b))
66 #define ABS(a)          ((a)<0 ? -(a) : (a))
67 #define SIGN(a)         ((a)<0 ? -1 : ((a)>0 ? 1 : 0))
68 #define SCROLLX(a)      ((a)-scroll_x)
69 #define SCROLLY(a)      ((a)-scroll_y)
70 #define UNSCROLLX(a)    ((a)+scroll_x)
71 #define UNSCROLLY(a)    ((a)+scroll_y)
72 #define IN_SCR_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
73 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
74 #define PLAYER(x,y)     (JX==(x) && JY==(y))
75 #define IS_FREE(x,y)    (Feld[x][y]==EL_LEERRAUM && !PLAYER(x,y))
76 #define IS_MOVING(x,y)  (MovPos[x][y]!=0)
77 #define IS_BLOCKED(x,y) (Feld[x][y]==EL_BLOCKED)
78 #define IS_AMOEBOID(e)  ((e)==EL_AMOEBE1 || (e)==EL_AMOEBE2 || (e)==EL_AMOEBE3)
79 #define IS_BADEWANNOID(e) ((e)>=EL_BADEWANNE1 && (e)<=EL_BADEWANNE5)
80 #define IS_SCHLUESSEL(e) ((e)>=EL_SCHLUESSEL1 && (e)<=EL_SCHLUESSEL4)
81 #define IS_PFORTE(e)    ((e)>=EL_PFORTE1 && (e)<=EL_PFORTE4X)
82 #define IS_CHAR(e)      ((e)>=EL_CHAR_START && (e)<=EL_CHAR_END)
83
84 #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))
85
86 #define IS_MASSIV(e)    ((e)==EL_BETON || (e)==EL_SALZSAEURE || IS_BADEWANNOID(e) || IS_PFORTE(e))
87
88 #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)
89
90 #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)
91
92 #define CAN_CHANGE(e)   ((e)==EL_FELSBROCKEN || (e)==EL_EDELSTEIN || (e)==EL_DIAMANT)
93
94 #define CAN_MOVE(e)     ((e)==EL_KAEFER || (e)==EL_FLIEGER || (e)==EL_MAMPFER || (e)==EL_ZOMBIE || (e)==EL_PACMAN)
95
96 #define COULD_MOVE(e)   (((e)>=EL_KAEFER_R && (e)<=EL_KAEFER_U) || ((e)>=EL_FLIEGER_R && (e)<=EL_FLIEGER_U) || ((e)>=EL_PACMAN && (e)==EL_PACMAN_U))
97
98 /*
99 #define CAN_KILL(e)     ((e)==EL_KAEFER || (e)==EL_FLIEGER || (e)==EL_MAMPFER || (e)==EL_ZOMBIE || (e)==EL_PACMAN || (e)==EL_TROPFEN)
100 */
101
102 #define IS_ENEMY(e)     ((e)==EL_KAEFER || (e)==EL_FLIEGER || (e)==EL_MAMPFER || (e)==EL_ZOMBIE || (e)==EL_PACMAN)
103 #define DONT_TOUCH(e)   ((e)==EL_KAEFER || (e)==EL_FLIEGER)
104 #define DONT_GO_TO(e)   (IS_ENEMY(e) || (e)==EL_TROPFEN || (e)==EL_SALZSAEURE)
105
106 #define 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_BADEWANNE1 || (e)==EL_BADEWANNE2)
107
108 #define EL_CHANGED(e)   ((e)==EL_FELSBROCKEN ? EL_EDELSTEIN : (e)==EL_EDELSTEIN ? EL_DIAMANT : EL_FELSBROCKEN)
109 #define IS_DRAWABLE(e)          ((e)<EL_BLOCKED)
110 #define IS_NOT_DRAWABLE(e)      ((e)>=EL_BLOCKED)
111 #define TIMESIZE        (TimeLeft*100/level.time)
112
113 #define LEVELDIR_SIZE(x)        ((x).num_ready + (x).num_free)
114 #define TAPE_IS_EMPTY(x)        ((x).length == 0)
115
116 /* Pixmaps with Xpm or X11 Bitmap files */
117 #define PIX_BACK                0
118 #define PIX_DOOR                1
119 #define PIX_TOONS               2
120 #define PIX_BIGFONT             3
121 #define PIX_SMALLFONT           4
122 /* Pixmaps without them */
123 #define PIX_DB_BACK             5
124 #define PIX_DB_DOOR             6
125 #define PIX_FADEMASK            7
126
127 #define NUM_PICTURES            5
128 #define NUM_PIXMAPS             8
129
130 #define MAX_NAMELEN             (10+1)
131
132 #define MAX_LEVNAMLEN           32
133 #define MAX_SC_ENTRIES          16
134 #define MAX_TAPELEN             10000
135
136 #define MAX_LEVDIR_FILENAME     (64+1)
137 #define MAX_LEVDIR_NAME         (16+1)
138 #define MAX_LEVDIR_ENTRIES      15
139 #define MAX_SCORE_ENTRIES       15
140
141 #define MAX_FILENAME            256
142
143 struct PictureFile
144 {
145   char *picture_filename;
146   char *picturemask_filename;
147 };
148
149 struct HiScore
150 {
151   char Name[MAX_NAMELEN];
152   int Score;
153 };
154
155 struct PlayerInfo
156 {
157   char login_name[MAX_NAMELEN];
158   char alias_name[MAX_NAMELEN];
159   int handicap;
160   unsigned int setup;
161   int leveldir_nr;
162 };
163
164 struct LevelInfo
165 {
166   int fieldx;
167   int fieldy;
168   int time;
169   int edelsteine;
170   char name[MAX_LEVNAMLEN];
171   int score[MAX_SC_ENTRIES];
172   int mampfer_inhalt[4][3][3];
173   int tempo_amoebe;
174   int dauer_sieb;
175   int dauer_ablenk;
176 };
177
178 struct LevelDirInfo
179 {
180   char filename[MAX_LEVDIR_FILENAME];
181   char name[MAX_LEVDIR_NAME];
182   int num_ready;
183   int num_free;
184 };
185
186 struct RecordingInfo
187 {
188   int level_nr;
189   unsigned int random_seed;
190   unsigned long date;
191   unsigned long counter;
192   unsigned long length;
193   BOOL recording, playing, pausing;
194   struct
195   {
196     unsigned char joystickdata;
197     unsigned char delay;
198   } pos[MAX_TAPELEN];
199 };
200
201 struct JoystickInfo
202 {
203   int xleft, xright, xmiddle;
204   int yupper, ylower, ymiddle;
205 };
206
207 extern Display         *display;
208 extern int              screen;
209 extern Window           window;
210 extern GC               gc, plane_gc;
211 extern GC               clip_gc[];
212 extern XImage          *image[];
213 extern Pixmap           clipmask[];
214 extern Pixmap           pix[];
215 extern XpmAttributes    xpm_att[];
216 extern Drawable         drawto, drawto_field, backbuffer;
217 extern Colormap         cmap;
218
219 extern int              sound_pipe[2];
220 extern int              sound_device;
221 extern char            *sound_device_name;
222 extern int              joystick_device;
223 extern char            *joystick_device_name[2];
224 extern int              width, height;
225 extern unsigned long    pen_fg, pen_bg;
226
227 extern int              game_status;
228 extern int              button_status, motion_status;
229 extern int              key_status;
230 extern int              global_joystick_status, joystick_status;
231 extern int              sound_status, sound_on;
232 extern int              sound_loops_allowed, sound_loops_on;
233 extern int              sound_music_on;
234 extern int              toons_on;
235 extern int              direct_draw_on;
236 extern int              fading_on;
237 extern int              autorecord_on;
238 extern int              joystick_nr;
239
240 extern BOOL             redraw[SCR_FIELDX][SCR_FIELDY];
241 extern int              redraw_mask;
242 extern int              redraw_tiles;
243
244 extern int              Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
245 extern int              Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
246 extern int              MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
247 extern int              MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
248 extern int              MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
249 extern int              Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
250 extern int              Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
251 extern int              Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
252 extern int              Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
253 extern int              level_nr, leveldir_nr, num_leveldirs;
254 extern int              lev_fieldx,lev_fieldy, scroll_x,scroll_y;
255
256 extern int              LevelSolved,GameOver, JX,JY, ZX,ZY;
257 extern int              Gems,Dynamite,Key[4],TimeLeft,Score,MampferNr;
258 extern int              CheckMoving,CheckExploding, SiebAktiv;
259
260 extern struct LevelDirInfo      leveldir[];
261 extern struct LevelInfo         level;
262 extern struct PlayerInfo        player;
263 extern struct HiScore           highscore[];
264 extern struct RecordingInfo     tape, master_tape;
265
266 extern int              background_loop[];
267 extern int              num_bg_loops;
268
269 extern char            *progname;
270
271
272 /* often used screen positions */
273 #define SX              8
274 #define SY              8
275 #define REAL_SX         (SX-2)
276 #define REAL_SY         (SY-2)
277 #define DX              566
278 #define DY              60
279 #define VX              DX
280 #define VY              400
281 #define TILEX           32
282 #define TILEY           32
283 #define MINI_TILEX      (TILEX/2)
284 #define MINI_TILEY      (TILEY/2)
285 #define MICRO_TILEX     (TILEX/8)
286 #define MICRO_TILEY     (TILEY/8)
287 #define MIDPOSX         (SCR_FIELDX/2)
288 #define MIDPOSY         (SCR_FIELDY/2)
289 #define SXSIZE          (SCR_FIELDX*TILEX)
290 #define SYSIZE          (SCR_FIELDY*TILEY)
291 #define DXSIZE          100
292 #define DYSIZE          280
293 #define VXSIZE          DXSIZE
294 #define VYSIZE          100
295 #define FULL_SXSIZE     (2+SXSIZE+2)
296 #define FULL_SYSIZE     (2+SYSIZE+2)
297 #define MICROLEV_XPOS   (SX+4*32+16)
298 #define MICROLEV_YPOS   (SX+12*32)
299 #define MICROLEV_XSIZE  (STD_LEV_FIELDX*MICRO_TILEX)
300 #define MICROLEV_YSIZE  (STD_LEV_FIELDY*MICRO_TILEY)
301 #define MICROLABEL_YPOS (MICROLEV_YPOS+MICROLEV_YSIZE+12)
302 #define FONT1_XSIZE     32
303 #define FONT1_YSIZE     32
304 #define FONT2_XSIZE     14
305 #define FONT2_YSIZE     14
306 #define FONT3_XSIZE     11
307 #define FONT3_YSIZE     14
308 #define FONT4_XSIZE     16
309 #define FONT4_YSIZE     16
310
311 #define GFX_STARTX              SX
312 #define GFX_STARTY              SY
313 #define MINI_GFX_STARTX         SX
314 #define MINI_GFX_STARTY         432
315 #define MICRO_GFX_STARTX        SX
316 #define MICRO_GFX_STARTY        528
317 #define GFX_PER_LINE            16
318 #define MINI_GFX_PER_LINE       32
319 #define MICRO_GFX_PER_LINE      128
320 #define FONT_CHARS_PER_LINE     16
321 #define FONT_LINES_PER_FONT     4
322
323 /* game elements:
324 **      0 - 255: real elements, stored in level file
325 **      256 - ?: flag elements, only used at runtime
326 */
327 /* "real" level elements */
328 #define EL_LEERRAUM     0
329 #define EL_ERDREICH     1
330 #define EL_MAUERWERK    2
331 #define EL_FELSBODEN    3
332 #define EL_FELSBROCKEN  4
333 #define EL_SCHLUESSEL   5
334 #define EL_EDELSTEIN    6
335 #define EL_AUSGANG_ZU   7
336 #define EL_SPIELFIGUR   8
337 #define EL_KAEFER       9
338 #define EL_FLIEGER      10
339 #define EL_MAMPFER      11
340 #define EL_ZOMBIE       12
341 #define EL_BETON        13
342 #define EL_DIAMANT      14
343 #define EL_AMOEBE1      15
344 #define EL_MORAST_LEER  16
345 #define EL_MORAST_VOLL  17
346 #define EL_TROPFEN      18
347 #define EL_BOMBE        19
348 #define EL_SIEB_LEER    20
349 #define EL_SIEB_VOLL    21
350 #define EL_SALZSAEURE   22
351 #define EL_AMOEBE2      23
352 #define EL_AMOEBE3      24
353 #define EL_KOKOSNUSS    25
354 #define EL_LIFE         26
355 #define EL_LIFE_ASYNC   27
356 #define EL_DYNAMIT      28
357 #define EL_BADEWANNE    29
358 #define EL_ABLENK_AUS   30
359 #define EL_ABLENK_EIN   31
360 #define EL_SCHLUESSEL1  32
361 #define EL_SCHLUESSEL2  33
362 #define EL_SCHLUESSEL3  34
363 #define EL_SCHLUESSEL4  35
364 #define EL_PFORTE1      36
365 #define EL_PFORTE2      37
366 #define EL_PFORTE3      38
367 #define EL_PFORTE4      39
368 #define EL_PFORTE1X     40
369 #define EL_PFORTE2X     41
370 #define EL_PFORTE3X     42
371 #define EL_PFORTE4X     43
372 #define EL_DYNAMIT_AUS  44
373 #define EL_PACMAN       45
374 #define EL_UNSICHTBAR   46
375 #define EL_BIRNE_AUS    47
376 #define EL_BIRNE_EIN    48
377 #define EL_ERZ_1        49
378 #define EL_ERZ_2        50
379
380 #define EL_SPIELER1     80
381 #define EL_SPIELER2     81
382 #define EL_SPIELER3     82
383 #define EL_SPIELER4     83
384 #define EL_KAEFER_R     84
385 #define EL_KAEFER_O     85
386 #define EL_KAEFER_L     86
387 #define EL_KAEFER_U     87
388 #define EL_FLIEGER_R    88
389 #define EL_FLIEGER_O    89
390 #define EL_FLIEGER_L    90
391 #define EL_FLIEGER_U    91
392 #define EL_PACMAN_R     92
393 #define EL_PACMAN_O     93
394 #define EL_PACMAN_L     94
395 #define EL_PACMAN_U     95
396
397 #define EL_BADEWANNE1   100
398 #define EL_BADEWANNE2   101
399 #define EL_BADEWANNE3   102
400 #define EL_BADEWANNE4   103
401 #define EL_BADEWANNE5   104
402 #define EL_SIEB_TOT     105
403 #define EL_AUSGANG_ACT  106
404 #define EL_AUSGANG_AUF  107
405
406 #define EL_CHAR_START   120
407 #define EL_CHAR_ASCII0  (EL_CHAR_START-32)
408 #define EL_CHAR_AUSRUF  (EL_CHAR_ASCII0+33)
409 #define EL_CHAR_ZOLL    (EL_CHAR_ASCII0+34)
410 #define EL_CHAR_DOLLAR  (EL_CHAR_ASCII0+36)
411 #define EL_CHAR_PROZ    (EL_CHAR_ASCII0+37)
412 #define EL_CHAR_APOSTR  (EL_CHAR_ASCII0+39)
413 #define EL_CHAR_KLAMM1  (EL_CHAR_ASCII0+40)
414 #define EL_CHAR_KLAMM2  (EL_CHAR_ASCII0+41)
415 #define EL_CHAR_PLUS    (EL_CHAR_ASCII0+43)
416 #define EL_CHAR_KOMMA   (EL_CHAR_ASCII0+44)
417 #define EL_CHAR_MINUS   (EL_CHAR_ASCII0+45)
418 #define EL_CHAR_PUNKT   (EL_CHAR_ASCII0+46)
419 #define EL_CHAR_SLASH   (EL_CHAR_ASCII0+47)
420 #define EL_CHAR_0       (EL_CHAR_ASCII0+48)
421 #define EL_CHAR_9       (EL_CHAR_ASCII0+57)
422 #define EL_CHAR_DOPPEL  (EL_CHAR_ASCII0+58)
423 #define EL_CHAR_SEMIKL  (EL_CHAR_ASCII0+59)
424 #define EL_CHAR_LT      (EL_CHAR_ASCII0+60)
425 #define EL_CHAR_GLEICH  (EL_CHAR_ASCII0+61)
426 #define EL_CHAR_GT      (EL_CHAR_ASCII0+62)
427 #define EL_CHAR_FRAGE   (EL_CHAR_ASCII0+63)
428 #define EL_CHAR_AT      (EL_CHAR_ASCII0+64)
429 #define EL_CHAR_A       (EL_CHAR_ASCII0+65)
430 #define EL_CHAR_Z       (EL_CHAR_ASCII0+90)
431 #define EL_CHAR_AE      (EL_CHAR_ASCII0+91)
432 #define EL_CHAR_OE      (EL_CHAR_ASCII0+92)
433 #define EL_CHAR_UE      (EL_CHAR_ASCII0+93)
434 #define EL_CHAR_COPY    (EL_CHAR_ASCII0+94)
435 #define EL_CHAR_END     (EL_CHAR_START+79)
436
437 /* "unreal" runtime elements */
438 #define EL_BLOCKED      300
439 #define EL_EXPLODING    301
440 #define EL_CRACKINGNUT  302
441 #define EL_BLURB_LEFT   303
442 #define EL_BLURB_RIGHT  304
443 #define EL_AMOEBING2    305
444 #define EL_AMOEBING3    306
445
446 /* names for the graphic objects */
447 /* Zeile 0 (0) */
448 #define GFX_LEERRAUM    (-1)
449 #define GFX_ERDREICH    0
450 #define GFX_ERDENRAND   1
451 #define GFX_MORAST_LEER 2
452 #define GFX_MORAST_VOLL 3
453 #define GFX_BETON       4
454 #define GFX_MAUERWERK   5
455 #define GFX_FELSBODEN   6
456 #define GFX_BOMBE_MM    7
457 #define GFX_EDELSTEIN   8
458 #define GFX_DIAMANT     10
459 #define GFX_FELSBROCKEN 12
460 /* Zeile 1 (16) */
461 #define GFX_BADEWANNE1  16
462 #define GFX_SALZSAEURE  17
463 #define GFX_BADEWANNE2  18
464 #define GFX_UNSICHTBAR  19
465 #define GFX_SCHLUESSEL1 20
466 #define GFX_SCHLUESSEL2 21
467 #define GFX_SCHLUESSEL3 22
468 #define GFX_SCHLUESSEL4 23
469 #define GFX_LIFE        24
470 #define GFX_LIFE_ASYNC  25
471 #define GFX_BADEWANNE   26
472 #define GFX_BOMBE       27
473 #define GFX_KOKOSNUSS   28
474 #define GFX_CRACKINGNUT 29
475 /* Zeile 2 (32) */
476 #define GFX_BADEWANNE3  32
477 #define GFX_BADEWANNE4  33
478 #define GFX_BADEWANNE5  34
479 #define GFX_SPIELFIGUR  35
480 #define GFX_PFORTE1     36
481 #define GFX_PFORTE2     37
482 #define GFX_PFORTE3     38
483 #define GFX_PFORTE4     39
484 #define GFX_PFORTE1X    40
485 #define GFX_PFORTE2X    41
486 #define GFX_PFORTE3X    42
487 #define GFX_PFORTE4X    43
488 #define GFX_AUSGANG_ZU  44
489 #define GFX_AUSGANG_ACT 44
490 #define GFX_AUSGANG_AUF 47
491 /* Zeile 3 (48) */
492 #define GFX_DYNAMIT_AUS 48
493 #define GFX_DYNAMIT     49
494 #define GFX_FLIEGER     56
495 #define GFX_FLIEGER_R   56
496 #define GFX_FLIEGER_O   57
497 #define GFX_FLIEGER_L   58
498 #define GFX_FLIEGER_U   59
499 /* Zeile 4 (64) */
500 #define GFX_EXPLOSION   64
501 #define GFX_KAEFER      72
502 #define GFX_KAEFER_R    72
503 #define GFX_KAEFER_O    73
504 #define GFX_KAEFER_L    74
505 #define GFX_KAEFER_U    75
506 /* Zeile 5 (80) */
507 #define GFX_MAMPFER     80
508 #define GFX_ZOMBIE      84
509 #define GFX_PACMAN      88
510 #define GFX_PACMAN_R    88
511 #define GFX_PACMAN_O    89
512 #define GFX_PACMAN_L    90
513 #define GFX_PACMAN_U    91
514 /* Zeile 6 (96) */
515 #define GFX_ABLENK      96
516 #define GFX_ABLENK_EIN  GFX_ABLENK
517 #define GFX_ABLENK_AUS  GFX_ABLENK
518 #define GFX_AMOEBE2     100
519 #define GFX_TROPFEN     101
520 #define GFX_AMOEBING    GFX_TROPFEN
521 #define GFX_AMOEBE_LEBT 104
522 #define GFX_AMOEBE3     GFX_AMOEBE_LEBT
523 #define GFX_AMOEBE_TOT  108
524 #define GFX_AMOEBE1     GFX_AMOEBE_TOT
525 /* Zeile 7 (112) */
526 #define GFX_GEBLUBBER   124
527 /* Zeile 8 (128) */
528 #define GFX_SIEB_LEER   128
529 #define GFX_SIEB_VOLL   GFX_SIEB_LEER
530 #define GFX_SIEB_TOT    GFX_SIEB_LEER
531 #define GFX_ERZ_1       132
532 #define GFX_ERZ_2       133
533 #define GFX_BIRNE_AUS   134
534 #define GFX_BIRNE_EIN   135
535 #define GFX_KUGEL_ROT   140
536 #define GFX_KUGEL_BLAU  141
537 #define GFX_KUGEL_GELB  142
538 /* Zeile 9 (144) */
539 #define GFX_BLURB_LEFT  144
540 #define GFX_BLURB_RIGHT 148
541
542 #define GFX_SCHLUESSEL  GFX_SCHLUESSEL1
543
544 #define GFX_SPIELER1    116
545 #define GFX_SPIELER2    117
546 #define GFX_SPIELER3    118
547 #define GFX_SPIELER4    119
548
549 /* nicht in "RocksScreen" sondern woanders :) */
550 #define GFX_CHAR_START  256
551 #define GFX_CHAR_ASCII0 (GFX_CHAR_START-32)
552 #define GFX_CHAR_AUSRUF (GFX_CHAR_ASCII0+33)
553 #define GFX_CHAR_ZOLL   (GFX_CHAR_ASCII0+34)
554 #define GFX_CHAR_DOLLAR (GFX_CHAR_ASCII0+36)
555 #define GFX_CHAR_PROZ   (GFX_CHAR_ASCII0+37)
556 #define GFX_CHAR_APOSTR (GFX_CHAR_ASCII0+39)
557 #define GFX_CHAR_KLAMM1 (GFX_CHAR_ASCII0+40)
558 #define GFX_CHAR_KLAMM2 (GFX_CHAR_ASCII0+41)
559 #define GFX_CHAR_PLUS   (GFX_CHAR_ASCII0+43)
560 #define GFX_CHAR_KOMMA  (GFX_CHAR_ASCII0+44)
561 #define GFX_CHAR_MINUS  (GFX_CHAR_ASCII0+45)
562 #define GFX_CHAR_PUNKT  (GFX_CHAR_ASCII0+46)
563 #define GFX_CHAR_SLASH  (GFX_CHAR_ASCII0+47)
564 #define GFX_CHAR_0      (GFX_CHAR_ASCII0+48)
565 #define GFX_CHAR_9      (GFX_CHAR_ASCII0+57)
566 #define GFX_CHAR_DOPPEL (GFX_CHAR_ASCII0+58)
567 #define GFX_CHAR_SEMIKL (GFX_CHAR_ASCII0+59)
568 #define GFX_CHAR_LT     (GFX_CHAR_ASCII0+60)
569 #define GFX_CHAR_GLEICH (GFX_CHAR_ASCII0+61)
570 #define GFX_CHAR_GT     (GFX_CHAR_ASCII0+62)
571 #define GFX_CHAR_FRAGE  (GFX_CHAR_ASCII0+63)
572 #define GFX_CHAR_AT     (GFX_CHAR_ASCII0+64)
573 #define GFX_CHAR_A      (GFX_CHAR_ASCII0+65)
574 #define GFX_CHAR_Z      (GFX_CHAR_ASCII0+90)
575 #define GFX_CHAR_AE     (GFX_CHAR_ASCII0+91)
576 #define GFX_CHAR_OE     (GFX_CHAR_ASCII0+92)
577 #define GFX_CHAR_UE     (GFX_CHAR_ASCII0+93)
578 #define GFX_CHAR_COPY   (GFX_CHAR_ASCII0+94)
579 #define GFX_CHAR_END    (GFX_CHAR_START+79)
580
581 /* score for elements */
582 #define SC_EDELSTEIN    0
583 #define SC_DIAMANT      1
584 #define SC_KAEFER       2
585 #define SC_FLIEGER      3
586 #define SC_MAMPFER      4
587 #define SC_ZOMBIE       5
588 #define SC_PACMAN       6
589 #define SC_KOKOSNUSS    7
590 #define SC_DYNAMIT      8
591 #define SC_SCHLUESSEL   9
592 #define SC_ZEITBONUS    10
593
594 /* the names of the sounds */
595 #define SND_ALCHEMY     0
596 #define SND_AMOEBE      1
597 #define SND_ANTIGRAV    2
598 #define SND_AUTSCH      3
599 #define SND_BLURB       4
600 #define SND_BONG        5
601 #define SND_BUING       6
602 #define SND_CHASE       7
603 #define SND_CZARDASZ    8
604 #define SND_DENG        9
605 #define SND_FUEL        10
606 #define SND_GONG        11
607 #define SND_HALLOFFAME  12
608 #define SND_HOLZ        13
609 #define SND_HUI         14
610 #define SND_KABUMM      15
611 #define SND_KINK        16
612 #define SND_KLAPPER     17
613 #define SND_KLING       18
614 #define SND_KLOPF       19
615 #define SND_KLUMPF      20
616 #define SND_KNACK       21
617 #define SND_KNURK       22
618 #define SND_KRACH       23
619 #define SND_LACHEN      24
620 #define SND_LASER       25
621 #define SND_MIEP        26
622 #define SND_NETWORK     27
623 #define SND_NJAM        28
624 #define SND_OEFFNEN     29
625 #define SND_PLING       30
626 #define SND_PONG        31
627 #define SND_PUSCH       32
628 #define SND_QUIEK       33
629 #define SND_QUIRK       34
630 #define SND_RHYTHMLOOP  35
631 #define SND_ROAAAR      36
632 #define SND_ROEHR       37
633 #define SND_RUMMS       38
634 #define SND_SCHLOPP     39
635 #define SND_SCHLURF     40
636 #define SND_SCHRFF      41
637 #define SND_SCHWIRR     42
638 #define SND_SIRR        43
639 #define SND_SLURP       44
640 #define SND_SPROING     45
641 #define SND_TWILIGHT    46
642 #define SND_TYGER       47
643 #define SND_VOYAGER     48
644 #define SND_WARNTON     49
645 #define SND_WHOOSH      50
646 #define SND_ZISCH       51
647
648 #define NUM_SOUNDS      52
649
650 #define IS_LOOP_SOUND(s)        ((s)==SND_KLAPPER || (s)==SND_ROEHR ||  \
651                                  (s)==SND_NJAM || (s)==SND_MIEP)
652 #define IS_MUSIC_SOUND(s)       ((s)==SND_ALCHEMY || (s)==SND_CHASE || \
653                                  (s)==SND_NETWORK || (s)==SND_CZARDASZ || \
654                                  (s)==SND_TYGER || (s)==SND_VOYAGER || \
655                                  (s)==SND_TWILIGHT)
656 extern char *sound_name[NUM_SOUNDS];
657
658 /* this structure contains the sound data for the sound server */
659 extern struct SoundInfo Sound[NUM_SOUNDS];
660
661 /* directions for moving */
662 #define MV_NO_MOVING    0
663 #define MV_LEFT         1
664 #define MV_RIGHT        2
665 #define MV_UP           4
666 #define MV_DOWN         8
667
668 /* font types */
669 #define FS_SMALL        0
670 #define FS_BIG          1
671 /* font colors */
672 #define FC_RED          0
673 #define FC_BLUE         1
674 #define FC_GREEN        2
675 #define FC_YELLOW       3
676 #define FC_SPECIAL1     4
677 #define FC_SPECIAL2     5
678
679 /* values for game_status */
680 #define MAINMENU        0
681 #define PLAYING         1
682 #define LEVELED         2
683 #define HELPSCREEN      3
684 #define CHOOSELEVEL     4
685 #define TYPENAME        5
686 #define HALLOFFAME      6
687 #define SETUP           7
688 #define EXITGAME        8
689
690 /* return values for GameActions */
691 #define ACT_GO_ON       0
692 #define ACT_GAME_OVER   1
693 #define ACT_NEW_GAME    2
694
695 /* values for the joystick */
696 #define JOYSTICK_OFF            0
697 #define JOYSTICK_AVAILABLE      1
698 #define DEV_JOYSTICK_0          "/dev/js0"
699 #define DEV_JOYSTICK_1          "/dev/js1"
700
701 /* get these values from the program 'js' from the joystick package, */
702 /* set JOYSTICK_PERCENT to a threshold appropriate for your joystick */
703 #define JOYSTICK_XLEFT          30
704 #define JOYSTICK_XRIGHT         1250
705 #define JOYSTICK_XMIDDLE        530
706 #define JOYSTICK_YUPPER         40
707 #define JOYSTICK_YLOWER         1440
708 #define JOYSTICK_YMIDDLE        680
709 #define JOYSTICK_PERCENT        25
710 #define JOY_LEFT                MV_LEFT
711 #define JOY_RIGHT               MV_RIGHT
712 #define JOY_UP                  MV_UP
713 #define JOY_DOWN                MV_DOWN
714 #define JOY_BUTTON_1            16
715 #define JOY_BUTTON_2            32
716 #define JOY_BUTTON              (JOY_BUTTON_1 | JOY_BUTTON_2)
717 #define JOY_BUTTON_NOT_PRESSED  0
718 #define JOY_BUTTON_PRESSED      1
719 #define JOY_BUTTON_NEW_PRESSED  2
720 #define JOY_BUTTON_NEW_RELEASED 3
721
722 #ifdef NO_JOYSTICK
723 #define JOYSTICK_STATUS JOYSTICK_OFF
724 #else
725 #define JOYSTICK_STATUS JOYSTICK_AVAILABLE
726 #endif
727
728 #ifndef GAME_DIR
729 #define GAME_DIR        "."
730 #endif
731
732 #ifndef GFX_PATH
733 #define GFX_PATH        GAME_DIR "/graphics"
734 #endif
735 #ifndef SND_PATH
736 #define SND_PATH        GAME_DIR "/sounds"
737 #endif
738 #ifndef LEVEL_PATH
739 #define LEVEL_PATH      GAME_DIR "/levels"
740 #endif
741 #ifndef SCORE_PATH
742 #define SCORE_PATH      LEVEL_PATH
743 #endif
744 #ifndef NAMES_PATH
745 #define NAMES_PATH      LEVEL_PATH
746 #endif
747 #ifndef CONFIG_PATH
748 #define CONFIG_PATH     GAME_DIR
749 #endif
750 #ifndef JOYDAT_PATH
751 #define JOYDAT_PATH     GAME_DIR
752 #endif
753
754 #define SCORE_FILENAME  "ROCKS.score"
755 #define NAMES_FILENAME  "ROCKS.names"
756 #define LEVDIR_FILENAME "ROCKS.levelinfo"
757 #define JOYDAT_FILENAME "ROCKS.joystick"
758
759 #define JOYDAT_FILE     JOYDAT_PATH "/" JOYDAT_FILENAME
760
761 #define LEVEL_PERMS     (S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP | S_IROTH|S_IWOTH)
762 #define SCORE_PERMS     LEVEL_PERMS
763 #define NAMES_PERMS     LEVEL_PERMS
764 #define LEVDIR_PERMS    LEVEL_PERMS
765 #define LEVREC_PERMS    LEVEL_PERMS
766 #define JOYDAT_PERMS    LEVEL_PERMS
767
768 #define LEVEL_COOKIE    "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_1.0"
769 #define SCORE_COOKIE    "ROCKSNDIAMONDS_SCORE_FILE_VERSION_1.0"
770 #define NAMES_COOKIE    "ROCKSNDIAMONDS_NAMES_FILE_VERSION_1.0"
771 #define LEVELDIR_COOKIE "ROCKSNDIAMONDS_LEVELDIR_FILE_VERSION_1.0"
772 #define LEVELREC_COOKIE "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.0"
773 #define JOYSTICK_COOKIE "ROCKSNDIAMONDS_JOYSTICK_FILE_VERSION_1.0"
774 #define LEVEL_COOKIE_LEN        (strlen(LEVEL_COOKIE)+1)
775 #define SCORE_COOKIE_LEN        (strlen(SCORE_COOKIE)+1)
776 #define NAMES_COOKIE_LEN        (strlen(NAMES_COOKIE)+1)
777 #define LEVELDIR_COOKIE_LEN     (strlen(LEVELDIR_COOKIE)+1)
778 #define LEVELREC_COOKIE_LEN     (strlen(LEVELREC_COOKIE)+1)
779 #define JOYSTICK_COOKIE_LEN     (strlen(JOYSTICK_COOKIE)+1)
780
781 /* Leerer Login- und Alias-Name */
782 #define EMPTY_LOGIN     "NO_LOGIN"
783 #define EMPTY_ALIAS     "NO_NAME"
784
785 /* values for button_status */
786 #define MB_NOT_PRESSED  FALSE
787 #define MB_RELEASED     FALSE
788 #define MB_PRESSED      TRUE
789 #define MB_MENU_CHOICE  FALSE
790 #define MB_MENU_MARK    TRUE
791 #define MB_LEFT         1
792 #define MB_MIDDLE       2
793 #define MB_RIGHT        3
794
795 /* values for key_status */
796 #define KEY_NOT_PRESSED FALSE
797 #define KEY_RELEASED    FALSE
798 #define KEY_PRESSED     TRUE
799
800 /* values for focus_status */
801 #define FOCUS_OUT       FALSE
802 #define FOCUS_IN        TRUE
803
804 /* values for redraw_mask */
805 #define REDRAW_ALL      (1L<<0)
806 #define REDRAW_FIELD    (1L<<1)
807 #define REDRAW_TILES    (1L<<2)
808 #define REDRAW_DOOR_1   (1L<<3)
809 #define REDRAW_VIDEO_1  (1L<<4)
810 #define REDRAW_VIDEO_2  (1L<<5)
811 #define REDRAW_VIDEO_3  (1L<<6)
812 #define REDRAW_MICROLEV (1L<<7)
813 #define REDRAW_DOOR_2   (REDRAW_VIDEO_1 | REDRAW_VIDEO_2 | REDRAW_VIDEO_3)
814 #define REDRAW_DOORS    (REDRAW_DOOR_1 | REDRAW_DOOR_2)
815 #define REDRAW_MAIN     (REDRAW_FIELD | REDRAW_TILES | REDRAW_MICROLEV)
816 #define REDRAWTILES_TH  SCR_FIELDX*SCR_FIELDY/2
817
818 /* positions in the game control window */
819 #define XX_LEVEL        37
820 #define YY_LEVEL        20
821 #define XX_EMERALDS     29
822 #define YY_EMERALDS     54
823 #define XX_DYNAMITE     29
824 #define YY_DYNAMITE     89
825 #define XX_KEYS         18
826 #define YY_KEYS         123
827 #define XX_SCORE        15
828 #define YY_SCORE        159
829 #define XX_TIME         29
830 #define YY_TIME         194
831
832 #define DX_LEVEL        (DX+XX_LEVEL)
833 #define DY_LEVEL        (DY+YY_LEVEL)
834 #define DX_EMERALDS     (DX+XX_EMERALDS)
835 #define DY_EMERALDS     (DY+YY_EMERALDS)
836 #define DX_DYNAMITE     (DX+XX_DYNAMITE)
837 #define DY_DYNAMITE     (DY+YY_DYNAMITE)
838 #define DX_KEYS         (DX+XX_KEYS)
839 #define DY_KEYS         (DY+YY_KEYS)
840 #define DX_SCORE        (DX+XX_SCORE)
841 #define DY_SCORE        (DY+YY_SCORE)
842 #define DX_TIME         (DX+XX_TIME)
843 #define DY_TIME         (DY+YY_TIME)
844
845 /* Felder in PIX_DOOR */
846 /* Bedeutung in PIX_DB_DOOR: (3 PAGEs)
847    PAGEX1: 1. Zwischenspeicher für DOOR_1
848    PAGEX2: 2. Zwischenspeicher für DOOR_1
849    PAGEX3: Pufferspeicher für Animationen
850 */
851
852 #define DOOR_GFX_PAGESIZE       DXSIZE
853 #define DOOR_GFX_PAGEX1         (0*DOOR_GFX_PAGESIZE)
854 #define DOOR_GFX_PAGEX2         (1*DOOR_GFX_PAGESIZE)
855 #define DOOR_GFX_PAGEX3         (2*DOOR_GFX_PAGESIZE)
856 #define DOOR_GFX_PAGEX4         (3*DOOR_GFX_PAGESIZE)
857 #define DOOR_GFX_PAGEX5         (4*DOOR_GFX_PAGESIZE)
858 #define DOOR_GFX_PAGEX6         (5*DOOR_GFX_PAGESIZE)
859 #define DOOR_GFX_PAGEY1         0
860 #define DOOR_GFX_PAGEY2         DYSIZE
861
862 /* some positions in the video tape control window */
863 #define VIDEO_DISPLAY1_XPOS     5
864 #define VIDEO_DISPLAY1_YPOS     5
865 #define VIDEO_DISPLAY2_XPOS     5
866 #define VIDEO_DISPLAY2_YPOS     41
867 #define VIDEO_DISPLAY_XSIZE     90
868 #define VIDEO_DISPLAY_YSIZE     31
869 #define VIDEO_BUTTON_XSIZE      18
870 #define VIDEO_BUTTON_YSIZE      18
871 #define VIDEO_CONTROL_XPOS      5
872 #define VIDEO_CONTROL_YPOS      77
873 #define VIDEO_CONTROL_XSIZE     (VIDEO_DISPLAY_XSIZE)
874 #define VIDEO_CONTROL_YSIZE     (VIDEO_BUTTON_YSIZE)
875 #define VIDEO_BUTTON_EJECT_XPOS (VIDEO_CONTROL_XPOS + 0 * VIDEO_BUTTON_XSIZE)
876 #define VIDEO_BUTTON_STOP_XPOS  (VIDEO_CONTROL_XPOS + 1 * VIDEO_BUTTON_XSIZE)
877 #define VIDEO_BUTTON_PAUSE_XPOS (VIDEO_CONTROL_XPOS + 2 * VIDEO_BUTTON_XSIZE)
878 #define VIDEO_BUTTON_REC_XPOS   (VIDEO_CONTROL_XPOS + 3 * VIDEO_BUTTON_XSIZE)
879 #define VIDEO_BUTTON_PLAY_XPOS  (VIDEO_CONTROL_XPOS + 4 * VIDEO_BUTTON_XSIZE)
880 #define VIDEO_BUTTON_ANY_YPOS   (VIDEO_CONTROL_YPOS)
881 #define VIDEO_DATE_LABEL_XPOS   (VIDEO_DISPLAY1_XPOS)
882 #define VIDEO_DATE_LABEL_YPOS   (VIDEO_DISPLAY1_YPOS)
883 #define VIDEO_DATE_LABEL_XSIZE  (VIDEO_DISPLAY_XSIZE)
884 #define VIDEO_DATE_LABEL_YSIZE  (VIDEO_DISPLAY_YSIZE)
885 #define VIDEO_DATE_XPOS         (VIDEO_DISPLAY1_XPOS+1)
886 #define VIDEO_DATE_YPOS         (VIDEO_DISPLAY1_YPOS+14)
887 #define VIDEO_DATE_XSIZE        (VIDEO_DISPLAY_XSIZE)
888 #define VIDEO_DATE_YSIZE        16
889 #define VIDEO_REC_LABEL_XPOS    (VIDEO_DISPLAY2_XPOS)
890 #define VIDEO_REC_LABEL_YPOS    (VIDEO_DISPLAY2_YPOS)
891 #define VIDEO_REC_LABEL_XSIZE   20
892 #define VIDEO_REC_LABEL_YSIZE   12
893 #define VIDEO_REC_SYMBOL_XPOS   (VIDEO_DISPLAY2_XPOS+20)
894 #define VIDEO_REC_SYMBOL_YPOS   (VIDEO_DISPLAY2_YPOS)
895 #define VIDEO_REC_SYMBOL_XSIZE  16
896 #define VIDEO_REC_SYMBOL_YSIZE  16
897 #define VIDEO_PLAY_LABEL_XPOS   (VIDEO_DISPLAY2_XPOS+65)
898 #define VIDEO_PLAY_LABEL_YPOS   (VIDEO_DISPLAY2_YPOS)
899 #define VIDEO_PLAY_LABEL_XSIZE  22
900 #define VIDEO_PLAY_LABEL_YSIZE  12
901 #define VIDEO_PLAY_SYMBOL_XPOS  (VIDEO_DISPLAY2_XPOS+50)
902 #define VIDEO_PLAY_SYMBOL_YPOS  (VIDEO_DISPLAY2_YPOS)
903 #define VIDEO_PLAY_SYMBOL_XSIZE 13
904 #define VIDEO_PLAY_SYMBOL_YSIZE 13
905 #define VIDEO_PAUSE_LABEL_XPOS  (VIDEO_DISPLAY2_XPOS)
906 #define VIDEO_PAUSE_LABEL_YPOS  (VIDEO_DISPLAY2_YPOS+20)
907 #define VIDEO_PAUSE_LABEL_XSIZE 35
908 #define VIDEO_PAUSE_LABEL_YSIZE 8
909 #define VIDEO_PAUSE_SYMBOL_XPOS (VIDEO_DISPLAY2_XPOS+35)
910 #define VIDEO_PAUSE_SYMBOL_YPOS (VIDEO_DISPLAY2_YPOS)
911 #define VIDEO_PAUSE_SYMBOL_XSIZE 13
912 #define VIDEO_PAUSE_SYMBOL_YSIZE 13
913 #define VIDEO_TIME_XPOS         (VIDEO_DISPLAY2_XPOS+38)
914 #define VIDEO_TIME_YPOS         (VIDEO_DISPLAY2_YPOS+14)
915 #define VIDEO_TIME_XSIZE        50
916 #define VIDEO_TIME_YSIZE        16
917
918 #define ON_VIDEO_BUTTON(x,y)    ((x)>=(VX+VIDEO_CONTROL_XPOS) &&        \
919                                  (x)< (VX+VIDEO_CONTROL_XPOS +          \
920                                        VIDEO_CONTROL_XSIZE) &&          \
921                                  (y)>=(VY+VIDEO_CONTROL_YPOS) &&        \
922                                  (y)< (VY+VIDEO_CONTROL_YPOS +          \
923                                        VIDEO_CONTROL_YSIZE))
924 #define VIDEO_BUTTON(x)         (((x)-(VX+VIDEO_CONTROL_XPOS))/VIDEO_BUTTON_XSIZE)
925
926 /* values for video tape control */
927 #define VIDEO_STATE_PLAY_OFF    (1L<<0)
928 #define VIDEO_STATE_PLAY_ON     (1L<<1)
929 #define VIDEO_STATE_PLAY        (VIDEO_STATE_PLAY_OFF   | VIDEO_STATE_PLAY_ON)
930 #define VIDEO_STATE_REC_OFF     (1L<<2)
931 #define VIDEO_STATE_REC_ON      (1L<<3)
932 #define VIDEO_STATE_REC         (VIDEO_STATE_REC_OFF    | VIDEO_STATE_REC_ON)
933 #define VIDEO_STATE_PAUSE_OFF   (1L<<4)
934 #define VIDEO_STATE_PAUSE_ON    (1L<<5)
935 #define VIDEO_STATE_PAUSE       (VIDEO_STATE_PAUSE_OFF  | VIDEO_STATE_PAUSE_ON)
936 #define VIDEO_STATE_DATE_OFF    (1L<<6)
937 #define VIDEO_STATE_DATE_ON     (1L<<7)
938 #define VIDEO_STATE_DATE        (VIDEO_STATE_DATE_OFF   | VIDEO_STATE_DATE_ON)
939 #define VIDEO_STATE_TIME_OFF    (1L<<8)
940 #define VIDEO_STATE_TIME_ON     (1L<<9)
941 #define VIDEO_STATE_TIME        (VIDEO_STATE_TIME_OFF   | VIDEO_STATE_TIME_ON)
942 #define VIDEO_PRESS_PLAY_ON     (1L<<10)
943 #define VIDEO_PRESS_PLAY_OFF    (1L<<11)
944 #define VIDEO_PRESS_PLAY        (VIDEO_PRESS_PLAY_OFF   | VIDEO_PRESS_PLAY_ON)
945 #define VIDEO_PRESS_REC_ON      (1L<<12)
946 #define VIDEO_PRESS_REC_OFF     (1L<<13)
947 #define VIDEO_PRESS_REC         (VIDEO_PRESS_REC_OFF    | VIDEO_PRESS_REC_ON)
948 #define VIDEO_PRESS_PAUSE_ON    (1L<<14)
949 #define VIDEO_PRESS_PAUSE_OFF   (1L<<15)
950 #define VIDEO_PRESS_PAUSE       (VIDEO_PRESS_PAUSE_OFF  | VIDEO_PRESS_PAUSE_ON)
951 #define VIDEO_PRESS_STOP_ON     (1L<<16)
952 #define VIDEO_PRESS_STOP_OFF    (1L<<17)
953 #define VIDEO_PRESS_STOP        (VIDEO_PRESS_STOP_OFF   | VIDEO_PRESS_STOP_ON)
954 #define VIDEO_PRESS_EJECT_ON    (1L<<18)
955 #define VIDEO_PRESS_EJECT_OFF   (1L<<19)
956 #define VIDEO_PRESS_EJECT       (VIDEO_PRESS_EJECT_OFF  | VIDEO_PRESS_EJECT_ON)
957
958 #define BUTTON_VIDEO_EJECT      1
959 #define BUTTON_VIDEO_STOP       2
960 #define BUTTON_VIDEO_PAUSE      3
961 #define BUTTON_VIDEO_REC        4
962 #define BUTTON_VIDEO_PLAY       5
963
964 #define VIDEO_STATE_OFF         (VIDEO_STATE_PLAY_OFF   |       \
965                                  VIDEO_STATE_REC_OFF    |       \
966                                  VIDEO_STATE_PAUSE_OFF  |       \
967                                  VIDEO_STATE_DATE_OFF   |       \
968                                  VIDEO_STATE_TIME_OFF)
969 #define VIDEO_PRESS_OFF         (VIDEO_PRESS_PLAY_OFF   |       \
970                                  VIDEO_PRESS_REC_OFF    |       \
971                                  VIDEO_PRESS_PAUSE_OFF  |       \
972                                  VIDEO_PRESS_STOP_OFF   |       \
973                                  VIDEO_PRESS_EJECT_OFF)
974 #define VIDEO_ALL_OFF           (VIDEO_STATE_OFF | VIDEO_PRESS_OFF)
975
976 #define VIDEO_STATE_ON          (VIDEO_STATE_PLAY_ON    |       \
977                                  VIDEO_STATE_REC_ON     |       \
978                                  VIDEO_STATE_PAUSE_ON   |       \
979                                  VIDEO_STATE_DATE_ON    |       \
980                                  VIDEO_STATE_TIME_ON)
981 #define VIDEO_PRESS_ON          (VIDEO_PRESS_PLAY_ON    |       \
982                                  VIDEO_PRESS_REC_ON     |       \
983                                  VIDEO_PRESS_PAUSE_ON   |       \
984                                  VIDEO_PRESS_STOP_ON    |       \
985                                  VIDEO_PRESS_EJECT_ON)
986 #define VIDEO_ALL_ON            (VIDEO_STATE_ON | VIDEO_PRESS_ON)
987
988 #define VIDEO_STATE             (VIDEO_STATE_ON | VIDEO_STATE_OFF)
989 #define VIDEO_PRESS             (VIDEO_PRESS_ON | VIDEO_PRESS_OFF)
990 #define VIDEO_ALL               (VIDEO_ALL_ON | VIDEO_ALL_OFF)
991
992 /* some positions in the sound control window */
993 #define SOUND_BUTTON_XSIZE      30
994 #define SOUND_BUTTON_YSIZE      30
995 #define SOUND_CONTROL_XPOS      5
996 #define SOUND_CONTROL_YPOS      245
997 #define SOUND_CONTROL_XSIZE     90
998 #define SOUND_CONTROL_YSIZE     (SOUND_BUTTON_YSIZE)
999 #define SOUND_BUTTON_MUSIC_XPOS (SOUND_CONTROL_XPOS + 0 * SOUND_BUTTON_XSIZE)
1000 #define SOUND_BUTTON_LOOPS_XPOS (SOUND_CONTROL_XPOS + 1 * SOUND_BUTTON_XSIZE)
1001 #define SOUND_BUTTON_SOUND_XPOS (SOUND_CONTROL_XPOS + 2 * SOUND_BUTTON_XSIZE)
1002 #define SOUND_BUTTON_ANY_YPOS   (SOUND_CONTROL_YPOS)
1003
1004 #define ON_SOUND_BUTTON(x,y)    ((x)>=(DX+SOUND_CONTROL_XPOS) &&        \
1005                                  (x)< (DX+SOUND_CONTROL_XPOS +          \
1006                                        SOUND_CONTROL_XSIZE) &&          \
1007                                  (y)>=(DY+SOUND_CONTROL_YPOS) &&        \
1008                                  (y)< (DY+SOUND_CONTROL_YPOS +          \
1009                                        SOUND_CONTROL_YSIZE))
1010 #define SOUND_BUTTON(x)         (((x)-(DX+SOUND_CONTROL_XPOS))/SOUND_BUTTON_XSIZE)
1011
1012 /* values for sound control */
1013 #define BUTTON_SOUND_MUSIC      (1L<<0)
1014 #define BUTTON_SOUND_LOOPS      (1L<<1)
1015 #define BUTTON_SOUND_SOUND      (1L<<2)
1016 #define BUTTON_RELEASED         0
1017 #define BUTTON_PRESSED          (1L<<3)
1018 #define BUTTON_OFF              0
1019 #define BUTTON_ON               (1L<<4)
1020 #define BUTTON_SOUND_MUSIC_OFF  (BUTTON_SOUND_MUSIC | BUTTON_OFF)
1021 #define BUTTON_SOUND_LOOPS_OFF  (BUTTON_SOUND_LOOPS | BUTTON_OFF)
1022 #define BUTTON_SOUND_SOUND_OFF  (BUTTON_SOUND_SOUND | BUTTON_OFF)
1023 #define BUTTON_SOUND_MUSIC_ON   (BUTTON_SOUND_MUSIC | BUTTON_ON)
1024 #define BUTTON_SOUND_LOOPS_ON   (BUTTON_SOUND_LOOPS | BUTTON_ON)
1025 #define BUTTON_SOUND_SOUND_ON   (BUTTON_SOUND_SOUND | BUTTON_ON)
1026
1027 /* some positions in the game control window */
1028 #define GAME_BUTTON_XSIZE       30
1029 #define GAME_BUTTON_YSIZE       30
1030 #define GAME_CONTROL_XPOS       5
1031 #define GAME_CONTROL_YPOS       215
1032 #define GAME_CONTROL_XSIZE      90
1033 #define GAME_CONTROL_YSIZE      (GAME_BUTTON_YSIZE)
1034 #define GAME_BUTTON_STOP_XPOS   (GAME_CONTROL_XPOS + 0 * GAME_BUTTON_XSIZE)
1035 #define GAME_BUTTON_PAUSE_XPOS  (GAME_CONTROL_XPOS + 1 * GAME_BUTTON_XSIZE)
1036 #define GAME_BUTTON_PLAY_XPOS   (GAME_CONTROL_XPOS + 2 * GAME_BUTTON_XSIZE)
1037 #define GAME_BUTTON_ANY_YPOS    (GAME_CONTROL_YPOS)
1038
1039 #define ON_GAME_BUTTON(x,y)     ((x)>=(DX+GAME_CONTROL_XPOS) && \
1040                                  (x)< (DX+GAME_CONTROL_XPOS +           \
1041                                        GAME_CONTROL_XSIZE) &&           \
1042                                  (y)>=(DY+GAME_CONTROL_YPOS) && \
1043                                  (y)< (DY+GAME_CONTROL_YPOS +           \
1044                                        GAME_CONTROL_YSIZE))
1045 #define GAME_BUTTON(x)          (((x)-(DX+GAME_CONTROL_XPOS))/GAME_BUTTON_XSIZE)
1046
1047 /* values for game control */
1048 #define BUTTON_GAME_STOP        (1L<<0)
1049 #define BUTTON_GAME_PAUSE       (1L<<1)
1050 #define BUTTON_GAME_PLAY        (1L<<2)
1051
1052 /* some positions in the asking window */
1053 #define OK_BUTTON_XPOS          2
1054 #define OK_BUTTON_YPOS          250
1055 #define OK_BUTTON_GFX_YPOS      0
1056 #define OK_BUTTON_XSIZE         46
1057 #define OK_BUTTON_YSIZE         28
1058 #define NO_BUTTON_XPOS          52
1059 #define NO_BUTTON_YPOS          OK_BUTTON_YPOS
1060 #define NO_BUTTON_XSIZE         OK_BUTTON_XSIZE
1061 #define NO_BUTTON_YSIZE         OK_BUTTON_YSIZE
1062 #define CONFIRM_BUTTON_XPOS     2
1063 #define CONFIRM_BUTTON_GFX_YPOS 30
1064 #define CONFIRM_BUTTON_YPOS     OK_BUTTON_YPOS
1065 #define CONFIRM_BUTTON_XSIZE    96
1066 #define CONFIRM_BUTTON_YSIZE    OK_BUTTON_YSIZE
1067
1068 #define ON_CHOOSE_BUTTON(x,y)   (((x)>=(DX+OK_BUTTON_XPOS) &&           \
1069                                   (x)< (DX+OK_BUTTON_XPOS +             \
1070                                         OK_BUTTON_XSIZE) &&             \
1071                                   (y)>=(DY+OK_BUTTON_YPOS) &&           \
1072                                   (y)< (DY+OK_BUTTON_YPOS +             \
1073                                         OK_BUTTON_YSIZE)) ||            \
1074                                  ((x)>=(DX+NO_BUTTON_XPOS) &&           \
1075                                   (x)< (DX+NO_BUTTON_XPOS +             \
1076                                         NO_BUTTON_XSIZE) &&             \
1077                                   (y)>=(DY+NO_BUTTON_YPOS) &&           \
1078                                   (y)< (DY+NO_BUTTON_YPOS +             \
1079                                         NO_BUTTON_YSIZE)))
1080 #define ON_CONFIRM_BUTTON(x,y)  (((x)>=(DX+CONFIRM_BUTTON_XPOS) &&      \
1081                                   (x)< (DX+CONFIRM_BUTTON_XPOS +        \
1082                                         CONFIRM_BUTTON_XSIZE) &&        \
1083                                   (y)>=(DY+CONFIRM_BUTTON_YPOS) &&      \
1084                                   (y)< (DY+CONFIRM_BUTTON_YPOS +        \
1085                                         CONFIRM_BUTTON_YSIZE)))
1086 #define CHOOSE_BUTTON(x)        (((x)-(DX+OK_BUTTON_XPOS))/OK_BUTTON_XSIZE)
1087
1088 /* values for asking control */
1089 #define BUTTON_OK               (1L<<0)
1090 #define BUTTON_NO               (1L<<1)
1091 #define BUTTON_CONFIRM          (1L<<2)
1092
1093 #endif