Esempio n. 1
0
class Spark(base.Monster):
    name = "Spark"
    statline = { stats.STRENGTH: 13, stats.TOUGHNESS: 8, stats.REFLEXES: 14, \
        stats.INTELLIGENCE: 12, stats.PIETY: 6, stats.CHARISMA: 14,
        stats.RESIST_PIERCING: 50, stats.RESIST_CRUSHING: 50, stats.RESIST_SLASHING: 50 }
    SPRITENAME = "monster_by_Joe.png"
    FRAME = 4
    TEMPLATES = (stats.ELEMENTAL, stats.FIRE)
    MOVE_POINTS = 12
    HABITAT = (context.HAB_BUILDING, context.SET_EVERY, context.GEN_IGNAN,
               context.DES_FIRE, context.DES_SOLAR, context.MTY_ELEMENTAL,
               context.MTY_CELESTIAL)
    ENC_LEVEL = 3
    COMBAT_AI = aibrain.ArcherAI(approach_allies=0, technique_chance=75)
    ATTACK = items.Attack((1, 6, 0),
                          element=stats.RESIST_SOLAR,
                          hit_anim=animobs.OrangeExplosion,
                          extra_effect=abilities.BURN_ATTACK)
    TECHNIQUES = (invocations.Invocation(
        "Fire Bolt",
        effects.OpposedRoll(
            att_modifier=10,
            att_stat=stats.REFLEXES,
            def_stat=stats.REFLEXES,
            on_success=(effects.HealthDamage((1, 6, 0),
                                             stat_bonus=None,
                                             element=stats.RESIST_FIRE,
                                             anim=animobs.OrangeExplosion), ),
            on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )),
        com_tar=targetarea.SingleTarget(reach=5),
        shot_anim=animobs.FireBolt,
        ai_tar=invocations.TargetEnemy()), )

    def init_monster(self):
        self.levels.append(base.Spellcaster(3, 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))
Esempio n. 3
0
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))
Esempio n. 4
0
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 ) )
Esempio n. 5
0
class AncientSkyDragon(base.Monster):
    name = "Ancient Sky Dragon"
    statline = { stats.STRENGTH: 27, stats.TOUGHNESS: 21, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 18, stats.PIETY: 19, stats.CHARISMA: 18,
        stats.RESIST_LIGHTNING: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 38
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.HAB_DESERT, context.SET_EVERY,
               context.MAP_WILDERNESS, context.MTY_BOSS, context.MTY_DRAGON,
               context.DES_AIR, context.GEN_DRAGON)
    ENC_LEVEL = 17
    COMBAT_AI = aibrain.ArcherAI(approach_allies=0)
    TREASURE = treasuretype.DragonHoard()
    LONER = True
    COMPANIONS = (YoungSkyDragon, )
    ATTACK = items.Attack((4, 8, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Lightning Breath",
        effects.OpposedRoll(att_stat=stats.REFLEXES,
                            def_stat=stats.REFLEXES,
                            on_success=(effects.HealthDamage(
                                (14, 4, 0),
                                stat_bonus=stats.TOUGHNESS,
                                element=stats.RESIST_LIGHTNING,
                                anim=animobs.Spark), ),
                            on_failure=(effects.HealthDamage(
                                (7, 4, 0),
                                stat_bonus=None,
                                element=stats.RESIST_LIGHTNING,
                                anim=animobs.Spark), )),
        com_tar=targetarea.Line(reach=9),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=32), )

    def init_monster(self):
        self.levels.append(base.Terror(23, self))
Esempio n. 6
0
class ChaosMage(base.Monster):
    name = "Chaos Mage"
    statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 14, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 14, stats.PIETY: 14, stats.CHARISMA: 12 }
    SPRITENAME = "monster_chaos.png"
    FRAME = 15
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MTY_HUMANOID,
               context.MTY_MAGE, context.GEN_CHAOS)
    ENC_LEVEL = 4
    TREASURE = treasuretype.Standard(
        (items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll))
    COMBAT_AI = aibrain.ArcherAI()
    COMPANIONS = (animals.MadDog, )
    ATTACK = items.Attack((1, 4, 0), element=stats.RESIST_PIERCING)
    TECHNIQUES = (spells.otherspells.CHAOS_BOLT,
                  spells.lunarspells.WIZARD_MISSILE,
                  spells.otherspells.CHAOTIC_AID)

    def init_monster(self):
        self.levels.append(base.Spellcaster(5, self))
