diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index 9eb93945f..cc4d5b11a 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -4,29 +4,18 @@ about: Report a bug or critical performance issue title: 'Bug Report: ' labels: bug --- +#### Please check for duplicates or similar issues, as well performing simple troubleshooting steps (such as clearing cookies, clearing AppData, trying another browser) before submitting an issue. +### If you are playing the game in a browser, what site are you playing it from? +[Newgrounds](https://www.newgrounds.com/portal/view/770371) or [Itch.io](https://ninja-muffin24.itch.io/funkin)? Specify below. -# Please check for duplicates or similar issues, as well performing simple troubleshooting steps (such as clearing cookies, clearing AppData, trying another browser) before submitting an issue. +### If you are playing the game in a browser, what browser are you using? +Chrome (or a Chromium based browser, i.e. Edge, Opera, etc.), Firefox, or Safari? Specify blow. -## Where are you playing the game? - -### Web -- [ ] [Newgrounds](https://www.newgrounds.com/portal/view/770371) -- [ ] [Itch.io](https://ninja-muffin24.itch.io/funkin) - -#### If you are using a web build, what browser are you using? -- [ ] Chrome, or a Chromium based broswer (Edge, Opera, etc.) -- [ ] Firefox, or a Gecko based broswer -- [ ] Safari -- [ ] Other, please specify: - -### Local -- [ ] Windows x86 -- [ ] Windows x86_64 -- [ ] Linux -- [ ] macOS +### If you are playing a downloaded version of the game, what operating system are you using? +Windows (`x86`), Windows (`x86_64`), Linux, or macOS? Specify below. ## What version of the game are you using? Look in the bottom left corner of the main menu. ## Have you identified any steps to reproduce the bug? If so, please describe them below. Use images if possible. -## Please describe your issue. Provide extensive detail and images if possibe. +## Please describe your issue. Provide extensive detail and images if possible. diff --git a/.github/ISSUE_TEMPLATE/enhancement.md b/.github/ISSUE_TEMPLATE/enhancement.md index c86b1a39a..e1cc3ae0d 100644 --- a/.github/ISSUE_TEMPLATE/enhancement.md +++ b/.github/ISSUE_TEMPLATE/enhancement.md @@ -4,7 +4,5 @@ about: Suggest a new feature title: 'Enhancement: ' labels: enhancement --- - -# Please check for duplicates or similar issues before creating this issue. - +#### Please check for duplicates or similar issues before creating this issue. ## What is your suggestion, and why should it be implemented? diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 15f86824b..0adb3cc26 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -4,7 +4,5 @@ about: Ask a general question title: 'Question: ' labels: question --- - -# Please check for duplicates or similar issues before asking your question. - +#### Please check for duplicates or similar issues before asking your question. ## What is your question? diff --git a/.github/PULL_REQUEST_TEMPLATE/bug.md b/.github/PULL_REQUEST_TEMPLATE/bug.md index 70d795633..41914c5ed 100644 --- a/.github/PULL_REQUEST_TEMPLATE/bug.md +++ b/.github/PULL_REQUEST_TEMPLATE/bug.md @@ -4,9 +4,7 @@ about: Fix a bug or critical performance issue title: 'Bug Fix: ' labels: bug --- - -# Please check for duplicates or similar PRs before creating this issue. - +#### Please check for duplicates or similar PRs before creating this issue. ## Does this PR close any issue(s)? If so, link them below. -## Breifly describe the issue(s) fixed. +## Briefly describe the issue(s) fixed. diff --git a/.github/PULL_REQUEST_TEMPLATE/enhancement.md b/.github/PULL_REQUEST_TEMPLATE/enhancement.md index 6af15f1b6..e208deefe 100644 --- a/.github/PULL_REQUEST_TEMPLATE/enhancement.md +++ b/.github/PULL_REQUEST_TEMPLATE/enhancement.md @@ -4,9 +4,7 @@ about: Add a new feature title: 'Enhancement: ' labels: enhancement --- - -# Please check for duplicates or similar PRs before creating this issue. - +#### Please check for duplicates or similar PRs before creating this issue. ## Does this PR close any issue(s)? If so, link them below. ## What do your change(s) add, and why should they be implemented? diff --git a/CHANGELOG.md b/CHANGELOG.md index c60647699..85f61e9a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [unreleased] +### Changed +- Made the transitions between the story mode levels more seamless. +### Fixed +- Chart's and chart editor now support changeBPM, GOD BLESS MTH FOR THIS ONE I BEEN STRUGGLIN WIT THAT SINCE OCTOBER LMAO ([GOD BLESS MTH](https://github.com/ninjamuffin99/Funkin/pull/382)) +- Antialiasing on the skyscraper lights + ## [0.2.7] - 2021-02-02 ### Added - PIXEL DAY UPDATE LOL 1 WEEK LATER diff --git a/assets/data/introText.txt b/assets/data/introText.txt index 37c0fd9a1..86a54fc8f 100644 --- a/assets/data/introText.txt +++ b/assets/data/introText.txt @@ -36,4 +36,5 @@ dababy--biggest inspiration fashionably late--but here it is yooooooooooo--yooooooooo pico funny--pico funny -updates each friday--on time every time \ No newline at end of file +updates each friday--on time every time +shoutouts to mason--for da homies diff --git a/source/ChartingState.hx b/source/ChartingState.hx index 4ed3dd909..e5f0425d1 100644 --- a/source/ChartingState.hx +++ b/source/ChartingState.hx @@ -2,6 +2,7 @@ package; import Section.SwagSection; import Song.SwagSong; +import Conductor.BPMChangeEvent; import flixel.FlxG; import flixel.FlxSprite; import flixel.addons.display.FlxGridOverlay; @@ -117,11 +118,9 @@ class ChartingState extends MusicBeatState song: 'Test', notes: [], bpm: 150, - sections: 0, needsVoices: true, player1: 'bf', player2: 'dad', - sectionLengths: [], speed: 1, validScore: false }; @@ -140,6 +139,7 @@ class ChartingState extends MusicBeatState loadSong(_song.song); Conductor.changeBPM(_song.bpm); + Conductor.mapBPMChanges(_song); bpmTxt = new FlxText(1000, 50, 0, "", 16); bpmTxt.scrollFactor.set(); @@ -366,6 +366,7 @@ class ChartingState extends MusicBeatState vocals.time = 0; FlxG.sound.music.pause(); FlxG.sound.music.time = 0; + changeSection(); }; } @@ -425,6 +426,7 @@ class ChartingState extends MusicBeatState else if (wname == 'song_bpm') { tempBpm = Std.int(nums.value); + Conductor.mapBPMChanges(_song); Conductor.changeBPM(Std.int(nums.value)); } else if (wname == 'note_susLength') @@ -444,12 +446,27 @@ class ChartingState extends MusicBeatState var updatedSection:Bool = false; + /* this function got owned LOL function lengthBpmBullshit():Float { if (_song.notes[curSection].changeBPM) return _song.notes[curSection].lengthInSteps * (_song.notes[curSection].bpm / _song.bpm); else return _song.notes[curSection].lengthInSteps; + }*/ + + function sectionStartTime():Float + { + var daBPM:Int = _song.bpm; + var daPos:Float = 0; + for (i in 0...curSection) + { + if (_song.notes[i].changeBPM) { + daBPM = _song.notes[i].bpm; + } + daPos += 4 * (1000 * 60 / daBPM); + } + return daPos; } override function update(elapsed:Float) @@ -459,23 +476,20 @@ class ChartingState extends MusicBeatState Conductor.songPosition = FlxG.sound.music.time; _song.song = typingShit.text; - strumLine.y = getYfromStrum(Conductor.songPosition % (Conductor.stepCrochet * lengthBpmBullshit())); + strumLine.y = getYfromStrum((Conductor.songPosition - sectionStartTime()) % (Conductor.stepCrochet * _song.notes[curSection].lengthInSteps)); - if (curBeat % 4 == 0) + if (curBeat % 4 == 0 && curStep >= 16 * (curSection + 1)) { - if (curStep > 16 * (curSection + 1)) + trace(curStep); + trace((_song.notes[curSection].lengthInSteps) * (curSection + 1)); + trace('DUMBSHIT'); + + if (_song.notes[curSection + 1] == null) { - trace(curStep); - trace((_song.notes[curSection].lengthInSteps) * (curSection + 1)); - trace('DUMBSHIT'); - - if (_song.notes[curSection + 1] == null) - { - addSection(); - } - - changeSection(curSection + 1, false); + addSection(); } + + changeSection(curSection + 1, false); } FlxG.watch.addQuick('daBeat', curBeat); @@ -674,21 +688,18 @@ class ChartingState extends MusicBeatState function recalculateSteps():Int { - var steps:Int = 0; - var timeShit:Float = 0; - - for (i in 0...curSection) + var lastChange:BPMChangeEvent = { + stepTime: 0, + songTime: 0, + bpm: 0 + } + for (i in 0...Conductor.bpmChangeMap.length) { - steps += 16; - - if (_song.notes[i].changeBPM) - timeShit += (((60 / _song.notes[i].bpm) * 1000) / 4) * 16; - else - timeShit += (((60 / _song.bpm) * 1000) / 4) * 16; + if (FlxG.sound.music.time > Conductor.bpmChangeMap[i].songTime) + lastChange = Conductor.bpmChangeMap[i]; } - steps += Math.floor((FlxG.sound.music.time - timeShit) / Conductor.stepCrochet); - curStep = steps; + curStep = lastChange.stepTime + Math.floor((FlxG.sound.music.time - lastChange.songTime) / Conductor.stepCrochet); updateBeat(); return curStep; @@ -702,7 +713,7 @@ class ChartingState extends MusicBeatState vocals.pause(); // Basically old shit from changeSection??? - FlxG.sound.music.time = lengthBpmBullshit() * Conductor.stepCrochet * curSection; + FlxG.sound.music.time = sectionStartTime(); if (songBeginning) { @@ -732,15 +743,15 @@ class ChartingState extends MusicBeatState FlxG.sound.music.pause(); vocals.pause(); - var daNum:Int = 0; + /*var daNum:Int = 0; var daLength:Float = 0; while (daNum <= sec) { daLength += lengthBpmBullshit(); daNum++; - } + }*/ - FlxG.sound.music.time = (daLength - lengthBpmBullshit()) * Conductor.stepCrochet; + FlxG.sound.music.time = sectionStartTime(); vocals.time = FlxG.sound.music.time; updateCurStep(); } @@ -815,10 +826,16 @@ class ChartingState extends MusicBeatState if (_song.notes[curSection].changeBPM && _song.notes[curSection].bpm > 0) { Conductor.changeBPM(_song.notes[curSection].bpm); + FlxG.log.add('CHANGED BPM!'); } else { - Conductor.changeBPM(tempBpm); + //get last bpm + var daBPM:Int = _song.bpm; + for (i in 0...curSection) + if (_song.notes[i].changeBPM) + daBPM = _song.notes[i].bpm; + Conductor.changeBPM(daBPM); } /* // PORT BULLSHIT, INCASE THERE'S NO SUSTAIN DATA FOR A NOTE @@ -846,7 +863,7 @@ class ChartingState extends MusicBeatState note.setGraphicSize(GRID_SIZE, GRID_SIZE); note.updateHitbox(); note.x = Math.floor(daNoteInfo * GRID_SIZE); - note.y = Math.floor(getYfromStrum(daStrumTime)) % gridBG.height; + note.y = Math.floor(getYfromStrum((daStrumTime - sectionStartTime()) % (Conductor.stepCrochet * _song.notes[curSection].lengthInSteps))); curRenderedNotes.add(note); @@ -925,7 +942,7 @@ class ChartingState extends MusicBeatState private function addNote():Void { - var noteStrum = getStrumTime(dummyArrow.y) + (curSection * (Conductor.stepCrochet * 16)); + var noteStrum = getStrumTime(dummyArrow.y) + sectionStartTime(); var noteData = Math.floor(FlxG.mouse.x / GRID_SIZE); var noteSus = 0; @@ -938,7 +955,7 @@ class ChartingState extends MusicBeatState _song.notes[curSection].sectionNotes.push([noteStrum, (noteData + 4) % 8, noteSus]); } - trace(getStrumTime(dummyArrow.y) + (curSection * (Conductor.stepCrochet * lengthBpmBullshit()))); + trace(noteStrum); trace(curSection); updateGrid(); @@ -957,6 +974,7 @@ class ChartingState extends MusicBeatState return FlxMath.remapToRange(strumTime, 0, 16 * Conductor.stepCrochet, gridBG.y, gridBG.y + gridBG.height); } + /* function calculateSectionLengths(?sec:SwagSection):Int { var daLength:Int = 0; @@ -978,7 +996,7 @@ class ChartingState extends MusicBeatState } return daLength; - } + }*/ private var daSpacing:Float = 0.3; @@ -1014,10 +1032,7 @@ class ChartingState extends MusicBeatState function autosaveSong():Void { FlxG.save.data.autosave = Json.stringify({ - "song": _song, - "bpm": Conductor.bpm, - "sections": _song.notes.length, - 'notes': _song.notes + "song": _song }); FlxG.save.flush(); } @@ -1025,10 +1040,7 @@ class ChartingState extends MusicBeatState private function saveLevel() { var json = { - "song": _song, - "bpm": Conductor.bpm, - "sections": _song.notes.length, - 'notes': _song.notes + "song": _song }; var data:String = Json.stringify(json); diff --git a/source/Conductor.hx b/source/Conductor.hx index 710b13584..a182070b0 100644 --- a/source/Conductor.hx +++ b/source/Conductor.hx @@ -1,9 +1,19 @@ package; +import Song.SwagSong; + /** * ... * @author */ + +typedef BPMChangeEvent = +{ + var stepTime:Int; + var songTime:Float; + var bpm:Int; +} + class Conductor { public static var bpm:Int = 100; @@ -16,10 +26,39 @@ class Conductor public static var safeFrames:Int = 10; public static var safeZoneOffset:Float = (safeFrames / 60) * 1000; // is calculated in create(), is safeFrames in milliseconds + public static var bpmChangeMap:Array = []; + public function new() { } + public static function mapBPMChanges(song:SwagSong) + { + bpmChangeMap = []; + + var curBPM:Int = song.bpm; + var totalSteps:Int = 0; + var totalPos:Float = 0; + for (i in 0...song.notes.length) + { + if(song.notes[i].changeBPM && song.notes[i].bpm != curBPM) + { + curBPM = song.notes[i].bpm; + var event:BPMChangeEvent = { + stepTime: totalSteps, + songTime: totalPos, + bpm: curBPM + }; + bpmChangeMap.push(event); + } + + var deltaSteps:Int = song.notes[i].lengthInSteps; + totalSteps += deltaSteps; + totalPos += ((60 / curBPM) * 1000 / 4) * deltaSteps; + } + trace("new BPM map BUDDY " + bpmChangeMap); + } + public static function changeBPM(newBpm:Int) { bpm = newBpm; diff --git a/source/MainMenuState.hx b/source/MainMenuState.hx index e1a1db228..f686c51ce 100644 --- a/source/MainMenuState.hx +++ b/source/MainMenuState.hx @@ -3,6 +3,7 @@ package; import flixel.FlxG; import flixel.FlxObject; import flixel.FlxSprite; +import flixel.addons.transition.FlxTransitionableState; import flixel.effects.FlxFlicker; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxGroup.FlxTypedGroup; @@ -32,6 +33,9 @@ class MainMenuState extends MusicBeatState override function create() { + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + if (!FlxG.sound.music.playing) { FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt); diff --git a/source/MusicBeatState.hx b/source/MusicBeatState.hx index bda503128..cbb9cc6e4 100644 --- a/source/MusicBeatState.hx +++ b/source/MusicBeatState.hx @@ -1,5 +1,6 @@ package; +import Conductor.BPMChangeEvent; import flixel.FlxG; import flixel.addons.transition.FlxTransitionableState; import flixel.addons.ui.FlxUIState; @@ -11,9 +12,6 @@ class MusicBeatState extends FlxUIState private var lastBeat:Float = 0; private var lastStep:Float = 0; - private var totalBeats:Int = 0; - private var totalSteps:Int = 0; - private var curStep:Int = 0; private var curBeat:Int = 0; private var controls(get, never):Controls; @@ -35,59 +33,47 @@ class MusicBeatState extends FlxUIState override function update(elapsed:Float) { - everyStep(); + //everyStep(); + var oldStep:Int = curStep; updateCurStep(); - // Needs to be ROUNED, rather than ceil or floor updateBeat(); + if (oldStep != curStep && curStep > 0) + stepHit(); + super.update(elapsed); } private function updateBeat():Void { - curBeat = Math.round(curStep / 4); - } - - /** - * CHECKS EVERY FRAME - */ - private function everyStep():Void - { - if (Conductor.songPosition > lastStep + Conductor.stepCrochet - Conductor.safeZoneOffset - || Conductor.songPosition < lastStep + Conductor.safeZoneOffset) - { - if (Conductor.songPosition > lastStep + Conductor.stepCrochet) - { - stepHit(); - } - } + curBeat = Math.floor(curStep / 4); } private function updateCurStep():Void { - curStep = Math.floor(Conductor.songPosition / Conductor.stepCrochet); + var lastChange:BPMChangeEvent = { + stepTime: 0, + songTime: 0, + bpm: 0 + } + for (i in 0...Conductor.bpmChangeMap.length) + { + if (Conductor.songPosition >= Conductor.bpmChangeMap[i].songTime) + lastChange = Conductor.bpmChangeMap[i]; + } + + curStep = lastChange.stepTime + Math.floor((Conductor.songPosition - lastChange.songTime) / Conductor.stepCrochet); } public function stepHit():Void { - totalSteps += 1; - lastStep += Conductor.stepCrochet; - - // If the song is at least 3 steps behind - if (Conductor.songPosition > lastStep + (Conductor.stepCrochet * 3)) - { - lastStep = Conductor.songPosition; - totalSteps = Math.ceil(lastStep / Conductor.stepCrochet); - } - - if (totalSteps % 4 == 0) + if (curStep % 4 == 0) beatHit(); } public function beatHit():Void { - lastBeat += Conductor.crochet; - totalBeats += 1; + //do literally nothing dumbass } } diff --git a/source/MusicBeatSubstate.hx b/source/MusicBeatSubstate.hx index 511f597a7..2fa2a6942 100644 --- a/source/MusicBeatSubstate.hx +++ b/source/MusicBeatSubstate.hx @@ -1,5 +1,6 @@ package; +import Conductor.BPMChangeEvent; import flixel.FlxG; import flixel.FlxSubState; @@ -13,9 +14,6 @@ class MusicBeatSubstate extends FlxSubState private var lastBeat:Float = 0; private var lastStep:Float = 0; - private var totalBeats:Int = 0; - private var totalSteps:Int = 0; - private var curStep:Int = 0; private var curBeat:Int = 0; private var controls(get, never):Controls; @@ -34,46 +32,43 @@ class MusicBeatSubstate extends FlxSubState override function update(elapsed:Float) { - everyStep(); + //everyStep(); + var oldStep:Int = curStep; updateCurStep(); - curBeat = Math.round(curStep / 4); + curBeat = Math.floor(curStep / 4); + + if (oldStep != curStep && curStep > 0) + stepHit(); + super.update(elapsed); } - /** - * CHECKS EVERY FRAME - */ - private function everyStep():Void - { - if (Conductor.songPosition > lastStep + Conductor.stepCrochet - Conductor.safeZoneOffset - || Conductor.songPosition < lastStep + Conductor.safeZoneOffset) - { - if (Conductor.songPosition > lastStep + Conductor.stepCrochet) - { - stepHit(); - } - } - } - private function updateCurStep():Void { - curStep = Math.floor(Conductor.songPosition / Conductor.stepCrochet); + var lastChange:BPMChangeEvent = { + stepTime: 0, + songTime: 0, + bpm: 0 + } + for (i in 0...Conductor.bpmChangeMap.length) + { + if (Conductor.songPosition > Conductor.bpmChangeMap[i].songTime) + lastChange = Conductor.bpmChangeMap[i]; + } + + curStep = lastChange.stepTime + Math.floor((Conductor.songPosition - lastChange.songTime) / Conductor.stepCrochet); } public function stepHit():Void { - totalSteps += 1; - lastStep += Conductor.stepCrochet; - - if (totalSteps % 4 == 0) + if (curStep % 4 == 0) beatHit(); } public function beatHit():Void { - lastBeat += Conductor.crochet; - totalBeats += 1; + //do literally nothing dumbass } } diff --git a/source/NGio.hx b/source/NGio.hx index 96ced6257..0c2631b86 100644 --- a/source/NGio.hx +++ b/source/NGio.hx @@ -35,19 +35,22 @@ class NGio trace('INIT NOLOGIN'); GAME_VER = "v" + Application.current.meta.get('version'); - NG.create(api); - - new FlxTimer().start(2, function(tmr:FlxTimer) + if (api.length != 0) { - var call = NG.core.calls.app.getCurrentVersion(GAME_VER).addDataHandler(function(response:Response) - { - GAME_VER = response.result.data.current_version; - trace('CURRENT NG VERSION: ' + GAME_VER); - gotOnlineVer = true; - }); + NG.create(api); - call.send(); - }); + new FlxTimer().start(2, function(tmr:FlxTimer) + { + var call = NG.core.calls.app.getCurrentVersion(GAME_VER).addDataHandler(function(response:Response) + { + GAME_VER = response.result.data.current_version; + trace('CURRENT NG VERSION: ' + GAME_VER); + gotOnlineVer = true; + }); + + call.send(); + }); + } } public function new(api:String, encKey:String, ?sessionId:String) diff --git a/source/PauseSubState.hx b/source/PauseSubState.hx index ac747dbca..928d32ac1 100644 --- a/source/PauseSubState.hx +++ b/source/PauseSubState.hx @@ -4,6 +4,7 @@ import Controls.Control; import flixel.FlxG; import flixel.FlxSprite; import flixel.FlxSubState; +import flixel.addons.transition.FlxTransitionableState; import flixel.group.FlxGroup.FlxTypedGroup; import flixel.input.keyboard.FlxKey; import flixel.system.FlxSound; diff --git a/source/PlayState.hx b/source/PlayState.hx index 72974df44..d912e09ea 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -140,6 +140,7 @@ class PlayState extends MusicBeatState if (SONG == null) SONG = Song.loadFromJson('tutorial'); + Conductor.mapBPMChanges(SONG); Conductor.changeBPM(SONG.bpm); switch (SONG.song.toLowerCase()) @@ -210,6 +211,7 @@ class PlayState extends MusicBeatState light.visible = false; light.setGraphicSize(Std.int(light.width * 0.85)); light.updateHitbox(); + light.antialiasing = true; phillyCityLights.add(light); } @@ -484,8 +486,6 @@ class PlayState extends MusicBeatState defaultCamZoom = 0.9; curStage = 'stage'; var bg:FlxSprite = new FlxSprite(-600, -200).loadGraphic('assets/images/stageback.png'); - // bg.setGraphicSize(Std.int(bg.width * 2.5)); - // bg.updateHitbox(); bg.antialiasing = true; bg.scrollFactor.set(0.9, 0.9); bg.active = false; @@ -515,9 +515,7 @@ class PlayState extends MusicBeatState { case 'limo': gfVersion = 'gf-car'; - case 'mall': - gfVersion = 'gf-christmas'; - case 'mallEvil': + case 'mall' | 'mallEvil': gfVersion = 'gf-christmas'; case 'school': gfVersion = 'gf-pixel'; @@ -771,6 +769,7 @@ class PlayState extends MusicBeatState senpaiEvil.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/senpaiCrazy.png', 'assets/images/weeb/senpaiCrazy.xml'); senpaiEvil.animation.addByPrefix('idle', 'Senpai Pre Explosion', 24, false); senpaiEvil.setGraphicSize(Std.int(senpaiEvil.width * 6)); + senpaiEvil.scrollFactor.set(); senpaiEvil.updateHitbox(); senpaiEvil.screenCenter(); @@ -1084,44 +1083,7 @@ class PlayState extends MusicBeatState switch (curStage) { - case 'school': - babyArrow.loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); - babyArrow.animation.add('green', [6]); - babyArrow.animation.add('red', [7]); - babyArrow.animation.add('blue', [5]); - babyArrow.animation.add('purplel', [4]); - - babyArrow.setGraphicSize(Std.int(babyArrow.width * daPixelZoom)); - babyArrow.updateHitbox(); - babyArrow.antialiasing = false; - - switch (Math.abs(i)) - { - case 2: - babyArrow.x += Note.swagWidth * 2; - babyArrow.animation.add('static', [2]); - babyArrow.animation.add('pressed', [6, 10], 12, false); - babyArrow.animation.add('confirm', [14, 18], 12, false); - case 3: - babyArrow.x += Note.swagWidth * 3; - babyArrow.animation.add('static', [3]); - babyArrow.animation.add('pressed', [7, 11], 12, false); - babyArrow.animation.add('confirm', [15, 19], 24, false); - case 1: - babyArrow.x += Note.swagWidth * 1; - babyArrow.animation.add('static', [1]); - babyArrow.animation.add('pressed', [5, 9], 12, false); - babyArrow.animation.add('confirm', [13, 17], 24, false); - case 0: - babyArrow.x += Note.swagWidth * 0; - babyArrow.animation.add('static', [0]); - babyArrow.animation.add('pressed', [4, 8], 12, false); - babyArrow.animation.add('confirm', [12, 16], 24, false); - } - - case 'schoolEvil': - // ALL THIS IS COPY PASTED CUZ IM LAZY - + case 'school' | 'schoolEvil': babyArrow.loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); babyArrow.animation.add('green', [6]); babyArrow.animation.add('red', [7]); @@ -1194,9 +1156,12 @@ class PlayState extends MusicBeatState babyArrow.updateHitbox(); babyArrow.scrollFactor.set(); - babyArrow.y -= 10; - babyArrow.alpha = 0; - FlxTween.tween(babyArrow, {y: babyArrow.y + 10, alpha: 1}, 1, {ease: FlxEase.circOut, startDelay: 0.5 + (0.2 * i)}); + if (!isStoryMode) + { + babyArrow.y -= 10; + babyArrow.alpha = 0; + FlxTween.tween(babyArrow, {y: babyArrow.y + 10, alpha: 1}, 1, {ease: FlxEase.circOut, startDelay: 0.5 + (0.2 * i)}); + } babyArrow.ID = i; @@ -1445,11 +1410,12 @@ class PlayState extends MusicBeatState camHUD.zoom = FlxMath.lerp(1, camHUD.zoom, 0.95); } - FlxG.watch.addQuick("beatShit", totalBeats); + FlxG.watch.addQuick("beatShit", curBeat); + FlxG.watch.addQuick("stepShit", curStep); if (curSong == 'Fresh') { - switch (totalBeats) + switch (curBeat) { case 16: camZooming = true; @@ -1468,7 +1434,7 @@ class PlayState extends MusicBeatState if (curSong == 'Bopeebo') { - switch (totalBeats) + switch (curBeat) { case 128, 129, 130: vocals.volume = 0; @@ -1548,8 +1514,6 @@ class PlayState extends MusicBeatState altAnim = '-alt'; } - trace("DA ALT THO?: " + SONG.notes[Math.floor(curStep / 16)].altAnim); - switch (Math.abs(daNote.noteData)) { case 2: @@ -1626,6 +1590,9 @@ class PlayState extends MusicBeatState { FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt); + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + FlxG.switchState(new StoryMenuState()); // if () @@ -1664,20 +1631,14 @@ class PlayState extends MusicBeatState FlxG.sound.play('assets/sounds/Lights_Shut_off' + TitleState.soundExt); } - if (SONG.song.toLowerCase() == 'senpai') - { - transIn = null; - transOut = null; - prevCamFollow = camFollow; - } + FlxTransitionableState.skipNextTransIn = true; + FlxTransitionableState.skipNextTransOut = true; + prevCamFollow = camFollow; PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + difficulty, PlayState.storyPlaylist[0]); FlxG.sound.music.stop(); FlxG.switchState(new PlayState()); - - transIn = FlxTransitionableState.defaultTransIn; - transOut = FlxTransitionableState.defaultTransOut; } } else @@ -2237,17 +2198,16 @@ class PlayState extends MusicBeatState override function stepHit() { + super.stepHit(); if (FlxG.sound.music.time > Conductor.songPosition + 20 || FlxG.sound.music.time < Conductor.songPosition - 20) { resyncVocals(); } - if (dad.curCharacter == 'spooky' && totalSteps % 4 == 2) + if (dad.curCharacter == 'spooky' && curStep % 4 == 2) { // dad.dance(); } - - super.stepHit(); } var lightningStrikeBeat:Int = 0; @@ -2255,7 +2215,6 @@ class PlayState extends MusicBeatState override function beatHit() { - wiggleShit.update(Conductor.crochet); super.beatHit(); if (generatedMusic) @@ -2270,23 +2229,24 @@ class PlayState extends MusicBeatState Conductor.changeBPM(SONG.notes[Math.floor(curStep / 16)].bpm); FlxG.log.add('CHANGED BPM!'); } - else - Conductor.changeBPM(SONG.bpm); + // else + // Conductor.changeBPM(SONG.bpm); // Dad doesnt interupt his own notes if (SONG.notes[Math.floor(curStep / 16)].mustHitSection) dad.dance(); } // FlxG.log.add('change bpm' + SONG.notes[Std.int(curStep / 16)].changeBPM); + wiggleShit.update(Conductor.crochet); // HARDCODING FOR MILF ZOOMS! - if (curSong.toLowerCase() == 'milf' && curBeat >= 168 && curBeat <= 200 && camZooming && FlxG.camera.zoom < 1.35) + if (curSong.toLowerCase() == 'milf' && curBeat >= 168 && curBeat < 200 && camZooming && FlxG.camera.zoom < 1.35) { FlxG.camera.zoom += 0.015; camHUD.zoom += 0.03; } - if (camZooming && FlxG.camera.zoom < 1.35 && totalBeats % 4 == 0) + if (camZooming && FlxG.camera.zoom < 1.35 && curBeat % 4 == 0) { FlxG.camera.zoom += 0.015; camHUD.zoom += 0.03; @@ -2298,7 +2258,7 @@ class PlayState extends MusicBeatState iconP1.updateHitbox(); iconP2.updateHitbox(); - if (totalBeats % gfSpeed == 0) + if (curBeat % gfSpeed == 0) { gf.dance(); } @@ -2308,7 +2268,7 @@ class PlayState extends MusicBeatState boyfriend.playAnim('idle'); } - if (totalBeats % 8 == 7 && curSong == 'Bopeebo') + if (curBeat % 8 == 7 && curSong == 'Bopeebo') { boyfriend.playAnim('hey', true); @@ -2340,7 +2300,7 @@ class PlayState extends MusicBeatState if (!trainMoving) trainCooldown += 1; - if (totalBeats % 4 == 0) + if (curBeat % 4 == 0) { phillyCityLights.forEach(function(light:FlxSprite) { @@ -2353,7 +2313,7 @@ class PlayState extends MusicBeatState // phillyCityLights.members[curLight].alpha = 1; } - if (totalBeats % 8 == 4 && FlxG.random.bool(30) && !trainMoving && trainCooldown > 8) + if (curBeat % 8 == 4 && FlxG.random.bool(30) && !trainMoving && trainCooldown > 8) { trainCooldown = FlxG.random.int(-4, 0); trainStart(); diff --git a/source/Song.hx b/source/Song.hx index 55827e79b..e9f3dc20f 100644 --- a/source/Song.hx +++ b/source/Song.hx @@ -12,8 +12,6 @@ typedef SwagSong = var song:String; var notes:Array; var bpm:Int; - var sections:Int; - var sectionLengths:Array; var needsVoices:Bool; var speed:Float; @@ -27,25 +25,17 @@ class Song public var song:String; public var notes:Array; public var bpm:Int; - public var sections:Int; - public var sectionLengths:Array = []; public var needsVoices:Bool = true; public var speed:Float = 1; public var player1:String = 'bf'; public var player2:String = 'dad'; - public function new(song, notes, bpm, sections) + public function new(song, notes, bpm) { this.song = song; this.notes = notes; this.bpm = bpm; - this.sections = sections; - - for (i in 0...notes.length) - { - this.sectionLengths.push(notes[i]); - } } public static function loadFromJson(jsonInput:String, ?folder:String):SwagSong @@ -72,9 +62,7 @@ class Song daNotes = songData.notes; daSong = songData.song; - daSections = songData.sections; - daBpm = songData.bpm; - daSectionLengths = songData.sectionLengths; */ + daBpm = songData.bpm; */ return parseJSONshit(rawJson); } diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index d5787c526..f0a4e888a 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -2,6 +2,7 @@ package; import flixel.FlxG; import flixel.FlxSprite; +import flixel.addons.transition.FlxTransitionableState; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxGroup.FlxTypedGroup; import flixel.group.FlxGroup; @@ -69,6 +70,9 @@ class StoryMenuState extends MusicBeatState override function create() { + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + if (FlxG.sound.music != null) { if (!FlxG.sound.music.playing)