Example #1
0
class AncientIceDragon(base.Monster):
    name = "Ancient Ice Dragon"
    statline = { stats.STRENGTH: 29, stats.TOUGHNESS: 21, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 14, stats.PIETY: 15, stats.CHARISMA: 14,
        stats.RESIST_COLD: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 37
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MTY_DRAGON,
               context.DES_ICE, context.GEN_DRAGON, context.MTY_BOSS)
    ENC_LEVEL = 17
    TREASURE = treasuretype.DragonHoard()
    ATTACK = items.Attack((4, 10, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Frost Breath",
        effects.OpposedRoll(att_stat=stats.REFLEXES,
                            def_stat=stats.REFLEXES,
                            on_success=(effects.HealthDamage(
                                (8, 8, 0),
                                stat_bonus=stats.TOUGHNESS,
                                element=stats.RESIST_COLD,
                                anim=animobs.SnowCloud), ),
                            on_failure=(effects.HealthDamage(
                                (4, 8, 0),
                                stat_bonus=None,
                                element=stats.RESIST_COLD,
                                anim=animobs.SnowCloud), )),
        com_tar=targetarea.Cone(reach=7),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=32), )

    def init_monster(self):
        self.levels.append(base.Terror(25, self))
Example #2
0
class YoungFireDragon(base.Monster):
    name = "Young Fire Dragon"
    statline = { stats.STRENGTH: 17, stats.TOUGHNESS: 15, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 15,
        stats.RESIST_FIRE: 100, stats.RESIST_LIGHTNING: 100, stats.RESIST_SOLAR: 50 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 3
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 8
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_SOLAR,
               context.MTY_DRAGON, context.GEN_DRAGON, context.MTY_BOSS)
    ENC_LEVEL = 8
    TREASURE = treasuretype.DragonHoard()
    ATTACK = items.Attack((2, 8, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Fire Breath",
        effects.OpposedRoll(def_stat=stats.TOUGHNESS,
                            on_success=(effects.HealthDamage(
                                (4, 6, 0),
                                stat_bonus=stats.TOUGHNESS,
                                element=stats.RESIST_FIRE,
                                anim=animobs.DragonFire), ),
                            on_failure=(effects.HealthDamage(
                                (2, 6, 0),
                                stat_bonus=None,
                                element=stats.RESIST_FIRE,
                                anim=animobs.DragonFire), )),
        com_tar=targetarea.Cone(reach=5),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=14), )

    def init_monster(self):
        self.levels.append(base.Terror(10, self))
Example #3
0
class Kaiju( base.Monster ):
    name = "Kaiju"    
    statline = { stats.STRENGTH: 45, stats.TOUGHNESS: 35, stats.REFLEXES: 16, \
        stats.INTELLIGENCE: 3, stats.PIETY: 14, stats.CHARISMA: 14, stats.RESIST_ATOMIC: 50,
        stats.RESIST_FIRE: 200, stats.RESIST_POISON: 200, stats.RESIST_LUNAR: 200 }
    SPRITENAME = "monster_default.png"
    FRAME = 14
    TEMPLATES = ()
    MOVE_POINTS = 8
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.MAP_WILDERNESS,
     context.MTY_BEAST )
    ENC_LEVEL = 22
    VOICE = dialogue.voice.DRACONIAN
    COMBAT_AI = aibrain.BruiserAI()
    TREASURE = None
    ATTACK = items.Attack( (4,8,0), element = stats.RESIST_CRUSHING )
    TECHNIQUES = ( invocations.MPInvocation( "Atomic Breath",
      effects.OpposedRoll( att_stat=stats.REFLEXES, on_success = (
        effects.HealthDamage( (10,6,0), stat_bonus=stats.TOUGHNESS, element=stats.RESIST_ATOMIC, anim=animobs.Nuclear )
      ,), on_failure = (
        effects.HealthDamage( (3,10,0), stat_bonus=None, element=stats.RESIST_ATOMIC, anim=animobs.Nuclear )
      ,) ), com_tar=targetarea.Cone(reach=8), ai_tar=invocations.TargetEnemy(), mp_cost=60
    ), )
    def init_monster( self ):
        self.levels.append( base.Beast( 48, self ) )
        self.condition.append( enchantments.PermaMegaRegeneration() )
