- [NEW] Animació de moneda agafada
- [NEW] Agafar monedes augmenta el marcador - [NEW] Marcador bàsic visible - [NEW] Al cambiar d'habitació es manté el efecte d'iluminació. A més, va un poc més lento - [NEW] Al agafar moneda, no torna al eixir i entrar. Al tornar al editor se recupera. - [NEW] Gestió de l'iluminació fora dels update i dins dels draw - [NEW] Afegides més habitacions
This commit is contained in:
@@ -94,4 +94,10 @@ animations = {
|
|||||||
{ frame={x=24,y=0,w=8,h=8}, wait=2 }
|
{ frame={x=24,y=0,w=8,h=8}, wait=2 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
["coin_picked"] = {
|
||||||
|
cycle = {1},
|
||||||
|
frames = {
|
||||||
|
{ frame={x=32,y=0,w=13,h=7}, wait=100 },
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
131
data/game.lua
131
data/game.lua
@@ -23,35 +23,100 @@ game = {
|
|||||||
|
|
||||||
update = function()
|
update = function()
|
||||||
game.water_counter = game.water_counter + 0.05
|
game.water_counter = game.water_counter + 0.05
|
||||||
local counter = game.water_counter
|
|
||||||
|
|
||||||
view.origin(0,0)
|
view.origin(0,0)
|
||||||
surf.target(game.back_buf)
|
surf.target(0)
|
||||||
view.clip()
|
view.clip()
|
||||||
|
|
||||||
score.draw()
|
score.draw()
|
||||||
|
surf.target(game.back_buf)
|
||||||
|
|
||||||
-- Pintar el mapa i sprites
|
-- Pintar el mapa i sprites
|
||||||
rooms.draw()
|
rooms.draw()
|
||||||
sprites.update()
|
sprites.update()
|
||||||
--sprites.update_hero()
|
|
||||||
|
|
||||||
|
game.apply_water()
|
||||||
|
game.apply_light()
|
||||||
|
|
||||||
|
if key.press(key.ESCAPE) or key.press(key.F9) then
|
||||||
|
rooms.retrieve_original_items()
|
||||||
|
editor.enable()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
change_room = function(x,y)
|
||||||
|
game.chg_adv.x = x*0.25
|
||||||
|
game.chg_adv.y = y*0.25
|
||||||
|
game.chg_step = 8*4
|
||||||
|
sprites.pause_ia = true
|
||||||
|
-- [TODO] Crear els sprites per als items de l'habitació a la que entrem
|
||||||
|
sprites.add_from_room(rooms.pos.x+x*20, rooms.pos.y+y*12)
|
||||||
|
app.push(game.update_change_room)
|
||||||
|
--sys.beat(10)
|
||||||
|
end,
|
||||||
|
|
||||||
|
update_change_room = function()
|
||||||
|
--if not sys.beat() then return end
|
||||||
|
view.origin(0,0)
|
||||||
|
surf.target(0)
|
||||||
|
view.clip()
|
||||||
|
|
||||||
|
score.draw()
|
||||||
|
surf.target(game.back_buf)
|
||||||
|
--view.clip()
|
||||||
|
|
||||||
|
-- Pintar el mapa i sprites
|
||||||
|
rooms.pos.x = rooms.pos.x + (game.chg_adv.x*2.5)
|
||||||
|
rooms.pos.y = rooms.pos.y + (game.chg_adv.y*1.5)
|
||||||
|
sprites.hero.pos.x = sprites.hero.pos.x + game.chg_adv.x
|
||||||
|
sprites.hero.pos.y = sprites.hero.pos.y + game.chg_adv.y
|
||||||
|
|
||||||
|
rooms.draw()
|
||||||
|
sprites.update()
|
||||||
|
game.apply_water()
|
||||||
|
game.apply_light()
|
||||||
|
|
||||||
|
game.chg_step = game.chg_step - 1
|
||||||
|
if game.chg_step == 0 then
|
||||||
|
sprites.remove_out_of_room()
|
||||||
|
sprites.pause_ia = false
|
||||||
|
app.pop()
|
||||||
|
--sys.beat(2)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
draw_light = function(x,y,size)
|
||||||
|
surf.target(game.circ_buf)
|
||||||
|
local s = size+(game.light_strobe_value/2)
|
||||||
|
draw.mode(draw.OR)
|
||||||
|
draw.circf(x,y,s,1)
|
||||||
|
draw.circf(x,y,2*(s/3),2)
|
||||||
|
draw.mode(draw.NORMAL)
|
||||||
|
surf.target(game.back_buf)
|
||||||
|
end,
|
||||||
|
|
||||||
|
apply_water = function()
|
||||||
view.origin(0,0)
|
view.origin(0,0)
|
||||||
if rooms.pos.y == 84 then
|
if rooms.pos.y == 84 then
|
||||||
surf.target(game.back_buf)
|
surf.target(game.back_buf)
|
||||||
surf.source(game.back_buf)
|
surf.source(game.back_buf)
|
||||||
for x=0,159 do
|
for x=0,159 do
|
||||||
local water_level = math.sin(counter)*2
|
local water_level = math.sin(game.water_counter)*2
|
||||||
for y=96+water_level,103 do
|
for y=96+water_level,103 do
|
||||||
local pixel = surf.pixel(x,y)
|
local pixel = surf.pixel(x,y)
|
||||||
surf.pixel(x,y,game.water_pal[pixel+1])
|
surf.pixel(x,y,game.water_pal[pixel+1])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
apply_light = function()
|
||||||
|
game.light_strobe_value = game.light_strobe_value + game.light_strobe_dir
|
||||||
|
if math.abs(game.light_strobe_value)==2 then
|
||||||
|
game.light_strobe_dir = -game.light_strobe_dir
|
||||||
|
end
|
||||||
|
|
||||||
surf.target(0)
|
surf.target(0)
|
||||||
--surf.source(game.back_buf)
|
|
||||||
--draw.surf(0,0,160,104,0,0,160,104)
|
|
||||||
for y=0,103 do
|
for y=0,103 do
|
||||||
for x=0,159 do
|
for x=0,159 do
|
||||||
surf.source(game.back_buf)
|
surf.source(game.back_buf)
|
||||||
@@ -60,60 +125,14 @@ game = {
|
|||||||
local light = surf.pixel(x,y)
|
local light = surf.pixel(x,y)
|
||||||
if light==0 then
|
if light==0 then
|
||||||
surf.pixel(x,y,1)
|
surf.pixel(x,y,1)
|
||||||
elseif light==1 then
|
elseif (light&2)==2 then
|
||||||
surf.pixel(x,y,game.fade_pal[pixel+1])
|
|
||||||
else
|
|
||||||
surf.pixel(x,y,pixel)
|
surf.pixel(x,y,pixel)
|
||||||
|
else
|
||||||
|
surf.pixel(x,y,game.fade_pal[pixel+1])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if key.press(key.ESCAPE) or key.press(key.F9) then
|
|
||||||
editor.enable()
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
change_room = function(x,y)
|
|
||||||
game.chg_adv.x = x
|
|
||||||
game.chg_adv.y = y
|
|
||||||
game.chg_step = 8
|
|
||||||
sprites.pause_ia = true
|
|
||||||
-- [TODO] Crear els sprites per als items de l'habitació a la que entrem
|
|
||||||
sprites.add_from_room(rooms.pos.x+x*20, rooms.pos.y+y*12)
|
|
||||||
app.push(game.update_change_room)
|
|
||||||
end,
|
|
||||||
|
|
||||||
update_change_room = function()
|
|
||||||
view.origin(0,0)
|
|
||||||
surf.target(0)
|
|
||||||
view.clip()
|
|
||||||
|
|
||||||
score.draw()
|
|
||||||
|
|
||||||
-- Pintar el mapa i sprites
|
|
||||||
rooms.pos.x = rooms.pos.x + game.chg_adv.x*2.5
|
|
||||||
rooms.pos.y = rooms.pos.y + game.chg_adv.y*1.5
|
|
||||||
sprites.hero.pos.x = sprites.hero.pos.x + game.chg_adv.x
|
|
||||||
sprites.hero.pos.y = sprites.hero.pos.y + game.chg_adv.y
|
|
||||||
rooms.draw()
|
|
||||||
sprites.update()
|
|
||||||
game.chg_step = game.chg_step - 1
|
|
||||||
if game.chg_step == 0 then
|
|
||||||
sprites.remove_out_of_room()
|
|
||||||
sprites.pause_ia = false
|
|
||||||
app.pop()
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
draw_light = function(x,y,size)
|
|
||||||
surf.target(game.circ_buf)
|
|
||||||
local s = size+game.light_strobe_value
|
|
||||||
draw.circf(x,y,s,1)
|
|
||||||
draw.circf(x,y,2*(s/3),2)
|
|
||||||
game.light_strobe_value = game.light_strobe_value + game.light_strobe_dir
|
|
||||||
if math.abs(game.light_strobe_value)==1 then
|
|
||||||
game.light_strobe_dir = -game.light_strobe_dir
|
|
||||||
end
|
|
||||||
--surf.target(game.circ_buf)
|
|
||||||
end
|
|
||||||
}
|
}
|
||||||
BIN
data/misc.gif
BIN
data/misc.gif
Binary file not shown.
|
Before Width: | Height: | Size: 671 B After Width: | Height: | Size: 697 B |
@@ -35,9 +35,10 @@ rooms = {
|
|||||||
--rooms.surf_items = surf.new(20*8,12*8)
|
--rooms.surf_items = surf.new(20*8,12*8)
|
||||||
|
|
||||||
rooms.surf_original_items = surf.new(20*8,12*8)
|
rooms.surf_original_items = surf.new(20*8,12*8)
|
||||||
surf.source(rooms.surf_items)
|
rooms.update_original_items()
|
||||||
surf.target(rooms.surf_original_items)
|
--surf.source(rooms.surf_items)
|
||||||
draw.surf(0,0,160,96,0,0)
|
--surf.target(rooms.surf_original_items)
|
||||||
|
--draw.surf(0,0,160,96,0,0)
|
||||||
|
|
||||||
sprites.init()
|
sprites.init()
|
||||||
|
|
||||||
@@ -141,5 +142,17 @@ rooms = {
|
|||||||
peiv = function()
|
peiv = function()
|
||||||
pal.color(1, 1, 1, 1)
|
pal.color(1, 1, 1, 1)
|
||||||
return "HOLA OTHER UNIT"
|
return "HOLA OTHER UNIT"
|
||||||
|
end,
|
||||||
|
|
||||||
|
retrieve_original_items = function()
|
||||||
|
surf.source(rooms.surf_original_items)
|
||||||
|
surf.target(rooms.surf_items)
|
||||||
|
draw.surf(0,0,160,96,0,0)
|
||||||
|
end,
|
||||||
|
|
||||||
|
update_original_items = function()
|
||||||
|
surf.source(rooms.surf_items)
|
||||||
|
surf.target(rooms.surf_original_items)
|
||||||
|
draw.surf(0,0,160,96,0,0)
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
@@ -1,6 +1,7 @@
|
|||||||
score = {
|
score = {
|
||||||
|
points = 0,
|
||||||
draw = function()
|
draw = function()
|
||||||
draw.rectf(0,0,160,8,1)
|
draw.rectf(0,0,160,8,1)
|
||||||
|
draw.text(string.format("%03d", score.points),0,0,28)
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,9 @@ sprites = {
|
|||||||
animation = "hero_stand",
|
animation = "hero_stand",
|
||||||
ia = sprites.update_hero,
|
ia = sprites.update_hero,
|
||||||
jumping = 0,
|
jumping = 0,
|
||||||
|
light = 100,
|
||||||
|
light_ox = 0,
|
||||||
|
light_oy = 0,
|
||||||
stairs = false
|
stairs = false
|
||||||
}
|
}
|
||||||
--table.insert(sprites.list, templates.create("mummy", {pos={x=100, y=4*12*8+71},flipped=true}))
|
--table.insert(sprites.list, templates.create("mummy", {pos={x=100, y=4*12*8+71},flipped=true}))
|
||||||
@@ -95,9 +98,6 @@ sprites = {
|
|||||||
update = function()
|
update = function()
|
||||||
if not sys.beat() then return end
|
if not sys.beat() then return end
|
||||||
|
|
||||||
surf.target(game.circ_buf)
|
|
||||||
surf.cls()
|
|
||||||
|
|
||||||
sprites.update_sprite(sprites.hero)
|
sprites.update_sprite(sprites.hero)
|
||||||
for i,v in ipairs(sprites.list) do
|
for i,v in ipairs(sprites.list) do
|
||||||
sprites.update_sprite(v)
|
sprites.update_sprite(v)
|
||||||
@@ -191,23 +191,37 @@ sprites = {
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
update_coin = function(spr)
|
update_coin = function(spr)
|
||||||
local tx, ty = (spr.pos.x)>>3, (spr.pos.y)>>3
|
if spr.state == templates.ALIVE then
|
||||||
|
|
||||||
local x1,y1,w1,h1 = util.aabb(spr)
|
local x1,y1,w1,h1 = util.aabb(spr)
|
||||||
for i,v in ipairs(sprites.list) do
|
--for i,v in ipairs(sprites.list) do
|
||||||
if v.enemy and v.state ~= templates.DEAD then
|
--if v.type == "hero" then
|
||||||
local x2,y2,w2,h2 = util.aabb(v)
|
local x2,y2,w2,h2 = util.aabb(sprites.hero)
|
||||||
if util.check_aabb_collision(x1,y1,w1,h1, x2,y2,w2,h2) then
|
if util.check_aabb_collision(x1,y1,w1,h1, x2,y2,w2,h2) then
|
||||||
if v.state == templates.ALIVE then v.state = templates.DYING end
|
local tx, ty = (spr.pos.x)>>3, (spr.pos.y)>>3
|
||||||
sprites.remove(spr)
|
map.surf(rooms.surf_items)
|
||||||
|
map.tile(tx,ty,0)
|
||||||
|
|
||||||
|
spr.state = templates.DYING
|
||||||
|
sprites.set_animation(spr, "coin_picked")
|
||||||
|
spr.pos.y=spr.pos.y-16
|
||||||
|
spr.pos.x=spr.pos.x-4
|
||||||
|
spr.timer = 0
|
||||||
|
score.points = score.points + 10
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
--end
|
||||||
|
--end
|
||||||
|
elseif spr.state == templates.DYING then
|
||||||
|
spr.pos.y = spr.pos.y - 0.5
|
||||||
|
spr.timer = spr.timer + 1
|
||||||
|
if spr.timer == 32 then
|
||||||
|
sprites.remove(spr)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
update_hero = function()
|
update_hero = function()
|
||||||
game.draw_light(sprites.hero.pos.x, sprites.hero.pos.y,100)
|
--game.draw_light(sprites.hero.pos.x, sprites.hero.pos.y,100)
|
||||||
|
|
||||||
-- Update hero
|
-- Update hero
|
||||||
local anim = "hero_stand"
|
local anim = "hero_stand"
|
||||||
@@ -342,6 +356,12 @@ sprites = {
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
draw = function(ignore_selected)
|
draw = function(ignore_selected)
|
||||||
|
if app.update ~= editor.update then
|
||||||
|
surf.target(game.circ_buf)
|
||||||
|
surf.cls()
|
||||||
|
surf.target(game.back_buf)
|
||||||
|
end
|
||||||
|
|
||||||
editor.item_hovered = nil
|
editor.item_hovered = nil
|
||||||
local mx,my = mouse.pos()
|
local mx,my = mouse.pos()
|
||||||
if editor.item_selected or editor.layer~=LAYER_ITEMS then ignore_selected = true end
|
if editor.item_selected or editor.layer~=LAYER_ITEMS then ignore_selected = true end
|
||||||
@@ -365,8 +385,11 @@ sprites = {
|
|||||||
local reversed = frame.reversed or false
|
local reversed = frame.reversed or false
|
||||||
surf.source(sprite.surf)
|
surf.source(sprite.surf)
|
||||||
draw.surf(frame.frame.x, frame.frame.y, frame.frame.w, frame.frame.h, sprite.pos.x, sprite.pos.y, frame.frame.w, frame.frame.h, (not reversed) ~= (not sprite.flipped))
|
draw.surf(frame.frame.x, frame.frame.y, frame.frame.w, frame.frame.h, sprite.pos.x, sprite.pos.y, frame.frame.w, frame.frame.h, (not reversed) ~= (not sprite.flipped))
|
||||||
local x,y,w,h = util.aabb(sprite)
|
--local x,y,w,h = util.aabb(sprite)
|
||||||
--draw.rect(x,y,w,h,8)
|
--draw.rect(x,y,w,h,8)
|
||||||
|
if (app.update ~= editor.update) and (sprite.light) then
|
||||||
|
game.draw_light(sprite.pos.x+sprite.light_ox, sprite.pos.y+sprite.light_oy,sprite.light)
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
draw_sprite_selected = function(sprite)
|
draw_sprite_selected = function(sprite)
|
||||||
|
|||||||
@@ -46,6 +46,10 @@ templates = {
|
|||||||
flipped = options.flipped,
|
flipped = options.flipped,
|
||||||
surf = surf.load("misc.gif"),
|
surf = surf.load("misc.gif"),
|
||||||
animation = "coin",
|
animation = "coin",
|
||||||
|
state = templates.ALIVE,
|
||||||
|
light = 15,
|
||||||
|
light_ox = 4,
|
||||||
|
light_oy = 4,
|
||||||
ia = sprites.update_coin
|
ia = sprites.update_coin
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user