aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bullets.lua2
-rw-r--r--enemies.lua82
-rw-r--r--waves.lua68
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
diff --git a/waves.lua b/waves.lua
index 7be4735..dfab800 100644
--- a/waves.lua
+++ b/waves.lua
@@ -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