Example #4
0
class Lamia( base.Monster ):
    name = "Lamia"    
    statline = { stats.STRENGTH: 18, stats.TOUGHNESS: 12, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 12 }
    SPRITENAME = "monster_default.png"
    FRAME = 2
    TEMPLATES = ()
    MOVE_POINTS = 10
    VOICE = dialogue.voice.GREEK
    HABITAT = ( context.HAB_EVERY, context.HAB_DESERT, context.SET_EVERY,
     context.DES_LUNAR,
     context.MTY_HUMANOID, context.MTY_BOSS )
    ENC_LEVEL = 7
    TREASURE = treasuretype.HighItems()
    ATTACK = items.Attack( (1,6,0), element = stats.RESIST_SLASHING, extra_effect=
        effects.StatDamage( stats.PIETY, amount=4, anim=animobs.GreenBoom )
    )
    TECHNIQUES = ( invocations.MPInvocation( "Spirit Drain",
        effects.TargetIsEnemy( on_true = (
            effects.OpposedRoll( on_success = (
                effects.ManaDamage( (1,8,0), stat_bonus=stats.TOUGHNESS, anim=animobs.PurpleExplosion ),
                effects.CauseSleep()
            ,), on_failure = (
                effects.ManaDamage( (1,8,0), stat_bonus=None, anim=animobs.PurpleExplosion )
        ,)),), on_false= (
            effects.NoEffect( anim=animobs.PurpleExplosion )
        ,)), com_tar=targetarea.Cone(reach=4), ai_tar=invocations.TargetEnemy(), mp_cost=12
      ), )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 8, self ) )
Example #5
0
class YoungCaveDragon(base.Monster):
    name = "Young Cave Dragon"
    statline = { stats.STRENGTH: 11, stats.TOUGHNESS: 13, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 10, stats.PIETY: 11, stats.CHARISMA: 10,
        stats.RESIST_POISON: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 2
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 8
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.HAB_CAVE,
               context.MAP_DUNGEON, context.MTY_DRAGON, context.MTY_BOSS,
               context.DES_EARTH, context.GEN_DRAGON)
    ENC_LEVEL = 4
    COMBAT_AI = aibrain.BruiserAI()
    TREASURE = treasuretype.DragonHoard()
    ATTACK = items.Attack((3, 4, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Toxic Breath",
        effects.OpposedRoll(def_stat=stats.TOUGHNESS,
                            anim=animobs.PoisonCloud,
                            on_success=(effects.Paralyze(max_duration=3), )),
        com_tar=targetarea.Cone(reach=4),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=4), )

    def init_monster(self):
        self.levels.append(base.Terror(4, self))
