TaggedEngine/stages/billy.lua
2025-06-26 16:00:02 +07:00

223 lines
7.7 KiB
Lua

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
end
if not sillyVideo:isPlaying() and not paused and startedEvilVideo and not endedEvilVideo then
endedEvilVideo = true
nextplayerReceptorPosition = myTypes.Vector2(600, 430)
module.shared.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
module.shared.globalShader = nil
end
return module