aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author1029chris <1029chris@gmail.com>2022-02-09 18:05:07 -0800
committer1029chris <1029chris@gmail.com>2022-02-09 18:05:07 -0800
commit3e37c3fd09e335101f3c0ed199c1607879af2f86 (patch)
tree457b7f9314c4826aa8173291efc066b343db34b7
parent08fee0aa2dbe709173aec43236b47ace8b14e0ac (diff)
MENU WORKS!!!!!!
-rw-r--r--background.lua68
-rw-r--r--draw.lua99
-rw-r--r--enemies.lua6
-rw-r--r--objects.lua11
-rw-r--r--pickups.lua4
-rw-r--r--players.lua77
-rw-r--r--ui.lua85
-rw-r--r--update.lua39
-rw-r--r--waves.lua15
9 files changed, 259 insertions, 145 deletions
diff --git a/background.lua b/background.lua
index c989107..bd1febe 100644
--- a/background.lua
+++ b/background.lua
@@ -1,49 +1,49 @@
-bgcircles = {}
+-- bgcircles = {}
function scrollingcircles(y, speed, spacing, radius, color)
for i = 1, 256, spacing do
- circfill((i-(t()*speed))%256-radius*2, y, radius, color)
+ circfill((i-(gt*speed))%256-radius*2, y, radius, color)
end
end
function scrollingcirclelines(y, speed, spacing, radius, color)
for i = 1, 256, spacing do
- circ((i-(t()*speed))%256-radius*2, y, radius, color)
+ circ((i-(gt*speed))%256-radius*2, y, radius, color)
end
end
function scrollingsprite(sprite,x,y,w,h,speed,flip)
flip = flip or false
- spr(sprite, (-t()*speed+x+w*8)%(128+w*8)-w*8, y, w, h, flip)
+ spr(sprite, (-gt*speed+x+w*8)%(128+w*8)-w*8, y, w, h, flip)
end
-function addbgcircle(x, y, velx, r, color, pos)
- local circle = {}
- circle.x = x
- circle.y = y
- circle.velx = velx
- circle.r = r
- circle.color = color
+-- function addbgcircle(x, y, velx, r, color, pos)
+-- local circle = {}
+-- circle.x = x
+-- circle.y = y
+-- circle.velx = velx
+-- circle.r = r
+-- circle.color = color
- function circle.draw(circle)
- circle.x += circle.velx
+-- function circle.draw(circle)
+-- circle.x += circle.velx
- if circle.x < 0 - circle.r * 2 then
- del(bgcircles, circle)
- end
- circfill(circle.x,circle.y,circle.r,circle.color)
- end
- add(bgcircles,circle, pos)
-end
+-- if circle.x < 0 - circle.r * 2 then
+-- del(bgcircles, circle)
+-- end
+-- circfill(circle.x,circle.y,circle.r,circle.color)
+-- end
+-- add(bgcircles,circle, pos)
+-- end
function drawbg()
cls(0)
- camera((sin(shake+t())*shake)/3, (sin(shake+t()/2.1)*shake)/3)
+ camera((sin(shake+t())*shake)/3, (sin(shake+gt/2.1)*shake)/3)
--stars
for i = 1, 64, 1 do
- pset((((-t()*0.1)+i*4.3824)*(i/32))%128, sin(i*0.536382)*64+64, 4)
+ pset((((-gt*0.1)+i*4.3824)*(i/32))%128, sin(i*0.536382)*64+64, 4)
end
--galaxies
@@ -53,15 +53,15 @@ function drawbg()
--ringed planet
palt(0,false)
- spr(194,160-t(),50,4,2)
- spr(199,200-t(),50,2,2)
- spr(214,192-t(),58,1,1)
- spr(201,160-t(),66,6,2)
- spr(207,208-t(),66,1,1)
- spr(234,152-t(),82,1,1)
- spr(236,168-t(),82,3,1)
- spr(250,152-t(),90,4,1)
- spr(223,192-t(),82,1,1)
+ spr(194,160-gt,50,4,2)
+ spr(199,200-gt,50,2,2)
+ spr(214,192-gt,58,1,1)
+ spr(201,160-gt,66,6,2)
+ spr(207,208-gt,66,1,1)
+ spr(234,152-gt,82,1,1)
+ spr(236,168-gt,82,3,1)
+ spr(250,152-gt,90,4,1)
+ spr(223,192-gt,82,1,1)
palt(0,true)
--clouds
@@ -88,7 +88,7 @@ function drawbg()
scrollingcircles(-12, 40, 25, 20, 4)
- camera((sin(shake+t())*shake)/2, (sin(shake+t()/2.1)*shake)/2)
+ camera((sin(shake+t())*shake)/2, (sin(shake+gt/2.1)*shake)/2)
--landscape
scrollingcirclelines(125, 72, 25, 20, 8)
scrollingcircles(126, 72, 25, 20, 2)
@@ -99,7 +99,7 @@ function drawbg()
line(0, 117, 128, 117, 8)
rectfill(0,119,128,128,8)
for i = 1, 32, 1 do
- line(((-t()+i*2.5)*80)%128, 111, ((-t()+i*2.5)*80)%128*1.2-12.8, 125, 2)
+ line(((-gt+i*2.5)*80)%128, 111, ((-gt+i*2.5)*80)%128*1.2-12.8, 125, 2)
end
--pine trees
scrollingsprite(231,10,78+16,1,2,72,true)
@@ -132,7 +132,7 @@ function drawbg()
scrollingsprite(192,102,90,2,4,90)
scrollingsprite(192,137,92,2,4,90)
- camera(sin(shake+t())*shake, sin(shake+t()/2.1)*shake)
+ camera(sin(shake+t())*shake, sin(shake+gt/2.1)*shake)
scrollingcirclelines(150, 100, 30, 32, 8)
scrollingcircles(151, 100, 30, 32, 2)
end \ No newline at end of file
diff --git a/draw.lua b/draw.lua
index d2f709d..0709cbc 100644
--- a/draw.lua
+++ b/draw.lua
@@ -13,83 +13,30 @@ pal(0,130,1)
drawbg()
drawobjs()
--- print(#obj)
-function drawlogo(x,y)
- --default values
- -- x = 24
- -- y = 26
-
- --this is a horrible way to draw the logo, but I'm doing it anyways. x3
- -- muahahahahahahaha!!!!!!
- sspr(0,24,16,8,x-1,y+2,32,16) --to
- sspr(16,24,8,8,x+53,y+2,16,16) --ic
- sspr(0,24,16,8,x-1,y+1,32,16) --to
- sspr(16,24,8,8,x+53,y+1,16,16) --ic
- --X
- sspr(24,24,8,8,x+26,y-6,16,16)
- sspr(24,24,8,8,x+42,y-6,16,16,true)
- sspr(32,24,8,8,x+26,y+10,16,16, true)
- sspr(32,24,8,8,x+42,y+10,16,16)
- --X
- sspr(24,24,8,8,x+26,y-8,16,16)
- sspr(24,24,8,8,x+42,y-8,16,16,true)
- sspr(32,24,8,8,x+26,y+8,16,16, true)
- sspr(32,24,8,8,x+42,y+8,16,16)
- --font
- local text = "i n v a d e r s"
- print(text, x+10, y+21, 3)
- print(text, x+10, y+19, 3)
- print(text, x+11, y+20, 3)
- print(text, x+9, y+20, 3)
- print(text, x+9, y+21, 3)
- print(text, x+11, y+21, 3)
- print(text, x+9, y+19, 3)
- print(text, x+11, y+19, 3)
- print(text, x+11, y+21, 3)
- print(text, x+9, y+22, 3)
- print(text, x+11, y+22, 3)
- print(text, x+10, y+22, 3)
- print(text, x+10, y+20, 14)
- clip(x+10, y+20, 60, 3)
- print(text, x+10, y+20, 11)
- clip()
+if gamerunning then
+ if gameover then --gameover timer, it does a cute spinny!
+ print(ceil(respawntimer), 62+sin(t())*3,61+cos(t())*3, 4)
+ print(ceil(respawntimer), 62+sin(t())*3,60+cos(t())*3, 7)
+ elseif players[1].health <=0 then
+ print(ceil(players[1].inv), players[1].x+sin(t())*3, players[1].y+cos(t())*3+1, 4)
+ print(ceil(players[1].inv), players[1].x+sin(t())*3, players[1].y+cos(t())*3, 12)
+ elseif #players > 1 and players[2].health <=0 then
+ print(ceil(players[2].inv), players[2].x+sin(t())*3, players[2].y+cos(t())*3+1, 4)
+ print(ceil(players[2].inv), players[2].x+sin(t())*3, players[2].y+cos(t())*3, 9)
+ end
end
-
-function mainmenutext(x,y)
- -- default values
- -- x = 24
- -- y = 62
-
- spr(17,x+2,y+4,1,1) --blue ship
- spr(33,x+2,y+16,1,1) --orange ship
- print("(A) - Lone Wolf", x+15,y+7,5)
- print("(A) - Lone Wolf", x+15,y+6,6)
- print("(B) - Companion", x+15,y+18,5)
- print("(B) - Companion", x+15,y+17,6)
+if not gamerunning or gt < 1 then
+ for i = 1, 3, 1 do
+ spr(basicenemysprites[i%#basicenemysprites+1], (-t()*(i*20)+(sin(i/3+t()/100)*128)+1*8)%(128+1*8)-1*8-gt*180, i*36+sin(t()*i/3)*i*2-20,1,1)
+ end
+ if t() < 0.68 then
+ drawlogo(24-gt*120,sin(0.25+t()*0.75)*26)
+ else
+ drawlogo(24-gt*120,26)
+ end
+ mainmenutext(24-gt*150,62)
+ credits(10-gt*140,100)
end
-function credits(x,y)
- -- default vaues
- -- x = 10
- -- y = 100
-
- palt(2,true)
- palt(0,false)
- spr(53,x-5,y+6,1,1) --duck
- pset(x+3,y+10,13) --extra dot for glasses
- spr(54,x+104,y+6,1,1) --bot
- palt(2,false)
- palt(0,true)
- print("1029chris ribboncable", x+9,y+6,0)
- print("1029chris ribboncable", x+9,y+5,9)
- print("code/tunes art/sounds", x+8,y+13,0)
- print("code/tunes art/sounds", x+8,y+12,9)
- print("made in vancouver - 2022", x+6,y+22,0)
- print("made in vancouver - 2022", x+6,y+21,4)
-end
-
-
--- drawlogo(24,26)
--- mainmenutext(24,62)
--- credits(10,100) \ No newline at end of file
+-- print(#obj) \ No newline at end of file
diff --git a/enemies.lua b/enemies.lua
index f7936c5..420146b 100644
--- a/enemies.lua
+++ b/enemies.lua
@@ -13,7 +13,7 @@ function addbasicenemy(x, y, sprite, health, speed)
enemy.inv = -1
enemy.sprite = sprite
enemy.health = health
- enemy.shootcooldown = rnd(1)+2
+ enemy.shootcooldown = rnd(2)+1
enemy.speed = speed
function enemy.draw(enemy)
@@ -203,7 +203,7 @@ function addballshooter(x, y, health, speed)
addbullet(enemy.x+4, enemy.y+4, sin(i/48)/2, cos(i/48)/2, true, 2)
end
end
- sfx(15)
+ sfx(19)
end
if enemy.x < -32 then
del(enemies, enemy)
@@ -221,7 +221,7 @@ function addballshooter(x, y, health, speed)
if shake < 3 then
shake = 12
end
- sfx(17)
+ sfx(20)
explosion(enemy.x+4, enemy.y+4, 8*4, 8*2)
del(enemies, enemy)
end
diff --git a/objects.lua b/objects.lua
index fa04ee8..4990280 100644
--- a/objects.lua
+++ b/objects.lua
@@ -1,4 +1,15 @@
obj = {}
+gt = 0 -- game time
+scrollspeed = 0
+respawntimer = 0
+gameover = false
+gamerunning = false
+
+function startgame()
+ wave[currentwave].start()
+ music(0, 0, 3)
+ gamerunning = true
+end
function updateobjs()
foreach(players, function(obj) obj:update() end)
diff --git a/pickups.lua b/pickups.lua
index b8e0a6b..400917c 100644
--- a/pickups.lua
+++ b/pickups.lua
@@ -2,9 +2,9 @@ local randompickups = {}
pickuptimer = 10
function randompickups.update()
pickuptimer -= 1/60
- if (pickuptimer < 0) then
+ if pickuptimer < 0 then
pickuptimer = 10
- if rnd(100) > 93 then
+ if rnd(100) > 90 then
addpickup(128, rnd(80)+20)
end
end
diff --git a/players.lua b/players.lua
index f7a8cc8..c7ea70d 100644
--- a/players.lua
+++ b/players.lua
@@ -1,18 +1,19 @@
playercount = -1
+alwaysfire = false
players = {}
-function addplayer(sprite, bulletsprite)
+function addplayer(x, y, sprite, bulletsprite)
playercount += 1
local player = {}
player.health = 3
- player.x = 18
- player.y = 60
+ player.x = x
+ player.y = y
player.w = 8
player.h = 8
player.sprite = sprite
player.bulletsprite = bulletsprite
player.ymov = 0
- player.inv = -1
+ player.inv = 2
player.id = playercount
player.shootcooldown = 0.0
player.particlecooldown = 0.0
@@ -23,7 +24,7 @@ function addplayer(sprite, bulletsprite)
-- print(player.health)
--draw a different sprite when moving, and blink when hurt
- if player.inv < 0 or ceil(player.inv*10%2) == 1 then
+ if (player.inv < 0 or ceil(player.inv*10%2) == 1) and player.health > 0 then
if (player.ymov == 0) then
spr(player.sprite, player.x, player.y)
elseif (player.ymov == 1) then
@@ -44,30 +45,50 @@ function addplayer(sprite, bulletsprite)
shake = 9
sfx(10)
explosion(player.x, player.y)
+ if isgameover() then --FUCK, GAME OVER YOU DIED!
+ gameover = true -- gameover set to true
+ respawntimer = 5 --respawns all players in 5 seconds
+ player.inv = 20
+ for i = 1, #enemies, 1 do
+ enemies[i].health = -1
+ end
+ elseif player.health <= 0 then
+ player.inv = 5
+ end
+ end
+
+ function player.respawn(player)
+ player.health = 3
+ player.inv = 3
+ for i = 1, 8, 1 do
+ addcircle(player.x+4, player.y+4, sin(i/8), cos(i/8), 2, 0.6, 7, 0)
+ end
end
function player.update(player)
--movement
- if btn(0, player.id) then
- player.x -= 1
- elseif btn(1, player.id) then
- player.x += 1
- end
- if btn(2, player.id) then
- player.y -= 1
- player.ymov = 1
- elseif btn(3, player.id) then
- player.y += 1
- player.ymov = -1
- else
- player.ymov = 0
+ if player.health > 0 then -- can only input if alive!!!
+ if btn(0, player.id) then
+ player.x -= 1
+ elseif btn(1, player.id) then
+ player.x += 1
+ end
+ if btn(2, player.id) then
+ player.y -= 1
+ player.ymov = 1
+ elseif btn(3, player.id) then
+ player.y += 1
+ player.ymov = -1
+ else
+ player.ymov = 0
+ end
end
player.x = mid(0, player.x, 120)
player.y = mid(0, player.y, 120)
--particles from rockets, and smoke/sparks from damage
player.particlecooldown -= 1/60
- if player.particlecooldown < 0 then
+ if player.particlecooldown < 0 and player.health > 0 then
addcircle(player.x-1, player.y, -0.5, 0, 1.5, 0.5, 9, 0)
addcircle(player.x-1, player.y+7, -0.5, 0, 1.5, 0.5, 9, 0)
if player.health < 3 then
@@ -85,7 +106,7 @@ function addplayer(sprite, bulletsprite)
--shooting after cooldown
player.shootcooldown -= 1/60
player.inv -= 1/60
- if btn(4, player.id) and player.shootcooldown < 0 then
+ if (btn(4, player.id) or alwaysfire) and player.shootcooldown < 0 and player.health > 0 then
--for i = 1, 4, 1 do
--addcircle(player.x+3, player.y+4, rnd(1)+0.5, rnd(1)-0.5, 1.5, rnd(0.4), 12)
--end
@@ -97,9 +118,21 @@ function addplayer(sprite, bulletsprite)
end
player.shootcooldown = player.shootspeed
end
+ --reusing the inv timer as a respawn timer when killed
+ if player.health <= 0 and player.inv < 0 and not gameover then
+ player:respawn()
+ end
end
-
add(players, player)
end
-addplayer(16, 18) \ No newline at end of file
+function isgameover()
+ for i = 1, #players, 1 do
+ if players[i].health > 0 then
+ return false
+ end
+ end
+ return true
+end
+
+-- addplayer(16, 18) \ No newline at end of file
diff --git a/ui.lua b/ui.lua
new file mode 100644
index 0000000..9c0e1b0
--- /dev/null
+++ b/ui.lua
@@ -0,0 +1,85 @@
+function drawlogo(x,y)
+ --default values
+ -- x = 24
+ -- y = 26
+
+ --this is a horrible way to draw the logo, but I'm doing it anyways. x3
+ -- muahahahahahahaha!!!!!!
+ sspr(0,24,16,8,x-1,y+2,32,16) --to shadow
+ sspr(16,24,8,8,x+53,y+2,16,16) --ic shadow
+ sspr(0,24,16,8,x-1,y+1,32,16) --to
+ sspr(16,24,8,8,x+53,y+1,16,16) --ic
+ --X shadow
+ sspr(24,24,8,8,x+26,y-6,16,16)
+ sspr(24,24,8,8,x+42,y-6,16,16,true)
+ sspr(32,24,8,8,x+26,y+10,16,16, true)
+ sspr(32,24,8,8,x+42,y+10,16,16)
+ --X
+ sspr(24,24,8,8,x+26,y-8,16,16)
+ sspr(24,24,8,8,x+42,y-8,16,16,true)
+ sspr(32,24,8,8,x+26,y+8,16,16, true)
+ sspr(32,24,8,8,x+42,y+8,16,16)
+ --font
+ local text = "i n v a d e r s"
+ print(text, x+10, y+21, 3)
+ print(text, x+10, y+19, 3)
+ print(text, x+11, y+20, 3)
+ print(text, x+9, y+20, 3)
+ print(text, x+9, y+21, 3)
+ print(text, x+11, y+21, 3)
+ print(text, x+9, y+19, 3)
+ print(text, x+11, y+19, 3)
+ print(text, x+11, y+21, 3)
+ print(text, x+9, y+22, 3)
+ print(text, x+11, y+22, 3)
+ print(text, x+10, y+22, 3)
+ print(text, x+10, y+20, 14)
+ clip(x+10, y+20, 60, 3)
+ print(text, x+10, y+20, 11)
+ clip()
+end
+
+function mainmenutext(x,y)
+ -- default values
+ -- x = 24
+ -- y = 62
+ x -= 1
+ if not gamerunning then
+ spr(17,x+2,y+4+sin(t()*0.7)*2,1,1) --blue ship
+ spr(33,x+2,y+16+sin(t()*0.7)*2,1,1) --orange ship
+ end
+ print("(\142) - Lone Wolf", x+15,y+7,5)
+ print("(\142) - Lone Wolf", x+15,y+6,6)
+ print("(\151) - Companion", x+15,y+18,5)
+ print("(\151) - Companion", x+15,y+17,6)
+end
+
+function credits(x,y)
+ -- default vaues
+ -- x = 10
+ -- y = 100
+
+ palt(2,true)
+ palt(0,false)
+ spr(53,x-4,y+6+sin(t())*2,1,1,(t()%2<1)) --duck
+ --pset(x+3,y+10+sin(t())*2,13) --extra dot for glasses
+ spr(54,x+104,y+6+cos(t())*2,1,1,(t()%2<1)) --bot
+ palt(2,false)
+ palt(0,true)
+ print("1029chris ribboncable", x+9,y+6,0)
+ print("1029chris ribboncable", x+9,y+5,9)
+ print("code/tunes art/sounds", x+8,y+13,0)
+ print("code/tunes art/sounds", x+8,y+12,9)
+ print("made in vancouver - 2022", x+6,y+22,0)
+ print("made in vancouver - 2022", x+6,y+21,4)
+end
+
+
+-- drawlogo(24,26)
+-- mainmenutext(24,62)
+-- credits(10,100)
+
+--this creates menu items that allow players to turn off screenshake, or always fire the ships gun.
+doshake = true
+menuitem(1, "toggle shaking", function() doshake = not doshake end)
+menuitem(2, "always fire", function() alwaysfire = not alwaysfire end) \ No newline at end of file
diff --git a/update.lua b/update.lua
index e00f2e6..41dad4c 100644
--- a/update.lua
+++ b/update.lua
@@ -1,11 +1,40 @@
-updatewaves()
-updateobjs()
+--scrolling and respawn stuff
+respawntimer -= 1/60
+if gameover then
+ scrollspeed = mid(-1/60,scrollspeed-1/6000,1/60)
+ if respawntimer < 0 then
+ gameover = false
+ foreach(players, function(obj) obj:respawn() end)
+ setwave(mid(1,currentwave-2,#wave))
+ end
+elseif gamerunning then
+ updatewaves()
+ updateobjs()
+ scrollspeed = mid(0,scrollspeed+1/2000,1/60)
+end
+gt += scrollspeed
+
+if not gamerunning then
+ if btn(4) then
+ addplayer(18, 60, 16, 18)
+ startgame()
+ elseif btn(5) then
+ addplayer(18, 45, 16, 18)
+ addplayer(18, 75, 32, 34)
+ startgame()
+ end
+end
+
--screenshake math
shake = shake + 0.11 * (0 - shake);
if shake < 1 then
shake = 0
end
+
+if not doshake then
+ shake = 0
+end
--add another player if they fire
-if btn(4, 1) and playercount == 0 then
- addplayer(32, 34)
-end \ No newline at end of file
+-- if btn(4, 1) and playercount == 0 then
+-- addplayer(32, 34)
+-- end \ No newline at end of file
diff --git a/waves.lua b/waves.lua
index 77b8224..1336e97 100644
--- a/waves.lua
+++ b/waves.lua
@@ -7,7 +7,7 @@ everysecondtimer = 0
wave[1] = {
delay = 2,
start = function()
- addbasicenemy(130, 60, rnd(basicenemysprites), 1, 0.15)
+ addbasicenemy(150, 60, rnd(basicenemysprites), 1, 0.15)
end,
everysecond = function()
end,
@@ -119,8 +119,8 @@ wave[7] = {
end
}
-wave[currentwave].start()
-music(0, 0, 3)
+--wave[currentwave].start()
+--music(0, 0, 3)
function updatewaves()
currentwavetime += 1/60
@@ -132,6 +132,7 @@ function updatewaves()
if wave[currentwave].conditions() then
delaytimer += 1/60
if delaytimer > wave[currentwave].delay then
+ everysecondtimer = 0
currentwave += 1
currentwavetime = 0
delaytimer = 0
@@ -139,4 +140,12 @@ function updatewaves()
wave[currentwave].start()
end
end
+end
+
+function setwave(num)
+ everysecondtimer = 0
+ currentwave = num
+ currentwavetime = 0
+ delaytimer = 0
+ wave[currentwave].start()
end \ No newline at end of file