Example #6
0
class Chimera( base.Monster ):
    name = "Chimera"
    # This is based on the version from the Pathfinder SRD rather than the
    # regular SRD; the only difference is the beefed-up breath weapon.
    statline = { stats.STRENGTH: 19, stats.TOUGHNESS: 17, stats.REFLEXES: 13, \
        stats.INTELLIGENCE: 4, stats.PIETY: 13, stats.CHARISMA: 10,
        stats.AWARENESS: 50 }
    SPRITENAME = "monster_by_Joe.png"
    FRAME = 0
    TEMPLATES = ()
    MOVE_POINTS = 12
    VOICE = dialogue.voice.GREEK
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.DES_FIRE,
     context.MTY_BEAST, context.GEN_CHAOS, context.MTY_BOSS )
    ENC_LEVEL = 9
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack( (2,8,0), element = stats.RESIST_PIERCING )
    TECHNIQUES = ( invocations.MPInvocation( "Fire Breath",
      effects.OpposedRoll( att_stat=stats.REFLEXES, def_stat=stats.REFLEXES, on_success = (
        effects.HealthDamage( (6,8,0), stat_bonus=stats.TOUGHNESS, element=stats.RESIST_FIRE, anim=animobs.RedCloud )
      ,), on_failure = (
        effects.HealthDamage( (3,8,0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud )
      ,) ), com_tar=targetarea.Cone(reach=4), ai_tar=invocations.TargetEnemy(), mp_cost=16
    ), )
    def init_monster( self ):
        self.levels.append( base.Terror( 9, self ) )
Example #7
0
class YoungMoonDragon(base.Monster):
    name = "Young Moon Dragon"
    statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 16, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 16, stats.PIETY: 14, stats.CHARISMA: 14,
        stats.RESIST_COLD: 100, stats.RESIST_ACID: 100, stats.RESIST_LUNAR: 50 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 9
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 8
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_LUNAR,
               context.MTY_DRAGON, context.GEN_DRAGON, context.MTY_BOSS)
    ENC_LEVEL = 7
    TREASURE = treasuretype.DragonHoard()
    ATTACK = items.Attack((2, 8, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (
        invocations.MPInvocation("Cold Breath",
                                 effects.OpposedRoll(
                                     def_stat=stats.TOUGHNESS,
                                     on_success=(effects.HealthDamage(
                                         (2, 10, 0),
                                         stat_bonus=stats.TOUGHNESS,
                                         element=stats.RESIST_COLD,
                                         anim=animobs.SnowCloud), ),
                                     on_failure=(effects.HealthDamage(
                                         (1, 10, 0),
                                         stat_bonus=None,
                                         element=stats.RESIST_COLD,
                                         anim=animobs.SnowCloud), )),
                                 com_tar=targetarea.Cone(reach=5),
                                 ai_tar=invocations.TargetEnemy(),
                                 mp_cost=12),
        invocations.MPInvocation("Acid Breath",
                                 effects.OpposedRoll(
                                     att_stat=stats.REFLEXES,
                                     def_stat=stats.REFLEXES,
                                     on_success=(effects.HealthDamage(
                                         (3, 8, 0),
                                         stat_bonus=stats.TOUGHNESS,
                                         element=stats.RESIST_ACID,
                                         anim=animobs.GreenCloud), ),
                                     on_failure=(effects.HealthDamage(
                                         (2, 6, 0),
                                         stat_bonus=None,
                                         element=stats.RESIST_ACID,
                                         anim=animobs.GreenCloud), )),
                                 com_tar=targetarea.Line(reach=8),
                                 ai_tar=invocations.TargetEnemy(),
                                 mp_cost=10),
    )

    def init_monster(self):
        self.levels.append(base.Terror(9, self))
Example #8
0
class GreatCaveWyrm(base.Monster):
    name = "Great Cave Wyrm"
    statline = { stats.STRENGTH: 27, stats.TOUGHNESS: 21, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 16, stats.PIETY: 17, stats.CHARISMA: 16,
        stats.PHYSICAL_ATTACK: 20, stats.RESIST_POISON: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 42
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.HAB_CAVE,
               context.MAP_DUNGEON, context.MTY_LEADER, context.MTY_DRAGON,
               context.MTY_BOSS, context.DES_EARTH, context.GEN_DRAGON)
    ENC_LEVEL = 20
    COMBAT_AI = aibrain.BruiserAI()
    TREASURE = treasuretype.DragonHoard()
    LONER = True
    COMPANIONS = (
        OldCaveDragon,
        AncientCaveDragon,
    )
    ATTACK = items.Attack((7, 8, 0),
                          element=stats.RESIST_SLASHING,
                          extra_effect=abilities.POISON_ATTACK_2d6)
    TECHNIQUES = (invocations.MPInvocation(
        "Toxic Breath",
        effects.OpposedRoll(def_stat=stats.TOUGHNESS,
                            anim=None,
                            on_success=(
                                effects.HealthDamage(
                                    (9, 6, 0),
                                    stat_bonus=None,
                                    element=stats.RESIST_POISON,
                                    anim=animobs.PoisonCloud),
                                effects.Paralyze(max_duration=3),
                                effects.Enchant(enchantments.PoisonClassic,
                                                anim=animobs.DeathSparkle),
                            ),
                            on_failure=(effects.HealthDamage(
                                (3, 9, 0),
                                stat_bonus=None,
                                element=stats.RESIST_POISON,
                                anim=animobs.PoisonCloud), )),
        com_tar=targetarea.Cone(reach=8),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=38), )

    def init_monster(self):
        self.levels.append(base.Terror(28, self))
Example #9
0
class FireWeasel(base.Monster):
    name = "Fire Weasel"
    statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 3, stats.PIETY: 14, stats.CHARISMA: 9 }
    SPRITENAME = "monster_animals.png"
    FRAME = 29
    TEMPLATES = (stats.FIRE, )
    MOVE_POINTS = 10
    VOICE = None
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS,
               context.DES_FIRE, context.MTY_BEAST, context.MTY_CREATURE,
               context.MTY_BOSS, context.GEN_NATURE)
    ENC_LEVEL = 4

    ATTACK = items.Attack((1, 6, 0),
                          element=stats.RESIST_PIERCING,
                          extra_effect=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),
                              )))

    TECHNIQUES = (invocations.MPInvocation(
        "Fire Breath",
        effects.OpposedRoll(att_skill=stats.PHYSICAL_ATTACK,
                            att_stat=stats.REFLEXES,
                            def_stat=stats.REFLEXES,
                            on_success=(effects.HealthDamage(
                                (1, 6, 0),
                                stat_bonus=stats.TOUGHNESS,
                                element=stats.RESIST_FIRE,
                                anim=animobs.RedCloud), ),
                            on_failure=(effects.HealthDamage(
                                (1, 3, 0),
                                stat_bonus=None,
                                element=stats.RESIST_FIRE,
                                anim=animobs.RedCloud), )),
        com_tar=targetarea.Cone(reach=4),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=3), )

    def init_monster(self):
        self.levels.append(base.Beast(4, self))
