diff --git a/data/animations.lua b/data/animations.lua index 69fc144..04f94b8 100644 --- a/data/animations.lua +++ b/data/animations.lua @@ -6,6 +6,12 @@ animations = { { frame={x=0,y=0,w=16,h=17}, wait=2 }, } }, + ["hero_jump"] = { + cycle = {1}, + frames = { + { frame={x=32,y=0,w=16,h=17}, wait=2 }, + } + }, ["hero_walk"] = { cycle = {1,2,1,3}, frames = { @@ -13,5 +19,18 @@ animations = { { frame={x=16,y=0,w=16,h=17}, wait=2 }, { frame={x=32,y=0,w=16,h=17}, wait=2 } } - } + }, + ["hero_stairs_idle"] = { + cycle = {1}, + frames = { + { frame={x=48,y=0,w=16,h=17}, wait=2 } + } + }, + ["hero_stairs"] = { + cycle = {1,2}, + frames = { + { frame={x=48,y=0,w=16,h=17}, wait=2 }, + { frame={x=48,y=0,w=16,h=17}, wait=2, reversed=true } + } + }, } \ No newline at end of file diff --git a/data/game.lua b/data/game.lua index 18da5ce..6b1c652 100644 --- a/data/game.lua +++ b/data/game.lua @@ -3,7 +3,7 @@ game = { enable = function() app.update = game.update sys.beat(2) - shader.enable(); + --shader.enable(); end, update = function() diff --git a/data/rooms.lua b/data/rooms.lua index b680cdf..38f6f11 100644 --- a/data/rooms.lua +++ b/data/rooms.lua @@ -35,10 +35,11 @@ rooms = { draw.surf(0,0,160,96,0,0) sprites.init() + --map.surf(rooms.surf_background) --for y=0,12*8 do -- for x=0,20*8 do - -- map.tile(x,y,1) + -- map.tile(x,y,38) -- end --end --map.surf(rooms.surf_foreground) diff --git a/data/rooms_background.bin b/data/rooms_background.bin index 86d9271..a3fb1ca 100644 Binary files a/data/rooms_background.bin and b/data/rooms_background.bin differ diff --git a/data/rooms_foreground.bin b/data/rooms_foreground.bin index 9b4868c..9aca9f8 100644 Binary files a/data/rooms_foreground.bin and b/data/rooms_foreground.bin differ diff --git a/data/sprites.gif b/data/sprites.gif index f6df32e..c81b9e8 100644 Binary files a/data/sprites.gif and b/data/sprites.gif differ diff --git a/data/sprites.lua b/data/sprites.lua index 6d920bf..6658212 100644 --- a/data/sprites.lua +++ b/data/sprites.lua @@ -10,7 +10,9 @@ sprites = { 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 } @@ -24,20 +26,87 @@ sprites = { end end, + check_sprite_collision = function() + return false + end, + + check_tile_collision = function() + + end, + update = function() sprites.update_sprite(sprites.hero) + -- Update hero + local anim = "hero_stand" + local move_anim = "hero_walk" + if sprites.hero.jumping > 0 then + anim = "hero_jump" + 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) == 0 and map.tile(tx2,ty) == 0 then + sprites.hero.pos.y = sprites.hero.pos.y - 2 + end + sprites.hero.jumping = sprites.hero.jumping - 2 + else + 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" + 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 + sprites.hero.pos.y = sprites.hero.pos.y - 1 + end + 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 + sprites.hero.pos.y = sprites.hero.pos.y + 1 + end + end + else + 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) + if map.tile(tx1,ty+2) == 0 and map.tile(tx2,ty+2) == 0 then + sprites.hero.pos.y = sprites.hero.pos.y + 2 + else + sprites.hero.pos.y = (ty<<3)-1 + anim = "hero_stand" + 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 + if key.down(key.SPACE) then + sprites.hero.jumping = 16 + end + end + end + end if key.down(key.LEFT) then sprites.hero.flipped = true - sprites.set_animation(sprites.hero, "hero_walk") - sprites.hero.pos.x = sprites.hero.pos.x - 1 + 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 + sprites.hero.pos.x = sprites.hero.pos.x - 1 + end elseif key.down(key.RIGHT) then sprites.hero.flipped = false - sprites.set_animation(sprites.hero, "hero_walk") - sprites.hero.pos.x = sprites.hero.pos.x + 1 - else - sprites.set_animation(sprites.hero, "hero_stand") + anim = move_anim + local tx, ty = (sprites.hero.pos.x+13)>>3, (sprites.hero.pos.y+16)>>3 + if map.tile(tx,ty) < 16 and map.tile(tx,ty-1) < 16 then + sprites.hero.pos.x = sprites.hero.pos.x + 1 + end end + + sprites.set_animation(sprites.hero, anim) end, update_sprite = function(sprite) @@ -64,6 +133,7 @@ sprites = { draw_sprite = function(sprite) local cycle = animations[sprite.animation].cycle[sprite.current_frame] local frame = animations[sprite.animation].frames[cycle] - 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, sprite.flipped) + 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 } \ No newline at end of file diff --git a/data/tiles.gif b/data/tiles.gif index 56f1a4a..f4153c4 100644 Binary files a/data/tiles.gif and b/data/tiles.gif differ