function ia.update_hero() if sprites.hero.state == templates.DEAD then if sprites.hero.cooldown > 0 then local tx1, tx2, ty = sprites.get_tile(sprites.hero.pos.x+4), sprites.get_tile(sprites.hero.pos.x+11), sprites.get_tile(sprites.hero.pos.y+1) local tile_under_me1 = map.tile(tx1,ty+2) local tile_under_me2 = map.tile(tx2,ty+2) if tile_under_me1 == 0 and tile_under_me2 == 0 then if rooms.pos.y<84 and ty+2>rooms.pos.y+12 then game.change_room(0,1) else if sprites.hero.cooldown % 4 == 0 then sprites.hero.pos.y = sprites.hero.pos.y + 1 end end end sprites.hero.cooldown = sprites.hero.cooldown - 1 if sprites.hero.cooldown == 0 then sprites.lights_out() end end return end -- Update hero local anim = "hero_stand" local move_anim = "hero_walk" -- Si estem en cooldown desde l'ultim dispar, decrementem el contador -- Si estem en cooldown desde l'ultim dispar, decrementem el contador if sprites.hero.gun_cooldown > 0 then sprites.hero.gun_cooldown = sprites.hero.gun_cooldown - 1 end if sprites.hero.cooldown > 0 then sprites.hero.cooldown = sprites.hero.cooldown - 1 end -- Si estem en jump_throttle desde l'ultim bot, decrementem el contador if sprites.hero.jump_throttle > 0 then sprites.hero.jump_throttle = sprites.hero.jump_throttle - 1 end if sprites.hero.state == templates.DYING then if (sprites.hero.cooldown//5) % 2 == 0 then sprites.hero.invisible = true else sprites.hero.invisible = nil end if sprites.hero.cooldown == 0 then sprites.hero.state = templates.ALIVE sprites.hero.invisible = nil end end -- Si li han pegat... if sprites.hero.has_been_hit then if sprites.hero.flipped then local tx, ty = sprites.get_tile(sprites.hero.pos.x+12), sprites.get_tile(sprites.hero.pos.y+16) if map.tile(tx,ty) < 16 and map.tile(tx,ty-1) < 16 then if tx>rooms.pos.x+19 then game.change_room(1,0) else sprites.hero.pos.x = sprites.hero.pos.x + 1 end end else local tx, ty = sprites.get_tile(sprites.hero.pos.x+3), sprites.get_tile(sprites.hero.pos.y+16) if map.tile(tx,ty) < 16 and map.tile(tx,ty-1) < 16 then if tx 0 then anim = "hero_jump" move_anim = "hero_jump" local tx1, tx2, ty = sprites.get_tile(sprites.hero.pos.x+4), sprites.get_tile(sprites.hero.pos.x+11), sprites.get_tile(sprites.hero.pos.y) --draw.rect(tx1<<3,ty<<3,8,8,8) --draw.rect(tx2<<3,ty<<3,8,8,28) if map.tile(tx1,ty) < 16 and map.tile(tx2,ty) < 16 then --if ty+1 1 then sprites.hero.pos.y = sprites.hero.pos.y - 1 end --end else sprites.hero.jumping = 0 sprites.hero.jump_throttle = 10 end sprites.hero.jumping = sprites.hero.jumping - 1 --0.47 else -- SI NO ESTÀ BOTANT... -- SI ESTÀ EN UNES ESCALERES... local txm, ty = sprites.get_tile(sprites.hero.pos.x+8), sprites.get_tile(sprites.hero.pos.y+8) if (map.tile(txm,ty) > 0 and map.tile(txm,ty) < 16) or (map.tile(txm,ty+1) > 0 and map.tile(txm,ty+1) < 16) then anim = "hero_stairs_idle" move_anim = "hero_stairs" -- SI PULSA AMUNT... if key.down(key.UP) or pad.down(pad.UP) then anim = move_anim local tx1, tx2, ty = sprites.get_tile(sprites.hero.pos.x+8), sprites.get_tile(sprites.hero.pos.x+11), sprites.get_tile(sprites.hero.pos.y) if map.tile(tx1,ty) < 16 then --or map.tile(tx2,ty) < 16 then if ty+1rooms.pos.y+12 then game.change_room(0,1) else sprites.hero.pos.y = sprites.hero.pos.y + 1 end end end else -- SI NO ESTÀ EN UNES ESCALERES... local tx1, txm, tx2, ty = sprites.get_tile(sprites.hero.pos.x+4), sprites.get_tile(sprites.hero.pos.x+8), sprites.get_tile(sprites.hero.pos.x+11), (sprites.hero.pos.y+1)/8 -- SI ESTÀ CAIGUENT... local tile_under_me1 = map.tile(tx1,ty+2) local tile_under_me2 = map.tile(tx2,ty+2) if tile_under_me1 == 0 and tile_under_me2 == 0 then if rooms.pos.y<84 and sprites.hero.pos.y>=0 and ty+2>rooms.pos.y+12 then game.change_room(0,1) else if sprites.hero.pos.y >= 808 then sprites.hero.hit(0) return end sprites.hero.pos.y = sprites.hero.pos.y + 2 end else -- SI NO ESTÀ CAIGUENT... if tile_under_me1==84 then map.tile(tx1,ty+2,68) local broken_tile = templates.create("brick", {pos={x=sprites.tile_to_pixel(tx1), y=sprites.tile_to_pixel(ty+2)}, flipped=sprites.hero.flipped}) table.insert(sprites.list, broken_tile) end if tile_under_me2==84 then map.tile(tx2,ty+2,68) local broken_tile = templates.create("brick", {pos={x=sprites.tile_to_pixel(tx2), y=sprites.tile_to_pixel(ty+2)}, flipped=sprites.hero.flipped}) table.insert(sprites.list, broken_tile) end if tile_under_me1>=16 or tile_under_me1>=16 then sprites.hero.pos.y = sprites.tile_to_pixel(ty)-1 end anim = "hero_stand" if sprites.hero.state == templates.ALIVE then sprites.save_safe_pos() end -- SI ESTÀ SOBRE UNES ESCALERES I POLSA AVALL... if (map.tile(txm,ty+2) < 16 and map.tile(txm,ty+2) > 0) then if key.down(key.DOWN) or pad.down(pad.DOWN) then anim = "hero_stairs" --local tx1, tx2, ty = sprites.get_tile(sprites.hero.pos.x+4), sprites.get_tile(sprites.hero.pos.x+11), sprites.get_tile(sprites.hero.pos.y+1) --if map.tile(tx1,ty+2) < 16 or map.tile(tx2,ty+2) < 16 then sprites.hero.pos.x = (txm << 3)-4 sprites.hero.pos.y = sprites.hero.pos.y + 1 --end end end -- SI POLSA BOTAR... if ( key.down(key.X) or pad.down(pad.A) ) and sprites.hero.jump_throttle == 0 then sprites.hero.jumping = 17 table.insert(sprites.list, templates.create("polseta", {pos={x=sprites.hero.pos.x+6, y=sprites.hero.pos.y+16}, dir={x=-0.7,y=-0.3}, flipped=sprites.hero.flipped})) table.insert(sprites.list, templates.create("polseta", {pos={x=sprites.hero.pos.x+8, y=sprites.hero.pos.y+15}, dir={x=-0.5,y=-0.1}, flipped=sprites.hero.flipped})) table.insert(sprites.list, templates.create("polseta", {pos={x=sprites.hero.pos.x+10, y=sprites.hero.pos.y+16}, dir={x=0.7,y=-0.3}, flipped=sprites.hero.flipped})) table.insert(sprites.list, templates.create("polseta", {pos={x=sprites.hero.pos.x+12, y=sprites.hero.pos.y+15}, dir={x=0.5,y=-0.1}, flipped=sprites.hero.flipped})) -- SI POLSA DISPAR... elseif (sprites.hero.gun_cooldown==0) and (key.down(key.Z) or pad.down(pad.B)) then sprites.hero.shooting = true sprites.hero.gun_cooldown = 20 local bullet = templates.create("bullet", {pos={x=sprites.hero.pos.x, y=sprites.hero.pos.y+7}, flipped=sprites.hero.flipped}) table.insert(sprites.list, bullet) anim = "hero_shoot" end end end end -- ESTIGA COM ESTIGA, SI POLSA ESQUERRA O DRETA... if not sprites.hero.shooting and not sprites.hero.has_been_hit then if key.down(key.LEFT) or pad.down(pad.LEFT) then sprites.hero.flipped = true anim = move_anim local tx, ty = sprites.get_tile(sprites.hero.pos.x+3), sprites.get_tile(sprites.hero.pos.y+16) if map.tile(tx,ty) < 16 and map.tile(tx,ty-1) < 16 then if txrooms.pos.x+19 then game.change_room(1,0) else sprites.hero.pos.x = sprites.hero.pos.x + 1 end end end end sprites.set_animation(sprites.hero, anim) end function ia.hero_hit(live) live = live or sprites.hero.lives-1 local light_table = {[0]=20, 30, 50, 80, 100} local red_table = {[0]=0, 0.25, 0.5, 0.75, 1} if live==4 then tweening.add(1,0,0.25,easing.linear,function(value,n,finished)palfade.fade_white(value)end) else tweening.add(1,0,0.25,easing.linear,function(value,n,finished)palfade.fade_red(value)end) end local start_light = light_table[sprites.hero.lives] local start_red = red_table[sprites.hero.lives] local end_light = light_table[live] local end_red = red_table[live] sprites.hero.lives = live tweening.add(start_light,end_light,1,easing.linear,function(value,n,finished)sprites.hero.light = value end) tweening.add(start_red,end_red,1,easing.linear,function(value,n,finished)palfade.fade_reddish(value)end) if sprites.hero.lives == 0 then sprites.hero.state = templates.DEAD sprites.hero.invisible = nil sprites.hero.surf = surf.load("gfx/mummy.gif") sprites.set_animation(sprites.hero, "mummy_dying") sprites.hero.jumping = 0 sprites.hero.cooldown = 120 elseif sprites.hero.lives < 4 then sprites.hero.state = templates.DYING sprites.hero.cooldown = 60 sprites.hero.shooting = false sprites.set_animation(sprites.hero, "hero_stand") sprites.hero.jumping = 8 sprites.hero.has_been_hit = 16 end end function ia.hero_give_key(color) if sprites.hero.keys[color] then return false end sprites.hero.keys[color] = true tweening.add(1,0,0.25,easing.linear,function(value,n,finished)palfade.fade_white(value)end) return true end function ia.hero_reset() sprites.hero.state = templates.ALIVE sprites.hero.invisible = nil sprites.hero.lives = 4 sprites.hero.surf = surf.load("gfx/morcus.gif") sprites.hero.animation = "hero_stand" sprites.hero.current_frame = 1 sprites.hero.current_wait = 1 sprites.hero.flipped = false sprites.hero.light = 100 sprites.hero.pos = {x=sprites.last_safe_pos.x,y=sprites.last_safe_pos.y} sprites.hero.shooting = false rooms.go_to_room(sprites.last_safe_room) palfade.init() end