Compare commits
	
		
			11 Commits
		
	
	
		
			flotillas
			...
			trigenomet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						c514c61b3a
	
				 | 
					
					
						|||
| 
						
						
							
						
						9be828dd5c
	
				 | 
					
					
						|||
| 
						
						
							
						
						2b51a3472b
	
				 | 
					
					
						|||
| 
						
						
							
						
						95ea70baae
	
				 | 
					
					
						|||
| 
						
						
							
						
						b18b4f885d
	
				 | 
					
					
						|||
| 
						
						
							
						
						2fdb8d1a05
	
				 | 
					
					
						|||
| 
						
						
							
						
						fc1f84fa28
	
				 | 
					
					
						|||
| 
						
						
							
						
						93b63a5831
	
				 | 
					
					
						|||
| 
						
						
							
						
						297e6e4996
	
				 | 
					
					
						|||
| 
						
						
							
						
						9b3120c47b
	
				 | 
					
					
						|||
| 
						
						
							
						
						abee6d1206
	
				 | 
					
					
						
							
								
								
									
										203
									
								
								vacuum_gambit.p8
									
									
									
									
									
								
							
							
						
						
									
										203
									
								
								vacuum_gambit.p8
									
									
									
									
									
								
							@@ -29,23 +29,33 @@ end
 | 
				
			|||||||
-- if tt.init is defined, generated
 | 
					-- if tt.init is defined, generated
 | 
				
			||||||
-- new calls tt.init(ret) after
 | 
					-- new calls tt.init(ret) after
 | 
				
			||||||
-- ret is definitely not nil,
 | 
					-- ret is definitely not nil,
 | 
				
			||||||
-- before calling setmetatable.
 | 
					-- after calling setmetatable.
 | 
				
			||||||
-- use to initialize mutables.
 | 
					-- use to initialize mutables.
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
-- if there was a previous new,
 | 
					-- if there was a previous new,
 | 
				
			||||||
-- it is invoked on the new
 | 
					-- it is invoked before
 | 
				
			||||||
-- object *after* more, because
 | 
					-- setting tt's metatable, so
 | 
				
			||||||
-- this works better with the
 | 
					-- each new will see its
 | 
				
			||||||
-- `more` impls i use.
 | 
					-- inheritance chain.
 | 
				
			||||||
