Example #1
0
    def spawnSpearState(self, mode=0):

        p = engine.player

        # MODE 1 -- random spears
        if mode == 0:

            rngX = range(3, 15, 4)
            rngY = range(4, 16, 4)

            for rx in rngX:
                for ry in rngY:
                    x = rx * ika.Tileset.width + ika.Random(
                        0, ika.Tileset.width * 4)
                    y = ry * ika.Tileset.height + ika.Random(
                        0, ika.Tileset.height * 4)
                    engine.addEntity(
                        ManeaterSpear(
                            ika.Entity(x, y, self.layer,
                                       'plant_tentacle.ika-sprite'), self))

            engine.addEntity(
                ManeaterSpear(
                    ika.Entity(p.x, p.y, self.layer,
                               'plant_tentacle.ika-sprite'), self))

        yield None
Example #2
0
 def cutBush(self, me, rect):
     tiles = tilesAt(*rect)
     #ika.Log(str(tiles))
     for t in tiles:
         if t[2] in [78, 368, 369, 370]:  #bush!
             ika.Map.SetTile(t[0], t[1], me.layer, 0)
             ika.Map.SetObs(t[0], t[1], me.layer, 0)
             flower = Leaf(
                 ika.Entity(t[0] * 16 + 2, t[1] * 16 + 4, me.layer,
                            'flowercenter.ika-sprite'))
             engine.addEntity(flower)
             for i in range(5 + ika.Random(0, 3)):
                 lx = t[0] * 16 + ika.Random(-4, 12)
                 ly = t[1] * 16 + ika.Random(0, 7)
                 leaf = Leaf(
                     ika.Entity(lx, ly, me.layer, 'flowerleaf.ika-sprite'))
                 engine.addEntity(leaf)
             chance = ika.Random(0, 100)
             if chance > 90:
                 shell = powerup.createShell(
                     ika.Entity(t[0] * 16 + 4, t[1] * 16 + 4, me.layer,
                                'seashell.ika-sprite'))
                 engine.addEntity(shell)
             elif chance > 80:
                 berry = powerup.createRedBerry(
                     ika.Entity(t[0] * 16 + 4, t[1] * 16 + 4, me.layer,
                                'berry.ika-sprite'))
                 engine.addEntity(berry)
Example #3
0
def spawnpack():
    if 'waterrune' not in savedata.__dict__ and 'pack' not in savedata.__dict__:      
        savedata.pack = 'True' 
        e = [
        RazorMane(ika.Entity(15* 16, 29 * 16, system.engine.player.layer, 'razormane.ika-sprite')),
        RazorMane(ika.Entity(11* 16, 31 * 16, system.engine.player.layer, 'razormane.ika-sprite')),
        RazorMane(ika.Entity(14* 16, 7 * 16, system.engine.player.layer, 'razormane.ika-sprite')),
        RazorMane(ika.Entity(16* 16, 8 * 16, system.engine.player.layer, 'razormane.ika-sprite')),
        RazorMane(ika.Entity(19* 16, 29 * 16, system.engine.player.layer, 'razormane.ika-sprite'))
        ]
        for en in e:
            system.engine.addEntity(en)                
        system.engine.mapThings.append(DeathListener(e))
        sound.playMusic("music/competative.xm")    
        sound.razorManeStrike.Play()
Example #4
0
    def update(self):
        t = self.touches(system.engine.player)
        if t and not self.isTouching:
            self.isTouching = True

            # find a stick of TNT
            tnt = [
                k for k in savedata.__dict__.keys()
                if k.startswith('dynamite') and savedata.__dict__[k] == 'True'
            ]

            if tnt:
                # TODO: explode animation here
                setattr(savedata, tnt[0], 'False')
                setattr(savedata, self.flagName, 'True')
                system.engine.player.stats.tnt -= 1

                e = ika.Entity(self.x - 8, self.y, self.ent.layer + 1,
                               'explosion.ika-sprite')
                system.engine.addEntity(Explosion(e))

                system.engine.destroyEntity(self)
                #system.engine.addCaptions(Caption('Blew the rock apart!'))
                automap.map.SetCollected('Boulder')

        else:
            self.isTouching = False
