Compare commits
	
		
			73 Commits
		
	
	
		
			c90b56b603
			...
			bullet_ref
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						ead2a7d874
	
				 | 
					
					
						|||
| 
						
						
							
						
						571412b15e
	
				 | 
					
					
						|||
| 
						
						
							
						
						907bd8318c
	
				 | 
					
					
						|||
| 
						
						
							
						
						7170552448
	
				 | 
					
					
						|||
| 
						
						
							
						
						01ab6d3969
	
				 | 
					
					
						|||
| 
						
						
							
						
						7869192dee
	
				 | 
					
					
						|||
| 
						
						
							
						
						a4658e3ef4
	
				 | 
					
					
						|||
| 
						
						
							
						
						60b685d94b
	
				 | 
					
					
						|||
| 
						
						
							
						
						cc1e7ea5b7
	
				 | 
					
					
						|||
| 
						
						
							
						
						6b8efe3438
	
				 | 
					
					
						|||
| 
						
						
							
						
						c2668cefea
	
				 | 
					
					
						|||
| 
						
						
							
						
						eebd84544b
	
				 | 
					
					
						|||
| 
						
						
							
						
						965fc0d688
	
				 | 
					
					
						|||
| 
						
						
							
						
						cc3ed20f76
	
				 | 
					
					
						|||
| 
						
						
							
						
						fa0cff1ffc
	
				 | 
					
					
						|||
| 
						
						
							
						
						4f8b861cdb
	
				 | 
					
					
						|||
| 
						
						
							
						
						5dc259c094
	
				 | 
					
					
						|||
| 
						
						
							
						
						51629376f2
	
				 | 
					
					
						|||
| 
						
						
							
						
						c5e49740c4
	
				 | 
					
					
						|||
| 
						
						
							
						
						59738d0376
	
				 | 
					
					
						|||
| 
						
						
							
						
						f736f50870
	
				 | 
					
					
						|||
| 
						
						
							
						
						ccb897af24
	
				 | 
					
					
						|||
| 
						
						
							
						
						c130f4cf52
	
				 | 
					
					
						|||
| 
						
						
							
						
						cf48497432
	
				 | 
					
					
						|||
| 
						
						
							
						
						9dc36a95ee
	
				 | 
					
					
						|||
| 
						
						
							
						
						d33d7ad6d1
	
				 | 
					
					
						|||
| 
						
						
							
						
						00678f97fd
	
				 | 
					
					
						|||
| 
						
						
							
						
						8fa98e3132
	
				 | 
					
					
						|||
| 
						
						
							
						
						5d2dafa64c
	
				 | 
					
					
						|||
| 
						
						
							
						
						bd61ca2639
	
				 | 
					
					
						|||
| 
						
						
							
						
						54426be303
	
				 | 
					
					
						|||
| 
						
						
							
						
						84a803b828
	
				 | 
					
					
						|||
| 
						
						
							
						
						a4ed50d9e2
	
				 | 
					
					
						|||
| 
						
						
							
						
						a1df463a16
	
				 | 
					
					
						|||
| 
						
						
							
						
						d0a17488d0
	
				 | 
					
					
						|||
| 
						
						
							
						
						aa25f87c46
	
				 | 
					
					
						|||
| 
						
						
							
						
						edbde8e689
	
				 | 
					
					
						|||
| 
						
						
							
						
						5b668cf9c9
	
				 | 
					
					
						|||
| 
						
						
							
						
						34af172ca5
	
				 | 
					
					
						|||
| 
						
						
							
						
						4804402f32
	
				 | 
					
					
						|||
| 
						
						
							
						
						97ddfb876b
	
				 | 
					
					
						|||
| 
						
						
							
						
						fbeb313078
	
				 | 
					
					
						|||
| 
						
						
							
						
						a359bc5031
	
				 | 
					
					
						|||
| 
						
						
							
						
						cdf517c51c
	
				 | 
					
					
						|||
| 
						
						
							
						
						9aac99ef30
	
				 | 
					
					
						|||
| 
						
						
							
						
						5fef5bad00
	
				 | 
					
					
						|||
| 
						
						
							
						
						2bbc4e598c
	
				 | 
					
					
						|||
| 
						
						
							
						
						62fe5f51d3
	
				 | 
					
					
						|||
| 
						
						
							
						
						fd68ef88ec
	
				 | 
					
					
						|||
| 
						
						
							
						
						fd9866e963
	
				 | 
					
					
						|||
