class Healer( base.Monster ): name = "Healer" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 16, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 14, stats.PIETY: 18, stats.CHARISMA: 18 } SPRITENAME = "monster_spellcasters.png" FRAME = 16 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY, context.DES_CIVILIZED, context.DES_SOLAR, context.DES_WATER, context.MTY_BOSS, context.MTY_HUMANOID, context.MTY_PRIEST, context.GEN_KINGDOM ) ENC_LEVEL = 10 TREASURE = treasuretype.HighItems( ( items.potions.PotionOfHealing, items.scrolls.Rank4Scroll, items.scrolls.Rank5Scroll ) ) COMBAT_AI = aibrain.BasicTechnicalAI() COMPANIONS = (NoviceWarrior,NovicePriest,Warrior) ATTACK = items.Attack( (3,6,0), element = stats.RESIST_SOLAR, hit_anim=animobs.YellowExplosion ) TECHNIQUES = ( spells.priestspells.SMITE, spells.solarspells.MASS_CURE, spells.solarspells.MAXIMUM_CURE, invocations.MPInvocation( "Repent", effects.TargetIsAlly( on_true = ( effects.Enchant( enchantments.BlessingEn, anim=animobs.GreenSparkle ), effects.TargetIsDamaged( on_true= ( effects.HealthRestore( dice=(3,12,12) ), )) ), on_false=( effects.TargetIsEnemy( on_true = ( effects.HealthDamage( (3,12,0), stat_bonus=stats.CHARISMA, element=stats.RESIST_WATER, anim=animobs.Bubbles ), )), )), shot_anim=animobs.BlueComet, com_tar=targetarea.Blast(radius=3), ai_tar=invocations.TargetEnemy(), mp_cost=12 ) ) def init_monster( self ): self.levels.append( base.Spellcaster( 6, self ) ) self.levels.append( base.Defender( 4, self ) )
class BarbarianScout( base.Monster ): name = "Barbarian Scout" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 10 } SPRITENAME = "monster_giants.png" FRAME = 8 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_HUMANOID, context.GEN_GIANT ) ENC_LEVEL = 3 TREASURE = treasuretype.Low( (items.BOW,items.ARROW) ) COMBAT_AI = aibrain.BasicTechnicalAI() ATTACK = items.Attack( (1,6,0), element = stats.RESIST_SLASHING ) TECHNIQUES = ( abilities.SHORTBOW, ) def init_monster( self ): self.levels.append( base.Humanoid( 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 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 Necromancer( base.Monster ): name = "Necromancer" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 15, stats.PIETY: 13, stats.CHARISMA: 12 } SPRITENAME = "monster_spellcasters.png" FRAME = 23 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY, context.DES_CIVILIZED, context.DES_LUNAR, context.MTY_HUMANOID, context.MTY_MAGE, context.GEN_UNDEAD ) ENC_LEVEL = 5 TREASURE = treasuretype.HighItems( ( items.scrolls.Rank2Scroll, items.scrolls.Rank3Scroll ) ) COMBAT_AI = aibrain.BasicTechnicalAI() COMPANIONS = (undead.Ghoul,undead.SkeletonWithMorningstar) ATTACK = items.Attack( (1,6,0), element = stats.RESIST_CRUSHING ) TECHNIQUES = ( spells.lunarspells.ENERVATE, spells.necrospells.ACID_CLOUD, spells.necrospells.TOUCH_OF_DEATH, spells.necrospells.RAISE_CORPSE ) def init_monster( self ): self.levels.append( base.Spellcaster( 5, 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 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 EarthbindTester(monsters.base.Monster): name = "Earthbind Tester" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 12, stats.REFLEXES: 17, \ stats.INTELLIGENCE: 80, stats.PIETY: 80, stats.CHARISMA: 4, stats.PHYSICAL_ATTACK: 5, stats.NATURAL_DEFENSE: 5 } SPRITENAME = "monster_animals.png" FRAME = 9 TEMPLATES = () MOVE_POINTS = 12 VOICE = None HABITAT = (context.HAB_BUILDING, context.HAB_TUNNELS, context.SET_EVERY, context.DES_EARTH, context.DES_CIVILIZED, context.MTY_BEAST, context.MTY_CREATURE, context.GEN_NATURE) ENC_LEVEL = 1 TECHNIQUES = (spells.earthspells.EARTHBIND, ) COMBAT_AI = aibrain.BasicTechnicalAI() ATTACK = items.Attack((1, 4, 0), element=stats.RESIST_PIERCING) def init_monster(self): self.levels.append(monsters.base.Beast(1, self))
class Ranger( base.Monster ): name = "Ranger" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 14, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 12, \ stats.STEALTH: 24 } SPRITENAME = "monster_people.png" FRAME = 16 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.HAB_FOREST, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_NATURE, context.GEN_KINGDOM ) ENC_LEVEL = 6 TREASURE = treasuretype.Standard( ( items.ARROW, items.BOW ) ) COMPANIONS = (NoviceDruid,) COMBAT_AI = aibrain.BasicTechnicalAI() ATTACK = items.Attack( (1,8,0), element = stats.RESIST_SLASHING ) TECHNIQUES = ( abilities.LONGBOW, spells.earthspells.EARTHBIND ) def init_monster( self ): self.levels.append( base.Humanoid( 5, self ) )
class Priest( base.Monster ): name = "Priest" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 14, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 13, stats.PIETY: 16, stats.CHARISMA: 12 } SPRITENAME = "monster_spellcasters.png" FRAME = 2 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY, context.DES_CIVILIZED, context.DES_SOLAR, context.MTY_LEADER, context.MTY_HUMANOID, context.MTY_PRIEST, context.GEN_KINGDOM ) ENC_LEVEL = 6 TREASURE = treasuretype.HighItems( ( items.scrolls.Rank2Scroll, items.scrolls.Rank3Scroll, items.POTION ) ) COMBAT_AI = aibrain.BasicTechnicalAI() COMPANIONS = (NoviceWarrior,NovicePriest,Warrior) ATTACK = items.Attack( (1,8,0), element = stats.RESIST_CRUSHING ) TECHNIQUES = ( spells.waterspells.FREEZE_FOE, spells.priestspells.HEALING_LIGHT, spells.solarspells.SUNRAY, spells.airspells.SILENCE, spells.priestspells.HEROISM, spells.priestspells.ARMOR_OF_FAITH ) def init_monster( self ): self.levels.append( base.Humanoid( 6, self ) )
class Conjuoror( base.Monster ): name = "Conjuoror" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 16, stats.PIETY: 14, stats.CHARISMA: 12 } SPRITENAME = "monster_spellcasters.png" FRAME = 10 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 = 7 TREASURE = treasuretype.HighItems( ( items.scrolls.Rank3Scroll, items.scrolls.Rank4Scroll ) ) COMBAT_AI = aibrain.BasicTechnicalAI() COMPANIONS = (NovicePriest,NoviceWarrior,Warrior,Mercenary) ATTACK = items.Attack( (1,8,0), element = stats.RESIST_CRUSHING ) TECHNIQUES = ( spells.magespells.LIGHTNING_BOLT, spells.lunarspells.SLEEP, spells.lunarspells.HELLBLAST, spells.firespells.EXPLOSION, spells.firespells.PYROTECHNICS ) def init_monster( self ): self.levels.append( base.Spellcaster( 7, 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 OgreShaman( base.Monster ): name = "Ogre Shaman" statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 16, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 5 } SPRITENAME = "monster_giants.png" FRAME = 3 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.HAB_FOREST, context.SET_EVERY, context.SET_RENFAN, context.DES_WATER, context.MTY_HUMANOID, context.MTY_PRIEST, context.GEN_GIANT ) ENC_LEVEL = 7 TREASURE = treasuretype.LowItems( ( items.scrolls.Rank3Scroll, items.scrolls.Rank4Scroll, items.STAFF ) ) COMBAT_AI = aibrain.BasicTechnicalAI() COMPANIONS = ( Ogre, OgreChamp ) LONER = True ATTACK = items.Attack( (1,12,0), element = stats.RESIST_CRUSHING ) TECHNIQUES = ( spells.waterspells.WINTER_WIND, spells.solarspells.MODERATE_CURE, ) def init_monster( self ): self.levels.append( base.Spellcaster( 8, self ) )
class BarbarianShaman( base.Monster ): name = "Barbarian Shaman" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 12, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 10 } SPRITENAME = "monster_giants.png" FRAME = 7 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_HUMANOID, context.MTY_MAGE, context.GEN_GIANT ) ENC_LEVEL = 5 TREASURE = treasuretype.LowItems( ( items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll, items.STAFF ) ) COMBAT_AI = aibrain.BasicTechnicalAI() LONER = True COMPANIONS = (Barbarian,BarbarianScout) ATTACK = items.Attack( (1,8,0), element = stats.RESIST_SLASHING ) TECHNIQUES = ( spells.magespells.SHOCK_SPHERE, spells.earthspells.ACID_BOLT, spells.waterspells.FREEZE_FOE, spells.airspells.SHOUT ) def init_monster( self ): self.levels.append( base.Humanoid( 5, self ) )
class CentaurKnight(base.Monster): name = "Centaur Knight" statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 16, stats.REFLEXES: 14, \ stats.INTELLIGENCE: 12, stats.PIETY: 14, stats.CHARISMA: 13, \ stats.NATURAL_DEFENSE: 10, stats.MAGIC_DEFENSE: 10 } SPRITENAME = "monster_chaos.png" FRAME = 4 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.MTY_LEADER, context.GEN_CHAOS) ENC_LEVEL = 7 TREASURE = treasuretype.Standard((items.ARROW, )) COMBAT_AI = aibrain.BasicTechnicalAI() COMPANIONS = (Centaur, CentaurWarrior) ATTACK = items.Attack((2, 6, 0), element=stats.RESIST_SLASHING) TECHNIQUES = (abilities.COMPOSITEBOW, spells.solarspells.MAJOR_CURE, spells.solarspells.CURE_POISON) def init_monster(self): self.levels.append(base.Humanoid(8, self))