summaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'main.py')
-rw-r--r--main.py99
1 files changed, 17 insertions, 82 deletions
diff --git a/main.py b/main.py
index c54de8a..53993f1 100644
--- a/main.py
+++ b/main.py
@@ -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()