- [NEW] Módul propi per al MAPA
- [WIP] Batman ja camina, bota, cau, puja i baixa escales
This commit is contained in:
190
data/batman.lua
190
data/batman.lua
@@ -1,15 +1,203 @@
|
|||||||
|
|
||||||
batman = {
|
batman = {
|
||||||
|
states = {IDLE=1, WALK=2, JUMP=3, FALL=4, FALLTHROUGH=5, STAIRS_IDLE=6, STAIRS_MOVING=7},
|
||||||
x = 7*8,
|
x = 7*8,
|
||||||
y = 14*8,
|
y = 14*8,
|
||||||
surface = nil,
|
surface = nil,
|
||||||
flip = false,
|
flip = false,
|
||||||
|
frames = {0},
|
||||||
|
frame = 1,
|
||||||
|
state = 1,
|
||||||
|
jump_counter = 0,
|
||||||
|
ignore_first_tile = 0,
|
||||||
|
|
||||||
init = function()
|
init = function()
|
||||||
batman.surface = surf.load("batman.gif")
|
batman.surface = surf.load("batman.gif")
|
||||||
|
batman.frames = {0,1,2,3}
|
||||||
end,
|
end,
|
||||||
|
|
||||||
draw = function()
|
draw = function()
|
||||||
surf.source(batman.surface)
|
surf.source(batman.surface)
|
||||||
draw.surf(0,0,16,16,batman.x,batman.y,16,16,batman.flip)
|
local f = batman.frames[batman.frame]
|
||||||
|
draw.surf((f%8)*16,(f//8)*16,16,16,batman.x,batman.y,16,16,batman.flip)
|
||||||
|
local tx1, tx2, ty = ((batman.x+4)//8), ((batman.x+10)//8), ((batman.y+16)//8)
|
||||||
|
draw.rect((tx1)*8,ty*8,8,8, 4)
|
||||||
|
draw.rect((tx2)*8,ty*8,8,8, 4)
|
||||||
|
end,
|
||||||
|
|
||||||
|
update = function()
|
||||||
|
batman.frame = batman.frame + 1
|
||||||
|
if batman.frame > #batman.frames then batman.frame = 1 end
|
||||||
|
|
||||||
|
-- Si està IDLE
|
||||||
|
if batman.state == batman.states.IDLE then
|
||||||
|
-- Mirem si comença a caminar
|
||||||
|
if key.down(key.RIGHT) then
|
||||||
|
batman.state = batman.states.WALK
|
||||||
|
batman.frames = {0,1,2,3}
|
||||||
|
batman.frame = 1
|
||||||
|
elseif key.down(key.LEFT) then
|
||||||
|
batman.state = batman.states.WALK
|
||||||
|
batman.frames = {0,1,2,3}
|
||||||
|
batman.frame = 1
|
||||||
|
elseif key.down(key.DOWN) then
|
||||||
|
local tx, ty = ((batman.x+4)//8), ((batman.y+8)//8)
|
||||||
|
if (mapa.isStairs(tx,ty)) then
|
||||||
|
batman.state = batman.states.STAIRS_IDLE
|
||||||
|
batman.frames = {10}
|
||||||
|
batman.frame = 1
|
||||||
|
batman.x = ((batman.x+4)//8)*8
|
||||||
|
if (mapa.isStairs(tx-1,ty)) then
|
||||||
|
batman.x = batman.x - 8
|
||||||
end
|
end
|
||||||
|
elseif key.down(key.X) then
|
||||||
|
local tx, ty = ((batman.x+4)//8), ((batman.y+24)//8)
|
||||||
|
if (not mapa.isSolid(tx,ty)) then
|
||||||
|
batman.state = batman.states.FALL
|
||||||
|
batman.ignore_first_tile = 4
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif key.down(key.UP) then
|
||||||
|
local tx, ty = ((batman.x+4)//8), ((batman.y)//8)
|
||||||
|
if (mapa.isStairs(tx,ty)) then
|
||||||
|
batman.state = batman.states.STAIRS_IDLE
|
||||||
|
batman.frames = {10}
|
||||||
|
batman.frame = 1
|
||||||
|
--batman.x = (batman.x//8)*8
|
||||||
|
batman.x = ((batman.x+4)//8)*8
|
||||||
|
if (mapa.isStairs(tx-1,ty)) then
|
||||||
|
batman.x = batman.x - 8
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- Mirem si ha de caure
|
||||||
|
local tx1, tx2, ty = ((batman.x+4)//8), ((batman.x+10)//8), ((batman.y+16)//8)
|
||||||
|
if (not mapa.isSolid(tx1,ty)) and (not mapa.isSolid(tx2,ty)) then
|
||||||
|
batman.state = batman.states.FALL
|
||||||
|
end
|
||||||
|
-- Mirem si comença a botar
|
||||||
|
if (batman.state ~= batman.states.FALL) and (key.down(key.X)) then
|
||||||
|
batman.state = batman.states.JUMP
|
||||||
|
batman.jump_counter = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if batman.state == batman.states.WALK then
|
||||||
|
-- Mirem si comença a caminar
|
||||||
|
if key.down(key.RIGHT) then
|
||||||
|
batman.state = batman.states.WALK
|
||||||
|
batman.flip=false
|
||||||
|
local tx, ty = ((batman.x+12)//8), ((batman.y+8)//8)
|
||||||
|
if not mapa.isSolid(tx,ty) then batman.x = batman.x + 2 end
|
||||||
|
elseif key.down(key.LEFT) then
|
||||||
|
batman.state = batman.states.WALK
|
||||||
|
batman.flip=true
|
||||||
|
local tx, ty = ((batman.x+3)//8), ((batman.y+8)//8)
|
||||||
|
if not mapa.isSolid(tx,ty) then batman.x = batman.x - 2 end
|
||||||
|
else
|
||||||
|
-- Ha parat de caminar
|
||||||
|
batman.state = batman.states.IDLE
|
||||||
|
batman.frames = {0}
|
||||||
|
batman.frame = 1
|
||||||
|
end
|
||||||
|
-- Mirem si ha de caure
|
||||||
|
local tx1, tx2, ty = ((batman.x+4)//8), ((batman.x+10)//8), ((batman.y+16)//8)
|
||||||
|
if (not mapa.isSolid(tx1,ty)) and (not mapa.isSolid(tx2,ty)) then
|
||||||
|
batman.state = batman.states.FALL
|
||||||
|
end
|
||||||
|
-- Mirem si comença a botar
|
||||||
|
if key.down(key.X) then
|
||||||
|
batman.state = batman.states.JUMP
|
||||||
|
batman.jump_counter = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if batman.state == batman.states.JUMP then
|
||||||
|
batman.y = batman.y - 4
|
||||||
|
batman.jump_counter = batman.jump_counter + 1
|
||||||
|
if batman.jump_counter == 5 then
|
||||||
|
batman.jump_counter = 0
|
||||||
|
batman.state = batman.states.FALL
|
||||||
|
batman.frames = {4}
|
||||||
|
batman.frame = 1
|
||||||
|
end
|
||||||
|
if key.down(key.RIGHT) then
|
||||||
|
batman.flip=false
|
||||||
|
local tx, ty = ((batman.x+12)//8), ((batman.y+8)//8)
|
||||||
|
if not mapa.isBlock(tx,ty) then batman.x = batman.x + 2 end
|
||||||
|
elseif key.down(key.LEFT) then
|
||||||
|
batman.flip=true
|
||||||
|
local tx, ty = ((batman.x+3)//8), ((batman.y+8)//8)
|
||||||
|
if not mapa.isBlock(tx,ty) then batman.x = batman.x - 2 end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if batman.state == batman.states.FALL then
|
||||||
|
if key.down(key.RIGHT) then
|
||||||
|
batman.flip=false
|
||||||
|
local tx, ty = ((batman.x+12)//8), ((batman.y+8)//8)
|
||||||
|
if not mapa.isSolid(tx,ty) then batman.x = batman.x + 2 end
|
||||||
|
elseif key.down(key.LEFT) then
|
||||||
|
batman.flip=true
|
||||||
|
local tx, ty = ((batman.x+3)//8), ((batman.y+8)//8)
|
||||||
|
if not mapa.isSolid(tx,ty) then batman.x = batman.x - 2 end
|
||||||
|
end
|
||||||
|
|
||||||
|
local tx1, tx2, ty = ((batman.x+4)//8), ((batman.x+10)//8), ((batman.y+16)//8)
|
||||||
|
if (batman.ignore_first_tile>0) or ((not mapa.isSolid(tx1,ty)) and (not mapa.isSolid(tx2,ty))) then
|
||||||
|
if batman.ignore_first_tile>0 then batman.ignore_first_tile = batman.ignore_first_tile - 1 end
|
||||||
|
batman.state = batman.states.FALL
|
||||||
|
batman.frames = {4}
|
||||||
|
batman.frame = 1
|
||||||
|
batman.y = batman.y + 4
|
||||||
|
else
|
||||||
|
batman.y = (batman.y//8)*8
|
||||||
|
batman.state = batman.states.IDLE
|
||||||
|
batman.frames = {0}
|
||||||
|
batman.frame = 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if batman.state == batman.states.STAIRS_IDLE then
|
||||||
|
local moving = false
|
||||||
|
if key.down(key.DOWN) then
|
||||||
|
moving = true
|
||||||
|
local tx, ty = ((batman.x+4)//8), ((batman.y+16)//8)
|
||||||
|
if (mapa.isStairs(tx,ty)) then
|
||||||
|
if #batman.frames==1 then
|
||||||
|
batman.frames = {8,10,9,10}
|
||||||
|
batman.frame = 1
|
||||||
|
end
|
||||||
|
batman.y = batman.y + 2;
|
||||||
|
else
|
||||||
|
batman.state = batman.states.IDLE
|
||||||
|
batman.frames = {0}
|
||||||
|
batman.frame = 1
|
||||||
|
end
|
||||||
|
elseif key.down(key.UP) then
|
||||||
|
moving = true
|
||||||
|
local tx, ty = ((batman.x+4)//8), ((batman.y+7)//8)
|
||||||
|
if (mapa.isStairs(tx,ty)) then
|
||||||
|
if #batman.frames==1 then
|
||||||
|
batman.frames = {8,10,9,10}
|
||||||
|
batman.frame = 1
|
||||||
|
end
|
||||||
|
batman.y = batman.y - 2;
|
||||||
|
else
|
||||||
|
batman.state = batman.states.IDLE
|
||||||
|
batman.frames = {0}
|
||||||
|
batman.frame = 1
|
||||||
|
end
|
||||||
|
elseif key.down(key.X) then
|
||||||
|
batman.state = batman.states.IDLE
|
||||||
|
batman.frames = {0}
|
||||||
|
batman.frame = 1
|
||||||
|
end
|
||||||
|
if not moving then
|
||||||
|
batman.frames = {10}
|
||||||
|
batman.frame = 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
}
|
}
|
||||||
102
data/editor.lua
102
data/editor.lua
@@ -1,11 +1,6 @@
|
|||||||
|
require "mapa"
|
||||||
|
|
||||||
editor = {
|
editor = {
|
||||||
num = 1,
|
|
||||||
map_surf = {nil,nil},
|
|
||||||
current_layer = 1,
|
|
||||||
current_tile = 1,
|
|
||||||
ox = 0,
|
|
||||||
oy = 0,
|
|
||||||
mx = 0,
|
mx = 0,
|
||||||
my = 0,
|
my = 0,
|
||||||
|
|
||||||
@@ -18,65 +13,19 @@ editor = {
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
new = function()
|
new = function()
|
||||||
editor.num = 1
|
mapa.new()
|
||||||
editor.map_surf[1] = surf.new(256,256)
|
|
||||||
editor.map_surf[2] = surf.new(256,256)
|
|
||||||
editor.current_layer = 1
|
editor.current_layer = 1
|
||||||
editor.current_tile = 1
|
editor.current_tile = 1
|
||||||
editor.ox = 0
|
|
||||||
editor.oy = 0
|
|
||||||
end,
|
|
||||||
|
|
||||||
load = function(level)
|
|
||||||
local base_name = "level" .. tostring(level)
|
|
||||||
local file = io.open("data/" .. base_name .. ".lev", "r")
|
|
||||||
if file then
|
|
||||||
for line in file:lines() do
|
|
||||||
local key,value = line:match("^(.+)=(.+)$")
|
|
||||||
if key and value then
|
|
||||||
if key == "start-x" then
|
|
||||||
editor.ox = tonumber(value)
|
|
||||||
elseif key == "start-y" then
|
|
||||||
editor.oy = tonumber(value)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
editor.num = level
|
|
||||||
surf.free(editor.map_surf[1])
|
|
||||||
surf.free(editor.map_surf[2])
|
|
||||||
editor.map_surf[1] = surf.load(base_name .. "_1.gif")
|
|
||||||
editor.map_surf[2] = surf.load(base_name .. "_2.gif")
|
|
||||||
else
|
|
||||||
print("No s'ha trobat l'arxiu!")
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
save = function()
|
|
||||||
local base_name = "level" .. tostring(editor.num)
|
|
||||||
local file = io.open("data/" .. base_name .. ".lev", "w")
|
|
||||||
if file then
|
|
||||||
file:write("start-x=" .. tostring(editor.ox) .. "\n")
|
|
||||||
file:write("start-y=" .. tostring(editor.oy) .. "\n")
|
|
||||||
end
|
|
||||||
surf.save(editor.map_surf[1], "data/" .. base_name .. "_1.gif")
|
|
||||||
surf.save(editor.map_surf[2], "data/" .. base_name .. "_2.gif")
|
|
||||||
end,
|
end,
|
||||||
|
|
||||||
update = function()
|
update = function()
|
||||||
view.origin(editor.ox,editor.oy)
|
view.origin(mapa.x,mapa.y)
|
||||||
surf.cls(66)
|
surf.cls(66)
|
||||||
pal.trans(0)
|
mapa.draw(1)
|
||||||
|
|
||||||
surf.source(tiles)
|
|
||||||
map.surf(editor.map_surf[1])
|
|
||||||
map.draw()
|
|
||||||
|
|
||||||
--batman.draw()
|
--batman.draw()
|
||||||
|
mapa.draw(2)
|
||||||
|
|
||||||
surf.source(tiles)
|
map.surf(mapa.surf[editor.current_layer])
|
||||||
map.surf(editor.map_surf[2])
|
|
||||||
map.draw()
|
|
||||||
map.surf(editor.map_surf[editor.current_layer])
|
|
||||||
|
|
||||||
|
|
||||||
local mx,my = mouse.pos()
|
local mx,my = mouse.pos()
|
||||||
@@ -87,25 +36,23 @@ editor = {
|
|||||||
if key.press(key.TAB) then
|
if key.press(key.TAB) then
|
||||||
game_update = editor.tile_picker_update
|
game_update = editor.tile_picker_update
|
||||||
elseif key.press(key.RIGHT) then
|
elseif key.press(key.RIGHT) then
|
||||||
editor.ox = editor.ox - 8
|
mapa.x = mapa.x - 8
|
||||||
elseif key.press(key.LEFT) then
|
elseif key.press(key.LEFT) then
|
||||||
editor.ox = editor.ox + 8
|
mapa.x = mapa.x + 8
|
||||||
elseif key.press(key.DOWN) then
|
elseif key.press(key.DOWN) then
|
||||||
editor.oy = editor.oy - 8
|
mapa.y = mapa.y - 8
|
||||||
elseif key.press(key.UP) then
|
elseif key.press(key.UP) then
|
||||||
editor.oy = editor.oy + 8
|
mapa.y = mapa.y + 8
|
||||||
elseif key.press(key.N1) then
|
elseif key.press(key.N1) then
|
||||||
editor.current_layer=1
|
editor.current_layer=1
|
||||||
elseif key.press(key.N2) then
|
elseif key.press(key.N2) then
|
||||||
editor.current_layer=2
|
editor.current_layer=2
|
||||||
elseif key.press(key.N2) then
|
|
||||||
editor.current_layer=2
|
|
||||||
elseif key.press(key.F) then
|
elseif key.press(key.F) then
|
||||||
editor.fill(tx//8, ty//8, map.tile(mx/8, my/8))
|
mapa.fill(tx//8, ty//8, map.tile(mx/8, my/8), editor.current_tile)
|
||||||
elseif key.down(key.LCTRL) and key.press(key.S) then
|
elseif key.down(key.LCTRL) and key.press(key.S) then
|
||||||
editor.save()
|
mapa.save()
|
||||||
elseif key.down(key.LCTRL) and key.press(key.L) then
|
elseif key.down(key.LCTRL) and key.press(key.L) then
|
||||||
editor.load(1)
|
mapa.load(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
if mouse.down(mouse.LEFT) then
|
if mouse.down(mouse.LEFT) then
|
||||||
@@ -122,8 +69,8 @@ editor = {
|
|||||||
if editor.mx == -1 then
|
if editor.mx == -1 then
|
||||||
editor.mx,editor.my = mx,my
|
editor.mx,editor.my = mx,my
|
||||||
end
|
end
|
||||||
editor.ox = editor.ox + 8*(mx-editor.mx)
|
mapa.x = mapa.x + 8*(mx-editor.mx)
|
||||||
editor.oy = editor.oy + 8*(my-editor.my)
|
mapa.y = mapa.y + 8*(my-editor.my)
|
||||||
editor.mx,editor.my = mx,my
|
editor.mx,editor.my = mx,my
|
||||||
else
|
else
|
||||||
editor.mx = -1
|
editor.mx = -1
|
||||||
@@ -132,25 +79,6 @@ editor = {
|
|||||||
text(tostring(editor.current_layer),0,0,22,42)
|
text(tostring(editor.current_layer),0,0,22,42)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
fill = function(x, y, tile)
|
|
||||||
local stack = {}
|
|
||||||
table.insert(stack, {x = x, y = y})
|
|
||||||
|
|
||||||
while #stack > 0 do
|
|
||||||
local mw, mh = surf.size(editor.map_surf[1])
|
|
||||||
local pos = table.remove(stack)
|
|
||||||
local px, py = pos.x, pos.y
|
|
||||||
|
|
||||||
map.tile(px, py, editor.current_tile)
|
|
||||||
|
|
||||||
if px<mw-1 and map.tile(px+1, py) == tile then table.insert(stack, {x = px + 1, y = py}) end
|
|
||||||
if px>0 and map.tile(px-1, py) == tile then table.insert(stack, {x = px - 1, y = py}) end
|
|
||||||
if py<mh-1 and map.tile(px, py+1) == tile then table.insert(stack, {x = px, y = py + 1}) end
|
|
||||||
if py>0 and map.tile(px, py-1) == tile then table.insert(stack, {x = px, y = py - 1}) end
|
|
||||||
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
tile_picker_update = function()
|
tile_picker_update = function()
|
||||||
view.origin(0,0)
|
view.origin(0,0)
|
||||||
surf.cls(66)
|
surf.cls(66)
|
||||||
|
|||||||
@@ -1,72 +1,30 @@
|
|||||||
|
require "mapa"
|
||||||
require "batman"
|
require "batman"
|
||||||
|
|
||||||
game = {
|
game = {
|
||||||
num = 1,
|
num = 1,
|
||||||
map_surf = {nil,nil},
|
map_surf = {nil,nil},
|
||||||
current_layer = 1,
|
|
||||||
current_tile = 1,
|
|
||||||
|
|
||||||
init = function(level_name)
|
init = function(level)
|
||||||
game_update = game.update
|
game_update = game.update
|
||||||
game.load(1)
|
mapa.load(level)
|
||||||
batman.init()
|
batman.init()
|
||||||
end,
|
sys.beat(5)
|
||||||
|
|
||||||
load = function(level)
|
|
||||||
local base_name = "level" .. tostring(level)
|
|
||||||
local file = io.open("data/" .. base_name .. ".lev", "r")
|
|
||||||
if file then
|
|
||||||
for line in file:lines() do
|
|
||||||
local key,value = line:match("^(.+)=(.+)$")
|
|
||||||
if key and value then
|
|
||||||
--if key == "start-x" then
|
|
||||||
-- editor.ox = tonumber(value)
|
|
||||||
--elseif key == "start-y" then
|
|
||||||
-- editor.oy = tonumber(value)
|
|
||||||
--end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
game.num = level
|
|
||||||
if game.map_surf[1] then surf.free(game.map_surf[1]) end
|
|
||||||
if game.map_surf[2] then surf.free(game.map_surf[2]) end
|
|
||||||
game.map_surf[1] = surf.load(base_name .. "_1.gif")
|
|
||||||
game.map_surf[2] = surf.load(base_name .. "_2.gif")
|
|
||||||
else
|
|
||||||
print("No s'ha trobat l'arxiu!")
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
|
|
||||||
update = function()
|
update = function()
|
||||||
--view.origin(editor.ox,editor.oy)
|
|
||||||
local cam_x, cam_y = -(batman.x-7*8),-(batman.y-6*8)
|
local cam_x, cam_y = -(batman.x-7*8),-(batman.y-6*8)
|
||||||
if (cam_x>0) then cam_x=0 end
|
if (cam_x>0) then cam_x=0 end
|
||||||
if (cam_y>0) then cam_y=0 end
|
if (cam_y>0) then cam_y=0 end
|
||||||
view.origin(cam_x,cam_y)
|
view.origin(cam_x,cam_y)
|
||||||
|
|
||||||
surf.cls(66)
|
surf.cls(66)
|
||||||
pal.trans(0)
|
mapa.draw(1)
|
||||||
|
|
||||||
surf.source(tiles)
|
|
||||||
map.surf(game.map_surf[1])
|
|
||||||
map.draw()
|
|
||||||
|
|
||||||
batman.draw()
|
batman.draw()
|
||||||
|
mapa.draw(2)
|
||||||
|
|
||||||
surf.source(tiles)
|
if sys.beat() then
|
||||||
map.surf(game.map_surf[2])
|
batman.update()
|
||||||
map.draw()
|
|
||||||
map.surf(game.map_surf[game.current_layer])
|
|
||||||
|
|
||||||
|
|
||||||
if key.press(key.TAB) then
|
|
||||||
--game_update = editor.tile_picker_update
|
|
||||||
elseif key.down(key.RIGHT) then
|
|
||||||
batman.x = batman.x + 1
|
|
||||||
elseif key.down(key.LEFT) then
|
|
||||||
batman.x = batman.x - 1
|
|
||||||
elseif key.down(key.DOWN) then
|
|
||||||
batman.y = batman.y + 1
|
|
||||||
elseif key.down(key.UP) then
|
|
||||||
batman.y = batman.y - 1
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--view.origin(0,0)
|
--view.origin(0,0)
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ end
|
|||||||
|
|
||||||
function mini.init()
|
function mini.init()
|
||||||
loadSurfaces()
|
loadSurfaces()
|
||||||
editor.init(1)
|
--editor.init(1)
|
||||||
|
game.init(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mini.update()
|
function mini.update()
|
||||||
|
|||||||
93
data/mapa.lua
Normal file
93
data/mapa.lua
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
|
||||||
|
mapa = {
|
||||||
|
num = 1,
|
||||||
|
surf = {nil,nil},
|
||||||
|
x = 0,
|
||||||
|
y = 0,
|
||||||
|
|
||||||
|
new = function()
|
||||||
|
mapa.num = 1
|
||||||
|
mapa.surf[1] = surf.new(256,256)
|
||||||
|
mapa.surf[2] = surf.new(256,256)
|
||||||
|
mapa.x = 0
|
||||||
|
mapa.y = 0
|
||||||
|
end,
|
||||||
|
|
||||||
|
load = function(level)
|
||||||
|
local base_name = "level" .. tostring(level)
|
||||||
|
local file = io.open("data/" .. base_name .. ".lev", "r")
|
||||||
|
if file then
|
||||||
|
for line in file:lines() do
|
||||||
|
local key,value = line:match("^(.+)=(.+)$")
|
||||||
|
if key and value then
|
||||||
|
if key == "start-x" then
|
||||||
|
mapa.x = tonumber(value)
|
||||||
|
elseif key == "start-y" then
|
||||||
|
mapa.y = tonumber(value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
mapa.num = level
|
||||||
|
if mapa.surf[1] then surf.free(mapa.surf[1]) end
|
||||||
|
if mapa.surf[2] then surf.free(mapa.surf[2]) end
|
||||||
|
mapa.surf[1] = surf.load(base_name .. "_1.gif")
|
||||||
|
mapa.surf[2] = surf.load(base_name .. "_2.gif")
|
||||||
|
else
|
||||||
|
print("No s'ha trobat l'arxiu!")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
save = function()
|
||||||
|
local base_name = "level" .. tostring(mapa.num)
|
||||||
|
local file = io.open("data/" .. base_name .. ".lev", "w")
|
||||||
|
if file then
|
||||||
|
file:write("start-x=" .. tostring(mapa.x) .. "\n")
|
||||||
|
file:write("start-y=" .. tostring(mapa.y) .. "\n")
|
||||||
|
end
|
||||||
|
surf.save(mapa.surf[1], "data/" .. base_name .. "_1.gif")
|
||||||
|
surf.save(mapa.surf[2], "data/" .. base_name .. "_2.gif")
|
||||||
|
end,
|
||||||
|
|
||||||
|
draw = function(layer)
|
||||||
|
pal.trans(0)
|
||||||
|
surf.source(tiles)
|
||||||
|
map.surf(mapa.surf[layer])
|
||||||
|
map.draw()
|
||||||
|
map.surf(mapa.surf[1])
|
||||||
|
end,
|
||||||
|
|
||||||
|
fill = function(x, y, tile, fill_tile)
|
||||||
|
local stack = {}
|
||||||
|
table.insert(stack, {x = x, y = y})
|
||||||
|
|
||||||
|
while #stack > 0 do
|
||||||
|
local mw, mh = surf.size(map.surf[1])
|
||||||
|
local pos = table.remove(stack)
|
||||||
|
local px, py = pos.x, pos.y
|
||||||
|
|
||||||
|
map.tile(px, py, fill_tile)
|
||||||
|
|
||||||
|
if px<mw-1 and map.tile(px+1, py) == tile then table.insert(stack, {x = px + 1, y = py}) end
|
||||||
|
if px>0 and map.tile(px-1, py) == tile then table.insert(stack, {x = px - 1, y = py}) end
|
||||||
|
if py<mh-1 and map.tile(px, py+1) == tile then table.insert(stack, {x = px, y = py + 1}) end
|
||||||
|
if py>0 and map.tile(px, py-1) == tile then table.insert(stack, {x = px, y = py - 1}) end
|
||||||
|
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
isSolid = function(x, y)
|
||||||
|
local tile = map.tile(x, y)
|
||||||
|
return (tile == 32) or (tile == 33) or (tile==36) or (tile==37)
|
||||||
|
end,
|
||||||
|
|
||||||
|
isBlock = function(x, y)
|
||||||
|
local tile = map.tile(x, y)
|
||||||
|
return (tile == 32)
|
||||||
|
end,
|
||||||
|
|
||||||
|
isStairs = function(x, y)
|
||||||
|
local tile = map.tile(x, y)
|
||||||
|
return (tile>33) and (tile<40)
|
||||||
|
end,
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user