55 Commits

Author SHA1 Message Date
b7c3e6ee92 adjust menu renderer 2025-05-03 17:26:48 -07:00
c91e5f4bd1 shorten RATE message
not enough room to describe "fractions add up" -- maybe I can just fit
in the "remainder" to hint that it will be considered in future
upgrades?
2025-05-03 17:19:33 -07:00
ea2ddadb15 oops, method call syntax is special 2025-05-03 17:12:20 -07:00
9333c03bf3 add main gun rate upgrade to ship pool 2025-05-03 17:11:47 -07:00
1b45bd3dc3 fix rate formatting 2025-05-03 17:11:35 -07:00
71a7351d77 oops, miscalculated box width 2025-05-03 17:04:29 -07:00
80bb848468 options work better when I return them 2025-05-03 16:51:59 -07:00
b227844d12 Restyle ship stat upgrades. 2025-05-03 16:48:18 -07:00
ce14d03669 offer gun upgrades 2025-05-03 16:38:39 -07:00
ccd2c64103 update gun pick description style 2025-05-03 16:38:26 -07:00
e5b8a30cb6 cooldown reduction prototype
I decided to keep cooldown in the same unit as the frame counter,
because the extra math when calculating an upgrade is going to happen
much less frequently than actual cooldown checks and calculations, so
leaving the upgrade logic as the less efficient path seems like the
more appropriate choice.
2025-05-03 16:28:54 -07:00
7ed305d2d9 Ammo quantity upgrade prototype
Not yet tested. Will crash until I also get rate_upgrade_opt up.
2025-05-03 16:06:16 -07:00
288b7f64c8 tinker with blip colors, go back to level+1
with the current testing level, level + 1 is necessary to comfortably
get a weapon before the Wall O' Block shows up
2025-01-26 22:32:17 -08:00
aea2a8c481 red blip when shield exhausted 2025-01-26 22:27:14 -08:00
9b24f10c23 inline ow, simplify blip, no shield piercing
* any amount of shielding prevents all HP damage
* when shields are sent to 0, orange blip
* all blips are 3 frames

