dnd-item-generator/dnd_item/scrolls.py
evilchili 9c19373120 Adding scrolls
This commit introduces a random spells scroll generator
2024-01-19 00:12:01 -08:00

52 lines
1.4 KiB
Python

from dnd_item import types
from rolltable.tables import spells
class Scroll(types.Item):
"""
A magic scroll.
"""
@property
def name(self):
return 'Scroll of {spell.name}'.format(**self).title()
@property
def summary(self):
if self.spell.level == 'cantrip':
return f"{self.name} ({self.spell.school} {self.spell.level})"
else:
return f"{self.name} ({self.spell.level} level {self.spell.school})"
details = summary
class ScrollGenerator(types.ItemGenerator):
item_class = Scroll
def random_properties(self, rarity: str = '') -> dict:
"""
Every scroll must have a randomly-selected spell.
"""
item = super().random_properties(rarity)
# maps maximum spell level to a rarity level (0=common...)
frequencies = {
'common': 'first',
'uncommon': 'third',
'rare': 'fifth',
'very rare': 'seventh',
'legendary': 'ninth'
}
# Create a rolltable of spells at an appropriate level with one row
spells.reset()
spells.die = 1
spells.datasources[0].set_frequency(frequencies[item['rarity']['rarity']])
# add the spell to the item as a dictionary
keys = [h.lower().replace(' ', '_') for h in spells.headers]
item['spell'] = dict(zip(*[keys, spells.rows[1][1:]]))
return item