Example #5
0
    def __init__(self, x=0, y=0, layer=0):
        super(Player, self).__init__(ika.Entity(x, y, layer, PLAYER_SPRITE),
                                     _playerAnim)

        self._animator = _Anim()

        self.state = self.standState()
        self.stats = initialStats.clone()

        self.baseStats = self.stats.clone()

        self.expFactor = 50.0
        self.exponent = 1.9

        self.sword = Sword()
        self.spear = Spear()
        self.spear.item = item.Item('Fishing Pole')
        self.sword.item = item.Item('Sharp Slicer')
        self.armor = None

        self.grapple = Grapple()

        self.items = []

        #self.weapon = self.spear
        self.weapon = self.sword
Example #6
0
    def spawnTentacleState(self):

        p = engine.player

        yp = [7.5, 10.5, 13.5]
        xp = [4.5, 12.5]
        comb = []

        order = []

        for y in yp:
            for x in xp:
                comb.append((x, y))

        for n in range(len(comb)):
            a = ika.Random(0, len(comb))
            order.append(comb[a])
            comb.pop(a)

        for x, y in order:
            t = ManeaterTentacle(
                ika.Entity(int(x * ika.Tileset.width),
                           int(y * ika.Tileset.height), self.layer,
                           'maneater_tentacle.ika-sprite'), self)
            t.direction = [dir.RIGHT, dir.LEFT][int(x) / 10]
            engine.addEntity(t)
            sound.maneaterTentacle.Play()

            for time in range(25):
                yield None

        yield None
        self.stop()
Example #7
0
    def generatePowerup(self, enemy):

        drop = None
        chance = ika.Random(0, 100)
        kwargs = {}

        if enemy.powerup:

            drop = enemy.powerup

        elif chance > 50:

            #if chance > 98:
            #    drop = Skull
            #elif chance > 95:
            #    drop = GoldenEgg
            #elif chance > 92:
            #    drop = BlackPearl

            if chance > 93:
                drop = GreenBerry
            elif chance > 75:
                drop = RedBerry
            else:
                drop = Seashell
                kwargs['money'] = self.ent.stats.money

        if drop:
            x = self.x + self.w / 2 - 8
            y = self.y + self.h / 2 - 8
            ent = ika.Entity(x, y, self.ent.layer, drop.SPRITE)
            engine.addEntity(drop(ent, **kwargs))
Example #8
0
    def submergeMood(self):

        p = engine.player

        yield self.submergeState()
        yield self.idleState(150)

        while True:
            dist = math.hypot(p.x - self.x, p.y - self.y)

            if dist > 100:
                yield self.growState()
                self.mood = self.attackMood
                break

            elif dist < 20:
                d = max(1, self.stats.att - p.stats.pres)
                p.hurt(d, self.recoil, self.direction)
                yield self.growState()
                self.mood = self.attackMood
                yield self.idleState()
                break

            else:
                engine.addEntity(
                    ManeaterSpear(
                        ika.Entity(p.x - 8, p.y - 8, self.layer,
                                   'plant_tentacle.ika-sprite'), self))
                yield self.idleState(60)

            yield self.idleState()
Example #9
0
 def update(self):
     if 'nearend' in savedata.__dict__ and 'waterguard' not in savedata.__dict__:
         sound.playMusic("music/resurrection.it")
         y = SoulReaver(ika.Entity(15* 16, 17 * 16, system.engine.player.layer, 'soulreaver.ika-sprite'))
         system.engine.addEntity(y)
         system.engine.mapThings.append(DeathListener2(y))
         return True
Example #10
0
 def update(self):
     if self.yeti.stats.hp == 0:
         sound.playMusic("music/winter.ogg")
         e = ika.Entity(5 * 16, 8 * 16, 2, 'firerune.ika-sprite')
         e.name = 'firerune'
         system.engine.addEntity(FireRune(e))
         return True
Example #11
0
 def update(self):
     if 'waterguard' in savedata.__dict__ and 'fireguard' in savedata.__dict__ and 'windguard' in savedata.__dict__:
         system.engine.addEntity(
             Yeti(
                 ika.Entity(35 * 16, 19 * 16, system.engine.player.layer,
                            'yeti.ika-sprite')))
         return True