| 
						
						
							
						
						a5ce0fd020
	
				 | 
					
					
						|||
| 
						
						
							
						
						dae108c231
	
				 | 
					
					
						|||
| 
						
						
							
						
						2e46d87a84
	
				 | 
					
					
						|||
| 
						
						
							
						
						a4590821be
	
				 | 
					
					
						|||
| 
						
						
							
						
						cf1e1153a3
	
				 | 
					
					
						|||
| 
						
						
							
						
						f3ac1f492c
	
				 | 
					
					
						|||
| 
						
						
							
						
						fb95085bd9
	
				 | 
					
					
						|||
| 
						
						
							
						
						6f9517cee1
	
				 | 
					
					
						|||
| 
						
						
							
						
						8d5f697961
	
				 | 
					
					
						|||
| 
						
						
							
						
						bad8452f3c
	
				 | 
					
					
						|||
| 
						
						
							
						
						f49407baca
	
				 | 
					
					
						|||
| 
						
						
							
						
						e8ed97be9e
	
				 | 
					
					
						|||
| 
						
						
							
						
						f4bcd11bed
	
				 | 
					
					
						|||
| 
						
						
							
						
						4ae0d05b47
	
				 | 
					
					
						|||
| 
						
						
							
						
						a4bf3f616a
	
				 | 
					
					
						|||
| 
						
						
							
						
						8fb54ede26
	
				 | 
					
					
						|||
| 
						
						
							
						
						cb65a188a8
	
				 | 
					
					
						|||
| 
						
						
							
						
						7c29c329b7
	
				 | 
					
					
						|||
| 
						
						
							
						
						f67c2da37f
	
				 | 
					
					
						|||
| 
						
						
							
						
						da8a5b9589
	
				 | 
					
					
						|||
| 
						
						
							
						
						a58421bd19
	
				 | 
					
					
						|||
| 
						
						
							
						
						e0b8386849
	
				 | 
					
					
						|||
| 
						
						
							
						
						2b02d2b94b
	
				 | 
					
					
						
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
.DS_Store
 | 
			
		||||
.vscode/settings.json
 | 
			
		||||
							
								
								
									
										244
									
								
								autobrake_test.p8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										244
									
								
								autobrake_test.p8
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,244 @@
 | 
			
		||||
pico-8 cartridge // http://www.pico-8.com
 | 
			
		||||
version 41
 | 
			
		||||
__lua__
 | 
			
		||||
 | 
			
		||||
-- vacuum gambit automatic brake test
 | 
			
		||||
-- by kistaro windrider
 | 
			
		||||
 | 
			
		||||
function usplit(str)
 | 
			
		||||
 return unpack(split(str))
 | 
			
		||||
end
 | 
			
		||||
function csv(s)
 | 
			
		||||
 local ret = split(s, "\n")
 | 
			
		||||
 for i, v in ipairs(ret) do
 | 
			
		||||
  ret[i] = type(v) == "string" and split(v) or { v }
 | 
			
		||||
 end
 | 
			
		||||
 return ret
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- generate standard "overlay"
 | 
			
		||||
-- constructor for type tt.
 | 
			
		||||
-- if more is defined, generated
 | 
			
		||||
