diff --git a/Source/Cutscenes.lua b/Source/Cutscenes.lua index aee027c..0fd0c41 100644 --- a/Source/Cutscenes.lua +++ b/Source/Cutscenes.lua @@ -2,22 +2,171 @@ local gfx = playdate.graphics local imgBigRocket = gfx.image.new("gfx/bigrocket") local tabBigRocket = gfx.imagetable.new("gfx/bigrocketfire") +local tabSmallRocket = gfx.imagetable.new("gfx/fire") assert(imgBigRocket) assert(tabBigRocket) +assert(tabSmallRocket) + +local shake = 0 local animBigRocket = gfx.animation.loop.new(200,tabBigRocket) +local animRocket = gfx.animation.loop.new(200,tabSmallRocket) local sprCutsceneBigRocket = gfx.sprite.new(tabBigRocket[1]) sprCutsceneBigRocket:setRotation(90) -sprCutsceneBigRocket:moveTo(0 - sprCutsceneBigRocket.height,120) -function beginStartCutscene() +-- cutscene 1 +local gotoGame = false +local showFuelMeter = false +local transfer = true +local fuelshowncount = -1 + +local scene1Blip = playdate.sound.sampleplayer.new("sfx/cutsceneblip") +scene1Blip:setVolume(0.7) +local scene1Explosion = playdate.sound.sampleplayer.new("sfx/cutsceneexplosion") + +local fuelTimer + +function beginStartCutscene(_gotoGame) mode = "startCutscene" + fuelshowncount = -1 + gotoGame = _gotoGame + --sprCutsceneBigRocket:moveTo(51,120) + sprCutsceneBigRocket:moveTo(-sprCutsceneBigRocket.height,120) + transfer = true + sprCutsceneBigRocket:setScale(1.5) + sprCutsceneBigRocket:add() + playdate.timer.new(1000, function() + local brAnimator = gfx.animator.new(4000, playdate.geometry.point.new(-sprCutsceneBigRocket.height,120),playdate.geometry.point.new(200,120), playdate.easingFunctions.outQuad) + sprCutsceneBigRocket:setAnimator(brAnimator) + end + ) + createStars(-10) end - function updateStartCutscene() + playdate.timer.updateTimers() gfx.clear() + gfx.setDrawOffset(math.random(-3,3)*shake,math.random(-3,3)*shake) + sprCutsceneBigRocket:setImage(animBigRocket:image()) gfx.sprite.update() + processStars(-10,-10) + processExplosions() + + if fuelshowncount == -1 and sprCutsceneBigRocket.x == 200 then + fuelshowncount = 0 + fuelTimer = playdate.timer.new(500, function () + fuelshowncount+=1 + showFuelMeter = not showFuelMeter + if showFuelMeter then scene1Blip:play() end + end) + fuelTimer.repeats = true + fuelTimer:reset() + fuelTimer:start() + end + if fuelshowncount == 5 then -- when the fuel blinking is done + fuelTimer.repeats = false + fuelshowncount = 6 + + local dietimer = playdate.timer.new(1000, function () + explode(200,120) + shake = 3 + showFuelMeter =false + song:stop() + scene1Explosion:play() + + local falltimer = playdate.timer.new(700, function () + local a = gfx.animator.new(3000, playdate.geometry.point.new(200,120),playdate.geometry.point.new(200,240+sprCutsceneBigRocket.width),playdate.easingFunctions.inBack) + sprCutsceneBigRocket:setAnimator(a) + + end) + end) + end + + if sprCutsceneBigRocket.y == 240+sprCutsceneBigRocket.width and transfer then + transfer = false + local gametimer = playdate.timer.new(1000,function () + + + if gotoGame then + map = "data/1. HOOK.json" + addMapSave("data/1. HOOK.json") + else + createMenu(mainmenu) + song:play(0) + end + applyStarSpeed(10,0) + end) + + end + + if showFuelMeter then + gfx.setLineWidth(2) + gfx.setColor(gfx.kColorWhite) + gfx.drawRect(194,35,70,10) + gfx.drawText("FUEL",131,32) + end + + if shake > 0 then shake -= .1 elseif shake < 0 then shake = 0 end +end + +-- end custscene + +local imgEndPlatform = gfx.image.new("gfx/endplatform") +assert(imgEndPlatform) +local scene = 1 +local platformY = -imgEndPlatform.height +local endRocketY = 0 + +function beginEndCutscene() + mode = "endCutscene" + song:stop() + song:load("sfx/song4") + + playdate.timer.new(3200, function () + scene = 2 + end) + + playdate.timer.new(9600, function () + shake = 5 + scene = 3 + applyStarSpeed(0,5) + end) + + playdate.timer.new(16000, function () + applyStarSpeed(0,5) + scene = 4 + shake = 3 + explode(200,150) + end) + + song:play() + +end + +function processEndCutscene() + playdate.timer.updateTimers() + gfx.clear() + gfx.setDrawOffset(math.random(-3,3)*shake,math.random(-3,3)*shake) + processStars(-10,-10) + + if scene == 2 then + platformY = playdate.math.lerp(platformY,130,0.1) + endRocketY = platformY-imgBigRocket.height*1.5 + imgBigRocket:drawScaled(200-imgBigRocket.width*0.75,endRocketY,1.5) + imgEndPlatform:draw(0,platformY) + elseif scene == 3 then + animBigRocket:image():drawScaled(200-imgBigRocket.width*0.75,endRocketY,1.5) + endRocketY = playdate.math.lerp(endRocketY, 120 - (imgBigRocket.width *0.75),0.1) + if platformY ~= 280 then + platformY = playdate.math.lerp(platformY,280,0.05) + imgEndPlatform:draw(0,platformY) + end + elseif scene == 4 then + animBigRocket:image():drawScaled(200-imgBigRocket.width*0.75,120-imgBigRocket.height*0.75,1.5) + end + + if shake > 0 then shake -= .1 elseif shake < 0 then shake = 0 end + processExplosions() end \ No newline at end of file diff --git a/Source/Editor.lua b/Source/Editor.lua index 005db2d..49cc2a6 100644 --- a/Source/Editor.lua +++ b/Source/Editor.lua @@ -85,6 +85,11 @@ function updateNewproj() gfx.drawTextInRect(playdate.keyboard.text:upper(),0,130, 210, 80,0,nil,kTextAlignment.center,createNewFont) end +function playdate.keyPressed(key) + playdate.keyboard.text = playdate.keyboard.text..key + playdate.keyboard.textChangedCallback() +end + function editLoadName(name) song:stop() mode = "editor" @@ -151,7 +156,7 @@ end function playdate.keyboard.textChangedCallback() local newTex = playdate.keyboard.text:gsub("/", ""):gsub("\\", ""):gsub("|", ""):gsub(":", ""):gsub("*", ""):gsub("?", ""):gsub('"', ""):gsub("<", ""):gsub(">", "") - if #newTex > 24 then + if #newTex > 25 then newTex = prevtext end diff --git a/Source/Main.lua b/Source/Main.lua index b669c3d..dc97314 100644 --- a/Source/Main.lua +++ b/Source/Main.lua @@ -66,13 +66,14 @@ menuButton, error = menu:addMenuItem("game menu", function() elseif mode == "editor" then editClose() song:play(0) + elseif mode == "startCutscene" or mode == "startCutsceneReplay" then + createStars() end if mode =="game" or mode == "play" then killPlayer() removeMap() killBlades() - createStars() end if mode ~= "music" then totalEnergy = 0 @@ -108,6 +109,11 @@ song:play(0) function playdate.update() if mode == "menu" then updateMenu() + processExplosions() + elseif mode == "startCutscene" or mode == "startCutsceneReplay" then + updateStartCutscene() + elseif mode == "endCutscene" then + processEndCutscene() elseif mode == "music" then updateBox() elseif mode == "game" or mode == "play" then diff --git a/Source/Menu.lua b/Source/Menu.lua index ee39c79..6d46622 100644 --- a/Source/Menu.lua +++ b/Source/Menu.lua @@ -17,8 +17,15 @@ page = 0 local imgCursor = gfx.image.new("gfx/cursor") local imgBytes = gfx.image.new("gfx/bytes") +local imgQRs = gfx.image.new("gfx/aboutme") assert(imgCursor) assert(imgBytes) +assert(imgQRs) + +local sfxAccept = playdate.sound.sampleplayer.new("sfx/accept") +local sfxSelect = playdate.sound.sampleplayer.new("sfx/select") +sfxAccept:setVolume(0.5) +sfxSelect:setVolume(0.5) mainmenu = {} function mainMenuCreation() @@ -71,9 +78,11 @@ function updateMenu() local change, aChange = playdate.getCrankChange() if playdate.buttonJustPressed(playdate.kButtonUp) then + sfxSelect:play() index -= 1 elseif playdate.buttonJustPressed(playdate.kButtonDown) then index += 1 + sfxSelect:play() end index += change * 0.01 @@ -100,8 +109,10 @@ function updateMenu() if playdate.buttonJustPressed(playdate.kButtonA) or playdate.buttonJustPressed(playdate.kButtonRight) then menuButtonPress(menuitems[#menuitems - math.floor(index)].name,#menuitems - math.floor(index)) + sfxAccept:play() elseif playdate.buttonJustPressed(playdate.kButtonB) or playdate.buttonJustPressed(playdate.kButtonLeft) then menuButtonPress("BACK") + sfxAccept:play() end imgBytes:draw(logposLerp,0) @@ -109,6 +120,10 @@ function updateMenu() if dev then small:drawText(index, 0, 209) end + + if menu == "qrs" then + imgQRs:draw(0,0) + end end local function dataLoad() @@ -187,6 +202,8 @@ function menuButtonPress(name, index) logopos = 0 barpos = 0 + miniExplode(controlX - 17 --[[+ (playdate.graphics.getTextSize(name) / 2)]] ,controlY + (243 - (20 * #menuitems))) + if name == "START NEW GAME" and menu == "mainPlay" then local m = {} m[0], m[1], m[2] = "newgame", "CANCEL", "CONFIRM" @@ -194,27 +211,34 @@ function menuButtonPress(name, index) elseif name == "START NEW GAME" or name == "CONFIRM" then deaths = 0 - map = "data/1. HOOK.json" - addMapSave("data/1. HOOK.json") + beginStartCutscene(true) + --map = "data/1. HOOK.json" + --addMapSave("data/1. HOOK.json") elseif name == "CONTINUE" then addMap(map) mode = "game" + elseif name == "START CUTSCENE" then + beginStartCutscene(false) + elseif name == "END CUTSCENE" then + beginEndCutscene() + elseif name == "EXTRAS" then - if menu == "musicbox" then - song:load("sfx/song1") - song:play(0) - end local m = {} --barpos = 160 --logopos = -112 - m[0],m[1], m[2], m[3], m[4], m[5], m[6] = "extras", "BACK", "MUSIC BOX", "ABOUT THE DEV", "END CUTSCENE", "START CUTSCENE", "LEVEL SELECT" + m[0],m[1], m[2], m[3], m[4], m[5], m[6] = "extras", "BACK", "MUSIC BOX", "LINKS", "END CUTSCENE", "START CUTSCENE", "LEVEL SELECT" if playdate.file.exists("bonusLevels.rocketbytes") then m[6] = "EXTRA LEVELS" end createMenu(m) - + elseif name == "LINKS" then + local m = {} + m[0],m[1] = "qrs", "BACK" + createMenu(m) + logopos = -112 + barpos = 160 elseif name == "USER LEVELS" then page = 0 customLoad() @@ -236,7 +260,7 @@ function menuButtonPress(name, index) elseif name == "BACK" or name == "CANCEL" then if menu == "musicbox" then local m = {} - m[0],m[1], m[2], m[3], m[4], m[5] = "extras", "BACK", "MUSIC BOX", "END CUTSCENE", "START CUTSCENE", "LEVEL SELECT" + m[0],m[1], m[2], m[3], m[4], m[5], m[6] = "extras", "BACK", "MUSIC BOX", "LINKS", "END CUTSCENE", "START CUTSCENE", "LEVEL SELECT" if playdate.file.exists("bonusLevels.rocketbytes") then m[6] = "EXTRA LEVELS" end @@ -246,11 +270,12 @@ function menuButtonPress(name, index) local m = {} --barpos = 160 --logopos = -112 - m[0],m[1], m[2], m[3], m[4], m[5] = "extras", "BACK", "MUSIC BOX", "END CUTSCENE", "START CUTSCENE", "LEVEL SELECT" - if playdate.file.exists("bonusLevels.rocketbytes") then - m[6] = "EXTRA LEVELS" - end + m[0],m[1], m[2], m[3], m[4], m[5], m[6] = "extras", "BACK", "MUSIC BOX", "LINKS", "END CUTSCENE", "START CUTSCENE", "LEVEL SELECT" createMenu(m) + elseif menu == "qrs" or menu == "data" then + local m = {} + m[0],m[1], m[2], m[3], m[4], m[5], m[6] = "extras", "BACK", "MUSIC BOX", "LINKS", "END CUTSCENE", "START CUTSCENE", "LEVEL SELECT" + createMenu(m) else createMenu(mainmenu) end diff --git a/Source/Musicbox.lua b/Source/Musicbox.lua index 8d21853..f4bfa7f 100644 --- a/Source/Musicbox.lua +++ b/Source/Musicbox.lua @@ -81,4 +81,6 @@ function updateBox() createMenu(songlist) song:stop() end + + processExplosions() end \ No newline at end of file diff --git a/Source/Particles.lua b/Source/Particles.lua index a379f2d..c2fdae9 100644 --- a/Source/Particles.lua +++ b/Source/Particles.lua @@ -72,13 +72,13 @@ function processStars(_x,_y) if star.x < _x then star.x += 420 elseif star.x > _x + 420 then - star.x = _x + star.x -= 420 end if star.y < _y then star.y += 260 elseif star.y > _y + 260 then - star.y = _y + star.y -= 260 end end end @@ -102,4 +102,12 @@ function processExplosions() break end end +end + +function applyStarSpeed(_x,_y) + for star = 1, #stars do + star = stars[star] + star.dx+=_x + star.dy+=_y + end end \ No newline at end of file diff --git a/Source/Player.lua b/Source/Player.lua index e859487..e3aafd5 100644 --- a/Source/Player.lua +++ b/Source/Player.lua @@ -40,7 +40,6 @@ local function die() sprRocket:moveTo(startpos.x, startpos.y) miniExplode(startpos.x,startpos.y) sfxDie:play() - createStars() end function addPlayer(_x,_y,__x,__y) @@ -57,7 +56,6 @@ function addPlayer(_x,_y,__x,__y) sprRocket:moveTo(_x,_y) sprRocket:add() sprRocket:setVisible(true) - createStars() resetButton = playdate.getSystemMenu():addMenuItem("respawn", function() die() end) @@ -117,7 +115,6 @@ local function playerWin() createMenu(mainmenu) end - createStars() end) end diff --git a/Source/Saws.lua b/Source/Saws.lua index 49b9890..40e4c62 100644 --- a/Source/Saws.lua +++ b/Source/Saws.lua @@ -26,10 +26,6 @@ function loadBlades(_blades) b.saw:setCollideRect(0,0,16,16) b.saw:add() - local a = gfx.animator.new(b.speed*1000, b.start, b.ends) - - b.saw:setAnimator(a) - b.t1 = gfx.sprite.new(imgTarget) b.t1:moveTo(b.start) b.t2 = gfx.sprite.new(imgTarget) @@ -134,10 +130,7 @@ function updateSaws() if pos == b.start then local a = gfx.animator.new(b.speed*1000, b.start, b.ends) - - b.saw:setAnimator(a) - elseif pos == b.ends then - local a = gfx.animator.new(b.speed*1000, b.ends, b.start) + a.reverses = true b.saw:setAnimator(a) end diff --git a/Source/gfx/aboutme.png b/Source/gfx/aboutme.png new file mode 100644 index 0000000..03e3934 Binary files /dev/null and b/Source/gfx/aboutme.png differ diff --git a/Source/gfx/big.fnt b/Source/gfx/big.fnt index 848cbb3..4d71fae 100644 --- a/Source/gfx/big.fnt +++ b/Source/gfx/big.fnt @@ -1,6 +1,6 @@ --metrics={"baseline":26,"xHeight":2,"capHeight":2,"pairs":{},"left":[],"right":[]} -datalen=4300 -data=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 +datalen=4404 +data=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 width=14 height=18 diff --git a/Source/gfx/bigVisibleSpaces.fnt b/Source/gfx/bigVisibleSpaces.fnt index af81300..2d4088d 100644 --- a/Source/gfx/bigVisibleSpaces.fnt +++ b/Source/gfx/bigVisibleSpaces.fnt @@ -1,6 +1,6 @@ --metrics={"baseline":26,"xHeight":2,"capHeight":2,"pairs":{},"left":[],"right":[]} -datalen=4360 -data=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 +datalen=4412 +data=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 width=14 height=18 diff --git a/Source/gfx/endplatform.png b/Source/gfx/endplatform.png new file mode 100644 index 0000000..e2d70c0 Binary files /dev/null and b/Source/gfx/endplatform.png differ diff --git a/Source/sfx/accept.wav b/Source/sfx/accept.wav new file mode 100644 index 0000000..4a569c7 Binary files /dev/null and b/Source/sfx/accept.wav differ diff --git a/Source/sfx/cutsceneblip.wav b/Source/sfx/cutsceneblip.wav new file mode 100644 index 0000000..39d61ca Binary files /dev/null and b/Source/sfx/cutsceneblip.wav differ diff --git a/Source/sfx/cutsceneexplosion.wav b/Source/sfx/cutsceneexplosion.wav new file mode 100644 index 0000000..f51cc55 Binary files /dev/null and b/Source/sfx/cutsceneexplosion.wav differ diff --git a/Source/sfx/select.wav b/Source/sfx/select.wav new file mode 100644 index 0000000..e284a78 Binary files /dev/null and b/Source/sfx/select.wav differ diff --git a/Source/sfx/song3.wav b/Source/sfx/song3.wav index 4b0491d..b4d87cb 100644 Binary files a/Source/sfx/song3.wav and b/Source/sfx/song3.wav differ