Example #12
0
    def attackState(self, direction):
        self.direction = direction
        self.anim = 'bowattack'
        self.stop()

        # Windup time: wait for the first frame to finish showing
        while self._animator.index == 0:
            yield None

        # Spawn an arrow
        arrow = Arrow(
            ika.Entity(self.x, self.y, self.layer, 'arrow.ika-sprite'),
            direction)

        # compensate for rectangular hotspot blech.
        dx, dy = dir.delta[direction]
        if dx > 0: arrow.x += 16
        if dy <= 0: arrow.y -= 8

        system.engine.addEntity(arrow)

        # Stall
        i = 50
        while i > 0:
            i -= 1
            yield None
Example #13
0
 def update(self):
     sound.playMusic('music/resurrection.it')
     y = SoulReaver(ika.Entity(21 * 16, 13 * 16, 3,
                               'soulreaver.ika-sprite'))
     system.engine.addEntity(y)
     system.engine.mapThings.append(DeathListener2(y))
     return True
Example #14
0
def finalBattle():
    if 'finalbattle' in savedata:
        pass
        # make the river passable
    else:
        savedata['finalbattle'] = 'True'

        p = system.engine.player

        def walkUp():
            p.move(dir.UP, 96)
            p.anim = 'walk'
            for n in range(96):
                yield None

        p.state = walkUp()

        for n in range(96):
            system.engine.tick()
            system.engine.draw()
            ika.Video.ShowPage()
            ika.Input.Update()

        def noOp():
            while True:
                yield None

        p.anim = 'stand'
        p.state = noOp()

        for n in range(256):
            # teh earthquake
            ika.Map.xwin += ika.Random(-4, 5)
            ika.Map.ywin += ika.Random(-4, 5)
            system.engine.tick()
            system.engine.draw()
            ika.Video.ShowPage()
            ika.Input.Update()

        s = Serpent(ika.Entity(25 * 16, 24 * 16, p.layer,
                               'serpent.ika-sprite'))
        s.anim = 'appear'
        system.engine.addEntity(s)

        for n in range(19, 32):
            # close off the way back
            ika.Map.SetTile(n, 38, p.layer, 26)
            ika.Map.SetTile(n, 39, p.layer, 32)
            ika.Map.SetObs(n, 38, p.layer, True)
            system.engine.tick()
            system.engine.draw()
            ika.Video.ShowPage()
            ika.Input.Update()

        p.state = p.defaultState()

        s.state = s.roarState()
        system.engine.synchTime()
        system.engine.mapThings.append(DeathListener(s))
Example #15
0
 def update(self):
     if 'nearend' in savedata.__dict__:
         sound.playMusic('music/resurrection.it')
         y = SoulReaver(
             ika.Entity(19 * 16, 20 * 16, 2, 'soulreaver.ika-sprite'))
         system.engine.addEntity(y)
         system.engine.mapThings.append(DeathListener(y))
         return True
Example #16
0
 def spawnTentacleState(self):
     p = engine.player
     engine.addEntity(
         Tentacle(
             ika.Entity(p.x, p.y, self.layer, 'plant_tentacle.ika-sprite'),
             self))
     yield None
     self.stop()
Example #17
0
 def update(self):
     if self.yeti.stats.hp == 0:
         e = ika.Entity(315, 320, 2, 'unityrune.ika-sprite')
         e.name = 'unityrune'
         system.engine.addEntity(UnityRune(e))
         sound.playMusic("music/lampoons.it")
         savedata.finalrune = 'True'
         system.engine.addCaptions(Caption('Rune Guardian defeated.'))
         return True
Example #18
0
 def spawnSporeState(self):
     x = self.x + self.ent.hotwidth / 2 - 4
     y = self.y + self.ent.hotheight / 2 - 4
     engine.addEntity(
         Spore(
             ika.Entity(x, y, ika.Map.layercount - 1,
                        'plant_spore.ika-sprite')))
     yield None
     self.stop()