-- new calls more(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, more)
 | 
			
		||||
 local mt, oldnew = { __index = tt }, tt.new
 | 
			
		||||
 tt.new = function(ret)
 | 
			
		||||
  if (not ret) ret = {}
 | 
			
		||||
  if (more) more(ret)
 | 
			
		||||
  if (oldnew) oldnew(ret)
 | 
			
		||||
  setmetatable(ret, mt)
 | 
			
		||||
  return ret
 | 
			
		||||
 end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function _init()
 | 
			
		||||
 pal(1,129,1)
 | 
			
		||||
 the_ship = ship.new()
 | 
			
		||||
 constraints:setup()
 | 
			
		||||
 slomo = 1
 | 
			
		||||
 sloc = 0
 | 
			
		||||
 reroll()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function reroll()
 | 
			
		||||
 frames=0
 | 
			
		||||
 sloc=0
 | 
			
		||||
 the_ship:reroll()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function _update60()
 | 
			
		||||
 if (btnp(4)) reroll()
 | 
			
		||||
 if (btnp(5)) constraints:cycle()
 | 
			
		||||
 if (btnp(3)) slomo <<= 1
 | 
			
		||||
 if (btnp(2)) slomo >>= 1
 | 
			
		||||
 slomo = (slomo < 1) and 1 or (slomo > 8192) and 8192 or slomo
 | 
			
		||||
 sloc += 1
 | 
			
		||||
 if sloc >= slomo then
 | 
			
		||||
  frames += 1
 | 
			
		||||
  the_ship:update()
 | 
			
		||||
  sloc=0
 | 
			
		||||
 end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function _draw()
 | 
			
		||||
 cls(1)
 | 
			
		||||
 constraints:draw()
 | 
			
		||||
 the_ship:draw()
 | 
			
		||||
 print("frames: " .. frames, 4, 64, 7)
 | 
			
		||||
 print("speed: 1/" .. slomo, 8, 70, 7)
 | 
			
		||||
 | 
			
		||||
 print("thrust: ".. actual_t, 4, 80, 7)
 | 
			
		||||
 meter(80, 80, 128, 84, actual_t/the_ship.thrust/2)
 | 
			
		||||
 print("dx: ".. the_ship.dx, 20, 86, 7)
 | 
			
		||||
 meter(80, 86, 128, 90, the_ship.dx/the_ship.maxspd/2)
 | 
			
		||||
 print("x: "..the_ship.x, 24, 92, 7)
 | 
			
		||||
 print("bx: "..gbx, 20, 98, 7)
 | 
			
		||||
 | 
			
		||||
 print("xmin:"..tostr(constraints.xmin), 12, 108, 7)
 | 
			
		||||
 print("xmax:"..tostr(constraints.xmax), 12, 114, 7)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function meter(x0, y0, x1, y1, frac)
 | 
			
		||||
 local c = 11
 | 
			
		||||
 if frac < 0 then
 | 
			
		||||
  frac = -frac
 | 
			
		||||
  c = 8
 | 
			
		||||
 end
 | 
			
		||||
 local range = x1-x0
 | 
			
		||||
 local midpoint = x0 + (range/2)
 | 
			
		||||
 rectfill(x0, y0-1, x0, y1+1, 13)
 | 
			
		||||
 rectfill(midpoint, y0-1, midpoint, y1 + 1, 13)
 | 
			
		||||
 local width = range * frac
 | 
			
		||||
 if (width ~= 0) rectfill(x0, y0, x0 + width, y1, c)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-->8
 | 
			
		||||
-- ship
 | 
			
		||||
 | 
			
		||||
ship = {
 | 
			
		||||
 maxspd=4,
 | 
			
		||||
 thrust=0.25,
 | 
			
		||||
 drag=0.0625,
 | 
			
		||||
 y=32,
 | 
			
		||||
}
 | 
			
		||||
mknew(ship)
 | 
			
		||||
 | 
			
		||||
function ship:reroll()
 | 
			
		||||
 self.x=rnd(128)
 | 
			
		||||
 self.dx=rnd(2*self.maxspd)-self.maxspd
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function ship:draw()
 | 
			
		||||
 if self.x < -7 then
 | 
			
		||||
  spr(2, 0, self.y-7)
 | 
			
		||||
  spr(2, 0, self.y+8)
 | 
			
		||||
 elseif self.x > 127 then
 | 
			
		||||
  spr(2, 120, self.y-7, 1, 1, true)
 | 
			
		||||
  spr(2, 120, self.y+8, 1, 1, true)
 | 
			
		||||
 else
 | 
			
		||||
  spr(1,self.x,self.y)
 | 
			
		||||
 end
 | 
			
		||||
 | 
			
		||||
 --if (self.dx == 0) return
 | 
			
		||||
 local bd, f = brake_dist(self.dx, self.thrust + self.drag)
 | 
			
		||||
 gbx = self.x+bd
 | 
			
		||||
 spr(3, gbx-2,self.y-2)
 | 
			
		||||
 print(tostr(f), gbx-2, self.y - 8, 14)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function calc_velocity(v0, t, vmax, drag)
 | 
			
		||||
 v0 = mid(v0 + t, vmax, -vmax)
 | 
			
		||||
 return v0 - mid(drag, -drag, v0)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function ship:update()
 | 
			
		||||
 local t = btn(0) and -1 or btn(1) and 1 or 0
 | 
			
		||||
 t *= self.thrust
 | 
			
		||||
 t = constraints:constrain(self, t)
 | 
			
		||||
 -- t = constraints:constrain(self, t)
 | 
			
		||||
 -- t = constraints:constrain(self, t)
 | 
			
		||||
 local s = calc_velocity(self.dx, t, self.maxspd, self.drag)
 | 
			
		||||
 | 
			
		||||
 self.x += s
 | 
			
		||||
 self.dx = s
 | 
			
		||||
 actual_t = t
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-->8
 | 
			
		||||
