def output_preperation(self, player, move, super, target): if super: prepare_msg = render(move.supr_prepare_msg, player, target) prepare_msg = ("L%d SUPER ~ " % super) + prepare_msg else: prepare_msg = render(move.prepare_msg, player, target) self.app.fsay(prepare_msg)
def player_pick(self, player, selector): if player in self.fighters: char = Character.get(selector=selector) if char: player.character = char join_msg = render(char.selection_msg, player) self.app.fsay(join_msg)
def battle_damage(self, player, target, damage, crit=0): totaldmg = damage + crit # Weakness / Resistance Modifications if player.current_move.move.element not in ['demi', 'heal']: element = player.current_move.move.element if element == target.character.weakness: totaldmg = int(totaldmg * random.randrange(150, 300) / 100.0) self.app.fsay("%s's '%s' is super effective against %s!" % player, player.current_move.move.fullname, target) elif element == target.character.resistance: totaldmg = int(totaldmg * random.randrange(150, 300) / 100.0) self.app.fsay("%s's '%s' isn't effective against %s!" % player, player.current_move.move.fullname, target) # Attacker Earn Super-Points player.superpoints += int(abs(totaldmg) / 20.0) player.superpoints = min(self.settings.maxsuper, player.superpoints) # Apply Damage target.health -= int(totaldmg) target.health = min(self.settings.maxhealth, target.health) # Target Earn Super-Points target.superpoints += int(abs(totaldmg) / 10.0) target.superpoints = min(self.settings.maxsuper, target.superpoints) # Emit Hit/Critical Messages if player.current_move.super: hit_msg = render(player.current_move.move.supr_hit_msg, player, target) else: if crit: hit_msg = render(player.current_move.move.crit_hit_msg, player, target) else: hit_msg = render(player.current_move.move.hit_msg, player, target) if crit: hit_msg = "%s [%d+%d crit]" % (hit_msg, abs(damage), crit) elif damage: hit_msg = "%s [%d]" % (hit_msg, abs(damage)) self.app.fsay(hit_msg) # Element Specific Descriptions if player.current_move.move.element == "demi": self.app.fsay("%s just lost half their health!" % target.nickname) elif player.current_move.move.element == "hpdrain": self.app.fsay("%s grows stronger from %s's stolen lifeforce!" % (player, target))
def battle_do(self, bcomm): player = bcomm.player target = bcomm.target move = bcomm.move player.superpoints -= bcomm.super * 100 # Physical Moves if move.element == "physical": # increase move power based on super power = 0 if 'blind' in player.effects else move.power + bcomm.super * 50 st = player.character.pstrength df = target.character.pdefense maxhp = self.settings.maxhealth damage = int(calculate_damage(st, df, power, maxhp) + int(random.randrange(-maxhp * 0.05, maxhp * 0.05))) if is_critical(st, df): critdamage = calculate_damage(st,df,power * CRITICAL_POWER_FACTOR, maxhp) - damage else: critdamage = 0 if target.current_move and target.current_move.name == 'Block': if random.randint(0, 2) == 0: damage = 0 self.app.fsay(render(player.character.block_success_msg, target, player)) player.current_move = None return else: damage = int(damage * (2 / 3.0)) self.app.fsay(render(player.character.block_fail_msg, target, player)) self.battle_damage(player, target, damage, critdamage) # int(self.move.power / 10)) effects.get('stun')(self.app, player, move, target) print "EFFECTS ON TARGET", target.effects # Magical Moves else: player.magicpoints -= bcomm.mpcost power = move.power maxhp = self.settings.maxhealth strength = player.character.mstrength defense = target.character.mdefense if move.element == "heal": healing = int(calculate_damage(strength, 25, power, maxhp) + int(random.randrange(-maxhp * 0.03, maxhp * 0.03))) self.battle_damage(player, target, -healing) elif move.element == "demi": targethp = target.health ratio = targethp / float(maxhp) ratio = min(MAX_DEMI_RATIO, ratio) if random.random() > ratio: damage = int(targethp / 2.0) self.battle_damage(player, target, damage) else: self.app.fsay(render(move.miss_msg, player, target)) elif move.element == "hpdrain": damage = calculate_damage(strength, defense, power, maxhp)+ int(random.randrange(-maxhp * 0.01, maxhp * 0.01)) stolen = damage * (challenge_factor(strength, defense) - 1) player.health += stolen player.health = min(self.settings.maxhealth, player.health) self.battle_damage(player, target, damage) if target.health <= 0: death_msg = render(target.character.death_msg, target, player) self.app.fsay(death_msg) self.app.fsay("Death slaps a sticker on %s, \"Kaput!\", you're dead. [%d]" % (target, target.health)) winid = self.app.game.check_win_condition() if winid != None: self.finish_battle(winid) else: player.current_move = None self.app.fsay(player.status_msg)
def __init__(self, app, player): self.app = app self.player = player self.target = None self.app.fsay(render(player.character.block_begin_msg, self.player))