summaryrefslogtreecommitdiff
path: root/creature.py
diff options
context:
space:
mode:
authorSupremist <sergkarv@gmail.com>2025-10-27 19:53:18 +0200
committerSupremist <sergkarv@gmail.com>2025-10-27 19:53:18 +0200
commitd3e18471b664c9146f4255e7c23ea21c9cfa6130 (patch)
tree6b317ce2b7598b85b9c526aa23fd884da581cf4c /creature.py
parent2721a20cdef0bbbfc97345a102017b13e962ff03 (diff)
downloadpf2e_calc-d3e18471b664c9146f4255e7c23ea21c9cfa6130.tar.xz
pf2e_calc-d3e18471b664c9146f4255e7c23ea21c9cfa6130.zip
Add creature stats
Diffstat (limited to 'creature.py')
-rw-r--r--creature.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/creature.py b/creature.py
new file mode 100644
index 0000000..3584cf0
--- /dev/null
+++ b/creature.py
@@ -0,0 +1,48 @@
+import csv
+from enum import Enum
+
+class Difficulty(Enum):
+ Terrible = -2
+ Low = -1
+ Moderate = 0
+ High = 1
+ Extreme = 2
+
+ @classmethod
+ def from_str(cls, name):
+ name = name.strip().lower()
+ for member in cls:
+ if member.name.lower() == name:
+ return member
+ raise ValueError(f"{name!r} is not a valid {cls.__name__}")
+
+
+def load_csv(name, value_parser=None):
+ if value_parser is None:
+ value_parser = lambda x:x
+ res = dict() # Table by level and Difficulty
+ with open(f"creature_stats/{name}.csv", newline='', encoding='utf8') as file:
+ reader = csv.DictReader(file)
+ for row in reader:
+ level = int(row.pop("Level"))
+ res[level] = {Difficulty.from_str(name):
+ value_parser(val) for name,val in row.items()}
+ return res
+
+def parse_range(str_data):
+ try:
+ value = int(str_data)
+ return (value, value)
+ except ValueError:
+ return tuple([int(i) for i in str_data.split("-")[:2]])
+
+class StatsDB:
+ def __init__(self) -> None:
+ self.ac = load_csv("ac", int)
+ self.saves = load_csv("saves", int)
+ self.hp = load_csv("hp", parse_range)
+
+stats = StatsDB()
+
+# if __name__ == '__main__':
+# main()