mirror of
https://github.com/libretro/lutro-sienna.git
synced 2026-11-10 11:01:51 -10:00
138 lines
3.1 KiB
Lua
138 lines
3.1 KiB
Lua
OBJ_ROTSPIKE = 1281
|
|
OBJ_CHECKPOINT = 1284
|
|
OBJ_JUMPPAD_S = 1297
|
|
OBJ_JUMPPAD_E = 1300
|
|
OBJ_COIN = 1305
|
|
|
|
TILE_SPIKE_S = 129
|
|
TILE_SPIKE_E = TILE_SPIKE_S+3
|
|
TILE_WATER_TOP = 135
|
|
TILE_WATER = 151
|
|
TILE_LAVA_TOP = 137
|
|
TILE_LAVA = 153
|
|
|
|
local floor = math.floor
|
|
local loader = require("AdvTiledLoader.Loader")
|
|
loader.path = "maps/"
|
|
|
|
map_files = {"mine1.tmx","mine2.tmx","mine3.tmx","mine4.tmx",
|
|
"temple1.tmx","temple2.tmx","temple3.tmx","temple4.tmx","temple5.tmx"}
|
|
|
|
function loadMap(level)
|
|
current_map = level
|
|
gamestate = STATE_INGAME
|
|
|
|
map = loader.load(map_files[level])
|
|
map.drawObjects = false
|
|
map.useSpriteBatch = false
|
|
fgtiles = map.tileLayers.fg.tileData
|
|
|
|
map.enemies = {}
|
|
map.particles = {}
|
|
map.entities = {}
|
|
map.coins = {}
|
|
|
|
map.deaths = 0
|
|
map.numcoins = 0
|
|
map.time = 0
|
|
|
|
MAPW = map.width*TILEW
|
|
MAPH = map.height*TILEW
|
|
map.startx = 16
|
|
map.starty = 192
|
|
|
|
for i,v in ipairs(map.objectLayers.obj.objects) do
|
|
if v.gid == OBJ_ROTSPIKE or v.gid == OBJ_ROTSPIKE+1 then
|
|
table.insert(map.enemies, Spike.create(v.x, v.y-16))
|
|
|
|
elseif v.gid == OBJ_CHECKPOINT then
|
|
table.insert(map.entities, Checkpoint.create(v.x, v.y-20, v.properties))
|
|
|
|
elseif v.gid == OBJ_COIN then
|
|
table.insert(map.coins, Coin.create(v.x, v.y-16))
|
|
|
|
elseif v.type == "start" then
|
|
map.startx = v.x+8
|
|
map.starty = v.y-4.01
|
|
|
|
elseif v.gid and v.gid >= OBJ_JUMPPAD_S and v.gid <= OBJ_JUMPPAD_E then
|
|
table.insert(map.entities, Jumppad.create(v.x, v.y-16, v.properties))
|
|
|
|
elseif v.type == "bee" then
|
|
table.insert(map.enemies, Bee.create(v.x+8, v.y-18, v.properties))
|
|
elseif v.type == "dog" then
|
|
table.insert(map.enemies, Dog.create(v.x+8, v.y, v.properties))
|
|
elseif v.type == "mole" then
|
|
table.insert(map.enemies, Mole.create(v.x+8, v.y, v.properties))
|
|
elseif v.type == "spider" then
|
|
table.insert(map.enemies, Spider.create(v.x, v.y, v.properties))
|
|
elseif v.type == "snake" then
|
|
table.insert(map.enemies, Snake.create(v.x+8, v.y, v.properties))
|
|
elseif v.type == "trigger" then
|
|
table.insert(map.enemies, Trigger.create(v.x, v.y-16, v.width, v.height, v.properties))
|
|
elseif v.type == "turret" then
|
|
table.insert(map.enemies, Turret.create(v.x, v.y, v.properties))
|
|
end
|
|
end
|
|
|
|
tx = map.startx - WIDTH/2
|
|
ty = map.starty - HEIGHT/2
|
|
|
|
player:respawn()
|
|
end
|
|
|
|
function reloadMap()
|
|
loadMap(current_map)
|
|
end
|
|
|
|
function collidePoint(x,y)
|
|
return isSolid(floor(x/TILEW), floor(y/TILEW))
|
|
end
|
|
|
|
function collideSpike(x,y, pl)
|
|
x = x*TILEW
|
|
y = y*TILEW
|
|
if pl.x-5.5 > x+10 or pl.x+5.5 < x+3
|
|
or pl.y+2 > y+10 or pl.y+20 < y+3 then
|
|
return false
|
|
else
|
|
return true
|
|
end
|
|
end
|
|
|
|
function collideLava(x,y, pl)
|
|
x = x*TILEW
|
|
y = y*TILEW
|
|
if pl.x-5.5 > x+16 or pl.x+5.5 < x
|
|
or pl.y+2 > y+16 or pl.y+20 < y+8 then
|
|
return false
|
|
else
|
|
return true
|
|
end
|
|
end
|
|
|
|
function isSolid(x,y)
|
|
local tile = fgtiles(x,y)
|
|
if tile ~= nil and tile.id <= 128 then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function commitCoins()
|
|
for i,v in ipairs(map.coins) do
|
|
if v.taken then
|
|
v:commit()
|
|
end
|
|
end
|
|
end
|
|
|
|
function untakeCoins()
|
|
for i,v in ipairs(map.coins) do
|
|
if v.taken == true and v.committed == false then
|
|
v:untake()
|
|
end
|
|
end
|
|
end
|