def key(effect): try: spot = effect.subject.spot except AttributeError: turn_order = speed = 0 else: turn_order = spot.turn_order speed = spot.battler.stats.speed * Effect.speed_factor(spot, 1) return (major_tier, EndTurnOrder.tier_effect, -speed, turn_order, minor_tier)
def command_sort_order(self, command): speed_value = command.request.battler.stats.speed trick_factor = Effect.speed_factor(self, 1) speed_sort_value = -speed_value * trick_factor if command.command == 'move': return ( 1, -command.move.priority, speed_sort_value, ) elif command.command == 'switch': # XXX: Should switch-ins be sorted by speed? return ( 0, speed_sort_value, ) else: raise NotImplementedError(command.command)
def process_replacements(self): """Send out monsters to replace those that have fainted.""" self.assert_state('waiting_replacements') commands = [command for command in self.commands.values() if command.command == 'switch'] for command in commands: battler = command.battler spot = battler.spot self.switch(spot, command.replacement) trick_factor = Effect.speed_factor(self, 1) commands.sort(key=lambda c: -c.replacement.stats.speed * trick_factor) for command in commands: Effect.send_out(command.battler.spot.battler) self.ask_for_commands()