From f854f8892310eb8d69e0765bed48e02a3964d008 Mon Sep 17 00:00:00 2001 From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com> Date: Sat, 5 Nov 2022 19:12:16 +0100 Subject: [PATCH] week 6 pause!! --- assets/data/scripts/pixel.hx | 82 +++++++++++++ assets/data/scripts/week6-pause.hx | 109 ++++++++++++++++++ assets/images/stages/school/pause/bg.png | Bin 0 -> 2316 bytes assets/images/stages/school/pause/concept.pfi | Bin 0 -> 46676 bytes .../{week6/music => music/pixel}/Lunchbox.mp3 | Bin .../{week6/music => music/pixel}/Lunchbox.ogg | Bin .../music => music/pixel}/LunchboxScary.mp3 | Bin .../music => music/pixel}/LunchboxScary.ogg | Bin .../music => music/pixel}/gameOver-pixel.mp3 | Bin .../music => music/pixel}/gameOver-pixel.ogg | Bin .../pixel}/gameOverEnd-pixel.mp3 | Bin .../pixel}/gameOverEnd-pixel.ogg | Bin assets/shaders/pixelZoomShader.frag | 11 ++ assets/sounds/{ => pixel}/clickText.mp3 | Bin assets/sounds/{ => pixel}/clickText.ogg | Bin assets/sounds/{ => pixel}/pixelText.mp3 | Bin assets/sounds/{ => pixel}/pixelText.ogg | Bin buildnumber.txt | 2 +- source/funkin/game/PlayState.hx | 2 + source/funkin/menus/PauseSubState.hx | 86 +++++++++----- source/funkin/scripting/Script.hx | 1 + source/funkin/scripting/ScriptPack.hx | 13 +++ .../scripting/events/PauseCreationEvent.hx | 23 ++++ .../events/PauseSelectOptionEvent.hx | 13 +++ 24 files changed, 310 insertions(+), 32 deletions(-) create mode 100644 assets/data/scripts/week6-pause.hx create mode 100644 assets/images/stages/school/pause/bg.png create mode 100644 assets/images/stages/school/pause/concept.pfi rename assets/{week6/music => music/pixel}/Lunchbox.mp3 (100%) rename assets/{week6/music => music/pixel}/Lunchbox.ogg (100%) rename assets/{week6/music => music/pixel}/LunchboxScary.mp3 (100%) rename assets/{week6/music => music/pixel}/LunchboxScary.ogg (100%) rename assets/{week6/music => music/pixel}/gameOver-pixel.mp3 (100%) rename assets/{week6/music => music/pixel}/gameOver-pixel.ogg (100%) rename assets/{week6/music => music/pixel}/gameOverEnd-pixel.mp3 (100%) rename assets/{week6/music => music/pixel}/gameOverEnd-pixel.ogg (100%) create mode 100644 assets/shaders/pixelZoomShader.frag rename assets/sounds/{ => pixel}/clickText.mp3 (100%) rename assets/sounds/{ => pixel}/clickText.ogg (100%) rename assets/sounds/{ => pixel}/pixelText.mp3 (100%) rename assets/sounds/{ => pixel}/pixelText.ogg (100%) create mode 100644 source/funkin/scripting/events/PauseCreationEvent.hx create mode 100644 source/funkin/scripting/events/PauseSelectOptionEvent.hx diff --git a/assets/data/scripts/pixel.hx b/assets/data/scripts/pixel.hx index 63eabca2..dc811ac7 100644 --- a/assets/data/scripts/pixel.hx +++ b/assets/data/scripts/pixel.hx @@ -1,9 +1,16 @@ +import flixel.FlxCamera.FlxCameraFollowStyle; + public var pixelNotesForBF = true; public var pixelNotesForDad = true; public var enablePixelUI = true; +public var enableCameraHacks = true; +public var enablePauseMenu = true; var daPixelZoom = 6; +/** + * UI + */ function onNoteCreation(event) { if (event.note.mustPress && !pixelNotesForBF) return; if (!event.note.mustPress && !pixelNotesForDad) return; @@ -51,4 +58,79 @@ function onCountdown(event) { case 2: 'stages/school/ui/set'; case 3: 'stages/school/ui/go'; }; +} + +/** + * CAMERA HACKS!! + */ +function createPost() { + if (enablePauseMenu) { + PauseSubState.script = 'data/scripts/week6-pause'; + } + if (enableCameraHacks) { + FlxG.camera.antialiasing = false; + FlxG.camera.pixelPerfectRender = true; + FlxG.game.stage.quality = 2; + + var newNoteCamera = new FlxCamera(); + newNoteCamera.bgColor = 0; // transparent + FlxG.cameras.add(newNoteCamera, false); + + var pixelSwagWidth = Note.swagWidth + (6 - (Note.swagWidth % 6)); + // TODO: multikey support?? + for(s in 0...4) { + var i = 0; + for(str in [cpuStrums.members[s], playerStrums.members[s]]) { + // TODO: middlescroll??? + str.x = (FlxG.width * (0.25 + (0.5 * i))) + (pixelSwagWidth * (s - 2)); + str.x -= str.x % 6; + str.cameras = [newNoteCamera]; + i++; + } + } + + iconP1.antialiasing = false; + iconP2.antialiasing = false; + + makeCameraPixely(camGame); + makeCameraPixely(newNoteCamera); + } +} + +/** + * Use this to make any camera pixelly (you wont be able to zoom with it anymore!) + */ +public function makeCameraPixely(cam) { + cam.pixelPerfectRender = true; + cam.zoom /= Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y) * 6; + defaultCamZoom /= 6; + + var shad = new CustomShader('pixelZoomShader'); + cam.addShader(shad); + + pixellyCameras.push(cam); + pixellyShaders.push(shad); +} + +function pixelCam(cam) { + makeCameraPixely(cam); +} + +var pixellyCameras = []; +var pixellyShaders = []; + +function updatePost(elapsed) { + for(e in pixellyCameras) { + if (!e.exists) continue; + e.zoom = 1 / 6 / Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y); + } + for(e in pixellyShaders) { + e.pixelZoom = 1 / 6 / Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y); + } + + if (enableCameraHacks) { + notes.forEach(function(n) { + n.y -= n.y % 6; + }); + } } \ No newline at end of file diff --git a/assets/data/scripts/week6-pause.hx b/assets/data/scripts/week6-pause.hx new file mode 100644 index 00000000..2884cd34 --- /dev/null +++ b/assets/data/scripts/week6-pause.hx @@ -0,0 +1,109 @@ +import funkin.ui.FunkinText; +import flixel.text.FlxText; +import flixel.text.FlxTextBorderStyle; +import flixel.util.FlxAxes; + +var pixelScript:Script; +var pauseCam = new FlxCamera(); + +var bg:FlxSprite; +var hand:FlxSprite; + +var texts:Array = []; + +function create(event) { + // cancel default pause menu!! + event.cancel(); + event.music = "pixel/Lunchbox"; + + cameras = []; + + pixelScript = game.scripts.getByName("pixel.hx"); + pixelScript.call("pixelCam", [pauseCam]); + + FlxG.cameras.add(pauseCam, false); + + pauseCam.bgColor = 0x88FF99CC; + pauseCam.alpha = 0; + + bg = new FlxSprite(44 * 6, 14 * 6).loadGraphic(Paths.image('stages/school/pause/bg')); + bg.scale.set(6, 6); + bg.updateHitbox(); + bg.scale.y = 5; + bg.cameras = [pauseCam]; + add(bg); + + text = new FlxText(0, 22 * 6, 0, "Pause", 8, false); + confText(text); + add(text); + + var i = 2; + for(e in menuItems) { + text = new FlxText(0, (22 * 6) + (i * 9 * 6), 0, e, 8, false); + confText(text); + add(text); + texts.push(text); + i++; + } + + hand = new FlxSprite().loadGraphic(Paths.image('stages/school/ui/hand_textbox')); + hand.scale.set(6, 6); + hand.updateHitbox(); + add(hand); + + FlxTween.tween(bg, {"scale.y": 6}, 0.75, {ease: FlxEase.elasticOut}); + + cameras = [pauseCam]; + + FlxG.sound.play(Paths.sound('pixel/clickText')); +} + +function confText(text) { + text.scale.set(6, 6); + text.updateHitbox(); + text.screenCenter(FlxAxes.X); + text.borderStyle = FlxTextBorderStyle.OUTLINE; + text.borderColor = 0xFF953E3E; +} + +function createPost() { +} + +function destroy() { + FlxG.cameras.remove(pauseCam); +} + +function update(elapsed) { + pixelScript.call("updatePost", [elapsed]); + + pauseCam.alpha = lerp(pauseCam.alpha, 1, 0.25); + + var oldSec = curSelected; + if (controls.DOWN_P) + changeSelection(1, false); + if (controls.UP_P) + changeSelection(-1); + + if (oldSec != curSelected) { + FlxG.sound.play(Paths.sound('pixel/pixelText')); + } + + var curText = texts[curSelected]; + hand.setPosition(curText.x - hand.width - 12, curText.y + (text.height - hand.height) - 6); + hand.x -= hand.x % 6; + hand.y -= hand.y % 6; + + if (controls.ACCEPT) { + FlxG.sound.play(Paths.sound('pixel/clickText')); + selectOption(); + } +} + +function changeSelection(change) { + curSelected += change; + + if (curSelected < 0) + curSelected = menuItems.length - 1; + if (curSelected >= menuItems.length) + curSelected = 0; +} \ No newline at end of file diff --git a/assets/images/stages/school/pause/bg.png b/assets/images/stages/school/pause/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..b815158653820157bad23b5c3895f990f85f7f59 GIT binary patch literal 2316 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 literal 0 HcmV?d00001 diff --git a/assets/week6/music/Lunchbox.mp3 b/assets/music/pixel/Lunchbox.mp3 similarity index 100% rename from assets/week6/music/Lunchbox.mp3 rename to assets/music/pixel/Lunchbox.mp3 diff --git a/assets/week6/music/Lunchbox.ogg b/assets/music/pixel/Lunchbox.ogg similarity index 100% rename from assets/week6/music/Lunchbox.ogg rename to assets/music/pixel/Lunchbox.ogg diff --git a/assets/week6/music/LunchboxScary.mp3 b/assets/music/pixel/LunchboxScary.mp3 similarity index 100% rename from assets/week6/music/LunchboxScary.mp3 rename to assets/music/pixel/LunchboxScary.mp3 diff --git a/assets/week6/music/LunchboxScary.ogg b/assets/music/pixel/LunchboxScary.ogg similarity index 100% rename from assets/week6/music/LunchboxScary.ogg rename to assets/music/pixel/LunchboxScary.ogg diff --git a/assets/week6/music/gameOver-pixel.mp3 b/assets/music/pixel/gameOver-pixel.mp3 similarity index 100% rename from assets/week6/music/gameOver-pixel.mp3 rename to assets/music/pixel/gameOver-pixel.mp3 diff --git a/assets/week6/music/gameOver-pixel.ogg b/assets/music/pixel/gameOver-pixel.ogg similarity index 100% rename from assets/week6/music/gameOver-pixel.ogg rename to assets/music/pixel/gameOver-pixel.ogg diff --git a/assets/week6/music/gameOverEnd-pixel.mp3 b/assets/music/pixel/gameOverEnd-pixel.mp3 similarity index 100% rename from assets/week6/music/gameOverEnd-pixel.mp3 rename to assets/music/pixel/gameOverEnd-pixel.mp3 diff --git a/assets/week6/music/gameOverEnd-pixel.ogg b/assets/music/pixel/gameOverEnd-pixel.ogg similarity index 100% rename from assets/week6/music/gameOverEnd-pixel.ogg rename to assets/music/pixel/gameOverEnd-pixel.ogg diff --git a/assets/shaders/pixelZoomShader.frag b/assets/shaders/pixelZoomShader.frag new file mode 100644 index 00000000..17635ebf --- /dev/null +++ b/assets/shaders/pixelZoomShader.frag @@ -0,0 +1,11 @@ +#pragma header + +uniform float pixelZoom; +// zooms the game 6 times +void main() { + vec2 camPos = getCamPos(openfl_TextureCoordv); + + camPos = vec2(0.5, 0.5) + ((camPos - vec2(0.5, 0.5)) * pixelZoom); + + gl_FragColor = textureCam(bitmap, camPos); +} \ No newline at end of file diff --git a/assets/sounds/clickText.mp3 b/assets/sounds/pixel/clickText.mp3 similarity index 100% rename from assets/sounds/clickText.mp3 rename to assets/sounds/pixel/clickText.mp3 diff --git a/assets/sounds/clickText.ogg b/assets/sounds/pixel/clickText.ogg similarity index 100% rename from assets/sounds/clickText.ogg rename to assets/sounds/pixel/clickText.ogg diff --git a/assets/sounds/pixelText.mp3 b/assets/sounds/pixel/pixelText.mp3 similarity index 100% rename from assets/sounds/pixelText.mp3 rename to assets/sounds/pixel/pixelText.mp3 diff --git a/assets/sounds/pixelText.ogg b/assets/sounds/pixel/pixelText.ogg similarity index 100% rename from assets/sounds/pixelText.ogg rename to assets/sounds/pixel/pixelText.ogg diff --git a/buildnumber.txt b/buildnumber.txt index f44396cc..09486914 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -1149 \ No newline at end of file +1155 \ No newline at end of file diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index c5108e4b..1d005218 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -153,6 +153,8 @@ class PlayState extends MusicBeatState override public function create() { instance = this; + PauseSubState.script = ""; + if (FlxG.sound.music != null) FlxG.sound.music.stop(); diff --git a/source/funkin/menus/PauseSubState.hx b/source/funkin/menus/PauseSubState.hx index 3ce161f1..21881d20 100644 --- a/source/funkin/menus/PauseSubState.hx +++ b/source/funkin/menus/PauseSubState.hx @@ -1,5 +1,8 @@ package funkin.menus; +import funkin.scripting.events.PauseCreationEvent; +import funkin.scripting.events.PauseSelectOptionEvent; +import funkin.scripting.Script; import flixel.FlxG; import flixel.FlxSprite; import flixel.FlxSubState; @@ -16,6 +19,8 @@ import funkin.options.keybinds.KeybindsOptions; class PauseSubState extends MusicBeatSubstate { + public static var script:String = ""; + var grpMenuShit:FlxTypedGroup; var menuItems:Array = ['Resume', 'Restart Song', 'Change Controls', 'Options','Exit to menu']; @@ -23,16 +28,33 @@ class PauseSubState extends MusicBeatSubstate var pauseMusic:FlxSound; + public var pauseScript:Script; + + public var game:PlayState = PlayState.instance; // shortcut + + private var __cancelDefault:Bool = false; + public function new(x:Float, y:Float) { super(); - pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true); + pauseScript = Script.create(Paths.script(script)); + pauseScript.setParent(this); + pauseScript.load(); + + var event = new PauseCreationEvent('breakfast', menuItems); + pauseScript.call('create', [event]); + + menuItems = event.options; + + + pauseMusic = new FlxSound().loadEmbedded(Paths.music(event.music), true, true); pauseMusic.volume = 0; pauseMusic.play(false, FlxG.random.int(0, Std.int(pauseMusic.length / 2))); - FlxG.sound.list.add(pauseMusic); + if (__cancelDefault = event.cancelled) return; + var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK); bg.alpha = 0; bg.scrollFactor.set(); @@ -74,56 +96,58 @@ class PauseSubState extends MusicBeatSubstate changeSelection(); cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]]; + + pauseScript.call("createPost"); } override function update(elapsed:Float) { + super.update(elapsed); + if (pauseMusic.volume < 0.5) pauseMusic.volume += 0.01 * elapsed; - super.update(elapsed); + pauseScript.call("update", [elapsed]); + + if (__cancelDefault) return; var upP = controls.UP_P; var downP = controls.DOWN_P; var accepted = controls.ACCEPT; if (upP) - { changeSelection(-1); - } if (downP) - { changeSelection(1); - } - if (accepted) - { - var daSelected:String = menuItems[curSelected]; - - switch (daSelected) - { - case "Resume": - close(); - case "Restart Song": - FlxG.resetState(); - case "Change Controls": - persistentDraw = false; - openSubState(new KeybindsOptions()); - case "Exit to menu": - FlxG.switchState(new MainMenuState()); - } - } - - if (FlxG.keys.justPressed.J) - { - // for reference later! - // PlayerSettings.player1.controls.replaceBinding(Control.LEFT, Keys, FlxKey.J, null); - } + selectOption(); } + public function selectOption() { + var event = new PauseSelectOptionEvent(menuItems[curSelected]); + pauseScript.call("onSelectOption", [event]); + + if (event.cancelled) return; + + var daSelected:String = event.name; + + switch (daSelected) + { + case "Resume": + close(); + case "Restart Song": + FlxG.resetState(); + case "Change Controls": + persistentDraw = false; + openSubState(new KeybindsOptions()); + case "Exit to menu": + FlxG.switchState(new MainMenuState()); + } + } override function destroy() { - pauseMusic.destroy(); + pauseScript.call("destroy"); + if (pauseMusic != null) pauseMusic.destroy(); super.destroy(); } diff --git a/source/funkin/scripting/Script.hx b/source/funkin/scripting/Script.hx index 8826e271..b310094f 100644 --- a/source/funkin/scripting/Script.hx +++ b/source/funkin/scripting/Script.hx @@ -59,6 +59,7 @@ class Script extends FlxBasic implements IFlxDestroyable { "Strum" => funkin.game.Strum, "Character" => funkin.game.Character, "Boyfriend" => funkin.game.Character, // for compatibility + "PauseSubstate" => funkin.menus.PauseSubState, "FreeplayState" => funkin.menus.FreeplayState, "MainMenuState" => funkin.menus.MainMenuState, "PauseSubState" => funkin.menus.PauseSubState, diff --git a/source/funkin/scripting/ScriptPack.hx b/source/funkin/scripting/ScriptPack.hx index 0ea425de..5e8fb394 100644 --- a/source/funkin/scripting/ScriptPack.hx +++ b/source/funkin/scripting/ScriptPack.hx @@ -20,6 +20,19 @@ class ScriptPack extends Script { super(name); } + public function getByPath(name:String) { + for(s in scripts) + if (s.path == name) + return s; + return null; + } + + public function getByName(name:String) { + for(s in scripts) + if (s.fileName == name) + return s; + return null; + } public function importScript(path:String):Script { var script = Script.create(Paths.script(path)); if (script is DummyScript) { diff --git a/source/funkin/scripting/events/PauseCreationEvent.hx b/source/funkin/scripting/events/PauseCreationEvent.hx new file mode 100644 index 00000000..5957462e --- /dev/null +++ b/source/funkin/scripting/events/PauseCreationEvent.hx @@ -0,0 +1,23 @@ +package funkin.scripting.events; + +/** + * CANCEL this event to prevent default behaviour! + */ +class PauseCreationEvent extends CancellableEvent { + /** + * Music that is going to be played + */ + public var music:String; + + /** + * All option names + */ + public var options:Array; + + public function new(music:String, options:Array) { + super(); + + this.music = music; + this.options = options; + } +} \ No newline at end of file diff --git a/source/funkin/scripting/events/PauseSelectOptionEvent.hx b/source/funkin/scripting/events/PauseSelectOptionEvent.hx new file mode 100644 index 00000000..603c5c53 --- /dev/null +++ b/source/funkin/scripting/events/PauseSelectOptionEvent.hx @@ -0,0 +1,13 @@ +package funkin.scripting.events; + +class PauseSelectOptionEvent extends CancellableEvent { + /** + * Option name thats going to be selected + */ + public var name:String; + + public function new(name:String) { + super(); + this.name = name; + } +} \ No newline at end of file