You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fabula/effects.py

59 lines
1.3 KiB

from dataclasses import dataclass
from enums import Counter, Element, Affinity, MissType
from jsonable import JsonableDataclassArgs
from model import Effect, Target, Action
@dataclass(**JsonableDataclassArgs)
class OpportunityEffect(Effect):
target: Target
opportunity_text: str
@dataclass(**JsonableDataclassArgs)
class SubActionEffect(Effect):
action: Action
trigger_text: str
@dataclass(**JsonableDataclassArgs)
class DamageEffect(Effect):
target: Target | None
attribute: Counter
damage: int
old_value: int
new_value: int
max_value: int | None
element: Element
affinity: Affinity
piercing: bool
@dataclass(**JsonableDataclassArgs)
class StatusEffect(Effect):
target: Target
old_status: str | None
new_status: str | None
def __post_init__(self):
if self.old_status is None and self.new_status is None:
raise ValueError("At least one of old_status or new_status must be non-None")
@dataclass(**JsonableDataclassArgs)
class FPBonusEffect(Effect):
rerolls: int
bond_bonus: int
@dataclass(**JsonableDataclassArgs)
class MissEffect(Effect):
miss_type: MissType
target: Target
@dataclass(**JsonableDataclassArgs)
class GeneralEffect(Effect):
text: str
target: Target