module EP # values for configurable properties (custom elem's only, else pre-defined) DIGGABLE = 0 COLLECTIBLE_ONLY = 1 DONT_RUN_INTO = 2 DONT_COLLIDE_WITH = 3 DONT_TOUCH = 4 INDESTRUCTIBLE = 5 SLIPPERY = 6 CAN_CHANGE = 7 CAN_MOVE = 8 CAN_FALL = 9 CAN_SMASH_PLAYER = 10 CAN_SMASH_ENEMIES = 11 CAN_SMASH_EVERYTHING = 12 EXPLODES_BY_FIRE = 13 EXPLODES_SMASHED = 14 EXPLODES_IMPACT = 15 WALKABLE_OVER = 16 WALKABLE_INSIDE = 17 WALKABLE_UNDER = 18 PASSABLE_OVER = 19 PASSABLE_INSIDE = 20 PASSABLE_UNDER = 21 DROPPABLE = 22 EXPLODES_1X1_OLD = 23 PUSHABLE = 24 EXPLODES_CROSS_OLD = 25 PROTECTED = 26 CAN_MOVE_INTO_ACID = 27 THROWABLE = 28 CAN_EXPLODE = 29 GRAVITY_REACHABLE = 30 # values for pre-defined properties PLAYER = 32 CAN_PASS_MAGIC_WALL = 33 SWITCHABLE = 34 BD_ELEMENT = 35 SP_ELEMENT = 36 SB_ELEMENT = 37 GEM = 38 FOOD_DARK_YAMYAM = 39 FOOD_PENGUIN = 40 FOOD_PIG = 41 HISTORIC_WALL = 42 HISTORIC_SOLID = 43 CLASSIC_ENEMY = 44 BELT = 45 BELT_ACTIVE = 46 BELT_SWITCH = 47 TUBE = 48 KEYGATE = 49 AMOEBOID = 50 AMOEBALIVE = 51 HAS_EDITOR_CONTENT = 52 CAN_TURN_EACH_MOVE = 53 CAN_GROW = 54 ACTIVE_BOMB = 55 INACTIVE = 56 # values for special configurable properties (depending on level settings) EM_SLIPPERY_WALL = 57 # values for special graphics properties (no effect on game engine) GFX_CRUMBLED = 58 # values for derived properties (determined from properties above) ACCESSIBLE_OVER = 59 ACCESSIBLE_INSIDE = 60 ACCESSIBLE_UNDER = 61 WALKABLE = 62 PASSABLE = 63 ACCESSIBLE = 64 COLLECTIBLE = 65 SNAPPABLE = 66 WALL = 67 SOLID_FOR_PUSHING = 68 DRAGONFIRE_PROOF = 69 EXPLOSION_PROOF = 70 CAN_SMASH = 71 EXPLODES_3X3_OLD = 72 CAN_EXPLODE_BY_FIRE = 73 CAN_EXPLODE_SMASHED = 74 CAN_EXPLODE_IMPACT = 75 SP_PORT = 76 CAN_EXPLODE_BY_DRAGONFIRE = 77 CAN_EXPLODE_BY_EXPLOSION = 78 COULD_MOVE_INTO_ACID = 79 MAYBE_DONT_COLLIDE_WITH = 80 CAN_BE_CLONED_BY_ANDROID = 81 # values for internal purpose only (level editor) WALK_TO_OBJECT = 82 DEADLY = 83 EDITOR_CASCADE = 84 EDITOR_CASCADE_ACTIVE = 85 EDITOR_CASCADE_INACTIVE = 86 # values for internal purpose only (game engine) HAS_ACTION = 87 CAN_CHANGE_OR_HAS_ACTION = 88 # values for internal purpose only (other) OBSOLETE = 89 NUM_ELEMENT_PROPERTIES = 90 end module EP NUM_EP_BITFIELDS = ((NUM_ELEMENT_PROPERTIES + 31) / 32) EP_BITFIELD_BASE_NR = 0 EP_BITMASK_BASE_DEFAULT = (1 << CAN_MOVE_INTO_ACID) EP_BITMASK_DEFAULT = 0 # TODO make property bitmasks right PROPERTY_BIT(p) (1 << ((p) % 32)) PROPERTY_VAR(e,p) (element_info[e].properties[(p) / 32]) HAS_PROPERTY(e,p) ((PROPERTY_VAR(e, p) & (1 << (p % 32))) != 0) SET_PROPERTY(e,p,v) ((v) ? (PROPERTY_VAR(e,p) |= (1 << (p % 32))) : \ (PROPERTY_VAR(e,p) &= ~(1 << (p % 32)))) end