Public scripts: is_sokoban | countels | rndscripter | levelsketch
const
//***ZZZ*** Defined in program MAX_PLAYERS = 4;
{$DEFINE rndscr1}
(* values for move directions *)
MV_BIT_LEFT = 0;
MV_BIT_RIGHT = 1;
MV_BIT_UP = 2;
MV_BIT_DOWN = 3;
NUM_DIRECTIONS = 4;
(* diagonal movement directions are used in a different contect than buttons *)
MV_BIT_UPLEFT = 4;
MV_BIT_UPRIGHT = 5;
MV_BIT_DOWNLEFT = 6;
MV_BIT_DOWNRIGHT = 7;
NUM_DIRECTIONS_FULL = 8;
(* values for special "button" bitmasks *)
BUTTON_1 = 4;
BUTTON_2 = 5;
(* values for special "focus player" bitmasks *)
BIT_SET_FOCUS = 6;
(* values for move directions and special "button" key bitmasks *)
MV_NONE = 0;
MV_LEFT = (1 shl MV_BIT_LEFT);
MV_RIGHT = (1 shl MV_BIT_RIGHT);
MV_UP = (1 shl MV_BIT_UP);
MV_DOWN = (1 shl MV_BIT_DOWN);
MV_UPLEFT = (MV_UP or MV_LEFT);
MV_UPRIGHT = (MV_UP or MV_RIGHT);
MV_DOWNLEFT = (MV_DOWN or MV_LEFT);
MV_DOWNRIGHT = (MV_DOWN or MV_RIGHT);
MV_HORIZONTAL = (MV_LEFT or MV_RIGHT);
MV_VERTICAL = (MV_UP or MV_DOWN);
MV_ALL_DIRECTIONS = (MV_LEFT or MV_RIGHT or MV_UP or MV_DOWN);
MV_ANY_DIRECTION = (MV_ALL_DIRECTIONS);
MV_NO_DIRECTION = (MV_NONE);
const
IMG_SP_EMPTY_SPACE = 0;
MAX_INVENTORY_SIZE = 1000;
STD_NUM_KEYS = 4;
MAX_NUM_KEYS = 8;
//***ZZZ*** Defined in program MAX_PLAYFIELD_WIDTH = 128;
//***ZZZ*** Defined in program MAX_PLAYFIELD_HEIGHT = 128;
ONE_SECOND_DELAY = 1000;
GAME_FRAME_DELAY = 20;
FFWD_FRAME_DELAY = 10;
FRAMES_PER_SECOND = 50;
IMG_UNDEFINED = (-1);
SND_UNDEFINED = (-1);
MUS_UNDEFINED = (-1);
WIN_XSIZE = 672;
WIN_YSIZE = 560;
SCR_FIELDX = 17;
SCR_FIELDY = 17;
MAX_BUF_XSIZE = (SCR_FIELDX+2);
MAX_BUF_YSIZE = (SCR_FIELDY+2);
MIN_LEV_FIELDX = 3;
MIN_LEV_FIELDY = 3;
STD_LEV_FIELDX = 64;
STD_LEV_FIELDY = 32;
//***ZZZ*** Defined in program MAX_LEV_FIELDX = MAX_PLAYFIELD_WIDTH;
//***ZZZ*** Defined in program MAX_LEV_FIELDY = MAX_PLAYFIELD_HEIGHT;
const
EP_DIGGABLE = 0;
EP_COLLECTIBLE_ONLY = 1;
EP_DONT_RUN_INTO = 2;
EP_DONT_COLLIDE_WITH = 3;
EP_DONT_TOUCH = 4;
EP_INDESTRUCTIBLE = 5;
EP_SLIPPERY = 6;
EP_CAN_CHANGE = 7;
EP_CAN_MOVE = 8;
EP_CAN_FALL = 9;
EP_CAN_SMASH_PLAYER = 10;
EP_CAN_SMASH_ENEMIES = 11;
EP_CAN_SMASH_EVERYTHING = 12;
EP_EXPLODES_BY_FIRE = 13;
EP_EXPLODES_SMASHED = 14;
EP_EXPLODES_IMPACT = 15;
EP_WALKABLE_OVER = 16;
EP_WALKABLE_INSIDE = 17;
EP_WALKABLE_UNDER = 18;
EP_PASSABLE_OVER = 19;
EP_PASSABLE_INSIDE = 20;
EP_PASSABLE_UNDER = 21;
EP_DROPPABLE = 22;
EP_EXPLODES_1X1_OLD = 23;
EP_PUSHABLE = 24;
EP_EXPLODES_CROSS_OLD = 25;
EP_PROTECTED = 26;
EP_CAN_MOVE_INTO_ACID = 27;
EP_THROWABLE = 28;
EP_CAN_EXPLODE = 29;
EP_GRAVITY_REACHABLE = 30;
(* values for pre-defined properties *)
EP_PLAYER = 32;
EP_CAN_PASS_MAGIC_WALL = 33;
EP_SWITCHABLE = 34;
EP_BD_ELEMENT = 35;
EP_SP_ELEMENT = 36;
EP_SB_ELEMENT = 37;
EP_GEM = 38;
EP_FOOD_DARK_YAMYAM = 39;
EP_FOOD_PENGUIN = 40;
EP_FOOD_PIG = 41;
EP_HISTORIC_WALL = 42;
EP_HISTORIC_SOLID = 43;
EP_CLASSIC_ENEMY = 44;
EP_BELT = 45;
EP_BELT_ACTIVE = 46;
EP_BELT_SWITCH = 47;
EP_TUBE = 48;
EP_KEYGATE = 49;
EP_AMOEBOID = 50;
EP_AMOEBALIVE = 51;
EP_HAS_EDITOR_CONTENT = 52;
EP_CAN_TURN_EACH_MOVE = 53;
EP_CAN_GROW = 54;
EP_ACTIVE_BOMB = 55;
EP_INACTIVE = 56;
(* values for special configurable properties (depending on level settings) *)
EP_EM_SLIPPERY_WALL = 57;
(* values for special graphics properties (no effect on game engine) *)
EP_GFX_CRUMBLED = 58;
(* values for derived properties (determined from properties above) *)
EP_ACCESSIBLE_OVER = 59;
EP_ACCESSIBLE_INSIDE = 60;
EP_ACCESSIBLE_UNDER = 61;
EP_WALKABLE = 62;
EP_PASSABLE = 63;
EP_ACCESSIBLE = 64;
EP_COLLECTIBLE = 65;
EP_SNAPPABLE = 66;
EP_WALL = 67;
EP_SOLID_FOR_PUSHING = 68;
EP_DRAGONFIRE_PROOF = 69;
EP_EXPLOSION_PROOF = 70;
EP_CAN_SMASH = 71;
EP_EXPLODES_3X3_OLD = 72;
EP_CAN_EXPLODE_BY_FIRE = 73;
EP_CAN_EXPLODE_SMASHED = 74;
EP_CAN_EXPLODE_IMPACT = 75;
EP_SP_PORT = 76;
EP_CAN_EXPLODE_BY_DRAGONFIRE = 77;
EP_CAN_EXPLODE_BY_EXPLOSION = 78;
EP_COULD_MOVE_INTO_ACID = 79;
EP_MAYBE_DONT_COLLIDE_WITH = 80;
EP_CAN_BE_CLONED_BY_ANDROID = 81;
(* values for internal purpose only (level editor) *)
EP_WALK_TO_OBJECT = 82;
EP_DEADLY = 83;
EP_EDITOR_CASCADE = 84;
EP_EDITOR_CASCADE_ACTIVE = 85;
EP_EDITOR_CASCADE_INACTIVE = 86;
(* values for internal purpose only (game engine) *)
EP_HAS_ACTION = 87;
EP_CAN_CHANGE_OR_HAS_ACTION = 88;
(* values for internal purpose only (other) *)
EP_OBSOLETE = 89;
//***ZZZ*** Defined in program NUM_ELEMENT_PROPERTIES = 90;
//***ZZZ*** Defined in program NUM_EP_BITFIELDS = ((NUM_ELEMENT_PROPERTIES+31) div 32);
EP_BITFIELD_BASE_NR = 0;
EP_BITMASK_BASE_DEFAULT = (1 shl EP_CAN_MOVE_INTO_ACID);
EP_BITMASK_DEFAULT = 0;
const
CE_DELAY = 0;
CE_TOUCHED_BY_PLAYER = 1;
CE_PRESSED_BY_PLAYER = 2;
CE_PUSHED_BY_PLAYER = 3;
CE_DROPPED_BY_PLAYER = 4;
CE_HITTING_SOMETHING = 5;
CE_IMPACT = 6;
CE_SMASHED = 7;
CE_TOUCHING_X = 8;
CE_CHANGE_OF_X = 9;
CE_EXPLOSION_OF_X = 10;
CE_PLAYER_TOUCHES_X = 11;
CE_PLAYER_PRESSES_X = 12;
CE_PLAYER_PUSHES_X = 13;
CE_PLAYER_COLLECTS_X = 14;
CE_PLAYER_DROPS_X = 15;
CE_VALUE_GETS_ZERO = 16;
CE_VALUE_GETS_ZERO_OF_X = 17;
CE_BY_OTHER_ACTION = 18;
CE_BY_DIRECT_ACTION = 19;
CE_PLAYER_DIGS_X = 20;
CE_ENTERED_BY_PLAYER = 21;
CE_LEFT_BY_PLAYER = 22;
CE_PLAYER_ENTERS_X = 23;
CE_PLAYER_LEAVES_X = 24;
CE_SWITCHED = 25;
CE_SWITCH_OF_X = 26;
CE_HIT_BY_SOMETHING = 27;
CE_HITTING_X = 28;
CE_HIT_BY_X = 29;
CE_BLOCKED = 30;
CE_SWITCHED_BY_PLAYER = 31;
CE_PLAYER_SWITCHES_X = 32;
CE_SNAPPED_BY_PLAYER = 33;
CE_PLAYER_SNAPS_X = 34;
CE_MOVE_OF_X = 35;
CE_DIGGING_X = 36;
CE_CREATION_OF_X = 37;
CE_SCORE_GETS_ZERO = 38;
CE_SCORE_GETS_ZERO_OF_X = 39;
CE_VALUE_CHANGES = 40;
CE_VALUE_CHANGES_OF_X = 41;
CE_SCORE_CHANGES = 42;
CE_SCORE_CHANGES_OF_X = 43;
//***ZZZ*** Defined in program NUM_CHANGE_EVENTS = 44;
NUM_CE_BITFIELDS = ((NUM_CHANGE_EVENTS+31) div 32);
CE_BITMASK_DEFAULT = 0;
const
PLAYER_BITS_NONE = 0;
PLAYER_BITS_1 = (1 shl 0);
PLAYER_BITS_2 = (1 shl 1);
PLAYER_BITS_3 = (1 shl 2);
PLAYER_BITS_4 = (1 shl 3);
PLAYER_BITS_ANY = (PLAYER_BITS_1 or PLAYER_BITS_2 or PLAYER_BITS_3 or PLAYER_BITS_4);
PLAYER_BITS_TRIGGER = (1 shl 4);
(* values for move directions (bits 0 - 3: basic move directions) *)
MV_BIT_PREVIOUS = 4;
MV_BIT_TRIGGER = 5;
MV_BIT_TRIGGER_BACK = 6;
MV_BIT_NORMAL = MV_BIT_TRIGGER;
MV_BIT_REVERSE = MV_BIT_TRIGGER_BACK;
MV_PREVIOUS = (1 shl MV_BIT_PREVIOUS);
MV_TRIGGER = (1 shl MV_BIT_TRIGGER);
MV_TRIGGER_BACK = (1 shl MV_BIT_TRIGGER_BACK);
MV_NORMAL = (1 shl MV_BIT_NORMAL);
MV_REVERSE = (1 shl MV_BIT_REVERSE);
(* values for move stepsize *)
STEPSIZE_NOT_MOVING = 0;
STEPSIZE_VERY_SLOW = 1;
STEPSIZE_SLOW = 2;
STEPSIZE_NORMAL = 4;
STEPSIZE_FAST = 8;
STEPSIZE_VERY_FAST = 16;
STEPSIZE_EVEN_FASTER = 32;
STEPSIZE_SLOWER = 50; (* (symbolic value only) *)
STEPSIZE_FASTER = 200; (* (symbolic value only) *)
STEPSIZE_RESET = 100; (* (symbolic value only) *)
(* values for change side for custom elements *)
CH_SIDE_NONE = MV_NONE;
CH_SIDE_LEFT = MV_LEFT;
CH_SIDE_RIGHT = MV_RIGHT;
CH_SIDE_TOP = MV_UP;
CH_SIDE_BOTTOM = MV_DOWN;
const
CH_SIDE_LEFT_RIGHT = MV_HORIZONTAL;
CH_SIDE_TOP_BOTTOM = MV_VERTICAL;
CH_SIDE_ANY = MV_ANY_DIRECTION;
(* values for change player for custom elements *)
CH_PLAYER_NONE = PLAYER_BITS_NONE;
CH_PLAYER_1 = PLAYER_BITS_1;
CH_PLAYER_2 = PLAYER_BITS_2;
CH_PLAYER_3 = PLAYER_BITS_3;
CH_PLAYER_4 = PLAYER_BITS_4;
CH_PLAYER_ANY = PLAYER_BITS_ANY;
(* values for change page for custom elements *)
CH_PAGE_ANY_FILE = ($ff);
CH_PAGE_ANY = ($ffffffff);
(* values for change power for custom elements *)
CP_WHEN_EMPTY = 0;
CP_WHEN_DIGGABLE = 1;
CP_WHEN_DESTRUCTIBLE = 2;
CP_WHEN_COLLECTIBLE = 3;
CP_WHEN_REMOVABLE = 4;
CP_WHEN_WALKABLE = 5;
(* values for change actions for custom elements *)
CA_NO_ACTION = 0;
CA_EXIT_PLAYER = 1;
CA_KILL_PLAYER = 2;
CA_MOVE_PLAYER = 3;
CA_RESTART_LEVEL = 4;
CA_SHOW_ENVELOPE = 5;
CA_SET_LEVEL_TIME = 6;
CA_SET_LEVEL_GEMS = 7;
CA_SET_LEVEL_SCORE = 8;
CA_SET_LEVEL_WIND = 9;
CA_SET_PLAYER_GRAVITY = 10;
CA_SET_PLAYER_KEYS = 11;
CA_SET_PLAYER_SPEED = 12;
CA_SET_PLAYER_SHIELD = 13;
CA_SET_PLAYER_ARTWORK = 14;
CA_SET_CE_SCORE = 15;
CA_SET_CE_VALUE = 16;
CA_SET_ENGINE_SCAN_MODE = 17;
CA_HEADLINE_LEVEL_ACTIONS = 250;
CA_HEADLINE_PLAYER_ACTIONS = 251;
CA_HEADLINE_CE_ACTIONS = 252;
CA_HEADLINE_ENGINE_ACTIONS = 253;
CA_UNDEFINED = 255;
(* values for change action mode for custom elements *)
CA_MODE_UNDEFINED = 0;
CA_MODE_SET = 1;
CA_MODE_ADD = 2;
CA_MODE_SUBTRACT = 3;
CA_MODE_MULTIPLY = 4;
CA_MODE_DIVIDE = 5;
CA_MODE_MODULO = 6;
(* values for change action parameters for custom elements *)
CA_ARG_MIN = 0;
CA_ARG_0 = 0;
CA_ARG_1 = 1;
CA_ARG_2 = 2;
CA_ARG_3 = 3;
CA_ARG_4 = 4;
CA_ARG_5 = 5;
CA_ARG_6 = 6;
CA_ARG_7 = 7;
CA_ARG_8 = 8;
CA_ARG_9 = 9;
CA_ARG_10 = 10;
CA_ARG_100 = 100;
CA_ARG_1000 = 1000;
CA_ARG_MAX = 9999;
CA_ARG_PLAYER = 10000;
CA_ARG_PLAYER_1 = (CA_ARG_PLAYER+PLAYER_BITS_1);
CA_ARG_PLAYER_2 = (CA_ARG_PLAYER+PLAYER_BITS_2);
CA_ARG_PLAYER_3 = (CA_ARG_PLAYER+PLAYER_BITS_3);
CA_ARG_PLAYER_4 = (CA_ARG_PLAYER+PLAYER_BITS_4);
CA_ARG_PLAYER_ANY = (CA_ARG_PLAYER+PLAYER_BITS_ANY);
CA_ARG_PLAYER_TRIGGER = (CA_ARG_PLAYER+PLAYER_BITS_TRIGGER);
CA_ARG_PLAYER_HEADLINE = (CA_ARG_PLAYER+999);
CA_ARG_NUMBER = 11000;
CA_ARG_NUMBER_MIN = (CA_ARG_NUMBER+0);
CA_ARG_NUMBER_MAX = (CA_ARG_NUMBER+1);
CA_ARG_NUMBER_RESET = (CA_ARG_NUMBER+2);
CA_ARG_NUMBER_CE_SCORE = (CA_ARG_NUMBER+3);
CA_ARG_NUMBER_CE_VALUE = (CA_ARG_NUMBER+4);
CA_ARG_NUMBER_CE_DELAY = (CA_ARG_NUMBER+5);
CA_ARG_NUMBER_LEVEL_TIME = (CA_ARG_NUMBER+6);
CA_ARG_NUMBER_LEVEL_GEMS = (CA_ARG_NUMBER+7);
CA_ARG_NUMBER_LEVEL_SCORE = (CA_ARG_NUMBER+8);
CA_ARG_NUMBER_HEADLINE = (CA_ARG_NUMBER+999);
CA_ARG_ELEMENT = 12000;
CA_ARG_ELEMENT_RESET = (CA_ARG_ELEMENT+0);
CA_ARG_ELEMENT_TARGET = (CA_ARG_ELEMENT+1);
CA_ARG_ELEMENT_TRIGGER = (CA_ARG_ELEMENT+2);
CA_ARG_ELEMENT_HEADLINE = (CA_ARG_ELEMENT+997);
CA_ARG_ELEMENT_CV_TARGET = (CA_ARG_ELEMENT_TARGET);
CA_ARG_ELEMENT_CV_TRIGGER = (CA_ARG_ELEMENT_TRIGGER);
CA_ARG_ELEMENT_CV_HEADLINE = (CA_ARG_ELEMENT_HEADLINE);
CA_ARG_ELEMENT_NR_TARGET = (CA_ARG_ELEMENT+3);
CA_ARG_ELEMENT_NR_TRIGGER = (CA_ARG_ELEMENT+4);
CA_ARG_ELEMENT_NR_HEADLINE = (CA_ARG_ELEMENT+998);
CA_ARG_ELEMENT_CS_TARGET = (CA_ARG_ELEMENT+5);
CA_ARG_ELEMENT_CS_TRIGGER = (CA_ARG_ELEMENT+6);
CA_ARG_ELEMENT_CS_HEADLINE = (CA_ARG_ELEMENT+999);
CA_ARG_SPEED = 13000;
CA_ARG_SPEED_NOT_MOVING = (CA_ARG_SPEED+STEPSIZE_NOT_MOVING);
CA_ARG_SPEED_VERY_SLOW = (CA_ARG_SPEED+STEPSIZE_VERY_SLOW);
CA_ARG_SPEED_SLOW = (CA_ARG_SPEED+STEPSIZE_SLOW);
CA_ARG_SPEED_NORMAL = (CA_ARG_SPEED+STEPSIZE_NORMAL);
CA_ARG_SPEED_FAST = (CA_ARG_SPEED+STEPSIZE_FAST);
CA_ARG_SPEED_VERY_FAST = (CA_ARG_SPEED+STEPSIZE_VERY_FAST);
CA_ARG_SPEED_EVEN_FASTER = (CA_ARG_SPEED+STEPSIZE_EVEN_FASTER);
CA_ARG_SPEED_SLOWER = (CA_ARG_SPEED+STEPSIZE_SLOWER);
CA_ARG_SPEED_FASTER = (CA_ARG_SPEED+STEPSIZE_FASTER);
CA_ARG_SPEED_RESET = (CA_ARG_SPEED+STEPSIZE_RESET);
CA_ARG_SPEED_HEADLINE = (CA_ARG_SPEED+999);
CA_ARG_GRAVITY = 14000;
CA_ARG_GRAVITY_OFF = (CA_ARG_GRAVITY+0);
CA_ARG_GRAVITY_ON = (CA_ARG_GRAVITY+1);
CA_ARG_GRAVITY_TOGGLE = (CA_ARG_GRAVITY+2);
CA_ARG_GRAVITY_HEADLINE = (CA_ARG_GRAVITY+999);
CA_ARG_DIRECTION = 15000;
CA_ARG_DIRECTION_NONE = (CA_ARG_DIRECTION+MV_NONE);
CA_ARG_DIRECTION_LEFT = (CA_ARG_DIRECTION+MV_LEFT);
CA_ARG_DIRECTION_RIGHT = (CA_ARG_DIRECTION+MV_RIGHT);
CA_ARG_DIRECTION_UP = (CA_ARG_DIRECTION+MV_UP);
CA_ARG_DIRECTION_DOWN = (CA_ARG_DIRECTION+MV_DOWN);
CA_ARG_DIRECTION_TRIGGER = (CA_ARG_DIRECTION+MV_TRIGGER);
CA_ARG_DIRECTION_TRIGGER_BACK = (CA_ARG_DIRECTION+MV_TRIGGER_BACK);
CA_ARG_DIRECTION_HEADLINE = (CA_ARG_DIRECTION+999);
CA_ARG_SHIELD = 16000;
CA_ARG_SHIELD_OFF = (CA_ARG_SHIELD+0);
CA_ARG_SHIELD_NORMAL = (CA_ARG_SHIELD+1);
CA_ARG_SHIELD_DEADLY = (CA_ARG_SHIELD+2);
CA_ARG_SHIELD_HEADLINE = (CA_ARG_SHIELD+999);
CA_ARG_SCAN_MODE = 17000;
CA_ARG_SCAN_MODE_NORMAL = (CA_ARG_SCAN_MODE+MV_NORMAL);
CA_ARG_SCAN_MODE_REVERSE = (CA_ARG_SCAN_MODE+MV_REVERSE);
CA_ARG_SCAN_MODE_HEADLINE = (CA_ARG_SCAN_MODE+999);
CA_ARG_UNDEFINED = 65535;
(* values for custom move patterns (bits 0 - 3: basic move directions) *)
MV_BIT_TOWARDS_PLAYER = 4;
MV_BIT_AWAY_FROM_PLAYER = 5;
MV_BIT_ALONG_LEFT_SIDE = 6;
MV_BIT_ALONG_RIGHT_SIDE = 7;
MV_BIT_TURNING_LEFT = 8;
MV_BIT_TURNING_RIGHT = 9;
MV_BIT_WHEN_PUSHED = 10;
MV_BIT_MAZE_RUNNER = 11;
MV_BIT_MAZE_HUNTER = 12;
MV_BIT_WHEN_DROPPED = 13;
MV_BIT_TURNING_LEFT_RIGHT = 14;
MV_BIT_TURNING_RIGHT_LEFT = 15;
MV_BIT_TURNING_RANDOM = 16;
MV_BIT_WIND_DIRECTION = 17;
(* values for custom move patterns *)
MV_TOWARDS_PLAYER = (1 shl MV_BIT_TOWARDS_PLAYER);
MV_AWAY_FROM_PLAYER = (1 shl MV_BIT_AWAY_FROM_PLAYER);
MV_ALONG_LEFT_SIDE = (1 shl MV_BIT_ALONG_LEFT_SIDE);
MV_ALONG_RIGHT_SIDE = (1 shl MV_BIT_ALONG_RIGHT_SIDE);
MV_TURNING_LEFT = (1 shl MV_BIT_TURNING_LEFT);
MV_TURNING_RIGHT = (1 shl MV_BIT_TURNING_RIGHT);
MV_WHEN_PUSHED = (1 shl MV_BIT_WHEN_PUSHED);
MV_MAZE_RUNNER = (1 shl MV_BIT_MAZE_RUNNER);
MV_MAZE_HUNTER = (1 shl MV_BIT_MAZE_HUNTER);
MV_MAZE_RUNNER_STYLE = (MV_MAZE_RUNNER or MV_MAZE_HUNTER);
MV_WHEN_DROPPED = (1 shl MV_BIT_WHEN_DROPPED);
MV_TURNING_LEFT_RIGHT = (1 shl MV_BIT_TURNING_LEFT_RIGHT);
MV_TURNING_RIGHT_LEFT = (1 shl MV_BIT_TURNING_RIGHT_LEFT);
MV_TURNING_RANDOM = (1 shl MV_BIT_TURNING_RANDOM);
MV_WIND_DIRECTION = (1 shl MV_BIT_WIND_DIRECTION);
(* values for initial move direction *)
MV_START_NONE = (MV_NONE);
MV_START_AUTOMATIC = (MV_NONE);
MV_START_LEFT = (MV_LEFT);
MV_START_RIGHT = (MV_RIGHT);
MV_START_UP = (MV_UP);
MV_START_DOWN = (MV_DOWN);
MV_START_RANDOM = (MV_ALL_DIRECTIONS);
MV_START_PREVIOUS = (MV_PREVIOUS);
(* values for elements left behind by custom elements *)
LEAVE_TYPE_UNLIMITED = 0;
LEAVE_TYPE_LIMITED = 1;
(* values for slippery property for custom elements *)
SLIPPERY_ANY_RANDOM = 0;
SLIPPERY_ANY_LEFT_RIGHT = 1;
SLIPPERY_ANY_RIGHT_LEFT = 2;
SLIPPERY_ONLY_LEFT = 3;
SLIPPERY_ONLY_RIGHT = 4;
(* values for explosion type for custom elements *)
EXPLODES_3X3 = 0;
EXPLODES_1X1 = 1;
EXPLODES_CROSS = 2;
(* fundamental game speed values *)
const
MICROLEVEL_SCROLL_DELAY = 50; (* delay for scrolling micro level *)
MICROLEVEL_LABEL_DELAY = 250; (* delay for micro level label *)
(* boundaries of arrays etc. *)
//***ZZZ*** Defined in program MAX_LEVEL_NAME_LEN = 32;
//***ZZZ*** Defined in program MAX_LEVEL_AUTHOR_LEN = 32;
//***ZZZ*** Defined in program MAX_ELEMENT_NAME_LEN = 32;
MAX_TAPES_PER_SET = 1024;
MAX_SCORE_ENTRIES = 100;
MAX_NUM_TITLE_SCREENS = 5;
MAX_NUM_AMOEBA = 100;
NUM_BELTS = 4;
NUM_BELT_PARTS = 3;
//***ZZZ*** Defined in program NUM_ENVELOPES = 4;
MIN_ENVELOPE_XSIZE = 1;
MIN_ENVELOPE_YSIZE = 1;
//***ZZZ*** Defined in program MAX_ENVELOPE_XSIZE = 30;
//***ZZZ*** Defined in program MAX_ENVELOPE_YSIZE = 20;
//***ZZZ*** Defined in program MAX_ENVELOPE_TEXT_LEN = (MAX_ENVELOPE_XSIZE*MAX_ENVELOPE_YSIZE);
MIN_CHANGE_PAGES = 1;
//***ZZZ*** Defined in program MAX_CHANGE_PAGES = 32;
MIN_ELEMENTS_IN_GROUP = 1;
//***ZZZ*** Defined in program MAX_ELEMENTS_IN_GROUP = 16;
MIN_ANDROID_ELEMENTS = 1;
//***ZZZ*** Defined in program MAX_ANDROID_ELEMENTS = 16;
(* values for elements with content *)
MIN_ELEMENT_CONTENTS = 1;
STD_ELEMENT_CONTENTS = 4;
//***ZZZ*** Defined in program MAX_ELEMENT_CONTENTS = 8;
(* often used screen positions *)
SX = 8;
SY = 8;
REAL_SX = (SX-2);
REAL_SY = (SY-2);
DX = 566;
DY = 60;
VX = DX;
VY = 400;
EX = DX;
EY = (VY-44);
TILESIZE = 32;
TILEX = TILESIZE;
TILEY = TILESIZE;
MINI_TILESIZE = (TILESIZE div 2);
MINI_TILEX = MINI_TILESIZE;
MINI_TILEY = MINI_TILESIZE;
MICRO_TILESIZE = (TILESIZE div 8);
MICRO_TILEX = MICRO_TILESIZE;
MICRO_TILEY = MICRO_TILESIZE;
MIDPOSX = (SCR_FIELDX div 2);
MIDPOSY = (SCR_FIELDY div 2);
SXSIZE = (SCR_FIELDX*TILEX);
SYSIZE = (SCR_FIELDY*TILEY);
FXSIZE = ((SCR_FIELDX+2)*TILEX);
FYSIZE = ((SCR_FIELDY+2)*TILEY);
DXSIZE = 100;
DYSIZE = 280;
VXSIZE = DXSIZE;
VYSIZE = 100;
EXSIZE = DXSIZE;
EYSIZE = (VYSIZE+44);
FULL_SXSIZE = (2+SXSIZE+2);
FULL_SYSIZE = (2+SYSIZE+2);
MICROLEVEL_XSIZE = ((STD_LEV_FIELDX+2)*MICRO_TILEX);
MICROLEVEL_YSIZE = ((STD_LEV_FIELDY+2)*MICRO_TILEY);
MICROLEVEL_XPOS = (SX+(SXSIZE-MICROLEVEL_XSIZE) div 2);
MICROLEVEL_YPOS = (SY+12*TILEY-MICRO_TILEY);
MICROLABEL1_YPOS = (MICROLEVEL_YPOS-36);
MICROLABEL2_YPOS = (MICROLEVEL_YPOS+MICROLEVEL_YSIZE+7);
(* score for elements *)
SC_EMERALD = 0;
SC_DIAMOND = 1;
SC_BUG = 2;
SC_SPACESHIP = 3;
SC_YAMYAM = 4;
SC_ROBOT = 5;
SC_PACMAN = 6;
SC_NUT = 7;
SC_DYNAMITE = 8;
SC_KEY = 9;
SC_TIME_BONUS = 10;
SC_CRYSTAL = 11;
SC_PEARL = 12;
SC_SHIELD = 13;
SC_UNKNOWN_14 = 14;
SC_UNKNOWN_15 = 15;
//***ZZZ*** Defined in program LEVEL_SCORE_ELEMENTS = 16; (* level elements with score *)
(* "real" level file elements *)
EL_UNDEFINED = -1;
EL_EMPTY_SPACE = 0;
EL_EMPTY = EL_EMPTY_SPACE;
EL_SAND = 1;
EL_WALL = 2;
EL_WALL_SLIPPERY = 3;
EL_ROCK = 4;
EL_KEY_OBSOLETE = 5; (* obsolete; now EL_KEY_1 *)
EL_EMERALD = 6;
EL_EXIT_CLOSED = 7;
EL_PLAYER_OBSOLETE = 8; (* obsolete; now EL_PLAYER_1 *)
EL_BUG = 9;
EL_SPACESHIP = 10;
EL_YAMYAM = 11;
EL_ROBOT = 12;
EL_STEELWALL = 13;
EL_DIAMOND = 14;
EL_AMOEBA_DEAD = 15;
EL_QUICKSAND_EMPTY = 16;
EL_QUICKSAND_FULL = 17;
EL_AMOEBA_DROP = 18;
EL_BOMB = 19;
EL_MAGIC_WALL = 20;
EL_SPEED_PILL = 21;
EL_ACID = 22;
EL_AMOEBA_WET = 23;
EL_AMOEBA_DRY = 24;
EL_NUT = 25;
EL_GAME_OF_LIFE = 26;
EL_BIOMAZE = 27;
EL_DYNAMITE_ACTIVE = 28;
EL_STONEBLOCK = 29;
EL_ROBOT_WHEEL = 30;
EL_ROBOT_WHEEL_ACTIVE = 31;
EL_KEY_1 = 32;
EL_KEY_2 = 33;
EL_KEY_3 = 34;
EL_KEY_4 = 35;
EL_GATE_1 = 36;
EL_GATE_2 = 37;
EL_GATE_3 = 38;
EL_GATE_4 = 39;
EL_GATE_1_GRAY = 40;
EL_GATE_2_GRAY = 41;
EL_GATE_3_GRAY = 42;
EL_GATE_4_GRAY = 43;
EL_DYNAMITE = 44;
EL_PACMAN = 45;
EL_INVISIBLE_WALL = 46;
EL_LAMP = 47;
EL_LAMP_ACTIVE = 48;
EL_WALL_EMERALD = 49;
EL_WALL_DIAMOND = 50;
EL_AMOEBA_FULL = 51;
EL_BD_AMOEBA = 52;
EL_TIME_ORB_FULL = 53;
EL_TIME_ORB_EMPTY = 54;
EL_EXPANDABLE_WALL = 55;
EL_BD_DIAMOND = 56;
EL_EMERALD_YELLOW = 57;
EL_WALL_BD_DIAMOND = 58;
EL_WALL_EMERALD_YELLOW = 59;
EL_DARK_YAMYAM = 60;
EL_BD_MAGIC_WALL = 61;
EL_INVISIBLE_STEELWALL = 62;
EL_SOKOBAN_FIELD_PLAYER = 63;
EL_DYNABOMB_INCREASE_NUMBER = 64;
EL_DYNABOMB_INCREASE_SIZE = 65;
EL_DYNABOMB_INCREASE_POWER = 66;
EL_SOKOBAN_OBJECT = 67;
EL_SOKOBAN_FIELD_EMPTY = 68;
EL_SOKOBAN_FIELD_FULL = 69;
EL_BD_BUTTERFLY_RIGHT = 70;
EL_BD_BUTTERFLY_UP = 71;
EL_BD_BUTTERFLY_LEFT = 72;
EL_BD_BUTTERFLY_DOWN = 73;
EL_BD_FIREFLY_RIGHT = 74;
EL_BD_FIREFLY_UP = 75;
EL_BD_FIREFLY_LEFT = 76;
EL_BD_FIREFLY_DOWN = 77;
EL_BD_BUTTERFLY_1 = EL_BD_BUTTERFLY_DOWN;
EL_BD_BUTTERFLY_2 = EL_BD_BUTTERFLY_LEFT;
EL_BD_BUTTERFLY_3 = EL_BD_BUTTERFLY_UP;
EL_BD_BUTTERFLY_4 = EL_BD_BUTTERFLY_RIGHT;
EL_BD_FIREFLY_1 = EL_BD_FIREFLY_LEFT;
EL_BD_FIREFLY_2 = EL_BD_FIREFLY_DOWN;
EL_BD_FIREFLY_3 = EL_BD_FIREFLY_RIGHT;
EL_BD_FIREFLY_4 = EL_BD_FIREFLY_UP;
EL_BD_BUTTERFLY = 78;
EL_BD_FIREFLY = 79;
EL_PLAYER_1 = 80;
EL_PLAYER_2 = 81;
EL_PLAYER_3 = 82;
EL_PLAYER_4 = 83;
EL_BUG_RIGHT = 84;
EL_BUG_UP = 85;
EL_BUG_LEFT = 86;
EL_BUG_DOWN = 87;
EL_SPACESHIP_RIGHT = 88;
EL_SPACESHIP_UP = 89;
EL_SPACESHIP_LEFT = 90;
EL_SPACESHIP_DOWN = 91;
EL_PACMAN_RIGHT = 92;
EL_PACMAN_UP = 93;
EL_PACMAN_LEFT = 94;
EL_PACMAN_DOWN = 95;
EL_EMERALD_RED = 96;
EL_EMERALD_PURPLE = 97;
EL_WALL_EMERALD_RED = 98;
EL_WALL_EMERALD_PURPLE = 99;
EL_ACID_POOL_TOPLEFT = 100;
EL_ACID_POOL_TOPRIGHT = 101;
EL_ACID_POOL_BOTTOMLEFT = 102;
EL_ACID_POOL_BOTTOM = 103;
EL_ACID_POOL_BOTTOMRIGHT = 104;
EL_BD_WALL = 105;
EL_BD_ROCK = 106;
EL_EXIT_OPEN = 107;
EL_BLACK_ORB = 108;
EL_AMOEBA_TO_DIAMOND = 109;
EL_MOLE = 110;
EL_PENGUIN = 111;
EL_SATELLITE = 112;
EL_ARROW_LEFT = 113;
EL_ARROW_RIGHT = 114;
EL_ARROW_UP = 115;
EL_ARROW_DOWN = 116;
EL_PIG = 117;
EL_DRAGON = 118;
EL_EM_KEY_1_FILE_OBSOLETE = 119; (* obsolete; now EL_EM_KEY_1 *)
EL_CHAR_START = 120;
EL_CHAR_ASCII0 = (EL_CHAR_START-32);
EL_CHAR_ASCII0_START = (EL_CHAR_ASCII0+32);
{ $include "conf_chr.h" * include auto-generated data structure definitions * }
EL_CHAR_ASCII0_END = (EL_CHAR_ASCII0+111);
EL_CHAR_END = (EL_CHAR_START+79);
const
EL_EXPANDABLE_WALL_HORIZONTAL = 200;
EL_EXPANDABLE_WALL_VERTICAL = 201;
EL_EXPANDABLE_WALL_ANY = 202;
EL_EM_GATE_1 = 203;
EL_EM_GATE_2 = 204;
EL_EM_GATE_3 = 205;
EL_EM_GATE_4 = 206;
EL_EM_KEY_2_FILE_OBSOLETE = 207; (* obsolete; now EL_EM_KEY_2 *)
EL_EM_KEY_3_FILE_OBSOLETE = 208; (* obsolete; now EL_EM_KEY_3 *)
EL_EM_KEY_4_FILE_OBSOLETE = 209; (* obsolete; now EL_EM_KEY_4 *)
EL_SP_START = 210;
EL_SP_EMPTY_SPACE = (EL_SP_START+0);
EL_SP_EMPTY = EL_SP_EMPTY_SPACE;
EL_SP_ZONK = (EL_SP_START+1);
EL_SP_BASE = (EL_SP_START+2);
EL_SP_MURPHY = (EL_SP_START+3);
EL_SP_INFOTRON = (EL_SP_START+4);
EL_SP_CHIP_SINGLE = (EL_SP_START+5);
EL_SP_HARDWARE_GRAY = (EL_SP_START+6);
EL_SP_EXIT_CLOSED = (EL_SP_START+7);
EL_SP_DISK_ORANGE = (EL_SP_START+8);
EL_SP_PORT_RIGHT = (EL_SP_START+9);
EL_SP_PORT_DOWN = (EL_SP_START+10);
EL_SP_PORT_LEFT = (EL_SP_START+11);
EL_SP_PORT_UP = (EL_SP_START+12);
EL_SP_GRAVITY_PORT_RIGHT = (EL_SP_START+13);
EL_SP_GRAVITY_PORT_DOWN = (EL_SP_START+14);
EL_SP_GRAVITY_PORT_LEFT = (EL_SP_START+15);
EL_SP_GRAVITY_PORT_UP = (EL_SP_START+16);
EL_SP_SNIKSNAK = (EL_SP_START+17);
EL_SP_DISK_YELLOW = (EL_SP_START+18);
EL_SP_TERMINAL = (EL_SP_START+19);
EL_SP_DISK_RED = (EL_SP_START+20);
EL_SP_PORT_VERTICAL = (EL_SP_START+21);
EL_SP_PORT_HORIZONTAL = (EL_SP_START+22);
EL_SP_PORT_ANY = (EL_SP_START+23);
EL_SP_ELECTRON = (EL_SP_START+24);
EL_SP_BUGGY_BASE = (EL_SP_START+25);
EL_SP_CHIP_LEFT = (EL_SP_START+26);
EL_SP_CHIP_RIGHT = (EL_SP_START+27);
EL_SP_HARDWARE_BASE_1 = (EL_SP_START+28);
EL_SP_HARDWARE_GREEN = (EL_SP_START+29);
EL_SP_HARDWARE_BLUE = (EL_SP_START+30);
EL_SP_HARDWARE_RED = (EL_SP_START+31);
EL_SP_HARDWARE_YELLOW = (EL_SP_START+32);
EL_SP_HARDWARE_BASE_2 = (EL_SP_START+33);
EL_SP_HARDWARE_BASE_3 = (EL_SP_START+34);
EL_SP_HARDWARE_BASE_4 = (EL_SP_START+35);
EL_SP_HARDWARE_BASE_5 = (EL_SP_START+36);
EL_SP_HARDWARE_BASE_6 = (EL_SP_START+37);
EL_SP_CHIP_TOP = (EL_SP_START+38);
EL_SP_CHIP_BOTTOM = (EL_SP_START+39);
EL_SP_END = (EL_SP_START+39);
EL_EM_GATE_1_GRAY = 250;
EL_EM_GATE_2_GRAY = 251;
EL_EM_GATE_3_GRAY = 252;
EL_EM_GATE_4_GRAY = 253;
EL_EM_DYNAMITE = 254;
EL_EM_DYNAMITE_ACTIVE = 255;
EL_PEARL = 256;
EL_CRYSTAL = 257;
EL_WALL_PEARL = 258;
EL_WALL_CRYSTAL = 259;
EL_DOOR_WHITE = 260;
EL_DOOR_WHITE_GRAY = 261;
EL_KEY_WHITE = 262;
EL_SHIELD_NORMAL = 263;
EL_EXTRA_TIME = 264;
EL_SWITCHGATE_OPEN = 265;
EL_SWITCHGATE_CLOSED = 266;
EL_SWITCHGATE_SWITCH_UP = 267;
EL_SWITCHGATE_SWITCH_DOWN = 268;
EL_UNUSED_269 = 269;
EL_UNUSED_270 = 270;
EL_CONVEYOR_BELT_1_LEFT = 271;
EL_CONVEYOR_BELT_1_MIDDLE = 272;
EL_CONVEYOR_BELT_1_RIGHT = 273;
EL_CONVEYOR_BELT_1_SWITCH_LEFT = 274;
EL_CONVEYOR_BELT_1_SWITCH_MIDDLE = 275;
EL_CONVEYOR_BELT_1_SWITCH_RIGHT = 276;
EL_CONVEYOR_BELT_2_LEFT = 277;
EL_CONVEYOR_BELT_2_MIDDLE = 278;
EL_CONVEYOR_BELT_2_RIGHT = 279;
EL_CONVEYOR_BELT_2_SWITCH_LEFT = 280;
EL_CONVEYOR_BELT_2_SWITCH_MIDDLE = 281;
EL_CONVEYOR_BELT_2_SWITCH_RIGHT = 282;
EL_CONVEYOR_BELT_3_LEFT = 283;
EL_CONVEYOR_BELT_3_MIDDLE = 284;
EL_CONVEYOR_BELT_3_RIGHT = 285;
EL_CONVEYOR_BELT_3_SWITCH_LEFT = 286;
EL_CONVEYOR_BELT_3_SWITCH_MIDDLE = 287;
EL_CONVEYOR_BELT_3_SWITCH_RIGHT = 288;
EL_CONVEYOR_BELT_4_LEFT = 289;
EL_CONVEYOR_BELT_4_MIDDLE = 290;
EL_CONVEYOR_BELT_4_RIGHT = 291;
EL_CONVEYOR_BELT_4_SWITCH_LEFT = 292;
EL_CONVEYOR_BELT_4_SWITCH_MIDDLE = 293;
EL_CONVEYOR_BELT_4_SWITCH_RIGHT = 294;
EL_LANDMINE = 295;
EL_ENVELOPE_OBSOLETE = 296; (* obsolete; now EL_ENVELOPE_1 *)
EL_LIGHT_SWITCH = 297;
EL_LIGHT_SWITCH_ACTIVE = 298;
EL_SIGN_EXCLAMATION = 299;
EL_SIGN_RADIOACTIVITY = 300;
EL_SIGN_STOP = 301;
EL_SIGN_WHEELCHAIR = 302;
EL_SIGN_PARKING = 303;
EL_SIGN_ONEWAY = 304;
EL_SIGN_HEART = 305;
EL_SIGN_TRIANGLE = 306;
EL_SIGN_ROUND = 307;
EL_SIGN_EXIT = 308;
EL_SIGN_YINYANG = 309;
EL_SIGN_OTHER = 310;
EL_MOLE_LEFT = 311;
EL_MOLE_RIGHT = 312;
EL_MOLE_UP = 313;
EL_MOLE_DOWN = 314;
EL_STEELWALL_SLIPPERY = 315;
EL_INVISIBLE_SAND = 316;
EL_DX_UNKNOWN_15 = 317;
EL_DX_UNKNOWN_42 = 318;
EL_UNUSED_319 = 319;
EL_UNUSED_320 = 320;
EL_SHIELD_DEADLY = 321;
EL_TIMEGATE_OPEN = 322;
EL_TIMEGATE_CLOSED = 323;
EL_TIMEGATE_SWITCH_ACTIVE = 324;
EL_TIMEGATE_SWITCH = 325;
EL_BALLOON = 326;
EL_BALLOON_SWITCH_LEFT = 327;
EL_BALLOON_SWITCH_RIGHT = 328;
EL_BALLOON_SWITCH_UP = 329;
EL_BALLOON_SWITCH_DOWN = 330;
EL_BALLOON_SWITCH_ANY = 331;
EL_EMC_STEELWALL_1 = 332;
EL_EMC_STEELWALL_2 = 333;
EL_EMC_STEELWALL_3 = 334;
EL_EMC_STEELWALL_4 = 335;
EL_EMC_WALL_1 = 336;
EL_EMC_WALL_2 = 337;
EL_EMC_WALL_3 = 338;
EL_EMC_WALL_4 = 339;
EL_EMC_WALL_5 = 340;
EL_EMC_WALL_6 = 341;
EL_EMC_WALL_7 = 342;
EL_EMC_WALL_8 = 343;
EL_TUBE_ANY = 344;
EL_TUBE_VERTICAL = 345;
EL_TUBE_HORIZONTAL = 346;
EL_TUBE_VERTICAL_LEFT = 347;
EL_TUBE_VERTICAL_RIGHT = 348;
EL_TUBE_HORIZONTAL_UP = 349;
EL_TUBE_HORIZONTAL_DOWN = 350;
EL_TUBE_LEFT_UP = 351;
EL_TUBE_LEFT_DOWN = 352;
EL_TUBE_RIGHT_UP = 353;
EL_TUBE_RIGHT_DOWN = 354;
EL_SPRING = 355;
EL_TRAP = 356;
EL_DX_SUPABOMB = 357;
EL_UNUSED_358 = 358;
EL_UNUSED_359 = 359;
(* ---------- begin of custom elements section ----------------------------- *)
EL_CUSTOM_START = 360;
{ $include "conf_cus.h" * include auto-generated data structure definitions * }
const
NUM_CUSTOM_ELEMENTS = 256;
EL_CUSTOM_END = 615;
(* ---------- end of custom elements section ------------------------------- *)
EL_EM_KEY_1 = 616;
EL_EM_KEY_2 = 617;
EL_EM_KEY_3 = 618;
EL_EM_KEY_4 = 619;
EL_ENVELOPE_1 = 620;
EL_ENVELOPE_2 = 621;
EL_ENVELOPE_3 = 622;
EL_ENVELOPE_4 = 623;
(* ---------- begin of group elements section ------------------------------ *)
EL_GROUP_START = 624;
{ $include "conf_grp.h" * include auto-generated data structure definitions * }
NUM_GROUP_ELEMENTS = 32;
EL_GROUP_END = 655;
(* ---------- end of custom elements section ------------------------------- *)
EL_UNKNOWN = 656;
EL_TRIGGER_ELEMENT = 657;
EL_TRIGGER_PLAYER = 658;
(* SP style elements *)
EL_SP_GRAVITY_ON_PORT_RIGHT = 659;
EL_SP_GRAVITY_ON_PORT_DOWN = 660;
EL_SP_GRAVITY_ON_PORT_LEFT = 661;
EL_SP_GRAVITY_ON_PORT_UP = 662;
EL_SP_GRAVITY_OFF_PORT_RIGHT = 663;
EL_SP_GRAVITY_OFF_PORT_DOWN = 664;
EL_SP_GRAVITY_OFF_PORT_LEFT = 665;
EL_SP_GRAVITY_OFF_PORT_UP = 666;
(* EMC style elements *)
EL_BALLOON_SWITCH_NONE = 667;
EL_EMC_GATE_5 = 668;
EL_EMC_GATE_6 = 669;
EL_EMC_GATE_7 = 670;
EL_EMC_GATE_8 = 671;
EL_EMC_GATE_5_GRAY = 672;
EL_EMC_GATE_6_GRAY = 673;
EL_EMC_GATE_7_GRAY = 674;
EL_EMC_GATE_8_GRAY = 675;
EL_EMC_KEY_5 = 676;
EL_EMC_KEY_6 = 677;
EL_EMC_KEY_7 = 678;
EL_EMC_KEY_8 = 679;
EL_EMC_ANDROID = 680;
EL_EMC_GRASS = 681;
EL_EMC_MAGIC_BALL = 682;
EL_EMC_MAGIC_BALL_ACTIVE = 683;
EL_EMC_MAGIC_BALL_SWITCH = 684;
EL_EMC_MAGIC_BALL_SWITCH_ACTIVE = 685;
EL_EMC_SPRING_BUMPER = 686;
EL_EMC_PLANT = 687;
EL_EMC_LENSES = 688;
EL_EMC_MAGNIFIER = 689;
EL_EMC_WALL_9 = 690;
EL_EMC_WALL_10 = 691;
EL_EMC_WALL_11 = 692;
EL_EMC_WALL_12 = 693;
EL_EMC_WALL_13 = 694;
EL_EMC_WALL_14 = 695;
EL_EMC_WALL_15 = 696;
EL_EMC_WALL_16 = 697;
EL_EMC_WALL_SLIPPERY_1 = 698;
EL_EMC_WALL_SLIPPERY_2 = 699;
EL_EMC_WALL_SLIPPERY_3 = 700;
EL_EMC_WALL_SLIPPERY_4 = 701;
EL_EMC_FAKE_GRASS = 702;
EL_EMC_FAKE_ACID = 703;
EL_EMC_DRIPPER = 704;
EL_TRIGGER_CE_VALUE = 705;
EL_TRIGGER_CE_SCORE = 706;
EL_CURRENT_CE_VALUE = 707;
EL_CURRENT_CE_SCORE = 708;
EL_YAMYAM_LEFT = 709;
EL_YAMYAM_RIGHT = 710;
EL_YAMYAM_UP = 711;
EL_YAMYAM_DOWN = 712;
EL_BD_EXPANDABLE_WALL = 713;
EL_PREV_CE_8 = 714;
EL_PREV_CE_7 = 715;
EL_PREV_CE_6 = 716;
EL_PREV_CE_5 = 717;
EL_PREV_CE_4 = 718;
EL_PREV_CE_3 = 719;
EL_PREV_CE_2 = 720;
EL_PREV_CE_1 = 721;
EL_SELF = 722;
EL_NEXT_CE_1 = 723;
EL_NEXT_CE_2 = 724;
EL_NEXT_CE_3 = 725;
EL_NEXT_CE_4 = 726;
EL_NEXT_CE_5 = 727;
EL_NEXT_CE_6 = 728;
EL_NEXT_CE_7 = 729;
EL_NEXT_CE_8 = 730;
EL_ANY_ELEMENT = 731;
//***ZZZ*** Defined in program NUM_FILE_ELEMENTS = 732;
(* "real" (and therefore drawable) runtime elements *)
EL_FIRST_RUNTIME_REAL = NUM_FILE_ELEMENTS;
EL_DYNABOMB_PLAYER_1_ACTIVE = (EL_FIRST_RUNTIME_REAL+0);
EL_DYNABOMB_PLAYER_2_ACTIVE = (EL_FIRST_RUNTIME_REAL+1);
EL_DYNABOMB_PLAYER_3_ACTIVE = (EL_FIRST_RUNTIME_REAL+2);
EL_DYNABOMB_PLAYER_4_ACTIVE = (EL_FIRST_RUNTIME_REAL+3);
EL_SP_DISK_RED_ACTIVE = (EL_FIRST_RUNTIME_REAL+4);
EL_SWITCHGATE_OPENING = (EL_FIRST_RUNTIME_REAL+5);
EL_SWITCHGATE_CLOSING = (EL_FIRST_RUNTIME_REAL+6);
EL_TIMEGATE_OPENING = (EL_FIRST_RUNTIME_REAL+7);
EL_TIMEGATE_CLOSING = (EL_FIRST_RUNTIME_REAL+8);
EL_PEARL_BREAKING = (EL_FIRST_RUNTIME_REAL+9);
EL_TRAP_ACTIVE = (EL_FIRST_RUNTIME_REAL+10);
EL_INVISIBLE_STEELWALL_ACTIVE = (EL_FIRST_RUNTIME_REAL+11);
EL_INVISIBLE_WALL_ACTIVE = (EL_FIRST_RUNTIME_REAL+12);
EL_INVISIBLE_SAND_ACTIVE = (EL_FIRST_RUNTIME_REAL+13);
EL_CONVEYOR_BELT_1_LEFT_ACTIVE = (EL_FIRST_RUNTIME_REAL+14);
EL_CONVEYOR_BELT_1_MIDDLE_ACTIVE = (EL_FIRST_RUNTIME_REAL+15);
EL_CONVEYOR_BELT_1_RIGHT_ACTIVE = (EL_FIRST_RUNTIME_REAL+16);
EL_CONVEYOR_BELT_2_LEFT_ACTIVE = (EL_FIRST_RUNTIME_REAL+17);
EL_CONVEYOR_BELT_2_MIDDLE_ACTIVE = (EL_FIRST_RUNTIME_REAL+18);
EL_CONVEYOR_BELT_2_RIGHT_ACTIVE = (EL_FIRST_RUNTIME_REAL+19);
EL_CONVEYOR_BELT_3_LEFT_ACTIVE = (EL_FIRST_RUNTIME_REAL+20);
EL_CONVEYOR_BELT_3_MIDDLE_ACTIVE = (EL_FIRST_RUNTIME_REAL+21);
EL_CONVEYOR_BELT_3_RIGHT_ACTIVE = (EL_FIRST_RUNTIME_REAL+22);
EL_CONVEYOR_BELT_4_LEFT_ACTIVE = (EL_FIRST_RUNTIME_REAL+23);
EL_CONVEYOR_BELT_4_MIDDLE_ACTIVE = (EL_FIRST_RUNTIME_REAL+24);
EL_CONVEYOR_BELT_4_RIGHT_ACTIVE = (EL_FIRST_RUNTIME_REAL+25);
EL_EXIT_OPENING = (EL_FIRST_RUNTIME_REAL+26);
EL_EXIT_CLOSING = (EL_FIRST_RUNTIME_REAL+27);
EL_SP_EXIT_OPENING = (EL_FIRST_RUNTIME_REAL+28);
EL_SP_EXIT_CLOSING = (EL_FIRST_RUNTIME_REAL+29);
EL_SP_EXIT_OPEN = (EL_FIRST_RUNTIME_REAL+30);
EL_SP_TERMINAL_ACTIVE = (EL_FIRST_RUNTIME_REAL+31);
EL_SP_BUGGY_BASE_ACTIVATING = (EL_FIRST_RUNTIME_REAL+32);
EL_SP_BUGGY_BASE_ACTIVE = (EL_FIRST_RUNTIME_REAL+33);
EL_SP_MURPHY_CLONE = (EL_FIRST_RUNTIME_REAL+34);
EL_AMOEBA_DROPPING = (EL_FIRST_RUNTIME_REAL+35);
EL_QUICKSAND_EMPTYING = (EL_FIRST_RUNTIME_REAL+36);
EL_MAGIC_WALL_ACTIVE = (EL_FIRST_RUNTIME_REAL+37);
EL_BD_MAGIC_WALL_ACTIVE = (EL_FIRST_RUNTIME_REAL+38);
EL_MAGIC_WALL_FULL = (EL_FIRST_RUNTIME_REAL+39);
EL_BD_MAGIC_WALL_FULL = (EL_FIRST_RUNTIME_REAL+40);
EL_MAGIC_WALL_EMPTYING = (EL_FIRST_RUNTIME_REAL+41);
EL_BD_MAGIC_WALL_EMPTYING = (EL_FIRST_RUNTIME_REAL+42);
EL_MAGIC_WALL_DEAD = (EL_FIRST_RUNTIME_REAL+43);
EL_BD_MAGIC_WALL_DEAD = (EL_FIRST_RUNTIME_REAL+44);
EL_EMC_FAKE_GRASS_ACTIVE = (EL_FIRST_RUNTIME_REAL+45);
EL_GATE_1_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+46);
EL_GATE_2_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+47);
EL_GATE_3_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+48);
EL_GATE_4_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+49);
EL_EM_GATE_1_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+50);
EL_EM_GATE_2_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+51);
EL_EM_GATE_3_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+52);
EL_EM_GATE_4_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+53);
EL_EMC_GATE_5_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+54);
EL_EMC_GATE_6_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+55);
EL_EMC_GATE_7_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+56);
EL_EMC_GATE_8_GRAY_ACTIVE = (EL_FIRST_RUNTIME_REAL+57);
EL_EMC_DRIPPER_ACTIVE = (EL_FIRST_RUNTIME_REAL+58);
EL_EMC_SPRING_BUMPER_ACTIVE = (EL_FIRST_RUNTIME_REAL+59);
(* "unreal" (and therefore not drawable) runtime elements *)
EL_FIRST_RUNTIME_UNREAL = (EL_FIRST_RUNTIME_REAL+60);
EL_BLOCKED = (EL_FIRST_RUNTIME_UNREAL+0);
EL_EXPLOSION = (EL_FIRST_RUNTIME_UNREAL+1);
EL_NUT_BREAKING = (EL_FIRST_RUNTIME_UNREAL+2);
EL_DIAMOND_BREAKING = (EL_FIRST_RUNTIME_UNREAL+3);
EL_ACID_SPLASH_LEFT = (EL_FIRST_RUNTIME_UNREAL+4);
EL_ACID_SPLASH_RIGHT = (EL_FIRST_RUNTIME_UNREAL+5);
EL_AMOEBA_GROWING = (EL_FIRST_RUNTIME_UNREAL+6);
EL_AMOEBA_SHRINKING = (EL_FIRST_RUNTIME_UNREAL+7);
EL_EXPANDABLE_WALL_GROWING = (EL_FIRST_RUNTIME_UNREAL+8);
EL_FLAMES = (EL_FIRST_RUNTIME_UNREAL+9);
EL_PLAYER_IS_LEAVING = (EL_FIRST_RUNTIME_UNREAL+10);
EL_PLAYER_IS_EXPLODING_1 = (EL_FIRST_RUNTIME_UNREAL+11);
EL_PLAYER_IS_EXPLODING_2 = (EL_FIRST_RUNTIME_UNREAL+12);
EL_PLAYER_IS_EXPLODING_3 = (EL_FIRST_RUNTIME_UNREAL+13);
EL_PLAYER_IS_EXPLODING_4 = (EL_FIRST_RUNTIME_UNREAL+14);
EL_QUICKSAND_FILLING = (EL_FIRST_RUNTIME_UNREAL+15);
EL_MAGIC_WALL_FILLING = (EL_FIRST_RUNTIME_UNREAL+16);
EL_BD_MAGIC_WALL_FILLING = (EL_FIRST_RUNTIME_UNREAL+17);
EL_ELEMENT_SNAPPING = (EL_FIRST_RUNTIME_UNREAL+18);
EL_DIAGONAL_SHRINKING = (EL_FIRST_RUNTIME_UNREAL+19);
EL_DIAGONAL_GROWING = (EL_FIRST_RUNTIME_UNREAL+20);
NUM_RUNTIME_ELEMENTS = (EL_FIRST_RUNTIME_UNREAL+21);
(* dummy elements (never used as game elements, only used as graphics) *)
EL_FIRST_DUMMY = NUM_RUNTIME_ELEMENTS;
EL_STEELWALL_TOPLEFT = (EL_FIRST_DUMMY+0);
EL_STEELWALL_TOPRIGHT = (EL_FIRST_DUMMY+1);
EL_STEELWALL_BOTTOMLEFT = (EL_FIRST_DUMMY+2);
EL_STEELWALL_BOTTOMRIGHT = (EL_FIRST_DUMMY+3);
EL_STEELWALL_HORIZONTAL = (EL_FIRST_DUMMY+4);
EL_STEELWALL_VERTICAL = (EL_FIRST_DUMMY+5);
EL_INVISIBLE_STEELWALL_TOPLEFT = (EL_FIRST_DUMMY+6);
EL_INVISIBLE_STEELWALL_TOPRIGHT = (EL_FIRST_DUMMY+7);
EL_INVISIBLE_STEELWALL_BOTTOMLEFT = (EL_FIRST_DUMMY+8);
EL_INVISIBLE_STEELWALL_BOTTOMRIGHT = (EL_FIRST_DUMMY+9);
EL_INVISIBLE_STEELWALL_HORIZONTAL = (EL_FIRST_DUMMY+10);
EL_INVISIBLE_STEELWALL_VERTICAL = (EL_FIRST_DUMMY+11);
EL_DYNABOMB = (EL_FIRST_DUMMY+12);
EL_DYNABOMB_ACTIVE = (EL_FIRST_DUMMY+13);
EL_DYNABOMB_PLAYER_1 = (EL_FIRST_DUMMY+14);
EL_DYNABOMB_PLAYER_2 = (EL_FIRST_DUMMY+15);
EL_DYNABOMB_PLAYER_3 = (EL_FIRST_DUMMY+16);
EL_DYNABOMB_PLAYER_4 = (EL_FIRST_DUMMY+17);
EL_SHIELD_NORMAL_ACTIVE = (EL_FIRST_DUMMY+18);
EL_SHIELD_DEADLY_ACTIVE = (EL_FIRST_DUMMY+19);
EL_AMOEBA = (EL_FIRST_DUMMY+20);
EL_DEFAULT = (EL_FIRST_DUMMY+21);
EL_BD_DEFAULT = (EL_FIRST_DUMMY+22);
EL_SP_DEFAULT = (EL_FIRST_DUMMY+23);
EL_SB_DEFAULT = (EL_FIRST_DUMMY+24);
(* internal elements (only used for internal purposes like copying) *)
EL_FIRST_INTERNAL = (EL_FIRST_DUMMY+25);
EL_INTERNAL_CLIPBOARD_CUSTOM = (EL_FIRST_INTERNAL+0);
EL_INTERNAL_CLIPBOARD_CHANGE = (EL_FIRST_INTERNAL+1);
EL_INTERNAL_CLIPBOARD_GROUP = (EL_FIRST_INTERNAL+2);
EL_INTERNAL_DUMMY = (EL_FIRST_INTERNAL+3);
EL_INTERNAL_CASCADE_BD = (EL_FIRST_INTERNAL+4);
EL_INTERNAL_CASCADE_BD_ACTIVE = (EL_FIRST_INTERNAL+5);
EL_INTERNAL_CASCADE_EM = (EL_FIRST_INTERNAL+6);
EL_INTERNAL_CASCADE_EM_ACTIVE = (EL_FIRST_INTERNAL+7);
EL_INTERNAL_CASCADE_EMC = (EL_FIRST_INTERNAL+8);
EL_INTERNAL_CASCADE_EMC_ACTIVE = (EL_FIRST_INTERNAL+9);
EL_INTERNAL_CASCADE_RND = (EL_FIRST_INTERNAL+10);
EL_INTERNAL_CASCADE_RND_ACTIVE = (EL_FIRST_INTERNAL+11);
EL_INTERNAL_CASCADE_SB = (EL_FIRST_INTERNAL+12);
EL_INTERNAL_CASCADE_SB_ACTIVE = (EL_FIRST_INTERNAL+13);
EL_INTERNAL_CASCADE_SP = (EL_FIRST_INTERNAL+14);
EL_INTERNAL_CASCADE_SP_ACTIVE = (EL_FIRST_INTERNAL+15);
EL_INTERNAL_CASCADE_DC = (EL_FIRST_INTERNAL+16);
EL_INTERNAL_CASCADE_DC_ACTIVE = (EL_FIRST_INTERNAL+17);
EL_INTERNAL_CASCADE_DX = (EL_FIRST_INTERNAL+18);
EL_INTERNAL_CASCADE_DX_ACTIVE = (EL_FIRST_INTERNAL+19);
EL_INTERNAL_CASCADE_CHARS = (EL_FIRST_INTERNAL+20);
EL_INTERNAL_CASCADE_CHARS_ACTIVE = (EL_FIRST_INTERNAL+21);
EL_INTERNAL_CASCADE_CE = (EL_FIRST_INTERNAL+22);
EL_INTERNAL_CASCADE_CE_ACTIVE = (EL_FIRST_INTERNAL+23);
EL_INTERNAL_CASCADE_GE = (EL_FIRST_INTERNAL+24);
EL_INTERNAL_CASCADE_GE_ACTIVE = (EL_FIRST_INTERNAL+25);
EL_INTERNAL_CASCADE_REF = (EL_FIRST_INTERNAL+26);
EL_INTERNAL_CASCADE_REF_ACTIVE = (EL_FIRST_INTERNAL+27);
EL_INTERNAL_CASCADE_USER = (EL_FIRST_INTERNAL+28);
EL_INTERNAL_CASCADE_USER_ACTIVE = (EL_FIRST_INTERNAL+29);
EL_INTERNAL_CASCADE_DYNAMIC = (EL_FIRST_INTERNAL+30);
EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE = (EL_FIRST_INTERNAL+31);
EL_INTERNAL_CLIPBOARD_START = (EL_FIRST_INTERNAL+0);
EL_INTERNAL_CLIPBOARD_END = (EL_FIRST_INTERNAL+2);
EL_INTERNAL_START = (EL_FIRST_INTERNAL+0);
EL_INTERNAL_END = (EL_FIRST_INTERNAL+31);
//***ZZZ*** Defined in program MAX_NUM_ELEMENTS = (EL_FIRST_INTERNAL+32);
(* values for graphics/sounds action types *)
ACTION_DEFAULT = 0;
ACTION_WAITING = 1;
ACTION_FALLING = 2;
ACTION_MOVING = 3;
ACTION_DIGGING = 4;
ACTION_SNAPPING = 5;
ACTION_COLLECTING = 6;
ACTION_DROPPING = 7;
ACTION_PUSHING = 8;
ACTION_WALKING = 9;
ACTION_PASSING = 10;
ACTION_IMPACT = 11;
ACTION_BREAKING = 12;
ACTION_ACTIVATING = 13;
ACTION_DEACTIVATING = 14;
ACTION_OPENING = 15;
ACTION_CLOSING = 16;
ACTION_ATTACKING = 17;
ACTION_GROWING = 18;
ACTION_SHRINKING = 19;
ACTION_ACTIVE = 20;
ACTION_FILLING = 21;
ACTION_EMPTYING = 22;
ACTION_CHANGING = 23;
ACTION_EXPLODING = 24;
ACTION_BORING = 25;
ACTION_BORING_1 = 26;
ACTION_BORING_2 = 27;
ACTION_BORING_3 = 28;
ACTION_BORING_4 = 29;
ACTION_BORING_5 = 30;
ACTION_BORING_6 = 31;
ACTION_BORING_7 = 32;
ACTION_BORING_8 = 33;
ACTION_BORING_9 = 34;
ACTION_BORING_10 = 35;
ACTION_SLEEPING = 36;
ACTION_SLEEPING_1 = 37;
ACTION_SLEEPING_2 = 38;
ACTION_SLEEPING_3 = 39;
ACTION_AWAKENING = 40;
ACTION_DYING = 41;
ACTION_TURNING = 42;
ACTION_TURNING_FROM_LEFT = 43;
ACTION_TURNING_FROM_RIGHT = 44;
ACTION_TURNING_FROM_UP = 45;
ACTION_TURNING_FROM_DOWN = 46;
ACTION_SMASHED_BY_ROCK = 47;
ACTION_SMASHED_BY_SPRING = 48;
ACTION_EATING = 49;
ACTION_TWINKLING = 50;
ACTION_SPLASHING = 51;
ACTION_PAGE_1 = 52;
ACTION_PAGE_2 = 53;
ACTION_PAGE_3 = 54;
ACTION_PAGE_4 = 55;
ACTION_PAGE_5 = 56;
ACTION_PAGE_6 = 57;
ACTION_PAGE_7 = 58;
ACTION_PAGE_8 = 59;
ACTION_PAGE_9 = 60;
ACTION_PAGE_10 = 61;
ACTION_PAGE_11 = 62;
ACTION_PAGE_12 = 63;
ACTION_PAGE_13 = 64;
ACTION_PAGE_14 = 65;
ACTION_PAGE_15 = 66;
ACTION_PAGE_16 = 67;
ACTION_PAGE_17 = 68;
ACTION_PAGE_18 = 69;
ACTION_PAGE_19 = 70;
ACTION_PAGE_20 = 71;
ACTION_PAGE_21 = 72;
ACTION_PAGE_22 = 73;
ACTION_PAGE_23 = 74;
ACTION_PAGE_24 = 75;
ACTION_PAGE_25 = 76;
ACTION_PAGE_26 = 77;
ACTION_PAGE_27 = 78;
ACTION_PAGE_28 = 79;
ACTION_PAGE_29 = 80;
ACTION_PAGE_30 = 81;
ACTION_PAGE_31 = 82;
ACTION_PAGE_32 = 83;
ACTION_OTHER = 84;
NUM_ACTIONS = 85;
ACTION_BORING_LAST = ACTION_BORING_10;
ACTION_SLEEPING_LAST = ACTION_SLEEPING_3;
(* values for special image configuration suffixes (must match game mode) *)
GFX_SPECIAL_ARG_DEFAULT = 0;
GFX_SPECIAL_ARG_TITLE = 1;
GFX_SPECIAL_ARG_MAIN = 2;
GFX_SPECIAL_ARG_LEVELS = 3;
GFX_SPECIAL_ARG_SCORES = 4;
GFX_SPECIAL_ARG_EDITOR = 5;
GFX_SPECIAL_ARG_INFO = 6;
GFX_SPECIAL_ARG_SETUP = 7;
GFX_SPECIAL_ARG_PLAYING = 8;
GFX_SPECIAL_ARG_DOOR = 9;
GFX_SPECIAL_ARG_PREVIEW = 10;
GFX_SPECIAL_ARG_CRUMBLED = 11;
NUM_SPECIAL_GFX_ARGS = 12;
(* values for image configuration suffixes *)
GFX_ARG_X = 0;
GFX_ARG_Y = 1;
GFX_ARG_XPOS = 2;
GFX_ARG_YPOS = 3;
GFX_ARG_WIDTH = 4;
GFX_ARG_HEIGHT = 5;
GFX_ARG_VERTICAL = 6;
GFX_ARG_OFFSET = 7;
GFX_ARG_XOFFSET = 8;
GFX_ARG_YOFFSET = 9;
GFX_ARG_2ND_MOVEMENT_TILE = 10;
GFX_ARG_2ND_VERTICAL = 11;
GFX_ARG_2ND_OFFSET = 12;
GFX_ARG_2ND_XOFFSET = 13;
GFX_ARG_2ND_YOFFSET = 14;
GFX_ARG_2ND_SWAP_TILES = 15;
GFX_ARG_FRAMES = 16;
GFX_ARG_FRAMES_PER_LINE = 17;
GFX_ARG_START_FRAME = 18;
GFX_ARG_DELAY = 19;
GFX_ARG_ANIM_MODE = 20;
GFX_ARG_GLOBAL_SYNC = 21;
GFX_ARG_CRUMBLED_LIKE = 22;
GFX_ARG_DIGGABLE_LIKE = 23;
GFX_ARG_BORDER_SIZE = 24;
GFX_ARG_STEP_OFFSET = 25;
GFX_ARG_STEP_DELAY = 26;
GFX_ARG_DIRECTION = 27;
GFX_ARG_POSITION = 28;
GFX_ARG_DRAW_XOFFSET = 29;
GFX_ARG_DRAW_YOFFSET = 30;
GFX_ARG_DRAW_MASKED = 31;
GFX_ARG_ANIM_DELAY_FIXED = 32;
GFX_ARG_ANIM_DELAY_RANDOM = 33;
GFX_ARG_POST_DELAY_FIXED = 34;
GFX_ARG_POST_DELAY_RANDOM = 35;
GFX_ARG_NAME = 36;
GFX_ARG_SCALE_UP_FACTOR = 37;
GFX_ARG_CLONE_FROM = 38;
NUM_GFX_ARGS = 39;
(* values for sound configuration suffixes *)
SND_ARG_MODE_LOOP = 0;
SND_ARG_VOLUME = 1;
SND_ARG_PRIORITY = 2;
NUM_SND_ARGS = 3;
(* values for music configuration suffixes *)
MUS_ARG_MODE_LOOP = 0;
NUM_MUS_ARGS = 1;
(* values for font configuration *)
FONT_INITIAL_1 = 0;
FONT_INITIAL_2 = 1;
FONT_INITIAL_3 = 2;
FONT_INITIAL_4 = 3;
FONT_TITLE_1 = 4;
FONT_TITLE_2 = 5;
FONT_MENU_1 = 6;
FONT_MENU_2 = 7;
FONT_TEXT_1_ACTIVE = 8;
FONT_TEXT_2_ACTIVE = 9;
FONT_TEXT_3_ACTIVE = 10;
FONT_TEXT_4_ACTIVE = 11;
FONT_TEXT_1 = 12;
FONT_TEXT_2 = 13;
FONT_TEXT_3 = 14;
FONT_TEXT_4 = 15;
FONT_ENVELOPE_1 = 16;
FONT_ENVELOPE_2 = 17;
FONT_ENVELOPE_3 = 18;
FONT_ENVELOPE_4 = 19;
FONT_INPUT_1_ACTIVE = 20;
FONT_INPUT_2_ACTIVE = 21;
FONT_INPUT_1 = 22;
FONT_INPUT_2 = 23;
FONT_OPTION_OFF = 24;
FONT_OPTION_ON = 25;
FONT_VALUE_1 = 26;
FONT_VALUE_2 = 27;
FONT_VALUE_OLD = 28;
FONT_LEVEL_NUMBER_ACTIVE = 29;
FONT_LEVEL_NUMBER = 30;
FONT_TAPE_RECORDER = 31;
FONT_GAME_INFO = 32;
NUM_FONTS = 33;
NUM_INITIAL_FONTS = 4;
(* values for game_status (must match special image configuration suffixes) *)
GAME_MODE_DEFAULT = 0;
GAME_MODE_TITLE = 1;
GAME_MODE_MAIN = 2;
GAME_MODE_LEVELS = 3;
GAME_MODE_SCORES = 4;
GAME_MODE_EDITOR = 5;
GAME_MODE_INFO = 6;
GAME_MODE_SETUP = 7;
GAME_MODE_PLAYING = 8;
GAME_MODE_PSEUDO_DOOR = 9;
GAME_MODE_PSEUDO_PREVIEW = 10;
GAME_MODE_PSEUDO_CRUMBLED = 11;
(* there are no special config file suffixes for these modes *)
GAME_MODE_PSEUDO_TYPENAME = 12;
GAME_MODE_QUIT = 13;
(* special definitions currently only used for custom artwork configuration *)
MUSIC_PREFIX_BACKGROUND = 0;
NUM_MUSIC_PREFIXES = 1;
MAX_LEVELS = 1000;
(* definitions for demo animation lists *)
HELPANIM_LIST_NEXT = -1;
HELPANIM_LIST_END = -999;
(* program information and versioning definitions *)
PROGRAM_VERSION_MAJOR = 3;
PROGRAM_VERSION_MINOR = 2;
PROGRAM_VERSION_PATCH = 3;
PROGRAM_VERSION_BUILD = 0;
PROGRAM_TITLE_STRING = 'Rocks'#39'n'#39'Diamonds';
PROGRAM_AUTHOR_STRING = 'Holger Schemel';
PROGRAM_COPYRIGHT_STRING = 'Copyright ©1995-2006 by Holger Schemel';
ICON_TITLE_STRING = PROGRAM_TITLE_STRING;
COOKIE_PREFIX = 'ROCKSNDIAMONDS';
FILENAME_PREFIX = 'Rocks';
(* file version numbers for resource files (levels, tapes, score, setup, etc.)
** currently supported/known file version numbers:
** 1.0 (old)
** 1.2 (still in use)
** 1.4 (still in use)
** 2.0 (actual)
*)
FILE_VERSION_1_0 = 1000000;
FILE_VERSION_1_2 = 1020000;
FILE_VERSION_1_4 = 1040000;
FILE_VERSION_2_0 = 2000000;
FILE_VERSION_3_0 = 3000000;
(* file version does not change for every program version, but is changed
when new features are introduced that are incompatible with older file
versions, so that they can be treated accordingly *)
FILE_VERSION_ACTUAL = FILE_VERSION_3_0;
GAME_VERSION_1_0 = FILE_VERSION_1_0;
GAME_VERSION_1_2 = FILE_VERSION_1_2;
GAME_VERSION_1_4 = FILE_VERSION_1_4;
GAME_VERSION_2_0 = FILE_VERSION_2_0;
GAME_VERSION_3_0 = FILE_VERSION_3_0;
GAME_VERSION_ACTUAL = PROGRAM_VERSION_MAJOR*1000000+PROGRAM_VERSION_MINOR*10000+PROGRAM_VERSION_PATCH*100+PROGRAM_VERSION_BUILD;
(* values for game_emulation *)
EMU_NONE = 0;
EMU_BOULDERDASH = 1;
EMU_SOKOBAN = 2;
EMU_SUPAPLEX = 3;
(* values for level file type identifier *)
LEVEL_FILE_TYPE_UNKNOWN = 0;
LEVEL_FILE_TYPE_RND = 1;
LEVEL_FILE_TYPE_BD = 2;
LEVEL_FILE_TYPE_EM = 3;
LEVEL_FILE_TYPE_SP = 4;
LEVEL_FILE_TYPE_DX = 5;
LEVEL_FILE_TYPE_SB = 6;
LEVEL_FILE_TYPE_DC = 7;
NUM_LEVEL_FILE_TYPES = 8;
(* values for game engine type identifier *)
GAME_ENGINE_TYPE_UNKNOWN = LEVEL_FILE_TYPE_UNKNOWN;
GAME_ENGINE_TYPE_RND = LEVEL_FILE_TYPE_RND;
GAME_ENGINE_TYPE_EM = LEVEL_FILE_TYPE_EM;
NUM_ENGINE_TYPES = 3;
{IN_LEV_FIELD(x,y) ((x)>=0 && (x)=0 &&(y)=0)and((x)=0)and((y)= EL_CUSTOM_START && (e) <= EL_CUSTOM_END)}
function IS_CUSTOM_ELEMENT(e: integer): boolean;
begin
result:= ((e)>=EL_CUSTOM_START)and((e)<=EL_CUSTOM_END)
end;
{IS_GROUP_ELEMENT(e) ((e) >= EL_GROUP_START && (e) <= EL_GROUP_END)}
function IS_GROUP_ELEMENT(e: integer): boolean;
begin
result:= ((e)>=EL_GROUP_START)and((e)<=EL_GROUP_END)
end;
{PROPERTY_BIT(p) (1 << ((p) % 32))}
function PROPERTY_BIT(p: integer): integer;
begin
result:= (1 shl ((p) mod 32))
end;
{PROPERTY_VAR(e,p) (element_info[e].properties[(p) / 32])}
function PROPERTY_VAR(e: integer; p: integer): integer;
begin
result:= (element_info[e].properties[(p) div 32])
end;
{HAS_PROPERTY(e,p) ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0)}
function HAS_PROPERTY(e: integer; p: integer): boolean;
begin
result:= ((PROPERTY_VAR(e,p) and PROPERTY_BIT(p))<>0)
end;
{SET_PROPERTY(e,p,v) ((v) ? (PROPERTY_VAR(e,p) |= PROPERTY_BIT(p)) : (PROPERTY_VAR(e,p) &= ~PROPERTY_BIT(p)))}
function SET_PROPERTY(e: integer; p: integer; v: boolean): integer;
begin
if v then Result:=(PROPERTY_VAR(e,p) or PROPERTY_BIT(p))
else Result:= (PROPERTY_VAR(e,p) and not PROPERTY_BIT(p));
end;
{CH_EVENT_BITFIELD_NR(e) (e / 32)}
function CH_EVENT_BITFIELD_NR(e: integer): integer;
begin
result:= (e div 32)
end;
{CH_EVENT_BIT(e) (1 << ((e) % 32))}
function CH_EVENT_BIT(e: integer): longword;
begin
result:= (1 shl ((e) mod 32))
end;
{CH_EVENT_VAR(e,c) (element_info[e].change->has_event[c])}
//function CH_EVENT_VAR(e: integer; c: integer): boolean;
//begin
// result:= (element_info[e].change.has_event[c])
//end;
{CH_ANY_EVENT_VAR(e,c) (element_info[e].has_change_event[c])}
function CH_ANY_EVENT_VAR(e: integer; c: integer): boolean;
begin
result:= (element_info[e].has_change_event[c])
end;
{HAS_CHANGE_EVENT(e,c) (IS_CUSTOM_ELEMENT(e) && CH_EVENT_VAR(e,c))}
//function HAS_CHANGE_EVENT(e: integer; c: integer): boolean;
//begin
// result:= (IS_CUSTOM_ELEMENT(e)and CH_EVENT_VAR(e,c))
//end;
{HAS_ANY_CHANGE_EVENT(e,c) (IS_CUSTOM_ELEMENT(e) && CH_ANY_EVENT_VAR(e,c))}
function HAS_ANY_CHANGE_EVENT(e: integer; c: integer): boolean;
begin
result:= (IS_CUSTOM_ELEMENT(e))and(CH_ANY_EVENT_VAR(e,c))
end;
{SET_CHANGE_EVENT(e,c,v) (IS_CUSTOM_ELEMENT(e) ? CH_EVENT_VAR(e,c) = (v) : 0)}
function SET_CHANGE_EVENT(e: integer; c: integer; v: boolean): boolean;
begin
if IS_CUSTOM_ELEMENT(e) then element_info[e].has_change_event[c]:= v;
Result:=v;
end;
{SET_ANY_CHANGE_EVENT(e,c,v) (IS_CUSTOM_ELEMENT(e) ? CH_ANY_EVENT_VAR(e,c) = (v) : 0)}
function SET_ANY_CHANGE_EVENT(e: integer; c: integer; v: boolean): boolean;
begin
if IS_CUSTOM_ELEMENT(e) then element_info[e].has_change_event[c]:=v;
Result:=v;
end;
{IS_DIGGABLE(e) HAS_PROPERTY(e, EP_DIGGABLE)}
function IS_DIGGABLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_DIGGABLE)
end;
{IS_COLLECTIBLE_ONLY(e) HAS_PROPERTY(e, EP_COLLECTIBLE_ONLY)}
function IS_COLLECTIBLE_ONLY(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_COLLECTIBLE_ONLY)
end;
{DONT_RUN_INTO(e) HAS_PROPERTY(e, EP_DONT_RUN_INTO)}
function DONT_RUN_INTO(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_DONT_RUN_INTO)
end;
{DONT_COLLIDE_WITH(e) HAS_PROPERTY(e, EP_DONT_COLLIDE_WITH)}
function DONT_COLLIDE_WITH(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_DONT_COLLIDE_WITH)
end;
{DONT_TOUCH(e) HAS_PROPERTY(e, EP_DONT_TOUCH)}
function DONT_TOUCH(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_DONT_TOUCH)
end;
{IS_INDESTRUCTIBLE(e) HAS_PROPERTY(e, EP_INDESTRUCTIBLE)}
function IS_INDESTRUCTIBLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_INDESTRUCTIBLE)
end;
{IS_SLIPPERY(e) HAS_PROPERTY(e, EP_SLIPPERY)}
function IS_SLIPPERY(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_SLIPPERY)
end;
{CAN_CHANGE(e) HAS_PROPERTY(e, EP_CAN_CHANGE)}
function CAN_CHANGE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_CHANGE)
end;
{CAN_MOVE(e) HAS_PROPERTY(e, EP_CAN_MOVE)}
function CAN_MOVE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_MOVE)
end;
{CAN_FALL(e) HAS_PROPERTY(e, EP_CAN_FALL)}
function CAN_FALL(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_FALL)
end;
{CAN_SMASH_PLAYER(e) HAS_PROPERTY(e, EP_CAN_SMASH_PLAYER)}
function CAN_SMASH_PLAYER(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_SMASH_PLAYER)
end;
{CAN_SMASH_ENEMIES(e) HAS_PROPERTY(e, EP_CAN_SMASH_ENEMIES)}
function CAN_SMASH_ENEMIES(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_SMASH_ENEMIES)
end;
{CAN_SMASH_EVERYTHING(e) HAS_PROPERTY(e, EP_CAN_SMASH_EVERYTHING)}
function CAN_SMASH_EVERYTHING(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_SMASH_EVERYTHING)
end;
{EXPLODES_BY_FIRE(e) HAS_PROPERTY(e, EP_EXPLODES_BY_FIRE)}
function EXPLODES_BY_FIRE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EXPLODES_BY_FIRE)
end;
{EXPLODES_SMASHED(e) HAS_PROPERTY(e, EP_EXPLODES_SMASHED)}
function EXPLODES_SMASHED(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EXPLODES_SMASHED)
end;
{EXPLODES_IMPACT(e) HAS_PROPERTY(e, EP_EXPLODES_IMPACT)}
function EXPLODES_IMPACT(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EXPLODES_IMPACT)
end;
{IS_WALKABLE_OVER(e) HAS_PROPERTY(e, EP_WALKABLE_OVER)}
function IS_WALKABLE_OVER(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_WALKABLE_OVER)
end;
{IS_WALKABLE_INSIDE(e) HAS_PROPERTY(e, EP_WALKABLE_INSIDE)}
function IS_WALKABLE_INSIDE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_WALKABLE_INSIDE)
end;
{IS_WALKABLE_UNDER(e) HAS_PROPERTY(e, EP_WALKABLE_UNDER)}
function IS_WALKABLE_UNDER(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_WALKABLE_UNDER)
end;
{IS_PASSABLE_OVER(e) HAS_PROPERTY(e, EP_PASSABLE_OVER)}
function IS_PASSABLE_OVER(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_PASSABLE_OVER)
end;
{IS_PASSABLE_INSIDE(e) HAS_PROPERTY(e, EP_PASSABLE_INSIDE)}
function IS_PASSABLE_INSIDE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_PASSABLE_INSIDE)
end;
{IS_PASSABLE_UNDER(e) HAS_PROPERTY(e, EP_PASSABLE_UNDER)}
function IS_PASSABLE_UNDER(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_PASSABLE_UNDER)
end;
{IS_DROPPABLE(e) HAS_PROPERTY(e, EP_DROPPABLE)}
function IS_DROPPABLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_DROPPABLE)
end;
{EXPLODES_1X1_OLD(e) HAS_PROPERTY(e, EP_EXPLODES_1X1_OLD)}
function EXPLODES_1X1_OLD(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EXPLODES_1X1_OLD)
end;
{IS_PUSHABLE(e) HAS_PROPERTY(e, EP_PUSHABLE)}
function IS_PUSHABLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_PUSHABLE)
end;
{EXPLODES_CROSS_OLD(e) HAS_PROPERTY(e, EP_EXPLODES_CROSS_OLD)}
function EXPLODES_CROSS_OLD(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EXPLODES_CROSS_OLD)
end;
{IS_PROTECTED(e) HAS_PROPERTY(e, EP_PROTECTED)}
function IS_PROTECTED(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_PROTECTED)
end;
{CAN_MOVE_INTO_ACID(e) HAS_PROPERTY(e, EP_CAN_MOVE_INTO_ACID)}
function CAN_MOVE_INTO_ACID(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_MOVE_INTO_ACID)
end;
{IS_THROWABLE(e) HAS_PROPERTY(e, EP_THROWABLE)}
function IS_THROWABLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_THROWABLE)
end;
{CAN_EXPLODE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE)}
function CAN_EXPLODE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_EXPLODE)
end;
{IS_GRAVITY_REACHABLE(e) HAS_PROPERTY(e, EP_GRAVITY_REACHABLE)}
function IS_GRAVITY_REACHABLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_GRAVITY_REACHABLE)
end;
{IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL)}
function IS_EM_SLIPPERY_WALL(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EM_SLIPPERY_WALL)
end;
{ELEM_IS_PLAYER(e) HAS_PROPERTY(e, EP_PLAYER)}
function ELEM_IS_PLAYER(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_PLAYER)
end;
{CAN_PASS_MAGIC_WALL(e) HAS_PROPERTY(e, EP_CAN_PASS_MAGIC_WALL)}
function CAN_PASS_MAGIC_WALL(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_PASS_MAGIC_WALL)
end;
{IS_SWITCHABLE(e) HAS_PROPERTY(e, EP_SWITCHABLE)}
function IS_SWITCHABLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_SWITCHABLE)
end;
{IS_BD_ELEMENT(e) HAS_PROPERTY(e, EP_BD_ELEMENT)}
function IS_BD_ELEMENT(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_BD_ELEMENT)
end;
{IS_SP_ELEMENT(e) HAS_PROPERTY(e, EP_SP_ELEMENT)}
function IS_SP_ELEMENT(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_SP_ELEMENT)
end;
{IS_SB_ELEMENT(e) HAS_PROPERTY(e, EP_SB_ELEMENT)}
function IS_SB_ELEMENT(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_SB_ELEMENT)
end;
{IS_GEM(e) HAS_PROPERTY(e, EP_GEM)}
function IS_GEM(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_GEM)
end;
{IS_FOOD_DARK_YAMYAM(e) HAS_PROPERTY(e, EP_FOOD_DARK_YAMYAM)}
function IS_FOOD_DARK_YAMYAM(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_FOOD_DARK_YAMYAM)
end;
{IS_FOOD_PENGUIN(e) HAS_PROPERTY(e, EP_FOOD_PENGUIN)}
function IS_FOOD_PENGUIN(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_FOOD_PENGUIN)
end;
{IS_FOOD_PIG(e) HAS_PROPERTY(e, EP_FOOD_PIG)}
function IS_FOOD_PIG(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_FOOD_PIG)
end;
{IS_HISTORIC_WALL(e) HAS_PROPERTY(e, EP_HISTORIC_WALL)}
function IS_HISTORIC_WALL(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_HISTORIC_WALL)
end;
{IS_HISTORIC_SOLID(e) HAS_PROPERTY(e, EP_HISTORIC_SOLID)}
function IS_HISTORIC_SOLID(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_HISTORIC_SOLID)
end;
{IS_CLASSIC_ENEMY(e) HAS_PROPERTY(e, EP_CLASSIC_ENEMY)}
function IS_CLASSIC_ENEMY(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CLASSIC_ENEMY)
end;
{IS_BELT(e) HAS_PROPERTY(e, EP_BELT)}
function IS_BELT(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_BELT)
end;
{IS_BELT_ACTIVE(e) HAS_PROPERTY(e, EP_BELT_ACTIVE)}
function IS_BELT_ACTIVE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_BELT_ACTIVE)
end;
{IS_BELT_SWITCH(e) HAS_PROPERTY(e, EP_BELT_SWITCH)}
function IS_BELT_SWITCH(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_BELT_SWITCH)
end;
{IS_TUBE(e) HAS_PROPERTY(e, EP_TUBE)}
function IS_TUBE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_TUBE)
end;
{IS_KEYGATE(e) HAS_PROPERTY(e, EP_KEYGATE)}
function IS_KEYGATE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_KEYGATE)
end;
{IS_AMOEBOID(e) HAS_PROPERTY(e, EP_AMOEBOID)}
function IS_AMOEBOID(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_AMOEBOID)
end;
{IS_AMOEBALIVE(e) HAS_PROPERTY(e, EP_AMOEBALIVE)}
function IS_AMOEBALIVE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_AMOEBALIVE)
end;
{HAS_EDITOR_CONTENT(e) HAS_PROPERTY(e, EP_HAS_EDITOR_CONTENT)}
function HAS_EDITOR_CONTENT(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_HAS_EDITOR_CONTENT)
end;
{CAN_TURN_EACH_MOVE(e) HAS_PROPERTY(e, EP_CAN_TURN_EACH_MOVE)}
function CAN_TURN_EACH_MOVE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_TURN_EACH_MOVE)
end;
{CAN_GROW(e) HAS_PROPERTY(e, EP_CAN_GROW)}
function CAN_GROW(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_GROW)
end;
{IS_ACTIVE_BOMB(e) HAS_PROPERTY(e, EP_ACTIVE_BOMB)}
function IS_ACTIVE_BOMB(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_ACTIVE_BOMB)
end;
{IS_INACTIVE(e) HAS_PROPERTY(e, EP_INACTIVE)}
function IS_INACTIVE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_INACTIVE)
end;
{IS_ACCESSIBLE_OVER(e) HAS_PROPERTY(e, EP_ACCESSIBLE_OVER)}
function IS_ACCESSIBLE_OVER(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_ACCESSIBLE_OVER)
end;
{IS_ACCESSIBLE_INSIDE(e) HAS_PROPERTY(e, EP_ACCESSIBLE_INSIDE)}
function IS_ACCESSIBLE_INSIDE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_ACCESSIBLE_INSIDE)
end;
{IS_ACCESSIBLE_UNDER(e) HAS_PROPERTY(e, EP_ACCESSIBLE_UNDER)}
function IS_ACCESSIBLE_UNDER(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_ACCESSIBLE_UNDER)
end;
{IS_WALKABLE(e) HAS_PROPERTY(e, EP_WALKABLE)}
function IS_WALKABLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_WALKABLE)
end;
{IS_PASSABLE(e) HAS_PROPERTY(e, EP_PASSABLE)}
function IS_PASSABLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_PASSABLE)
end;
{IS_ACCESSIBLE(e) HAS_PROPERTY(e, EP_ACCESSIBLE)}
function IS_ACCESSIBLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_ACCESSIBLE)
end;
{IS_COLLECTIBLE(e) HAS_PROPERTY(e, EP_COLLECTIBLE)}
function IS_COLLECTIBLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_COLLECTIBLE)
end;
{IS_SNAPPABLE(e) HAS_PROPERTY(e, EP_SNAPPABLE)}
function IS_SNAPPABLE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_SNAPPABLE)
end;
{IS_WALL(e) HAS_PROPERTY(e, EP_WALL)}
function IS_WALL(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_WALL)
end;
{IS_SOLID_FOR_PUSHING(e) HAS_PROPERTY(e, EP_SOLID_FOR_PUSHING)}
function IS_SOLID_FOR_PUSHING(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_SOLID_FOR_PUSHING)
end;
{IS_DRAGONFIRE_PROOF(e) HAS_PROPERTY(e, EP_DRAGONFIRE_PROOF)}
function IS_DRAGONFIRE_PROOF(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_DRAGONFIRE_PROOF)
end;
{IS_EXPLOSION_PROOF(e) HAS_PROPERTY(e, EP_EXPLOSION_PROOF)}
function IS_EXPLOSION_PROOF(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EXPLOSION_PROOF)
end;
{CAN_SMASH(e) HAS_PROPERTY(e, EP_CAN_SMASH)}
function CAN_SMASH(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_SMASH)
end;
{EXPLODES_3X3_OLD(e) HAS_PROPERTY(e, EP_EXPLODES_3X3_OLD)}
function EXPLODES_3X3_OLD(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EXPLODES_3X3_OLD)
end;
{CAN_EXPLODE_BY_FIRE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_FIRE)}
function CAN_EXPLODE_BY_FIRE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_EXPLODE_BY_FIRE)
end;
{CAN_EXPLODE_SMASHED(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_SMASHED)}
function CAN_EXPLODE_SMASHED(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_EXPLODE_SMASHED)
end;
{CAN_EXPLODE_IMPACT(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_IMPACT)}
function CAN_EXPLODE_IMPACT(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_EXPLODE_IMPACT)
end;
{IS_SP_PORT(e) HAS_PROPERTY(e, EP_SP_PORT)}
function IS_SP_PORT(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_SP_PORT)
end;
{CAN_EXPLODE_BY_DRAGONFIRE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_DRAGONFIRE)}
function CAN_EXPLODE_BY_DRAGONFIRE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_EXPLODE_BY_DRAGONFIRE)
end;
{CAN_EXPLODE_BY_EXPLOSION(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_EXPLOSION)}
function CAN_EXPLODE_BY_EXPLOSION(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_EXPLODE_BY_EXPLOSION)
end;
{COULD_MOVE_INTO_ACID(e) HAS_PROPERTY(e, EP_COULD_MOVE_INTO_ACID)}
function COULD_MOVE_INTO_ACID(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_COULD_MOVE_INTO_ACID)
end;
{MAYBE_DONT_COLLIDE_WITH(e) HAS_PROPERTY(e, EP_MAYBE_DONT_COLLIDE_WITH)}
function MAYBE_DONT_COLLIDE_WITH(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_MAYBE_DONT_COLLIDE_WITH)
end;
{CAN_BE_CLONED_BY_ANDROID(e) HAS_PROPERTY(e, EP_CAN_BE_CLONED_BY_ANDROID)}
function CAN_BE_CLONED_BY_ANDROID(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_BE_CLONED_BY_ANDROID)
end;
{IS_EDITOR_CASCADE(e) HAS_PROPERTY(e, EP_EDITOR_CASCADE)}
function IS_EDITOR_CASCADE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EDITOR_CASCADE)
end;
{IS_EDITOR_CASCADE_ACTIVE(e) HAS_PROPERTY(e, EP_EDITOR_CASCADE_ACTIVE)}
function IS_EDITOR_CASCADE_ACTIVE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EDITOR_CASCADE_ACTIVE)
end;
{IS_EDITOR_CASCADE_INACTIVE(e) HAS_PROPERTY(e, EP_EDITOR_CASCADE_INACTIVE)}
function IS_EDITOR_CASCADE_INACTIVE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_EDITOR_CASCADE_INACTIVE)
end;
{HAS_ACTION(e) HAS_PROPERTY(e, EP_HAS_ACTION)}
function HAS_ACTION(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_HAS_ACTION)
end;
{CAN_CHANGE_OR_HAS_ACTION(e) HAS_PROPERTY(e, EP_CAN_CHANGE_OR_HAS_ACTION)}
function CAN_CHANGE_OR_HAS_ACTION(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_CAN_CHANGE_OR_HAS_ACTION)
end;
{IS_OBSOLETE(e) HAS_PROPERTY(e, EP_OBSOLETE)}
function IS_OBSOLETE(e: integer): boolean;
begin
result:= HAS_PROPERTY(e,EP_OBSOLETE)
end;
{IS_CLIPBOARD_ELEMENT(e) ((e) >= EL_INTERNAL_CLIPBOARD_START && (e) <= EL_INTERNAL_CLIPBOARD_END)}
function IS_CLIPBOARD_ELEMENT(e: integer): boolean;
begin
result:= ((e)>=EL_INTERNAL_CLIPBOARD_START)and((e)<=EL_INTERNAL_CLIPBOARD_END)
end;
{IS_INTERNAL_ELEMENT(e) ((e) >= EL_INTERNAL_START && (e) <= EL_INTERNAL_END)}
function IS_INTERNAL_ELEMENT(e: integer): boolean;
begin
result:= ((e)>=EL_INTERNAL_START)and((e)<=EL_INTERNAL_END)
end;
{IS_ENVELOPE(e) ((e) >= EL_ENVELOPE_1 && (e) <= EL_ENVELOPE_4)}
function IS_ENVELOPE(e: integer): boolean;
begin
result:= ((e)>=EL_ENVELOPE_1)and((e)<=EL_ENVELOPE_4)
end;
{IS_RND_KEY(e) ((e) >= EL_KEY_1 && (e) <= EL_KEY_4)}
function IS_RND_KEY(e: integer): boolean;
begin
result:= ((e)>=EL_KEY_1)and((e)<=EL_KEY_4)
end;
{IS_EM_KEY(e) ((e) >= EL_EM_KEY_1 && (e) <= EL_EM_KEY_4)}
function IS_EM_KEY(e: integer): boolean;
begin
result:= ((e)>=EL_EM_KEY_1)and((e)<=EL_EM_KEY_4)
end;
{IS_EMC_KEY(e) ((e) >= EL_EMC_KEY_5 && (e) <= EL_EMC_KEY_8)}
function IS_EMC_KEY(e: integer): boolean;
begin
result:= ((e)>=EL_EMC_KEY_5)and((e)<=EL_EMC_KEY_8)
end;
{IS_KEY(e) (IS_RND_KEY(e) || IS_EM_KEY(e) || IS_EMC_KEY(e))}
function IS_KEY(e: integer): boolean;
begin
result:= (IS_RND_KEY(e))or(IS_EM_KEY(e))or(IS_EMC_KEY(e))
end;
{RND_KEY_NR(e) ((e) - EL_KEY_1)}
function RND_KEY_NR(e: integer): integer;
begin
result:= ((e)-EL_KEY_1)
end;
{EM_KEY_NR(e) ((e) - EL_EM_KEY_1)}
function EM_KEY_NR(e: integer): integer;
begin
result:= ((e)-EL_EM_KEY_1)
end;
{EMC_KEY_NR(e) ((e) - EL_EMC_KEY_5 + 4)}
function EMC_KEY_NR(e: integer): integer;
begin
result:= ((e)-EL_EMC_KEY_5+4)
end;
{KEY_NR(e) (IS_RND_KEY(e) ? RND_KEY_NR(e) : IS_EM_KEY(e) ? EM_KEY_NR(e) : IS_EMC_KEY(e) ? EMC_KEY_NR(e) : 0)}
function KEY_NR(e: integer): integer;
begin
if IS_RND_KEY(e) then result:=RND_KEY_NR(e)
else if IS_EM_KEY(e) then result:=EM_KEY_NR(e)
else if IS_EMC_KEY(e) then result:=EMC_KEY_NR(e)
else result:=0
end;
{IS_RND_GATE(e) ((e) >= EL_GATE_1 && (e) <= EL_GATE_4)}
function IS_RND_GATE(e: integer): boolean;
begin
result:= ((e)>=EL_GATE_1)and((e)<=EL_GATE_4)
end;
{IS_EM_GATE(e) ((e) >= EL_EM_GATE_1 && (e) <= EL_EM_GATE_4)}
function IS_EM_GATE(e: integer): boolean;
begin
result:= ((e)>=EL_EM_GATE_1)and((e)<=EL_EM_GATE_4)
end;
{IS_EMC_GATE(e) ((e) >= EL_EMC_GATE_5 && (e) <= EL_EMC_GATE_8)}
function IS_EMC_GATE(e: integer): boolean;
begin
result:= ((e)>=EL_EMC_GATE_5)and((e)<=EL_EMC_GATE_8)
end;
{IS_GATE(e) (IS_RND_GATE(e) || IS_EM_GATE(e) || IS_EMC_GATE(e))}
function IS_GATE(e: integer): boolean;
begin
result:= (IS_RND_GATE(e))or(IS_EM_GATE(e))or(IS_EMC_GATE(e))
end;
{RND_GATE_NR(e) ((e) - EL_GATE_1)}
function RND_GATE_NR(e: integer): integer;
begin
result:= ((e)-EL_GATE_1)
end;
{EM_GATE_NR(e) ((e) - EL_EM_GATE_1)}
function EM_GATE_NR(e: integer): integer;
begin
result:= ((e)-EL_EM_GATE_1)
end;
{EMC_GATE_NR(e) ((e) - EL_EMC_GATE_5 + 4)}
function EMC_GATE_NR(e: integer): integer;
begin
result:= ((e)-EL_EMC_GATE_5+4)
end;
{GATE_NR(e) (IS_RND_GATE(e) ? RND_GATE_NR(e) : IS_EM_GATE(e) ? EM_GATE_NR(e) : IS_EMC_GATE(e) ? EMC_GATE_NR(e) : 0)}
function GATE_NR(e: integer): integer;
begin
if IS_RND_GATE(e) then result:= RND_GATE_NR(e)
else if IS_EM_GATE(e) then result:=EM_GATE_NR(e)
else if IS_EMC_GATE(e) then result:=EMC_GATE_NR(e)
else result:=0;
end;
{IS_RND_GATE_GRAY(e) ((e) >= EL_GATE_1_GRAY && (e) <= EL_GATE_4_GRAY)}
function IS_RND_GATE_GRAY(e: integer): boolean;
begin
result:= ((e)>=EL_GATE_1_GRAY)and((e)<=EL_GATE_4_GRAY)
end;
{IS_RND_GATE_GRAY_ACTIVE(e) ((e) >= EL_GATE_1_GRAY_ACTIVE && (e) <= EL_GATE_4_GRAY_ACTIVE)}
function IS_RND_GATE_GRAY_ACTIVE(e: integer): boolean;
begin
result:= ((e)>=EL_GATE_1_GRAY_ACTIVE)and((e)<=EL_GATE_4_GRAY_ACTIVE)
end;
{IS_EM_GATE_GRAY(e) ((e) >= EL_EM_GATE_1_GRAY && (e) <= EL_EM_GATE_4_GRAY)}
function IS_EM_GATE_GRAY(e: integer): boolean;
begin
result:= ((e)>=EL_EM_GATE_1_GRAY)and((e)<=EL_EM_GATE_4_GRAY)
end;
{IS_EM_GATE_GRAY_ACTIVE(e) ((e) >= EL_EM_GATE_1_GRAY_ACTIVE && (e) <= EL_EM_GATE_4_GRAY_ACTIVE)}
function IS_EM_GATE_GRAY_ACTIVE(e: integer): boolean;
begin
result:= ((e)>=EL_EM_GATE_1_GRAY_ACTIVE)and((e)<=EL_EM_GATE_4_GRAY_ACTIVE)
end;
{IS_EMC_GATE_GRAY(e) ((e) >= EL_EMC_GATE_5_GRAY && (e) <= EL_EMC_GATE_8_GRAY)}
function IS_EMC_GATE_GRAY(e: integer): boolean;
begin
result:= ((e)>=EL_EMC_GATE_5_GRAY)and((e)<=EL_EMC_GATE_8_GRAY)
end;
{IS_EMC_GATE_GRAY_ACTIVE(e) ((e) >= EL_EMC_GATE_5_GRAY_ACTIVE && (e) <= EL_EMC_GATE_8_GRAY_ACTIVE)}
function IS_EMC_GATE_GRAY_ACTIVE(e: integer): boolean;
begin
result:= ((e)>=EL_EMC_GATE_5_GRAY_ACTIVE)and((e)<=EL_EMC_GATE_8_GRAY_ACTIVE)
end;
{IS_GATE_GRAY(e) (IS_RND_GATE_GRAY(e) || IS_EM_GATE_GRAY(e) || IS_EMC_GATE_GRAY(e))}
function IS_GATE_GRAY(e: integer): boolean;
begin
result:= (IS_RND_GATE_GRAY(e))or(IS_EM_GATE_GRAY(e))or(IS_EMC_GATE_GRAY(e))
end;
{IS_GATE_GRAY_ACTIVE(e) (IS_RND_GATE_GRAY_ACTIVE(e) || IS_EM_GATE_GRAY_ACTIVE(e) || IS_EMC_GATE_GRAY_ACTIVE(e))}
function IS_GATE_GRAY_ACTIVE(e: integer): boolean;
begin
result:= (IS_RND_GATE_GRAY_ACTIVE(e))or(IS_EM_GATE_GRAY_ACTIVE(e))or(IS_EMC_GATE_GRAY_ACTIVE(e))
end;
{RND_GATE_GRAY_NR(e) ((e) - EL_GATE_1_GRAY)}
function RND_GATE_GRAY_NR(e: integer): integer;
begin
result:= ((e)-EL_GATE_1_GRAY)
end;
{RND_GATE_GRAY_ACTIVE_NR(e) ((e) - EL_GATE_1_GRAY_ACTIVE)}
function RND_GATE_GRAY_ACTIVE_NR(e: integer): integer;
begin
result:= ((e)-EL_GATE_1_GRAY_ACTIVE)
end;
{EM_GATE_GRAY_NR(e) ((e) - EL_EM_GATE_1_GRAY)}
function EM_GATE_GRAY_NR(e: integer): integer;
begin
result:= ((e)-EL_EM_GATE_1_GRAY)
end;
{EM_GATE_GRAY_ACTIVE_NR(e) ((e) - EL_EM_GATE_1_GRAY_ACTIVE)}
function EM_GATE_GRAY_ACTIVE_NR(e: integer): integer;
begin
result:= ((e)-EL_EM_GATE_1_GRAY_ACTIVE)
end;
{EMC_GATE_GRAY_NR(e) ((e) - EL_EMC_GATE_5_GRAY + 4)}
function EMC_GATE_GRAY_NR(e: integer): integer;
begin
result:= ((e)-EL_EMC_GATE_5_GRAY+4)
end;
{EMC_GATE_GRAY_ACTIVE_NR(e) ((e) - EL_EMC_GATE_5_GRAY_ACTIVE + 4)}
function EMC_GATE_GRAY_ACTIVE_NR(e: integer): integer;
begin
result:= ((e)-EL_EMC_GATE_5_GRAY_ACTIVE+4)
end;
{GATE_GRAY_NR(e) (IS_RND_GATE_GRAY(e) ? RND_GATE_GRAY_NR(e) : IS_EM_GATE_GRAY(e) ? EM_GATE_GRAY_NR(e) : IS_EMC_GATE_GRAY(e) ? EMC_GATE_GRAY_NR(e) : 0)}
function GATE_GRAY_NR(e: integer): integer;
begin
if IS_RND_GATE_GRAY(e) then result:=RND_GATE_GRAY_NR(e)
else if IS_EM_GATE_GRAY(e) then result:=EM_GATE_GRAY_NR(e)
else if IS_EMC_GATE_GRAY(e) then result:=EMC_GATE_GRAY_NR(e)
else result:=0;
end;
{GFX_ELEMENT(e) (element_info[e].use_gfx_element ? element_info[e].gfx_element : e)}
function GFX_ELEMENT(e: integer): integer;
begin
if element_info[e].use_gfx_element then result:=element_info[e].gfx_element
else result:=e;
end;
{GROUP_NR(e) ((e) - EL_GROUP_START)}
function GROUP_NR(e: integer): integer;
begin
result:= ((e)-EL_GROUP_START)
end;
{IS_IN_GROUP(e, nr) (element_info[e].in_group[nr] == TRUE)}
//function IS_IN_GROUP(e: integer; nr: integer): boolean;
//begin
// result:= (element_info[e].in_group[nr]=LongBool(1))
//end;
{IS_IN_GROUP_EL(e, ge) (IS_IN_GROUP(e, (ge) - EL_GROUP_START))}
//function IS_IN_GROUP_EL(e: integer; ge: integer): boolean;
//begin
// result:= (IS_IN_GROUP(e,(ge)-EL_GROUP_START))
//end;
{IS_EQUAL_OR_IN_GROUP(e, ge) (IS_GROUP_ELEMENT(ge) ? IS_IN_GROUP(e, GROUP_NR(ge)) : (e) == (ge))}
//function IS_EQUAL_OR_IN_GROUP(e: integer; ge: integer): boolean;
//begin
// if IS_GROUP_ELEMENT(ge) then result:=IS_IN_GROUP(e,GROUP_NR(ge))
// else result:=(e=ge)
//end;
{GET_PLAYER_ELEMENT(e) ((e) >= EL_PLAYER_1 && (e) <= EL_PLAYER_4 ? (e) : EL_PLAYER_1)}
function GET_PLAYER_ELEMENT(e: integer): integer;
begin
if ((e>=EL_PLAYER_1)and(e<=EL_PLAYER_4)) then result:=e
else result:=EL_PLAYER_1;
end;
{GET_PLAYER_NR(e) (GET_PLAYER_ELEMENT(e) - EL_PLAYER_1)}
function GET_PLAYER_NR(e: integer): integer;
begin
result:= (GET_PLAYER_ELEMENT(e)-EL_PLAYER_1)
end;
{EL_NAME(e) ((e) >= 0 ? element_info[e].token_name : "(?)")}
function EL_NAME(e: integer): string;
begin
if e>=0 then result:=element_info[e].token_name
else result:='(?)';
end;