diff options
Diffstat (limited to 'main.py')
| -rw-r--r-- | main.py | 99 |
1 files changed, 17 insertions, 82 deletions
@@ -2,70 +2,11 @@ import math from character import CharacterPlan from game import Difficulty, Roll, d from creature import CreaturePlan +from actions import Attack +from items import Weapon import pb2e - - -class Weapon: - def __init__(self, crit_effect, main_die, potency, striking=1, fatal=0, - deadly=0, backstabber=False, - agile=False, twin=False) -> None: - self.main_die = main_die - self.striking = striking - self.potency = potency - self.backstabber = backstabber - self.fatal = fatal - self.deadly = deadly - self.agile = agile - self.twin = twin - self.crit_effect = crit_effect - - - def damage(self, dmg_bonus, check=Roll.Success, number = 0): - persistant_damage_factor = 3 + 1/3 - if self.backstabber: - dmg_bonus += 1 - if self.potency >= 3: - dmg_bonus += 1 - - if self.twin and number > 0: - dmg_bonus += self.striking - - if check == Roll.Success: - return self.striking * d(self.main_die) + dmg_bonus - if check == Roll.Crit: - dmg = None - if self.fatal is not None and self.fatal > 0: - dmg = (self.striking + 1) * d(self.fatal) - else: - dmg = self.striking * d(self.main_die) - dmg = 2 * (dmg+dmg_bonus) - - if self.deadly is not None and self.deadly > 0: - dmg += max(1, self.striking-1) * d(self.deadly) - - if self.crit_effect == "crossbow": - dmg += persistant_damage_factor * d(8).expected() - elif self.crit_effect == "dart" or self.crit_effect == "knife": - dmg += persistant_damage_factor * d(6).expected() - elif self.crit_effect == "dagger": - dmg += persistant_damage_factor * d(6).expected() - elif self.crit_effect == "pick": - dmg += 2 * self.striking - - return dmg - return 0 - - - def strike(self, attack_bonus, dmg_bonus, ac, number = 0): - def strike_dmg(check): - return self.damage(dmg_bonus, check, number) - bonus = attack_bonus+self.potency+self.get_map(number) - attack_roll = d(20).apply(Roll.check, ac, bonus) - return attack_roll.apply(strike_dmg) - - def treat_wounds(check_res, heal_bonus=0): if check_res <= Roll.Fumble: return -d(8) @@ -99,8 +40,6 @@ def show_stat(name, dist): assert abs(dist.accumulate_prob(lambda x: True) - 1) < math.pow(10, -10) -coin = d(2) - def main(): treat_options = [ @@ -133,29 +72,25 @@ def main2(): show_stat("rapier", total_dmg) def test3(): - falcata = Weapon("sword", 8, 0, fatal=0) - ac = 18 - bonus = +8 +3 - dmg_bonus = d(6)+4 - attack = d(20).apply(Roll.check, ac, bonus) - show_stat("attack", attack) - show_stat("falcata", falcata.strike(bonus, dmg_bonus, ac, 0)) - -def main4(): + level = 2 #char_js = pb2e.download_character(pfb_id=160180) char_js = pb2e.open_character("quizrel2") - plan = CharacterPlan(char_js) - char = plan.build(1) - print(char.toJSON()) - char = plan.build(5) - print(char.toJSON()) + char_plan = CharacterPlan(char_js) + char = char_plan.build(level) + falcata = Weapon("falcata", "martial", "sword", 8, fatal=12) + char.weapons.append(falcata) + char.update_fundamental_runes() -def main5(): creature_plan = CreaturePlan(default_difficulty=Difficulty.Moderate) - creature_plan["reflex"] = Difficulty.High - creature = creature_plan.build(10) - print(creature) + # creature_plan["reflex"] = Difficulty.High + # creature_plan["ac"] = Difficulty.High + creature = creature_plan.build(level) + attack = Attack(char, creature, falcata) + print(char.toJSON()) + print(f"Attack +{attack.bonus()} vs AC {attack.target.ac()}") + show_stat("roll", attack.roll()) + show_stat("falcata", attack.strike()) if __name__ == '__main__': - main5() + test3() |
