local myTypes = require("modules.types") local files = require("modules.files") local module = {} local introVideo local sillyVideo local playedIntro = false local mirror local evilMirror local oldPosition local oldSpritePosition local showCutscene = false local endedIntro = false local evilAtlas local startedEvilVideo = false local endedEvilVideo = false local paused = false local evilShaderScript = [[ vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords) { vec4 pixel = Texel(texture, texture_coords); //Current pixel pixel.r = pixel.r - 0.1; pixel.g = pixel.g - 0.1; if (pixel.b > 0.05) { pixel.b = pixel.b + 0.1; } return pixel; } ]] local rain = love.graphics.newShader("shaders/rain.frag") local evilShader = love.graphics.newShader(evilShaderScript) --receptor.position = myTypes.Vector2(600 + (79* i), settings.Downscroll and 430 or 0) local nextplayerReceptorPosition = myTypes.Vector2(600, 430) -- Its gonna be a forced downscroll so idc lmao lmao skill issue local currentplayerReceptorPosition = myTypes.Vector2(600, 430) local moveAway = false function module.onCreate() introVideo = love.graphics.newVideo("videos/open.ogv") sillyVideo = love.graphics.newVideo("videos/SO_STAY_FINAL_1.ogv") sillyVideo:getSource():setVolume(0) mirror = myTypes.Image("images/billy/silly_mirror.png") mirror.layer = -20 mirror.resize = myTypes.Vector2(1,1) mirror.position.y = -300 mirror.position.x = -800 evilMirror = myTypes.Image("images/billy/broken_mirror.png") evilMirror.layer = -21 -- I will put this one forward on break mirror event ig evilMirror.resize = myTypes.Vector2(1,1) evilMirror.position.y = -300 evilMirror.position.x = -800 local floor = myTypes.Rect("images/billy/bgAssets.png", "images/billy/bgAssets.json") floor.layer = -15 floor:Frame("Silly_floor", 0) floor.quads["Silly_floor"][0].resize = myTypes.Vector2(1.4, 1) floor.position.y = -300 floor.position.x = -100 local asset1 = myTypes.Rect("images/billy/bgAssets.png", "images/billy/bgAssets.json") asset1.layer = -10 asset1:Frame("Silly_idk_1", 0) asset1.quads["Silly_idk_1"][0].resize = myTypes.Vector2(1, 1) asset1.position.y = -270 asset1.position.x = -400 for index, receptor in next, module.shared.opponentReceptors do receptor.ui = false receptor.position = myTypes.Vector2(100 * (index - 1), 300) receptor.layer = -5 end -- local asset2 = myTypes.Rect("images/billy/bgAssets.png", "images/billy/bgAssets.json") -- asset2.layer = -8 -- asset2:Frame("Silly_idk_2", 0) -- asset2.quads["Silly_idk_2"][0].resize = myTypes.Vector2(0.5, 0.5) -- local asset3 = myTypes.Rect("images/billy/bgAssets.png", "images/billy/bgAssets.json") -- asset3.layer = -7 -- asset3:Frame("Yo_y_mi_silly_pana", 0) -- asset3.quads["Yo_y_mi_silly_pana"][0].resize = myTypes.Vector2(0.5, 0.5) evilAtlas = myTypes.render.Atlas("sprites/lyric") evilAtlas.position = myTypes.Vector2(50000,50000) evilAtlas.layer = 1 module.shared.settings.Downscroll = true -- forcing downscroll because i am not coding upscroll positions dawg moveAway = false end function module.onEvent(event) if event.name == "ill make" then if event.var1 == "anim" then oldPosition = module.shared.characters.dad.stagePosition oldSpritePosition = module.shared.characters.dad.sprite.position module.shared.characters.dad.stagePosition = myTypes.Vector2(50000,5000) module.shared.characters.dad.sprite.position = myTypes.Vector2(50000,5000) evilAtlas.position = myTypes.Vector2(920, 600) evilAtlas:PlayAnimation("story_of_yourtalebilly") elseif event.var1 == "vid" then evilAtlas:Destroy() module.shared.characters.dad.stagePosition = oldPosition module.shared.characters.dad.sprite.position = oldPosition sillyVideo:play() startedEvilVideo = true nextplayerReceptorPosition = myTypes.Vector2(324, -90) for index, receptor in next, module.shared.opponentReceptors do receptor.ui = false receptor.position = myTypes.Vector2(10000,10000) -- not visible honk mimimi receptor.layer = -5 end elseif event.var1 == "break mirror" then evilMirror.layer = -19 elseif event.var1 == "die" then elseif event.var1 == "pre" then nextplayerReceptorPosition = myTypes.Vector2(600, -90) --Those are tweened to look bettah moveAway = true module.shared.ui.timebar = false module.shared.ui.health = false module.shared.ui.score = false module.shared.ui.ratings = false --[[ local ui = { timebar = true, healthIcons = true, -- If halth is false it wont render either way health = true, score = true, ratings = true, } ]] elseif event.var1 == "hud in" then nextplayerReceptorPosition = myTypes.Vector2(324, 430) end end end function module.onUpdate(dt, el) local mousex, mousey = love.mouse:getPosition() rain:send("u_mouse", {mousex, mousey}) rain:send("u_resolution", {1280, 720}) rain:send("u_time", el/1000) currentplayerReceptorPosition = currentplayerReceptorPosition:Lerp(nextplayerReceptorPosition, .05) for index, note in next, module.shared.notes do if not note.mustPress then note.sprite.ui = false note.sprite.layer = -3 end end for index, note in next, module.shared.holds do if not note.mustPress then note.sprite.ui = false note.sprite.layer = -4 end end for index, receptor in next, module.shared.receptors do receptor.position = myTypes.Vector2(currentplayerReceptorPosition.x + 79 * (index - 1), currentplayerReceptorPosition.y) end for index, receptor in next, module.shared.splashes do receptor.position = myTypes.Vector2(currentplayerReceptorPosition.x - 30 + 79 * (index - 1), currentplayerReceptorPosition.y - 30) end for index, receptor in next, module.shared.opponentReceptors do receptor.position = receptor.position:Lerp(moveAway and myTypes.Vector2(100 * (index - 1), -100) or myTypes.Vector2(100 * (index - 1), 300), .05) end if el > 0 and not introVideo:isPlaying() and not paused and not playedIntro then introVideo:play() playedIntro = true elseif el > 0 and not introVideo:isPlaying() and not paused and playedIntro then endedIntro = true module.shared.globalShader = rain end if not sillyVideo:isPlaying() and not paused and startedEvilVideo and not endedEvilVideo then endedEvilVideo = true nextplayerReceptorPosition = myTypes.Vector2(600, 430) end end function module.drawBelowUI() -- i am sorry if sillyVideo and sillyVideo:isPlaying() then love.graphics.draw(sillyVideo, 0, 0, 0, 1.5, 1.5) end end function module.onDraw() if introVideo and introVideo:isPlaying() then love.graphics.draw(introVideo, 0, 0, 0, 2.3, 2.3) end end function module.onPause() sillyVideo:pause() introVideo:pause() end function module.onUnpause() if startedEvilVideo and not endedEvilVideo then sillyVideo:play() end if not endedIntro then introVideo:play() end end function module.onClose() if sillyVideo then sillyVideo:pause() sillyVideo = nil end if introVideo then introVideo:pause() introVideo = nil end module.shared.globalShader = nil end return module