aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author1029chris <1029chris@gmail.com>2022-02-07 14:50:33 -0800
committer1029chris <1029chris@gmail.com>2022-02-07 14:50:33 -0800
commit30a95588502912f29c49c02d4e9620a26ed28643 (patch)
tree3437b0a4ccce5658b08b5796f1ec7cf9a211c491
parentcbb2b65b35e9fe642ff2e6771572251b9c876c30 (diff)
Programed the "ball shooter" and made some changes here and there
-rw-r--r--enemies.lua80
-rw-r--r--particles.lua12
-rw-r--r--pickups.lua1
-rw-r--r--waves.lua81
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)
diff --git a/waves.lua b/waves.lua
index dfab800..63e4efe 100644
--- a/waves.lua
+++ b/waves.lua
@@ -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
}