Example #1
0
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))
Example #2
0
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))