Esempio n. 1
0
class Bodak( base.Monster ):
    name = "Bodak"
    statline = { stats.STRENGTH: 13, stats.TOUGHNESS: 12, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 6, stats.PIETY: 12, stats.CHARISMA: 12,
        stats.RESIST_ACID: 75, stats.RESIST_LIGHTNING: 155 }
    SPRITENAME = "monster_undead.png"
    FRAME = 0
    TEMPLATES = (stats.UNDEAD,stats.DEMON)
    MOVE_POINTS = 8
    VOICE = None
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.MTY_UNDEAD, context.MTY_BOSS,
     context.DES_LUNAR, context.GEN_UNDEAD )
    ENC_LEVEL = 10
    TREASURE = None
    ATTACK = items.Attack( (1,8,0), element = stats.RESIST_CRUSHING)
    TECHNIQUES = ( invocations.MPInvocation( "Death Gaze",
      effects.OpposedRoll( att_stat=stats.CHARISMA, 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=10
    ),)
    def init_monster( self ):
        self.levels.append( base.Terror( 9, self ) )
 def critical_hit_effect( self, roll_mod=0 ):
     return effects.TargetIs( effects.ANIMAL, on_true=(
         effects.PercentRoll( roll_skill=stats.CRITICAL_HIT, roll_stat=None, 
         roll_modifier=min(roll_mod*2,0), target_affects=True, on_success=(
             effects.InstaKill( anim=animobs.CriticalHit )
         ,) )
     ,) ) 
Esempio n. 3
0
class SkeletonHunter( base.Monster ):
    name = "Skeleton Hunter"
    statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 12, stats.REFLEXES: 16, \
        stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 10,
        stats.NATURAL_DEFENSE: 10, stats.PHYSICAL_ATTACK: 5 }
    SPRITENAME = "monster_skeletons.png"
    FRAME = 9
    TEMPLATES = (stats.UNDEAD,stats.BONE)
    MOVE_POINTS = 8
    VOICE = None
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN,
     context.MTY_UNDEAD, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_BOSS, 
     context.DES_EARTH, context.GEN_UNDEAD )
    ENC_LEVEL = 6
    TREASURE = treasuretype.High((items.BOW,items.ARROW,items.ARROW))
    LONER = True
    COMPANIONS = (Shade,Ghast,SkeletonMage,SkeletonFighter,SkeletonThief,SkeletalHound)
    COMBAT_AI = aibrain.SteadyAI()
    ATTACK = items.Attack( (2,6,0), element = stats.RESIST_CRUSHING )
    TECHNIQUES = ( invocations.Invocation( "Arrow",
      effects.PhysicalAttackRoll( att_stat=stats.REFLEXES, on_success = (
        effects.HealthDamage( (1,8,0), stat_bonus=None, element=stats.RESIST_PIERCING, anim=animobs.RedBoom ),
        effects.TargetIs( effects.ANIMAL, on_true=(
            effects.PercentRoll( roll_skill=stats.MAGIC_ATTACK, roll_stat=None, 
            roll_modifier=-5, target_affects=True, on_success=(
                effects.InstaKill( anim=animobs.CriticalHit )
            ,) )
        ,) ) 
      ), on_failure = (
        effects.NoEffect( anim=animobs.SmallBoom )
      ,) ), com_tar=targetarea.SingleTarget(reach=8), shot_anim=animobs.Arrow, ai_tar=invocations.TargetEnemy()
    ), )

    def init_monster( self ):
        self.levels.append( base.Humanoid( 5, self ) )
Esempio n. 4
0
class HolyBow(Enhancer):
    NAMEPAT = "Holy {0}"
    DESCPAT = "{0} A hit from this weapon may disrupt unholy creatures."
    PLUSRANK = 5
    AFFECTS = (BOW, SLING)
    ATTACK_ON_HIT = effects.TargetIs(
        effects.UNHOLY,
        on_true=(effects.OpposedRoll(
            att_stat=stats.PIETY,
            att_modifier=-10,
            on_success=(effects.InstaKill(anim=animobs.CriticalHit), ),
            on_failure=(effects.OpposedRoll(
                att_modifier=10,
                on_success=(effects.Paralyze(max_duration=3), ),
            ), ),
        ), ))
    BONUSES_PER_RANK = stats.StatMod({
        stats.PHYSICAL_ATTACK: 10,
        stats.RESIST_LUNAR: 25
    })
    TYPE = ET_SECONDARY
Esempio n. 5
0
class Basilisk( base.Monster ):
    name = "Basilisk"
    statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 15, stats.REFLEXES: 8, \
        stats.INTELLIGENCE: 2, stats.PIETY: 12, stats.CHARISMA: 11 }
    SPRITENAME = "monster_default.png"
    FRAME = 39
    TEMPLATES = (stats.REPTILE,)
    MOVE_POINTS = 8
    VOICE = None
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.MTY_BEAST, context.MTY_BOSS )
    ENC_LEVEL = 6
    ATTACK = items.Attack( (1,8,0), element = stats.RESIST_PIERCING )
    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=4), shot_anim=animobs.PurpleVortex, ai_tar=invocations.TargetEnemy(), mp_cost=6
    ), )
    def init_monster( self ):
        self.levels.append( base.Beast( 6, self ) )
