class FireGiant(base.Monster): name = "Fire Giant" statline = { stats.STRENGTH: 31, stats.TOUGHNESS: 21, stats.REFLEXES: 9, \ stats.INTELLIGENCE: 10, stats.PIETY: 14, stats.CHARISMA: 11 } SPRITENAME = "monster_giants.png" FRAME = 11 TEMPLATES = (stats.FIRE, ) MOVE_POINTS = 10 HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_FIRE, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_GIANT) ENC_LEVEL = 12 TREASURE = treasuretype.Standard() ATTACK = items.Attack((3, 6, 0), element=stats.RESIST_SLASHING) TECHNIQUES = (invocations.Invocation( "Rock", effects.PhysicalAttackRoll( att_stat=stats.REFLEXES, on_success=( effects.HealthDamage((2, 6, 0), stat_bonus=stats.STRENGTH, element=stats.RESIST_CRUSHING, anim=animobs.RedBoom), effects.HealthDamage((2, 6, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud), ), on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )), com_tar=targetarea.SingleTarget(reach=10), shot_anim=animobs.SlingStone, ai_tar=invocations.TargetEnemy()), ) def init_monster(self): self.levels.append(base.Humanoid(15, self))
class Umbull(base.Monster): name = "Umbull" statline = { stats.STRENGTH: 23, stats.TOUGHNESS: 19, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 9, stats.PIETY: 11, stats.CHARISMA: 13 } SPRITENAME = "monster_default.png" FRAME = 4 TEMPLATES = () MOVE_POINTS = 8 HABITAT = (context.HAB_CAVE, context.SET_EVERY, context.MAP_DUNGEON, context.DES_EARTH) ENC_LEVEL = 9 COMBAT_AI = aibrain.BruiserAI() TREASURE = treasuretype.Standard() ATTACK = items.Attack((3, 6, 0), element=stats.RESIST_SLASHING) TECHNIQUES = (invocations.Invocation( "Freezing Gaze", effects.OpposedRoll( att_modifier=20, on_success=(effects.Paralyze(max_duration=6), ), on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )), com_tar=targetarea.SingleTarget(), shot_anim=animobs.PurpleVortex, ai_tar=invocations.TargetMobileEnemy()), ) def init_monster(self): self.levels.append(base.Defender(9, self))
class Harpy( base.Monster ): name = "Harpy" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 15, \ stats.INTELLIGENCE: 7, stats.PIETY: 12, stats.CHARISMA: 17 } SPRITENAME = "monster_default.png" FRAME = 38 TEMPLATES = () MOVE_POINTS = 8 VOICE = dialogue.voice.GREEK HABITAT = ( context.HAB_EVERY, context.HAB_CAVE, context.SET_EVERY, context.DES_LUNAR, context.MTY_HUMANOID, context.MTY_BOSS, context.GEN_CHAOS ) ENC_LEVEL = 6 TREASURE = treasuretype.Standard() ATTACK = items.Attack( (2,4,0), element = stats.RESIST_SLASHING ) TECHNIQUES = (invocations.MPInvocation( "Sleep Song", effects.TargetIsEnemy( anim=animobs.SonicHit, on_true = ( effects.TargetIs( pat=effects.ANIMAL, on_true = ( effects.OpposedRoll( att_modifier=0, on_success = ( effects.CauseSleep(), )),) ,), )), com_tar=targetarea.SelfCentered(radius=6,delay_from=-1), ai_tar=invocations.TargetMobileEnemy(), mp_cost=8 ), ) def init_monster( self ): self.levels.append( base.Humanoid( 7, self ) )
class Chimera( base.Monster ): name = "Chimera" # This is based on the version from the Pathfinder SRD rather than the # regular SRD; the only difference is the beefed-up breath weapon. statline = { stats.STRENGTH: 19, stats.TOUGHNESS: 17, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 4, stats.PIETY: 13, stats.CHARISMA: 10, stats.AWARENESS: 50 } SPRITENAME = "monster_by_Joe.png" FRAME = 0 TEMPLATES = () MOVE_POINTS = 12 VOICE = dialogue.voice.GREEK HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.DES_FIRE, context.MTY_BEAST, context.GEN_CHAOS, context.MTY_BOSS ) ENC_LEVEL = 9 TREASURE = treasuretype.Standard() ATTACK = items.Attack( (2,8,0), element = stats.RESIST_PIERCING ) TECHNIQUES = ( invocations.MPInvocation( "Fire Breath", effects.OpposedRoll( att_stat=stats.REFLEXES, def_stat=stats.REFLEXES, on_success = ( effects.HealthDamage( (6,8,0), stat_bonus=stats.TOUGHNESS, element=stats.RESIST_FIRE, anim=animobs.RedCloud ) ,), on_failure = ( effects.HealthDamage( (3,8,0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud ) ,) ), com_tar=targetarea.Cone(reach=4), ai_tar=invocations.TargetEnemy(), mp_cost=16 ), ) def init_monster( self ): self.levels.append( base.Terror( 9, self ) )
class NoviceDruid(base.Monster): name = "Novice Druid" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 13, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 14, stats.PIETY: 14, stats.CHARISMA: 12 } SPRITENAME = "monster_spellcasters.png" FRAME = 8 TEMPLATES = () MOVE_POINTS = 10 HABITAT = (context.HAB_EVERY, context.HAB_FOREST, context.SET_EVERY, context.MAP_WILDERNESS, context.DES_SOLAR, context.DES_EARTH, context.DES_FIRE, context.MTY_HUMANOID, context.MTY_PRIEST, context.GEN_NATURE) ENC_LEVEL = 4 TREASURE = treasuretype.Standard( (items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll)) COMBAT_AI = aibrain.BasicTechnicalAI() COMPANIONS = (animals.Wolf, animals.BlackBear) ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_CRUSHING) TECHNIQUES = (spells.solarspells.MINOR_CURE, spells.earthspells.CALL_CRITTER, spells.earthspells.ACID_BOLT, spells.earthspells.BEASTLY_MIGHT) def init_monster(self): self.levels.append(base.Humanoid(2, self)) self.levels.append(base.Spellcaster(2, self))
class Salamander(base.Monster): name = "Salamander" statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 14, stats.REFLEXES: 14, \ stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 13 } SPRITENAME = "monster_e_fire.png" FRAME = 8 TEMPLATES = (stats.ELEMENTAL, stats.FIRE) MOVE_POINTS = 6 HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_FIRE, context.MTY_ELEMENTAL, context.GEN_IGNAN, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_BOSS) ENC_LEVEL = 8 TREASURE = treasuretype.Standard() ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_PIERCING, reach=2, extra_effect=effects.HealthDamage( (1, 8, 0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_FIRE, anim=animobs.OrangeExplosion)) TECHNIQUES = (spells.firespells.EXPLOSION, ) def init_monster(self): self.levels.append(base.Humanoid(8, self))
class Manticore(base.Monster): name = "Manticore" statline = { stats.STRENGTH: 20, stats.TOUGHNESS: 19, stats.REFLEXES: 15, \ stats.INTELLIGENCE: 7, stats.PIETY: 12, stats.CHARISMA: 9 } SPRITENAME = "monster_default.png" FRAME = 26 TEMPLATES = () MOVE_POINTS = 12 HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_BEAST, context.MTY_BOSS) ENC_LEVEL = 7 COMBAT_AI = aibrain.ArcherAI() TREASURE = treasuretype.Standard() ATTACK = items.Attack((2, 4, 0), element=stats.RESIST_PIERCING, extra_effect=abilities.POISON_ATTACK) TECHNIQUES = (invocations.MPInvocation( "Tail Spikes", effects.NoEffect(children=( effects.PhysicalAttackRoll( att_stat=stats.REFLEXES, att_modifier=5, on_success=(effects.HealthDamage((1, 8, 0), stat_bonus=stats.STRENGTH, element=stats.RESIST_PIERCING, anim=animobs.RedBoom), ), on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )), effects.PhysicalAttackRoll( att_stat=stats.REFLEXES, att_modifier=5, on_success=(effects.HealthDamage((1, 8, 0), stat_bonus=stats.STRENGTH, element=stats.RESIST_PIERCING, anim=animobs.RedBoom), ), on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )), effects.PhysicalAttackRoll( att_stat=stats.REFLEXES, att_modifier=5, on_success=(effects.HealthDamage((1, 8, 0), stat_bonus=stats.STRENGTH, element=stats.RESIST_PIERCING, anim=animobs.RedBoom), ), on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )), effects.PhysicalAttackRoll( att_stat=stats.REFLEXES, att_modifier=5, on_success=(effects.HealthDamage((1, 8, 0), stat_bonus=stats.STRENGTH, element=stats.RESIST_PIERCING, anim=animobs.RedBoom), ), on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )), ), ), mp_cost=10, com_tar=targetarea.SingleTarget(reach=9), shot_anim=animobs.GoldStone, ai_tar=invocations.TargetEnemy()), ) def init_monster(self): self.levels.append(base.Beast(6, self))
class Avoral(base.Monster): name = "Avoral" statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 20, stats.REFLEXES: 23, \ stats.INTELLIGENCE: 15, stats.PIETY: 16, stats.CHARISMA: 16, \ stats.AWARENESS: 65, stats.MAGIC_DEFENSE: 25 } SPRITENAME = "monster_celestial.png" FRAME = 12 TEMPLATES = (stats.CELESTIAL, stats.AIR) MOVE_POINTS = 16 HABITAT = (context.SET_EVERY, context.DES_SOLAR, context.DES_AIR, context.MTY_HUMANOID, context.MTY_CELESTIAL) ENC_LEVEL = 12 COMBAT_AI = aibrain.ArcherAI() TREASURE = treasuretype.Standard() TECHNIQUES = (invocations.Invocation("Avoral Missile", effects.HealthDamage( (1, 8, 0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion), com_tar=targetarea.SingleTarget(), shot_anim=animobs.WizardMissile, ai_tar=invocations.TargetEnemy()), invocations.Invocation( "Hold Person", effects.OpposedRoll( att_modifier=20, on_success=(effects.Paralyze(max_duration=3), ), on_failure=(effects.NoEffect( anim=animobs.SmallBoom), )), com_tar=targetarea.SingleTarget(), shot_anim=animobs.BlueComet, ai_tar=invocations.TargetMobileEnemy()), invocations.MPInvocation( "Thunder Strike", effects.OpposedRoll(on_success=(effects.HealthDamage( (3, 6, 0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LIGHTNING, anim=animobs.Spark), ), on_failure=(effects.HealthDamage( (1, 8, 0), stat_bonus=None, element=stats.RESIST_LIGHTNING, anim=animobs.Spark), )), mp_cost=16, com_tar=targetarea.Line(), ai_tar=invocations.TargetEnemy())) ATTACK = items.Attack((2, 8, 0), element=stats.RESIST_SLASHING) def init_monster(self): self.levels.append(base.Terror(7, self))
class Ogre( base.Monster ): name = "Ogre" statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 16, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 6, stats.PIETY: 8, stats.CHARISMA: 5 } SPRITENAME = "monster_giants.png" FRAME = 1 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.HAB_FOREST, context.SET_EVERY, context.SET_RENFAN, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_GIANT ) ENC_LEVEL = 4 TREASURE = treasuretype.Standard() ATTACK = items.Attack( (1,10,0), element = stats.RESIST_CRUSHING ) def init_monster( self ): self.levels.append( base.Humanoid( 4, self ) )
class Reptal(base.Monster): name = "Reptal" statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 15, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 8, stats.PIETY: 9, stats.CHARISMA: 9 } SPRITENAME = "monster_draconic.png" FRAME = 3 TEMPLATES = (stats.REPTILE, ) MOVE_POINTS = 10 VOICE = dialogue.voice.DRACONIAN HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_WATER, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_DRAGON) ENC_LEVEL = 3 TREASURE = treasuretype.Standard() ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_CRUSHING) def init_monster(self): self.levels.append(base.Humanoid(3, self))
class PewterGolem( base.Monster ): name = "Pewter Golem" statline = { stats.STRENGTH: 17, stats.TOUGHNESS: 13, stats.REFLEXES: 8, \ stats.INTELLIGENCE: 1, stats.PIETY: 11, stats.CHARISMA: 13 } SPRITENAME = "monster_constructs.png" FRAME = 10 TEMPLATES = (stats.CONSTRUCT,) MOVE_POINTS = 8 VOICE = None HABITAT = ( context.HAB_BUILDING, context.SET_EVERY, context.MTY_CONSTRUCT, ) ENC_LEVEL = 3 COMBAT_AI = aibrain.SteadyAI() TREASURE = treasuretype.Standard() ATTACK = items.Attack( (1,6,0), element = stats.RESIST_CRUSHING ) def init_monster( self ): self.levels.append( base.Defender( 3, self ) )
class Xorn(base.Monster): name = "Xorn" statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 15, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 10, stats.PIETY: 12, stats.CHARISMA: 10, \ stats.RESIST_PIERCING: 50, stats.RESIST_SLASHING: 50, stats.RESIST_FIRE: 100, \ stats.RESIST_COLD: 100, stats.STEALTH: 40 } SPRITENAME = "monster_e_earth.png" FRAME = 5 TEMPLATES = (stats.ELEMENTAL, stats.EARTH) MOVE_POINTS = 4 HABITAT = (context.HAB_CAVE, context.SET_EVERY, context.MTY_BOSS, context.MTY_ELEMENTAL, context.GEN_TERRAN, context.DES_EARTH) ENC_LEVEL = 9 TREASURE = treasuretype.Standard((items.GEM, )) ATTACK = items.Attack((3, 4, 0), element=stats.RESIST_SLASHING) def init_monster(self): self.levels.append(base.Defender(9, self))
class Warrior( base.Monster ): name = "Warrior" statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 14, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 10, stats.PIETY: 12, stats.CHARISMA: 12, stats.NATURAL_DEFENSE: 10, stats.COUNTER_ATTACK: 15 } SPRITENAME = "monster_people.png" FRAME = 9 TEMPLATES = () MOVE_POINTS = 8 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.DES_CIVILIZED, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_LEADER, context.GEN_KINGDOM ) ENC_LEVEL = 5 TREASURE = treasuretype.Standard((items.SWORD,)) ATTACK = items.Attack( (1,10,0), element = stats.RESIST_SLASHING ) def init_monster( self ): self.levels.append( base.Humanoid( 5, self ) )
class ChaosWarrior(base.Monster): name = "Chaos Warrior" statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 14, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 12, stats.NATURAL_DEFENSE: 15, stats.RESIST_POISON: 50 } SPRITENAME = "monster_chaos.png" FRAME = 13 TEMPLATES = () MOVE_POINTS = 8 HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_LEADER, context.GEN_CHAOS) ENC_LEVEL = 5 COMPANIONS = (Beastman, Centaur, Heretic, animals.MadDog) TREASURE = treasuretype.Standard((items.AXE, items.HEAVY_ARMOR)) ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_SLASHING) def init_monster(self): self.levels.append(base.Humanoid(5, self))
class Executioner( base.Monster ): name = "Executioner" statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 16, stats.REFLEXES: 12, stats.INTELLIGENCE: 10, stats.PIETY: 12, stats.CHARISMA: 10, stats.CRITICAL_HIT: 20 } SPRITENAME = "monster_people.png" FRAME = 6 TEMPLATES = () MOVE_POINTS = 8 HABITAT = ( context.HAB_EVERY, context.SET_RENFAN, context.MTY_HUMANOID, context.MTY_BOSS, context.MTY_FIGHTER, context.GEN_KINGDOM ) ENC_LEVEL = 7 TREASURE = treasuretype.Standard((items.AXE,)) COMPANIONS = (Bushwhacker,) ATTACK = items.Attack( (1,10,0), element = stats.RESIST_SLASHING ) def init_monster( self ): self.levels.append( base.Humanoid( 6, self ) )
class Wyvern( base.Monster ): name = "Wyvern" statline = { stats.STRENGTH: 19, stats.TOUGHNESS: 15, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 6, stats.PIETY: 12, stats.CHARISMA: 9 } SPRITENAME = "monster_default.png" FRAME = 44 TEMPLATES = (stats.DRAGON,) MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_BEAST, context.GEN_DRAGON ) ENC_LEVEL = 8 TREASURE = treasuretype.Standard() ATTACK = items.Attack( (2,6,0), element = stats.RESIST_PIERCING, extra_effect=abilities.POISON_ATTACK_1d8 ) TECHNIQUES = () def init_monster( self ): self.levels.append( base.Terror( 8, self ) )
class Highwayman( base.Monster ): name = "Highwayman" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 10, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 10 } SPRITENAME = "monster_people.png" FRAME = 4 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN, context.MAP_WILDERNESS, context.DES_CIVILIZED, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_THIEF ) ENC_LEVEL = 3 TREASURE = treasuretype.Standard() COMPANIONS = (NoviceThief,) ATTACK = items.Attack( (1,8,0), element = stats.RESIST_SLASHING ) def init_monster( self ): self.levels.append( base.Humanoid( 3, self ) )
class NoviceThief( base.Monster ): name = "Novice Thief" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 12, stats.PIETY: 10, stats.CHARISMA: 10, stats.STEALTH: 10 } SPRITENAME = "monster_people.png" FRAME = 2 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.DES_CIVILIZED, context.MTY_HUMANOID, context.MTY_THIEF ) ENC_LEVEL = 2 TREASURE = treasuretype.Standard() COMPANIONS = (NoviceWarrior,) ATTACK = items.Attack( (1,6,0), element = stats.RESIST_PIERCING ) def init_monster( self ): self.levels.append( base.Humanoid( 1, self ) )
class Bushwhacker( base.Monster ): name = "Bushwhacker" statline = { stats.STRENGTH: 13, stats.TOUGHNESS: 13, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 12, stats.NATURAL_DEFENSE: 10 } SPRITENAME = "monster_people.png" FRAME = 1 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_THIEF, context.MTY_LEADER, context.GEN_CHAOS ) ENC_LEVEL = 4 TREASURE = treasuretype.Standard() COMPANIONS = (Highwayman,) ATTACK = items.Attack( (1,8,0), element = stats.RESIST_SLASHING ) def init_monster( self ): self.levels.append( base.Humanoid( 4, self ) )
class Hooligan(base.Monster): name = "Hooligan" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 6, stats.PIETY: 10, stats.CHARISMA: 5, \ stats.NATURAL_DEFENSE: -5 } SPRITENAME = "monster_chaos.png" FRAME = 14 TEMPLATES = () MOVE_POINTS = 8 TREASURE = treasuretype.Standard() HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_LUNAR, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_CHAOS) ENC_LEVEL = 2 COMPANIONS = (animals.MadDog, ) ATTACK = items.Attack((1, 10, 0), element=stats.RESIST_CRUSHING) def init_monster(self): self.levels.append(base.Humanoid(2, self))
class Gargoyle( base.Monster ): name = "Gargoyle" statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 18, stats.REFLEXES: 14, \ stats.INTELLIGENCE: 6, stats.PIETY: 11, stats.CHARISMA: 7, stats.RESIST_CRUSHING: 50, stats.RESIST_PIERCING: 50, stats.RESIST_SLASHING: 50, stats.PHYSICAL_ATTACK: 10, stats.NATURAL_DEFENSE: 5 } SPRITENAME = "monster_default.png" FRAME = 22 TEMPLATES = (stats.EARTH,stats.ROCK) MOVE_POINTS = 16 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.MTY_BOSS, context.MAP_DUNGEON, context.DES_EARTH ) ENC_LEVEL = 5 TREASURE = treasuretype.Standard() ATTACK = items.Attack( (2,4,0), element = stats.RESIST_SLASHING ) TECHNIQUES = () def init_monster( self ): self.levels.append( base.Humanoid( 4, self ) )
class ReptalWarrior(base.Monster): name = "Reptal Warrior" statline = { stats.STRENGTH: 17, stats.TOUGHNESS: 15, stats.REFLEXES: 11, \ stats.INTELLIGENCE: 8, stats.PIETY: 9, stats.CHARISMA: 9, stats.NATURAL_DEFENSE: 10 } SPRITENAME = "monster_draconic.png" FRAME = 5 TEMPLATES = (stats.REPTILE, ) MOVE_POINTS = 10 VOICE = dialogue.voice.DRACONIAN HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_WATER, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_DRAGON) ENC_LEVEL = 4 TREASURE = treasuretype.Standard() COMPANIONS = (Reptal, animals.GiantLizard, animals.GiantFrog) ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_PIERCING) def init_monster(self): self.levels.append(base.Humanoid(4, self))
class SkeletonWithDagger( base.Monster ): name = "Skeleton" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 1 } SPRITENAME = "monster_skeletons.png" FRAME = 1 TEMPLATES = (stats.UNDEAD,stats.BONE) MOVE_POINTS = 10 VOICE = None HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN, context.MTY_UNDEAD, context.DES_EARTH, context.GEN_UNDEAD ) ENC_LEVEL = 2 TREASURE = treasuretype.Standard() COMPANIONS = (Skeleton,) COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack( (1,6,0), element = stats.RESIST_SLASHING ) def init_monster( self ): self.levels.append( base.Humanoid( 2, self ) )
class NovicePriest( base.Monster ): name = "Novice Priest" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 13, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 12 } SPRITENAME = "monster_spellcasters.png" FRAME = 0 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY, context.DES_CIVILIZED, context.DES_SOLAR, context.DES_AIR, context.MTY_HUMANOID, context.MTY_PRIEST, context.GEN_KINGDOM ) ENC_LEVEL = 3 TREASURE = treasuretype.Standard( ( items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll ) ) COMBAT_AI = aibrain.BasicTechnicalAI() COMPANIONS = (NoviceWarrior,) ATTACK = items.Attack( (1,6,0), element = stats.RESIST_CRUSHING ) TECHNIQUES = ( spells.waterspells.FREEZE_FOE, spells.airspells.SILENCE, spells.solarspells.BLESSING, spells.solarspells.MINOR_CURE ) def init_monster( self ): self.levels.append( base.Humanoid( 3, self ) )
class NoviceMage( base.Monster ): name = "Novice Mage" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 10, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 15, stats.PIETY: 13, stats.CHARISMA: 12 } SPRITENAME = "monster_spellcasters.png" FRAME = 21 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY, context.DES_CIVILIZED, context.DES_LUNAR, context.DES_FIRE, context.MTY_HUMANOID, context.MTY_MAGE, context.GEN_KINGDOM ) ENC_LEVEL = 3 TREASURE = treasuretype.Standard( ( items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll ) ) COMBAT_AI = aibrain.BasicTechnicalAI() COMPANIONS = (NovicePriest,NoviceWarrior) ATTACK = items.Attack( (1,6,0), element = stats.RESIST_CRUSHING ) TECHNIQUES = ( spells.firespells.FIRE_BOLT, spells.lunarspells.CURSE, spells.magespells.FIRE_ARC, spells.lunarspells.SLEEP ) def init_monster( self ): self.levels.append( base.Spellcaster( 3, self ) )
class ReptalArcher(base.Monster): name = "Reptal Archer" statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 15, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 8, stats.PIETY: 9, stats.CHARISMA: 9 } SPRITENAME = "monster_draconic.png" FRAME = 4 TEMPLATES = (stats.REPTILE, ) MOVE_POINTS = 10 VOICE = dialogue.voice.DRACONIAN HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_WATER, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_DRAGON) ENC_LEVEL = 4 COMBAT_AI = aibrain.BasicTechnicalAI() TREASURE = treasuretype.Standard((items.ARROW, )) COMPANIONS = (ReptalWarrior, Reptal) ATTACK = items.Attack((1, 6, 0), element=stats.RESIST_CRUSHING) TECHNIQUES = (abilities.LONGBOW, ) def init_monster(self): self.levels.append(base.Humanoid(4, self))
class Heretic(base.Monster): name = "Heretic" statline = { stats.STRENGTH: 8, stats.TOUGHNESS: 10, stats.REFLEXES: 8, \ stats.INTELLIGENCE: 12, stats.PIETY: 9, stats.CHARISMA: 13, \ stats.PHYSICAL_DEFENSE: -20, stats.NATURAL_DEFENSE: -20, stats.MAGIC_ATTACK: -10 } SPRITENAME = "monster_chaos.png" FRAME = 17 TEMPLATES = () MOVE_POINTS = 10 HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_AIR, context.MTY_HUMANOID, context.MTY_MAGE, context.GEN_CHAOS) ENC_LEVEL = 3 COMBAT_AI = aibrain.BasicTechnicalAI() TREASURE = treasuretype.Standard( (items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll)) TECHNIQUES = (spells.firespells.IGNITE, spells.waterspells.FREEZE_FOE) ATTACK = items.Attack((1, 4, 0), element=stats.RESIST_CRUSHING) def init_monster(self): self.levels.append(base.Humanoid(3, self))
class Mutant(base.Monster): name = "Mutant" statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 22, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 4, stats.PIETY: 12, stats.CHARISMA: 2, stats.NATURAL_DEFENSE: -20 } SPRITENAME = "monster_chaos.png" FRAME = 8 TEMPLATES = () MOVE_POINTS = 8 TREASURE = treasuretype.Standard() HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_DUNGEON, context.DES_LUNAR, context.MTY_HUMANOID, context.MTY_BOSS, context.GEN_CHAOS) ENC_LEVEL = 6 LONER = True COMPANIONS = (Beastman, MadMonk) ATTACK = items.Attack((2, 6, 0), element=stats.RESIST_CRUSHING) def init_monster(self): self.levels.append(base.Terror(8, self))
class SkeletonThief( base.Monster ): name = "Skeleton Thief" statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 12, stats.REFLEXES: 16, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 1, stats.STEALTH: 20 } SPRITENAME = "monster_skeletons.png" FRAME = 13 TEMPLATES = (stats.UNDEAD,stats.BONE) MOVE_POINTS = 12 VOICE = None HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN, context.MTY_UNDEAD, context.MTY_HUMANOID, context.MTY_THIEF, context.DES_EARTH, context.GEN_UNDEAD ) ENC_LEVEL = 4 TREASURE = treasuretype.Standard() COMPANIONS = (SkeletonFighter,SkeletalBat) COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack( (1,6,0), element = stats.RESIST_PIERCING ) def init_monster( self ): self.levels.append( base.Humanoid( 4, self ) )
class Centaur(base.Monster): name = "Centaur" statline = { stats.STRENGTH: 13, stats.TOUGHNESS: 13, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 12 } SPRITENAME = "monster_chaos.png" FRAME = 19 TEMPLATES = () MOVE_POINTS = 12 VOICE = dialogue.voice.GREEK HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS, context.DES_SOLAR, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_CHAOS) ENC_LEVEL = 3 COMBAT_AI = aibrain.ArcherAI() TREASURE = treasuretype.Standard() ATTACK = items.Attack((1, 6, 0), element=stats.RESIST_SLASHING) TECHNIQUES = (abilities.SHORTBOW, ) def init_monster(self): self.levels.append(base.Humanoid(2, self))