class Behir( base.Monster ): name = "Behir" statline = { stats.STRENGTH: 26, stats.TOUGHNESS: 21, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 7, stats.PIETY: 14, stats.CHARISMA: 12, \ stats.RESIST_LIGHTNING: 150, stats.AWARENESS: 50, stats.CRITICAL_HIT: 10 } SPRITENAME = "monster_by_Joe.png" FRAME = 5 TEMPLATES = () MOVE_POINTS = 12 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.MAP_DUNGEON, context.DES_AIR, context.MTY_BOSS ) ENC_LEVEL = 10 TREASURE = treasuretype.Swallowed(scale=1,swag_chance=20) ATTACK = items.Attack( (2,4,0), element = stats.RESIST_PIERCING ) TECHNIQUES = ( invocations.MPInvocation( "Lightning Breath", effects.OpposedRoll( att_stat=stats.REFLEXES, def_stat=stats.REFLEXES, on_success = ( effects.HealthDamage( (7,6,0), stat_bonus=None, element=stats.RESIST_LIGHTNING, anim=animobs.Spark ) ,), on_failure = ( effects.HealthDamage( (3,7,0), stat_bonus=None, element=stats.RESIST_LIGHTNING, anim=animobs.Spark ) ,) ), com_tar=targetarea.Line(reach=5), ai_tar=invocations.TargetEnemy(), mp_cost=30 ), ) def init_monster( self ): self.levels.append( base.Terror( 9, self ) )
class Ankheg(base.Monster): # OGL monster http://www.d20srd.org/srd/monsters/ankheg.htm name = "Ankheg" statline = { stats.STRENGTH: 21, stats.TOUGHNESS: 17, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 1, stats.PIETY: 13, stats.CHARISMA: 6, stats.STEALTH: 30 } SPRITENAME = "monster_bugs.png" FRAME = 40 TEMPLATES = (stats.BUG, ) MOVE_POINTS = 10 VOICE = None TREASURE = treasuretype.Swallowed(swag_chance=35) HABITAT = (context.HAB_CAVE, context.HAB_TUNNELS, context.SET_EVERY, context.DES_EARTH, context.MTY_BOSS, context.MTY_BEAST, context.MTY_CREATURE, context.GEN_NATURE) ENC_LEVEL = 5 ATTACK = items.Attack((2, 6, 3), element=stats.RESIST_SLASHING, extra_effect=effects.HealthDamage( (1, 6, 0), stat_bonus=None, element=stats.RESIST_ACID, anim=animobs.GreenExplosion)) TECHNIQUES = (invocations.MPInvocation( "Acid Breath", effects.OpposedRoll(att_skill=stats.PHYSICAL_ATTACK, att_stat=stats.REFLEXES, def_stat=stats.REFLEXES, on_success=(effects.HealthDamage( (4, 4, 0), stat_bonus=None, element=stats.RESIST_ACID, anim=animobs.GreenExplosion), ), on_failure=(effects.HealthDamage( (1, 8, 0), stat_bonus=None, element=stats.RESIST_ACID, anim=animobs.GreenExplosion), )), com_tar=targetarea.Line(reach=5), ai_tar=invocations.TargetEnemy(), mp_cost=10), ) def init_monster(self): self.levels.append(base.Defender(2, self)) self.levels.append(base.Beast(2, self))
class Crocodile(base.Monster): name = "Crocodile" statline = { stats.STRENGTH: 25, stats.TOUGHNESS: 18, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 1, stats.PIETY: 10, stats.CHARISMA: 1 } SPRITENAME = "monster_animals.png" FRAME = 24 TEMPLATES = (stats.REPTILE, ) MOVE_POINTS = 8 VOICE = None TREASURE = treasuretype.Swallowed() HABITAT = (context.HAB_TUNNELS, context.SET_EVERY, context.DES_WATER, context.MTY_BEAST, context.MTY_CREATURE, context.GEN_NATURE, context.GEN_DRAGON) ENC_LEVEL = 8 ATTACK = items.Attack((1, 12, 0), element=stats.RESIST_PIERCING) def init_monster(self): self.levels.append(base.Beast(8, self))
class GiantFrog(base.Monster): name = "Giant Frog" statline = { stats.STRENGTH: 13, stats.TOUGHNESS: 15, stats.REFLEXES: 11, \ stats.INTELLIGENCE: 1, stats.PIETY: 5, stats.CHARISMA: 1 } SPRITENAME = "monster_animals.png" FRAME = 13 TEMPLATES = (stats.REPTILE, ) MOVE_POINTS = 12 VOICE = None TREASURE = treasuretype.Swallowed() HABITAT = (context.HAB_CAVE, context.SET_EVERY, context.DES_WATER, context.MTY_BEAST, context.MTY_CREATURE, context.MTY_BOSS, context.GEN_NATURE) ENC_LEVEL = 3 ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_PIERCING) def init_monster(self): self.levels.append(base.Beast(3, self))
class DragonTurtle(base.Monster): name = "Dragon Turtle" statline = { stats.STRENGTH: 28, stats.TOUGHNESS: 36, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 6, stats.PIETY: 14, stats.CHARISMA: 6, \ stats.RESIST_WATER: 50 } SPRITENAME = "monster_animals.png" FRAME = 34 TEMPLATES = (stats.REPTILE, stats.DRAGON, stats.WATER) MOVE_POINTS = 6 VOICE = None TREASURE = treasuretype.Swallowed() HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_WATER, context.MTY_BEAST, context.MTY_CREATURE, context.MTY_BOSS, context.GEN_NATURE, context.GEN_DRAGON) ENC_LEVEL = 18 ATTACK = items.Attack((4, 6, 0), element=stats.RESIST_CRUSHING) TECHNIQUES = (invocations.MPInvocation( "Steam Breath", effects.OpposedRoll(att_skill=stats.PHYSICAL_ATTACK, att_stat=stats.REFLEXES, def_stat=stats.REFLEXES, on_success=(effects.HealthDamage( (10, 10, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.Steam), ), on_failure=(effects.HealthDamage( (2, 20, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.Steam), )), com_tar=targetarea.Cone(reach=8), ai_tar=invocations.TargetEnemy(), mp_cost=15), ) def init_monster(self): self.levels.append(base.Beast(18, self))
class Roc(base.Monster): name = "Roc" statline = { stats.STRENGTH: 35, stats.TOUGHNESS: 24, stats.REFLEXES: 18, \ stats.INTELLIGENCE: 2, stats.PIETY: 13, stats.CHARISMA: 12 } SPRITENAME = "monster_animals.png" FRAME = 30 TEMPLATES = () MOVE_POINTS = 16 VOICE = None TREASURE = treasuretype.Swallowed() HABITAT = (context.HAB_FOREST, context.HAB_DESERT, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_BEAST, context.MTY_CREATURE, context.GEN_NATURE, context.DES_AIR, context.DES_SOLAR) ENC_LEVEL = 14 ATTACK = items.Attack((3, 8, 0), element=stats.RESIST_PIERCING) TECHNIQUES = (invocations.MPInvocation( "Wing Sweep", effects.OpposedRoll(att_skill=stats.PHYSICAL_ATTACK, att_stat=stats.REFLEXES, def_stat=stats.REFLEXES, on_success=(effects.HealthDamage( (3, 6, 0), stat_bonus=stats.TOUGHNESS, element=stats.RESIST_WIND, anim=animobs.Spiral), ), on_failure=(effects.HealthDamage( (1, 8, 0), stat_bonus=None, element=stats.RESIST_WIND, anim=animobs.Spiral), )), com_tar=targetarea.Cone(reach=4), ai_tar=invocations.TargetEnemy(), mp_cost=10), ) def init_monster(self): self.levels.append(base.Beast(14, self))