function mknew(tt)
 | 
					function mknew(tt)
 | 
				
			||||||
 local mt,oldnew,more = {__index=tt},tt.new,rawget(tt, "init")
 | 
					 local mt,oldinit,more = {__index=tt},tt.superinit,rawget(tt, "init")
 | 
				
			||||||
 tt.new=function(ret)
 | 
					 tt.new=function(ret)
 | 
				
			||||||
  if(not ret) ret = {}
 | 
					  if(not ret) ret = {}
 | 
				
			||||||
  if(more) more(ret)
 | 
					  ret.new = false
 | 
				
			||||||
  if(oldnew) oldnew(ret)
 | 
					 | 
				
			||||||
  setmetatable(ret, mt)
 | 
					  setmetatable(ret, mt)
 | 
				
			||||||
 | 
					  if(oldinit) oldinit(ret)
 | 
				
			||||||
 | 
					  if (more) more(ret)
 | 
				
			||||||
  return ret
 | 
					  return ret
 | 
				
			||||||
 end
 | 
					 end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if oldinit and more then
 | 
				
			||||||
 | 
					  tt.superinit = function(ret)
 | 
				
			||||||
 | 
					   oldinit(ret)
 | 
				
			||||||
 | 
					   more(ret)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					 elseif more then
 | 
				
			||||||
 | 
					  tt.superinit = more
 | 
				
			||||||
 | 
					 end
 | 
				
			||||||
 return tt
 | 
					 return tt
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -520,8 +530,6 @@ ship_m = mknew{
 | 
				
			|||||||
 shieldpenalty = 0x0.012c, --5s
 | 
					 shieldpenalty = 0x0.012c, --5s
 | 
				
			||||||
 shield_refresh_ready = 0,
 | 
					 shield_refresh_ready = 0,
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 slip = true,  -- most enemies slide
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 xmomentum = 0,
 | 
					 xmomentum = 0,
 | 
				
			||||||
 ymomentum = 0,
 | 
					 ymomentum = 0,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -605,21 +613,13 @@ function ship_m:move()
 | 
				
			|||||||
 self:maybe_shoot(self.main_gun)
 | 
					 self:maybe_shoot(self.main_gun)
 | 
				
			||||||
 if (shoot_spec1 and self.special_guns) self:maybe_shoot(self.special_guns[1])
 | 
					 if (shoot_spec1 and self.special_guns) self:maybe_shoot(self.special_guns[1])
 | 
				
			||||||
 if (shoot_spec2 and self.special_guns) self:maybe_shoot(self.special_guns[2])
 | 
					 if (shoot_spec2 and self.special_guns) self:maybe_shoot(self.special_guns[2])
 | 
				
			||||||
 if (dx ~= 0 or dy ~= 0) spark(self.sparks, self.x + 4*self.size, self.y + 4*self.size, dx*2.5, dy*2.5, self.sparkodds)
 | 
					 spark(self.sparks, self.x + 4*self.size, self.y + 4*self.size, dx*2.5, dy*2.5, self.sparkodds)
 | 
				
			||||||
 self.xmomentum = self:calc_velocity(self.xmomentum, dx)
 | 
					 self.xmomentum = self:calc_velocity(self.xmomentum, dx)
 | 
				
			||||||
 self.ymomentum = self:calc_velocity(self.ymomentum, dy)
 | 
					 self.ymomentum = self:calc_velocity(self.ymomentum, dy)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 self.x += self.xmomentum
 | 
					 self.x += self.xmomentum
 | 
				
			||||||
 self.y += self.ymomentum
 | 
					 self.y += self.ymomentum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 -- "scrolling" behavior
 | 
					 | 
				
			||||||
 if self.slip then
 | 
					 | 
				
			||||||
  self.y += scrollrate
 | 
					 | 
				
			||||||
  if self.y >= 128 then
 | 
					 | 
				
			||||||
   self:die()
 | 
					 | 
				
			||||||
   return true
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 end
 | 
					 | 
				
			||||||
 return false
 | 
					 return false
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -719,6 +719,10 @@ bullet_base = mknew{ }
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
gun_base = mknew{ 
 | 
					gun_base = mknew{ 
 | 
				
			||||||
 shoot_ready = -32768,
 | 
					 shoot_ready = -32768,
 | 
				
			||||||
 | 
					 new_clip = -32768,
 | 
				
			||||||
 | 
					 clip_size = false,
 | 
				
			||||||
 | 
					 clip_remain = 0,
 | 
				
			||||||
 | 
					 clip_interval = 0x0.80,
 | 
				
			||||||
 icon = 20,
 | 
					 icon = 20,
 | 
				
			||||||
 ammobonus = 1,
 | 
					 ammobonus = 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -726,6 +730,27 @@ gun_base = mknew{
 | 
				
			|||||||
 -- cooldown reduction from
 | 
					 -- cooldown reduction from
 | 
				
			||||||
 -- upgrades, not yet applied
 | 
					 -- upgrades, not yet applied
 | 
				
			||||||
 cd_remainder = 0,
 | 
					 cd_remainder = 0,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 veloc = 1,
 | 
				
			||||||
 | 
					 aim = 0.75, -- down; 0.25, or -0.75, is up
 | 
				
			||||||
 | 
					 shot_idx = 0,
 | 
				
			||||||
 | 
					 -- shots: list<list<[3]num>>
 | 
				
			||||||
 | 
					 --  describing a cycling
 | 
				
			||||||
 | 
					 --  firing pattern. shot_idx
 | 
				
			||||||
 | 
					 --  tracks offset into pattern.
 | 
				
			||||||
 | 
					 -- each nested list: a burst
 | 
				
			||||||
 | 
					 --  of shots to fire; takes
 | 
				
			||||||
 | 
					 --  1 ammo; sequential
 | 
				
			||||||
 | 
					 -- each shot: angle (turns,
 | 
				
			||||||
 | 
					 --  relative to `aim`),
 | 
				
			||||||
 | 
					 --  firing x-offset, velocity;
 | 
				
			||||||
 | 
					 --   if x-offset is nil, use 0;
 | 
				
			||||||
 | 
					 --   if velocity is nil, use
 | 
				
			||||||
 | 
					 --    self.veloc instead
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 init = function(self)
 | 
				
			||||||
 | 
					  if (not self.shots) self.shots = {{{0}}}
 | 
				
			||||||
 | 
					 end
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- gun_base subtypes are
 | 
					-- gun_base subtypes are
 | 
				
			||||||
@@ -750,12 +775,6 @@ function gun_base:peel()
 | 
				
			|||||||
 self.munition = mknew(self.munition.new())
 | 
					 self.munition = mknew(self.munition.new())
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- default firing behavior:
 | 
					 | 
				
			||||||
-- single shot
 | 
					 | 
				
			||||||
function gun_base:actually_shoot(x, y)
 | 
					 | 
				
			||||||
 self.munition.new{}:spawn_at(x, y)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- upgrade 
 | 
					-- upgrade 
 | 
				
			||||||
function gun_base:small_upgrade_opts()
 | 
					function gun_base:small_upgrade_opts()
 | 
				
			||||||
 local ret = {
 | 
					 local ret = {
 | 
				
			||||||
@@ -849,15 +868,56 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function gun_base:shoot(x, y)
 | 
					function gun_base:shoot(x, y)
 | 
				
			||||||
 if (gframe < self.shoot_ready) return false
 | 
					 if (gframe < self.shoot_ready) return false
 | 
				
			||||||
 | 
					 local csz,crm = self.clip_size, self.clip_remain
 | 
				
			||||||
 | 
					 if csz then
 | 
				
			||||||
 | 
					  if crm < csz and gframe >= self.new_clip then
 | 
				
			||||||
 | 
					   self.clip_remain = csz
 | 
				
			||||||
 | 
					   self.new_clip = gframe + self.clip_interval
 | 
				
			||||||
 | 
					  elseif crm == 0 then
 | 
				
			||||||
 | 
					   return false
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					 end
 | 
				
			||||||
 if self.ammo then
 | 
					 if self.ammo then
 | 
				
			||||||
  if (self.ammo <= 0) return false
 | 
					  if (self.ammo <= 0) return false
 | 
				
			||||||
  self.ammo -= 1
 | 
					  self.ammo -= 1
 | 
				
			||||||
 end
 | 
					 end
 | 
				
			||||||
 | 
					 if csz then
 | 
				
			||||||
 | 
					  self.clip_remain -= 1
 | 
				
			||||||
 | 
					 end
 | 
				
			||||||
 self.shoot_ready = gframe + self.cooldown
 | 
					 self.shoot_ready = gframe + self.cooldown
 | 
				
			||||||
 self:actually_shoot(x, y)
 | 
					 self:actually_shoot(x, y)
 | 
				
			||||||
 return true
 | 
					 return true
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function gun_base:actually_shoot(x, y)
 | 
				
			||||||
 | 
					 local shots,veloc,aim,munition = self.shots,self.veloc,self.aim,self.munition
 | 
				
			||||||
 | 
					 local idx = self.shot_idx % #shots + 1
 | 
				
			||||||
 | 
					 self.shot_idx = idx
 | 
				
			||||||
 | 
					 shots = shots[idx]
 | 
				
			||||||
 | 
					 for s in all(shots) do
 | 
				
			||||||
 | 
					  local a,xo,v = unpack(s)
 | 
				
			||||||
 | 
					  v = v or veloc
 | 
				
			||||||
 | 
					  xo = xo or 0
 | 
				
			||||||
 | 
					  -- reverse x-offset for negative base angle
 | 
				
			||||||
 | 
					  if (aim < 0) xo = -xo
 | 
				
			||||||
 | 
					  a += aim
 | 
				
			||||||
 | 
					  -- todo: switch munition
 | 
				
			||||||
 | 
					  --  depending on angle
 | 
				
			||||||
 | 
					  --  (allows for non-round
 | 
				
			||||||
 | 
					  --   sprites and hitboxes on
 | 
				
			||||||
 | 
					  --   shots from guns with
 | 
				
			||||||
 | 
					  --   widely varying angles)
 | 
				
			||||||
 | 
					  local m = munition.new{}
 | 
				
			||||||
 | 
					  -- todo: automatically make
 | 
				
			||||||
 | 
					  -- high velocity shots do
 | 
				
			||||||
 | 
					  -- multiple collision checks
 | 
				
			||||||
 | 
					  m.dy = sin(a) * veloc
 | 
				
			||||||
 | 
					  m.dx = cos(a) * veloc
 | 
				
			||||||
 | 
					  m:spawn_at(x+(xo or 0), y)
 | 
				
			||||||
 | 
					 end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-->8
 | 
					-->8
 | 
				
			||||||
-- bullets and guns
 | 
					-- bullets and guns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -876,8 +936,6 @@ zap_e = mknew(bullet_base.new{
 | 
				
			|||||||
 y_off = 8,
 | 
					 y_off = 8,
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 damage = 1,
 | 
					 damage = 1,
 | 
				
			||||||
 dx = 0,  -- px/frame
 | 
					 | 
				
			||||||
 dy = 4,
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 hitship = const_fxn(true),
 | 
					 hitship = const_fxn(true),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -886,19 +944,21 @@ zap_e = mknew(bullet_base.new{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
zap_p = mknew(zap_e.new{
 | 
					zap_p = mknew(zap_e.new{
 | 
				
			||||||
 sprite = 8,
 | 
					 sprite = 8,
 | 
				
			||||||
 dy = -8,
 | 
					 | 
				
			||||||
 y_off = 0,
 | 
					 y_off = 0,
 | 
				
			||||||
 category = player_blt_cat,
 | 
					 category = player_blt_cat,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
zap_gun_e = mknew(gun_base.new{
 | 
					zap_gun_e = mknew(gun_base.new{
 | 
				
			||||||
 cooldown = 0x0.0020, -- frames between shots
 | 
					 cooldown = 0x0.0020, -- frames between shots
 | 
				
			||||||
 | 
					 veloc = 4,
 | 
				
			||||||
 munition = zap_e,
 | 
					 munition = zap_e,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
zap_gun_p = mknew(zap_gun_e.new{
 | 
					zap_gun_p = mknew(zap_gun_e.new{
 | 
				
			||||||
 icon = 19,
 | 
					 icon = 19,
 | 
				
			||||||
 munition = zap_p,
 | 
					 munition = zap_p,
 | 
				
			||||||
 | 
					 veloc = 8,
 | 
				
			||||||
 | 
					 aim = 0.25,
 | 
				
			||||||
 hdr = "mAIN gUN",
 | 
					 hdr = "mAIN gUN",
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -955,6 +1015,7 @@ blast = mknew(bullet_base.new{
 | 
				
			|||||||
blast_gun = mknew(gun_base.new{
 | 
					blast_gun = mknew(gun_base.new{
 | 
				
			||||||
 icon = 13,
 | 
					 icon = 13,
 | 
				
			||||||
 cooldown = 0x0.0078, -- 120 frames between shots
 | 
					 cooldown = 0x0.0078, -- 120 frames between shots
 | 
				
			||||||
 | 
					 aim = -0.75,
 | 
				
			||||||
 ammo = 5,
 | 
					 ammo = 5,
 | 
				
			||||||
 maxammo = 5,
 | 
					 maxammo = 5,
 | 
				
			||||||
 munition = blast,
 | 
					 munition = blast,
 | 
				
			||||||
@@ -987,8 +1048,6 @@ protron_e = mknew(bullet_base.new{
 | 
				
			|||||||
 y_off = 4,
 | 
					 y_off = 4,
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 damage = 1,
 | 
					 damage = 1,
 | 
				
			||||||
 dym = 0.5, -- gun sets dy;
 | 
					 | 
				
			||||||
             -- this is mult
 | 
					 | 
				
			||||||
 category = enemy_blt_cat,
 | 
					 category = enemy_blt_cat,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1004,34 +1063,17 @@ protron_gun_e = mknew(gun_base.new{
 | 
				
			|||||||
 cooldown = 0x0.0040, -- frames between shots
 | 
					 cooldown = 0x0.0040, -- frames between shots
 | 
				
			||||||
 ammo = nil,
 | 
					 ammo = nil,
 | 
				
			||||||
 maxammo = nil,
 | 
					 maxammo = nil,
 | 
				
			||||||
 munition = protron_e
 | 
					 munition = protron_e,
 | 
				
			||||||
 | 
					 veloc = 2,
 | 
				
			||||||
 | 
					 shots = {{{-0.25}, {-0.165}, {-0.0825}, {0}, {0.0825}, {0.165}, {0.25}}}
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function protron_gun_e:actually_shoot(x, y)
 | 
					 | 
				
			||||||
 local m = self.munition.dym
 | 
					 | 
				
			||||||
 for i=1,3 do
 | 
					 | 
				
			||||||
  local b = self.munition.new{
 | 
					 | 
				
			||||||
   dx = i*m,
 | 
					 | 
				
			||||||
   dy = (4-i)*m,
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  b:spawn_at(x,y)
 | 
					 | 
				
			||||||
  local b2 = self.munition.new{
 | 
					 | 
				
			||||||
   dx = -i*m,
 | 
					 | 
				
			||||||
   dy = (4-i)*m,
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  b2:spawn_at(x,y)
 | 
					 | 
				
			||||||
 end
 | 
					 | 
				
			||||||
 local bup = self.munition.new{
 | 
					 | 
				
			||||||
  dx=0,
 | 
					 | 
				
			||||||
  dy=4*m,
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 bup:spawn_at(x,y)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
protron_gun_p = mknew(protron_gun_e.new{
 | 
					protron_gun_p = mknew(protron_gun_e.new{
 | 
				
			||||||
 munition = protron_p,
 | 
					 munition = protron_p,
 | 
				
			||||||
 maxammo = 20,
 | 
					 maxammo = 20,
 | 
				
			||||||
 cooldown = 0x0.0018,
 | 
					 cooldown = 0x0.0018,
 | 
				
			||||||
 | 
					 veloc = 4,
 | 
				
			||||||
 | 
					 aim = -0.75,
 | 
				
			||||||
 hdr = "pROTRON",
 | 
					 hdr = "pROTRON",
 | 
				
			||||||
 body = [[---------GUN
 | 
					 body = [[---------GUN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1060,41 +1102,37 @@ vulcan_e = mknew(bullet_base.new{
 | 
				
			|||||||
 y_off = 0,
 | 
					 y_off = 0,
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 damage = 0.5,
 | 
					 damage = 0.5,
 | 
				
			||||||
 -- dx from gun
 | 
					 | 
				
			||||||
 dy = 2,
 | 
					 | 
				
			||||||
 category=enemy_blt_cat
 | 
					 category=enemy_blt_cat
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vulcan_p = mknew(vulcan_e.new{
 | 
					vulcan_p = mknew(vulcan_e.new{
 | 
				
			||||||
 sprite=22,
 | 
					 sprite=22,
 | 
				
			||||||
 y_off = 4,
 | 
					 y_off = 4,
 | 
				
			||||||
 dy = -4,
 | 
					 | 
				
			||||||
 category=player_blt_cat
 | 
					 category=player_blt_cat
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vulcan_gun_e = mknew(gun_base.new{
 | 
					vulcan_gun_e = mknew(gun_base.new{
 | 
				
			||||||
 icon = 37,
 | 
					 icon = 37,
 | 
				
			||||||
 enemy = false,
 | 
					 | 
				
			||||||
 cooldown = 0x0.0003, -- frames between shots
 | 
					 cooldown = 0x0.0003, -- frames between shots
 | 
				
			||||||
 ammo = nil,
 | 
					 ammo = nil,
 | 
				
			||||||
 maxammo = nil,
 | 
					 maxammo = nil,
 | 
				
			||||||
 munition=vulcan_e,
 | 
					 munition=vulcan_e,
 | 
				
			||||||
 dxs = {0.35, -0.35, -0.7, 0.7, 0.35, -0.35},
 | 
					 veloc = 2,
 | 
				
			||||||
 xoffs = {1, 0, -1, 1, 0, -1},
 | 
					 shots = {{{0.02, 2}}, {{-0.02,0}}, {{-0.03, -2}}, {{0.03, 2}}, {{0.02, 0}}, {{-0.02, -2}}}
 | 
				
			||||||
 dxidx = 1,
 | 
					})
 | 
				
			||||||
 actually_shoot = function(self, x, y)
 | 
					
 | 
				
			||||||
  local b = self.munition.new{
 | 
					machine_gun_e = mknew(vulcan_gun_e.new{
 | 
				
			||||||
   dx = self.dxs[self.dxidx],
 | 
					 icon = 38,
 | 
				
			||||||
  }
 | 
					 clip_size = 12,
 | 
				
			||||||
  b:spawn_at(self.xoffs[self.dxidx]+x,y)
 | 
					 clip_interval = 0x0.005a,
 | 
				
			||||||
  self.dxidx += 1
 | 
					 shots = {{{0, 2}}, {{0, -2}}}
 | 
				
			||||||
  if (self.dxidx > #self.dxs) self.dxidx = 1
 | 
					 | 
				
			||||||
 end
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vulcan_gun_p = mknew(vulcan_gun_e.new{
 | 
					vulcan_gun_p = mknew(vulcan_gun_e.new{
 | 
				
			||||||
 munition=vulcan_p,
 | 
					 munition=vulcan_p,
 | 
				
			||||||
 maxammo = 100,
 | 
					 maxammo = 100,
 | 
				
			||||||
 | 
					 aim=-0.75,
 | 
				
			||||||
 | 
					 veloc=4,
 | 
				
			||||||
 hdr = "vULCAN",
 | 
					 hdr = "vULCAN",
 | 
				
			||||||
 body = [[---------GUN
 | 
					 body = [[---------GUN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1156,7 +1194,6 @@ player = mknew(ship_m.new{
 | 
				
			|||||||
 thrust = 0.1875, -- momentum added from button
 | 
					 thrust = 0.1875, -- momentum added from button
 | 
				
			||||||
 ymin = 0, ymax = 120, -- stay on screen
 | 
					 ymin = 0, ymax = 120, -- stay on screen
 | 
				
			||||||
 drag = 0.0625, -- momentum lost per frame
 | 
					 drag = 0.0625, -- momentum lost per frame
 | 
				
			||||||
 slip = false, -- does not slide down screen
 | 
					 | 
				
			||||||
 act = function(self)  -- fetch buttons
 | 
					 act = function(self)  -- fetch buttons
 | 
				
			||||||
  local b,th = btn(),self.thrust
 | 
					  local b,th = btn(),self.thrust
 | 
				
			||||||
  local blr = b&0x3
 | 
					  local blr = b&0x3
 | 
				
			||||||
@@ -1312,7 +1349,6 @@ chasey = mknew(ship_m.new{
 | 
				
			|||||||
 maxspd = 2,
 | 
					 maxspd = 2,
 | 
				
			||||||
 thrust = 0.2,
 | 
					 thrust = 0.2,
 | 
				
			||||||
 drag = 0.075,
 | 
					 drag = 0.075,
 | 
				
			||||||
 slip = true,
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 init = function(ship)
 | 
					 init = function(ship)
 | 
				
			||||||
  ship.main_gun=ship.main_gun or zap_gun_e.new{}
 | 
					  ship.main_gun=ship.main_gun or zap_gun_e.new{}
 | 
				
			||||||
@@ -1340,7 +1376,6 @@ xl_chasey=mknew(chasey.new{
 | 
				
			|||||||
 hp = 19.5,
 | 
					 hp = 19.5,
 | 
				
			||||||
 shield = 5,
 | 
					 shield = 5,
 | 
				
			||||||
 boss = true,
 | 
					 boss = true,
 | 
				
			||||||
 slip = false,
 | 
					 | 
				
			||||||
 act = function(self)
 | 
					 act = function(self)
 | 
				
			||||||
  local dx,dy,shoot_spec,shoot_main = chasey.act(self)
 | 
					  local dx,dy,shoot_spec,shoot_main = chasey.act(self)
 | 
				
			||||||
  if (self.y < 4) dy=self.thrust
 | 
					  if (self.y < 4) dy=self.thrust
 | 
				
			||||||
@@ -1351,9 +1386,6 @@ xl_chasey=mknew(chasey.new{
 | 
				
			|||||||
  sspr(40, 0, 8, 8, self.x, self.y, 16, 16)
 | 
					  sspr(40, 0, 8, 8, self.x, self.y, 16, 16)
 | 
				
			||||||
  pal()
 | 
					  pal()
 | 
				
			||||||
 end,
 | 
					 end,
 | 
				
			||||||
 init = function(ship)
 | 
					 | 
				
			||||||
  ship.main_gun=ship.main_gun or zap_gun_e.new{}
 | 
					 | 
				
			||||||
 end,
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- flotilla ships
 | 
					-- flotilla ships
 | 
				
			||||||
@@ -1365,16 +1397,20 @@ ship_f = mknew(ship_m.new{
 | 
				
			|||||||
 -- no sparks
 | 
					 -- no sparks
 | 
				
			||||||
 hp = 0.5,
 | 
					 hp = 0.5,
 | 
				
			||||||
 xp = 0x0.0001,
 | 
					 xp = 0x0.0001,
 | 
				
			||||||
 | 
					 fire_off_x = 4,
 | 
				
			||||||
 | 
					 fire_off_y = 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 maxspd = 3,
 | 
					 maxspd = 3,
 | 
				
			||||||
 thrust = 0.1,
 | 
					 thrust = 0.1,
 | 
				
			||||||
 drag = 0.05,
 | 
					 drag = 0.05,
 | 
				
			||||||
 slip = false,
 | 
					 | 
				
			||||||
 act = function(self)
 | 
					 act = function(self)
 | 
				
			||||||
  local wx,wy=self.want_x,self.want_y
 | 
					  local wx,wy=self.want_x,self.want_y
 | 
				
			||||||
  self.xmin,self.xmax,self.ymin,self.ymax = wx,wx,wy,wy
 | 
					  self.xmin,self.xmax,self.ymin,self.ymax = wx,wx,wy,wy
 | 
				
			||||||
  return 0,0,false,false
 | 
					  return 0,0,false,false
 | 
				
			||||||
 end,
 | 
					 end,
 | 
				
			||||||
 | 
					 init = function(self)
 | 
				
			||||||
 | 
					  if (self.gun_proto) self.main_gun = self.gun_proto.new()
 | 
				
			||||||
 | 
					 end
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ship_mook = mknew(ship_f.new{
 | 
					ship_mook = mknew(ship_f.new{
 | 
				
			||||||
@@ -1388,12 +1424,14 @@ ship_defender = mknew(ship_f.new{
 | 
				
			|||||||
ship_turret = mknew(ship_f.new{
 | 
					ship_turret = mknew(ship_f.new{
 | 
				
			||||||
 sprite=106,
 | 
					 sprite=106,
 | 
				
			||||||
 xp = 0x0.0002,
 | 
					 xp = 0x0.0002,
 | 
				
			||||||
 | 
					 gun_proto = machine_gun_e,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
ship_skirmisher = mknew(ship_f.new{
 | 
					ship_skirmisher = mknew(ship_f.new{
 | 
				
			||||||
 sprite=107,
 | 
					 sprite=107,
 | 
				
			||||||
 xp = 0x0.0004,
 | 
					 xp = 0x0.0004,
 | 
				
			||||||
 spark = smokespark,
 | 
					 sparks = smokespark,
 | 
				
			||||||
 sparkodds = 4,
 | 
					 sparkodds = 3,
 | 
				
			||||||
 | 
					 fire_off_y = 7,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function rnd_spawn_loc()
 | 
					function rnd_spawn_loc()
 | 
				
			||||||
@@ -1695,15 +1733,15 @@ function spark_particle:draw()
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function spark(sprs, x, y, dx, dy, odds, fg)
 | 
					function spark(sprs, x, y, dx, dy, odds, fg)
 | 
				
			||||||
 if (sprs==nil or flr(rnd(odds)) ~= 0) return
 | 
					 if (sprs==nil or flr(rnd(odds) or (abs(dx) < 0.5 and abs(dy))) ~= 0) return
 | 
				
			||||||
 local target = fg and intangibles_fg or intangibles_bg
 | 
					 local target = fg and intangibles_fg or intangibles_bg
 | 
				
			||||||
 target:push_back(spark_particle.new{
 | 
					 target:push_back(spark_particle.new{
 | 
				
			||||||
  x = x + rnd(4) - 2,
 | 
					  x = x + rnd(4) - 2,
 | 
				
			||||||
  y = y + rnd(4) - 2,
 | 
					  y = y + rnd(4) - 2,
 | 
				
			||||||
  sprs = sprs,
 | 
					  sprs = sprs,
 | 
				
			||||||
  sidx = 1,
 | 
					  sidx = 1,
 | 
				
			||||||
  dx = dx + rnd(2) - 1,
 | 
					  dx = dx * rnd(2),
 | 
				
			||||||
  dy = dy + rnd(2) - 1,
 | 
					  dy = dy * rnd(2),
 | 
				
			||||||
 })
 | 
					 })
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
-->8
 | 
					-->8
 | 
				
			||||||
@@ -1809,6 +1847,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- add a new gun
 | 
					-- add a new gun
 | 
				
			||||||
function spec_gun_opts()
 | 
					function spec_gun_opts()
 | 
				
			||||||
 | 
					 -- todo: avoid duplicates
 | 
				
			||||||
 return pick(spec_gunt, 2)
 | 
					 return pick(spec_gunt, 2)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1830,7 +1869,6 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- ordinary upgrades
 | 
					-- ordinary upgrades
 | 
				
			||||||
function small_opts()
 | 
					function small_opts()
 | 
				
			||||||
 -- todo: include gun opts
 | 
					 | 
				
			||||||
 if(not primary_ship.special_guns) return pick(primary_ship:small_upgrade_opts(), 2)
 | 
					 if(not primary_ship.special_guns) return pick(primary_ship:small_upgrade_opts(), 2)
 | 
				
			||||||
 local opts = {rnd(primary_ship:small_upgrade_opts())}
 | 
					 local opts = {rnd(primary_ship:small_upgrade_opts())}
 | 
				
			||||||
 for g in all(primary_ship.special_guns) do
 | 
					 for g in all(primary_ship.special_guns) do
 | 
				
			||||||
@@ -1911,7 +1949,10 @@ function rearm_mode:shuffle()
 | 
				
			|||||||
 -- until the upgrade deck
 | 
					 -- until the upgrade deck
 | 
				
			||||||
 -- is a thing that exists
 | 
					 -- is a thing that exists
 | 
				
			||||||
 local lev = primary_ship.level + 1
 | 
					 local lev = primary_ship.level + 1
 | 
				
			||||||
 if lev == 4 or lev == 12 then
 | 
					
 | 
				
			||||||
 | 
					 -- for testing: more guns really early
 | 
				
			||||||
 | 
					 -- if lev == 4 or lev == 12 then
 | 
				
			||||||
 | 
					 if lev == 2 or lev == 3 then
 | 
				
			||||||
  self.options = spec_gun_opts()
 | 
					  self.options = spec_gun_opts()
 | 
				
			||||||
 elseif lev % 4 == 0 then
 | 
					 elseif lev % 4 == 0 then
 | 
				
			||||||
  self.options = big_opts()
 | 
					  self.options = big_opts()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user