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
This commit is contained in:
parent
26c3a5b91e
commit
eed7b6af87
@ -126,8 +126,7 @@ end
|
||||
function _init()
|
||||
mode = game_mode
|
||||
init_blip_pals()
|
||||
wipe_level()
|
||||
primary_ship.main_gun = zap_gun_p.new() -- redundant?
|
||||
wipe_game() -- redundant?
|
||||
load_level(example_level_csv)
|
||||
game_state = game
|
||||
pal(2,129)
|
||||
@ -157,7 +156,7 @@ function init_hpcols()
|
||||
hpcols = hpcols_lut[min(primary_ship.maxhp,6)]
|
||||
end
|
||||
|
||||
function wipe_level()
|
||||
function wipe_game()
|
||||
xpwhoosh = nil
|
||||
primary_ship = player.new()
|
||||
init_hpcols()
|
||||
@ -170,6 +169,8 @@ function wipe_level()
|
||||
intangibles_bg = linked_list.new()
|
||||
events = linked_list.new()
|
||||
new_events = linked_list.new()
|
||||
primary_ship.main_gun = zap_gun_p.new()
|
||||
primary_ship.main_gun:peel()
|
||||
end
|
||||
|
||||
function _update60()
|
||||
@ -689,6 +690,7 @@ gun_base = mknew{
|
||||
-- themselves to the player
|
||||
function gun_base:action()
|
||||
local item = self.new()
|
||||
item:peel()
|
||||
item.ammo = item.maxammo
|
||||
if not primary_ship.special_guns then
|
||||
primary_ship.special_guns = {item}
|
||||
@ -697,6 +699,19 @@ function gun_base:action()
|
||||
end
|
||||
end
|
||||
|
||||
-- make shot type unique so
|
||||
-- stat modifications do not
|
||||
-- damage base data
|
||||
function gun_base:peel()
|
||||
self.munition = self.munition.new()
|
||||
end
|
||||
|
||||
-- default firing behavior:
|
||||
-- single shot
|
||||
function gun_base:actually_shoot(x, y)
|
||||
self.munition.new{}:spawn_at(x, y)
|
||||
end
|
||||
|
||||
function bullet_base:hitship(_)
|
||||
self:die()
|
||||
return true
|
||||
@ -720,14 +735,6 @@ function bullet_base:draw()
|
||||
spr(self.sprite, self.x, self.y, self.width, self.height)
|
||||
end
|
||||
|
||||
-- An `actually_shoot` factory
|
||||
-- for trivial guns
|
||||
function spawn_one(t)
|
||||
return function(gun, x, y)
|
||||
t.new{}:spawn_at(x, y)
|
||||
end
|
||||
end
|
||||
|
||||
function bullet_base:spawn_at(x, y)
|
||||
self.x = x - self.x_off
|
||||
self.y = y - self.y_off
|
||||
@ -780,11 +787,11 @@ zap_p = mknew(zap_e.new{
|
||||
|
||||
zap_gun_e = mknew(gun_base.new{
|
||||
cooldown = 0x0.0020, -- frames between shots
|
||||
actually_shoot = spawn_one(zap_e),
|
||||
munition = zap_e,
|
||||
})
|
||||
|
||||
zap_gun_p = mknew(zap_gun_e.new{
|
||||
actually_shoot = spawn_one(zap_p),
|
||||
munition = zap_p,
|
||||
hdr = "mAIN gUN",
|
||||
})
|
||||
|
||||
@ -843,7 +850,7 @@ blast_gun = mknew(gun_base.new{
|
||||
cooldown = 0x0.0078, -- 120 frames between shots
|
||||
ammo = 5,
|
||||
maxammo = 5,
|
||||
actually_shoot = spawn_one(blast),
|
||||
munition = blast,
|
||||
hdr = "bLASTER",
|
||||
body= [[plasma orb
|
||||
cuts through
|
||||
|
Loading…
x
Reference in New Issue
Block a user