Esempio n. 7
0
class Medusa( base.Monster ):
    name = "Medusa"
    statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 12, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 12, stats.PIETY: 13, stats.CHARISMA: 15 }
    SPRITENAME = "monster_default.png"
    FRAME = 30
    TEMPLATES = ()
    MOVE_POINTS = 10
    VOICE = dialogue.voice.GREEK
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.MTY_HUMANOID )
    ENC_LEVEL = 9
    COMBAT_AI = aibrain.ArcherAI(approach_allies=0,technique_chance=75)
    ATTACK = items.Attack( (1,6,0), element = stats.RESIST_PIERCING, extra_effect=abilities.POISON_ATTACK_2d6 )
    TECHNIQUES = ( invocations.MPInvocation( "Death Gaze",
      effects.OpposedRoll( att_stat=stats.PIETY, att_modifier=-10, on_success = (
        effects.InstaKill( anim=animobs.CriticalHit )
      ,), on_failure = (
        effects.NoEffect( anim=animobs.SmallBoom )
      ,) ), com_tar=targetarea.SingleTarget(reach=6), shot_anim=animobs.PurpleVortex, ai_tar=invocations.TargetEnemy(), mp_cost=9
    ), abilities.LONGBOW )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 6, self ) )
Esempio n. 8
0
class CentaurChampion(base.Monster):
    name = "Centaur Champion"
    statline = { stats.STRENGTH: 17, stats.TOUGHNESS: 17, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 13, \
        stats.NATURAL_DEFENSE: 10 }
    SPRITENAME = "monster_chaos.png"
    FRAME = 9
    TEMPLATES = ()
    MOVE_POINTS = 10
    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.MTY_BOSS, context.GEN_CHAOS)
    ENC_LEVEL = 9
    COMBAT_AI = aibrain.ArcherAI()
    TREASURE = treasuretype.Standard((items.ARROW, items.POLEARM))
    COMPANIONS = (CentaurKnight, CentaurWarrior)
    ATTACK = items.Attack((2, 6, 0),
                          element=stats.RESIST_SLASHING,
                          extra_effect=abilities.POISON_ATTACK)
    TECHNIQUES = (abilities.COMPOSITEBOW, )

    def init_monster(self):
        self.levels.append(base.Leader(12, self))
Esempio n. 9
0
class CentaurHero(base.Monster):
    name = "Centaur Hero"
    statline = { stats.STRENGTH: 18, stats.TOUGHNESS: 18, stats.REFLEXES: 16, \
        stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 13 }
    SPRITENAME = "monster_chaos.png"
    FRAME = 23
    TEMPLATES = ()
    MOVE_POINTS = 10
    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.MTY_BOSS, context.GEN_CHAOS)
    ENC_LEVEL = 11
    TREASURE = treasuretype.Standard((items.ARROW, items.POLEARM, items.BOW))
    COMBAT_AI = aibrain.ArcherAI()
    LONER = True
    COMPANIONS = (CentaurKnight, CentaurChampion)
    ATTACK = items.Attack((2, 6, 0),
                          element=stats.RESIST_SLASHING,
                          extra_effect=effects.OpposedRoll(
                              att_stat=None,
                              def_stat=stats.TOUGHNESS,
                              on_success=(
                                  effects.HealthDamage(
                                      (1, 6, 0),
                                      stat_bonus=None,
                                      element=stats.RESIST_POISON,
                                      anim=animobs.PoisonCloud),
                                  effects.Enchant(enchantments.PoisonClassic),
                              )))
    TECHNIQUES = (invocations.Invocation(
        "Arrow 23",
        effects.PhysicalAttackRoll(
            att_stat=stats.REFLEXES,
            on_success=(
                effects.HealthDamage((2, 8, 0),
                                     stat_bonus=stats.STRENGTH,
                                     element=stats.RESIST_PIERCING,
                                     anim=animobs.RedBoom),
                effects.OpposedRoll(
                    att_stat=None,
                    att_modifier=5,
                    on_success=(
                        effects.HealthDamage((1, 6, 0),
                                             stat_bonus=None,
                                             element=stats.RESIST_FIRE,
                                             anim=animobs.RedCloud),
                        effects.Enchant(enchantments.BurnLowEn),
                    )),
            ),
            on_failure=(effects.HealthDamage((1, 8, 0),
                                             stat_bonus=None,
                                             element=stats.RESIST_PIERCING,
                                             anim=animobs.RedBoom), )),
        com_tar=targetarea.SingleTarget(reach=9),
        shot_anim=animobs.Arrow,
        ai_tar=invocations.TargetEnemy()), spells.solarspells.MAJOR_CURE,
                  spells.solarspells.CURE_POISON)

    def init_monster(self):
        self.levels.append(base.Leader(15, self))