considering a "shimmy" animation for start of shield recovery. maybe later
2025-01-26 22:25:06 -08:00
511c18f90e remove offset when choosing category of upgrade 2025-01-26 22:15:03 -08:00
142810ee2d scatter xp drops more 2025-01-26 22:11:02 -08:00
50beae1852 don't attract xp when dead 2025-01-26 22:08:16 -08:00
9c95fc1784 suck! suck! suck! suck! suck! suck! suck! suck! 2025-01-26 21:00:39 -08:00
cb2d24c9d0 thrust performance is now also an option 2025-01-26 20:38:31 -08:00
67603f8496 start of normal ship upgrades
todo: thrust upgrade
2025-01-26 20:21:06 -08:00
2cebea663f make stat modifications actually work 2025-01-26 13:14:59 -08:00
eed7b6af87 unique bullet base instances
peel off new copies of ammo when using a new gun so we can upgrade it without screwing up the base stats
2025-01-26 13:07:43 -08:00
26c3a5b91e actually fix starting ammo
also improve box overflow
2025-01-26 12:50:27 -08:00
44c70a028f fix starting ammo 2025-01-26 12:45:43 -08:00
a90caeba85 make level less spewy, finish renaming s to icon 2025-01-26 12:42:57 -08:00
cd5b79ef4a prototype: gun picking 2025-01-26 11:21:32 -08:00
637eed1eb8 autofire and three guns 2025-01-26 01:06:37 -08:00
55ab256539 oh right I changed that name 2025-01-26 00:32:17 -08:00
22d13121a9 placeholders for card draw 2025-01-26 00:30:09 -08:00
58da8e6dc3 fix hokey pokey menu
the menu eases in, the menu eases out, the menu eases in and you shake it all about
2025-01-20 18:02:50 -08:00
8ff0732cbc draw rearm pane; exit behavior is broken
Nil transparency has screwed me over; I am uploading this version as
an illustrative example
2025-01-20 17:43:21 -08:00
c88e7c0657 I really wish Lua had real classes rather than forcing you to assemble it yourself 2025-01-20 17:09:47 -08:00
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
89a42e6c8b improve xp gem art 2025-01-12 21:51:32 -08:00
e2be11a2da fix order of magnitude error in XP logic 2025-01-12 21:47:11 -08:00
175099d778 make maxval work better near p8 precision limits 2024-12-29 23:44:39 -08:00
33fede4ed8 update comment about off-by-1 error 2024-12-29 23:41:47 -08:00
afa1f22170 go back to 0x0.0001 increments for xp
I foresee the 32K limit being a bigger problem than the math in vertmeter, although I will probably need to go patch vertmeter up too
2024-12-29 23:39:56 -08:00
78b200272e fix shield crash 2024-12-29 23:33:45 -08:00
42ac2abc20 groundwork for full mode switching 2024-12-29 23:26:48 -08:00
c55ea000fd whoosh animation when level up pending 2024-12-28 19:56:42 -08:00
2c1ad0a0b3 drop xp gems 2024-12-28 19:27:54 -08:00
e0b784ce7d clean up, run at 60 fps
now the bounce animation feels like it takes too long, trying to fix it
2024-12-26 17:43:04 -08:00
e1a70cc6fc dark blue, not dark gray, for pane bg 2024-12-26 17:16:48 -08:00
cbdf2a27cd fast quadratic exit feels better 2024-12-26 17:05:55 -08:00
caaf848722 fixed it 2024-12-26 16:59:43 -08:00
25f58d5cce messed up entry animation but it's a start
* wrong Y positions for everything
* both directions are "enter"
2024-12-26 16:19:52 -08:00
c15ec61494 partial prototype of object-oriented drawing and entry 2024-12-26 12:32:31 -08:00
7ff5cf97ad functioning prototype 2024-12-24 19:23:14 -08:00
f761d1a172 prototype for REARM screen UI 2024-12-24 19:04:07 -08:00
98f56328a6 off by 1 2024-12-24 18:10:48 -08:00
93792c36c9 sketch for possible REARM ui blank 2024-12-24 18:10:17 -08:00
2 changed files with 918 additions and 254 deletions

223
rearm_prototype.p8 Normal file
View File