Example #10
0
class Scarab(base.Monster):
    name = "Scarab"
    statline = { stats.STRENGTH: 13, stats.TOUGHNESS: 16, stats.REFLEXES: 14, \
        stats.INTELLIGENCE: 1, stats.PIETY: 12, stats.CHARISMA: 1,
        stats.RESIST_SOLAR: 50 }
    SPRITENAME = "monster_bugs.png"
    FRAME = 5
    TEMPLATES = (stats.BUG, )
    MOVE_POINTS = 8
    VOICE = None
    HABITAT = (context.HAB_TUNNELS, context.HAB_DESERT, context.SET_EVERY,
               context.DES_SOLAR, context.MTY_BEAST, context.MTY_CREATURE)
    ENC_LEVEL = 7
    TECHNIQUES = (invocations.MPInvocation(
        "Draining Breath",
        effects.TargetIsEnemy(
            on_true=(effects.OpposedRoll(
                att_skill=stats.PHYSICAL_ATTACK,
                att_stat=stats.REFLEXES,
                def_stat=stats.REFLEXES,
                on_success=(effects.HealthDamage(
                    (1, 8, 0),
                    stat_bonus=stats.TOUGHNESS,
                    element=stats.RESIST_FIRE,
                    anim=animobs.PurpleExplosion), ),
                on_failure=(effects.HealthDamage(
                    (1, 4, 0),
                    stat_bonus=None,
                    element=stats.RESIST_FIRE,
                    anim=animobs.PurpleExplosion), )), ),
            on_false=(effects.NoEffect(anim=animobs.PurpleExplosion), )),
        com_tar=targetarea.Cone(reach=4),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=3), )
    ATTACK = items.Attack((1, 6, 0),
                          element=stats.RESIST_PIERCING,
                          extra_effect=abilities.POISON_ATTACK_2d6)

    def init_monster(self):
        self.levels.append(base.Beast(7, self))
