def get(self, linedef): index = linedef.action args = linedef.args func = self.function_map.get(index) if func is None: return None action = Action() action.index = index if (linedef.flags & Linedef.FLAG_HEXEN_PLAYERUSE) != 0: action.activation |= Action.ACTIVATE_SWITCH action.flags |= Action.FLAG_PLAYER elif (linedef.flags & Linedef.FLAG_HEXEN_PLAYERBUMP) != 0: action.activation |= Action.ACTIVATE_BUMP action.flags |= Action.FLAG_PLAYER elif (linedef.flags & Linedef.FLAG_HEXEN_PROJECTILECROSS) != 0: action.activation |= Action.ACTIVATE_WALK action.flags |= Action.FLAG_PROJECTILE elif (linedef.flags & Linedef.FLAG_HEXEN_PLAYERSANDMONSTERS) != 0: action.flags |= Action.FLAG_MONSTER | Action.FLAG_PLAYER elif (linedef.flags & Linedef.FLAG_HEXEN_REPEATEDUSE) == 0: action.flags |= Action.FLAG_ONCE return func(self, action, args)
def add(self, index, keywords): action = Action() action.index = index action.flag = Action.FLAG_PLAYER | Action.FLAG_PROJECTILE for keyword in keywords.split(','): if keyword in type_mapping: action.type = type_mapping[keyword] elif keyword in activate_mapping: action.activation = activate_mapping[keyword] elif keyword in movement_mapping: action.direction = movement_mapping[keyword] elif keyword in door_mapping: action.door_type = door_mapping[keyword] elif keyword in key_flags_mapping: action.key_flags |= key_flags_mapping[keyword] elif keyword in target_mapping: action.target = target_mapping[keyword] elif keyword in change_flags_mapping: action.change_flags |= change_flags_mapping[keyword] elif keyword in model_mapping: action.model = model_mapping[keyword] elif keyword in teleport_mapping: action.teleport_type = teleport_mapping[keyword] elif keyword in flags_mapping: action.flags |= flags_mapping[keyword] elif keyword in speed_mapping: action.speed = speed_mapping[keyword] elif keyword in wait_mapping: action.wait_time = wait_mapping[keyword] elif keyword in distance_mapping: action.move_amount = distance_mapping[keyword] elif keyword in light_mapping: action.light_change = light_mapping[keyword] else: print 'Unknown action keyword "{}".'.format(keyword) self.actions[index] = action
def parse_boom_action(index): action = Action() # Floors. if index >= 0x6000 and index < 0x8000: action.type = Action.TYPE_FLOOR index -= 0x6000 action.activation, action.flags = get_boom_activation(index) parse_boom_floor(index, action) # Ceilings. elif index >= 0x4000 and index < 0x6000: action.type = Action.TYPE_CEILING index -= 0x4000 action.activation, action.flags = get_boom_activation(index) parse_boom_ceiling(index, action) # Doors. elif index >= 0x3c00 and index < 0x4000: action.type = Action.TYPE_DOOR index -= 0x3c00 action.activation, action.flags = get_boom_activation(index) parse_boom_door(index, action) # Locked doors. elif index >= 0x3800 and index < 0x3c00: action.type = Action.TYPE_DOOR_LOCKED index -= 0x3800 action.activation, action.flags = get_boom_activation(index) parse_boom_locked_door(index, action) # Lifts. elif index >= 0x3400 and index < 0x3800: action.type = Action.TYPE_LIFT index -= 0x3400 action.activation, action.flags = get_boom_activation(index) parse_boom_lift(index, action) # Stairs. elif index >= 0x3000 and index < 0x3400: action.type = Action.TYPE_STAIRS index -= 0x3000 action.activation, action.flags = get_boom_activation(index) parse_boom_stairs(index, action) # Crushers. elif index >= 0x2f80 and index < 0x3000: action.type = Action.TYPE_CRUSHER index -= 0x2f80 action.activation, action.flags = get_boom_activation(index) parse_boom_crusher(index, action) else: return None return action