diff options
| author | 1029chris <1029chris@gmail.com> | 2022-02-10 16:11:17 -0800 |
|---|---|---|
| committer | 1029chris <1029chris@gmail.com> | 2022-02-10 16:11:17 -0800 |
| commit | 4a39a3a49f36ed804d61af8bb1e41fb1eb541452 (patch) | |
| tree | 361f75854279d7d434654709102dfa7dcbea8b35 | |
| parent | 6736425d3603b5d473789c608615e1a1dbf44433 (diff) | |
new enemy, more waves!
| -rw-r--r-- | enemies.lua | 91 | ||||
| -rw-r--r-- | waves.lua | 38 |
2 files changed, 120 insertions, 9 deletions
diff --git a/enemies.lua b/enemies.lua index 3283ec3..006ba6c 100644 --- a/enemies.lua +++ b/enemies.lua @@ -81,12 +81,12 @@ end --SHOOTER THAT SHOOTS BIG WALLS!!!!!! -function addwallshooter(x, shootup, health, speed) +function addwallshooter(x, shootup, health, speed, offset) local enemy = {} enemy.x = x enemy.y = 119 enemy.sprite = 60 - enemy.offset = rnd() + enemy.offset = offset or rnd() if shootup then enemy.y = 1 enemy.sprite = 44 @@ -171,7 +171,7 @@ function addballshooter(x, y, health, speed) enemy.x = x enemy.y = y enemy.offset = rnd() - enemy.w = 8*4 + enemy.w = 8*3 enemy.h = 8*2 enemy.inv = -1 enemy.health = health @@ -181,9 +181,10 @@ function addballshooter(x, y, health, speed) function enemy.draw(enemy) if enemy.inv < 0 or ceil(enemy.inv*10%2) == 1 then local sprite = 56 - if enemy.health < 7 then sprite = 40 end - spr(sprite, enemy.x, enemy.y, 4, 1, false, true) - spr(sprite, enemy.x, enemy.y+8, 4, 1) + local damaged = (enemy.health < 7) + if damaged then sprite = 40 end + spr(sprite, enemy.x, enemy.y, 3, 1, false, not damaged) + spr(sprite, enemy.x, enemy.y+8, 3, 1, false, damaged) end end @@ -220,7 +221,7 @@ function addballshooter(x, y, health, speed) sfx(19) -- play shoot sound end end - if enemy.x < -32 then + if enemy.x < -24 then del(enemies, enemy) --delete enemy if off screen end if enemy.health < 8 then --smokes when damaged! @@ -243,4 +244,80 @@ function addballshooter(x, y, health, speed) end add(enemies, enemy) +end + +function addtargetingenemy(x, y, health, speed) + local enemy = {} + enemy.x = x + enemy.y = y + enemy.w = 16 + enemy.h = 8 + enemy.inv = -1 + enemy.health = health + enemy.shootcooldown = rnd(0.4)+0.2 + enemy.speed = speed + enemy.bulletcounter = 0 + + function enemy.draw(enemy) + if enemy.inv < 0 or ceil(enemy.inv*10%2) == 1 then + spr(21, enemy.x, enemy.y, 2, 1) + end + end + + function enemy.shot(enemy) + --explode + explosion(enemy.x, enemy.y) + enemy.inv = 0.5 + --and reduce health + enemy.health -= 1 + if enemy.health > 0 then + sfx(16) + end + end + + function enemy.collide(object) --f this enemy collides with something, do damage to both it and itself. also EXPLODE!!! + 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) + 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 currentwavetime%1.5>1.2 then + enemy.shootcooldown = 0.1 + enemy.bulletcounter += 1 + local p = enemy.bulletcounter%#players+1 + if enemy.x < 129 and players[p].x < enemy.x+30 then --math involving a distance check to get the proper velocity for aiming + local distance = sqrt((players[p].x - enemy.x)^2+(players[p].y - enemy.y)^2) + local velx = (players[p].x - enemy.x)/distance + local vely = (players[p].y - enemy.y)/distance + addbullet(enemy.x-3, enemy.y, velx, vely, true, 2) -- shoot if on screen + sfx(15) -- play shoot sound if on screen + end + end + if enemy.x < -16 then + del(enemies, enemy) -- delete enemy if off screen + end + if enemy.health <= 0 then -- die!!!!! + for i = 1, rnd(6)+6, 1 do + addcircle(enemy.x+rnd(8), enemy.y+rnd(16), rnd(4)-2, -rnd(2)-1, 1, 2, rnd({3, 11, 9}), -0.1) + end + if rnd(100) > 85 then + addpickup(enemy.x, enemy.y) + end + if shake < 3 then + shake = 3.5 + end + sfx(17) + explosion(enemy.x, enemy.y, 16, 8) + del(enemies, enemy) + end + end + + add(enemies, enemy) end
\ No newline at end of file @@ -21,7 +21,7 @@ wave[2] = { delay = 2, start = function() addbasicenemy(128, 30, rnd(basicenemysprites), 1, 0.4) - addbasicenemy(128, 60, rnd(basicenemysprites), 1, 0.8) + addtargetingenemy(128, 60, 3, 0.1) addbasicenemy(128, 90, rnd(basicenemysprites), 1, 0.4) end, everysecond = function() @@ -53,7 +53,7 @@ wave[4] = { start = function() addwallshooter(140, true, 10, 0.4) addbasicenemy(128, 30, rnd(basicenemysprites), 1, 0.5) - addbasicenemy(155, 60, rnd(basicenemysprites), 1, 0.4) + addtargetingenemy(155, 60, 3, 0.15) addbasicenemy(128, 90, rnd(basicenemysprites), 1, 0.5) end, everysecond = function() @@ -119,6 +119,40 @@ wave[7] = { end } +wave[8] = { + delay = 1, + start = function() + addtargetingenemy(128,1,3,0.1) + addtargetingenemy(262,60,3,0.2) + addwallshooter(138, true, 10, 0.4, 0) + addwallshooter(144, true, 10, 0.4, 0) + addwallshooter(185, false, 10, 0.4, 0) + addwallshooter(230, true, 10, 0.4) + addballshooter(230, 56, 12, 0.2) + end, + everysecond = function() + end, + conditions = function() + if #enemies < 2 then return true else return false + end + end +} + +wave[9] = { + delay = 3, + start = function() + for i = 1, 7, 1 do + addtargetingenemy(128, i*16-4, 3, 0.1) + end + end, + everysecond = function() + end, + conditions = function() + if #enemies < 2 then return true else return false + end + end +} + --wave[currentwave].start() --music(0, 0, 3) |
