diff options
| -rw-r--r-- | enemies.lua | 80 | ||||
| -rw-r--r-- | particles.lua | 12 | ||||
| -rw-r--r-- | pickups.lua | 1 | ||||
| -rw-r--r-- | waves.lua | 81 |
4 files changed, 130 insertions, 44 deletions
diff --git a/enemies.lua b/enemies.lua index 73e2f48..98e838f 100644 --- a/enemies.lua +++ b/enemies.lua @@ -38,7 +38,7 @@ function addbasicenemy(x, y, sprite, health, speed) function enemy.collide(object) if enemy.x+4 >= object.x and enemy.x+4 <= object.x+object.w and enemy.y+4 >= object.y and enemy.y+4 <= object.y+object.h and object.inv < 0 then object:shot() - explosion(enemy.x, enemy.y) + explosion(enemy.x+4, enemy.y+4) enemy.health -= 2 end end @@ -147,4 +147,82 @@ function addwallshooter(x, shootup, health, speed) end add(enemies, enemy) +end + +--Big ol fella that shoots CIRCLES of BULLETS!!!!!! + +function addballshooter(x, y, health, speed) + local enemy = {} + enemy.x = x + enemy.y = y + enemy.offset = rnd() + enemy.w = 8*4 + enemy.h = 8*2 + enemy.inv = -1 + enemy.health = health + enemy.shootcooldown = 0 + enemy.speed = speed + + function enemy.draw(enemy) + if enemy.inv < 0 or ceil(enemy.inv*10%2) == 1 then + local sprite = 55 + if enemy.health < 7 then sprite = 39 end + spr(sprite, enemy.x, enemy.y, 4, 1, false, true) + spr(sprite, enemy.x, enemy.y+8, 4, 1) + end + end + + function enemy.shot(enemy) + --explode + explosion(enemy.x+rnd(16), enemy.y+rnd(8)) + --and reduce health + enemy.health -= 1 + enemy.inv = 0.5 + sfx(4) + end + + function enemy.collide(object) + if enemy.x+4 >= object.x and enemy.x+4 <= object.x+object.w and enemy.y+4 >= object.y and enemy.y+4 <= object.y+object.h and object.inv < 0 then + object:shot() + explosion(enemy.x+4, enemy.y+4, 8*4, 8*2) + enemy.health -= 3 + end + end + + function enemy.update() + enemy.x -= speed + enemy.shootcooldown -= 1/60 + enemy.inv -= 1/60 + foreach(players, enemy.collide) + if enemy.shootcooldown < 0 then + enemy.shootcooldown = 2 + for i = 1, 48, 1 do + if sin(i/48) < 0.3 and sin((i+currentwavetime)/8) < 0.4 then + addbullet(enemy.x+4, enemy.y+4, sin(i/48)/2, cos(i/48)/2, true, 3) + end + end + end + if enemy.x < -32 then + del(enemies, enemy) + end + if enemy.health < 8 then + addcircle(enemy.x+20+rnd(8), enemy.y+6+rnd(8), -0.5, -0.2, rnd(8), rnd(1.5)+1, 5, 0) + end + if enemy.health <= 0 then + for i = 1, 24, 1 do + addcircle(enemy.x+rnd(8), enemy.y+rnd(8), rnd(4)-2, -rnd(2)-1, 1, 2, rnd({3, 11, 9}), -0.1) + end + if rnd(100) > 80 then + addpickup(enemy.x, enemy.y) + end + if shake < 3 then + shake = 12 + end + sfx(2) + explosion(enemy.x+4, enemy.y+4, 8*4, 8*2) + del(enemies, enemy) + end + end + + add(enemies, enemy) end
\ No newline at end of file diff --git a/particles.lua b/particles.lua index 38b64ca..8f4e92c 100644 --- a/particles.lua +++ b/particles.lua @@ -28,11 +28,13 @@ function addcircle(x, y, velx, vely, r, time, color, grav) add(obj, circle) end -function explosion(x,y) - for i = 1, 4, 1 do - addcircle(x+rnd(8), y+rnd(8), -0.5, 0, rnd(8), rnd(1.5)+1, 5, 0) +function explosion(x,y, w, h) + w = w or 8 + h = h or 8 + for i = 1, w/2, 1 do + addcircle(x+rnd(w), y+rnd(h), -0.5, 0, rnd(8), rnd(1.5)+1, 5, 0) end - for i = 1, 4, 1 do - addcircle(x+rnd(8), y+rnd(8), -0.4, 0, rnd(8), rnd(1)+0.5, 9, 0) + for i = 1, w/2, 1 do + addcircle(x+rnd(w), y+rnd(h), -0.4, 0, rnd(8), rnd(1)+0.5, 9, 0) end end
\ No newline at end of file diff --git a/pickups.lua b/pickups.lua index 853ddeb..b735e14 100644 --- a/pickups.lua +++ b/pickups.lua @@ -50,6 +50,7 @@ function addpickup(x, y, type) elseif pickup.type == "3shoot" then player.shoot3 = true end + sfx(6) end function pickup.draw(pickup) @@ -1,5 +1,5 @@ wave = {} --store wave functions here -currentwave = 1 --THIS IS THE CURRENT WAVE +currentwave = 1 --THIS IS THE CURRENT WAVE, SHOLD BE 1 UNLESS TESTING SOMETHING currentwavetime = 0 delaytimer = 0 everysecondtimer = 0 @@ -12,10 +12,7 @@ wave[1] = { everysecond = function() end, conditions = function() - if #enemies < 1 then - return true - else - return false + if #enemies < 1 then return true else return false end end } @@ -30,10 +27,7 @@ wave[2] = { everysecond = function() end, conditions = function() - if #enemies < 1 then - return true - else - return false + if #enemies < 2 then return true else return false end end } @@ -49,10 +43,7 @@ wave[3] = { everysecond = function() end, conditions = function() - if #enemies < 1 then - return true - else - return false + if #enemies < 5 then return true else return false end end } @@ -60,56 +51,70 @@ wave[3] = { wave[4] = { delay = 0, start = function() - addwallshooter(130, true, 10, 0.7) + addwallshooter(140, true, 10, 0.4) + addbasicenemy(128, 30, rnd(basicenemysprites), 1, 0.5) + addbasicenemy(155, 60, rnd(basicenemysprites), 1, 0.4) + addbasicenemy(128, 90, rnd(basicenemysprites), 1, 0.5) end, everysecond = function() end, conditions = function() - if #enemies < 1 then - return true - else - return false + if #enemies < 2 then return true else return false end end } -wave[4] = { +wave[5] = { delay = 0, start = function() - addwallshooter(140, true, 10, 0.4) - addbasicenemy(128, 30, rnd(basicenemysprites), 1, 0.5) - addbasicenemy(155, 60, rnd(basicenemysprites), 1, 0.4) - addbasicenemy(128, 90, rnd(basicenemysprites), 1, 0.5) + for i = 1, 12, 1 do + addwallshooter(100 + (54-i)*i, (i%2==1), 10, 0.4) + end + addpickup(490, 60, "health") end, everysecond = function() + if flr(currentwavetime%3) == 2 and currentwavetime < 16 then + for i = 1, currentwavetime/4, 1 do + addbasicenemy(128+rnd(20), rnd(100)+10, rnd(basicenemysprites), 1, 0.6) + end + end end, conditions = function() - if #enemies < 1 then - return true - else - return false + if #enemies < 2 and currentwavetime > 12 then return true else return false end end } -wave[5] = { +wave[6] = { delay = 0, start = function() - for i = 1, 10, 1 do - addwallshooter(100 + (50-i)*i, (i%2==1), 10, 0.4) - end - addpickup(420, 60, "health") + addballshooter(128, 56, 12, 0.1) + addballshooter(160, 14, 12, 0.1) + addballshooter(160, 100, 12, 0.1) end, everysecond = function() - if flr(currentwavetime%3) == 2 and currentwavetime < 14 then - addbasicenemy(128, rnd(100)+10, rnd(basicenemysprites), 1, 0.6) + end, + conditions = function() + if #enemies < 1 then return true else return false end + end +} + +wave[7] = { + delay = 1, + start = function() + addballshooter(140, 56, 12, 0.2) + addwallshooter(120, true, 10, 0.3) + addwallshooter(220, true, 10, 0.3) + addbasicenemy(128, 30, rnd(basicenemysprites), 1, 0.5) + addbasicenemy(128, 110, rnd(basicenemysprites), 1, 0.5) + addbasicenemy(140, 30, rnd(basicenemysprites), 1, 0.2) + addbasicenemy(140, 110, rnd(basicenemysprites), 1, 0.2) + end, + everysecond = function() end, conditions = function() - if #enemies < 1 then - return true - else - return false + if #enemies < 2 then return true else return false end end } |