Example #11
0
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))
Example #12
0
class FireGlove(Enhancer):
    NAMEPAT = "{0} of Fire"
    DESCPAT = "{0} The user may project an arc of fire from the fingertips."
    PLUSRANK = 4
    AFFECTS = (GLOVE, GAUNTLET)
    BONUSES_PER_RANK = stats.StatMod({stats.RESIST_FIRE: 15})
    TYPE = ET_PRIMARY
    TECH = (invocations.Invocation("Flamethrower",
                                   effects.OpposedRoll(
                                       att_skill=stats.PHYSICAL_ATTACK,
                                       att_stat=stats.REFLEXES,
                                       def_stat=stats.REFLEXES,
                                       on_success=(effects.HealthDamage(
                                           (2, 5, 0),
                                           stat_bonus=stats.TOUGHNESS,
                                           element=stats.RESIST_FIRE,
                                           anim=animobs.RedCloud), ),
                                       on_failure=(effects.HealthDamage(
                                           (1, 6, 0),
                                           stat_bonus=None,
                                           element=stats.RESIST_FIRE,
                                           anim=animobs.RedCloud), )),
                                   com_tar=targetarea.Cone(reach=4),
                                   ai_tar=invocations.TargetEnemy()), )
Example #13
0
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))
class CreepingCoins(base.Monster):
    name = "Creeping Coins"
    statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 1, stats.PIETY: 10, stats.CHARISMA: 1, \
        stats.RESIST_COLD: 155 }
    SPRITENAME = "monster_constructs.png"
    FRAME = 18
    TEMPLATES = (stats.CONSTRUCT, )
    MOVE_POINTS = 6
    VOICE = None
    HABITAT = (context.HAB_CAVE, context.SET_RENFAN, context.MTY_CONSTRUCT,
               context.DES_ICE)
    ENC_LEVEL = 7
    TREASURE = treasuretype.High()
    COMBAT_AI = aibrain.SteadyAI()
    ATTACK = items.Attack((2, 6, 0), element=stats.RESIST_CRUSHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Cold Blast",
        effects.OpposedRoll(att_modifier=10,
                            def_stat=stats.REFLEXES,
                            on_success=(effects.HealthDamage(
                                (1, 10, 0),
                                stat_bonus=None,
                                element=stats.RESIST_COLD,
                                anim=animobs.SnowCloud), ),
                            on_failure=(effects.HealthDamage(
                                (1, 6, 0),
                                stat_bonus=None,
                                element=stats.RESIST_COLD,
                                anim=animobs.SnowCloud), )),
        com_tar=targetarea.Cone(reach=5),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=1), )

    def init_monster(self):
        self.levels.append(base.Defender(6, self))
