class CloudKill(Spell): name = "Cloudkill" class_level_map = { classes.MagicUser: 5, } duration = SpellDuration(duration_per_level=units.CombatRound(6)) range = SpellRange(base_range=units.Feet(100), range_per_level=units.Feet(10))
class Fireball(Spell): name = "Fireball" class_level_map = { classes.MagicUser: 3, } duration = Instantaneous() range = SpellRange(base_range=units.Feet(100), range_per_level=units.Feet(10))
class AnimateObjects(Spell): name = "Animate Objects" class_level_map = { classes.Cleric: 6, } duration = SpellDuration(duration_per_level=units.CombatRound(1)) range = SpellRange(base_range=units.Feet(100), range_per_level=units.Feet(10))
class GrowthOfAnimals(Spell): name = "Growth of Animals" class_level_map = { classes.Cleric: 3, } duration = SpellDuration(duration_per_level=units.GameTurn(1)) range = SpellRange(base_range=units.Feet(60), range_per_level=units.Feet(10))
class Sling(RangedWeapon): name = "Sling" ranged_range = RangeSet(units.Feet(30), units.Feet(60), units.Feet(90)) ranged_damage = None ranged_ammunition_type = Bullet price = coins.Gold(1) size = Size.Small weight = units.Pound(0.1)
class Longbow(Bow): name = "Longbow" melee_damage = dice.D2(1) ranged_range = RangeSet(units.Feet(70), units.Feet(140), units.Feet(210)) ranged_damage = None ranged_ammunition_type = LongbowArrow price = coins.Silver(2) size = Size.Large weight = units.Pound(3)
class Torch(LightItem): name = "Torch" bright_light_radius = units.Feet(30) dim_light_radius = units.Feet(20) fuel = None fuel_duration = units.GameTurn(4) last_life_dice = dice.D4(1) light_shape = Shape.Circle price = coins.Silver(1) weight = units.Pound(0.2)
class Shortbow(Bow): name = "Shortbow" melee_damage = dice.D2(1) ranged_range = RangeSet(units.Feet(50), units.Feet(100), units.Feet(150)) ranged_damage = None ranged_ammunition_type = ShortbowArrow price = coins.Gold(2) size = Size.Small weight = units.Pound(1)
class Lantern(LightItem): name = "Lantern" bright_light_radius = units.Feet(30) dim_light_radius = units.Feet(20) fuel = items.weapons.throwing.common.OilFlask fuel_duration = units.GameTurn(18) last_life_dice = dice.D6(1) light_shape = Shape.Circle price = coins.Gold(5) weight = units.Pound(2)
class Candle(LightItem): name = "Torch" bright_light_radius = units.Feet(5) dim_light_radius = units.Feet(5) fuel = None fuel_duration = units.GameTurn(4) last_life_dice = dice.D4(1) light_shape = Shape.Circle price = coins.Copper(10) weight = units.Pound(0.1)
class Gnoll(Race): name = "Gnoll" average_height = units.Feet(7) average_weight = units.Pound(300) average_lifespan = timedelta(days=27375) racial_class = racialclass.Gnoll restriction_set = restrictions.RestrictionSet( ability_score=restrictions.AbilityScoreRestrictionSet( minimum_set=abilityscores.AbilityScoreSet(strength=13, constitution=11), maximum_set=abilityscores.AbilityScoreSet(charisma=15, intelligence=15), ), classes=restrictions.ClassRestrictionSet(included=(classes.Cleric, classes.Fighter, classes.MagicUser)), ) racial_language = languages.Bugbear special_ability_set = specialabilities.SpecialAbilitySet(( specialabilities.Darkvision, specialabilities.PowerfulScent, )) saving_throw_set = savingthrows.SavingThrowSet( death_poison=-4, paralysis_stone=-4, )
class Clairvoyance(Spell): name = "Blade Barrier" class_level_map = { classes.MagicUser: 3, } duration = SpellDuration(duration_per_level=units.GameTurn(12)) range = SpellRange(base_range=units.Feet(60))
class CharmMonster(Spell): name = "Charm Monster" class_level_map = { classes.MagicUser: 4, } duration = Special() range = SpellRange(base_range=units.Feet(30))
class ConjureElemental(Spell): name = "Conjure Elemental" class_level_map = { classes.MagicUser: 5, } duration = Special() range = SpellRange(base_range=units.Feet(240))
class Dwarf(Race): name = "Dwarf" average_height = units.Feet(4) average_weight = units.Pound(120) average_lifespan = timedelta(days=36500) restriction_set = restrictions.RestrictionSet( ability_score=restrictions.AbilityScoreRestrictionSet( minimum_set=abilityscores.AbilityScoreSet(constitution=9), maximum_set=abilityscores.AbilityScoreSet(charisma=17), ), classes=restrictions.ClassRestrictionSet(included=(classes.Cleric, classes.Fighter, classes.Thief)), weapons=restrictions.WeaponRestrictionSet(excluded=( bflib.items.weapons.melee.swords.TwoHandedSword, bflib.items.weapons.melee.polearms.Polearm, bflib.items.weapons.ranged.bows.Longbow, ))) racial_language = languages.Dwarvish special_ability_set = specialabilities.SpecialAbilitySet(( specialabilities.Darkvision, specialabilities.DetectNewConstructions, specialabilities.DetectShiftingWalls, specialabilities.DetectSlantingPassages, specialabilities.DetectTraps, )) saving_throw_set = savingthrows.SavingThrowSet(death_poison=-4, dragon_breath=-3, paralysis_stone=-4, spells=-4, wands=-4)
class Halfling(Race): name = "Halfling" average_height = units.Feet(3) average_weight = units.Pound(60) average_lifespan = timedelta(days=109500) restriction_set = restrictions.RestrictionSet( ability_score=restrictions.AbilityScoreRestrictionSet( minimum_set=abilityscores.AbilityScoreSet(dexterity=9), maximum_set=abilityscores.AbilityScoreSet(strength=17), ), classes=restrictions.ClassRestrictionSet(included=(classes.Cleric, classes.Fighter, classes.Thief), ), hit_dice_max_size=restrictions.HitDiceMaxSizeRestriction(dice.D6), weapon_size=restrictions.WeaponSizeRestrictionSet( large=restrictions.WeaponSizeRestrictionSet.keywords.CannotWield, medium=restrictions.WeaponSizeRestrictionSet.keywords. NeedsTwoHands, small=restrictions.WeaponSizeRestrictionSet.keywords.CanWield, )) racial_language = languages.Halfling special_ability_set = specialabilities.SpecialAbilitySet( (specialabilities.HalflingHide, specialabilities.InitiativeBonus(1), specialabilities.MeleeDefenseBonus(2), specialabilities.RangedWeaponAccuracyBonus(1))) saving_throw_set = savingthrows.SavingThrowSet(death_poison=-4, dragon_breath=-3, paralysis_stone=-4, spells=-4, wands=-4)
class AntiMagicShell(Spell): name = "Anti-Magic Shell" class_level_map = { classes.MagicUser: 6, } duration = SpellDuration(duration_per_level=units.CombatRound(1)) range = SpellRadius(base_radius=units.Feet(10))
class ESP(Spell): name = "ESP" class_level_map = { classes.MagicUser: 2, } duration = SpellDuration(duration_per_level=units.GameTurn(1)) range = SpellRange(base_range=units.Feet(60))
class DimensionDoor(Spell): name = "Dimension Door" class_level_map = { classes.MagicUser: 4, } duration = Instantaneous() range = SpellRange(base_range=units.Feet(10))
class Goblin(Race): name = "Goblin" average_height = units.Feet(3) average_weight = units.Pound(45) average_lifespan = timedelta(days=18250) restriction_set = restrictions.RestrictionSet( ability_score=restrictions.AbilityScoreRestrictionSet( minimum_set=abilityscores.AbilityScoreSet(dexterity=9), maximum_set=abilityscores.AbilityScoreSet(strength=16, constitution=16), ), weapon_size=restrictions.WeaponSizeRestrictionSet( large=restrictions.WeaponSizeRestrictionSet.keywords.CannotWield, medium=restrictions.WeaponSizeRestrictionSet.keywords. NeedsTwoHands, small=restrictions.WeaponSizeRestrictionSet.keywords.CanWield, )) racial_language = languages.Goblin special_ability_set = specialabilities.SpecialAbilitySet(( specialabilities.Darkvision, specialabilities.FeebleConstitution(1), specialabilities.MeleeDefenseBonus(2), specialabilities.DetectNewConstructions, specialabilities.DetectSecretDoor, specialabilities.DetectShiftingWalls, specialabilities.DetectSlantingPassages, specialabilities.DetectTraps, specialabilities.OpenLock(10), specialabilities.RemoveTraps(10), ))
class DetectInvisible(Spell): name = "Detect Invisible" class_level_map = { classes.MagicUser: 2, } duration = SpellDuration(duration_per_level=units.CombatRound(1)) range = SpellRange(base_range=units.Feet(60))
class CreateFood(Spell): name = "Create Food" class_level_map = { classes.Cleric: 5, } duration = Permanent() range = SpellRange(base_range=units.Feet(10))
class Feeblemind(Spell): name = "Feeblemind" class_level_map = { classes.MagicUser: 5, } duration = Permanent() range = SpellRange(base_range=units.Feet(180))
class Disintegrate(Spell): name = "Disintegrate" class_level_map = { classes.MagicUser: 6, } duration = Instantaneous() range = SpellRange(base_range=units.Feet(60))
class FindTraps(Spell): name = "Find Traps" class_level_map = { classes.Cleric: 2, } duration = SpellDuration(base_duration=units.GameTurn(3)) range = SpellRange(units.Feet(30))
class DeathSpell(Spell): name = "Death Spell" class_level_map = { classes.MagicUser: 6, } duration = Instantaneous range = SpellRange(units.Feet(240))
class BladeBarrier(Spell): name = "Blade Barrier" class_level_map = { classes.Cleric: 6, } duration = SpellDuration(duration_per_level=units.CombatRound(1)) range = SpellRange(base_range=units.Feet(90))
class CharmPerson(Spell): name = "Charm Person" class_level_map = { classes.MagicUser: 1, } duration = Special() range = SpellRange(base_range=units.Feet(30))
class Geas(Spell): name = "Geas" class_level_map = { classes.MagicUser: 6, } duration = Special() range = SpellRange(units.Feet(5)) reverse_spell = ReverseGeas
class CharmAnimal(Spell): name = "Charm Animal" class_level_map = { classes.Cleric: 2, } duration = SpellDuration(base_duration=dice.D4(1), duration_per_level=units.CombatRound(1)) range = SpellRange(base_range=units.Feet(60))