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
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)
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()
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
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
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()
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))
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()
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
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
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
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
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
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))
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
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()
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
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()
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
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
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
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()
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
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()
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)
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
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
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
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
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