Example #19
0
    def hearthRendState(self):
        if self.direction == dir.UPLEFT or self.direction == dir.DOWNLEFT:
            self.direction = dir.LEFT
        elif self.direction == dir.UPRIGHT or self.direction == dir.DOWNRIGHT:
            self.direction = dir.RIGHT

        self.stop()
        self.anim = 'rend'
        r = rendRange[self.direction]

        if self.stats.mp < 10 or not self.stats.rend:
            sound.menuBuzz.Play()
            return

        self.stats.mp -= 10

        # charge
        # TODO: sound/particle effect here
        while self._animator.index == 0:
            yield None

        fire = ika.Entity(self.x, self.y, self.layer, 'rend.ika-sprite')
        f = self.direction * 5 # hack.

        # when we hit an entity, we append it here so that
        # we know not to hurt it again.
        hitList = []

        sound.hearthRend.Play()
        
        self.invincible = True #invincible while swinging, why not!
        while not self._animator.kill:
            ents = self.detectCollision(r[self._animator.index] + (self.layer,))
            fire.specframe = f + self._animator.index

            for e in ents:
                if isinstance(e, Enemy) and not e.invincible and e not in hitList:
                    hitList.append(e)
                    if(isinstance(e, Serpent)): #he resists, no extra 1.5!
                        e.hurt( int( ((self.stats.att + self.stats.mag) + ika.Random(-3, 3))), 300, self.direction)
                    else: 
                        e.hurt(int((self.stats.att + self.stats.mag) * 1.5) + ika.Random(-3, 3), 300, self.direction)
                elif isinstance(e, IceWall):
                    # TODO: some sort of nice animation.
                    setattr(savedata, e.flagName, 'True')

                    system.engine.destroyEntity(e)
                    #system.engine.things.append(Caption('The ice melted!'))

            yield None
        self.invincible = False #no longer invincible during stall period

        del fire

        # stall period:
        for i in range(30):
            yield None
Example #20
0
    def roarState(self):
        # spawn one to five Carnivores to irritate the shit out of the player
        self.anim = 'roar'
        s = False

        sound.serpentRoar.Play()

        for wait in range(200):

            n = self._animator.curFrame - 12  # Yet another hack.
            ika.Map.xwin += ika.Random(-n, n + 1)
            ika.Map.ywin += ika.Random(-n, n + 1)
            yield None

        # need to destroy old corpses (a first!)
        for e in system.engine.entities:
            if e.stats.hp == 0 and isinstance(e, Enemy):
                system.engine.destroyEntity(e)

        for q in range(ika.Random(1, 4)):
            x, y = 320 + (q * 60), 588
            n = ika.EntitiesAt(x, y, x + 16, y + 16, self.layer)

            if not n:
                if self.stats.hp > self.stats.maxhp / 2:  #normal
                    if ika.Random(0, 2):
                        e = Carnivore(
                            ika.Entity(x, y, self.layer,
                                       'carnivore.ika-sprite'))
                    else:
                        e = AnkleBiter(
                            ika.Entity(x, y, self.layer,
                                       'anklebiter.ika-sprite'))
                else:  #half dead, stronger spawns
                    if ika.Random(0, 2):
                        e = Devourer(
                            ika.Entity(x, y, self.layer,
                                       'devourer.ika-sprite'))
                    else:
                        e = Carnivore(
                            ika.Entity(x, y, self.layer,
                                       'carnivore.ika-sprite'))
                system.engine.addEntity(e)
                e.mood = e.attackMood
Example #21
0
    def defaultState(self):

        p = system.engine.player

        self.move(dir.UP, 100000)
        while self.y > -10:
            yield None
        self.stop()

        for x in range(100):
            yield None

        self.x = p.x + p.ent.hotwidth / 2 - 4
        destY = p.y + p.ent.hotheight / 2 - 4

        self.y = p.y - 300

        engine.addEntity(
            SporeShadow(
                ika.Entity(self.x, destY, p.ent.layer,
                           'plant_shadow.ika-sprite'), self))

        self.move(dir.DOWN, 100000)
        sound.fall.Play()
        while self.y < destY:
            yield None
        self.stop()

        sound.sporeHit.Play()

        self.speed = 0

        self.ent.spritename = 'plant_explode.ika-sprite'
        self.anim = 'explode'
        self.x -= 12
        self.y -= 12

        sound.sporeHit.Play()

        oldLayer = self.ent.layer
        self.ent.layer = p.ent.layer
        ents = self.detectCollision(
            (0, 0, self.ent.hotwidth, self.ent.hotheight))
        self.ent.layer = oldLayer

        for e in ents:
            if e is p:
                p.hurt(self.damage, self.recoil, ika.Random(0, 8))

        while not self._animator.kill:
            yield None

        engine.destroyEntity(self)

        while True:
            yield None
