- [NEW] Desde l'editor, amb 'P' es posiciona al heroi en la posició del cursor - [ONGOING] habitacions: 6% - [NEW] Més tiles - [CHG] Reajustada velocitat de l'heroi - [FIX] Ajustada la caixa de colisió un pixelet - [CHG] Ajustat el bot màxim
182 lines
7.0 KiB
Lua
182 lines
7.0 KiB
Lua
require "animations"
|
|
|
|
sprites = {
|
|
hero = nil,
|
|
list = {},
|
|
|
|
init = function()
|
|
sprites.hero = {
|
|
pos = { x=28, y=4*12*8+71 },
|
|
size= { w=16, h=17 },
|
|
bbo = { left=0, top=0, right=0, bottom=0 },
|
|
flipped = false,
|
|
jumping = 0,
|
|
animation = "hero_stand",
|
|
stairs = false,
|
|
current_frame = 1,
|
|
current_wait = 1
|
|
}
|
|
end,
|
|
|
|
set_animation=function(sprite, animation)
|
|
if sprite.animation ~= animation then
|
|
sprite.animation = animation
|
|
sprite.current_frame = 1
|
|
sprite.current_wait = 1
|
|
end
|
|
end,
|
|
|
|
check_sprite_collision = function()
|
|
return false
|
|
end,
|
|
|
|
check_tile_collision = function()
|
|
|
|
end,
|
|
|
|
update = function()
|
|
sprites.update_sprite(sprites.hero)
|
|
end,
|
|
|
|
update_sprite = function(sprite)
|
|
if sys.beat() then
|
|
sprite.current_wait = sprite.current_wait - 1
|
|
if sprite.current_wait == 0 then
|
|
if sprite.current_frame < #animations[sprite.animation].cycle then
|
|
sprite.current_frame = sprite.current_frame + 1
|
|
else
|
|
sprite.current_frame = 1
|
|
end
|
|
local cycle = animations[sprite.animation].cycle[sprite.current_frame]
|
|
sprite.current_wait = animations[sprite.animation].frames[cycle].wait
|
|
end
|
|
end
|
|
end,
|
|
|
|
update_hero = function()
|
|
if not sys.beat() then return end
|
|
|
|
-- Update hero
|
|
local anim = "hero_stand"
|
|
local move_anim = "hero_walk"
|
|
|
|
-- SI ESTÀ BOTANT...
|
|
if sprites.hero.jumping > 0 then
|
|
anim = "hero_jump"
|
|
move_anim = "hero_jump"
|
|
local tx1, tx2, ty = (sprites.hero.pos.x+4)>>3, (sprites.hero.pos.x+11)>>3, (sprites.hero.pos.y)>>3
|
|
--draw.rect(tx1<<3,ty<<3,8,8,8)
|
|
--draw.rect(tx2<<3,ty<<3,8,8,28)
|
|
if map.tile(tx1,ty) == 0 and map.tile(tx2,ty) == 0 then
|
|
if ty<rooms.pos.y then
|
|
game.change_room(0,-1)
|
|
else
|
|
if sprites.hero.jumping > 1 then sprites.hero.pos.y = sprites.hero.pos.y - 1 end
|
|
end
|
|
end
|
|
sprites.hero.jumping = sprites.hero.jumping - 1
|
|
else
|
|
-- SI NO ESTÀ BOTANT...
|
|
-- SI ESTÀ EN UNES ESCALERES...
|
|
local txm, ty = (sprites.hero.pos.x+8)>>3, (sprites.hero.pos.y+8)>>3
|
|
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) then
|
|
anim = move_anim
|
|
local tx1, tx2, ty = (sprites.hero.pos.x+4)>>3, (sprites.hero.pos.x+11)>>3, (sprites.hero.pos.y)>>3
|
|
if map.tile(tx1,ty) < 16 or map.tile(tx2,ty) < 16 then
|
|
if ty<rooms.pos.y then
|
|
game.change_room(0,-1)
|
|
else
|
|
sprites.hero.pos.y = sprites.hero.pos.y - 1
|
|
end
|
|
end
|
|
-- SI PULSA AVALL...
|
|
elseif key.down(key.DOWN) then
|
|
anim = move_anim
|
|
local tx1, tx2, ty = (sprites.hero.pos.x+4)>>3, (sprites.hero.pos.x+11)>>3, (sprites.hero.pos.y+1)>>3
|
|
if map.tile(tx1,ty+2) < 16 or map.tile(tx2,ty+2) < 16 then
|
|
if ty+2>rooms.pos.y+11 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.hero.pos.x+4)>>3, (sprites.hero.pos.x+8)>>3, (sprites.hero.pos.x+11)>>3, (sprites.hero.pos.y+1)>>3
|
|
--draw.rect(tx1<<3, (ty+2)<<3,8,8,8)
|
|
--draw.rect(tx2<<3, (ty+2)<<3,8,8,28)
|
|
-- SI ESTÀ CAIGUENT...
|
|
if map.tile(tx1,ty+2) == 0 and map.tile(tx2,ty+2) == 0 then
|
|
if ty+2>rooms.pos.y+11 then
|
|
game.change_room(0,1)
|
|
else
|
|
sprites.hero.pos.y = sprites.hero.pos.y + 2
|
|
end
|
|
else
|
|
-- SI NO ESTÀ CAIGUENT...
|
|
sprites.hero.pos.y = (ty<<3)-1
|
|
anim = "hero_stand"
|
|
-- 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) then
|
|
anim = "hero_stairs"
|
|
--local tx1, tx2, ty = (sprites.hero.pos.x+4)>>3, (sprites.hero.pos.x+11)>>3, (sprites.hero.pos.y+1)>>3
|
|
--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 SPACE...
|
|
if key.down(key.SPACE) then
|
|
sprites.hero.jumping = 17
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-- ESTIGA COM ESTIGA, SI POLSA ESQUERRA O DRETA...
|
|
if key.down(key.LEFT) then
|
|
sprites.hero.flipped = true
|
|
anim = move_anim
|
|
local tx, ty = (sprites.hero.pos.x+3)>>3, (sprites.hero.pos.y+16)>>3
|
|
if map.tile(tx,ty) < 16 and map.tile(tx,ty-1) < 16 then
|
|
if tx<rooms.pos.x then
|
|
game.change_room(-1,0)
|
|
else
|
|
sprites.hero.pos.x = sprites.hero.pos.x - 1
|
|
end
|
|
end
|
|
elseif key.down(key.RIGHT) then
|
|
sprites.hero.flipped = false
|
|
anim = move_anim
|
|
local tx, ty = (sprites.hero.pos.x+12)>>3, (sprites.hero.pos.y+16)>>3
|
|
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
|
|
end
|
|
|
|
sprites.set_animation(sprites.hero, anim)
|
|
end,
|
|
|
|
draw = function()
|
|
surf.source(surf_sprites)
|
|
|
|
sprites.draw_sprite(sprites.hero)
|
|
end,
|
|
|
|
draw_sprite = function(sprite)
|
|
local cycle = animations[sprite.animation].cycle[sprite.current_frame]
|
|
local frame = animations[sprite.animation].frames[cycle]
|
|
local reversed = frame.reversed or false
|
|
draw.surf(frame.frame.x, frame.frame.y, frame.frame.w, frame.frame.h, sprite.pos.x, sprite.pos.y, sprite.size.w, sprite.size.h, (not reversed) ~= (not sprite.flipped))
|
|
end
|
|
} |