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 evilShader = love.graphics.newShader(evilShaderScript) --receptor.position = Vector2(600 + (79* i), settings.Downscroll and 430 or 0) local nextplayerReceptorPosition = Vector2(600, 430) -- Its gonna be a forced downscroll so idc lmao lmao skill issue local currentplayerReceptorPosition = 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 = Image("images/billy/silly_mirror.png") mirror.layer = -20 mirror.resize = Vector2(1,1) mirror.position.y = -300 mirror.position.x = -800 evilMirror = Image("images/billy/broken_mirror.png") evilMirror.layer = -21 -- I will put this one forward on break mirror event ig evilMirror.resize = Vector2(1,1) evilMirror.position.y = -300 evilMirror.position.x = -800 local floor = Rect("images/billy/bgAssets.png", "images/billy/bgAssets.json") floor.layer = -15 floor:Frame("Silly_floor", 0) floor.quads["Silly_floor"][0].resize = Vector2(1.4, 1) floor.position.y = -300 floor.position.x = -100 local asset1 = 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 = Vector2(1, 1) asset1.position.y = -540 asset1.position.x = -800 for index, receptor in next, sharedVars.opponentReceptors do receptor.ui = false receptor.position = Vector2(200 * (index - 1), 300) receptor.layer = -5 end -- local asset2 = 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 = Vector2(0.5, 0.5) -- local asset3 = 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 = Vector2(0.5, 0.5) evilAtlas = Atlas("sprites/lyric") evilAtlas.position = Vector2(50000,50000) evilAtlas.layer = 1 sharedVars.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 = sharedVars.characters.dad.stagePosition oldSpritePosition = sharedVars.characters.dad.sprite.position sharedVars.characters.dad.stagePosition = Vector2(50000,5000) sharedVars.characters.dad.sprite.position = Vector2(50000,5000) evilAtlas.position = Vector2(920, 600) evilAtlas:PlayAnimation("story_of_yourtalebilly") elseif event.var1 == "vid" then evilAtlas:Destroy() sharedVars.characters.dad.stagePosition = oldPosition sharedVars.characters.dad.sprite.position = oldPosition sillyVideo:play() startedEvilVideo = true nextplayerReceptorPosition = Vector2(324, -90) for index, receptor in next, sharedVars.opponentReceptors do receptor.ui = false receptor.position = 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 = Vector2(600, -90) --Those are tweened to look bettah moveAway = true sharedVars.ui.timebar = false sharedVars.ui.health = false sharedVars.ui.score = false sharedVars.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 = Vector2(324, 430) end end end function module.onUpdate(dt, el) currentplayerReceptorPosition = currentplayerReceptorPosition:Lerp(nextplayerReceptorPosition, .05) for index, note in next, sharedVars.notes do if not note.mustPress then note.sprite.position = sharedVars.opponentReceptors[note.direction].position:Add(Vector2(0, -1000)) note.sprite.layer = -3 note.sprite.ui = false note.sprite.alpha = 0.4 end end for index, note in next, sharedVars.holds do if not note.mustPress then note.sprite.position = sharedVars.opponentReceptors[note.direction].position:Add(Vector2(0, -1000)) note.sprite.layer = -4 note.sprite.ui = false note.sprite.alpha = 0.05 end end for index, receptor in next, sharedVars.receptors do receptor.position = Vector2(currentplayerReceptorPosition.x + 79 * (index - 1), currentplayerReceptorPosition.y) end for index, receptor in next, sharedVars.splashes do receptor.position = Vector2(currentplayerReceptorPosition.x - 30 + 79 * (index - 1), currentplayerReceptorPosition.y - 30) end for index, receptor in next, sharedVars.opponentReceptors do receptor.position = receptor.position:Lerp(moveAway and Vector2(200 * (index - 1), -100) or Vector2(200 * (index - 1), 600), .05) receptor.alpha = 0.4 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 end if not sillyVideo:isPlaying() and not paused and startedEvilVideo and not endedEvilVideo then endedEvilVideo = true nextplayerReceptorPosition = Vector2(600, 430) sharedVars.globalShader = evilShader 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 sharedVars.globalShader = nil end return module