def add_level_3_features(self, **kwargs): new_gaming_set = kwargs['gaming_set'] new_proficiencies = { base.TOOL_PROFICIENCY: ['disguise_kit', 'forgery_kit', new_gaming_set], } new_languages = kwargs[base.LANGUAGES] new_features = { 'master_of_intrigue': feature.Feature( name='Master of Intrigue', description= 'You can unerringly mimic the speech patterns and accent of a creature \ that you hear speak for at least 1 minute.' ), 'master_of_intrigue_languages': feature.LanguagesKnown(name='Master of Intrigue: Languages', languages=new_languages.languages), 'master_of_tactics': feature.Feature( name='Master of Tactics', description= 'Starting at 3rd level, you can use the Help action as a bonus action. \ Additionally, when you use the Help action to aid an ally in attacking a creature, \ the target of that attack can be within 30 feet of you, rather than 5 feet of you, \ if the target can see or hear you.' ), } new_stuff = { 'features': new_features, 'proficiencies': new_proficiencies, } return new_stuff
def add_level_3_features(self, **kwargs): new_features = { 'fast_hands': feature.Feature( name='Fast Hands', description= 'Starting at 3rd level, you can use the bonus action granted by your Cunning Action \ to make a Dexterity (Sleight of Hand) check, use your thieves tools \ to disarm a trap or open a lock, or take the Use an Object action.' ), 'second_story_work': feature.Feature(name='Second-Story Work', description=''), } new_stuff = {'features': new_features} return new_stuff
def _add_level_3_features(self, **kwargs): self._append_feature( 'primeval_awareness', feature=feature.Feature( name='Primeval Awareness', description= 'Beginning at 3rd level, you can use your action and expend one Ranger spell slot \ to focus your awareness on the region around you..' )) self.specialization = RangerArchetype.get_ranger_archetype( kwargs['ranger_archetype']) self._add_specialization_features(self.level, **kwargs) # TODO make this a bit more elegant... list_spells = [] simple_spell_list = [ ('Hunters Mark', ddddd.entity.character.spells.SpellTypes.FIRST), ('Animal Friendship', ddddd.entity.character.spells.SpellTypes.FIRST), ('Longstrider', ddddd.entity.character.spells.SpellTypes.FIRST), ] for name, level in simple_spell_list: list_spells.append(spells.generate_simple_spell(name, level)) self.spellcasting = RangerSpellcastingAbility( casting_spells=list_spells, spell_slots={SpellTypes.FIRST: 3}, num_spells_known=3)
def add_level_15_features(self, **kwargs): new_features = { 'stand_against_the_tide': feature.Feature(name='Stand Against the Tide', description=''), } new_stuff = {'features': new_features} return new_stuff
def add_level_11_features(self, **kwargs): new_features = { 'whirlwind_attack': feature.Feature(name='Whirlwind Attack', description=''), } new_stuff = {'features': new_features} return new_stuff
def add_level_9_features(self, **kwargs): new_features = { 'escape_the_horde': feature.Feature(name='Escape the Horde', description=''), } new_stuff = {'features': new_features} return new_stuff
def add_level_3_features(self, **kwargs): new_features = { 'coloussus_slayer': feature.Feature(name='Colussus Slayer', description=''), } new_stuff = {'features': new_features} return new_stuff
def add_level_1_features(self, **kwargs): languages = kwargs['languages'] skills = kwargs['skills'] new_features = { 'divine_domain': feature.Feature(name='Divine Domain', description='You have chosen to worship Ioun, goddess of knowledge. \ Your divine domain is the Knowledge Domain.'), 'blessings_of_knowledge': feature.Expertise(name='Blessings of Knowledge', description='You become proficient in your choice of two of the following skills: \ Arcana, History, Nature, or Religion. Your proficiency bonus is doubled \ for any ability check you make that uses either of those skills.', skills=skills, proficiencies=None), 'blessings_of_knowledge_languages': feature.LanguagesKnown(name='Blessings of Knowledge: Languages', description='At 1st level, you learn two languages of your choice.', languages=languages.languages), } simple_spell_list = [ ('Command', ddddd.entity.character.spells.SpellTypes.FIRST), ('Identify', ddddd.entity.character.spells.SpellTypes.FIRST), ] casting_spells = spells.generate_simple_spell_list(simple_spell_list) new_stuff = { 'features': new_features, 'domain_spells': casting_spells, } return new_stuff
def _add_level_5_features(self, **kwargs): self._append_feature( 'extra_attack', feature=feature.Feature( name='Extra Attack', description= 'Beginning at 5th level, you can Attack twice, instead of once, \ whenever you take the Attack action on Your Turn.' )) # TODO make this a bit more elegant... list_spells = [] simple_spell_list = [ ('Hunters Mark', ddddd.entity.character.spells.SpellTypes.FIRST), ('Animal Friendship', ddddd.entity.character.spells.SpellTypes.FIRST), ('Longstrider', ddddd.entity.character.spells.SpellTypes.FIRST), ('Pass without Trace', ddddd.entity.character.spells.SpellTypes.SECOND), ] for name, level in simple_spell_list: list_spells.append(spells.generate_simple_spell(name, level)) self.spellcasting = RangerSpellcastingAbility( casting_spells=list_spells, spell_slots={ SpellTypes.FIRST: 4, SpellTypes.SECOND: 2 }, num_spells_known=4)
def add_level_9_features(self, **kwargs): new_features = { 'supreme_sneak': feature.Feature(name='Supreme Sneak', description=''), } new_stuff = {'features': new_features} return new_stuff
def add_level_13_features(self, **kwargs): new_features = { 'use_magic_device': feature.Feature(name='Use Magic Device', description=''), } new_stuff = {'features': new_features} return new_stuff
def add_level_17_features(self, **kwargs): new_features = { 'thiefs_reflexes': feature.Feature(name='Thieves' ' Reflexes', description=''), } new_stuff = {'features': new_features} return new_stuff
def add_level_6_features(self, **kwargs): new_features = { 'channel_divinity_read_thoughts': feature.Feature(name='Channel Divinity: Read Thoughts', description='At 6th level, you can use your \ Channel Divinity to read a creature''s thoguhts.') } new_stuff = {'features': new_features} return new_stuff
def _add_level_2_features(self, **kwargs): super(Cleric, self)._add_level_2_features(**kwargs) self._append_feature('channel_divinity', feature=feature.Feature(name='Channel Divinity', description='At 2nd level, you gain the ability to channel divine energy directly \ from your deity, using that energy to fuel magical effects. When you finish a short \ or long rest, you regain your expended uses.')) self._append_feature('channel_divinity_turn_undead', feature=feature.Feature(name='Channel Divinity: Turn Undead', description='As an action, you present your holy symbol \ and speak a prayer censuring the undead.')) spellcasting = ClericSpellcastingAbility(level=2, cantrips=self.spellcasting.cantrips, domain_spells=self.spellcasting.casting_spells) self.spellcasting = spellcasting
def add_level_17_features(self, **kwargs): new_features = { 'visions_of_the_past': feature.Feature(name='Visions of the Past', description='Starting at 17th level, you can call up \ visions of the past that relate to an object you hold or your immediate surroundings.') } new_stuff = {'features': new_features} return new_stuff
def _add_level_7_features(self, **kwargs): super(Rogue, self)._add_level_7_features(**kwargs) self._append_feature( 'evasion', feature=feature.Feature( name='Evasion', description='Beginning at 7th level, you can nimbly dodge \ out of the way of certain area effects.' ))
def _add_level_11_features(self, **kwargs): super(Rogue, self)._add_level_11_features(**kwargs) self._append_feature( 'reliable_talent', feature=feature.Feature( name='Reliable Talent', description='By 11th level, you have refined your chosen skills \ until they approach perfection.' ))
def _add_level_20_features(self, **kwargs): super(Rogue, self)._add_level_20_features(**kwargs) self._append_feature( 'stroke_of_luck', feature=feature.Feature( name='Stroke of Luck', description='At 20th level, you have an uncanny knack \ for succeeding when you need to.' ))
def _add_level_18_features(self, **kwargs): super(Rogue, self)._add_level_18_features(**kwargs) self._append_feature( 'elusive', feature=feature.Feature( name='Elusive', description='Beginning at 18th level, you are so evasive \ that attackers rarely gain the upper hand against you.' ))
def _add_level_15_features(self, **kwargs): super(Rogue, self)._add_level_15_features(**kwargs) self._append_feature( 'slippery_mind', feature=feature.Feature( name='Slippery Mind', description='By 15th level, you have acquired greater \ mental strength. You gain proficiency in Wisdom saving throws.' ))
def _add_level_14_features(self, **kwargs): super(Rogue, self)._add_level_14_features(**kwargs) self._append_feature( 'blindsense', feature=feature.Feature( name='Blindsense', description='Starting at 14th level, if you are able to hear, \ you are aware of the location of any hidden or invisible creature \ within 10 feet of you.'))
def _add_level_5_features(self, **kwargs): super(Rogue, self)._add_level_5_features(**kwargs) self._append_feature( 'uncanny_dodge', feature=feature.Feature( name='Uncanny Dodge', description='Starting at 5th level, when an attacker that \ you can see hits you with an Attack, you can use your Reaction \ to halve the attack' 's damage against you.'))
def _add_level_2_features(self, **kwargs): super(Rogue, self)._add_level_2_features(**kwargs) self._append_feature( 'cunning_action', feature=feature.Feature( name='Cunning Action', description= 'Starting at 2nd level, your quick thinking and agility \ allow you to move and act quickly.' ))
def add_level_2_features(self, **kwargs): new_features = { 'channel_divinity_knowledge_of_the_ages': feature.Feature(name='Channel Divinity: Knowledge of the Ages', description='Starting at 2nd level, you can use \ your Channel Divinity to tap into a divine well of knowledge. \ As an action, you choose one skill or tool. \ For 10 minutes, you have proficiency with the chosen skill or tool.') } new_stuff = {'features': new_features} return new_stuff
def get_draconic_ancestry_traits(self, draconic_ancestry): if draconic_ancestry not in self._DRACONIC_ANCESTRY: raise ValueError('{} is not a valid draconic ancestry!') ancestry_details = self._DRACONIC_ANCESTRY[draconic_ancestry] traits = [ feature.Feature( name='Draconic Ancestry', description='You have Draconic ancestry with a {} dragon.'. format(draconic_ancestry)), feature.DamageResistance( damage_type=ancestry_details['damage_type']), feature.Feature( name='Breath Weapon', description= 'You can use your action to exhale destructive energy.') ] return traits
def _add_level_5_features(self, **kwargs): super(Cleric, self)._add_level_5_features(**kwargs) self._append_feature('channel_divinity_destroy_undead', feature=feature.Feature( name='Channel Divinity: Destroy Undead (CR 1/2)', description='Starting at 5th level, when an undead fails its saving throw \ against your Turn Undead feature, the creature is instantly destroyed \ if its challenge rating is at or below CR 1/2.')) self._append_feature('channel_divinity', feature=feature.Feature(name='Channel Divinity (2/rest)', description='At 2nd level, you gain the ability to channel divine energy directly \ from your deity, using that energy to fuel magical effects. When you finish a short \ or long rest, you regain your expended uses.')) spellcasting = ClericSpellcastingAbility(level=5, cantrips=self.spellcasting.cantrips, domain_spells=self.spellcasting.casting_spells) self.spellcasting = spellcasting
def __init__(self, languages): f = feature.Feature(name='Researcher', description='When you attempt to learn or recall a piece of lore, if you do not know \ that information, you often know where and from whom you can obtain it ...') proficiencies = { base.SKILLS: [Skills.ARCANA, Skills.HISTORY], } super(Sage, self).__init__(name='Sage', feature=f, proficiencies=proficiencies, languages=languages)
def add_level_13_features(self, **kwargs): new_features = { 'misdirection': feature.Feature( name='Misdirection', description='Beginning at 13th level, you can sometimes cause \ another creature to suffer an attack meant for you.' ) } new_stuff = {'features': new_features} return new_stuff
def add_level_9_features(self, **kwargs): new_features = { 'insightful_manipulator': feature.Feature( name='Insightful Manipulator', description='You can learn certain information about \ its capabilities compared to your own' ), } new_stuff = {'features': new_features} return new_stuff
def _add_level_20_features(self, **kwargs): super(Cleric, self)._add_level_20_features(**kwargs) self._append_feature('divine_intervention', feature=feature.Feature(name='Improved Divine Intervention', description='At 20th level, your call for intervention succeeds automatically, \ no roll required.')) spellcasting = ClericSpellcastingAbility(level=20, cantrips=self.spellcasting.cantrips, domain_spells=self.spellcasting.casting_spells) self.spellcasting = spellcasting