cleaning up code
This commit is contained in:
@@ -10,6 +10,28 @@ def roll_dice(count, sides):
|
||||
|
||||
# Player Character Classes
|
||||
class Adventurer:
|
||||
ability_score_modifiers = {
|
||||
'strength' : { 3 : { 'melee' : -3, 'open doors': 1 }, 5 : { 'melee' : -2, 'open doors': 1 }, 8 : { 'melee' : -1, 'open doors': 1 },
|
||||
12 : { 'melee' : 0, 'open doors': 2 }, 15 : { 'melee' : 1, 'open doors': 3 }, 17 : { 'melee' : 2, 'open doors': 4 },
|
||||
18 : { 'melee' : 3, 'open doors': 5 } },
|
||||
'intelligence' : { 3 : { 'languages' : 'native, broken speech', 'literacy': 'illiterate' }, 5 : { 'languages' : 'native', 'literacy': 'illiterate' },
|
||||
8 : { 'languages' : 'native', 'literacy': 'basic' }, 12 : { 'languages' :'native', 'literacy': 'literate' },
|
||||
15 : { 'languages' : 'native +1 additional', 'literacy': 'literate'}, 17 : { 'languages' : 'native +2 additional', 'literacy': 'literate' },
|
||||
18 : { 'languages' : 'native +3 additional', 'literacy': 'literate' } },
|
||||
'wisdom' : { 3 : { 'magic saves' : -3 }, 5 : { 'magic saves' : -2 }, 8 : { 'magic saves' : -1 }, 12 : { 'magic saves' : 0,},
|
||||
15 : { 'magic saves' : 1 }, 17 : { 'magic saves' : 2 }, 18 : { 'magic saves' : 3 } },
|
||||
'dexterity' : { 3 : { 'AC' : -3, 'missile': -3, 'initiative' : -2 }, 5 : { 'AC' : -2, 'missile': -2, 'initiative' : -1},
|
||||
8 : { 'AC' : -1, 'missile': -1, 'initiative' : -1 }, 12 : { 'AC' : 0, 'missile': 0, 'initiative' : 0 },
|
||||
15 : { 'AC' : 1, 'missile': 1, 'initiative' : 1 }, 17 : { 'AC' : 2, 'missile': 2, 'initiative' : 1 },
|
||||
18 : { 'AC' : 3, 'missile': 3, 'initiative' : 2 } },
|
||||
'constitution' : { 3 : { 'hit points' : -3 }, 5 : { 'hit points' : -2 }, 8 : { 'hit points' : -1 }, 12 : { 'hit points' : 0 },
|
||||
15 : { 'hit points' : 1 }, 17 : { 'hit points' : 2 }, 18 : { 'hit points' : 3 } },
|
||||
'charisma' : { 3 : { 'npc reactions' : -2, 'max retainers': 1, 'retainer loyalty' : 4 }, 5 : { 'npc reactions' : -2, 'max retainers': 2, 'retainer loyalty' : 5 },
|
||||
8 : { 'npc reactions' : -1, 'max retainers': 3, 'retainer loyalty' : 6 }, 12 : { 'npc reactions' : 0, 'max retainers': 4, 'retainer loyalty' : 7 },
|
||||
15 : { 'npc reactions' : 1, 'max retainers': 5, 'retainer loyalty' : 8 }, 17 : { 'npc reactions' : 1, 'max retainers': 6, 'retainer loyalty' : 9 },
|
||||
18 : { 'npc reactions' : 2, 'max retainers': 7, 'retainer loyalty' : 10 } }
|
||||
}
|
||||
|
||||
def __init__(self, c_id: str, level=1, attributes={}) -> None:
|
||||
# using a get() method to pull an attribute else use a default value, https://python-academy.org/en/handbook/get
|
||||
self.identifier = c_id
|
||||
@@ -27,7 +49,7 @@ class Adventurer:
|
||||
self.gold= roll_dice(3,6)
|
||||
self.torches = roll_dice(1,6)
|
||||
self.rations = roll_dice(1,6)
|
||||
self.equipment = self.roll_equipment()
|
||||
self.equipment = self.set_equipment()
|
||||
# all armor, individual classes may have overrides
|
||||
self.possible_armor = list(armor.keys())
|
||||
# all weapons, individual classes may have overrides
|
||||
@@ -43,21 +65,21 @@ class Adventurer:
|
||||
self.thief_skills = None
|
||||
self.turn_undead = None
|
||||
|
||||
def __str__(self):
|
||||
def __str__(self) -> str:
|
||||
return f"{self.player_class}"
|
||||
|
||||
def get_subclass_dict():
|
||||
def get_subclass_dict() -> dict:
|
||||
subclasses = {}
|
||||
for subclass in Adventurer.__subclasses__():
|
||||
subclasses[subclass.adv_class] = subclass
|
||||
return subclasses
|
||||
|
||||
def get_json(self):
|
||||
def get_json(self) -> dict:
|
||||
char_dict = self.__dict__
|
||||
char_json = json.dumps(char_dict)
|
||||
return char_dict
|
||||
|
||||
def vertical_sheet(self):
|
||||
def vertical_sheet(self) -> list:
|
||||
sheet = []
|
||||
sheet.append('{0: <28}'.format(f"| {self.player_class.title()} - Level {self.level}"))
|
||||
for key, val in self.get_attributes().items():
|
||||
@@ -89,7 +111,7 @@ class Adventurer:
|
||||
sheet = [ line + "|" for line in sheet ]
|
||||
return sheet
|
||||
|
||||
def full_sheet(self):
|
||||
def full_sheet(self) -> list:
|
||||
sheet = { 1: [], 2 : [] }
|
||||
sheet[1].append('{0: <60}'.format(f"| Character Name:"))
|
||||
sheet[1].append('{0: <60}'.format(f"| Player Name :"))
|
||||
@@ -105,26 +127,27 @@ class Adventurer:
|
||||
sheet[1].append('{0: <60}'.format(f"| Charisma:\t{self.charisma} SpellMod: {self.ac}"))
|
||||
return sheet
|
||||
|
||||
def get_attributes(self):
|
||||
def get_attributes(self) -> dict:
|
||||
attribute_list = ['strength', 'intelligence', 'wisdom', 'dexterity', 'constitution', 'charisma']
|
||||
return {k: self.__dict__[k] for k in attribute_list}
|
||||
|
||||
def get_best_prime_attribute(self):
|
||||
def get_best_prime_attribute(self) -> str:
|
||||
attribute_list = [ 'strength', 'intelligence', 'wisdom', 'dexterity' ]
|
||||
prime_attributes = {k: self.__dict__[k] for k in attribute_list}
|
||||
# return highest, found this at https://stackoverflow.com/a/280156
|
||||
return max(prime_attributes, key=prime_attributes.get)
|
||||
|
||||
def roll_equipment(self):
|
||||
def set_equipment(self):
|
||||
equipment = [ 'backpack', 'tinderbox', 'waterskin' ]
|
||||
random_items = [ random.choice(adventuring_gear) for i in range(2) ]
|
||||
for item in random_items:
|
||||
equipment += item.split("+")
|
||||
while len(equipment) < 7:
|
||||
equipment.append("")
|
||||
for i in range(2):
|
||||
item = ""
|
||||
while item not in equipment:
|
||||
item = random.choice(adventuring_gear)
|
||||
if item not in equipment:
|
||||
equipment.append(item)
|
||||
return equipment
|
||||
|
||||
def select_spells(self, spell_list):
|
||||
def select_spells(self, spell_list) -> list:
|
||||
spell_book = []
|
||||
for spell_level, count in self.spells.items():
|
||||
if count != "-":
|
||||
@@ -132,10 +155,11 @@ class Adventurer:
|
||||
new_spell = ""
|
||||
while new_spell not in spell_book:
|
||||
new_spell = random.choice(spell_list[spell_level])
|
||||
spell_book.append(new_spell)
|
||||
if new_spell not in spell_book:
|
||||
spell_book.append(new_spell)
|
||||
return spell_book
|
||||
|
||||
def roll_all_hit_points(self):
|
||||
def roll_all_hit_points(self) -> list:
|
||||
hp_list = []
|
||||
prev_hit_dice = 0
|
||||
for i in range(self.__class__.max_level):
|
||||
@@ -151,10 +175,10 @@ class Adventurer:
|
||||
hp_list.append(hp_roll)
|
||||
return hp_list
|
||||
|
||||
def get_class_progression_for_level(self):
|
||||
def get_class_progression_for_level(self) -> list:
|
||||
return list(filter(lambda d: d['level'] == self.level, self.__class__.progression))[0]
|
||||
|
||||
def set_level(self, new_level):
|
||||
def set_level(self, new_level) -> None:
|
||||
self.level = new_level
|
||||
self.hp = sum(self.hp_rolls[:self.level])
|
||||
if self.player_class in [ "magic user", "elf" ]:
|
||||
@@ -163,8 +187,9 @@ class Adventurer:
|
||||
if self.player_class == "cleric":
|
||||
self.spells = Cleric.spells[self.level]
|
||||
self.spell_book = self.select_spells(cleric_spells)
|
||||
self.turn_undead = Cleric.turn_undead[self.level]
|
||||
|
||||
def set_attack_bonus(self):
|
||||
def set_attack_bonus(self) -> int:
|
||||
prog = self.get_class_progression_for_level()
|
||||
thac0 = prog['thac0']
|
||||
atk = 19 - thac0
|
||||
@@ -321,7 +346,7 @@ class Cleric(Adventurer):
|
||||
self.spells = Cleric.spells[self.level]
|
||||
self.spell_book = self.select_spells(cleric_spells)
|
||||
self.atk = self.set_attack_bonus()
|
||||
self.turn_undead = Cleric.turn_undead
|
||||
self.turn_undead = Cleric.turn_undead[self.level]
|
||||
|
||||
class Thief(Adventurer):
|
||||
adv_class = "thief"
|
||||
|
||||
Reference in New Issue
Block a user