Example #22
0
    def spawnState(self):
        if self.beeCount < self.MAX_BEES:
            bee_ent = ika.Entity(self.ent.x, self.ent.y, self.ent.layer,
                                 "bee.ika-sprite")
            engine.addEntity(createBee(bee_ent, self))
            self.beeCount += 1

        yield None

        self.stop()
Example #23
0
def cloudWeather():
    lay = ika.Map.layercount - 1  # on the top layer
    for i in range(CLOUD_COUNT):
        cloud = ika.Entity(0, 0, lay, 'cloud.ika-sprite')
        cloudReset(cloud)
        cloud.Stop()
        cloud.speed = 10
        cloud.entobs = cloud.mapobs = False
        cloud.movescript = cloudMove
        ika.Map.entities['cloud%i' % i] = cloud
Example #24
0
def fightBoss():
    if 'bossin10' not in savedata.__dict__:
        savedata.bossin10 = 'True'
        y = Yeti(
            ika.Entity(158, 352, system.engine.player.layer,
                       'yeti.ika-sprite'))
        system.engine.addEntity(y)
        system.engine.mapThings.append(DeathListener(y))
        sound.playMusic("music/competative.xm")
        sound.yetiDie[0].Play()
        AddIce()
Example #25
0
def AddIce():
    x = 48
    y = 416
    e = []
    for i in range(6):
        en = ika.Entity(x + (i * 32), y, system.engine.player.layer,
                        'ice.ika-sprite')
        en.name = 'icein10_' + str(i)
        e.append(IceWall(en))
    for en in e:
        system.engine.addEntity(en)
Example #26
0
    def update(self):
        if self.yeti.stats.hp == 0:
            if 'windrune' not in savedata.__dict__:
                e = ika.Entity(304, 304, 2, 'windrune.ika-sprite')
                e.name = 'windrune'
                system.engine.addEntity(WindRune(e))
            else:
                setattr(savedata, 'windguard', 'True')
                system.engine.addCaptions(Caption('Rune Guardian defeated.'))

            sound.playMusic('music/winter.ogg')
            return True
Example #27
0
    def __init__(self, x, y, layer, direction):
        super(_GrappleEntity,
              self).__init__(ika.Entity(x, y, layer, self.SPRITE), self.ANIM)

        self.ent.entobs = False
        self.ent.isobs = False

        self.ent.renderscript = self.__render

        self.direction = direction
        self.image = ika.Image(self.IMAGE)
        self.speed = 250
Example #28
0
 def update(self):
     done = True
     for e in self.enemies:
         if e.stats.hp > 0:
             done = False
     if done: #all are dead
         sound.playMusic("music/wind.ogg")
         e = ika.Entity(15*16, 16*16, 4, 'waterrune.ika-sprite')
         e.name = 'waterrune'
         system.engine.addEntity(WaterRune(e))          
         
         return True
Example #29
0
 def Spawn(self, x, y, layer=0):
     if self.ent is None:
         self.ent = ika.Entity(x, y, layer, self.chrfile)
         self.ent.name = self.name
         if self is party.party[0]:
             ika.SetPlayer(self.ent)
         else:
             self.ent.isobs = False
     else:
         self.ent.x = x
         self.ent.y = y
         self.ent.layer = layer
Example #30
0
def releaseAnklebiters():

    global spawned
    
    if not 'dynamite3' in savedata.__dict__.keys() and not spawned:
        
        indeces = ((6,6), (9,6), (12,6), (4, 8), (14, 8), (2, 10), (6, 10), (12, 10), (16, 10),
                   (4,11), (14, 11))
                   
        for i in indeces:
            system.engine.addEntity(Carnivore(ika.Entity(i[0]*16+8, i[1]*16, 1, "carnivore.ika-sprite")))
            
        spawned = 1