1 /***********************************************************
2 * Rocks'n'Diamonds -- McDuffin Strikes Back! *
3 *----------------------------------------------------------*
4 * (c) 1995-2001 Artsoft Entertainment *
6 * Detmolder Strasse 189 *
9 * e-mail: info@artsoft.org *
10 *----------------------------------------------------------*
12 ***********************************************************/
14 #include "libgame/libgame.h"
22 Bitmap *pix[NUM_BITMAPS];
23 Pixmap tile_clipmask[NUM_TILES];
24 DrawBuffer *fieldbuffer;
25 DrawBuffer *drawto_field;
27 int game_status = MAINMENU;
28 boolean level_editor_test_game = FALSE;
29 boolean network_playing = FALSE;
31 int key_joystick_mapping = 0;
33 boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
34 int redraw_x1 = 0, redraw_y1 = 0;
36 short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
37 short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
38 short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
39 short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
40 short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
41 short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
42 short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
43 short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
44 short Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
45 boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
46 short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
47 short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
48 short AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
49 short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
50 unsigned long Elementeigenschaften1[MAX_ELEMENTS];
51 unsigned long Elementeigenschaften2[MAX_ELEMENTS];
53 int lev_fieldx,lev_fieldy, scroll_x,scroll_y;
55 int FX = SX, FY = SY, ScrollStepSize;
56 int ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0;
58 int BorderElement = EL_BETON;
59 int GameFrameDelay = GAME_FRAME_DELAY;
60 int FfwdFrameDelay = FFWD_FRAME_DELAY;
61 int BX1 = 0, BY1 = 0, BX2 = SCR_FIELDX-1, BY2 = SCR_FIELDY-1;
62 int SBX_Left, SBX_Right;
63 int SBY_Upper, SBY_Lower;
64 int ZX,ZY, ExitX,ExitY;
67 int TimeFrames, TimePlayed, TimeLeft;
69 boolean network_player_action_received = FALSE;
71 struct LevelInfo level;
72 struct PlayerInfo stored_player[MAX_PLAYERS], *local_player = NULL;
73 struct HiScore highscore[MAX_SCORE_ENTRIES];
75 struct SetupInfo setup;
77 struct GlobalInfo global;
79 /* filenames of sound effects */
80 char *sound_name[NUM_SOUNDS] =
139 char *element_info[] =
141 "empty space", /* 0 */
151 "spaceship", /* 10 */
158 "quicksand with rock",
161 "magic wall", /* 20 */
171 "magic wheel", /* 30 */
181 "gray door (opened by red key)", /* 40 */
182 "gray door (opened by yellow key)",
183 "gray door (opened by green key)",
184 "gray door (opened by blue key)",
187 "invisible normal wall",
189 "ligh bulb (glowing)",
191 "wall with diamond", /* 50 */
192 "amoeba with content",
197 "diamond (BD style)",
199 "wall with BD style diamond",
200 "wall with yellow emerald",
201 "dark yam yam", /* 60 */
202 "magic wall (BD style)",
203 "invisible steel wall",
205 "increases number of bombs",
206 "increases explosion size",
207 "increases power of explosion",
209 "sokoban empty field",
210 "sokoban field with object",
211 "butterfly (starts moving right)", /* 70 */
212 "butterfly (starts moving up)",
213 "butterfly (starts moving left)",
214 "butterfly (starts moving down)",
215 "firefly (starts moving right)",
216 "firefly (starts moving up)",
217 "firefly (starts moving left)",
218 "firefly (starts moving down)",
221 "yellow player", /* 80 */
225 "bug (starts moving right)",
226 "bug (starts moving up)",
227 "bug (starts moving left)",
228 "bug (starts moving down)",
229 "spaceship (starts moving right)",
230 "spaceship (starts moving up)",
231 "spaceship (starts moving left)", /* 90 */
232 "spaceship (starts moving down)",
233 "pac man (starts moving right)",
234 "pac man (starts moving up)",
235 "pac man (starts moving left)",
236 "pac man (starts moving down)",
239 "wall with red emerald",
240 "wall with violet emerald",
246 "normal wall (BD style)",
259 "fire breathing dragon",
260 "red key (EM style)",
261 "letter ' '", /* 120 */
271 "letter '*'", /* 130 */
281 "letter '4'", /* 140 */
291 "letter '>'", /* 150 */
301 "letter 'H'", /* 160 */
311 "letter 'R'", /* 170 */
321 "letter 'Ö'", /* 180 */
331 "letter ''", /* 190 */
341 "growing wall (horizontal)", /* 200 */
342 "growing wall (vertical)",
343 "growing wall (all directions)",
344 "red door (EM style)",
345 "yellow door (EM style)",
346 "green door (EM style)",
347 "blue door (EM style)",
348 "yellow key (EM style)",
349 "green key (EM style)",
350 "blue key (EM style)",
351 "empty space", /* 210 */
360 "port (leading right)",
361 "port (leading down)", /* 220 */
362 "port (leading left)",
364 "port (leading right)",
365 "port (leading down)",
366 "port (leading left)",
371 "red disk", /* 230 */
374 "port (all directions)",
381 "hardware", /* 240 */
391 "gray door (EM style, red key)", /* 250 */
392 "gray door (EM style, yellow key)",
393 "gray door (EM style, green key)",
394 "gray door (EM style, blue key)",
404 "white door", /* 260 */
405 "gray door (opened by white key)",
409 "switch gate (open)",
410 "switch gate (closed)",
411 "switch for switch gate",
412 "switch for switch gate",
415 "red conveyor belt (left)",
416 "red conveyor belt (middle)",
417 "red conveyor belt (right)",
418 "switch for red conveyor belt (left)",
419 "switch for red conveyor belt (middle)",
420 "switch for red conveyor belt (right)",
421 "yellow conveyor belt (left)",
422 "yellow conveyor belt (middle)",
423 "yellow conveyor belt (right)",
424 "switch for yellow conveyor belt (left)", /* 280 */
425 "switch for yellow conveyor belt (middle)",
426 "switch for yellow conveyor belt (right)",
427 "green conveyor belt (left)",
428 "green conveyor belt (middle)",
429 "green conveyor belt (right)",
430 "switch for green conveyor belt (left)",
431 "switch for green conveyor belt (middle)",
432 "switch for green conveyor belt (right)",
433 "blue conveyor belt (left)",
434 "blue conveyor belt (middle)", /* 290 */
435 "blue conveyor belt (right)",
436 "switch for blue conveyor belt (left)",
437 "switch for blue conveyor belt (middle)",
438 "switch for blue conveyor belt (right)",
441 "light switch (off)",
443 "sign (exclamation)",
444 "sign (radio activity)", /* 300 */
446 "sign (wheel chair)",
454 "sign (other)", /* 310 */
455 "mole (starts moving left)",
456 "mole (starts moving right)",
457 "mole (starts moving up)",
458 "mole (starts moving down)",
459 "steel wall (slanted)",
465 "shield (active, kills enemies)",
467 "time gate (closed)",
468 "switch for time gate",
469 "switch for time gate",
471 "send balloon to the left",
472 "send balloon to the right",
474 "send balloon down", /* 330 */
475 "send balloon in any direction",
484 "normal wall", /* 340 */
488 "tube (all directions)",
491 "tube (vertical & left)",
492 "tube (vertical & right)",
493 "tube (horizontal & up)",
494 "tube (horizontal & down)", /* 350 */
496 "tube (left & down)",
498 "tube (right & down)",
501 "stable bomb (DX style)",
505 "-------------------------------",
508 int num_element_info = sizeof(element_info)/sizeof(char *);
511 /* ========================================================================= */
513 /* ========================================================================= */
515 int main(int argc, char *argv[])
517 InitCommandName(argv[0]);
518 InitExitFunction(CloseAllAndExit);
519 InitPlatformDependantStuff();
526 exit(0); /* to keep compilers happy */