@ -0,0 +1,223 @@
pico-8 cartridge // http://www.pico-8.com
version 42
__lua__
-- vacuum gambit
-- by kistaro windrider
-- stdlib
-- generate standard "overlay"
-- constructor for type tt.
-- if tt.init is defined, generated
-- new calls tt.init(ret) after
-- ret is definitely not nil,
-- before calling setmetatable.
-- use to initialize mutables.
--
-- if there was a previous new,
-- it is invoked on the new
-- object *after* more, because
-- this works better with the
-- `more` impls i use.
function mknew(tt)
local mt,oldnew,more = {__index=tt},tt.new,rawget(tt, "init")
tt.new=function(ret)
if(not ret) ret = {}
if(more) more(ret)
if(oldnew) oldnew(ret)
setmetatable(ret, mt)
return ret
end
return tt
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
-->8
-- entry points
function _draw()
cls()
draw_hud_placeholder()
left_pane:draw()
right_pane:draw()
rearm_pane_instance:draw()
end
function _init()
item=1
bfm=1
crt_frm = 1
left_pane = weapon_pane.new{}
right_pane = weapon_pane.new{
is_left=false,
s = 2,
hdr = "vulc",
body = " rate\n\n faster\n firing\n rate",
hot = function() return item == 2 end}
rearm_pane_instance = rearm_pane.new{hot=function() return item < 0 end}
end
function _update60()
crt_frm += 0.25
if (crt_frm >= 9) crt_frm = 1
if (btn(3) and item > 0 or btn(2) and item < 0) item = -item
if (btn(0)) item = 1
if (btn(1)) item = 2
if (btn() & 0xF ~= 0) and bfm >= 10 or bfm >= 30 then
bfm = 1
else
bfm += 1
end
if btnp(4) then
left_pane.pos = -1
right_pane.pos = -1
rearm_pane_instance.pos = -1
end
if btnp(5) then
left_pane.pos = 1
right_pane.pos = 1
rearm_pane_instance.pos = 1
end
left_pane:update()
right_pane:update()
rearm_pane_instance:update()
end
function draw_hud_placeholder()
rectfill(112, 0, 127, 127,0x56)
rect(112,0,127,127,7)
line(127,1,127,127,5)
line(113,127)
end
-->8
-- rearm pane drawing
crt={-91,-166,-2641,-1441,-23041,23295,-20491,24570}
function 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[crt_frm&0xff])
rectfill(x0+4, y0+4, x1-4, y1-4, cf)
fillp()
end
function frame_col(hot)
if (not hot) return {4,10}
if (bfm<=16) return {14,7}
return {2,8}
end
function draw_weap_opt(x, y, c, s, hdr, body)
camera(-x,-y)
glow_box(0,0,55,100,c,1)
spr(s,5, 5)
print(hdr, 13, 8, 7)
print(body, 5, 15, 6)
camera()
end
function draw_rearm(c)
glow_box(0,101,111,127,c,1)
spr(5,15,107,4,2)
print("full ammo\nfull shield\n+50% health",54, 106, 6)
end
-->8
-- rearm pane objects
easing_pane = mknew{
-- to enter: pos = -1; to exit: pos = 1
-- runs for 32 frames in, 16 frames out
}
function easing_pane: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 easing_pane:update()
local pos = self.pos
if (not pos or pos == 0) return
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
weapon_pane = mknew(easing_pane.new{
is_left = true,
s = 1,
hdr = "hull",
body = "\n +1\n max\n health",
hot = function() return item == 1 end,
})
function weapon_pane:draw()
local frac, is_left = self:frac(), self.is_left
if (not frac) return
camera(
frac * (is_left and 55 or -128) + (1-frac) * (is_left and 0 or -56),
0)
glow_box(0,0,55,100,frame_col(self:hot()),1)
spr(self.s,5, 5)
print(self.hdr, 13, 8, 7)
print(self.body, 5, 15, 6)
camera()
end
rearm_pane = mknew(easing_pane.new{})
function rearm_pane:draw()
local frac = self:frac()
if (not frac) return
camera(0, -28 * frac)
glow_box(0,101,111,127,frame_col(self:hot()),1)
spr(5,15,107,4,2)
print("full ammo\nfull shield\n+50% health",54, 106, 6)
camera()
end
__gfx__
000000000b00000000000a0007700770000aa0000444440004444444000000000000000000000000000000000000000000000000000000000000000000000000
00000000bba80880000008000aa00aa00a0880a0447777700477777a000000000000000000000000000000000000000000000000000000000000000000000000
007007000aaa28780a0000000990099008000080477aaa7a0477aaaa000000000000000000000000000000000000000000000000000000000000000000000000
0007000008a8887808000000099009900080080047a0047a047a0000000000000000000000000000000000000000000000000000000000000000000000000000
00007000088888820000a000088008800000000047a0447a047a0000000000000000000000000000000000000000000000000000000000000000000000000000
00700700008888200000800008800880a000000a47a4477a047a4440000000000000000000000000000000000000000000000000000000000000000000000000
000000000008820000a0000008800880080aa080477777a00477777a000000000000000000000000000000000000000000000000000000000000000000000000
0000000000002000008000000880088000088000477770000422aaaa222200020000020000000000000000000000000000000000000000000000000000000000
0d5000000000000000000000000000000000000047a77700022ee0002eeee002e00022e000000000000000000000000000000000000000000000000000000000
d00000000000000000000000000000000000000047a4777002ea2e002e002e02ee022ee000000000000000000000000000000000000000000000000000000000
500000000000000000000000000000000000000047a0477a22ea2e002e002e02e2e2e2e000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000047a0047a2e2222e02e222e02e02e02e000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000047a0047a2eeeeeea2eeee002e02e02e000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000aa000aa2e7aa2ea2e00e002e02e02e000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000002e0002e02e002e02e02e02e000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000e0000e00e000e00e00e00e000000000000000000000000000000000000000000000000000000000

File diff suppressed because it is too large Load Diff