-- constraints
 | 
			
		||||
 | 
			
		||||
constraints = {
 | 
			
		||||
 ymin=20,
 | 
			
		||||
 ymax=52,
 | 
			
		||||
 color=10
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function constraints:constrain(s, want)
 | 
			
		||||
 self.color=10
 | 
			
		||||
 if (not self.xmin) return want
 | 
			
		||||
 | 
			
		||||
 -- bmx: brake max
 | 
			
		||||
 local v1, bmx = calc_velocity(s.dx, want, s.maxspd, s.drag), s.thrust + s.drag
 | 
			
		||||
 local bd, bf = brake_dist(v1, bmx)
 | 
			
		||||
 local bx, txm = s.x + bd + v1, self.xmax
 | 
			
		||||
 if bx < self.xmin then
 | 
			
		||||
  -- predicted brake point left
 | 
			
		||||
  -- of xmin; apply max reverse
 | 
			
		||||
  -- thrust, treat xmin as our
 | 
			
		||||
  -- max target, and handle
 | 
			
		||||
  -- overbraking by coalescing
 | 
			
		||||
  -- with past +xmax case
 | 
			
		||||
  self.color = 9
 | 
			
		||||
  want = s.thrust
 | 
			
		||||
  txm = self.xmin
 | 
			
		||||
  v1 = calc_velocity(s.dx, want, s.maxspd, s.drag)
 | 
			
		||||
  bd, bf = brake_dist(v1, bmx)
 | 
			
		||||
  bx  = bd + s.x + v1
 | 
			
		||||
 end
 | 
			
		||||
 if (bx <= txm) return want
 | 
			
		||||
 self.color = 8
 | 
			
		||||
 local overage = bx - txm
 | 
			
		||||
 want -= overage/max(bf,1)
 | 
			
		||||
 if (want < -s.thrust) want = -s.thrust
 | 
			
		||||
 return want
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function brake_dist(v0, brake_max)
 | 
			
		||||
 local tri_frames = abs(v0\brake_max)
 | 
			
		||||
 local chunks = tri_frames * (tri_frames - 1) >> 1
 | 
			
		||||
 local chunk_zone = chunks * brake_max
 | 
			
		||||
 local overage = abs(v0) - tri_frames * brake_max
 | 
			
		||||
 return (chunk_zone + overage * (tri_frames + 1)) * sgn(v0), (overage > 0) and tri_frames + 1 or tri_frames
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function constraints:cycle()
 | 
			
		||||
 if self.ctype=="bounds" then
 | 
			
		||||
  self.ctype="point"
 | 
			
		||||
 elseif self.ctype=="point" then
 | 
			
		||||
  self.ctype="off"
 | 
			
		||||
 else
 | 
			
		||||
  self.ctype="bounds"
 | 
			
		||||
 end
 | 
			
		||||
 self:setup()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function constraints:setup()
 | 
			
		||||
 if self.ctype=="point" then
 | 
			
		||||
  self.xmin = 64
 | 
			
		||||
  self.xmax = 64
 | 
			
		||||
 elseif self.ctype=="bounds" then
 | 
			
		||||
  self.xmin = 32
 | 
			
		||||
  self.xmax = 96
 | 
			
		||||
 else
 | 
			
		||||
  self.xmin = nil
 | 
			
		||||
  self.xmax = nil
 | 
			
		||||
 end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function constraints:draw()
 | 
			
		||||
 if (not self.xmin) return
 | 
			
		||||
 rect(self.xmin, self.ymin, self.xmax, self.ymax, self.color)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-->8
 | 
			
		||||
-- fx
 | 
			
		||||
 | 
			
		||||
-- todo: spark ring buffer
 | 
			
		||||
 | 
			
		||||
__gfx__
 | 
			
		||||
000000008000000000080000a000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 | 
			
		||||
00000000006666000080000009090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 | 
			
		||||
00000000067777600800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 | 
			
		||||
00000000675555758008888009090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 | 
			
		||||
000000006750007508000000a000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 | 
			
		||||
00000000067777500080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 | 
			
		||||
00000000005555000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 | 
			
		||||
							
								
								
									
										1
									
								
								code-of-conduct.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								code-of-conduct.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
Trans rights.
 | 
			
		||||
@@ -75,7 +75,7 @@ function updategame()
 | 
			
		||||
	edeaths = {}
 | 
			
		||||
	for ip, ps in ipairs(pships) do
 | 
			
		||||
	 for ie, eb in ipairs(ebullets) do
 | 
			
		||||
	  if collides(hurtobx(ps), hurtbox(eb)) then
 | 
			
		||||
	  if collides(hurtbox(ps), hurtbox(eb)) then
 | 
			
		||||
	   if (eb:hitship(ps)) add(edeaths, ie)
 | 
			
		||||
	   if ps:hitbullet(eb) then
 | 
			
		||||
	    add(pdeaths, ip)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2164
									
								
								last_tyrianlike.p8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2164
									
								
								last_tyrianlike.p8
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										61
									
								
								the_parser.p8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								the_parser.p8
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
pico-8 cartridge // http://www.pico-8.com
 | 
			
		||||
version 41
 | 
			
		||||
__lua__
 | 
			
		||||
-- the parser
 | 
			
		||||
 | 
			
		||||
parser = {}
 | 
			
		||||
mknew(parser)
 | 
			
		||||
 | 
			
		||||
-- calls parse_into with a nop
 | 
			
		||||
-- emit function.
 | 
			
		||||
function parser:parse(str)
 | 
			
		||||
 self:parse_into(str, function() end)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- read a file of commands and
 | 
			
		||||
-- execute them, emitting the
 | 
			
		||||
-- results from each call into
 | 
			
		||||
-- `emit` as a table per row.
 | 
			
		||||
--
 | 
			
		||||
-- a "command" is a method on
 | 
			
		||||
-- self. a row alternates
 | 
			
		||||
-- commands with args. when
 | 
			
		||||
-- calling a command, it also
 | 
			
		||||
-- gets a table of previous
 | 
			
		||||
-- results as the first arg.
 | 
			
		||||
-- args are split on ','.
 | 
			
		||||
function parser:parse_into(str, emit)
 | 
			
		||||
 for row in all(split(str, "\n")) do
 | 
			
		||||
  local prev = {}
 | 
			
		||||
  local sectors = split(row, ":")
 | 
			
		||||
  for i=1,#sectors,2 do
 | 
			
		||||
   local x = self[sectors[i]](self, prev, usplit(sectors[i+1]))
 | 
			
		||||
   if (x) add(prev, x)
 | 
			
		||||
  end
 | 
			
		||||
  emit(prev)
 | 
			
		||||
 end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- saves prev[sel] as self.name.
 | 
			
		||||
-- if sel is unspecified, saves
 | 
			
		||||
-- all of prev (as a table).
 | 
			
		||||
function parser:saveas(prev, name, sel)
 | 
			
		||||
 self[name] = sel and prev[sel] or prev
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- returns its args, ignoring
 | 
			
		||||
-- prev. Used to stuff things
 | 
			
		||||
-- into prev. args are packed
 | 
			
		||||
-- if there's multiple.
 | 
			
		||||
function parser:val(_, ...)
 | 
			
		||||
 local ret := pack(...)
 | 
			
		||||
 if (#ret == 1) return ret[1]
 | 
			
		||||
 return ret
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function parser:bind(_, fn, ...)
 | 
			
		||||
 local f = self[fn]
 | 
			
		||||
 return function()
 | 
			
		||||
  f(...)
 | 
			
		||||
 end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										6
									
								
								todo.md
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								todo.md
									
									
									
									
									
								
							@@ -1,8 +1,8 @@
 | 
			
		||||
## 1. refine existing engine (knowing what I know now)
 | 
			
		||||
 | 
			
		||||
- [ ] rewrite event queue as a linked list
 | 
			
		||||
- [ ] rewrite animator stacks as linked lists
 | 
			
		||||
- [ ] rewrite ship/bullet collections as linked lists
 | 
			
		||||
- [x] rewrite event queue as a linked list
 | 
			
		||||
- [x] rewrite animator stacks as linked lists
 | 
			
		||||
- [x] rewrite ship/bullet collections as linked lists
 | 
			
		||||
- [ ] update/draw mode switching system (high-efficiency version)
 | 
			
		||||
- [ ] render ship shields (even for large ships)
 | 
			
		||||
- [ ] duplicate file -- about to split away from Tyrian features
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1888
									
								
								updatedshmup.p8
									
									
									
									
									
								
							
							
						
						
									
										1888
									
								
								updatedshmup.p8
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2184
									
								
								vacuum_gambit.p8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2184
									
								
								vacuum_gambit.p8
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user