class Moose(Animal): name = "Moose" hit_dice = dice.D8(3) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [AttackSet(Headbutt(dice.D6(1)))] base_armor_class = 13 morale = 5 movement = movement.MovementSet(walk=units.FeetPerGameTurn(80), turning_distance=units.Feet(10)) no_appearing = AppearingSet(dice_wild=dice.D10(3)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set xp = 145
class CarnivorousApe(Animal): name = "Carnivorous Ape" hit_dice = dice.D8(4) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [AttackSet(Claw(dice.D4(1)), amount=2)] base_armor_class = 14 morale = 7 movement = movement.MovementSet(walk=units.FeetPerGameTurn(40)) no_appearing = AppearingSet(dice_dungeon=dice.D6(1), dice_wild=dice.D4(2), dice_lair=dice.D4(2)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set xp = 240
class Deer(Antelope): name = "Deer" hit_dice = dice.D8(1) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [AttackSet(Headbutt(dice.D4(1)))] base_armor_class = 13 morale = 5 movement = movement.MovementSet(walk=units.FeetPerGameTurn(80), turning_distance=units.Feet(10)) no_appearing = AppearingSet(dice_wild=dice.D10(3)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set size = Size.Medium weight = units.Pound(220) xp = 25
class GiantBombardierBeetle(Insect): name = "Giant Bombardier Beetle" hit_dice = dice.D8(2) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [AttackSet(Bite(dice.D4(1)))] base_armor_class = 16 morale = 9 movement = movement.MovementSet(walk=units.FeetPerGameTurn(10), fly=units.Feet(50)) no_appearing = AppearingSet(dice_dungeon=dice.D6(1), dice_wild=dice.D6(1), dice_lair=dice.D6(5)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set special_abilities = specialabilities.CombatFrenzy, treasure_type = TreasureType.Special xp = 13
class Donkey(Horse): name = "Donkey" attack_bonus = AttackBonusTable.get_by_hit_dice(2) attack_sets = [AttackSet(Bite(dice.D2(1)))] base_armor_class = 13 carry_capacity = CarryCapacity(units.Pound(400), units.Pound(800)) hit_dice = dice.D8(2) morale = 7 movement = movement.MovementSet(walk=units.FeetPerGameTurn(40), turning_distance=units.Feet(10)) no_appearing = AppearingSet(dice_wild=dice.D4(2)) save_as = Fighter.level_table.levels[2].saving_throws_set special_abilities = None treasure_type = None xp = 75
def attack_bonus(self): level = 1 if self.host.experience: level = self.host.experience.level if self.host.character_class: class_attack_bonus = self.host.character_class.get_attack_bonus( level) return class_attack_bonus if self.host.monster: return self.host.monster.attack_bonus return AttackBonusTable.get_by_hit_dice( self.host.health.total_hit_dice_value)
class GiantBat(Animal): name = "Giant Bat" hit_dice = dice.D8(2) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [AttackSet(Bite(dice.D4(1)))] base_armor_class = 14 morale = 8 movement = movement.MovementSet(walk=units.FeetPerGameTurn(10), fly=units.FeetPerGameTurn(60)) no_appearing = AppearingSet(dice_dungeon=dice.D10(1), dice_wild=dice.D10(1), dice_lair=dice.D10(1)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set xp = 75
class Bat(Animal): name = "Bat" hit_dice = dice.D1(1) attack_bonus = AttackBonusTable.get_by_hit_dice(0) attack_sets = [AttackSet(ConfusionBySwarm(None))] base_armor_class = 14 morale = 7 movement = movement.MovementSet(walk=units.FeetPerGameTurn(30), fly=units.FeetPerGameTurn(40)) no_appearing = AppearingSet(dice_dungeon=dice.D100(1), dice_wild=dice.D100(2), dice_lair=dice.D100(2)) save_as = None xp = 10
class Pony(Horse): name = "Pony" attack_bonus = AttackBonusTable.get_by_hit_dice(1) attack_sets = [AttackSet(Bite(dice.D4(1)))] base_armor_class = 13 carry_capacity = CarryCapacity(units.Pound(275), units.Pound(550)) hit_dice = dice.D8(2) morale = 6 movement = movement.MovementSet(walk=units.FeetPerGameTurn(40), turning_distance=units.Feet(10)) no_appearing = None save_as = Fighter.level_table.levels[1].saving_throws_set special_abilities = None treasure_type = None xp = 25
class DraftHorse(Horse): name = "Draft Horse" attack_bonus = AttackBonusTable.get_by_hit_dice(3) attack_sets = [AttackSet(Hoof(dice.D4(1)), amount=2)] base_armor_class = 13 carry_capacity = CarryCapacity(units.Pound(350), units.Pound(700)) hit_dice = dice.D8(3) morale = 7 movement = movement.MovementSet(walk=units.FeetPerGameTurn(60), turning_distance=units.Feet(10)) no_appearing = None save_as = Fighter.level_table.levels[3].saving_throws_set special_abilities = None treasure_type = None xp = 145
class GiantAnt(Ant): name = "Giant Ant" hit_dice = dice.D8(4) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [AttackSet(Bite(dice.D6(2)))] base_armor_class = 17 morale = 7 movement = movement.MovementSet(walk=units.FeetPerGameTurn(60), turning_distance=units.Feet(10)) no_appearing = AppearingSet(dice_dungeon=dice.D6(2), dice_wild=dice.D6(2), dice_lair=dice.D6(4)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set size = Size.Medium special_abilities = specialabilities.CombatFrenzy, treasure_type = TreasureType.U weight = units.Pound(200) xp = 25
class AssassinVine(Plant): name = "Assassin Vine" hit_dice = dice.D8(6) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [ AttackSet(Crush(dice.D8(1)), special_properties=(CrushingEntanglement, )) ] base_armor_class = 15 morale = 12 movement = movement.MovementSet(walk=units.FeetPerGameTurn(5)) no_appearing = AppearingSet(dice_dungeon=dice.D4(1, 1)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set treasure_type = TreasureType.U xp = 500
class Goblin(Humanoid): name = "Goblin" hit_dice = dice.D1(1) attack_bonus = AttackBonusTable.get_by_hit_dice(1) attack_sets = None base_armor_class = 11 morale = 7 movement = movement.MovementSet(walk=units.FeetPerGameTurn(30)) no_appearing = AppearingSet(dice_dungeon=dice.D4(2), dice_wild=dice.D10(6), dice_lair=dice.D10(6)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set special_abilities = SpecialAbilitySet((Darkvision, )) size = Size.Small weight = units.Pound(45) xp = 10
class Skeleton(Undead): name = "Skeleton" hit_dice = dice.D8(1) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) base_armor_class = 13 morale = 12 movement = movement.MovementSet(walk=units.FeetPerGameTurn(40)) no_appearing = AppearingSet(dice_dungeon=dice.D6(3), dice_wild=dice.D10(3)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set size = Size.Medium special_abilities = (specialabilities.EdgedWeaponResistance, specialabilities.ProjectileResistance, specialabilities.SleepImmunity, specialabilities.CharmImmunity, specialabilities.HoldImmunity, specialabilities.Mindless) treasure_type = None weight = units.Pound(100) xp = 25
class Basilisk(Insect): name = "Basilisk" hit_dice = dice.D8(6) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [ AttackSet(Bite(dice.D10(1))), AttackSet(Gaze(None), special_properties=specialproperties.Petrify) ] base_armor_class = 16 morale = 9 movement = movement.MovementSet(walk=units.FeetPerGameTurn(20), turning_distance=units.Feet(10)) no_appearing = AppearingSet(dice_dungeon=dice.D6(1), dice_wild=dice.D6(1), dice_lair=dice.D6(1)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set special_abilities = specialabilities.CombatFrenzy, treasure_type = TreasureType.F xp = 610
class PolarBear(Bear): name = "Polar Bear" hit_dice = dice.D8(6) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [ AttackChain( AttackSet(Claw(dice.D6(1)), amount=2, special_properties=specialproperties.BearHug), AttackSet(Bite(dice.D10(1))) ), AttackSet(Crush(dice.D8(2))) ] base_armor_class = 14 morale = 8 movement = movement.MovementSet(walk=units.FeetPerGameTurn(40)) no_appearing = AppearingSet(dice_dungeon=dice.D1(1), dice_wild=dice.D2(1), dice_lair=dice.D2(1)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set special_abilities = SpecialAbilitySet((LastBreath,)) size = Size.Large weight = units.Pound(992) xp = 500
class CaveBear(Animal): name = "Cave Bear" hit_dice = dice.D8(7) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [ AttackChain( AttackSet(Claw(dice.D8(1)), amount=2, special_properties=specialproperties.BearHug), AttackSet(Bite(dice.D6(2)))), AttackSet(Crush(dice.D8(2))) ] base_armor_class = 15 morale = 9 movement = movement.MovementSet(walk=units.FeetPerGameTurn(40)) no_appearing = AppearingSet(dice_dungeon=dice.D2(1), dice_wild=dice.D2(1), dice_lair=dice.D2(1)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set special_abilities = SpecialAbilitySet((LastBreath, )) xp = 670
class GiantBee(Bee): name = "Giant Bee" hit_dice = dice.D4(1) attack_bonus = AttackBonusTable.get_by_hit_dice(hit_dice.amount) attack_sets = [ AttackSet(Sting(dice.D4(1)), special_properties=specialproperties.DeathPoison) ] base_armor_class = 13 morale = 9 movement = movement.MovementSet(walk=units.FeetPerGameTurn(10), fly=units.Feet(50)) no_appearing = AppearingSet(dice_dungeon=dice.D6(1), dice_wild=dice.D6(1), dice_lair=dice.D6(5)) save_as = Fighter.level_table.levels[hit_dice.amount].saving_throws_set size = Size.VerySmall special_abilities = specialabilities.CombatFrenzy, treasure_type = TreasureType.Special weight = units.Pound(10) xp = 13