#include "events.h"
#include "config.h"
-#if 0
-GC tile_clip_gc;
-Bitmap *pix[NUM_BITMAPS];
-#endif
Bitmap *bitmap_db_field, *bitmap_db_door;
-#if 0
-Pixmap tile_clipmask[NUM_TILES];
-#endif
DrawBuffer *fieldbuffer;
DrawBuffer *drawto_field;
boolean level_editor_test_game = FALSE;
boolean network_playing = FALSE;
+#if defined(TARGET_SDL)
+boolean network_server = FALSE;
+SDL_Thread *server_thread;
+#endif
+
int key_joystick_mapping = 0;
boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short ChangeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short ChangePage[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short CustomValue[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];
-unsigned long Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-unsigned long ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short ChangeCount[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short WasJustMoving[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short WasJustFalling[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short CheckCollision[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short AmoebaCnt[MAX_NUM_AMOEBA];
short AmoebaCnt2[MAX_NUM_AMOEBA];
-short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short ExplodeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+int RunnerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+int PlayerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+#if 0
unsigned long Properties[MAX_NUM_ELEMENTS][NUM_EP_BITFIELDS];
+#endif
int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
int FX = SX, FY = SY;
int ScrollStepSize;
-int ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0;
+int ScreenMovDir = MV_NONE, ScreenMovPos = 0;
int ScreenGfxPos = 0;
int BorderElement = EL_STEELWALL;
int GameFrameDelay = GAME_FRAME_DELAY;
int ExitX, ExitY;
int AllPlayersGone;
-int TimeFrames, TimePlayed, TimeLeft;
+int TimeFrames, TimePlayed, TimeLeft, TapeTime;
boolean network_player_action_received = FALSE;
struct SoundInfo *sound_info = NULL;
struct MusicInfo *music_info = NULL;
struct MusicFileInfo *music_file_info = NULL;
-struct DemoAnimInfo *demo_anim_info = NULL;
-SetupFileHash *demo_anim_text = NULL;
+struct HelpAnimInfo *helpanim_info = NULL;
+SetupFileHash *helptext_info = NULL;
/* ------------------------------------------------------------------------- */
/* element definitions */
/* ------------------------------------------------------------------------- */
-struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] =
+struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1];
+
+/* this contains predefined structure elements to initialize "element_info" */
+struct ElementNameInfo element_name_info[MAX_NUM_ELEMENTS + 1] =
{
/* keyword to start parser: "ELEMENT_INFO_START" <-- do not change! */
{
"key_1",
"key",
- "red key"
+ "key 1"
},
{
"key_2",
"key",
- "yellow key"
+ "key 2"
},
{
"key_3",
"key",
- "green key"
+ "key 3"
},
{
"key_4",
"key",
- "blue key"
+ "key 4"
},
{
"gate_1",
"gate",
- "red door"
+ "door 1"
},
{
"gate_2",
"gate",
- "yellow door"
+ "door 2"
},
{
"gate_3",
"gate",
- "green door"
+ "door 3"
},
{
"gate_4",
"gate",
- "blue door"
+ "door 4"
},
{
"gate_1_gray",
"gate",
- "gray door (opened by red key)"
+ "gray door (opened by key 1)"
},
{
"gate_2_gray",
"gate",
- "gray door (opened by yellow key)"},
+ "gray door (opened by key 2)"
+ },
{
"gate_3_gray",
"gate",
- "gray door (opened by green key)"},
+ "gray door (opened by key 3)"
+ },
{
"gate_4_gray",
"gate",
- "gray door (opened by blue key)"},
+ "gray door (opened by key 4)"
+ },
{
"dynamite",
"dynamite",
"invisible steel wall"
},
{
- "unused_63",
- "unused",
- "(not used)"
+ "sokoban_field_player",
+ "sokoban",
+ "sokoban field with player"
},
{
"dynabomb_increase_number",
{
"player_1",
"player",
- "yellow player"
+ "player 1"
},
{
"player_2",
"player",
- "red player"
+ "player 2"
},
{
"player_3",
"player",
- "green player"
+ "player 3"
},
{
"player_4",
"player",
- "blue player"
+ "player 4"
},
{
"bug.right",
{
"black_orb",
"black_orb",
- "bomb"
+ "black orb bomb"
},
{
"amoeba_to_diamond",
"letter '$'"
},
{
- "char_procent",
+ "char_percent",
"char",
"letter '%'"
},
{
"em_gate_1",
"gate",
- "red door (EM style)"
+ "door 1 (EM style)"
},
{
"em_gate_2",
"gate",
- "yellow door (EM style)"
+ "door 2 (EM style)"
},
{
"em_gate_3",
"gate",
- "green door (EM style)"
+ "door 3 (EM style)"
},
{
"em_gate_4",
"gate",
- "blue door (EM style)"
+ "door 4 (EM style)"
},
{
"em_key_2_file_obsolete",
{
"em_gate_1_gray",
"gate",
- "gray door (EM style, red key)"
+ "gray door (EM style, key 1)"
},
{
"em_gate_2_gray",
"gate",
- "gray door (EM style, yellow key)"
+ "gray door (EM style, key 2)"
},
{
"em_gate_3_gray",
"gate",
- "gray door (EM style, green key)"
+ "gray door (EM style, key 3)"
},
{
"em_gate_4_gray",
"gate",
- "gray door (EM style, blue key)"
+ "gray door (EM style, key 4)"
},
{
"unused_254",
{
"conveyor_belt_1_left",
"conveyor_belt",
- "red conveyor belt (left)"
+ "conveyor belt 1 (left)"
},
{
"conveyor_belt_1_middle",
"conveyor_belt",
- "red conveyor belt (middle)"
+ "conveyor belt 1 (middle)"
},
{
"conveyor_belt_1_right",
"conveyor_belt",
- "red conveyor belt (right)"
+ "conveyor belt 1 (right)"
},
{
"conveyor_belt_1_switch_left",
"conveyor_belt_switch",
- "switch for red conveyor belt (left)"
+ "switch for conveyor belt 1 (left)"
},
{
"conveyor_belt_1_switch_middle",
"conveyor_belt_switch",
- "switch for red conveyor belt (middle)"
+ "switch for conveyor belt 1 (middle)"
},
{
"conveyor_belt_1_switch_right",
"conveyor_belt_switch",
- "switch for red conveyor belt (right)"
+ "switch for conveyor belt 1 (right)"
},
{
"conveyor_belt_2_left",
"conveyor_belt",
- "yellow conveyor belt (left)"
+ "conveyor belt 2 (left)"
},
{
"conveyor_belt_2_middle",
"conveyor_belt",
- "yellow conveyor belt (middle)"
+ "conveyor belt 2 (middle)"
},
{
"conveyor_belt_2_right",
"conveyor_belt",
- "yellow conveyor belt (right)"
+ "conveyor belt 2 (right)"
},
{
"conveyor_belt_2_switch_left",
"conveyor_belt_switch",
- "switch for yellow conveyor belt (left)"
+ "switch for conveyor belt 2 (left)"
},
{
"conveyor_belt_2_switch_middle",
"conveyor_belt_switch",
- "switch for yellow conveyor belt (middle)"
+ "switch for conveyor belt 2 (middle)"
},
{
"conveyor_belt_2_switch_right",
"conveyor_belt_switch",
- "switch for yellow conveyor belt (right)"
+ "switch for conveyor belt 2 (right)"
},
{
"conveyor_belt_3_left",
"conveyor_belt",
- "green conveyor belt (left)"
+ "conveyor belt 3 (left)"
},
{
"conveyor_belt_3_middle",
"conveyor_belt",
- "green conveyor belt (middle)"
+ "conveyor belt 3 (middle)"
},
{
"conveyor_belt_3_right",
"conveyor_belt",
- "green conveyor belt (right)"
+ "conveyor belt 3 (right)"
},
{
"conveyor_belt_3_switch_left",
"conveyor_belt_switch",
- "switch for green conveyor belt (left)"
+ "switch for conveyor belt 3 (left)"
},
{
"conveyor_belt_3_switch_middle",
"conveyor_belt_switch",
- "switch for green conveyor belt (middle)"
+ "switch for conveyor belt 3 (middle)"
},
{
"conveyor_belt_3_switch_right",
"conveyor_belt_switch",
- "switch for green conveyor belt (right)"
+ "switch for conveyor belt 3 (right)"
},
{
"conveyor_belt_4_left",
"conveyor_belt",
- "blue conveyor belt (left)"
+ "conveyor belt 4 (left)"
},
{
"conveyor_belt_4_middle",
"conveyor_belt",
- "blue conveyor belt (middle)"
+ "conveyor belt 4 (middle)"
},
{
"conveyor_belt_4_right",
"conveyor_belt",
- "blue conveyor belt (right)"
+ "conveyor belt 4 (right)"
},
{
"conveyor_belt_4_switch_left",
"conveyor_belt_switch",
- "switch for blue conveyor belt (left)"
+ "switch for conveyor belt 4 (left)"
},
{
"conveyor_belt_4_switch_middle",
"conveyor_belt_switch",
- "switch for blue conveyor belt (middle)"
+ "switch for conveyor belt 4 (middle)"
},
{
"conveyor_belt_4_switch_right",
"conveyor_belt_switch",
- "switch for blue conveyor belt (right)"
+ "switch for conveyor belt 4 (right)"
},
{
"landmine",
{
"balloon_switch_left",
"balloon_switch",
- "send balloon to the left"
+ "wind switch (left)"
},
{
"balloon_switch_right",
"balloon_switch",
- "send balloon to the right"
+ "wind switch (right)"
},
{
"balloon_switch_up",
"balloon_switch",
- "send balloon up"
+ "wind switch (up)"
},
{
"balloon_switch_down",
"balloon_switch",
- "send balloon down"
+ "wind switch (down)"
},
{
"balloon_switch_any",
"balloon_switch",
- "send balloon in any direction"
+ "wind switch (any direction)"
},
{
"emc_steelwall_1",
{
"em_key_1",
"key",
- "red key (EM style)"
+ "key 1 (EM style)"
},
{
"em_key_2",
"key",
- "yellow key (EM style)"
+ "key 2 (EM style)"
},
{
"em_key_3",
"key",
- "green key (EM style)"
+ "key 3 (EM style)"
},
{
"em_key_4",
"key",
- "blue key (EM style)"
+ "key 4 (EM style)"
},
{
"envelope_1",
"envelope",
"mail envelope 4"
},
+ {
+ "group_1",
+ "group",
+ "group element 1"
+ },
+ {
+ "group_2",
+ "group",
+ "group element 2"
+ },
+ {
+ "group_3",
+ "group",
+ "group element 3"
+ },
+ {
+ "group_4",
+ "group",
+ "group element 4"
+ },
+ {
+ "group_5",
+ "group",
+ "group element 5"
+ },
+ {
+ "group_6",
+ "group",
+ "group element 6"
+ },
+ {
+ "group_7",
+ "group",
+ "group element 7"
+ },
+ {
+ "group_8",
+ "group",
+ "group element 8"
+ },
+ {
+ "group_9",
+ "group",
+ "group element 9"
+ },
+ {
+ "group_10",
+ "group",
+ "group element 10"
+ },
+ {
+ "group_11",
+ "group",
+ "group element 11"
+ },
+ {
+ "group_12",
+ "group",
+ "group element 12"
+ },
+ {
+ "group_13",
+ "group",
+ "group element 13"
+ },
+ {
+ "group_14",
+ "group",
+ "group element 14"
+ },
+ {
+ "group_15",
+ "group",
+ "group element 15"
+ },
+ {
+ "group_16",
+ "group",
+ "group element 16"
+ },
+ {
+ "group_17",
+ "group",
+ "group element 17"
+ },
+ {
+ "group_18",
+ "group",
+ "group element 18"
+ },
+ {
+ "group_19",
+ "group",
+ "group element 19"
+ },
+ {
+ "group_20",
+ "group",
+ "group element 20"
+ },
+ {
+ "group_21",
+ "group",
+ "group element 21"
+ },
+ {
+ "group_22",
+ "group",
+ "group element 22"
+ },
+ {
+ "group_23",
+ "group",
+ "group element 23"
+ },
+ {
+ "group_24",
+ "group",
+ "group element 24"
+ },
+ {
+ "group_25",
+ "group",
+ "group element 25"
+ },
+ {
+ "group_26",
+ "group",
+ "group element 26"
+ },
+ {
+ "group_27",
+ "group",
+ "group element 27"
+ },
+ {
+ "group_28",
+ "group",
+ "group element 28"
+ },
+ {
+ "group_29",
+ "group",
+ "group element 29"
+ },
+ {
+ "group_30",
+ "group",
+ "group element 30"
+ },
+ {
+ "group_31",
+ "group",
+ "group element 31"
+ },
+ {
+ "group_32",
+ "group",
+ "group element 32"
+ },
+ {
+ "unknown",
+ "unknown",
+ "unknown element"
+ },
+ {
+ "trigger_element",
+ "trigger",
+ "element triggering change"
+ },
+ {
+ "trigger_player",
+ "trigger",
+ "player triggering change"
+ },
+ {
+ "sp_gravity_on_port_right",
+ "sp_port",
+ "gravity on port (leading right)"
+ },
+ {
+ "sp_gravity_on_port_down",
+ "sp_port",
+ "gravity on port (leading down)"
+ },
+ {
+ "sp_gravity_on_port_left",
+ "sp_port",
+ "gravity on port (leading left)"
+ },
+ {
+ "sp_gravity_on_port_up",
+ "sp_port",
+ "gravity on port (leading up)"
+ },
+ {
+ "sp_gravity_off_port_right",
+ "sp_port",
+ "gravity off port (leading right)"
+ },
+ {
+ "sp_gravity_off_port_down",
+ "sp_port",
+ "gravity off port (leading down)"
+ },
+ {
+ "sp_gravity_off_port_left",
+ "sp_port",
+ "gravity off port (leading left)"
+ },
+ {
+ "sp_gravity_off_port_up",
+ "sp_port",
+ "gravity off port (leading up)"
+ },
+ {
+ "balloon_switch_none",
+ "balloon_switch",
+ "wind switch (off)"
+ },
+ {
+ "emc_gate_5",
+ "gate",
+ "door 5 (EMC style)",
+ },
+ {
+ "emc_gate_6",
+ "gate",
+ "door 6 (EMC style)",
+ },
+ {
+ "emc_gate_7",
+ "gate",
+ "door 7 (EMC style)",
+ },
+ {
+ "emc_gate_8",
+ "gate",
+ "door 8 (EMC style)",
+ },
+ {
+ "emc_gate_5_gray",
+ "gate",
+ "gray door (EMC style, key 5)",
+ },
+ {
+ "emc_gate_6_gray",
+ "gate",
+ "gray door (EMC style, key 6)",
+ },
+ {
+ "emc_gate_7_gray",
+ "gate",
+ "gray door (EMC style, key 7)",
+ },
+ {
+ "emc_gate_8_gray",
+ "gate",
+ "gray door (EMC style, key 8)",
+ },
+ {
+ "emc_key_5",
+ "key",
+ "key 5 (EMC style)",
+ },
+ {
+ "emc_key_6",
+ "key",
+ "key 6 (EMC style)",
+ },
+ {
+ "emc_key_7",
+ "key",
+ "key 7 (EMC style)",
+ },
+ {
+ "emc_key_8",
+ "key",
+ "key 8 (EMC style)",
+ },
+ {
+ "emc_android",
+ "emc_android",
+ "android",
+ },
+ {
+ "emc_grass",
+ "emc_grass",
+ "grass",
+ },
+ {
+ "emc_magic_ball",
+ "emc_magic_ball",
+ "magic ball",
+ },
+ {
+ "emc_magic_ball.active",
+ "emc_magic_ball",
+ "magic ball (activated)",
+ },
+ {
+ "emc_magic_ball_switch",
+ "emc_magic_ball_switch",
+ "magic ball switch (off)",
+ },
+ {
+ "emc_magic_ball_switch.active",
+ "emc_magic_ball_switch",
+ "magic ball switch (on)",
+ },
+ {
+ "emc_spring_bumper",
+ "emc_spring_bumper",
+ "spring bumper",
+ },
+ {
+ "emc_plant",
+ "emc_plant",
+ "plant",
+ },
+ {
+ "emc_lenses",
+ "emc_lenses",
+ "lenses",
+ },
+ {
+ "emc_magnifier",
+ "emc_magnifier",
+ "magnifier",
+ },
+ {
+ "emc_wall_9",
+ "wall",
+ "normal wall"
+ },
+ {
+ "emc_wall_10",
+ "wall",
+ "normal wall"
+ },
+ {
+ "emc_wall_11",
+ "wall",
+ "normal wall"
+ },
+ {
+ "emc_wall_12",
+ "wall",
+ "normal wall"
+ },
+ {
+ "emc_wall_13",
+ "wall",
+ "normal wall"
+ },
+ {
+ "emc_wall_14",
+ "wall",
+ "normal wall"
+ },
+ {
+ "emc_wall_15",
+ "wall",
+ "normal wall"
+ },
+ {
+ "emc_wall_16",
+ "wall",
+ "normal wall"
+ },
+ {
+ "emc_wall_slippery_1",
+ "wall",
+ "slippery wall"
+ },
+ {
+ "emc_wall_slippery_2",
+ "wall",
+ "slippery wall"
+ },
+ {
+ "emc_wall_slippery_3",
+ "wall",
+ "slippery wall"
+ },
+ {
+ "emc_wall_slippery_4",
+ "wall",
+ "slippery wall"
+ },
+ {
+ "emc_fake_grass",
+ "fake_grass",
+ "fake grass"
+ },
+ {
+ "emc_fake_acid",
+ "fake_acid",
+ "fake acid"
+ },
+ {
+ "emc_dripper",
+ "dripper",
+ "dripper"
+ },
+ {
+ "trigger_ce_value",
+ "trigger",
+ "CE value of element triggering change"
+ },
/* ----------------------------------------------------------------------- */
/* "real" (and therefore drawable) runtime elements */
"-"
},
+ {
+ "emc_fake_grass.active",
+ "fake_grass",
+ "-"
+ },
+ {
+ "gate_1_gray.active",
+ "gate",
+ ""
+ },
+ {
+ "gate_2_gray.active",
+ "gate",
+ ""
+ },
+ {
+ "gate_3_gray.active",
+ "gate",
+ ""
+ },
+ {
+ "gate_4_gray.active",
+ "gate",
+ ""
+ },
+ {
+ "em_gate_1_gray.active",
+ "gate",
+ ""
+ },
+ {
+ "em_gate_2_gray.active",
+ "gate",
+ ""
+ },
+ {
+ "em_gate_3_gray.active",
+ "gate",
+ ""
+ },
+ {
+ "em_gate_4_gray.active",
+ "gate",
+ ""
+ },
+ {
+ "emc_gate_5_gray.active",
+ "gate",
+ "",
+ },
+ {
+ "emc_gate_6_gray.active",
+ "gate",
+ "",
+ },
+ {
+ "emc_gate_7_gray.active",
+ "gate",
+ "",
+ },
+ {
+ "emc_gate_8_gray.active",
+ "gate",
+ "",
+ },
+ {
+ "emc_dripper.active",
+ "dripper",
+ "dripper"
+ },
+ {
+ "emc_spring_bumper.active",
+ "emc_spring_bumper",
+ "spring bumper",
+ },
+
/* ----------------------------------------------------------------------- */
/* "unreal" (and therefore not drawable) runtime elements */
/* ----------------------------------------------------------------------- */
"-",
"-"
},
+ {
+ "player_is_exploding_1",
+ "-",
+ "-"
+ },
+ {
+ "player_is_exploding_2",
+ "-",
+ "-"
+ },
+ {
+ "player_is_exploding_3",
+ "-",
+ "-"
+ },
+ {
+ "player_is_exploding_4",
+ "-",
+ "-"
+ },
{
"quicksand.filling",
"quicksand",
"-",
"-"
},
+ {
+ "element.snapping",
+ "-",
+ "-"
+ },
+ {
+ "diagonal.shrinking",
+ "-",
+ "-"
+ },
+ {
+ "diagonal.growing",
+ "-",
+ "-"
+ },
/* ----------------------------------------------------------------------- */
/* dummy elements (never used as game elements, only used as graphics) */
"-"
},
{
- "dummy",
- "dummy",
+ "internal_clipboard_custom",
+ "internal",
+ "empty custom element"
+ },
+ {
+ "internal_clipboard_change",
+ "internal",
+ "empty change page"
+ },
+ {
+ "internal_clipboard_group",
+ "internal",
+ "empty group element"
+ },
+ {
+ "internal_dummy",
+ "internal",
"-"
},
+ {
+ "internal_cascade_bd",
+ "internal",
+ "show Boulder Dash elements"
+ },
+ {
+ "internal_cascade_bd.active",
+ "internal",
+ "hide Boulder Dash elements"
+ },
+ {
+ "internal_cascade_em",
+ "internal",
+ "show Emerald Mine elements"
+ },
+ {
+ "internal_cascade_em.active",
+ "internal",
+ "hide Emerald Mine elements"
+ },
+ {
+ "internal_cascade_emc",
+ "internal",
+ "show Emerald Mine Club elements"
+ },
+ {
+ "internal_cascade_emc.active",
+ "internal",
+ "hide Emerald Mine Club elements"
+ },
+ {
+ "internal_cascade_rnd",
+ "internal",
+ "show Rocks'n'Diamonds elements"
+ },
+ {
+ "internal_cascade_rnd.active",
+ "internal",
+ "hide Rocks'n'Diamonds elements"
+ },
+ {
+ "internal_cascade_sb",
+ "internal",
+ "show Sokoban elements"
+ },
+ {
+ "internal_cascade_sb.active",
+ "internal",
+ "hide Sokoban elements"
+ },
+ {
+ "internal_cascade_sp",
+ "internal",
+ "show Supaplex elements"
+ },
+ {
+ "internal_cascade_sp.active",
+ "internal",
+ "hide Supaplex elements"
+ },
+ {
+ "internal_cascade_dc",
+ "internal",
+ "show Diamond Caves II elements"
+ },
+ {
+ "internal_cascade_dc.active",
+ "internal",
+ "hide Diamond Caves II elements"
+ },
+ {
+ "internal_cascade_dx",
+ "internal",
+ "show DX Boulderdash elements"
+ },
+ {
+ "internal_cascade_dx.active",
+ "internal",
+ "hide DX Boulderdash elements"
+ },
+ {
+ "internal_cascade_chars",
+ "internal",
+ "show text elements"
+ },
+ {
+ "internal_cascade_chars.active",
+ "internal",
+ "hide text elements"
+ },
+ {
+ "internal_cascade_ce",
+ "internal",
+ "show custom elements"
+ },
+ {
+ "internal_cascade_ce.active",
+ "internal",
+ "hide custom elements"
+ },
+ {
+ "internal_cascade_ge",
+ "internal",
+ "show group elements"
+ },
+ {
+ "internal_cascade_ge.active",
+ "internal",
+ "hide group elements"
+ },
+ {
+ "internal_cascade_user",
+ "internal",
+ "show user defined elements"
+ },
+ {
+ "internal_cascade_user.active",
+ "internal",
+ "hide user defined elements"
+ },
+ {
+ "internal_cascade_generic",
+ "internal",
+ "show elements"
+ },
+ {
+ "internal_cascade_generic.active",
+ "internal",
+ "hide elements"
+ },
+ {
+ "internal_cascade_dynamic",
+ "internal",
+ "show elements used in this level"
+ },
+ {
+ "internal_cascade_dynamic.active",
+ "internal",
+ "hide elements used in this level"
+ },
/* keyword to stop parser: "ELEMENT_INFO_END" <-- do not change! */
{ ".turning_from_right", ACTION_TURNING_FROM_RIGHT, FALSE },
{ ".turning_from_up", ACTION_TURNING_FROM_UP, FALSE },
{ ".turning_from_down", ACTION_TURNING_FROM_DOWN, FALSE },
+ { ".smashed_by_rock", ACTION_SMASHED_BY_ROCK, FALSE },
+ { ".smashed_by_spring", ACTION_SMASHED_BY_SPRING, FALSE },
+ { ".slurping", ACTION_SLURPING, FALSE },
+ { ".twinkling", ACTION_TWINKLING, FALSE },
+ { ".splashing", ACTION_SPLASHING, FALSE },
+ { ".page[1]", ACTION_PAGE_1, FALSE },
+ { ".page[2]", ACTION_PAGE_2, FALSE },
+ { ".page[3]", ACTION_PAGE_3, FALSE },
+ { ".page[4]", ACTION_PAGE_4, FALSE },
+ { ".page[5]", ACTION_PAGE_5, FALSE },
+ { ".page[6]", ACTION_PAGE_6, FALSE },
+ { ".page[7]", ACTION_PAGE_7, FALSE },
+ { ".page[8]", ACTION_PAGE_8, FALSE },
+ { ".page[9]", ACTION_PAGE_9, FALSE },
+ { ".page[10]", ACTION_PAGE_10, FALSE },
+ { ".page[11]", ACTION_PAGE_11, FALSE },
+ { ".page[12]", ACTION_PAGE_12, FALSE },
+ { ".page[13]", ACTION_PAGE_13, FALSE },
+ { ".page[14]", ACTION_PAGE_14, FALSE },
+ { ".page[15]", ACTION_PAGE_15, FALSE },
+ { ".page[16]", ACTION_PAGE_16, FALSE },
+ { ".page[17]", ACTION_PAGE_17, FALSE },
+ { ".page[18]", ACTION_PAGE_18, FALSE },
+ { ".page[19]", ACTION_PAGE_19, FALSE },
+ { ".page[20]", ACTION_PAGE_20, FALSE },
+ { ".page[21]", ACTION_PAGE_21, FALSE },
+ { ".page[22]", ACTION_PAGE_22, FALSE },
+ { ".page[23]", ACTION_PAGE_23, FALSE },
+ { ".page[24]", ACTION_PAGE_24, FALSE },
+ { ".page[25]", ACTION_PAGE_25, FALSE },
+ { ".page[26]", ACTION_PAGE_26, FALSE },
+ { ".page[27]", ACTION_PAGE_27, FALSE },
+ { ".page[28]", ACTION_PAGE_28, FALSE },
+ { ".page[29]", ACTION_PAGE_29, FALSE },
+ { ".page[30]", ACTION_PAGE_30, FALSE },
+ { ".page[31]", ACTION_PAGE_31, FALSE },
+ { ".page[32]", ACTION_PAGE_32, FALSE },
{ ".other", ACTION_OTHER, FALSE },
/* empty suffix always matches -- check as last entry in InitSoundInfo() */
{ NULL, 0, 0 }
};
-struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS + 1] =
+struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS_FULL + 1] =
{
{ ".left", MV_BIT_LEFT },
{ ".right", MV_BIT_RIGHT },
{ ".up", MV_BIT_UP },
{ ".down", MV_BIT_DOWN },
+ { ".upleft", MV_BIT_UP },
+ { ".upright", MV_BIT_RIGHT },
+ { ".downleft", MV_BIT_LEFT },
+ { ".downright", MV_BIT_DOWN },
{ NULL, 0 }
};
{
{ "global.num_toons", &global.num_toons },
- { "menu.draw_xoffset", &menu.draw_xoffset_default },
- { "menu.draw_yoffset", &menu.draw_yoffset_default },
+ { "menu.draw_xoffset", &menu.draw_xoffset[GFX_SPECIAL_ARG_DEFAULT]},
+ { "menu.draw_yoffset", &menu.draw_yoffset[GFX_SPECIAL_ARG_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.scrollbar_xoffset", &menu.scrollbar_xoffset },
- { "menu.list_size", &menu.list_size_default },
+ { "menu.list_size", &menu.list_size[GFX_SPECIAL_ARG_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_1.width", &door_1.width },
+ { "door_1.height", &door_1.height },
{ "door_1.step_offset", &door_1.step_offset },
{ "door_1.step_delay", &door_1.step_delay },
{ "door_1.anim_mode", &door_1.anim_mode },
+ { "door_2.width", &door_2.width },
+ { "door_2.height", &door_2.height },
{ "door_2.step_offset", &door_2.step_offset },
{ "door_2.step_delay", &door_2.step_delay },
{ "door_2.anim_mode", &door_2.anim_mode },
" --serveronly only start network server\n"
" -v, --verbose verbose mode\n"
" --debug display debugging information\n"
- " -e, --execute COMMAND execute batch COMMAND:\n"
+ " -e, --execute COMMAND execute batch COMMAND\n"
"\n"
"Valid commands for '--execute' option:\n"
" \"print graphicsinfo.conf\" print default graphics config\n"
" \"print soundsinfo.conf\" print default sounds config\n"
" \"print musicinfo.conf\" print default music config\n"
" \"print editorsetup.conf\" print default editor config\n"
+ " \"print helpanim.conf\" print default helpanim config\n"
+ " \"print helptext.conf\" print default helptext config\n"
" \"dump level FILE\" dump level data from FILE\n"
" \"dump tape FILE\" dump tape data from FILE\n"
- " \"autoplay LEVELDIR\" play level tapes for LEVELDIR\n"
+ " \"autoplay LEVELDIR [NR ...]\" play level tapes for LEVELDIR\n"
+ " \"convert LEVELDIR [NR]\" convert levels in LEVELDIR\n"
"\n",
program.command_basename);
}