diff --git a/src/love/data/characters/BaseCharacter.lua b/src/love/data/characters/BaseCharacter.lua new file mode 100644 index 00000000..742fde52 --- /dev/null +++ b/src/love/data/characters/BaseCharacter.lua @@ -0,0 +1,49 @@ +local Character = Object:extend() + +function Character:new(luaPath) + self.spr = love.filesystem.load(luaPath)() + self.x, self.y = 0, 0 + self.orientation = 0 + self.sizeX, self.sizeY = 1, 1 + self.offsetX, self.offsetY = 0, 0 + self.shearX, self.shearY = 0, 0 + self.optionsTable = self.spr.optionsTable + self.icon = self.optionsTable.icon + self.holdTimer = 0 + self.maxHoldTimer = self.spr.maxHoldTimer + + self.visible = true +end + +function Character:update(dt) + self.spr:update(dt) + + self.spr.x, self.spr.y = self.x, self.y + self.spr.orientation = self.orientation + self.spr.sizeX, self.spr.sizeY = self.sizeX, self.sizeY + self.spr.offsetX, self.spr.offsetY = self.spr.offsetX, self.spr.offsetY + self.spr.shearX, self.spr.shearY = self.shearX, self.shearY + + self.spr.holdTimer = self.holdTimer +end + +function Character:draw() + if not self.visible then return end + + self.spr:draw() +end + +function Character:udraw(sx, sy) + if not self.visible then return end + self.spr:udraw(sx, sy) +end + +function Character:beat(beat) + self.spr:beat(beat) +end + +function Character:animate(...) + self.spr:animate(...) +end + +return Character \ No newline at end of file diff --git a/src/love/data/characters/NeneCharacter.lua b/src/love/data/characters/NeneCharacter.lua new file mode 100644 index 00000000..e790d590 --- /dev/null +++ b/src/love/data/characters/NeneCharacter.lua @@ -0,0 +1,180 @@ +local Nene = BaseCharacter:extend() + +ABOT_IMAGE = nil +local abotVisualizers = {} +local MAX_ABOT_VIZ = 7 +local VIS_TIME_MAX = 0.033333333333333333 +local deltaCurTime = 0 +local vizFrameWidth = 0 + +function Nene:new() + self.abot = graphics.newImage(graphics.imagePath("weekend1/abot")) + self.abotBack = graphics.newImage(graphics.imagePath("weekend1/stereoBG")) + + abotVisualizers = {} + BaseCharacter.new(self, "sprites/characters/nene.lua") + + self.STATE_DEFAULT = 0 + self.STATE_PRE_RAISE = 1 + self.STATE_RAISE = 2 + self.STATE_READY = 3 + self.STATE_LOWER = 4 + self.currentState = self.STATE_DEFAULT + + self.MIN_BLINK_DELAY = 3 + self.MAX_BLINK_DELAY = 7 + self.blinkCountdown = self.MIN_BLINK_DELAY + + self.animationFinished = false + + ABOT_IMAGE = love.graphics.newImage(graphics.imagePath("weekend1/aBotViz")) + + for i = 1, MAX_ABOT_VIZ do + local viz = love.filesystem.load("sprites/weekend1/abotViz.lua")() + --viz:animate(tostring(i) .. "_1", false) + vizFrameWidth = viz:getFrameWidth()/2 + viz.x = -170 + (vizFrameWidth + 25) * i + viz.y = 0--stageImages["abot"].y + 120 + --print(viz.x) + table.insert(abotVisualizers, viz) + end +end + +function Nene:update(dt) + BaseCharacter.update(self, dt) + + deltaCurTime = deltaCurTime + dt + + self.abot.x, self.abot.y = self.x + 48, self.y + 250 + self.abotBack.x, self.abotBack.y = self.x + 48, self.y + 250 + + for i = 1, MAX_ABOT_VIZ do + abotVisualizers[i].x, abotVisualizers[i].y = self.x + -180 + (vizFrameWidth + 25) * i, self.y + 270 + end +end + +function Nene:transitionState() + if self.currentState == self.STATE_DEFAULT then + if health <= 0.5 then + self.currentState = self.STATE_PRE_RAISE + else + self.currentState = self.STATE_DEFAULT + end + elseif self.currentState == self.STATE_PRE_RAISE then + if health > 0.5 then + self.currentState = self.STATE_DEFAULT + elseif self.animationFinished then + self.currentState = self.STATE_RAISE + self:animate("knifeRaise", false, function() + self:transitionState() + self.animationFinished = true + end) + self.animationFinished = false + end + elseif self.currentState == self.STATE_RAISE then + if self.animationFinished then + self.currentState = self.STATE_READY + self.animationFinished = false + end + elseif self.currentState == self.STATE_READY then + if health > 0.5 then + self.currentState = self.STATE_LOWER + self:animate("knifeLower", false, function() + self:transitionState() + self.animationFinished = true + end) + end + elseif self.currentState == self.STATE_LOWER then + if self.animationFinished then + self.currentState = self.STATE_DEFAULT + self.animationFinished = false + end + else + self.currentState = self.STATE_DEFAULT + end +end + +function Nene:updateOverride(dt) + self:transitionState() + + if self.currentState == self.STATE_PRE_RAISE then + if self:getAnimName() == "danceLeft" and self:getFrameFromCurrentAnim() == self:getFrameCountFromCurrentAnim()-2 then + self.animationFinished = true + self:transitionState() + end + end +end + +function Nene:beat(beat) + local beat = math.floor(beat) or 0 + + if beatHandler.onBeat() then + if beat % self.spr.danceSpeed == 0 then + self.spr.danced = not self.spr.danced + + if self.currentState == self.STATE_DEFAULT then + if self.spr.danced then + self:animate("danceLeft", false) + else + self:animate("danceRight", false) + end + elseif self.currentState == self.STATE_PRE_RAISE then + self:animate("danceLeft") + self.spr.danced = true + elseif self.currentState == self.STATE_READY then + if self.blinkCountdown == 0 then + self:animate("knifeIdle", false) + self.blinkCountdown = love.math.random(self.MIN_BLINK_DELAY, self.MAX_BLINK_DELAY) + else + self.blinkCountdown = self.blinkCountdown - 1 + end + end + end + end +end + +function Nene:draw() + if not self.visible then return end + + self.abotBack:draw() + if curOS ~= "NX" then + local fftArray = lovefftINST:get() + local bfFFTArray, enemyFFTArray = {}, {} + local time = inst:tell() + if deltaCurTime > VIS_TIME_MAX then + deltaCurTime = 0 + --print("Time: " .. time) + lovefftINST:updatePlayTime(time) + end + -- we only have 7 bars + local MAX_BARS = 7 + local forEach = #fftArray / MAX_BARS + local index = 1 + for i = 1, #fftArray, forEach do + local i = math.floor(i) + -- 7 bars + local barHeight = fftArray[i] * 720*100 + --print(index, i, barHeight) + -- convert bar height from a number from 1-6 + local animNum = math.floor(math.remap(barHeight, 0, 720, 1, 6)) + --print(index, i, animNum) + abotVisualizers[index]:animate(tostring(index) .. "_" .. tostring(animNum), false) + abotVisualizers[index]:draw() + index = index + 1 + end + end + graphics.setColor(1, 1, 1, 1) + love.graphics.rectangle("fill", -315, 30, 120, 60) + self.abot:draw() + + self.spr:draw() +end + +function Nene:release() + for _, v in pairs(abotVisualizers) do + v = nil + end + ABOT_IMAGE = nil +end + +return Nene \ No newline at end of file diff --git a/src/love/main.lua b/src/love/main.lua index 0939d808..6e990caa 100644 --- a/src/love/main.lua +++ b/src/love/main.lua @@ -206,6 +206,10 @@ function love.load() loadSavedata() settings.pixelPerfect = false + -- Load Characters + BaseCharacter = require "data.characters.BaseCharacter" + NeneCharacter = require "data.characters.NeneCharacter" + -- Modding importMods = require "modding.importMods" diff --git a/src/love/modules/constants.lua b/src/love/modules/constants.lua index f09a7f53..f532de8b 100644 --- a/src/love/modules/constants.lua +++ b/src/love/modules/constants.lua @@ -133,6 +133,12 @@ CONSTANTS.WEEKS = { MISS_SCORE = 0, SCORING_OFFSET = 54.00, SCORING_SLOPE = 0.080, + LANE_SHADERS = { + love.graphics.newShader("shaders/RGBPallette.glsl"), + love.graphics.newShader("shaders/RGBPallette.glsl"), + love.graphics.newShader("shaders/RGBPallette.glsl"), + love.graphics.newShader("shaders/RGBPallette.glsl") + } } CONSTANTS.MISC = { diff --git a/src/love/modules/extras.lua b/src/love/modules/extras.lua index 104a37f7..9c1bc46b 100644 --- a/src/love/modules/extras.lua +++ b/src/love/modules/extras.lua @@ -60,9 +60,13 @@ function weeks.legacyGenerateNotes(self, chart) local arrowsTable = enemyNote and enemyArrows or boyfriendArrows noteObject.x = arrowsTable[id].x - noteObject.shader = love.graphics.newShader("shaders/RGBPallette.glsl") + noteObject.shader = CONSTANTS.WEEKS.LANE_SHADERS[id] local r, g, b = CONSTANTS.ARROW_COLORS[id][1], CONSTANTS.ARROW_COLORS[id][2], CONSTANTS.ARROW_COLORS[id][3] + if dataStuff.r or dataStuff.g or dataStuff.b then + noteObject.shader = love.graphics.newShader("shaders/RGBPallette.glsl") + end + if dataStuff.r then r = {decToRGB(dataStuff.r)} end if dataStuff.g then g = {decToRGB(dataStuff.g)} end if dataStuff.b then b = {decToRGB(dataStuff.b)} end @@ -188,10 +192,6 @@ function weeks.cneGenerateNotes(self, chart, metadata) if settings.downscroll then noteObject.sizeY = -1 end - noteObject.x = arrowsTable[id].x - noteObject.shader = love.graphics.newShader("shaders/RGBPallette.glsl") - local r, g, b = CONSTANTS.ARROW_COLORS[id][1], CONSTANTS.ARROW_COLORS[id][2], CONSTANTS.ARROW_COLORS[id][3] - local dataStuff = {} if noteTypes[noteVer] then dataStuff = noteTypes[noteVer] @@ -199,6 +199,14 @@ function weeks.cneGenerateNotes(self, chart, metadata) dataStuff = noteTypes["normal"] end + noteObject.x = arrowsTable[id].x + noteObject.shader = CONSTANTS.WEEKS.LANE_SHADERS[id] + local r, g, b = CONSTANTS.ARROW_COLORS[id][1], CONSTANTS.ARROW_COLORS[id][2], CONSTANTS.ARROW_COLORS[id][3] + + if dataStuff.r or dataStuff.g or dataStuff.b then + noteObject.shader = love.graphics.newShader("shaders/RGBPallette.glsl") + end + if dataStuff.r then r = {decToRGB(dataStuff.r)} end if dataStuff.g then g = {decToRGB(dataStuff.g)} end if dataStuff.b then b = {decToRGB(dataStuff.b)} end diff --git a/src/love/stages/city.lua b/src/love/stages/city.lua index 92d02ff1..d5e7efbe 100644 --- a/src/love/stages/city.lua +++ b/src/love/stages/city.lua @@ -46,7 +46,7 @@ return { stageImages["Train"].x, stageImages["Train"].y = 3000, -25 - enemy = love.filesystem.load("sprites/characters/pico-enemy.lua")() + enemy = BaseCharacter("sprites/characters/pico-enemy.lua") sounds.trainPassing = love.audio.newSource("sounds/week3/train.ogg", "static") diff --git a/src/love/stages/evilSchool.lua b/src/love/stages/evilSchool.lua index af02c09f..06286b99 100644 --- a/src/love/stages/evilSchool.lua +++ b/src/love/stages/evilSchool.lua @@ -24,7 +24,7 @@ return { stageImages = { ["Evil School"] = love.filesystem.load("sprites/week6/evil-school.lua")() -- evil school } - enemy = love.filesystem.load("sprites/characters/spirit.lua")() + enemy = BaseCharacter("sprites/characters/spirit.lua") enemy.x, enemy.y = -340, -20 girlfriend.x, girlfriend.y = 30, -50 diff --git a/src/love/stages/hauntedHouse.lua b/src/love/stages/hauntedHouse.lua index db5fc680..c37086c1 100644 --- a/src/love/stages/hauntedHouse.lua +++ b/src/love/stages/hauntedHouse.lua @@ -23,7 +23,7 @@ return { ["Haunted House"] = love.filesystem.load("sprites/week2/haunted-house.lua")() -- Haunted House } - enemy = love.filesystem.load("sprites/characters/skid-and-pump.lua")() + enemy = BaseCharacter("sprites/characters/skid-and-pump.lua") girlfriend.x, girlfriend.y = -200, 50 enemy.x, enemy.y = -610, 140 diff --git a/src/love/stages/mall.lua b/src/love/stages/mall.lua index f23043e4..3cbff76b 100644 --- a/src/love/stages/mall.lua +++ b/src/love/stages/mall.lua @@ -40,10 +40,10 @@ return { stageImages["Bottom Bop"].x, stageImages["Bottom Bop"].y = -75, 375 stageImages["Santa"].x, stageImages["Santa"].y = -1350, 410 end - girlfriend = love.filesystem.load("sprites/characters/girlfriend-christmas.lua")() - enemy = love.filesystem.load("sprites/characters/dearest-duo.lua")() - boyfriend = love.filesystem.load("sprites/characters/boyfriend-christmas.lua")() - fakeBoyfriend = love.filesystem.load("sprites/characters/boyfriend.lua")() -- Used for game over + girlfriend = BaseCharacter("sprites/characters/girlfriend-christmas.lua") + enemy = BaseCharacter("sprites/characters/dearest-duo.lua") + boyfriend = BaseCharacter("sprites/characters/boyfriend-christmas.lua") + fakeBoyfriend = BaseCharacter("sprites/characters/boyfriend.lua") -- Used for game over camera.defaultZoom = 0.9 diff --git a/src/love/stages/school.lua b/src/love/stages/school.lua index f0431b92..24e176d1 100644 --- a/src/love/stages/school.lua +++ b/src/love/stages/school.lua @@ -30,11 +30,11 @@ return { ["Petals"] = love.filesystem.load("sprites/week6/petals.lua")(), -- petals ["Freaks"] = love.filesystem.load("sprites/week6/freaks.lua")() -- freaks } - girlfriend = love.filesystem.load("sprites/characters/girlfriend-pixel.lua")() - boyfriend = love.filesystem.load("sprites/characters/boyfriend-pixel.lua")() - enemy = love.filesystem.load("sprites/characters/senpai.lua")() + girlfriend = BaseCharacter("sprites/characters/girlfriend-pixel.lua") + boyfriend = BaseCharacter("sprites/characters/boyfriend-pixel.lua") + enemy = BaseCharacter("sprites/characters/senpai.lua") enemy.colours = {255,170,111} - fakeBoyfriend = love.filesystem.load("sprites/characters/boyfriend-pixel-dead.lua")() -- Used for game over + fakeBoyfriend = BaseCharacter("sprites/characters/boyfriend-pixel-dead.lua") -- Used for game over if settings.pixelPerfect then girlfriend.x, girlfriend.y = 0, 0 boyfriend.x, boyfriend.y = 50, 30 @@ -50,11 +50,11 @@ return { load = function(self) if song == 3 then - enemy = love.filesystem.load("sprites/characters/spirit.lua")() + enemy = BaseCharacter("sprites/characters/spirit.lua") stageImages["School"] = love.filesystem.load("sprites/week6/evil-school.lua")() enemy.x, enemy.y = -50, 0 elseif song == 2 then - enemy = love.filesystem.load("sprites/characters/senpai-angry.lua")() + enemy = BaseCharacter("sprites/characters/senpai-angry.lua") enemy.colours = {255,170,111} stageImages["Freaks"]:animate("dissuaded", true) enemy.x, enemy.y = -50, 0 diff --git a/src/love/stages/stage.lua b/src/love/stages/stage.lua index f493ee64..d39316d9 100644 --- a/src/love/stages/stage.lua +++ b/src/love/stages/stage.lua @@ -28,7 +28,7 @@ return { stageImages["Stage Front"].y = 400 stageImages["Curtains"].y = -100 - enemy = love.filesystem.load("sprites/characters/daddy-dearest.lua")() + enemy = BaseCharacter("sprites/characters/daddy-dearest.lua") girlfriend.x, girlfriend.y = 30, -90 enemy.x, enemy.y = -380, -110 diff --git a/src/love/stages/streets.lua b/src/love/stages/streets.lua index 9a0e1f22..3d53f559 100644 --- a/src/love/stages/streets.lua +++ b/src/love/stages/streets.lua @@ -17,11 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . ------------------------------------------------------------------------------]] -ABOT_IMAGE = nil -local abotVisualizers = {} -local MAX_ABOT_VIZ = 7 -local VIS_TIME_MAX = 0.033333333333333333 -local deltaCurTime = 0 + return { enter = function() @@ -35,129 +31,20 @@ return { ["highwayLights"] = graphics.newImage(graphics.imagePath("weekend1/phillyHighwayLights")), ["skyline"] = graphics.newImage(graphics.imagePath("weekend1/phillySkyline")), ["spraycanPile"] = graphics.newImage(graphics.imagePath("weekend1/SpraycanPile")), - ["abot"] = graphics.newImage(graphics.imagePath("weekend1/abot")), - ["abotBack"] = graphics.newImage(graphics.imagePath("weekend1/stereoBG")), } - ABOT_IMAGE = love.graphics.newImage(graphics.imagePath("weekend1/aBotViz")) - stageImages["skybox"].x, stageImages["skybox"].y = 351, -300 stageImages["spraycanPile"].x, stageImages["spraycanPile"].y = -314, 248 stageImages["highwayLights"].x, stageImages["highwayLights"].y = -272, -459 stageImages["highway"].x, stageImages["highway"].y = -413, -325 stageImages["construction"].x, stageImages["construction"].y = 825, -145 stageImages["smog"].x, stageImages["smog"].y = 0, -140 - stageImages["abot"].x, stageImages["abot"].y = 62, -20 - stageImages["abotBack"].x, stageImages["abotBack"].y = 62, -20 stageImages["skyline"].x, stageImages["skyline"].y = 100, -227 stageImages["foregroundCity"].x, stageImages["foregroundCity"].y = -386, 38 - for i = 1, MAX_ABOT_VIZ do - local viz = love.filesystem.load("sprites/weekend1/abotViz.lua")() - --viz:animate(tostring(i) .. "_1", false) - viz.x = -170 + (viz:getFrameWidth()/2 + 25) * i - viz.y = 0--stageImages["abot"].y + 120 - --print(viz.x) - table.insert(abotVisualizers, viz) - end - enemy = love.filesystem.load("sprites/characters/darnell.lua")() boyfriend = love.filesystem.load("sprites/characters/pico-player.lua")() - girlfriend = love.filesystem.load("sprites/characters/nene.lua")() - - girlfriend.STATE_DEFAULT = 0 - girlfriend.STATE_PRE_RAISE = 1 - girlfriend.STATE_RAISE = 2 - girlfriend.STATE_READY = 3 - girlfriend.STATE_LOWER = 4 - girlfriend.currentState = girlfriend.STATE_DEFAULT - - girlfriend.MIN_BLINK_DELAY = 3 - girlfriend.MAX_BLINK_DELAY = 7 - girlfriend.blinkCountdown = girlfriend.MIN_BLINK_DELAY - - girlfriend.animationFinished = false - - function girlfriend:transitionState() - if self.currentState == self.STATE_DEFAULT then - if health <= 0.5 then - self.currentState = self.STATE_PRE_RAISE - else - self.currentState = self.STATE_DEFAULT - end - elseif self.currentState == self.STATE_PRE_RAISE then - if health > 0.5 then - self.currentState = self.STATE_DEFAULT - elseif self.animationFinished then - self.currentState = self.STATE_RAISE - self:animate("knifeRaise", false, function() - self:transitionState() - self.animationFinished = true - end) - self.animationFinished = false - end - elseif self.currentState == self.STATE_RAISE then - if self.animationFinished then - self.currentState = self.STATE_READY - self.animationFinished = false - end - elseif self.currentState == self.STATE_READY then - if health > 0.5 then - self.currentState = self.STATE_LOWER - self:animate("knifeLower", false, function() - self:transitionState() - self.animationFinished = true - end) - end - elseif self.currentState == self.STATE_LOWER then - if self.animationFinished then - self.currentState = self.STATE_DEFAULT - self.animationFinished = false - end - else - self.currentState = self.STATE_DEFAULT - end - end - - function girlfriend:updateOverride(dt) - self:transitionState() - - if self.currentState == self.STATE_PRE_RAISE then - if self:getAnimName() == "danceLeft" and self:getFrameFromCurrentAnim() == self:getFrameCountFromCurrentAnim()-2 then - self.animationFinished = true - self:transitionState() - end - end - end - - function girlfriend:beat(beat) - local beat = math.floor(beat) or 0 - if self.isCharacter then - if beatHandler.onBeat() then - if beat % self.danceSpeed == 0 then - self.danced = not self.danced - - if self.currentState == self.STATE_DEFAULT then - if self.danced then - self:animate("danceLeft", false) - else - self:animate("danceRight", false) - end - elseif self.currentState == self.STATE_PRE_RAISE then - self:animate("danceLeft") - self.danced = true - elseif self.currentState == self.STATE_READY then - if self.blinkCountdown == 0 then - self:animate("knifeIdle", false) - self.blinkCountdown = love.math.random(self.MIN_BLINK_DELAY, self.MAX_BLINK_DELAY) - else - self.blinkCountdown = self.blinkCountdown - 1 - end - end - end - end - end - end + girlfriend = NeneCharacter() enemy.x, enemy.y = -449, 45 boyfriend.x, boyfriend.y = 646, 106 @@ -174,7 +61,7 @@ return { end, update = function(self, dt) - deltaCurTime = deltaCurTime + dt + end, draw = function() @@ -205,39 +92,12 @@ return { love.graphics.translate(camera.x * 1.1, camera.y * 1.1) stageImages["foreground"]:draw() - stageImages["abotBack"]:draw() - if curOS ~= "NX" then - local fftArray = lovefftINST:get() - local bfFFTArray, enemyFFTArray = {}, {} - local time = inst:tell() - if deltaCurTime > VIS_TIME_MAX then - deltaCurTime = 0 - --print("Time: " .. time) - lovefftINST:updatePlayTime(time) - end - -- we only have 7 bars - local MAX_BARS = 7 - local forEach = #fftArray / MAX_BARS - local index = 1 - for i = 1, #fftArray, forEach do - local i = math.floor(i) - -- 7 bars - local barHeight = fftArray[i] * 720*100 - --print(index, i, barHeight) - -- convert bar height from a number from 1-6 - local animNum = math.floor(math.remap(barHeight, 0, 720, 1, 6)) - --print(index, i, animNum) - abotVisualizers[index]:animate(tostring(index) .. "_" .. tostring(animNum), false) - abotVisualizers[index]:draw() - index = index + 1 - end - end - graphics.setColor(1, 1, 1, 1) - love.graphics.rectangle("fill", -315, 30, 120, 60) - stageImages["abot"]:draw() + girlfriend:draw() + enemy:draw() boyfriend:draw() + stageImages["spraycanPile"]:draw() love.graphics.pop() end, @@ -246,10 +106,7 @@ return { for _, v in pairs(stageImages) do v = nil end - for _, v in pairs(abotVisualizers) do - v = nil - end - ABOT_IMAGE = nil + girlfriend:release() graphics.clearCache() end diff --git a/src/love/stages/sunset.lua b/src/love/stages/sunset.lua index 9c86d821..89abb388 100644 --- a/src/love/stages/sunset.lua +++ b/src/love/stages/sunset.lua @@ -8,10 +8,10 @@ return { ["Limo"] = love.filesystem.load("sprites/week4/limo.lua")(), -- limo ["Fast Car"] = graphics.newImage(graphics.imagePath("week4/fastCarLol")) -- fast-car } - girlfriend = love.filesystem.load("sprites/characters/girlfriend-car.lua")() - enemy = love.filesystem.load("sprites/characters/mommy-mearest.lua")() - boyfriend = love.filesystem.load("sprites/characters/boyfriend-car.lua")() - fakeBoyfriend = love.filesystem.load("sprites/characters/boyfriend.lua")() -- Used for game over + girlfriend = BaseCharacter("sprites/characters/girlfriend-car.lua") + enemy = BaseCharacter("sprites/characters/mommy-mearest.lua") + boyfriend = BaseCharacter("sprites/characters/boyfriend-car.lua") + fakeBoyfriend = BaseCharacter("sprites/characters/boyfriend.lua") -- Used for game over sounds.car = { love.audio.newSource("sounds/week4/carPass0.ogg", "static"), diff --git a/src/love/stages/tank.lua b/src/love/stages/tank.lua index 6a924995..0fcf9364 100644 --- a/src/love/stages/tank.lua +++ b/src/love/stages/tank.lua @@ -11,8 +11,8 @@ return { for i = 0, 5 do stageImages["Tank " .. i+1] = love.filesystem.load("sprites/week7/tank" .. i .. ".lua")() -- all the tank viewers end - girlfriend = love.filesystem.load("sprites/characters/gfTankmen.lua")() - enemy = love.filesystem.load("sprites/characters/tankmanCaptain.lua")() + girlfriend = BaseCharacter("sprites/characters/gfTankmen.lua") + enemy = BaseCharacter("sprites/characters/tankmanCaptain.lua") stageImages["Tank 1"].x, stageImages["Tank 1"].y = -1000, 603 stageImages["Tank 2"].x, stageImages["Tank 2"].y = -675, 739 stageImages["Tank 3"].x, stageImages["Tank 3"].y = -250, 614 diff --git a/src/love/states/weeks.lua b/src/love/states/weeks.lua index ea0840e3..420c3346 100644 --- a/src/love/states/weeks.lua +++ b/src/love/states/weeks.lua @@ -42,6 +42,8 @@ healthLerp = 1 local dying = false +noteSprites = nil + local allStates = { sickCounter = 0, goodCounter = 0, @@ -110,8 +112,8 @@ return { rating.sizeX, rating.sizeY = 0.75, 0.75 - girlfriend = love.filesystem.load("sprites/characters/girlfriend.lua")() - boyfriend = love.filesystem.load("sprites/characters/boyfriend.lua")() + girlfriend = BaseCharacter("sprites/characters/girlfriend.lua") + boyfriend = BaseCharacter("sprites/characters/boyfriend.lua") else pixel = true love.graphics.setDefaultFilter("nearest", "nearest") @@ -142,8 +144,8 @@ return { rating = love.filesystem.load("sprites/pixel/rating.lua")() - girlfriend = love.filesystem.load("sprites/characters/girlfriend-pixel.lua")() - boyfriend = love.filesystem.load("sprites/characters/boyfriend-pixel.lua")() + girlfriend = BaseCharacter("sprites/characters/girlfriend-pixel.lua") + boyfriend = BaseCharacter("sprites/characters/boyfriend-pixel.lua") end numbers = {} @@ -242,18 +244,20 @@ return { -- Function so people can override it if they want -- Do some cool note effects or something! function updateNotePos() - for i = 1, 4 do - for j, note in ipairs(boyfriendNotes[i]) do - local strumlineY = boyfriendArrows[i].y - note.y = strumlineY - CONSTANTS.WEEKS.PIXELS_PER_MS * (musicTime - note.time) * speed--[[ (strumlineY - (musicTime - note.time) * (0.45 * math.roundDecimal(speed,2))) ]] - end + for i = 1, 4 do + for j, note in ipairs(boyfriendNotes[i]) do + if note.time - musicTime >= 15000 then break end + local strumlineY = boyfriendArrows[i].y + note.y = strumlineY - CONSTANTS.WEEKS.PIXELS_PER_MS * (musicTime - note.time) * speed--[[ (strumlineY - (musicTime - note.time) * (0.45 * math.roundDecimal(speed,2))) ]] + end - for _, note in ipairs(enemyNotes[i]) do - local strumlineY = enemyArrows[i].y - note.y = strumlineY - CONSTANTS.WEEKS.PIXELS_PER_MS * (musicTime - note.time) * speed--[[ (strumlineY - (musicTime - note.time) * (0.45 * math.roundDecimal(speed,2))) ]] - end + for _, note in ipairs(enemyNotes[i]) do + if note.time - musicTime >= 15000 then break end + local strumlineY = enemyArrows[i].y + note.y = strumlineY - CONSTANTS.WEEKS.PIXELS_PER_MS * (musicTime - note.time) * speed--[[ (strumlineY - (musicTime - note.time) * (0.45 * math.roundDecimal(speed,2))) ]] end end +end enemyIcon = icon.newIcon(icon.imagePath((enemy and enemy.icon) and enemy.icon) or "dad", (enemy and enemy.optionsTable) and (enemy.optionsTable.scale or 1) or 1) boyfriendIcon = icon.newIcon(icon.imagePath((boyfriend and boyfriend.icon) and boyfriend.icon) or "bf", (boyfriend and boyfriend.optionsTable) and (boyfriend.optionsTable.scale or 1) or 1) @@ -376,11 +380,11 @@ return { if not noteSprites then self:setNoteSprites( -- the default sprites - love.filesystem.load("sprites/receptor.lua")(), - love.filesystem.load("sprites/left-arrow.lua")(), - love.filesystem.load("sprites/down-arrow.lua")(), - love.filesystem.load("sprites/up-arrow.lua")(), - love.filesystem.load("sprites/right-arrow.lua")() + love.filesystem.load("sprites/receptor.lua"), + love.filesystem.load("sprites/left-arrow.lua"), + love.filesystem.load("sprites/down-arrow.lua"), + love.filesystem.load("sprites/up-arrow.lua"), + love.filesystem.load("sprites/right-arrow.lua") ) end @@ -399,8 +403,8 @@ return { for i = 1, 4 do if not pixel then - enemyArrows[i].shader = love.graphics.newShader("shaders/RGBPallette.glsl") - boyfriendArrows[i].shader = love.graphics.newShader("shaders/RGBPallette.glsl") + enemyArrows[i].shader = CONSTANTS.WEEKS.LANE_SHADERS[i] + boyfriendArrows[i].shader = CONSTANTS.WEEKS.LANE_SHADERS[i] enemyArrows[i].shaderEnabled = false boyfriendArrows[i].shaderEnabled = false @@ -538,8 +542,12 @@ return { local arrowsTable = enemyNote and enemyArrows or boyfriendArrows noteObject.x = arrowsTable[data].x - noteObject.shader = love.graphics.newShader("shaders/RGBPallette.glsl") - local r, g, b = CONSTANTS.ARROW_COLORS[data][1], CONSTANTS.ARROW_COLORS[data][2], CONSTANTS.ARROW_COLORS[data][3] + noteObject.shader = CONSTANTS.WEEKS.LANE_SHADERS[data] + local r, g, b = CONSTANTS.ARROW_COLORS[data][1], CONSTANTS.ARROW_COLORS[data][2], CONSTANTS.ARROW_COLORS[data][3] + + if dataStuff.r or dataStuff.g or dataStuff.b then + noteObject.shader = love.graphics.newShader("shaders/RGBPallette.glsl") + end if dataStuff.r then r = {decToRGB(dataStuff.r)} end if dataStuff.g then g = {decToRGB(dataStuff.g)} end diff --git a/src/love/weeks/test.lua b/src/love/weeks/test.lua index a6c15723..9d35feff 100644 --- a/src/love/weeks/test.lua +++ b/src/love/weeks/test.lua @@ -7,7 +7,7 @@ return { stages["stage"]:enter() enemy = nil love.graphics.setDefaultFilter("nearest", "nearest") - enemy = love.filesystem.load("sprites/characters/boyfriend-pixel.lua")() + enemy = BaseCharacter("sprites/characters/boyfriend-pixel.lua") love.graphics.setDefaultFilter("linear", "linear") enemy.flipX = true diff --git a/src/love/weeks/tutorial.lua b/src/love/weeks/tutorial.lua index 3c7b72eb..402ae5b2 100644 --- a/src/love/weeks/tutorial.lua +++ b/src/love/weeks/tutorial.lua @@ -38,7 +38,7 @@ return { curtains.y = -100 girlfriend = nil - enemy = love.filesystem.load("sprites/characters/girlfriend.lua")() + enemy = BaseCharacter("sprites/characters/girlfriend.lua") enemy.x, enemy.y = 30, -90 boyfriend.x, boyfriend.y = 260, 100 diff --git a/src/love/weeks/week2.lua b/src/love/weeks/week2.lua index 0307b402..74e94991 100644 --- a/src/love/weeks/week2.lua +++ b/src/love/weeks/week2.lua @@ -42,7 +42,7 @@ return { load = function(self) if song == 3 then - enemy = love.filesystem.load("sprites/characters/monster.lua")() + enemy = BaseCharacter("sprites/characters/monster.lua") enemy.x, enemy.y = -610, 120 diff --git a/src/love/weeks/week5.lua b/src/love/weeks/week5.lua index 5f826f62..443ac736 100644 --- a/src/love/weeks/week5.lua +++ b/src/love/weeks/week5.lua @@ -55,7 +55,7 @@ return { camera.zoom = 0.9 end - enemy = love.filesystem.load("sprites/characters/monster-christmas.lua")() + enemy = BaseCharacter("sprites/characters/monster-christmas.lua") enemy.x, enemy.y = -780, 420 diff --git a/src/love/weeks/week6.lua b/src/love/weeks/week6.lua index d2463aff..539ba2e9 100644 --- a/src/love/weeks/week6.lua +++ b/src/love/weeks/week6.lua @@ -27,7 +27,7 @@ return { camera.defaultZoom = 0.85 camera.zoom = 0.85 - fakeBoyfriend = love.filesystem.load("sprites/characters/boyfriend-pixel-dead.lua")() + fakeBoyfriend = BaseCharacter("sprites/characters/boyfriend-pixel-dead.lua") fakeBoyfriend.x, fakeBoyfriend.y = 300, 190 @@ -49,16 +49,16 @@ return { load = function(self) if song == 3 then school = love.filesystem.load("sprites/week6/evil-school.lua")() - enemy = love.filesystem.load("sprites/characters/spirit.lua")() + enemy = BaseCharacter("sprites/characters/spirit.lua") stages["evilSchool"]:enter() stages["evilSchool"]:load() stages["school"]:leave() elseif song == 2 then - enemy = love.filesystem.load("sprites/characters/senpai-angry.lua")() + enemy = BaseCharacter("sprites/characters/senpai-angry.lua") stages["school"]:load() else - enemy = love.filesystem.load("sprites/characters/senpai.lua")() + enemy = BaseCharacter("sprites/characters/senpai.lua") stages["school"]:load() end diff --git a/src/love/weeks/week7.lua b/src/love/weeks/week7.lua index 98c88182..5710a831 100644 --- a/src/love/weeks/week7.lua +++ b/src/love/weeks/week7.lua @@ -28,11 +28,11 @@ return { stages["tank"]:load() if song == 3 then - girlfriend = love.filesystem.load("sprites/characters/picoSpeaker.lua")() + girlfriend = BaseCharacter("sprites/characters/picoSpeaker.lua") girlfriend.x, girlfriend.y = 105, 110 - boyfriend = love.filesystem.load("sprites/characters/bfAndGF.lua")() + boyfriend = BaseCharacter("sprites/characters/bfAndGF.lua") boyfriend.x, boyfriend.y = 460, 423 - fakeBoyfriend = love.filesystem.load("sprites/characters/bfAndGFdead.lua")() + fakeBoyfriend = BaseCharacter("sprites/characters/bfAndGFdead.lua") fakeBoyfriend.x, fakeBoyfriend.y = 460, 423 if not died and storyMode then video = cutscene.video("videos/stressCutscene.ogv")