Example #15
0
class WaterElemental( base.Monster ):
    name = "Water Elemental"
    statline = { stats.STRENGTH: 25, stats.TOUGHNESS: 25, stats.REFLEXES: 20, \
        stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 12,
        stats.RESIST_WATER: 100 }
    SPRITENAME = "monster_e_water.png"
    FRAME = 0
    TEMPLATES = (stats.ELEMENTAL,stats.WATER)
    MOVE_POINTS = 20
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.DES_WATER, context.SUMMON_ELEMENTAL )
    ENC_LEVEL = 12
    ATTACK = items.Attack( (1,10,0), element = stats.RESIST_CRUSHING, extra_effect =
        effects.HealthDamage( (1,10,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_WATER, anim=animobs.Spiral )
    )
    TECHNIQUES = ( invocations.MPInvocation( "Tidal Wave",
        effects.OpposedRoll( def_stat=stats.REFLEXES, on_success = (
            effects.HealthDamage( (3,8,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_WATER, anim=animobs.Bubbles )
        ,), on_failure = (
            effects.HealthDamage( (1,12,0), stat_bonus=None, element=stats.RESIST_WATER, anim=animobs.Bubbles )
        ,) ), mp_cost=10, com_tar=targetarea.Cone(), ai_tar=invocations.TargetEnemy() ),
    )
    def init_monster( self ):
        self.levels.append( base.Beast( 12, self ) )
Example #16
0
        effects.HealthDamage( (1,9,1), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ),
        effects.StatDamage( stats.STRENGTH, amount=1 )
    ,) ), rank=3, gems={LUNAR:2}, com_tar=targetarea.SingleTarget(),ai_tar=invocations.TargetEnemy(),shot_anim=animobs.MysticBolt )


# CIRCLE 4

