gammatools/app/schemas/schemas.py

131 lines
3.6 KiB
Python

from marshmallow import Schema, fields, validate
chartype_field = fields.String(
required=True,
validate=validate.OneOf(["human", "humanoid", "mutant", "cyborg"]),
description='The characters type of being'
)
conscore_field = fields.Integer(
required=True,
default=10,
validate=validate.Range(min=3, max=18),
description='The constitution score of the character'
)
class MutationSchema(Schema):
conscore = conscore_field
intscore = fields.Integer(
required=True,
validate=validate.Range(min=3, max=18),
description='The characters intelligence score'
)
class HPSchema(Schema):
chartype = chartype_field
conscore = conscore_field
class DiceSchema(Schema):
quantity = fields.Int(
required=True,
default=1,
validate=validate.Range(min=1),
description='The number of dice to roll'
)
geometry = fields.Int(
required=True,
default=2,
validate=validate.Range(min=2),
description='The number of sides on each die'
)
discard_lowest = fields.Bool(required=True, default=False, description='Drop the lowest score')
class CharacterSchema(Schema):
chartype = chartype_field
class AbilitySchema(Schema):
chartype = chartype_field
ability = fields.String(
required=False,
default="generic",
validate=validate.OneOf(
["m-strength", "p-strength", "intelligence", "charisma", "constitution", "dexterity", "all"]),
description='One of the six character attributes from the character sheet'
)
class CheckSchema(Schema):
ability_score = fields.Integer(
required=True,
default=10,
validate=validate.Range(min=3, max=21),
description='The score of the ability to be checked against'
)
multiplier = fields.Integer(
required=True,
default=4,
validate=validate.Range(min=2, max=8),
description='Sets the threshold for the check. In general, the higher the multiplier, the higher the '
'likelihood of success. Range: 2 - 7'
)
class MentalAttackSchema(Schema):
ams = fields.Integer(
required=True,
validate=validate.Range(min=3, max=18),
description='The Attackers Mental Strength'
)
dms = fields.Integer(
required=True,
validate=validate.Range(min=3, max=18),
description='The Defenders Mental Strength'
)
modifier = fields.Integer(
required=False,
default=0,
validate=validate.Range(min=-100, max=100),
description='Roll modifier for mental attack'
)
class PhysicalAttackSchema(Schema):
weapon_attack = fields.Boolean(
required=True,
default=True,
description="Is the attacker using a weapon? If so, To-Hit is based on weapon class."
)
dac = fields.Integer(
required=True,
min=1,
max=10,
default=1,
description='The defenders armour class. This is needed for both weapon attacks and non-weapon attacks'
)
awc = fields.Integer(
required=False,
min=1,
max=16,
default=1,
description='The attackers weapon class. This is needed for weapon attacks only.'
)
ahd = fields.Integer(
required=False,
min=1,
max=16,
default=1,
description='The attackers hit dice count. This is needed for non-weapon attacks only.'
)
modifier = fields.Integer(
required=False,
min=-100,
max=100,
default=0,
description='The roll modifier to be applied to the hit roll.'
)