Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)  
Ejemplo n.º 3
0
 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))
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 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))