class Unicorn(base.Monster): name = "Unicorn" statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 18, stats.REFLEXES: 16, \ stats.INTELLIGENCE: 16, stats.PIETY: 20, stats.CHARISMA: 18, \ stats.RESIST_LUNAR: 100, stats.MAGIC_DEFENSE: 25 } SPRITENAME = "monster_animals.png" FRAME = 31 TEMPLATES = () MOVE_POINTS = 12 VOICE = None HABITAT = (context.HAB_FOREST, context.SET_EVERY, context.DES_SOLAR, context.MTY_BEAST, context.MTY_CREATURE, context.MTY_LEADER, context.MTY_BOSS, context.GEN_NATURE) ENC_LEVEL = 13 ATTACK = items.Attack((3, 6, 0), element=stats.RESIST_PIERCING) TECHNIQUES = (invocations.MPInvocation( "Radiance", effects.HealthRestore(dice=(5, 8, 20)), mp_cost=7, com_tar=targetarea.SingleTarget(reach=10), ai_tar=invocations.TargetWoundedAlly(), exp_tar=targetarea.SinglePartyMember(), shot_anim=animobs.YellowVortex), ) def init_monster(self): self.levels.append(base.Defender(12, self))
class MadMonk(base.Monster): name = "Mad Monk" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 14, stats.REFLEXES: 16, \ stats.INTELLIGENCE: 12, stats.PIETY: 16, stats.CHARISMA: 10, stats.NATURAL_DEFENSE: -10, stats.MAGIC_DEFENSE: 10 } SPRITENAME = "monster_chaos.png" FRAME = 7 TEMPLATES = () MOVE_POINTS = 10 HABITAT = (context.HAB_EVERY, context.HAB_DESERT, context.SET_EVERY, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_PRIEST, context.DES_FIRE, context.GEN_CHAOS) ENC_LEVEL = 5 TREASURE = treasuretype.Standard((items.POTION, items.CLOTHES)) TECHNIQUES = (invocations.MPInvocation( "Fire Soul", effects.TargetIsAlly( on_true=(effects.Enchant(enchantments.RegeneratEn, anim=animobs.RedCloud), effects.TargetIsDamaged(on_true=(effects.HealthRestore( dice=(2, 6, 0)), ))), on_false=(effects.HealthDamage((2, 6, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud), )), com_tar=targetarea.SelfCentered(radius=2, delay_from=-1), ai_tar=invocations.TargetWoundedAlly(), mp_cost=25), ) ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_CRUSHING, extra_effect=effects.ManaDamage( (1, 8, 0), stat_bonus=None, anim=animobs.PurpleExplosion)) def init_monster(self): self.levels.append(base.Humanoid(5, self))
"Increases the physical and magic attack scores of all allies within 6 tiles by +5%. This effect lasts until the end of combat.", effects.TargetIsAlly(on_true=(effects.Enchant( enchantments.BlessingEn, anim=animobs.YellowSparkle), )), rank=1, gems={SOLAR: 1}, com_tar=targetarea.SelfCentered(), ai_tar=invocations.TargetAllyWithoutEnchantment(enchantments.BlessingEn), mpfudge=-1) MINOR_CURE = Spell("Minor Cure", "This spell will heal one nearby ally for 1-10 damage.", effects.HealthRestore(dice=(1, 10, 0)), rank=1, gems={SOLAR: 1}, com_tar=targetarea.SingleTarget(reach=1), ai_tar=invocations.TargetWoundedAlly(), exp_tar=targetarea.SinglePartyMember()) # CIRCLE 2 MODERATE_CURE = Spell("Moderate Cure", "This spell will heal one nearby ally for 6-20 damage.", effects.HealthRestore(dice=(2, 8, 4)), rank=2, gems={SOLAR: 2}, com_tar=targetarea.SingleTarget(reach=1), ai_tar=invocations.TargetWoundedAlly(), exp_tar=targetarea.SinglePartyMember(), mpfudge=-2) # CIRCLE 3
class LivingPotion(base.Monster): name = "Living Potion" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 1, stats.RESIST_SLASHING: 25, stats.RESIST_PIERCING: 25, stats.RESIST_WATER: 200 } SPRITENAME = "monster_constructs.png" FRAME = 15 TEMPLATES = (stats.CONSTRUCT, ) MOVE_POINTS = 12 VOICE = None HABITAT = (context.SET_EVERY, context.MTY_CONSTRUCT, context.DES_WATER) ENC_LEVEL = 7 TREASURE = treasuretype.Standard((items.POTION, )) COMBAT_AI = aibrain.SteadySpellAI() ATTACK = items.Attack((1, 6, 0), element=stats.RESIST_CRUSHING) TECHNIQUES = (invocations.MPInvocation( "Acid Blast", effects.OpposedRoll(att_modifier=10, def_stat=stats.REFLEXES, on_success=(effects.HealthDamage( (2, 6, 0), stat_bonus=None, element=stats.RESIST_ACID, anim=animobs.GreenCloud), ), on_failure=(effects.HealthDamage( (1, 6, 0), stat_bonus=None, element=stats.RESIST_ACID, anim=animobs.GreenCloud), )), com_tar=targetarea.SingleTarget(), ai_tar=invocations.TargetEnemy(), shot_anim=animobs.GreenSpray, mp_cost=1), invocations.MPInvocation( "Poison Blast", effects.OpposedRoll(att_modifier=10, def_stat=stats.REFLEXES, on_success=(effects.HealthDamage( (2, 6, 0), stat_bonus=None, element=stats.RESIST_POISON, anim=animobs.PoisonCloud), ), on_failure=(effects.HealthDamage( (1, 6, 0), stat_bonus=None, element=stats.RESIST_POISON, anim=animobs.PoisonCloud), )), com_tar=targetarea.SingleTarget(), ai_tar=invocations.TargetEnemy(), shot_anim=animobs.GreenComet, mp_cost=1), invocations.MPInvocation( "Healing Potion", effects.HealthRestore(dice=(3, 8, 0)), com_tar=targetarea.SingleTarget(reach=10), ai_tar=invocations.TargetWoundedAlly(), exp_tar=targetarea.SinglePartyMember(), shot_anim=animobs.YellowVortex, mp_cost=1)) def init_monster(self): self.levels.append(base.Spellcaster(7, self))