start assembling arcade_level
* removed existing test items, newtitle now returns arcade_level.new() * rearranged stuff so initializers wouldn't complain * specialized linked list to event list * convert "strip" to "update" -- strips based on update calls * removed assorted list manipulations I don't need * stupid sky/sea prototype * assemble overall frame * assorted placeholders and todos * since sky will probably be blue, plan for a pink dolphin * splash callbacks now part of the level, dolphin is told what to call back into; may rework this latre when I am trying to squeeze into token limits * added time offset arg to wave generator, although I am not sure I will actually use it * noted plan to change wave pattern to look more sea-wave-y. wave curl is probably not going to happen, though, since that can't be expressed as a pure Cartesian function due to multiple Y values for an X
This commit is contained in:
parent
1ad0e973a5
commit
51522e699c
235
vacation.p8
235
vacation.p8
@ -65,45 +65,21 @@ function mknew(tt, more)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- intrusive singly-linked list.
|
event_list = {is_event_list=true}
|
||||||
-- cannot be nested!
|
mknew(event_list, function(x)
|
||||||
linked_list = {is_linked_list=true}
|
|
||||||
mknew(linked_list, function(x)
|
|
||||||
x.next=nil
|
x.next=nil
|
||||||
x.tail=x
|
x.tail=x
|
||||||
end)
|
end)
|
||||||
|
|
||||||
function linked_list:push_back(x)
|
function event_list:push_back(x)
|
||||||
self.tail.next = x
|
self.tail.next = x
|
||||||
self.tail = x
|
self.tail = x
|
||||||
end
|
end
|
||||||
|
|
||||||
function linked_list:push_front(x)
|
function event_list:update()
|
||||||
if (not self.next) self.tail = x
|
|
||||||
x.next = self.next
|
|
||||||
self.next = x
|
|
||||||
end
|
|
||||||
|
|
||||||
-- vore eats another linked list
|
|
||||||
-- by appending its contents.
|
|
||||||
-- the ingested linked is empty.
|
|
||||||
function linked_list:vore(x)
|
|
||||||
if (not x.next) return
|
|
||||||
self.tail.next = x.next
|
|
||||||
self.tail = x.tail
|
|
||||||
x.next = nil
|
|
||||||
x.tail = x
|
|
||||||
end
|
|
||||||
|
|
||||||
-- strip calls f(x) for each
|
|
||||||
-- node, removing each node for
|
|
||||||
-- which f(x) returns true. it
|
|
||||||
-- returns the new tail; nil
|
|
||||||
-- if the list is now empty.
|
|
||||||
function linked_list:strip(f)
|
|
||||||
local p, n = self, self.next
|
local p, n = self, self.next
|
||||||
while n do
|
while n do
|
||||||
if f(n) then
|
if n:update() then
|
||||||
p.next = n.next
|
p.next = n.next
|
||||||
else
|
else
|
||||||
p = n
|
p = n
|
||||||
@ -114,13 +90,7 @@ function linked_list:strip(f)
|
|||||||
return p
|
return p
|
||||||
end
|
end
|
||||||
|
|
||||||
-- optimized special case -
|
function event_list:draw()
|
||||||
-- could be done with strip but
|
|
||||||
-- this avoids extra function
|
|
||||||
-- calls and comparisions since
|
|
||||||
-- draw isn't allowed to kill
|
|
||||||
-- the item
|
|
||||||
function linked_list:draw()
|
|
||||||
local n = self.next
|
local n = self.next
|
||||||
while n do
|
while n do
|
||||||
n:draw()
|
n:draw()
|
||||||
@ -128,15 +98,6 @@ function linked_list:draw()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function linked_list:pop_front()
|
|
||||||
local ret = self.next
|
|
||||||
if (not ret) return
|
|
||||||
self.next = ret.next
|
|
||||||
if (not ret.next) ret.tail = nil
|
|
||||||
return ret
|
|
||||||
end
|
|
||||||
|
|
||||||
-- if t[mname] is a thing,
|
-- if t[mname] is a thing,
|
||||||
-- invoke it as a method. else,
|
-- invoke it as a method. else,
|
||||||
-- try each object in t
|
-- try each object in t
|
||||||
@ -172,8 +133,8 @@ function puke(item, indent, seen, hidekey)
|
|||||||
end
|
end
|
||||||
local xpfx = pfx.." "
|
local xpfx = pfx.." "
|
||||||
|
|
||||||
if item.is_linked_list then
|
if item.is_event_list then
|
||||||
local ret,n = "linked_list <",0
|
local ret,n = "event_list <",0
|
||||||
item:strip(function(x)
|
item:strip(function(x)
|
||||||
n += 1
|
n += 1
|
||||||
ret ..= xpfx..tostr(n)..": "..puke(x, indent+2, seen, "next")
|
ret ..= xpfx..tostr(n)..": "..puke(x, indent+2, seen, "next")
|
||||||
@ -395,41 +356,11 @@ end
|
|||||||
|
|
||||||
-->8
|
-->8
|
||||||
-- title screen
|
-- title screen
|
||||||
|
|
||||||
|
-- currently just loading
|
||||||
|
-- whatever view I want to debug
|
||||||
function newtitle()
|
function newtitle()
|
||||||
local box = scootbox.new()
|
return arcade_level.new()
|
||||||
box:push(spring.new{
|
|
||||||
v=txtbox.new{
|
|
||||||
x=30,
|
|
||||||
text="sPRING tEST",
|
|
||||||
},
|
|
||||||
to=64,
|
|
||||||
})
|
|
||||||
setup_arcade_pal()
|
|
||||||
return view.of{
|
|
||||||
{
|
|
||||||
update=function()
|
|
||||||
box.go = btn(4)
|
|
||||||
end
|
|
||||||
},
|
|
||||||
bg.new{c=1},
|
|
||||||
bg.new{
|
|
||||||
y=28,
|
|
||||||
h=72,
|
|
||||||
c=5,
|
|
||||||
},
|
|
||||||
box,
|
|
||||||
toyphin.new(),
|
|
||||||
{
|
|
||||||
x=128,
|
|
||||||
update=function(self)
|
|
||||||
self.x -= 1
|
|
||||||
if (self.x < 0) self.x = 128
|
|
||||||
end,
|
|
||||||
draw=function(self)
|
|
||||||
rectfill(self.x, 120, self.x, 128, 9)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-->8
|
-->8
|
||||||
@ -441,20 +372,74 @@ end
|
|||||||
-->8
|
-->8
|
||||||
-- arcade mode
|
-- arcade mode
|
||||||
|
|
||||||
|
-- global wave amplitude clock
|
||||||
|
-- wave per 2 seconds
|
||||||
|
-- optional toff: offset. at
|
||||||
|
-- toff==0 draw directly under
|
||||||
|
-- the dolphin
|
||||||
|
function wave(toff)
|
||||||
|
toff = toff or 0
|
||||||
|
return 2.5 * sin((t()+toff)>>1)
|
||||||
|
end
|
||||||
|
|
||||||
|
waves={}
|
||||||
|
mknew(waves)
|
||||||
|
|
||||||
arcade_level = {
|
arcade_level = {
|
||||||
score=0,
|
score=0,
|
||||||
maxscore=15,
|
maxscore=15,
|
||||||
}
|
}
|
||||||
mknew(arcade_level, function(x)
|
mknew(arcade_level, function(x)
|
||||||
x.p = toyphin.new()
|
x.phin = toyphin.new{splasher=x}
|
||||||
|
-- TODO: decent looking sky and sea
|
||||||
|
x.sky = bg.new{c=12}
|
||||||
|
x.sea = bg.new{y=72, c=1}
|
||||||
x.waves = waves.new()
|
x.waves = waves.new()
|
||||||
x.words = linked_list.new()
|
-- event list includes words
|
||||||
x.fx = linked_list.new()
|
x.e = event_list.new()
|
||||||
|
-- TODO: score renderer
|
||||||
|
x.t0 = t()
|
||||||
|
|
||||||
|
x.v = view.of{
|
||||||
|
x.sky,
|
||||||
|
x.sea,
|
||||||
|
x.waves,
|
||||||
|
x.phin,
|
||||||
|
x.e,
|
||||||
|
}
|
||||||
|
|
||||||
|
x.s = scootbox.new()
|
||||||
|
x.s:push(x.v)
|
||||||
|
|
||||||
|
-- TODO: fade in level music
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- global
|
function arcade_level:update()
|
||||||
function wave()
|
-- TODO: timers, word loop,
|
||||||
return 2.5 * sin(t()>>1)
|
-- level state tracking and
|
||||||
|
-- progression, etc.
|
||||||
|
self.s:update()
|
||||||
|
end
|
||||||
|
|
||||||
|
function arcade_level:draw()
|
||||||
|
setup_arcade_pal()
|
||||||
|
self.s:draw()
|
||||||
|
end
|
||||||
|
|
||||||
|
function arcade_level:dive_splash(x)
|
||||||
|
-- TODO: sfx, vfx for dive input
|
||||||
|
end
|
||||||
|
|
||||||
|
function arcade_level:jump_splash(x)
|
||||||
|
-- TODO: sfx, vfx for jump input
|
||||||
|
end
|
||||||
|
|
||||||
|
function arcade_level:surfacing_splash(x, force, harder)
|
||||||
|
-- TODO: sfx, vfx for surfacing from a dive
|
||||||
|
end
|
||||||
|
|
||||||
|
function arcade_level:landing_splash(x, force, harder)
|
||||||
|
-- TODO: sfx, vfx for landing from a jump
|
||||||
end
|
end
|
||||||
|
|
||||||
-- dolphin sprite states:
|
-- dolphin sprite states:
|
||||||
@ -471,12 +456,12 @@ end
|
|||||||
phin_nrm_pal = {
|
phin_nrm_pal = {
|
||||||
[2]=2,
|
[2]=2,
|
||||||
[7]=7,
|
[7]=7,
|
||||||
[12]=12,
|
[14]=14,
|
||||||
}
|
}
|
||||||
phin_uw_pal = {
|
phin_uw_pal = {
|
||||||
[2]=130,
|
[2]=130,
|
||||||
[7]=135,
|
[7]=13,
|
||||||
[12]=140,
|
[14]=141,
|
||||||
}
|
}
|
||||||
identity = {
|
identity = {
|
||||||
[0]=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
[0]=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||||
@ -565,24 +550,8 @@ toyphin = {
|
|||||||
}
|
}
|
||||||
mknew(toyphin)
|
mknew(toyphin)
|
||||||
|
|
||||||
function dive_splash(x)
|
|
||||||
-- TODO: sfx, vfx for dive input
|
|
||||||
end
|
|
||||||
|
|
||||||
function jump_splash(x)
|
|
||||||
-- TODO: sfx, vfx for jump input
|
|
||||||
end
|
|
||||||
|
|
||||||
function surfacing_splash(x, force, harder)
|
|
||||||
-- TODO: sfx, vfx for surfacing from a dive
|
|
||||||
end
|
|
||||||
|
|
||||||
function landing_splash(x, force, harder)
|
|
||||||
-- TODO: sfx, vfx for landing from a jump
|
|
||||||
end
|
|
||||||
|
|
||||||
function toyphin:update()
|
function toyphin:update()
|
||||||
local x, y, dy = self.x, self.y, self.dy
|
local x, y, dy, splash = self.x, self.y, self.dy, self.splasher
|
||||||
-- entry mode?
|
-- entry mode?
|
||||||
if not self.entered then
|
if not self.entered then
|
||||||
x += 1
|
x += 1
|
||||||
@ -599,10 +568,10 @@ function toyphin:update()
|
|||||||
if self.entered and not self.exiting then
|
if self.entered and not self.exiting then
|
||||||
if y >= 61 and y <= 67 and dy < 1 and dy > -1 then
|
if y >= 61 and y <= 67 and dy < 1 and dy > -1 then
|
||||||
if (btn(2)) then
|
if (btn(2)) then
|
||||||
jump_splash(x)
|
splash:jump_splash(x)
|
||||||
dy=-3.8
|
dy=-3.8
|
||||||
elseif (btn(3)) then
|
elseif (btn(3)) then
|
||||||
dive_splash(x)
|
splash:dive_splash(x)
|
||||||
dy=3.8
|
dy=3.8
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -616,7 +585,7 @@ function toyphin:update()
|
|||||||
local new_y = y + dy
|
local new_y = y + dy
|
||||||
if new_y <= 64 and y > 64 then
|
if new_y <= 64 and y > 64 then
|
||||||
-- surfacing
|
-- surfacing
|
||||||
surfacing_splash(x, -dy, btn(2) and (dy > -3.8))
|
splash:surfacing_splash(x, -dy, btn(2) and (dy > -3.8))
|
||||||
if btn(2) then
|
if btn(2) then
|
||||||
-- maybe boost
|
-- maybe boost
|
||||||
if dy > -3.8 then
|
if dy > -3.8 then
|
||||||
@ -637,7 +606,7 @@ function toyphin:update()
|
|||||||
end
|
end
|
||||||
elseif new_y >= 64 and y < 64 then
|
elseif new_y >= 64 and y < 64 then
|
||||||
-- landing
|
-- landing
|
||||||
landing_splash(x, dy, btn(3) and (dy < 3.8))
|
splash:landing_splash(x, dy, btn(3) and (dy < 3.8))
|
||||||
if btn(3) then
|
if btn(3) then
|
||||||
-- maybe boost
|
-- maybe boost
|
||||||
if dy < 3.8 then
|
if dy < 3.8 then
|
||||||
@ -697,30 +666,30 @@ __gfx__
|
|||||||
00000000777777777777777777777777777777777777777777777777777777777777777777777777777777777777777700000000000000000000000000000000
|
00000000777777777777777777777777777777777777777777777777777777777777777777777777777777777777777700000000000000000000000000000000
|
||||||
00000000700000000000000000000007700000000000000000000007700000000000000770000000000000000000000700000000000000000000000000000000
|
00000000700000000000000000000007700000000000000000000007700000000000000770000000000000000000000700000000000000000000000000000000
|
||||||
00700700700000000000000000000007700000000000000000000007700002222220000770000000000000000000000700000000000000000000000000000000
|
00700700700000000000000000000007700000000000000000000007700002222220000770000000000000000000000700000000000000000000000000000000
|
||||||
00077000700000000000000000000007700000000000000000000007700002cccc20000770000000000000000000000700000000000000000000000000000000
|
00077000700000000000000000000007700000000000000000000007700002eeee20000770000000000000000000000700000000000000000000000000000000
|
||||||
0007700070000000000000000000000770000000000000000000000770000222c220000770222200000000000000000700000000000000000000000000000000
|
0007700070000000000000000000000770000000000000000000000770000222e220000770222200000000000000000700000000000000000000000000000000
|
||||||
00700700700000000000000000000007702222022222222222222207700002cccc200007702cc222222222222222220700000000000000000000000000000000
|
00700700700000000000000000000007702222022222222222222207700002eeee200007702ee222222222222222220700000000000000000000000000000000
|
||||||
00000000700000000000000000000007702cc222c22c22cc22c2c2077000022222200007702c2c22c22c22cc22c2c20700000000000000000000000000000000
|
00000000700000000000000000000007702ee222e22e22ee22e2e2077000022222200007702e2e22e22e22ee22e2e20700000000000000000000000000000000
|
||||||
00000000700000000000000000000007702c2c2c2c2c22c2c2c2c2077000022c22000007702c2c2c2c2c22c2c2c2c20700000000000000000000000000000000
|
00000000700000000000000000000007702e2e2e2e2e22e2e2e2e2077000022e22000007702e2e2e2e2e22e2e2e2e20700000000000000000000000000000000
|
||||||
00000000700000000000000000000007702c2c2c2c2c22cc22ccc207700002c2c2200007702ccc2c2c2c22cc22ccc20700000000000000000000000000000000
|
00000000700000000000000000000007702e2e2e2e2e22ee22eee207700002e2e2200007702eee2e2e2e22ee22eee20700000000000000000000000000000000
|
||||||
00000000702222022222222222222207702ccc22c22cc2c222c2c207700002cccc20000770222222c22cc2c222c2c20700000000000000000000000000000000
|
00000000702222022222222222222207702eee22e22ee2e222e2e207700002eeee20000770222222e22ee2e222e2e20700000000000000000000000000000000
|
||||||
00000000702cc222c22c22cc22c2c207702222222222222202222207700002222220000770000022222222220222220700000000000000000000000000000000
|
00000000702ee222e22e22ee22e2e207702222222222222202222207700002222220000770000022222222220222220700000000000000000000000000000000
|
||||||
00000000702c2c2c2c2c22c2c2c2c207700000000000000000000007700002222c20000770000000000000000000000700000000000000000000000000000000
|
00000000702e2e2e2e2e22e2e2e2e207700000000000000000000007700002222e20000770000000000000000000000700000000000000000000000000000000
|
||||||
00000000702c2c2c2c2c22cc22ccc207700000000000000000000007700002cccc20000770000000000000000000000700000000000000000000000000000000
|
00000000702e2e2e2e2e22ee22eee207700000000000000000000007700002eeee20000770000000000000000000000700000000000000000000000000000000
|
||||||
00000000702ccc22c22cc2c222c2c207700000000000000000000007700002222220000770000000000000000000000700000000000000000000000000000000
|
00000000702eee22e22ee2e222e2e207700000000000000000000007700002222220000770000000000000000000000700000000000000000000000000000000
|
||||||
000000007022222222222222022222077000000000000000000000077000022cc220000770000000000000000000000700000000000000000000000000000000
|
000000007022222222222222022222077000000000000000000000077000022ee220000770000000000000000000000700000000000000000000000000000000
|
||||||
00000000700000000000000000000007777777777777777777777777700002c22c20000777777777777777777777777700000000000000000000000000000000
|
00000000700000000000000000000007777777777777777777777777700002e22e20000777777777777777777777777700000000000000000000000000000000
|
||||||
000000007000000000000000000000077777777777777777777777777000022cc220000700000000000000000000000000000000000000000000000000000000
|
000000007000000000000000000000077777777777777777777777777000022ee220000700000000000000000000000000000000000000000000000000000000
|
||||||
00000000700000000000000000000007700000000000000000000007700000222220000700000000000000000000000000000000000000000000000000000000
|
00000000700000000000000000000007700000000000000000000007700000222220000700000000000000000000000000000000000000000000000000000000
|
||||||
000000007000000000000000000000077000000000000000000000077000022ccc20000700000000000000000000000000000000000000000000000000000000
|
000000007000000000000000000000077000000000000000000000077000022eee20000700000000000000000000000000000000000000000000000000000000
|
||||||
00000000700000000000000000000007700000000000000000000007700002c22c20000700000000000000000000000000000000000000000000000000000000
|
00000000700000000000000000000007700000000000000000000007700002e22e20000700000000000000000000000000000000000000000000000000000000
|
||||||
00000000700000000000000000000007700000000000000000000007700002cccc20000700000000000000000000000000000000000000000000000000000000
|
00000000700000000000000000000007700000000000000000000007700002eeee20000700000000000000000000000000000000000000000000000000000000
|
||||||
00000000700000000000000000000007700000022222222222222207700002222220000700000000000000000000000000000000000000000000000000000000
|
00000000700000000000000000000007700000022222222222222207700002222220000700000000000000000000000000000000000000000000000000000000
|
||||||
0000000070000000000000000000000770222222c22c22cc22c2c207700000000000000700000000000000000000000000000000000000000000000000000000
|
0000000070000000000000000000000770222222e22e22ee22e2e207700000000000000700000000000000000000000000000000000000000000000000000000
|
||||||
00000000777777777777777777777777702cc22c2c2c22c2c2c2c207777777777777777700000000000000000000000000000000000000000000000000000000
|
00000000777777777777777777777777702ee22e2e2e22e2e2e2e207777777777777777700000000000000000000000000000000000000000000000000000000
|
||||||
00000000000000000000000000000000702c2c2c2c2c22cc22ccc207000000000000000000000000000000000000000000000000000000000000000000000000
|
00000000000000000000000000000000702e2e2e2e2e22ee22eee207000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
00000000000000000000000000000000702c2c22c22cc2c222c2c207000000000000000000000000000000000000000000000000000000000000000000000000
|
00000000000000000000000000000000702e2e22e22ee2e222e2e207000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
00000000000000000000000000000000702ccc222222222202222207000000000000000000000000000000000000000000000000000000000000000000000000
|
00000000000000000000000000000000702eee222222222202222207000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
00000000000000000000000000000000702222200000000000000007000000000000000000000000000000000000000000000000000000000000000000000000
|
00000000000000000000000000000000702222200000000000000007000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
00000000000000000000000000000000700000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000
|
00000000000000000000000000000000700000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
00000000000000000000000000000000700000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000
|
00000000000000000000000000000000700000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Loading…
Reference in New Issue
Block a user