X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.c;h=dc2c783438227082168a5dc1012e58895531d186;hb=720b0a62c8af0585e9517ed7a98ea336304c02e4;hp=b0a19802b855a91a6389231c5ed3006cf2e6d9f9;hpb=7b47ce7ba0f673f0de5130daf5726104d0b38902;p=rocksndiamonds.git diff --git a/src/main.c b/src/main.c index b0a19802..dc2c7834 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,10 +44,13 @@ 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]; +boolean Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; short AmoebaCnt[MAX_NUM_AMOEBA]; @@ -54,11 +58,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]; -short GfxAction[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; @@ -89,19 +94,23 @@ struct TapeInfo tape; struct SetupInfo setup; struct GameInfo game; struct GlobalInfo global; -struct FileInfo *image_files; -struct FileInfo *sound_files; -struct GraphicInfo graphic_info[NUM_IMAGE_FILES]; -struct SoundInfo sound_info[NUM_SOUND_FILES]; +struct MenuInfo menu; +struct DoorInfo door; +struct GraphicInfo *graphic_info = NULL; +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", @@ -234,8 +243,8 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "nut with emerald" }, { - "gameoflife", - "gameoflife", + "game_of_life", + "game_of_life", "Conway's wall of life" }, { @@ -264,60 +273,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)"}, { @@ -376,7 +385,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "time orb (empty)" }, { - "wall_growing", + "expandable_wall", "wall", "growing wall" }, @@ -417,37 +426,37 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "unused_63", - NULL, + "unused", "(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" }, { @@ -498,22 +507,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" }, @@ -595,27 +604,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,8 +645,8 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "black_orb", - NULL, - "black orb bomb" + "black_orb", + "bomb" }, { "amoeba_to_diamond", @@ -660,23 +669,23 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "satellite" }, { - "arrow_blue_left", - NULL, + "arrow_left", + "arrow", "arrow left" }, { - "arrow_blue_right", - NULL, + "arrow_right", + "arrow", "arrow right" }, { - "arrow_blue_up", - NULL, + "arrow_up", + "arrow", "arrow up" }, { - "arrow_blue_down", - NULL, + "arrow_down", + "arrow", "arrow down" }, { @@ -690,457 +699,457 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "fire breathing dragon" }, { - "em_key1_file", + "em_key_1_file", "key", "red key (EM style)" }, { "char_space", - NULL, + "char", "letter ' '" }, { "char_exclam", - NULL, + "char", "letter '!'" }, { "char_quotedbl", - NULL, + "char", "letter '\"'" }, { "char_numbersign", - NULL, + "char", "letter '#'" }, { "char_dollar", - NULL, + "char", "letter '$'" }, { "char_procent", - NULL, + "char", "letter '%'" }, { "char_ampersand", - NULL, + "char", "letter '&'" }, { "char_apostrophe", - NULL, + "char", "letter '''" }, { "char_parenleft", - NULL, + "char", "letter '('" }, { "char_parenright", - NULL, + "char", "letter ')'" }, { "char_asterisk", - NULL, + "char", "letter '*'" }, { "char_plus", - NULL, + "char", "letter '+'" }, { "char_comma", - NULL, + "char", "letter ','" }, { "char_minus", - NULL, + "char", "letter '-'" }, { "char_period", - NULL, + "char", "letter '.'" }, { "char_slash", - NULL, + "char", "letter '/'" }, { "char_0", - NULL, + "char", "letter '0'" }, { "char_1", - NULL, + "char", "letter '1'" }, { "char_2", - NULL, + "char", "letter '2'" }, { "char_3", - NULL, + "char", "letter '3'" }, { "char_4", - NULL, + "char", "letter '4'" }, { "char_5", - NULL, + "char", "letter '5'" }, { "char_6", - NULL, + "char", "letter '6'" }, { "char_7", - NULL, + "char", "letter '7'" }, { "char_8", - NULL, + "char", "letter '8'" }, { "char_9", - NULL, + "char", "letter '9'" }, { "char_colon", - NULL, + "char", "letter ':'" }, { "char_semicolon", - NULL, + "char", "letter ';'" }, { "char_less", - NULL, + "char", "letter '<'" }, { "char_equal", - NULL, + "char", "letter '='" }, { "char_greater", - NULL, + "char", "letter '>'" }, { "char_question", - NULL, + "char", "letter '?'" }, { "char_at", - NULL, + "char", "letter '@'" }, { "char_a", - NULL, + "char", "letter 'A'" }, { "char_b", - NULL, + "char", "letter 'B'" }, { "char_c", - NULL, + "char", "letter 'C'" }, { "char_d", - NULL, + "char", "letter 'D'" }, { "char_e", - NULL, + "char", "letter 'E'" }, { "char_f", - NULL, + "char", "letter 'F'" }, { "char_g", - NULL, + "char", "letter 'G'" }, { "char_h", - NULL, + "char", "letter 'H'" }, { "char_i", - NULL, + "char", "letter 'I'" }, { "char_j", - NULL, + "char", "letter 'J'" }, { "char_k", - NULL, + "char", "letter 'K'" }, { "char_l", - NULL, + "char", "letter 'L'" }, { "char_m", - NULL, + "char", "letter 'M'" }, { "char_n", - NULL, + "char", "letter 'N'" }, { "char_o", - NULL, + "char", "letter 'O'" }, { "char_p", - NULL, + "char", "letter 'P'" }, { "char_q", - NULL, + "char", "letter 'Q'" }, { "char_r", - NULL, + "char", "letter 'R'" }, { "char_s", - NULL, + "char", "letter 'S'" }, { "char_t", - NULL, + "char", "letter 'T'" }, { "char_u", - NULL, + "char", "letter 'U'" }, { "char_v", - NULL, + "char", "letter 'V'" }, { "char_w", - NULL, + "char", "letter 'W'" }, { "char_x", - NULL, + "char", "letter 'X'" }, { "char_y", - NULL, + "char", "letter 'Y'" }, { "char_z", - NULL, + "char", "letter 'Z'" }, { - "char_ae", - NULL, - "letter 'Ä'" + "char_bracketleft", + "char", + "letter '['" }, { - "char_oe", - NULL, - "letter 'Ö'" + "char_backslash", + "char", + "letter '\\'" }, { - "char_ue", - NULL, - "letter 'Ü'" + "char_bracketright", + "char", + "letter ']'" }, { - "char_copyright", - NULL, + "char_asciicircum", + "char", "letter '^'" }, { "char_underscore", - NULL, - "letter ''" + "char", + "letter '_'" }, { - "char_empty", - NULL, - "letter ''" + "char_copyright", + "char", + "letter '©'" }, { - "char_degree", - NULL, - "letter ''" + "char_aumlaut", + "char", + "letter 'Ä'" }, { - "char_tm", - NULL, - "letter ''" + "char_oumlaut", + "char", + "letter 'Ö'" }, { - "char_cursor", - NULL, - "letter ''" + "char_uumlaut", + "char", + "letter 'Ü'" }, { - NULL, - NULL, - "letter ''" + "char_degree", + "char", + "letter '°'" }, { - NULL, - NULL, - "letter ''" + "char_trademark", + "char", + "letter '®'" }, { - NULL, - NULL, - "letter ''" + "char_cursor", + "char", + "letter ' '" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "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)" }, @@ -1175,7 +1184,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "chip (single)" }, { - "sp_hard_gray", + "sp_hardware_gray", "wall", "hardware" }, @@ -1190,42 +1199,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)" }, @@ -1246,23 +1255,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", @@ -1285,93 +1294,93 @@ 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)" }, { "unused_254", - NULL, + "unused", "(not used)" }, { "unused_255", - NULL, + "unused", "(not used)" }, { @@ -1441,131 +1450,131 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "unused_269", - NULL, + "unused", "-" }, { "unused_270", - NULL, + "unused", "-" }, { - "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)" }, @@ -1681,22 +1690,22 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "dx_unknown_15", - NULL, + "unknown", "dx unknown element 15" }, { "dx_unknown_42", - NULL, + "unknown", "dx unknown element 42" }, { "unused_319", - NULL, + "unused", "(not used)" }, { "unused_320", - NULL, + "unused", "(not used)" }, { @@ -1730,94 +1739,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", @@ -1881,17 +1890,17 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "dx_supabomb", - "dx_bomb", + "bomb", "stable bomb (DX style)" }, { "unused_358", - NULL, + "unused", "-" }, { "unused_359", - NULL, + "unused", "-" }, { @@ -2535,48 +2544,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", @@ -2623,62 +2639,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", "-" }, @@ -2713,7 +2729,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "-" }, { - "amoeba_dripping", + "amoeba_dropping", "amoeba", "-" }, @@ -2763,10 +2779,192 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = "-" }, + /* ----------------------------------------------------------------------- */ + /* "unreal" (and therefore not drawable) runtime elements */ + /* ----------------------------------------------------------------------- */ + { - "", - NULL, + "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 } }; @@ -2775,7 +2973,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 }, @@ -2784,32 +2982,122 @@ 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 }, + { ".walking", ACTION_WALKING, 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" }, }; @@ -2819,9 +3107,14 @@ 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(); + InitPlatformDependentStuff(); GetOptions(argv); OpenAll();