HELLBLAST = Spell( "Hellblast",
    "Eldritch flames spew forth to damage targets for 3d6 dark damage. Those touched by the flames will have their energy drained.",
    effects.OpposedRoll( on_success = (
        effects.HealthDamage( (3,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ),
        effects.ManaDamage((3,6,0), stat_bonus=stats.INTELLIGENCE ),
    ), on_failure = (
        effects.HealthDamage( (1,6,2), stat_bonus=None, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ),
        effects.ManaDamage((1,8,0), stat_bonus=None ),
    ) ), rank=4, gems={LUNAR:2}, com_tar=targetarea.Cone(reach=8),
    ai_tar=invocations.TargetEnemy() )


# CIRCLE 5

DEEP_SLEEP = Spell( "Deep Sleep",
    "Causes living creatures in a 4 tile radius to fall asleep.",
    effects.TargetIs( pat=effects.ANIMAL, anim=animobs.PurpleSparkle, on_true = (
        effects.OpposedRoll( att_modifier=10, on_success = (
            effects.CauseSleep(),
        ))
    ,) ), rank=5, gems={LUNAR:2}, com_tar=targetarea.Blast(radius=4), 
    ai_tar=invocations.TargetMobileEnemy(min_distance=5) )

DEATH_RAY = Spell( "Death Ray",
Example #17
0
SHOUT = Spell(
    "Shout",
    "The caster's words become a sonic wave, doing 1d8 wind damage to all targets within reach.",
    effects.OpposedRoll(on_success=(effects.HealthDamage(
        (1, 8, 0),
        stat_bonus=stats.INTELLIGENCE,
        element=stats.RESIST_WIND,
        anim=animobs.SonicHit), ),
                        on_failure=(effects.HealthDamage(
                            (1, 4, 0),
                            stat_bonus=None,
                            element=stats.RESIST_WIND,
                            anim=animobs.SonicHit), )),
    rank=2,
    gems={AIR: 2},
    com_tar=targetarea.Cone(reach=4),
    ai_tar=invocations.TargetEnemy(),
    mpfudge=-1)

# CIRCLE THREE

THUNDER_STRIKE = Spell(
    "Thunder Strike",
    "A bolt of lightning strikes all in its path for 3d6 damage.",
    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),
Example #18
0
import animobs
import stats
import invocations
import context

# Mages get AIR, FIRE, and LUNAR magic. These spells use a combination of colors.

# CIRCLE ONE

FIRE_ARC = Spell( "Fire Arc",
    "Conjures an arc of intense heat which burns enemies for 1d6 damage. This spell has a short range but can affect several targets.",
    effects.OpposedRoll( on_success = (
        effects.HealthDamage( (1,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_FIRE, anim=animobs.OrangeExplosion )
    ,), on_failure = (
        effects.HealthDamage( (1,2,0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.OrangeExplosion )
    ,) ), rank=1, gems={FIRE:1,LUNAR:1}, com_tar=targetarea.Cone(reach=3), ai_tar=invocations.TargetEnemy() )

SHOCK_SPHERE = Spell( "Shock Sphere",
    "An electrical burst will deal 1-6 points of damage to all enemies within two tiles of the caster.",
    effects.TargetIsEnemy( on_true = (
        effects.OpposedRoll( on_success = (
            effects.HealthDamage( (1,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LIGHTNING, anim=animobs.BlueZap )
        ,), on_failure = (
            effects.HealthDamage( (1,3,0), stat_bonus=None, element=stats.RESIST_LIGHTNING, anim=animobs.BlueZap )
    ,) ) ,) ), rank=1, gems={AIR:1,LUNAR:1}, com_tar=targetarea.SelfCentered(radius=2,exclude_middle=True),
    ai_tar=invocations.TargetEnemy() )

# CIRCLE TWO

LIGHTNING_BOLT = Spell( "Lightning Bolt",
    "This spell conjures magical lightning, which will unerringly hit one foe for 2d8 damage.",
Example #19
0
HEAT_WAVE = Spell(
    "Heat Wave",
    "A rapidly expanding wall of heat is projected from your hands. Anyone standing in its way takes 6d6 points of fire damage.",
    effects.OpposedRoll(on_success=(effects.HealthDamage(
        (6, 6, 0),
        stat_bonus=stats.INTELLIGENCE,
        element=stats.RESIST_FIRE,
        anim=animobs.DragonFire), ),
                        on_failure=(effects.HealthDamage(
                            (3, 6, 0),
                            stat_bonus=None,
                            element=stats.RESIST_FIRE,
                            anim=animobs.DragonFire), )),
    rank=5,
    gems={FIRE: 3},
    com_tar=targetarea.Cone(),
    ai_tar=invocations.TargetEnemy())

# CIRCLE 6

CALL_FIRE_ELEMENTAL = Spell(
    "Call Fire Elemental",
    "This spell will call forth a living vortex of fire to serve you for the duration of combat.",
    effects.CallMonster(
        {
            context.DES_FIRE: True,
            context.SUMMON_ELEMENTAL: True
        },
        12,
        anim=animobs.RedSparkle),
    rank=6,
Example #20
0
import stats
import context
import invocations

# Druids get EARTH, FIRE, and SOLAR magic. These spells use a combination of
# those colors.

# CIRCLE ONE

ACID_SPRAY = Spell( "Acid Spray",
    "A stream of acid sprays forth, burning enemies for 1d6 damage. This spell has a short range but can affect several targets.",
    effects.OpposedRoll( on_success = (
        effects.HealthDamage( (1,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_ACID, anim=animobs.GreenExplosion )
    ,), on_failure = (
        effects.HealthDamage( (1,2,0), stat_bonus=None, element=stats.RESIST_ACID, anim=animobs.GreenExplosion )
    ,) ), rank=1, gems={FIRE:1,EARTH:1}, com_tar=targetarea.Cone(reach=3), ai_tar=invocations.TargetEnemy() )


# CIRCLE TWO

CALL_ANIMAL = Spell( "Call Animal",
    "This spell will summon a natural creature to fight on your behaf.",
    effects.CallMonster( {context.MTY_CREATURE: True, context.DES_EARTH: context.MAYBE, context.GEN_NATURE: context.MAYBE, context.DES_SOLAR: context.MAYBE}, 4, anim=animobs.OrangeSparkle ),
    rank=2, gems={EARTH:1,SOLAR:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 4 )

# CIRCLE THREE

CALL_CREATURE = Spell( "Call Creature",
    "This spell will summon a large natural creature to fight on your behaf.",
    effects.CallMonster( {context.MTY_CREATURE: True, context.DES_EARTH: context.MAYBE, context.GEN_NATURE: context.MAYBE, context.DES_SOLAR: context.MAYBE}, 6, anim=animobs.OrangeSparkle ),
    rank=3, gems={EARTH:2,SOLAR:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 6 )