diff --git a/data/actors.lua b/data/actors.lua index 19bd6e6..70c33a2 100644 --- a/data/actors.lua +++ b/data/actors.lua @@ -6,51 +6,87 @@ actors={ table.insert(actors.list, actor) end, + search=function(name) + for i,v in ipairs(actors.list) do + if v.name and v.name==name then + return v + end + end + end, + draw=function() for i,v in ipairs(actors.list) do - sspr(v.gfx.x,v.gfx.y,16,16,v.x*8+v.dx,v.y*8+v.dy,16,16,v.o) + local frame=((v.dx+v.dy)%2)*16 + --print(v.o) + if v.o=='u' then + sspr(v.gfx.x+frame,v.gfx.y+16,16,16,v.x*8-4+v.dx*2,v.y*8-12+v.dy*2,16,16) + elseif v.o=='d' then + sspr(v.gfx.x+frame,v.gfx.y,16,16,v.x*8-4+v.dx*2,v.y*8-12+v.dy*2,16,16) + elseif v.o=='l' then + sspr(v.gfx.x+frame,v.gfx.y+32,16,16,v.x*8-4+v.dx*2,v.y*8-12+v.dy*2,16,16) + elseif v.o=='r' then + sspr(v.gfx.x+frame,v.gfx.y+32,16,16,v.x*8-4+v.dx*2,v.y*8-12+v.dy*2,16,16,true) + end end end, update=function() + local needs_sorting=false for i,v in ipairs(actors.list) do if v.dx==0 and v.dy==0 then if v.path then v.path.pos=v.path.pos+1 - if v.path.pos > #v.path.route then - v.path=nil - else - local step=string.sub(v.path.route,v.path.pos,v.path.pos) - if step=='u' then - --check collision! - v.y=v.y-1 - v.dy=-8 - elseif step=='d' then - --check collision! - v.y=v.y+1 - v.dy=8 - elseif step=='l' then - --check collision! - v.x=v.x-1 - v.dx=-8 - elseif step=='r' then - --check collision! - v.x=v.x+1 - v.dx=8 - end + local step=string.sub(v.path.route,v.path.pos,v.path.pos) + if v.path.pos == #v.path.route then v.path=nil end + if step=='u' then + --check collision! + v.y=v.y-1 + v.dy=4 + v.o='u' + needs_sorting=true + elseif step=='d' then + --check collision! + v.y=v.y+1 + v.dy=-4 + v.o='d' + needs_sorting=true + elseif step=='l' then + --check collision! + v.x=v.x-1 + v.dx=4 + v.o='l' + elseif step=='r' then + --check collision! + v.x=v.x+1 + v.dx=-4 + v.o='r' + elseif step=='q' then + v.o='u' + elseif step=='a' then + v.o='d' + elseif step=='o' then + v.o='r' + elseif step=='p' then + v.o='l' end end - else - if v.dx > 0 then - v.dx=v.dx-2 - elseif v.dx < 0 then - v.dx=v.dx+2 - elseif v.dy > 0 then - v.dy=v.dy-2 - elseif v.dy < 0 then - v.dy=v.dy+2 - end + end + if v.dx > 0 then + v.dx=v.dx-1 + elseif v.dx < 0 then + v.dx=v.dx+1 + elseif v.dy > 0 then + v.dy=v.dy-1 + elseif v.dy < 0 then + v.dy=v.dy+1 end end + if needs_sorting then + table.sort(actors.list, compare_actors) + end end -} \ No newline at end of file + +} +function compare_actors(a,b) + return a.y < b.y +end diff --git a/data/game.ini b/data/game.ini index 8ba3f57..1c6440f 100644 --- a/data/game.ini +++ b/data/game.ini @@ -3,4 +3,4 @@ config=ja2 width=160 height=144 zoom=5 -files=game.lua,mapa.lua,editor.lua,textbox.lua,menu.lua,main.lua +files=actors.lua,game.lua,mapa.lua,editor.lua,textbox.lua,menu.lua,main.lua diff --git a/data/game.lua b/data/game.lua index 976aaed..d101964 100644 --- a/data/game.lua +++ b/data/game.lua @@ -3,12 +3,32 @@ game={ init=function() mapa.load("test.map") + actors.add({name="usufondo",x=11,y=9,o="r",gfx={x=0,y=0},path={pos=0,route='rrrrura'}}) + actors.add({name="jailer",x=6,y=9,o="r",gfx={x=32,y=0}}) update=game.update end, update=function() camera(game.cam.x, game.cam.y) + setsource(tiles) map(0,0,0,0,mapa.w, mapa.h) + setsource(sprites) + actors.draw() camera(0,0) + + local hero = actors.search("jailer") + if hero and not hero.path and hero.dx+hero.dy==0 then + if btn(KEY_DOWN) then + hero.path={pos=0,route='d'} + elseif btn(KEY_UP) then + hero.path={pos=0,route='u'} + elseif btn(KEY_LEFT) then + hero.path={pos=0,route='l'} + elseif btn(KEY_RIGHT) then + hero.path={pos=0,route='r'} + end + end + + if beat() then actors.update() end end } \ No newline at end of file diff --git a/data/main.lua b/data/main.lua index 70e050f..c5672c3 100644 --- a/data/main.lua +++ b/data/main.lua @@ -6,7 +6,7 @@ function _init() setsource(tiles) local pal=loadpal("tiles.gif") setpal(pal) - + beat(6) main_init() end