1 /***********************************************************
2 * Rocks'n'Diamonds -- McDuffin Strikes Back! *
3 *----------------------------------------------------------*
4 * (c) 1995-2002 Artsoft Entertainment *
6 * Detmolder Strasse 189 *
9 * e-mail: info@artsoft.org *
10 *----------------------------------------------------------*
12 ***********************************************************/
14 #include "libgame/libgame.h"
24 Bitmap *pix[NUM_BITMAPS];
26 Bitmap *bitmap_db_field, *bitmap_db_door;
28 Pixmap tile_clipmask[NUM_TILES];
30 DrawBuffer *fieldbuffer;
31 DrawBuffer *drawto_field;
34 boolean level_editor_test_game = FALSE;
35 boolean network_playing = FALSE;
37 int key_joystick_mapping = 0;
39 boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
40 int redraw_x1 = 0, redraw_y1 = 0;
42 short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
43 short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
44 short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
45 short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
46 short ChangeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
47 short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
48 short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
49 short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
50 short Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
51 boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
52 boolean Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
53 boolean Changing[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
54 short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
55 short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
56 short AmoebaCnt[MAX_NUM_AMOEBA];
57 short AmoebaCnt2[MAX_NUM_AMOEBA];
58 short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
59 short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
61 unsigned long Properties[MAX_NUM_ELEMENTS][NUM_EP_BITFIELDS];
63 int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
64 int GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
65 int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
66 int GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
68 int lev_fieldx, lev_fieldy;
69 int scroll_x, scroll_y;
73 int ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0;
75 int BorderElement = EL_STEELWALL;
76 int GameFrameDelay = GAME_FRAME_DELAY;
77 int FfwdFrameDelay = FFWD_FRAME_DELAY;
79 int BX2 = SCR_FIELDX - 1, BY2 = SCR_FIELDY - 1;
80 int SBX_Left, SBX_Right;
81 int SBY_Upper, SBY_Lower;
86 int TimeFrames, TimePlayed, TimeLeft;
88 boolean network_player_action_received = FALSE;
90 struct LevelInfo level, level_template;
91 struct PlayerInfo stored_player[MAX_PLAYERS], *local_player = NULL;
92 struct HiScore highscore[MAX_SCORE_ENTRIES];
94 struct SetupInfo setup;
96 struct GlobalInfo global;
99 struct GraphicInfo *graphic_info = NULL;
100 struct SoundInfo *sound_info = NULL;
103 /* ------------------------------------------------------------------------- */
104 /* element definitions */
105 /* ------------------------------------------------------------------------- */
107 struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
109 /* keyword to start parser: "ELEMENT_INFO_START" <-- do not change! */
111 /* ----------------------------------------------------------------------- */
112 /* "real" level file elements */
113 /* ----------------------------------------------------------------------- */
203 "quicksand with rock"
248 "Conway's wall of life"
271 "robot_wheel_active",
273 "magic wheel (running)"
318 "gray door (opened by red key)"
323 "gray door (opened by yellow key)"},
327 "gray door (opened by green key)"},
331 "gray door (opened by blue key)"},
345 "invisible normal wall"
370 "amoeba with content"
405 "wall with BD style diamond"
408 "wall_emerald_yellow",
410 "wall with yellow emerald"
420 "magic wall (BD style)"
423 "invisible_steelwall",
425 "invisible steel wall"
433 "dynabomb_increase_number",
435 "increases number of bombs"
438 "dynabomb_increase_size",
440 "increases explosion size"
443 "dynabomb_increase_power",
445 "increases power of explosion"
453 "sokoban_field_empty",
455 "sokoban empty field"
458 "sokoban_field_full",
460 "sokoban field with object"
463 "bd_butterfly_right",
465 "butterfly (starts moving right)"},
469 "butterfly (starts moving up)"
474 "butterfly (starts moving left)"},
478 "butterfly (starts moving down)"},
482 "firefly (starts moving right)"
487 "firefly (starts moving up)"
492 "firefly (starts moving left)"
497 "firefly (starts moving down)"
532 "bug (starts moving right)"
537 "bug (starts moving up)"
542 "bug (starts moving left)"
547 "bug (starts moving down)"
552 "spaceship (starts moving right)"},
556 "spaceship (starts moving up)"
561 "spaceship (starts moving left)"},
565 "spaceship (starts moving down)"},
569 "pac man (starts moving right)"
574 "pac man (starts moving up)"
579 "pac man (starts moving left)"
584 "pac man (starts moving down)"
599 "wall with red emerald"
602 "wall_emerald_purple",
604 "wall with purple emerald"
609 "acid pool (top left)"
612 "acid_pool_topright",
614 "acid pool (top right)"
617 "acid_pool_bottomleft",
619 "acid pool (bottom left)"
627 "acid_pool_bottomright",
629 "acid pool (bottom right)"
634 "normal wall (BD style)"
699 "fire breathing dragon"
1012 "char_bracketright",
1107 "expandable_wall_horizontal",
1109 "growing wall (horizontal)"
1112 "expandable_wall_vertical",
1114 "growing wall (vertical)"
1117 "expandable_wall_any",
1119 "growing wall (any direction)"
1124 "red door (EM style)"
1129 "yellow door (EM style)"
1134 "green door (EM style)"
1139 "blue door (EM style)"
1144 "yellow key (EM style)"
1149 "green key (EM style)"
1154 "blue key (EM style)"
1204 "port (leading right)"
1209 "port (leading down)"
1214 "port (leading left)"
1222 "sp_gravity_port_right",
1224 "gravity port (leading right)"
1227 "sp_gravity_port_down",
1229 "gravity port (leading down)"
1232 "sp_gravity_port_left",
1234 "gravity port (leading left)"
1237 "sp_gravity_port_up",
1239 "gravity port (leading up)"
1267 "sp_port_horizontal",
1274 "port (any direction)"
1297 "sp_hardware_base_1",
1302 "sp_hardware_green",
1317 "sp_hardware_yellow",
1322 "sp_hardware_base_2",
1327 "sp_hardware_base_3",
1332 "sp_hardware_base_4",
1337 "sp_hardware_base_5",
1342 "sp_hardware_base_6",
1359 "gray door (EM style, red key)"
1364 "gray door (EM style, yellow key)"
1369 "gray door (EM style, green key)"
1374 "gray door (EM style, blue key)"
1414 "gray door (opened by white key)"
1434 "switch gate (open)"
1437 "switchgate_closed",
1439 "switch gate (closed)"
1442 "switchgate_switch_up",
1443 "switchgate_switch",
1444 "switch for switch gate"
1447 "switchgate_switch_down",
1448 "switchgate_switch",
1449 "switch for switch gate"
1462 "conveyor_belt_1_left",
1464 "red conveyor belt (left)"
1467 "conveyor_belt_1_middle",
1469 "red conveyor belt (middle)"
1472 "conveyor_belt_1_right",
1474 "red conveyor belt (right)"
1477 "conveyor_belt_1_switch_left",
1478 "conveyor_belt_switch",
1479 "switch for red conveyor belt (left)"
1482 "conveyor_belt_1_switch_middle",
1483 "conveyor_belt_switch",
1484 "switch for red conveyor belt (middle)"
1487 "conveyor_belt_1_switch_right",
1488 "conveyor_belt_switch",
1489 "switch for red conveyor belt (right)"
1492 "conveyor_belt_2_left",
1494 "yellow conveyor belt (left)"
1497 "conveyor_belt_2_middle",
1499 "yellow conveyor belt (middle)"
1502 "conveyor_belt_2_right",
1504 "yellow conveyor belt (right)"
1507 "conveyor_belt_2_switch_left",
1508 "conveyor_belt_switch",
1509 "switch for yellow conveyor belt (left)"
1512 "conveyor_belt_2_switch_middle",
1513 "conveyor_belt_switch",
1514 "switch for yellow conveyor belt (middle)"
1517 "conveyor_belt_2_switch_right",
1518 "conveyor_belt_switch",
1519 "switch for yellow conveyor belt (right)"
1522 "conveyor_belt_3_left",
1524 "green conveyor belt (left)"
1527 "conveyor_belt_3_middle",
1529 "green conveyor belt (middle)"
1532 "conveyor_belt_3_right",
1534 "green conveyor belt (right)"
1537 "conveyor_belt_3_switch_left",
1538 "conveyor_belt_switch",
1539 "switch for green conveyor belt (left)"
1542 "conveyor_belt_3_switch_middle",
1543 "conveyor_belt_switch",
1544 "switch for green conveyor belt (middle)"
1547 "conveyor_belt_3_switch_right",
1548 "conveyor_belt_switch",
1549 "switch for green conveyor belt (right)"
1552 "conveyor_belt_4_left",
1554 "blue conveyor belt (left)"
1557 "conveyor_belt_4_middle",
1559 "blue conveyor belt (middle)"
1562 "conveyor_belt_4_right",
1564 "blue conveyor belt (right)"
1567 "conveyor_belt_4_switch_left",
1568 "conveyor_belt_switch",
1569 "switch for blue conveyor belt (left)"
1572 "conveyor_belt_4_switch_middle",
1573 "conveyor_belt_switch",
1574 "switch for blue conveyor belt (middle)"
1577 "conveyor_belt_4_switch_right",
1578 "conveyor_belt_switch",
1579 "switch for blue conveyor belt (right)"
1594 "light switch (off)"
1597 "light_switch_active",
1604 "sign (exclamation)"
1607 "sign_radioactivity",
1609 "sign (radio activity)"
1619 "sign (wheel chair)"
1664 "mole (starts moving left)"
1669 "mole (starts moving right)"
1674 "mole (starts moving up)"
1679 "mole (starts moving down)"
1682 "steelwall_slippery",
1684 "slippery steel wall"
1694 "dx unknown element 15"
1699 "dx unknown element 42"
1714 "shield (deadly, kills enemies)"
1724 "time gate (closed)"
1727 "timegate_switch_active",
1729 "switch for time gate"
1734 "switch for time gate"
1742 "balloon_switch_left",
1744 "send balloon to the left"
1747 "balloon_switch_right",
1749 "send balloon to the right"
1752 "balloon_switch_up",
1757 "balloon_switch_down",
1762 "balloon_switch_any",
1764 "send balloon in any direction"
1829 "tube (any direction)"
1842 "tube_vertical_left",
1844 "tube (vertical & left)"
1847 "tube_vertical_right",
1849 "tube (vertical & right)"
1852 "tube_horizontal_up",
1854 "tube (horizontal & up)"
1857 "tube_horizontal_down",
1859 "tube (horizontal & down)"
1869 "tube (left & down)"
1879 "tube (right & down)"
1894 "stable bomb (DX style)"
2404 "custom element 100"
2409 "custom element 101"
2414 "custom element 102"
2419 "custom element 103"
2424 "custom element 104"
2429 "custom element 105"
2434 "custom element 106"
2439 "custom element 107"
2444 "custom element 108"
2449 "custom element 109"
2454 "custom element 110"
2459 "custom element 111"
2464 "custom element 112"
2469 "custom element 113"
2474 "custom element 114"
2479 "custom element 115"
2484 "custom element 116"
2489 "custom element 117"
2494 "custom element 118"
2499 "custom element 119"
2504 "custom element 120"
2509 "custom element 121"
2514 "custom element 122"
2519 "custom element 123"
2524 "custom element 124"
2529 "custom element 125"
2534 "custom element 126"
2539 "custom element 127"
2544 "custom element 128"
2549 "custom element 129"
2554 "custom element 130"
2559 "custom element 131"
2564 "custom element 132"
2569 "custom element 133"
2574 "custom element 134"
2579 "custom element 135"
2584 "custom element 136"
2589 "custom element 137"
2594 "custom element 138"
2599 "custom element 139"
2604 "custom element 140"
2609 "custom element 141"
2614 "custom element 142"
2619 "custom element 143"
2624 "custom element 144"
2629 "custom element 145"
2634 "custom element 146"
2639 "custom element 147"
2644 "custom element 148"
2649 "custom element 149"
2654 "custom element 150"
2659 "custom element 151"
2664 "custom element 152"
2669 "custom element 153"
2674 "custom element 154"
2679 "custom element 155"
2684 "custom element 156"
2689 "custom element 157"
2694 "custom element 158"
2699 "custom element 159"
2704 "custom element 160"
2709 "custom element 161"
2714 "custom element 162"
2719 "custom element 163"
2724 "custom element 164"
2729 "custom element 165"
2734 "custom element 166"
2739 "custom element 167"
2744 "custom element 168"
2749 "custom element 169"
2754 "custom element 170"
2759 "custom element 171"
2764 "custom element 172"
2769 "custom element 173"
2774 "custom element 174"
2779 "custom element 175"
2784 "custom element 176"
2789 "custom element 177"
2794 "custom element 178"
2799 "custom element 179"
2804 "custom element 180"
2809 "custom element 181"
2814 "custom element 182"
2819 "custom element 183"
2824 "custom element 184"
2829 "custom element 185"
2834 "custom element 186"
2839 "custom element 187"
2844 "custom element 188"
2849 "custom element 189"
2854 "custom element 190"
2859 "custom element 191"
2864 "custom element 192"
2869 "custom element 193"
2874 "custom element 194"
2879 "custom element 195"
2884 "custom element 196"
2889 "custom element 197"
2894 "custom element 198"
2899 "custom element 199"
2904 "custom element 200"
2909 "custom element 201"
2914 "custom element 202"
2919 "custom element 203"
2924 "custom element 204"
2929 "custom element 205"
2934 "custom element 206"
2939 "custom element 207"
2944 "custom element 208"
2949 "custom element 209"
2954 "custom element 210"
2959 "custom element 211"
2964 "custom element 212"
2969 "custom element 213"
2974 "custom element 214"
2979 "custom element 215"
2984 "custom element 216"
2989 "custom element 217"
2994 "custom element 218"
2999 "custom element 219"
3004 "custom element 220"
3009 "custom element 221"
3014 "custom element 222"
3019 "custom element 223"
3024 "custom element 224"
3029 "custom element 225"
3034 "custom element 226"
3039 "custom element 227"
3044 "custom element 228"
3049 "custom element 229"
3054 "custom element 230"
3059 "custom element 231"
3064 "custom element 232"
3069 "custom element 233"
3074 "custom element 234"
3079 "custom element 235"
3084 "custom element 236"
3089 "custom element 237"
3094 "custom element 238"
3099 "custom element 239"
3104 "custom element 240"
3109 "custom element 241"
3114 "custom element 242"
3119 "custom element 243"
3124 "custom element 244"
3129 "custom element 245"
3134 "custom element 246"
3139 "custom element 247"
3144 "custom element 248"
3149 "custom element 249"
3154 "custom element 250"
3159 "custom element 251"
3164 "custom element 252"
3169 "custom element 253"
3174 "custom element 254"
3179 "custom element 255"
3184 "custom element 256"
3187 /* ----------------------------------------------------------------------- */
3188 /* "real" (and therefore drawable) runtime elements */
3189 /* ----------------------------------------------------------------------- */
3212 "dynabomb_player_1_active",
3217 "dynabomb_player_2_active",
3222 "dynabomb_player_3_active",
3227 "dynabomb_player_4_active",
3232 "sp_disk_red_active",
3237 "switchgate_opening",
3242 "switchgate_closing",
3267 "invisible_steelwall_active",
3272 "invisible_wall_active",
3277 "invisible_sand_active",
3282 "conveyor_belt_1_left_active",
3287 "conveyor_belt_1_middle_active",
3292 "conveyor_belt_1_right_active",
3297 "conveyor_belt_2_left_active",
3302 "conveyor_belt_2_middle_active",
3307 "conveyor_belt_2_right_active",
3312 "conveyor_belt_3_left_active",
3317 "conveyor_belt_3_middle_active",
3322 "conveyor_belt_3_right_active",
3327 "conveyor_belt_4_left_active",
3332 "conveyor_belt_4_middle_active",
3337 "conveyor_belt_4_right_active",
3352 "sp_terminal_active",
3357 "sp_buggy_base_activating",
3362 "sp_buggy_base_active",
3377 "quicksand_emptying",
3382 "magic_wall_active",
3387 "bd_magic_wall_active",
3397 "bd_magic_wall_full",
3402 "magic_wall_emptying",
3407 "bd_magic_wall_emptying",
3417 "bd_magic_wall_dead",
3422 /* ----------------------------------------------------------------------- */
3423 /* "unreal" (and therefore not drawable) runtime elements */
3424 /* ----------------------------------------------------------------------- */
3452 "acid_splash_right",
3467 "expandable_wall_growing",
3477 "player_is_leaving",
3482 "quicksand_filling",
3487 "magic_wall_filling",
3492 "bd_magic_wall_filling",
3497 /* ----------------------------------------------------------------------- */
3498 /* dummy elements (never used as game elements, only used as graphics) */
3499 /* ----------------------------------------------------------------------- */
3502 "steelwall_topleft",
3507 "steelwall_topright",
3512 "steelwall_bottomleft",
3517 "steelwall_bottomright",
3522 "steelwall_horizontal",
3527 "steelwall_vertical",
3532 "invisible_steelwall_topleft",
3537 "invisible_steelwall_topright",
3542 "invisible_steelwall_bottomleft",
3547 "invisible_steelwall_bottomright",
3552 "invisible_steelwall_horizontal",
3557 "invisible_steelwall_vertical",
3572 "dynabomb_player_1",
3577 "dynabomb_player_2",
3582 "dynabomb_player_3",
3587 "dynabomb_player_4",
3592 "shield_normal_active",
3597 "shield_deadly_active",
3622 /* keyword to stop parser: "ELEMENT_INFO_END" <-- do not change! */
3632 /* ------------------------------------------------------------------------- */
3633 /* element action and direction definitions */
3634 /* ------------------------------------------------------------------------- */
3636 struct ElementActionInfo element_action_info[NUM_ACTIONS + 1 + 1] =
3638 { ".[DEFAULT]", ACTION_DEFAULT, TRUE },
3639 { ".waiting", ACTION_WAITING, TRUE },
3640 { ".falling", ACTION_FALLING, TRUE },
3641 { ".moving", ACTION_MOVING, TRUE },
3642 { ".digging", ACTION_DIGGING, FALSE },
3643 { ".snapping", ACTION_SNAPPING, FALSE },
3644 { ".collecting", ACTION_COLLECTING, FALSE },
3645 { ".dropping", ACTION_DROPPING, FALSE },
3646 { ".pushing", ACTION_PUSHING, FALSE },
3647 { ".walking", ACTION_WALKING, FALSE },
3648 { ".passing", ACTION_PASSING, FALSE },
3649 { ".impact", ACTION_IMPACT, FALSE },
3650 { ".breaking", ACTION_BREAKING, FALSE },
3651 { ".activating", ACTION_ACTIVATING, FALSE },
3652 { ".deactivating", ACTION_DEACTIVATING, FALSE },
3653 { ".opening", ACTION_OPENING, FALSE },
3654 { ".closing", ACTION_CLOSING, FALSE },
3655 { ".attacking", ACTION_ATTACKING, TRUE },
3656 { ".growing", ACTION_GROWING, TRUE },
3657 { ".shrinking", ACTION_SHRINKING, FALSE },
3658 { ".active", ACTION_ACTIVE, TRUE },
3659 { ".filling", ACTION_FILLING, FALSE },
3660 { ".emptying", ACTION_EMPTYING, FALSE },
3661 { ".changing", ACTION_CHANGING, FALSE },
3662 { ".exploding", ACTION_EXPLODING, FALSE },
3663 { ".dying", ACTION_DYING, FALSE },
3664 { ".other", ACTION_OTHER, FALSE },
3666 /* empty suffix always matches -- check as last entry in InitSoundInfo() */
3667 { "", ACTION_DEFAULT, TRUE },
3672 struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS + 1] =
3674 { ".left", MV_BIT_LEFT },
3675 { ".right", MV_BIT_RIGHT },
3676 { ".up", MV_BIT_UP },
3677 { ".down", MV_BIT_DOWN },
3682 struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1] =
3684 { ".MAIN", GAME_MODE_MAIN, },
3685 { ".LEVELS", GAME_MODE_LEVELS },
3686 { ".SCORES", GAME_MODE_SCORES, },
3687 { ".EDITOR", GAME_MODE_EDITOR, },
3688 { ".INFO", GAME_MODE_INFO, },
3689 { ".SETUP", GAME_MODE_SETUP, },
3690 { ".DOOR", GAME_MODE_PSEUDO_DOOR, },
3691 { ".PREVIEW", GAME_MODE_PSEUDO_PREVIEW, },
3692 { ".CRUMBLED", GAME_MODE_PSEUDO_CRUMBLED, },
3697 struct TokenIntPtrInfo image_config_vars[] =
3699 { "global.num_toons", &global.num_toons },
3701 { "menu.draw_xoffset", &menu.draw_xoffset_default },
3702 { "menu.draw_yoffset", &menu.draw_yoffset_default },
3703 { "menu.draw_xoffset.MAIN", &menu.draw_xoffset[GFX_SPECIAL_ARG_MAIN] },
3704 { "menu.draw_yoffset.MAIN", &menu.draw_yoffset[GFX_SPECIAL_ARG_MAIN] },
3705 { "menu.draw_xoffset.LEVELS", &menu.draw_xoffset[GFX_SPECIAL_ARG_LEVELS] },
3706 { "menu.draw_yoffset.LEVELS", &menu.draw_yoffset[GFX_SPECIAL_ARG_LEVELS] },
3707 { "menu.draw_xoffset.SCORES", &menu.draw_xoffset[GFX_SPECIAL_ARG_SCORES] },
3708 { "menu.draw_yoffset.SCORES", &menu.draw_yoffset[GFX_SPECIAL_ARG_SCORES] },
3709 { "menu.draw_xoffset.EDITOR", &menu.draw_xoffset[GFX_SPECIAL_ARG_EDITOR] },
3710 { "menu.draw_yoffset.EDITOR", &menu.draw_yoffset[GFX_SPECIAL_ARG_EDITOR] },
3711 { "menu.draw_xoffset.INFO", &menu.draw_xoffset[GFX_SPECIAL_ARG_INFO] },
3712 { "menu.draw_yoffset.INFO", &menu.draw_yoffset[GFX_SPECIAL_ARG_INFO] },
3713 { "menu.draw_xoffset.SETUP", &menu.draw_xoffset[GFX_SPECIAL_ARG_SETUP] },
3714 { "menu.draw_yoffset.SETUP", &menu.draw_yoffset[GFX_SPECIAL_ARG_SETUP] },
3716 { "menu.scrollbar_xoffset", &menu.scrollbar_xoffset },
3718 { "menu.list_size", &menu.list_size_default },
3719 { "menu.list_size.LEVELS", &menu.list_size[GFX_SPECIAL_ARG_LEVELS] },
3720 { "menu.list_size.SCORES", &menu.list_size[GFX_SPECIAL_ARG_SCORES] },
3721 { "menu.list_size.INFO", &menu.list_size[GFX_SPECIAL_ARG_INFO] },
3723 { "door.step_offset", &door.step_offset },
3724 { "door.step_delay", &door.step_delay },
3730 /* ------------------------------------------------------------------------- */
3731 /* font definitions */
3732 /* ------------------------------------------------------------------------- */
3734 /* Important: When one entry is a prefix of another entry, the longer entry
3735 must come first, because the dynamic configuration does prefix matching! */
3737 struct FontInfo font_info[NUM_FONTS + 1] =
3739 { "font.initial_1" },
3740 { "font.initial_2" },
3741 { "font.initial_3" },
3742 { "font.initial_4" },
3747 { "font.text_1.active" },
3748 { "font.text_2.active" },
3749 { "font.text_3.active" },
3750 { "font.text_4.active" },
3755 { "font.input_1.active" },
3756 { "font.input_2.active" },
3759 { "font.option_off" },
3760 { "font.option_on" },
3763 { "font.value_old" },
3764 { "font.level_number" },
3765 { "font.tape_recorder" },
3766 { "font.game_info" },
3770 /* ========================================================================= */
3772 /* ========================================================================= */
3774 int main(int argc, char *argv[])
3776 InitProgramInfo(argv[0], USERDATA_DIRECTORY,
3777 PROGRAM_TITLE_STRING, getWindowTitleString(),
3778 ICON_TITLE_STRING, X11_ICON_FILENAME, X11_ICONMASK_FILENAME,
3779 MSDOS_POINTER_FILENAME,
3780 COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL);
3782 InitExitFunction(CloseAllAndExit);
3783 InitPlatformDependentStuff();
3791 return 0; /* to keep compilers happy */