167 lines
4.0 KiB
Lua
167 lines
4.0 KiB
Lua
--hab=0
|
|
|
|
modes={playing=0,editing=1}
|
|
mode=modes.editing
|
|
|
|
seltile = 0
|
|
|
|
actors={}
|
|
|
|
function _init()
|
|
tiles=loadsurf("tiles.gif")
|
|
setsource(tiles)
|
|
local pal=loadpal("tiles.gif")
|
|
setpal(pal)
|
|
|
|
--mapa_new()
|
|
abad_init()
|
|
table.insert(actors,abad)
|
|
premiere.init()
|
|
table.insert(actors,premiere)
|
|
z = zombie.new()
|
|
table.insert(actors,z)
|
|
c=caco.new(10,24,16)
|
|
table.insert(actors,c)
|
|
score.create()
|
|
|
|
_update=update_game
|
|
end
|
|
|
|
function text(str,x,y,col)
|
|
color(16)
|
|
prnt(str,x-1,y-1)
|
|
prnt(str,x,y-1)
|
|
prnt(str,x+1,y-1)
|
|
prnt(str,x-1,y)
|
|
prnt(str,x+1,y)
|
|
prnt(str,x-1,y+1)
|
|
prnt(str,x,y+1)
|
|
prnt(str,x+1,y+1)
|
|
|
|
prnt(str,x,y,col)
|
|
end
|
|
|
|
function draw_hab(hab,x,y,editing)
|
|
camera(-x,-y)
|
|
mapa_draw(hab)
|
|
|
|
if not editing then
|
|
for key,actor in pairs(actors) do
|
|
if actor.hab==hab then
|
|
actor:draw()
|
|
end
|
|
end
|
|
if cacau.hab==hab then cacau:draw() end
|
|
end
|
|
camera(0,0)
|
|
end
|
|
|
|
function _update() end
|
|
|
|
function update_dialog()
|
|
rectfill(16,16,112,50,12)
|
|
rect(15,15,113,51,16)
|
|
text("Save the map?",20,20,2)
|
|
text("This cannot be undone",20,27,2)
|
|
text("(Y)es (N)o",25,40,2)
|
|
|
|
if btnp(KEY_N) then
|
|
_update=update_game
|
|
elseif btnp(KEY_Y) then
|
|
mapa_save()
|
|
_update=update_game
|
|
end
|
|
end
|
|
scroll=0
|
|
function update_game()
|
|
cls(16)
|
|
|
|
if mode==modes.editing then
|
|
draw_hab(abad.hab,0,0,true)
|
|
text(abad.hab,120,1,2)
|
|
|
|
sspr(0,64+scroll*8,128,48,0,48)
|
|
color(3)
|
|
local xx=(seltile&15)*8
|
|
local yy=48+(seltile>>4)*8
|
|
rect(xx,yy,xx+8,yy+8)
|
|
text("EDIT",100,1,3)
|
|
local hx = abad.hab%10
|
|
local hy = flr(abad.hab/10)
|
|
scroll=0
|
|
if btnp(KEY_RIGHT) and hx<9 then
|
|
abad.hab=abad.hab+1
|
|
elseif btnp(KEY_LEFT) and hx>0 then
|
|
abad.hab=abad.hab-1
|
|
elseif btnp(KEY_DOWN) and hy<7 then
|
|
abad.hab=abad.hab+10
|
|
elseif btnp(KEY_UP) and hy>0 then
|
|
abad.hab=abad.hab-10
|
|
elseif btnp(KEY_RETURN) then
|
|
mode=modes.playing
|
|
mapa_do_backup()
|
|
elseif btnp(KEY_S) and (btn(KEY_LCTRL) or btn(KEY_LGUI)) then
|
|
_update=update_dialog
|
|
elseif btnp(KEY_C) then
|
|
mapa_cycle_colors(abad.hab)
|
|
end
|
|
if btn(KEY_TAB) then
|
|
scroll=2
|
|
end
|
|
|
|
local mx,my=mousex(),mousey()
|
|
if mx>>3 < 12 and my>>3 < 6 then
|
|
text(mx>>3,100,10,2)
|
|
text(my>>3,111,10,2)
|
|
text((mx>>3)+(my>>3)*12,118,10,2)
|
|
end
|
|
if mbtn(1) then
|
|
if my>=48 then
|
|
seltile=(mx>>3)+((my-48+(scroll*8))>>3)*16
|
|
elseif mx<96 then
|
|
mapa_set_tile(abad.hab,mx>>3,my>>3,seltile)
|
|
end
|
|
elseif mbtn(3) then
|
|
if my<48 and mx<96 then
|
|
mapa_set_tile(abad.hab,mx>>3,my>>3,256)
|
|
end
|
|
end
|
|
if mx>>3 < 12 and my>>3 < 6 then
|
|
local tx,ty=(mx>>3)<<3,(my>>3)<<3
|
|
rect(tx,ty,tx+8,ty+8,3)
|
|
end
|
|
else
|
|
draw_hab(abad.hab,0,0)
|
|
text(abad.hab,1,1,2)
|
|
draw_hab(premiere.hab,0,48)
|
|
text("Premiere",2,49,2)
|
|
|
|
score.draw()
|
|
setsource(tiles)
|
|
prnt("x"..abad.vides,114,13,2)
|
|
rectfill(102+(abad.energia>>1),30,122,37,16)
|
|
|
|
mapa_update()
|
|
for key,actor in pairs(actors) do
|
|
actor:update()
|
|
if actor.hab==cacau.hab and actor~=abad then
|
|
if aabb(actor,cacau) then
|
|
actor:hit()
|
|
cacau.hab=-1
|
|
end
|
|
end
|
|
end
|
|
cacau.update()
|
|
switches.update()
|
|
|
|
if btnp(KEY_RETURN) then
|
|
mode=modes.editing
|
|
mapa_restore_backup()
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
function aabb(a, b)
|
|
return (a.x+a.bb.x+a.bb.w >= b.x+b.bb.x) and (a.x+a.bb.x <= b.x+b.bb.x+b.bb.w) and (a.y+a.bb.y+a.bb.h >= b.y+b.bb.y) and (a.y+a.bb.y <= b.y+b.bb.y+b.bb.h)
|
|
end |