Compare commits

...

3 Commits

Author SHA1 Message Date
ff3552bc45
fix unit error for xp frame logic 2025-01-20 17:02:02 -08:00
2dcb95b0cd
menu prototype 2025-01-20 16:59:57 -08:00
87451bbd3a
incomplete start to porting ui 2025-01-12 22:58:20 -08:00

View File

@ -185,6 +185,10 @@ function call_move(x)
end
function updategame()
if primary_ship.xp >= primary_ship.xptarget and lframe - primary_ship.last_xp_frame > 0x0.000F then
mode = rearm_mode.new()
return _update60()
end
leveldone = level_frame()
events:vore(new_events)
events:strip(call_move)
@ -960,6 +964,7 @@ player = mknew(ship_m.new{
-- xp in increments of 0x0.0001
xp = 0,
xptarget = 0x0.0004,
last_xp_frame = 0,
level = 1,
-- gun
@ -1751,6 +1756,155 @@ function spawn_spec_gun_at(x, y, gunt)
gun_p:spawn_at(x, y)
end
-->8
-- rearm screen
rearm_mode = mknew{
sel=1,
bfm=1,
crt_frm = 1,
pos=-1,
}
crt={-91,-166,-2641,-1441,-23041,23295,-20491,24570}
function rearm_mode:glow_box(x0, y0, x1, y1, c, cf)
for i,v in ipairs{c[1],c[2],c[1],0} do
i -= 1
rect(x0+i,y0+i,x1-i,y1-i,v)
end
fillp(crt[self.crt_frm&0xff])
rectfill(x0+4, y0+4, x1-4, y1-4, cf)
fillp()
end
function easeoutbounce(t)
local n1=7.5625
local d1=2.75
if (t<1/d1) then
return n1*t*t;
elseif(t<2/d1) then
t-=1.5/d1
return n1*t*t+.75;
elseif(t<2.5/d1) then
t-=2.25/d1
return n1*t*t+.9375;
else
t-=2.625/d1
return n1*t*t+.984375;
end
end
function rearm_mode:frame_col(hot)
if (not hot) return {4,10}
if (self.bfm<=16) return {14,7}
return {2,8}
end
function rearm_mode:draw_option(id)
local rec = self.options[id]
self:glow_box(0,0,55,100,self:frame_col(self.sel == id),1)
spr(rec.s,5, 5)
print(rec.hdr, 13, 8, 7)
print(rec.body, 5, 15, 6)
end
function rearm_mode:pos_frac()
local pos = self.pos
if (not pos) return
if (pos < 0) return 1-easeoutbounce(1+pos)
if (pos > 0) return (1-pos)*(1-pos)
return 0
end
function rearm_mode:init()
self:shuffle()
end
function rearm_mode:shuffle()
-- these will be placeholders
-- until the upgrade deck
-- is a thing that exists
self.options = {{
s=1,
hdr="hull",
body = "\n +1\n max\n health",
action = function() end,
},{
s=2,
hdr="vulc",
body = "\n placeholder",
action = function() end,
}}
end
function rearm_mode:draw()
local frac = self:pos_frac()
camera(frac * 55, 0)
self:draw_option(1)
camera(frac * -128 + (1-frac) * -56, 0)
self:draw_option(2)
-- TODO: draw rearm pane
drawhud()
end
function rearm_mode:update_pos()
local pos = self.pos
if (not pos or pos == 0) return
if (pos <= 0 and primary_ship.xp < primary_ship.xptarget) self.pos += 1
if (pos < 0) pos = min(pos + 0x0.05, 0)
if pos > 0 then
pos -= 0x0.1
if (pos <= 0) pos = nil
end
self.pos = pos
end
function rearm_mode:update()
self:update_pos()
if not self.pos then
mode = game_mode
return _update60()
end
local sel, bfm = self.sel, self.bfm
if (btn(3) and sel > 0 or btn(2) and sel < 0) sel=-sel
if (btn(0)) sel = 1
if (btn(1)) sel = 2
if (btn()&0xF ~= 0) and bfm >= 10 or bfm >= 30 then
bfm = 1
else
bfm += 1
end
self.bfm = bfm
if primary_ship.xp < primary_ship.xptarget then
sel = 0
elseif btnp(4) or btnp(5) and self.pos == 0 then
if sel < 0 then
-- todo: sound: rearm
primary_ship.shield = primary_ship.maxshield
-- todo: rewrite for three guns
if (primary_ship.spec_gun) primary_ship.spec_gun.ammo = primary_ship.spec_gun.max_ammo
primary_ship.hp = min(primary_ship.maxhp, primary_ship.hp + primary_ship.maxhp/2)
primary_ship.xp -= primary_ship.xptarget / 2
else
local c = self.options[sel]
if c then
-- todo: sound: upgrade
c:action()
primary_ship.xp -= primary_ship.xptarget
primary_ship.xptarget += primary_ship.level * 0x0.0002
primary_ship.level += 1
if (primary_ship.xp >= primary_ship.xptarget) self:shuffle()
end
end
end
self.sel = sel
end
__gfx__
00000000000650000000000000000000bb0b50b59909209200cc0c00000000003b00000082000000e00e8002e00e800200333300002222000000000000000000
00000000006765000000000000cccc00b50b3055920940220c0000c000bbbb0037000000a2000000e0e8880240e8480403bbbb30028888200000000000000000