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;