aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--enemies.lua91
-rw-r--r--waves.lua38
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
diff --git a/waves.lua b/waves.lua
index 1336e97..be13fec 100644
--- a/waves.lua
+++ b/waves.lua
@@ -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)