X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.c;h=c721a4cd734808cc3cdf4b6fbb8f1a8269fc26a8;hb=c9bb6e0a6eecbf84320be79b121bd957a938a08c;hp=f32e6f351ecf9897e5510d01c51e71c466c44253;hpb=c5ee7e4524f10322894b2547337e4c973a80a552;p=rocksndiamonds.git diff --git a/src/main.c b/src/main.c index f32e6f35..c721a4cd 100644 --- a/src/main.c +++ b/src/main.c @@ -17,6 +17,7 @@ #include "init.h" #include "game.h" #include "events.h" +#include "config.h" #if 0 GC tile_clip_gc; @@ -26,10 +27,10 @@ Bitmap *bitmap_db_field, *bitmap_db_door; #if 0 Pixmap tile_clipmask[NUM_TILES]; #endif -DrawBuffer *fieldbuffer; -DrawBuffer *drawto_field; +DrawBuffer *fieldbuffer; +DrawBuffer *drawto_field; -int game_status = MAINMENU; +int game_status = -1; boolean level_editor_test_game = FALSE; boolean network_playing = FALSE; @@ -43,9 +44,11 @@ short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short ChangeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -54,12 +57,12 @@ short AmoebaCnt2[MAX_NUM_AMOEBA]; short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -unsigned long Properties1[MAX_NUM_ELEMENTS]; -unsigned long Properties2[MAX_NUM_ELEMENTS]; +unsigned long Properties[MAX_NUM_ELEMENTS][NUM_EP_BITFIELDS]; int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; int GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +int GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; int lev_fieldx, lev_fieldy; int scroll_x, scroll_y; @@ -90,6 +93,8 @@ struct TapeInfo tape; struct SetupInfo setup; struct GameInfo game; struct GlobalInfo global; +struct MenuInfo menu; +struct DoorInfo door; struct GraphicInfo *graphic_info = NULL; struct SoundInfo *sound_info = NULL; @@ -98,9 +103,13 @@ struct SoundInfo *sound_info = NULL; /* element definitions */ /* ------------------------------------------------------------------------- */ -struct ElementInfo element_info[MAX_NUM_ELEMENTS] = +struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] = { - /* "real" level file elements */ + /* keyword to start parser: "ELEMENT_INFO_START" <-- do not change! */ + + /* ----------------------------------------------------------------------- */ + /* "real" level file elements */ + /* ----------------------------------------------------------------------- */ { "empty_space", @@ -233,8 +242,8 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "nut with emerald" }, { - "gameoflife", - "gameoflife", + "game_of_life", + "game_of_life", "Conway's wall of life" }, { @@ -263,60 +272,60 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "magic wheel (running)" }, { - "key1", + "key_1", "key", "red key" }, { - "key2", + "key_2", "key", "yellow key" }, { - "key3", + "key_3", "key", "green key" }, { - "key4", + "key_4", "key", "blue key" }, { - "gate1", + "gate_1", "gate", "red door" }, { - "gate2", + "gate_2", "gate", "yellow door" }, { - "gate3", + "gate_3", "gate", "green door" }, { - "gate4", + "gate_4", "gate", "blue door" }, { - "gate1_gray", + "gate_1_gray", "gate", "gray door (opened by red key)" }, { - "gate2_gray", + "gate_2_gray", "gate", "gray door (opened by yellow key)"}, { - "gate3_gray", + "gate_3_gray", "gate", "gray door (opened by green key)"}, { - "gate4_gray", + "gate_4_gray", "gate", "gray door (opened by blue key)"}, { @@ -375,7 +384,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "time orb (empty)" }, { - "wall_growing", + "expandable_wall", "wall", "growing wall" }, @@ -420,33 +429,33 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "(not used)" }, { - "dynabomb_nr", - "dynabomb_nr", + "dynabomb_increase_number", + "dynabomb", "increases number of bombs" }, { - "dynabomb_sz", - "dynabomb_sz", + "dynabomb_increase_size", + "dynabomb", "increases explosion size" }, { - "dynabomb_xl", - "dynabomb_xl", + "dynabomb_increase_power", + "dynabomb", "increases power of explosion" }, { "sokoban_object", - "sokoban_object", + "sokoban", "sokoban object" }, { "sokoban_field_empty", - "sokoban_field", + "sokoban", "sokoban empty field" }, { "sokoban_field_full", - "sokoban_field", + "sokoban", "sokoban field with object" }, { @@ -497,22 +506,22 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "firefly" }, { - "player1", + "player_1", "player", "yellow player" }, { - "player2", + "player_2", "player", "red player" }, { - "player3", + "player_3", "player", "green player" }, { - "player4", + "player_4", "player", "blue player" }, @@ -594,27 +603,27 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "wall with purple emerald" }, { - "acidpool_topleft", + "acid_pool_topleft", "wall", "acid pool (top left)" }, { - "acidpool_topright", + "acid_pool_topright", "wall", "acid pool (top right)" }, { - "acidpool_bottomleft", + "acid_pool_bottomleft", "wall", "acid pool (bottom left)" }, { - "acidpool_bottom", + "acid_pool_bottom", "wall", "acid pool (bottom)" }, { - "acidpool_bottomright", + "acid_pool_bottomright", "wall", "acid pool (bottom right)" }, @@ -636,7 +645,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = { "black_orb", "black_orb", - "black orb bomb" + "bomb" }, { "amoeba_to_diamond", @@ -659,22 +668,22 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "satellite" }, { - "arrow_blue_left", + "arrow_left", "arrow", "arrow left" }, { - "arrow_blue_right", + "arrow_right", "arrow", "arrow right" }, { - "arrow_blue_up", + "arrow_up", "arrow", "arrow up" }, { - "arrow_blue_down", + "arrow_down", "arrow", "arrow down" }, @@ -689,7 +698,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "fire breathing dragon" }, { - "em_key1_file", + "em_key_1_file", "key", "red key (EM style)" }, @@ -989,64 +998,64 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "letter 'Z'" }, { - "char_ae", + "char_bracketleft", "char", - "letter 'Ä'" + "letter '['" }, { - "char_oe", + "char_backslash", "char", - "letter 'Ö'" + "letter '\\'" }, { - "char_ue", + "char_bracketright", "char", - "letter 'Ü'" + "letter ']'" }, { - "char_copyright", + "char_asciicircum", "char", "letter '^'" }, { "char_underscore", "char", - "letter ''" + "letter '_'" }, { - "char_empty", + "char_copyright", "char", - "letter ''" + "letter '©'" }, { - "char_degree", + "char_aumlaut", "char", - "letter ''" + "letter 'Ä'" }, { - "char_tm", + "char_oumlaut", "char", - "letter ''" + "letter 'Ö'" }, { - "char_cursor", + "char_uumlaut", "char", - "letter ''" + "letter 'Ü'" }, { - "char_unused", + "char_degree", "char", - "letter ''" + "letter '°'" }, { - "char_unused", + "char_trademark", "char", - "letter ''" + "letter '®'" }, { - "char_unused", + "char_cursor", "char", - "letter ''" + "letter ' '" }, { "char_unused", @@ -1094,52 +1103,52 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "letter ''" }, { - "wall_growing_x", + "expandable_wall_horizontal", "wall", "growing wall (horizontal)" }, { - "wall_growing_y", + "expandable_wall_vertical", "wall", "growing wall (vertical)" }, { - "wall_growing_xy", + "expandable_wall_any", "wall", - "growing wall (all directions)" + "growing wall (any direction)" }, { - "em_gate1", + "em_gate_1", "gate", "red door (EM style)" }, { - "em_gate2", + "em_gate_2", "gate", "yellow door (EM style)" }, { - "em_gate3", + "em_gate_3", "gate", "green door (EM style)" }, { - "em_gate4", + "em_gate_4", "gate", "blue door (EM style)" }, { - "em_key2_file", + "em_key_2_file", "key", "yellow key (EM style)" }, { - "em_key3_file", + "em_key_3_file", "key", "green key (EM style)" }, { - "em_key4_file", + "em_key_4_file", "key", "blue key (EM style)" }, @@ -1174,7 +1183,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "chip (single)" }, { - "sp_hard_gray", + "sp_hardware_gray", "wall", "hardware" }, @@ -1189,42 +1198,42 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "orange disk" }, { - "sp_port1_right", + "sp_port_right", "sp_port", "port (leading right)" }, { - "sp_port1_down", + "sp_port_down", "sp_port", "port (leading down)" }, { - "sp_port1_left", + "sp_port_left", "sp_port", "port (leading left)" }, { - "sp_port1_up", + "sp_port_up", "sp_port", "port (leading up)" }, { - "sp_port2_right", + "sp_gravity_port_right", "sp_port", "port (leading right)" }, { - "sp_port2_down", + "sp_gravity_port_down", "sp_port", "port (leading down)" }, { - "sp_port2_left", + "sp_gravity_port_left", "sp_port", "port (leading left)" }, { - "sp_port2_up", + "sp_gravity_port_up", "sp_port", "port (leading up)" }, @@ -1245,23 +1254,23 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "sp_disk_red", - "sp_disk_red", + "dynamite", "red disk" }, { - "sp_port_y", + "sp_port_vertical", "sp_port", "port (vertical)" }, { - "sp_port_x", + "sp_port_horizontal", "sp_port", "port (horizontal)" }, { - "sp_port_xy", + "sp_port_any", "sp_port", - "port (all directions)" + "port (any direction)" }, { "sp_electron", @@ -1284,82 +1293,82 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "chip (right half)" }, { - "sp_hard_base1", + "sp_hardware_base_1", "wall", "hardware" }, { - "sp_hard_green", + "sp_hardware_green", "wall", "hardware" }, { - "sp_hard_blue", + "sp_hardware_blue", "wall", "hardware" }, { - "sp_hard_red", + "sp_hardware_red", "wall", "hardware" }, { - "sp_hard_yellow", + "sp_hardware_yellow", "wall", "hardware" }, { - "sp_hard_base2", + "sp_hardware_base_2", "wall", "hardware" }, { - "sp_hard_base3", + "sp_hardware_base_3", "wall", "hardware" }, { - "sp_hard_base4", + "sp_hardware_base_4", "wall", "hardware" }, { - "sp_hard_base5", + "sp_hardware_base_5", "wall", "hardware" }, { - "sp_hard_base6", + "sp_hardware_base_6", "wall", "hardware" }, { - "sp_chip_upper", + "sp_chip_top", "wall", "chip (upper half)" }, { - "sp_chip_lower", + "sp_chip_bottom", "wall", "chip (lower half)" }, { - "em_gate1_gray", + "em_gate_1_gray", "gate", "gray door (EM style, red key)" }, { - "em_gate2_gray", + "em_gate_2_gray", "gate", "gray door (EM style, yellow key)" }, { - "em_gate3_gray", + "em_gate_3_gray", "gate", "gray door (EM style, green key)" }, { - "em_gate4_gray", + "em_gate_4_gray", "gate", "gray door (EM style, blue key)" }, @@ -1449,122 +1458,122 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "-" }, { - "conveyor_belt1_left", + "conveyor_belt_1_left", "conveyor_belt", "red conveyor belt (left)" }, { - "conveyor_belt1_middle", + "conveyor_belt_1_middle", "conveyor_belt", "red conveyor belt (middle)" }, { - "conveyor_belt1_right", + "conveyor_belt_1_right", "conveyor_belt", "red conveyor belt (right)" }, { - "conveyor_belt1_switch_left", + "conveyor_belt_1_switch_left", "conveyor_belt_switch", "switch for red conveyor belt (left)" }, { - "conveyor_belt1_switch_middle", + "conveyor_belt_1_switch_middle", "conveyor_belt_switch", "switch for red conveyor belt (middle)" }, { - "conveyor_belt1_switch_right", + "conveyor_belt_1_switch_right", "conveyor_belt_switch", "switch for red conveyor belt (right)" }, { - "conveyor_belt2_left", + "conveyor_belt_2_left", "conveyor_belt", "yellow conveyor belt (left)" }, { - "conveyor_belt2_middle", + "conveyor_belt_2_middle", "conveyor_belt", "yellow conveyor belt (middle)" }, { - "conveyor_belt2_right", + "conveyor_belt_2_right", "conveyor_belt", "yellow conveyor belt (right)" }, { - "conveyor_belt2_switch_left", + "conveyor_belt_2_switch_left", "conveyor_belt_switch", "switch for yellow conveyor belt (left)" }, { - "conveyor_belt2_switch_middle", + "conveyor_belt_2_switch_middle", "conveyor_belt_switch", "switch for yellow conveyor belt (middle)" }, { - "conveyor_belt2_switch_right", + "conveyor_belt_2_switch_right", "conveyor_belt_switch", "switch for yellow conveyor belt (right)" }, { - "conveyor_belt3_left", + "conveyor_belt_3_left", "conveyor_belt", "green conveyor belt (left)" }, { - "conveyor_belt3_middle", + "conveyor_belt_3_middle", "conveyor_belt", "green conveyor belt (middle)" }, { - "conveyor_belt3_right", + "conveyor_belt_3_right", "conveyor_belt", "green conveyor belt (right)" }, { - "conveyor_belt3_switch_left", + "conveyor_belt_3_switch_left", "conveyor_belt_switch", "switch for green conveyor belt (left)" }, { - "conveyor_belt3_switch_middle", + "conveyor_belt_3_switch_middle", "conveyor_belt_switch", "switch for green conveyor belt (middle)" }, { - "conveyor_belt3_switch_right", + "conveyor_belt_3_switch_right", "conveyor_belt_switch", "switch for green conveyor belt (right)" }, { - "conveyor_belt4_left", + "conveyor_belt_4_left", "conveyor_belt", "blue conveyor belt (left)" }, { - "conveyor_belt4_middle", + "conveyor_belt_4_middle", "conveyor_belt", "blue conveyor belt (middle)" }, { - "conveyor_belt4_right", + "conveyor_belt_4_right", "conveyor_belt", "blue conveyor belt (right)" }, { - "conveyor_belt4_switch_left", + "conveyor_belt_4_switch_left", "conveyor_belt_switch", "switch for blue conveyor belt (left)" }, { - "conveyor_belt4_switch_middle", + "conveyor_belt_4_switch_middle", "conveyor_belt_switch", "switch for blue conveyor belt (middle)" }, { - "conveyor_belt4_switch_right", + "conveyor_belt_4_switch_right", "conveyor_belt_switch", "switch for blue conveyor belt (right)" }, @@ -1729,94 +1738,94 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "balloon" }, { - "balloon_send_left", + "balloon_switch_left", "balloon_switch", "send balloon to the left" }, { - "balloon_send_right", + "balloon_switch_right", "balloon_switch", "send balloon to the right" }, { - "balloon_send_up", + "balloon_switch_up", "balloon_switch", "send balloon up" }, { - "balloon_send_down", + "balloon_switch_down", "balloon_switch", "send balloon down" }, { - "balloon_send_any_direction", + "balloon_switch_any", "balloon_switch", "send balloon in any direction" }, { - "emc_steelwall1", + "emc_steelwall_1", "wall", "steel wall" }, { - "emc_steelwall2", + "emc_steelwall_2", "wall", "steel wall" }, { - "emc_steelwall3", + "emc_steelwall_3", "wall", "steel wall" }, { - "emc_steelwall4", + "emc_steelwall_4", "wall", "steel wall" }, { - "emc_wall_pillar_upper", + "emc_wall_1", "wall", "normal wall" }, { - "emc_wall_pillar_middle", + "emc_wall_2", "wall", "normal wall" }, { - "emc_wall_pillar_lower", + "emc_wall_3", "wall", "normal wall" }, { - "emc_wall4", + "emc_wall_4", "wall", "normal wall" }, { - "emc_wall5", + "emc_wall_5", "wall", "normal wall" }, { - "emc_wall6", + "emc_wall_6", "wall", "normal wall" }, { - "emc_wall7", + "emc_wall_7", "wall", "normal wall" }, { - "emc_wall8", + "emc_wall_8", "wall", "normal wall" }, { - "tube_all", + "tube_any", "tube", - "tube (all directions)" + "tube (any direction)" }, { "tube_vertical", @@ -1880,7 +1889,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "dx_supabomb", - "dx_bomb", + "bomb", "stable bomb (DX style)" }, { @@ -2534,48 +2543,55 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "custom element 128" }, - /* "real" (and therefore drawable) runtime elements */ + /* ----------------------------------------------------------------------- */ + /* "real" (and therefore drawable) runtime elements */ + /* ----------------------------------------------------------------------- */ { - "em_key1", + "em_key_1", "key", "-" }, { - "em_key2", + "em_key_2", "key", "-" }, { - "em_key3", + "em_key_3", "key", "-" }, { - "em_key4", + "em_key_4", "key", "-" }, { - "dynabomb_player1_active", + "dynabomb_player_1_active", "dynabomb", "-" }, { - "dynabomb_player2_active", + "dynabomb_player_2_active", "dynabomb", "-" }, { - "dynabomb_player3_active", + "dynabomb_player_3_active", "dynabomb", "-" }, { - "dynabomb_player4_active", + "dynabomb_player_4_active", "dynabomb", "-" }, + { + "sp_disk_red_active", + "dynamite", + "-" + }, { "switchgate_opening", "switchgate", @@ -2622,62 +2638,62 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "-" }, { - "conveyor_belt1_left_active", + "conveyor_belt_1_left_active", "conveyor_belt", "-" }, { - "conveyor_belt1_middle_active", + "conveyor_belt_1_middle_active", "conveyor_belt", "-" }, { - "conveyor_belt1_right_active", + "conveyor_belt_1_right_active", "conveyor_belt", "-" }, { - "conveyor_belt2_left_active", + "conveyor_belt_2_left_active", "conveyor_belt", "-" }, { - "conveyor_belt2_middle_active", + "conveyor_belt_2_middle_active", "conveyor_belt", "-" }, { - "conveyor_belt2_right_active", + "conveyor_belt_2_right_active", "conveyor_belt", "-" }, { - "conveyor_belt3_left_active", + "conveyor_belt_3_left_active", "conveyor_belt", "-" }, { - "conveyor_belt3_middle_active", + "conveyor_belt_3_middle_active", "conveyor_belt", "-" }, { - "conveyor_belt3_right_active", + "conveyor_belt_3_right_active", "conveyor_belt", "-" }, { - "conveyor_belt4_left_active", + "conveyor_belt_4_left_active", "conveyor_belt", "-" }, { - "conveyor_belt4_middle_active", + "conveyor_belt_4_middle_active", "conveyor_belt", "-" }, { - "conveyor_belt4_right_active", + "conveyor_belt_4_right_active", "conveyor_belt", "-" }, @@ -2712,7 +2728,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "-" }, { - "amoeba_dripping", + "amoeba_dropping", "amoeba", "-" }, @@ -2762,10 +2778,192 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "-" }, + /* ----------------------------------------------------------------------- */ + /* "unreal" (and therefore not drawable) runtime elements */ + /* ----------------------------------------------------------------------- */ + + { + "blocked", + "-", + "-" + }, + { + "explosion", + "-", + "-" + }, + { + "nut_breaking", + "-", + "-" + }, + { + "diamond_breaking", + "-", + "-" + }, + { + "acid_splash_left", + "-", + "-" + }, + { + "acid_splash_right", + "-", + "-" + }, + { + "amoeba_growing", + "-", + "-" + }, + { + "amoeba_shrinking", + "-", + "-" + }, + { + "expandable_wall_growing", + "-", + "-" + }, + { + "flames", + "-", + "-" + }, + { + "player_is_leaving", + "-", + "-" + }, + { + "quicksand_filling", + "quicksand", + "-" + }, + { + "magic_wall_filling", + "-", + "-" + }, + { + "bd_magic_wall_filling", + "-", + "-" + }, + + /* ----------------------------------------------------------------------- */ + /* dummy elements (never used as game elements, only used as graphics) */ + /* ----------------------------------------------------------------------- */ + + { + "steelwall_topleft", + "-", + "-" + }, + { + "steelwall_topright", + "-", + "-" + }, + { + "steelwall_bottomleft", + "-", + "-" + }, + { + "steelwall_bottomright", + "-", + "-" + }, + { + "steelwall_horizontal", + "-", + "-" + }, + { + "steelwall_vertical", + "-", + "-" + }, + { + "invisible_steelwall_topleft", + "-", + "-" + }, + { + "invisible_steelwall_topright", + "-", + "-" + }, + { + "invisible_steelwall_bottomleft", + "-", + "-" + }, + { + "invisible_steelwall_bottomright", + "-", + "-" + }, + { + "invisible_steelwall_horizontal", + "-", + "-" + }, + { + "invisible_steelwall_vertical", + "-", + "-" + }, + { + "sand_crumbled", + "-", + "-" + }, + { + "dynabomb_active", + "-", + "-" + }, + { + "shield_normal_active", + "-", + "-" + }, + { + "shield_deadly_active", + "-", + "-" + }, + { + "[default]", + "default", + "-" + }, + { + "[bd_default]", + "bd_default", + "-" + }, + { + "[sp_default]", + "sp_default", + "-" + }, + { + "[sb_default]", + "sb_default", + "-" + }, + + /* keyword to stop parser: "ELEMENT_INFO_END" <-- do not change! */ + { NULL, NULL, - "-" + NULL } }; @@ -2774,7 +2972,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = /* element action and direction definitions */ /* ------------------------------------------------------------------------- */ -struct ElementActionInfo element_action_info[] = +struct ElementActionInfo element_action_info[NUM_ACTIONS + 1] = { { ".[DEFAULT]", ACTION_DEFAULT, TRUE }, { ".waiting", ACTION_WAITING, TRUE }, @@ -2783,32 +2981,121 @@ struct ElementActionInfo element_action_info[] = { ".digging", ACTION_DIGGING, FALSE }, { ".snapping", ACTION_SNAPPING, FALSE }, { ".collecting", ACTION_COLLECTING, FALSE }, + { ".dropping", ACTION_DROPPING, FALSE }, { ".pushing", ACTION_PUSHING, FALSE }, { ".passing", ACTION_PASSING, FALSE }, { ".impact", ACTION_IMPACT, FALSE }, - { ".cracking", ACTION_CRACKING, FALSE }, { ".breaking", ACTION_BREAKING, FALSE }, { ".activating", ACTION_ACTIVATING, FALSE }, + { ".deactivating", ACTION_DEACTIVATING, FALSE }, { ".opening", ACTION_OPENING, FALSE }, { ".closing", ACTION_CLOSING, FALSE }, - { ".eating", ACTION_EATING, FALSE }, { ".attacking", ACTION_ATTACKING, TRUE }, { ".growing", ACTION_GROWING, TRUE }, { ".shrinking", ACTION_SHRINKING, FALSE }, { ".active", ACTION_ACTIVE, TRUE }, + { ".filling", ACTION_FILLING, FALSE }, + { ".emptying", ACTION_EMPTYING, FALSE }, + { ".changing", ACTION_CHANGING, FALSE }, + { ".exploding", ACTION_EXPLODING, FALSE }, + { ".dying", ACTION_DYING, FALSE }, { ".other", ACTION_OTHER, FALSE }, - { NULL, 0, 0 }, + { NULL, 0, 0 } }; -struct ElementDirectionInfo element_direction_info[] = +struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS + 1] = { { ".left", MV_BIT_LEFT }, { ".right", MV_BIT_RIGHT }, { ".up", MV_BIT_UP }, { ".down", MV_BIT_DOWN }, - { NULL, 0 }, + { NULL, 0 } +}; + +struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1] = +{ + { ".MAIN", GAME_MODE_MAIN, }, + { ".LEVELS", GAME_MODE_LEVELS }, + { ".SCORES", GAME_MODE_SCORES, }, + { ".EDITOR", GAME_MODE_EDITOR, }, + { ".INFO", GAME_MODE_INFO, }, + { ".SETUP", GAME_MODE_SETUP, }, + { ".DOOR", GAME_MODE_PSEUDO_DOOR, }, + { ".PREVIEW", GAME_MODE_PSEUDO_PREVIEW, }, + + { NULL, 0, } +}; + +struct TokenIntPtrInfo image_config_vars[] = +{ + { "global.num_toons", &global.num_toons }, + + { "menu.draw_xoffset", &menu.draw_xoffset_default }, + { "menu.draw_yoffset", &menu.draw_yoffset_default }, + { "menu.draw_xoffset.MAIN", &menu.draw_xoffset[GFX_SPECIAL_ARG_MAIN] }, + { "menu.draw_yoffset.MAIN", &menu.draw_yoffset[GFX_SPECIAL_ARG_MAIN] }, + { "menu.draw_xoffset.LEVELS", &menu.draw_xoffset[GFX_SPECIAL_ARG_LEVELS] }, + { "menu.draw_yoffset.LEVELS", &menu.draw_yoffset[GFX_SPECIAL_ARG_LEVELS] }, + { "menu.draw_xoffset.SCORES", &menu.draw_xoffset[GFX_SPECIAL_ARG_SCORES] }, + { "menu.draw_yoffset.SCORES", &menu.draw_yoffset[GFX_SPECIAL_ARG_SCORES] }, + { "menu.draw_xoffset.EDITOR", &menu.draw_xoffset[GFX_SPECIAL_ARG_EDITOR] }, + { "menu.draw_yoffset.EDITOR", &menu.draw_yoffset[GFX_SPECIAL_ARG_EDITOR] }, + { "menu.draw_xoffset.INFO", &menu.draw_xoffset[GFX_SPECIAL_ARG_INFO] }, + { "menu.draw_yoffset.INFO", &menu.draw_yoffset[GFX_SPECIAL_ARG_INFO] }, + { "menu.draw_xoffset.SETUP", &menu.draw_xoffset[GFX_SPECIAL_ARG_SETUP] }, + { "menu.draw_yoffset.SETUP", &menu.draw_yoffset[GFX_SPECIAL_ARG_SETUP] }, + + { "menu.list_size", &menu.list_size_default }, + { "menu.list_size.LEVELS", &menu.list_size[GFX_SPECIAL_ARG_LEVELS] }, + { "menu.list_size.SCORES", &menu.list_size[GFX_SPECIAL_ARG_SCORES] }, + { "menu.list_size.INFO", &menu.list_size[GFX_SPECIAL_ARG_INFO] }, + + { "door.step_offset", &door.step_offset }, + { "door.step_delay", &door.step_delay }, + + { NULL, NULL, } +}; + + +/* ------------------------------------------------------------------------- */ +/* font definitions */ +/* ------------------------------------------------------------------------- */ + +/* Important: When one entry is a prefix of another entry, the longer entry + must come first, because the dynamic configuration does prefix matching! */ + +struct FontInfo font_info[NUM_FONTS + 1] = +{ + { "font.initial_1" }, + { "font.initial_2" }, + { "font.initial_3" }, + { "font.initial_4" }, + { "font.title_1" }, + { "font.title_2" }, + { "font.menu_1" }, + { "font.menu_2" }, + { "font.text_1.active" }, + { "font.text_2.active" }, + { "font.text_3.active" }, + { "font.text_4.active" }, + { "font.text_1" }, + { "font.text_2" }, + { "font.text_3" }, + { "font.text_4" }, + { "font.input_1.active" }, + { "font.input_2.active" }, + { "font.input_1" }, + { "font.input_2" }, + { "font.option_off" }, + { "font.option_on" }, + { "font.value_1" }, + { "font.value_2" }, + { "font.value_old" }, + { "font.level_number" }, + { "font.tape_recorder" }, + { "font.game_info" }, }; @@ -2818,7 +3105,12 @@ struct ElementDirectionInfo element_direction_info[] = int main(int argc, char *argv[]) { - InitCommandName(argv[0]); + InitProgramInfo(argv[0], USERDATA_DIRECTORY, + PROGRAM_TITLE_STRING, getWindowTitleString(), + ICON_TITLE_STRING, X11_ICON_FILENAME, X11_ICONMASK_FILENAME, + MSDOS_POINTER_FILENAME, + COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL); + InitExitFunction(CloseAllAndExit); InitPlatformDependantStuff();