Esempio n. 6
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. 7
0
class HolyWeapon(Enhancer):
    NAMEPAT = "Holy {0}"
    DESCPAT = "{0} It does an extra 1d8 holy damage and disrupts unholy creatures."
    PLUSRANK = 5
    AFFECTS = (SWORD, AXE, MACE, DAGGER, STAFF, POLEARM, FARMTOOL, LANCE)
    ATTACK_ON_HIT = effects.HealthDamage(
        (1, 8, 0),
        stat_bonus=None,
        element=stats.RESIST_SOLAR,
        anim=animobs.YellowExplosion,
        on_success=(effects.TargetIs(
            effects.UNHOLY,
            on_true=(effects.OpposedRoll(
                att_stat=stats.PIETY,
                att_modifier=-20,
                on_success=(effects.InstaKill(anim=animobs.CriticalHit), ),
                on_failure=(effects.OpposedRoll(on_success=(effects.Paralyze(
                    max_duration=3), ), ), )), )), ))
    BONUSES_PER_RANK = stats.StatMod({
        stats.PHYSICAL_ATTACK: 5,
        stats.RESIST_LUNAR: 25
    })
    TYPE = ET_SECONDARY
Esempio n. 8
0
class Cockatrice( base.Monster ):
    name = "Cockatrice"
    statline = { stats.STRENGTH: 8, stats.TOUGHNESS: 8, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 1, stats.PIETY: 10, stats.CHARISMA: 4 }
    SPRITENAME = "monster_default.png"
    FRAME = 21
    TEMPLATES = ()
    MOVE_POINTS = 10
    VOICE = None
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN,
     context.DES_AIR, context.DES_EARTH,
     context.MTY_BEAST, context.MTY_BOSS )
    ENC_LEVEL = 4
    COMPANIONS = (animals.Chicken,)
    ATTACK = items.Attack( (1,6,0), element = stats.RESIST_PIERCING, skill_mod=stats.REFLEXES )
    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=4), shot_anim=animobs.PurpleVortex, ai_tar=invocations.TargetEnemy(), mp_cost=4
    ), )
    def init_monster( self ):
        self.levels.append( base.Beast( 3, self ) )
Esempio n. 9
0
    rank=5,
    gems={AIR: 3},
    com_tar=targetarea.Blast(radius=3),
    shot_anim=animobs.Whirlwind,
    ai_tar=invocations.TargetEnemy(min_distance=4))

# CIRCLE SIX

DISMISSAL = Spell(
    "Dismissal",
    "Forces one demon, elemental, or spirit to leave the mortal realm and return to its home plane.",
    effects.TargetIs(
        effects.OTHERWORLDLY,
        anim=animobs.BlueSparkle,
        on_true=(effects.OpposedRoll(
            on_success=(effects.InstaKill(anim=animobs.CriticalHit), ),
            on_failure=(effects.HealthDamage(
                (3, 12, 0),
                stat_bonus=stats.INTELLIGENCE,
                element=stats.RESIST_SOLAR,
                anim=animobs.YellowExplosion), )), ),
        on_false=(effects.NoEffect(anim=animobs.Caption), )),
    rank=6,
    gems={AIR: 2},
    com_tar=targetarea.SingleTarget(),
    shot_anim=animobs.MysticBolt)

CALL_AIR_ELEMENTAL = Spell(
    "Call Air Elemental",
    "This spell will summon a living embodiment of the skies to fight on your behalf.",
    effects.CallMonster({
    ai_tar=invocations.TargetEnemy(min_distance=3),shot_anim=animobs.BlueComet )


# CIRCLE SEVEN

SUMMONING = Spell( "Summoning",
    "This spell opens a portal to the nether realms and calls forth a powerful creature for you to command.",
    effects.CallMonster( {(context.MTY_UNDEAD,context.MTY_DEMON): True, context.DES_LUNAR: context.MAYBE, context.GEN_UNDEAD: context.MAYBE}, 14, anim=animobs.PurpleSparkle ),
    rank=7, gems={EARTH:2,LUNAR:3}, com_tar=targetarea.SingleTarget(reach=3), ai_tar=invocations.TargetEmptySpot(), mpfudge=13 )

DEEP_DROWNING = Spell( "Deep Drowning",
    "Conjures a turbulent water vortex in a small area. Enemies trapped inside take 4d12 water damage and may drown.",
    effects.HealthDamage( (4,12,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_WATER, anim=animobs.Bubbles, on_success=(
        effects.TargetIs( effects.CAN_DROWN, on_true=(
            effects.OpposedRoll( def_stat=stats.TOUGHNESS, on_success = (
                effects.InstaKill( anim=animobs.CriticalHit ),
            )),
        ))
    ,) ), rank=7, gems={LUNAR:2,WATER:2}, com_tar=targetarea.Blast(radius=1),
    ai_tar=invocations.TargetEnemy(min_distance=2),shot_anim=animobs.CrystalBall )


# CIRCLE EIGHT

# CIRCLE NINE

GREATER_SUMMONING = Spell( "Greater Summoning",
    "This spell opens a portal to the nether realms and calls forth a diabolical creature to do your bidding.",
    effects.CallMonster( {(context.MTY_UNDEAD,context.MTY_DEMON): True, context.DES_LUNAR: context.MAYBE, context.GEN_UNDEAD: context.MAYBE}, 18, anim=animobs.PurpleSparkle ),
    rank=9, gems={EARTH:3,LUNAR:3}, com_tar=targetarea.SingleTarget(reach=3), ai_tar=invocations.TargetEmptySpot(), mpfudge=17 )