[docs]
class Armor:
"""
This class represents Armor.
:ac (int): the base armor class (without including dex modifier)
:dex bonus (int): the maximum dexterity bonus that can be applied to the ac
:strength (int): the minimum strength modifier required to wear the armor without a movement penalty (TODO: implement movement penalty)
:stealth (int): -1 if the armor imposes disadvantage on stealth checks, 1 if it imposes advantage on stealth checks, 0 otherwise
"""
ac = 11
dex_bonus = 10
strength = -5
stealth = 0
[docs]
@classmethod
def get_ac(cls):
return cls.ac
[docs]
@classmethod
def get_dex_bonus(cls):
return cls.dex_bonus
[docs]
@classmethod
def get_strength(cls):
return cls.strength
[docs]
@classmethod
def get_stealth(cls):
return cls.stealth
[docs]
@classmethod
def get_total_ac(cls, combatant):
try:
return cls.get_ac() + min(combatant.get_dexterity(), cls.get_dex_bonus())
except AttributeError:
raise ValueError("Invalid combatant to don this Armor (must be type Combatant)")
[docs]
class LightArmor(Armor):
"""
Light Armor
"""
pass # pylint: disable=unnecessary-pass
[docs]
class MediumArmor(Armor):
"""
Medium Armor, which allows maximum dexterity bonus of 2
"""
dex_bonus = 2
[docs]
class HeavyArmor(Armor):
"""
Heavy Armor, which imposes disadvantage on stealth checks
"""
stealth = -1
dex_bonus = 0
[docs]
class PaddedArmor(LightArmor):
"""
:ac: 11 + dex
:stealth: disadvantage
"""
ac = 11
stealth = -1
[docs]
class LeatherArmor(LightArmor):
"""
:ac: 11 + dex
"""
ac = 11
[docs]
class StuddedLeatherArmor(LightArmor):
"""
:ac: 12 + dex
"""
ac = 12
[docs]
class HideArmor(MediumArmor):
"""
:ac: 12 + dex (max 2)
"""
ac = 12
[docs]
class ChainShirtArmor(MediumArmor):
"""
:ac: 13 + dex (max 2)
"""
ac = 13
[docs]
class ScaleMailArmor(MediumArmor):
"""
:ac: 14 + dex (max 2)
:stealth: disadvantage
"""
ac = 14
stealth = -1
[docs]
class BreastplateArmor(MediumArmor):
"""
:ac: 14 + dex (max 2)
"""
ac = 14
[docs]
class HalfPlateArmor(MediumArmor):
"""
:ac: 15 + dex (max 2)
:stealth: disadvantage
"""
ac = 15
stealth = -1
[docs]
class RingMailArmor(HeavyArmor):
"""
:ac: 14
:stealth: disadvantage
"""
ac = 14
[docs]
class ChainMailArmor(HeavyArmor):
"""
:ac: 16
:strength: 1 (Note: RAW strength restriction is 13)
:stealth: disadvantage
"""
ac = 16
strength = 1
[docs]
class SplintArmor(HeavyArmor):
"""
:ac: 17
:strength: 2 (Note: RAW strength restriction is 15)
:stealth: disadvantage
"""
ac = 17
strength = 2
[docs]
class PlateArmor(HeavyArmor):
"""
:ac: 18
:strength: 2 (Note: RAW strength restriction is 15)
:stealth: disadvantage
"""
ac = 18
strength = 2
[docs]
class Shield:
"""
This class represents a shield
:ac (int): the bonus to AC from having the shield equipped
"""
ac = 2
[docs]
@classmethod
def get_ac(cls):
return cls.ac