diff options
| author | 1029chris <1029chris@gmail.com> | 2022-02-04 19:02:55 -0800 |
|---|---|---|
| committer | 1029chris <1029chris@gmail.com> | 2022-02-04 19:02:55 -0800 |
| commit | e9080c7efe446a21edff514941b0aed0b7f62f2d (patch) | |
| tree | 63114d65e1443731322342ba24c78685c4765a0a | |
| parent | c3adabae861162b66c1b4499754848d1ffdc0833 (diff) | |
Wall enemies! more waves!!!!!
| -rw-r--r-- | bullets.lua | 2 | ||||
| -rw-r--r-- | enemies.lua | 82 | ||||
| -rw-r--r-- | waves.lua | 68 |
3 files changed, 144 insertions, 8 deletions
diff --git a/bullets.lua b/bullets.lua index ea82be7..41ff210 100644 --- a/bullets.lua +++ b/bullets.lua @@ -22,7 +22,7 @@ function addbullet(x, y, velx, vely, evil, sprite) end function bullet.accurate_collide(object) - if bullet.x+4 >= object.x-2 and bullet.x+4 <= object.x+2+object.w and bullet.y+4 >= object.y-2 and bullet.y+4 <= object.y+object.h+2 and object.inv < 0 then + if bullet.x+4 >= object.x-2 and bullet.x+4 <= object.x+2+object.w and bullet.y+4 >= object.y-2 and bullet.y+4 <= object.y+object.h+2 then object:shot() del(obj, bullet) end diff --git a/enemies.lua b/enemies.lua index ff8606f..73e2f48 100644 --- a/enemies.lua +++ b/enemies.lua @@ -2,6 +2,8 @@ enemies = {} basicenemysprites = {11, 27, 43, 59} --these are all possible 8x8 basic enemy sprites +--Basic, small 8x8 customizable enemy. Very reusable! + function addbasicenemy(x, y, sprite, health, speed) local enemy = {} enemy.x = x @@ -19,12 +21,15 @@ function addbasicenemy(x, y, sprite, health, speed) if flr(sin(time()*speed)) ~= 0 then --if the ships heading up, change sprite sprite += 1 end - spr(sprite, enemy.x, enemy.y, 1,1) + if enemy.inv < 0 or ceil(enemy.inv*10%2) == 1 then + spr(sprite, enemy.x, enemy.y) + end end function enemy.shot(enemy) --explode explosion(enemy.x, enemy.y) + enemy.inv = 0.5 --and reduce health enemy.health -= 1 sfx(4) @@ -42,6 +47,7 @@ function addbasicenemy(x, y, sprite, health, speed) enemy.x -= speed enemy.y += sin(time()*speed)*speed enemy.shootcooldown -= 1/60 + enemy.inv -= 1/60 foreach(players, enemy.collide) if enemy.shootcooldown < 0 then enemy.shootcooldown = 0.5 + rnd(1.5) @@ -67,4 +73,78 @@ function addbasicenemy(x, y, sprite, health, speed) end add(enemies, enemy) +end + +--SHOOTER THAT SHOOTS BIG WALLS!!!!!! + +function addwallshooter(x, shootup, health, speed) + local enemy = {} + enemy.x = x + enemy.y = 120 + enemy.sprite = 45 + enemy.offset = rnd() + if shootup then + enemy.y = 0 + enemy.sprite = 29 + end + enemy.w = 8 + enemy.h = 8 + 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 + spr(enemy.sprite+t()*10%2, enemy.x, enemy.y) + end + end + + function enemy.shot(enemy) + --explode + explosion(enemy.x, enemy.y) + --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, enemy.y) + enemy.health -= 2 + end + end + + function enemy.update() + enemy.x -= speed + enemy.shootcooldown -= 1/60 + enemy.inv -= 1/60 + foreach(players, enemy.collide) + if enemy.shootcooldown < 0 and (t()+enemy.offset)%1>0.5 then + enemy.shootcooldown = 0.08 + local vely = -1 + if shootup then vely = 1 end + addbullet(enemy.x-3, enemy.y, -speed, vely, true, 3) + end + if enemy.x < -8 then + del(enemies, enemy) + end + if enemy.health <= 0 then + for i = 1, rnd(6)+6, 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) > 95 then + addpickup(enemy.x, enemy.y) + end + if shake < 3 then + shake = 2.5 + end + sfx(2) + del(enemies, enemy) + end + end + + add(enemies, enemy) end
\ No newline at end of file @@ -2,14 +2,13 @@ wave = {} --store wave functions here currentwave = 1 --THIS IS THE CURRENT WAVE currentwavetime = 0 delaytimer = 0 +everysecondtimer = 0 wave[1] = { delay = 2, start = function() addbasicenemy(130, 60, rnd(basicenemysprites), 1, 0.15) end, - ending = function() - end, everysecond = function() end, conditions = function() @@ -28,8 +27,6 @@ wave[2] = { addbasicenemy(128, 60, rnd(basicenemysprites), 1, 0.8) addbasicenemy(128, 90, rnd(basicenemysprites), 1, 0.4) end, - ending = function() - end, everysecond = function() end, conditions = function() @@ -49,7 +46,21 @@ wave[3] = { addbasicenemy(170, i*16, rnd(basicenemysprites), 1, 1.05 - 0.075*i) end end, - ending = function() + everysecond = function() + end, + conditions = function() + if #enemies < 1 then + return true + else + return false + end + end +} + +wave[4] = { + delay = 0, + start = function() + addwallshooter(130, true, 10, 0.7) end, everysecond = function() end, @@ -62,14 +73,59 @@ wave[3] = { end } +wave[4] = { + 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) + end, + everysecond = function() + end, + conditions = function() + if #enemies < 1 then + return true + else + return false + end + end +} + +wave[5] = { + 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") + end, + everysecond = function() + if flr(currentwavetime%3) == 2 and currentwavetime < 14 then + addbasicenemy(128, rnd(100)+10, rnd(basicenemysprites), 1, 0.6) + end + end, + conditions = function() + if #enemies < 1 then + return true + else + return false + end + end +} + wave[currentwave].start() function updatewaves() currentwavetime += 1/60 + everysecondtimer += 1/60 + if everysecondtimer >= 1 then + everysecondtimer = 0 + wave[currentwave].everysecond() + end if wave[currentwave].conditions() then delaytimer += 1/60 if delaytimer > wave[currentwave].delay then - wave[currentwave].ending() currentwave += 1 currentwavetime = 0 delaytimer = 0 |
