From 9cc423f1e3b0a1d9e498c522cb550709e348eed7 Mon Sep 17 00:00:00 2001 From: Supremist Date: Thu, 30 Oct 2025 01:16:56 +0200 Subject: Add weapon damage comparison graph --- character.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'character.py') diff --git a/character.py b/character.py index 14a7e42..9cc2498 100644 --- a/character.py +++ b/character.py @@ -159,6 +159,14 @@ class Character: weapon.striking = self.features["striking"] except KeyError: pass + + def weapon_proficiency_bonus(self, weapon): + return max(self.features.get(weapon.category, 0), + self.features.get(weapon.name, 0)) + + def weapon_specialization_bonus(self, weapon): + factor = self.features.get("weapon specialization", 0) + return self.weapon_proficiency_bonus(weapon) * factor // 2 def attack_bonus(self, weapon: Weapon, strike_type="melee"): dex = self.ability_modifier("dex").total() @@ -168,13 +176,13 @@ class Character: mod = max(mod, dex) elif strike_type == "ranged": mod = dex - prof = max(self.features.get(weapon.category, 0), - self.features.get(weapon.name, 0)) - return mod + prof + weapon.potency + prof = self.weapon_proficiency_bonus(weapon) + return mod + prof + self.level + weapon.potency def attack_damage_bonus(self, weapon: Weapon, strike_type="melee"): str_mod = self.ability_modifier("str") dmg_mod = self.conditions.modifier("damage") + dmg_mod += self.weapon_specialization_bonus(weapon) if strike_type == "melee": if "thief" in self.features and weapon.finesse: @@ -221,6 +229,7 @@ class CharacterPlan(LevelingPlan): blacklist = duplicates blacklist.extend(spells) blacklist.extend(equipment) + blacklist.append("feats") for key in blacklist: del data[key] -- cgit v1.2.3