npcs
This commit is contained in:
parent
adcc8d87b4
commit
9c1b281635
74
snowdogs.p8
74
snowdogs.p8
@ -20,6 +20,7 @@ function _update()
|
|||||||
elseif mode == "game" then
|
elseif mode == "game" then
|
||||||
sled_upd()
|
sled_upd()
|
||||||
trees_upd()
|
trees_upd()
|
||||||
|
npc_upd()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -51,6 +52,9 @@ function draw_game()
|
|||||||
snowbg()
|
snowbg()
|
||||||
trees_dr()
|
trees_dr()
|
||||||
sled_dr()
|
sled_dr()
|
||||||
|
if npc.draw != nil then
|
||||||
|
npc.draw(npc.x, npc.y)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-->8
|
-->8
|
||||||
@ -98,6 +102,8 @@ function title_dr()
|
|||||||
sspr(104, 24, 16, 16,
|
sspr(104, 24, 16, 16,
|
||||||
70+title_89, 100+title_89,
|
70+title_89, 100+title_89,
|
||||||
48, 48)
|
48, 48)
|
||||||
|
pal(8, 8)
|
||||||
|
pal(12, 12)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -263,6 +269,18 @@ function crash()
|
|||||||
local ti = (cur_tree() + 8) % #tree_wall + 1
|
local ti = (cur_tree() + 8) % #tree_wall + 1
|
||||||
l, r = tree_bounds()
|
l, r = tree_bounds()
|
||||||
sled_x = (l + r) / 2
|
sled_x = (l + r) / 2
|
||||||
|
|
||||||
|
-- reset npc
|
||||||
|
--npc.draw = nil
|
||||||
|
npc.collide = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function heart()
|
||||||
|
npc.draw = draw_heart
|
||||||
|
if dogs < 6 then
|
||||||
|
dogs += 1
|
||||||
|
end
|
||||||
|
npc.collide = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
function sled_dr()
|
function sled_dr()
|
||||||
@ -374,11 +392,67 @@ end
|
|||||||
-->8
|
-->8
|
||||||
--npcs
|
--npcs
|
||||||
|
|
||||||
|
npc = {
|
||||||
|
x=0,
|
||||||
|
y=0,
|
||||||
|
dx=0,
|
||||||
|
dy=0,
|
||||||
|
last=0,
|
||||||
|
draw=nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
function npc_upd()
|
||||||
|
-- every 200, roll for new npc
|
||||||
|
if distance - npc.last > 200 then
|
||||||
|
local r = rnd()
|
||||||
|
printh("npc roll: "..r)
|
||||||
|
if r < 0.03 then
|
||||||
|
npc.draw = draw_siren
|
||||||
|
npc.collide = crash
|
||||||
|
elseif r < 0.1 then
|
||||||
|
npc.draw = draw_yeti
|
||||||
|
npc.collide = crash
|
||||||
|
elseif r < 0.2 then
|
||||||
|
npc.draw = draw_moose
|
||||||
|
npc.collide = crash
|
||||||
|
elseif r < 0.4 then
|
||||||
|
npc.draw = draw_fan
|
||||||
|
npc.collide = heart
|
||||||
|
else
|
||||||
|
npc.draw = nil
|
||||||
|
npc.collide = nil
|
||||||
|
end
|
||||||
|
npc.last = distance
|
||||||
|
npc.y = rnd(40)
|
||||||
|
npc.x = -10
|
||||||
|
npc.dx = rnd(1)+1
|
||||||
|
npc.dy = rnd(2)
|
||||||
|
if rnd() < 0.5 then
|
||||||
|
npc.x += 140
|
||||||
|
npc.dx *= -1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- update npc
|
||||||
|
npc.x += npc.dx
|
||||||
|
npc.y += npc.dy
|
||||||
|
|
||||||
|
-- check collision
|
||||||
|
l, r = sled_bounds()
|
||||||
|
if npc.y > 50 and npc.x > l and npc.x < r and npc.collide then
|
||||||
|
npc.collide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function draw_fan(x, y)
|
function draw_fan(x, y)
|
||||||
spr(flr(1+(t() % 2)), x, y, 1, 2, flr(t()) % 3 == 1)
|
spr(flr(1+(t() % 2)), x, y, 1, 2, flr(t()) % 3 == 1)
|
||||||
spr(33, x, y+16)
|
spr(33, x, y+16)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function draw_heart(x, y)
|
||||||
|
spr(36, x, y)
|
||||||
|
end
|
||||||
|
|
||||||
function draw_yeti(x, y)
|
function draw_yeti(x, y)
|
||||||
spr(35, x, y, 1, 2)
|
spr(35, x, y, 1, 2)
|
||||||
spr(35, x-8, y, 1, 2, true)
|
spr(35, x-8, y, 1, 2, true)
|
||||||
|
Loading…
Reference in New Issue
Block a user