mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2024-12-27 07:27:12 +00:00
Working new chart format (not working everything else :') )
This commit is contained in:
parent
bb5ed65d27
commit
cdc23f0809
|
@ -3,7 +3,6 @@ package funkin;
|
||||||
import flixel.util.FlxSignal;
|
import flixel.util.FlxSignal;
|
||||||
import funkin.SongLoad.SwagSong;
|
import funkin.SongLoad.SwagSong;
|
||||||
import funkin.play.song.Song.SongDifficulty;
|
import funkin.play.song.Song.SongDifficulty;
|
||||||
import funkin.play.song.SongData.ConductorTimeChange;
|
|
||||||
import funkin.play.song.SongData.SongTimeChange;
|
import funkin.play.song.SongData.SongTimeChange;
|
||||||
|
|
||||||
typedef BPMChangeEvent =
|
typedef BPMChangeEvent =
|
||||||
|
@ -68,9 +67,9 @@ class Conductor
|
||||||
return crochet / 4;
|
return crochet / 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static var currentBeat(get, null):Float;
|
public static var currentBeat(get, null):Int;
|
||||||
|
|
||||||
static function get_currentBeat():Float
|
static function get_currentBeat():Int
|
||||||
{
|
{
|
||||||
return currentBeat;
|
return currentBeat;
|
||||||
}
|
}
|
||||||
|
@ -127,20 +126,28 @@ class Conductor
|
||||||
var oldBeat = currentBeat;
|
var oldBeat = currentBeat;
|
||||||
var oldStep = currentStep;
|
var oldStep = currentStep;
|
||||||
|
|
||||||
songPosition = songPosition;
|
Conductor.songPosition = songPosition;
|
||||||
bpm = Conductor.getLastBPMChange().bpm;
|
Conductor.bpm = Conductor.getLastBPMChange().bpm;
|
||||||
|
|
||||||
|
currentTimeChange = timeChanges[0];
|
||||||
for (i in 0...timeChanges.length)
|
for (i in 0...timeChanges.length)
|
||||||
{
|
{
|
||||||
if (songPosition >= timeChanges[i].songTime)
|
if (songPosition >= timeChanges[i].timeStamp)
|
||||||
currentTimeChange = timeChanges[i];
|
currentTimeChange = timeChanges[i];
|
||||||
|
|
||||||
if (songPosition < timeChanges[i].songTime)
|
if (songPosition < timeChanges[i].timeStamp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
currentStep = (currentTimeChange.beatTime * 4) + (songPosition - currentTimeChange.songTime) / stepCrochet;
|
if (currentTimeChange == null)
|
||||||
|
{
|
||||||
|
trace('WARNING: Conductor is broken, timeChanges is empty.');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentStep = Math.floor((currentTimeChange.beatTime * 4) + (songPosition - currentTimeChange.timeStamp) / stepCrochet);
|
||||||
currentBeat = Math.floor(currentStep / 4);
|
currentBeat = Math.floor(currentStep / 4);
|
||||||
|
}
|
||||||
|
|
||||||
// FlxSignals are really cool.
|
// FlxSignals are really cool.
|
||||||
if (currentStep != oldStep)
|
if (currentStep != oldStep)
|
||||||
|
@ -183,9 +190,9 @@ class Conductor
|
||||||
|
|
||||||
timeChanges = [];
|
timeChanges = [];
|
||||||
|
|
||||||
for (currentTimeChange in timeChanges)
|
for (currentTimeChange in songTimeChanges)
|
||||||
{
|
{
|
||||||
var prevTimeChange:SongTimeChange = timeChanges.length == 0 ? null : timeChanges[timeChanges.length - 1];
|
// var prevTimeChange:SongTimeChange = timeChanges.length == 0 ? null : timeChanges[timeChanges.length - 1];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (prevTimeChange != null)
|
if (prevTimeChange != null)
|
||||||
|
@ -205,6 +212,8 @@ class Conductor
|
||||||
timeChanges.push(currentTimeChange);
|
timeChanges.push(currentTimeChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace('Done mapping time changes: ' + timeChanges);
|
||||||
|
|
||||||
// Done.
|
// Done.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,7 @@ class FreeplayState extends MusicBeatSubstate
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StoryMenuState.weekUnlocked[2] || isDebug)
|
if (StoryMenuState.weekUnlocked[2] || isDebug)
|
||||||
addWeek(['Bopeebo', 'Bopeebo_new', 'Fresh', 'Dadbattle'], 1, ['dad']);
|
addWeek(['Bopeebo', 'Fresh', 'Dadbattle'], 1, ['dad']);
|
||||||
|
|
||||||
if (StoryMenuState.weekUnlocked[2] || isDebug)
|
if (StoryMenuState.weekUnlocked[2] || isDebug)
|
||||||
addWeek(['Spookeez', 'South', 'Monster'], 2, ['spooky', 'spooky', 'monster']);
|
addWeek(['Spookeez', 'South', 'Monster'], 2, ['spooky', 'spooky', 'monster']);
|
||||||
|
|
|
@ -6,7 +6,6 @@ import flixel.addons.ui.FlxUIState;
|
||||||
import flixel.text.FlxText;
|
import flixel.text.FlxText;
|
||||||
import flixel.util.FlxColor;
|
import flixel.util.FlxColor;
|
||||||
import flixel.util.FlxSort;
|
import flixel.util.FlxSort;
|
||||||
import funkin.Conductor.BPMChangeEvent;
|
|
||||||
import funkin.modding.PolymodHandler;
|
import funkin.modding.PolymodHandler;
|
||||||
import funkin.modding.events.ScriptEvent;
|
import funkin.modding.events.ScriptEvent;
|
||||||
import funkin.modding.module.ModuleHandler;
|
import funkin.modding.module.ModuleHandler;
|
||||||
|
@ -19,8 +18,6 @@ import funkin.util.SortUtil;
|
||||||
*/
|
*/
|
||||||
class MusicBeatState extends FlxUIState
|
class MusicBeatState extends FlxUIState
|
||||||
{
|
{
|
||||||
private var curStep:Int = 0;
|
|
||||||
private var curBeat:Int = 0;
|
|
||||||
private var controls(get, never):Controls;
|
private var controls(get, never):Controls;
|
||||||
|
|
||||||
inline function get_controls():Controls
|
inline function get_controls():Controls
|
||||||
|
@ -47,6 +44,16 @@ class MusicBeatState extends FlxUIState
|
||||||
super.create();
|
super.create();
|
||||||
|
|
||||||
createWatermarkText();
|
createWatermarkText();
|
||||||
|
|
||||||
|
Conductor.beatHit.add(this.beatHit);
|
||||||
|
Conductor.stepHit.add(this.stepHit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override function destroy():Void
|
||||||
|
{
|
||||||
|
super.destroy();
|
||||||
|
Conductor.beatHit.remove(this.beatHit);
|
||||||
|
Conductor.stepHit.remove(this.stepHit);
|
||||||
}
|
}
|
||||||
|
|
||||||
override function update(elapsed:Float)
|
override function update(elapsed:Float)
|
||||||
|
@ -69,14 +76,7 @@ class MusicBeatState extends FlxUIState
|
||||||
FlxG.state.openSubState(new DebugMenuSubState());
|
FlxG.state.openSubState(new DebugMenuSubState());
|
||||||
}
|
}
|
||||||
|
|
||||||
// everyStep();
|
// Conductor.update(FlxG.sound.music.time + Conductor.offset);
|
||||||
var oldStep:Int = curStep;
|
|
||||||
|
|
||||||
updateCurStep();
|
|
||||||
updateBeat();
|
|
||||||
|
|
||||||
if (oldStep != curStep && curStep >= 0)
|
|
||||||
stepHit();
|
|
||||||
|
|
||||||
FlxG.watch.addQuick("songPos", Conductor.songPosition);
|
FlxG.watch.addQuick("songPos", Conductor.songPosition);
|
||||||
|
|
||||||
|
@ -124,9 +124,6 @@ class MusicBeatState extends FlxUIState
|
||||||
if (event.eventCanceled)
|
if (event.eventCanceled)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (Conductor.currentStep % 4 == 0)
|
|
||||||
beatHit();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ class SongLoad
|
||||||
|
|
||||||
public static function loadFromJson(jsonInput:String, ?folder:String):SwagSong
|
public static function loadFromJson(jsonInput:String, ?folder:String):SwagSong
|
||||||
{
|
{
|
||||||
var rawJson:Dynamic = null;
|
var rawJson:String = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
rawJson = Assets.getText(Paths.json('songs/${folder.toLowerCase()}/${jsonInput.toLowerCase()}')).trim();
|
rawJson = Assets.getText(Paths.json('songs/${folder.toLowerCase()}/${jsonInput.toLowerCase()}')).trim();
|
||||||
|
@ -67,25 +67,8 @@ class SongLoad
|
||||||
while (!rawJson.endsWith("}"))
|
while (!rawJson.endsWith("}"))
|
||||||
{
|
{
|
||||||
rawJson = rawJson.substr(0, rawJson.length - 1);
|
rawJson = rawJson.substr(0, rawJson.length - 1);
|
||||||
// LOL GOING THROUGH THE BULLSHIT TO CLEAN IDK WHATS STRANGE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIX THE CASTING ON WINDOWS/NATIVE
|
|
||||||
// Windows???
|
|
||||||
// trace(songData);
|
|
||||||
|
|
||||||
// trace('LOADED FROM JSON: ' + songData.notes);
|
|
||||||
/*
|
|
||||||
for (i in 0...songData.notes.length)
|
|
||||||
{
|
|
||||||
trace('LOADED FROM JSON: ' + songData.notes[i].sectionNotes);
|
|
||||||
// songData.notes[i].sectionNotes = songData.notes[i].sectionNotes
|
|
||||||
}
|
|
||||||
|
|
||||||
daNotes = songData.notes;
|
|
||||||
daSong = songData.song;
|
|
||||||
daBpm = songData.bpm; */
|
|
||||||
|
|
||||||
return parseJSONshit(rawJson);
|
return parseJSONshit(rawJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -530,12 +530,13 @@ class TitleState extends MusicBeatState
|
||||||
|
|
||||||
if (!skippedIntro)
|
if (!skippedIntro)
|
||||||
{
|
{
|
||||||
FlxG.log.add(curBeat);
|
// FlxG.log.add(Conductor.currentBeat);
|
||||||
// if the user is draggin the window some beats will
|
// if the user is draggin the window some beats will
|
||||||
// be missed so this is just to compensate
|
// be missed so this is just to compensate
|
||||||
if (curBeat > lastBeat)
|
if (Conductor.currentBeat > lastBeat)
|
||||||
{
|
{
|
||||||
for (i in lastBeat...curBeat)
|
// TODO: Why does it perform ALL the previous steps each beat?
|
||||||
|
for (i in lastBeat...Conductor.currentBeat)
|
||||||
{
|
{
|
||||||
switch (i + 1)
|
switch (i + 1)
|
||||||
{
|
{
|
||||||
|
@ -572,14 +573,14 @@ class TitleState extends MusicBeatState
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastBeat = curBeat;
|
lastBeat = Conductor.currentBeat;
|
||||||
}
|
}
|
||||||
if (skippedIntro)
|
if (skippedIntro)
|
||||||
{
|
{
|
||||||
if (cheatActive && curBeat % 2 == 0)
|
if (cheatActive && Conductor.currentBeat % 2 == 0)
|
||||||
swagShader.update(0.125);
|
swagShader.update(0.125);
|
||||||
|
|
||||||
if (logoBl != null)
|
if (logoBl != null && logoBl.animation != null)
|
||||||
logoBl.animation.play('bump', true);
|
logoBl.animation.play('bump', true);
|
||||||
|
|
||||||
danceLeft = !danceLeft;
|
danceLeft = !danceLeft;
|
||||||
|
|
|
@ -14,22 +14,17 @@ class VoicesGroup extends FlxTypedGroup<FlxSound>
|
||||||
public var pitch(default, set):Float = 1;
|
public var pitch(default, set):Float = 1;
|
||||||
|
|
||||||
// make it a group that you add to?
|
// make it a group that you add to?
|
||||||
public function new(song:String, ?files:Array<String>, ?needsVoices:Bool = true)
|
public function new(song:String, ?files:Array<String> = null)
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
|
|
||||||
if (!needsVoices)
|
if (files == null)
|
||||||
{
|
{
|
||||||
// simply adds an empty sound? fills it in moreso for easier backwards compatibility
|
// Add an empty voice.
|
||||||
add(new FlxSound());
|
add(new FlxSound());
|
||||||
// FlxG.sound.list.add(snd);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (files == null)
|
|
||||||
files = [""]; // loads with no file name assumption, to load "Voices.ogg" or whatev normally
|
|
||||||
|
|
||||||
for (sndFile in files)
|
for (sndFile in files)
|
||||||
{
|
{
|
||||||
var snd:FlxSound = new FlxSound().loadEmbedded(Paths.voices(song, '$sndFile'));
|
var snd:FlxSound = new FlxSound().loadEmbedded(Paths.voices(song, '$sndFile'));
|
||||||
|
|
|
@ -622,7 +622,7 @@ class ChartingState extends MusicBeatState
|
||||||
|
|
||||||
FlxG.sound.music.pan = FlxMath.remapToRange(FlxG.mouse.screenX, 0, FlxG.width, -1, 1) * 10;
|
FlxG.sound.music.pan = FlxMath.remapToRange(FlxG.mouse.screenX, 0, FlxG.width, -1, 1) * 10;
|
||||||
|
|
||||||
curStep = recalculateSteps();
|
// curStep = recalculateSteps();
|
||||||
|
|
||||||
Conductor.songPosition = FlxG.sound.music.time;
|
Conductor.songPosition = FlxG.sound.music.time;
|
||||||
_song.song = typingShit.text;
|
_song.song = typingShit.text;
|
||||||
|
@ -649,7 +649,7 @@ class ChartingState extends MusicBeatState
|
||||||
if (FlxG.keys.justPressed.X)
|
if (FlxG.keys.justPressed.X)
|
||||||
toggleAltAnimNote();
|
toggleAltAnimNote();
|
||||||
|
|
||||||
if (curBeat % 4 == 0 && curStep >= 16 * (curSection + 1))
|
if (false) // (curBeat % 4 == 0 && curStep >= 16 * (curSection + 1))
|
||||||
{
|
{
|
||||||
// trace(curStep);
|
// trace(curStep);
|
||||||
// trace((SongLoad.getSong()[curSection].lengthInSteps) * (curSection + 1));
|
// trace((SongLoad.getSong()[curSection].lengthInSteps) * (curSection + 1));
|
||||||
|
@ -663,8 +663,8 @@ class ChartingState extends MusicBeatState
|
||||||
changeSection(curSection + 1, false);
|
changeSection(curSection + 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
FlxG.watch.addQuick('daBeat', curBeat);
|
FlxG.watch.addQuick('daBeat', Conductor.currentBeat);
|
||||||
FlxG.watch.addQuick('daStep', curStep);
|
FlxG.watch.addQuick('daStep', Conductor.currentStep);
|
||||||
|
|
||||||
if (FlxG.mouse.pressedMiddle && FlxG.mouse.overlaps(gridBG))
|
if (FlxG.mouse.pressedMiddle && FlxG.mouse.overlaps(gridBG))
|
||||||
{
|
{
|
||||||
|
@ -1034,10 +1034,10 @@ class ChartingState extends MusicBeatState
|
||||||
lastChange = Conductor.bpmChangeMap[i];
|
lastChange = Conductor.bpmChangeMap[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
curStep = lastChange.stepTime + Math.floor((FlxG.sound.music.time - lastChange.songTime) / Conductor.stepCrochet);
|
// curStep = lastChange.stepTime + Math.floor((FlxG.sound.music.time - lastChange.songTime) / Conductor.stepCrochet);
|
||||||
updateBeat();
|
// updateBeat();
|
||||||
|
|
||||||
return curStep;
|
return Conductor.currentStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetSection(songBeginning:SongResetType = SECTION):Void
|
function resetSection(songBeginning:SongResetType = SECTION):Void
|
||||||
|
@ -1061,7 +1061,7 @@ class ChartingState extends MusicBeatState
|
||||||
}
|
}
|
||||||
|
|
||||||
vocals.time = FlxG.sound.music.time;
|
vocals.time = FlxG.sound.music.time;
|
||||||
updateCurStep();
|
// updateCurStep();
|
||||||
|
|
||||||
updateGrid();
|
updateGrid();
|
||||||
updateSectionUI();
|
updateSectionUI();
|
||||||
|
@ -1092,7 +1092,7 @@ class ChartingState extends MusicBeatState
|
||||||
|
|
||||||
FlxG.sound.music.time = sectionStartTime();
|
FlxG.sound.music.time = sectionStartTime();
|
||||||
vocals.time = FlxG.sound.music.time;
|
vocals.time = FlxG.sound.music.time;
|
||||||
updateCurStep();
|
// updateCurStep();
|
||||||
}
|
}
|
||||||
|
|
||||||
updateGrid();
|
updateGrid();
|
||||||
|
|
|
@ -336,8 +336,6 @@ class PlayState extends MusicBeatState
|
||||||
FlxG.sound.cache(Paths.voices(currentSong.song));
|
FlxG.sound.cache(Paths.voices(currentSong.song));
|
||||||
}
|
}
|
||||||
|
|
||||||
Conductor.update(-5000);
|
|
||||||
|
|
||||||
// Initialize stage stuff.
|
// Initialize stage stuff.
|
||||||
initCameras();
|
initCameras();
|
||||||
|
|
||||||
|
@ -369,6 +367,8 @@ class PlayState extends MusicBeatState
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Conductor.update(-5000);
|
||||||
|
|
||||||
if (dialogue != null)
|
if (dialogue != null)
|
||||||
{
|
{
|
||||||
doof = new DialogueBox(false, dialogue);
|
doof = new DialogueBox(false, dialogue);
|
||||||
|
@ -989,6 +989,7 @@ class PlayState extends MusicBeatState
|
||||||
}
|
}
|
||||||
|
|
||||||
FlxG.sound.music.onComplete = endSong;
|
FlxG.sound.music.onComplete = endSong;
|
||||||
|
trace('Playing vocals...');
|
||||||
vocals.play();
|
vocals.play();
|
||||||
|
|
||||||
#if discord_rpc
|
#if discord_rpc
|
||||||
|
@ -1011,13 +1012,15 @@ class PlayState extends MusicBeatState
|
||||||
if (currentSong.needsVoices)
|
if (currentSong.needsVoices)
|
||||||
vocals = new VoicesGroup(currentSong.song, currentSong.voiceList);
|
vocals = new VoicesGroup(currentSong.song, currentSong.voiceList);
|
||||||
else
|
else
|
||||||
vocals = new VoicesGroup(currentSong.song, null, false);
|
vocals = new VoicesGroup(currentSong.song, null);
|
||||||
|
|
||||||
vocals.members[0].onComplete = function()
|
vocals.members[0].onComplete = function()
|
||||||
{
|
{
|
||||||
vocalsFinished = true;
|
vocalsFinished = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
trace(vocals);
|
||||||
|
|
||||||
activeNotes = new FlxTypedGroup<Note>();
|
activeNotes = new FlxTypedGroup<Note>();
|
||||||
activeNotes.zIndex = 1000;
|
activeNotes.zIndex = 1000;
|
||||||
add(activeNotes);
|
add(activeNotes);
|
||||||
|
@ -1525,8 +1528,8 @@ class PlayState extends MusicBeatState
|
||||||
camHUD.zoom = FlxMath.lerp(1 * FlxCamera.defaultZoom, camHUD.zoom, 0.95);
|
camHUD.zoom = FlxMath.lerp(1 * FlxCamera.defaultZoom, camHUD.zoom, 0.95);
|
||||||
}
|
}
|
||||||
|
|
||||||
FlxG.watch.addQuick("beatShit", curBeat);
|
FlxG.watch.addQuick("beatShit", Conductor.currentBeat);
|
||||||
FlxG.watch.addQuick("stepShit", curStep);
|
FlxG.watch.addQuick("stepShit", Conductor.currentStep);
|
||||||
if (currentStage != null)
|
if (currentStage != null)
|
||||||
{
|
{
|
||||||
FlxG.watch.addQuick("bfAnim", currentStage.getBoyfriend().getCurrentAnimation());
|
FlxG.watch.addQuick("bfAnim", currentStage.getBoyfriend().getCurrentAnimation());
|
||||||
|
@ -1535,7 +1538,7 @@ class PlayState extends MusicBeatState
|
||||||
|
|
||||||
if (currentSong != null && currentSong.song == 'Fresh')
|
if (currentSong != null && currentSong.song == 'Fresh')
|
||||||
{
|
{
|
||||||
switch (curBeat)
|
switch (Conductor.currentBeat)
|
||||||
{
|
{
|
||||||
case 16:
|
case 16:
|
||||||
camZooming = true;
|
camZooming = true;
|
||||||
|
@ -1758,20 +1761,10 @@ class PlayState extends MusicBeatState
|
||||||
{
|
{
|
||||||
FlxG.sound.music.pause();
|
FlxG.sound.music.pause();
|
||||||
|
|
||||||
var daBPM:Float = currentSong.bpm;
|
// BPM might change between the current and target section but IDGAF
|
||||||
var daPos:Float = 0;
|
FlxG.sound.music.time = Conductor.songPosition + (sec * 4 * (1000 * 60 / Conductor.bpm));
|
||||||
for (i in 0...(Std.int(curStep / 16 + sec)))
|
|
||||||
{
|
|
||||||
if (SongLoad.getSong()[i].changeBPM)
|
|
||||||
{
|
|
||||||
daBPM = SongLoad.getSong()[i].bpm;
|
|
||||||
}
|
|
||||||
daPos += 4 * (1000 * 60 / daBPM);
|
|
||||||
}
|
|
||||||
|
|
||||||
FlxG.sound.music.time = daPos;
|
|
||||||
Conductor.update(FlxG.sound.music.time + Conductor.offset);
|
Conductor.update(FlxG.sound.music.time + Conductor.offset);
|
||||||
updateCurStep();
|
|
||||||
resyncVocals();
|
resyncVocals();
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
@ -1785,7 +1778,7 @@ class PlayState extends MusicBeatState
|
||||||
mayPauseGame = false;
|
mayPauseGame = false;
|
||||||
FlxG.sound.music.volume = 0;
|
FlxG.sound.music.volume = 0;
|
||||||
vocals.volume = 0;
|
vocals.volume = 0;
|
||||||
if (currentSong.validScore)
|
if (currentSong != null && currentSong.validScore)
|
||||||
{
|
{
|
||||||
Highscore.saveScore(currentSong.song, songScore, storyDifficulty);
|
Highscore.saveScore(currentSong.song, songScore, storyDifficulty);
|
||||||
}
|
}
|
||||||
|
@ -2186,8 +2179,8 @@ class PlayState extends MusicBeatState
|
||||||
resyncVocals();
|
resyncVocals();
|
||||||
}
|
}
|
||||||
|
|
||||||
iconP1.onStepHit(curStep);
|
iconP1.onStepHit(Conductor.currentStep);
|
||||||
iconP2.onStepHit(curStep);
|
iconP2.onStepHit(Conductor.currentStep);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2204,32 +2197,40 @@ class PlayState extends MusicBeatState
|
||||||
}
|
}
|
||||||
|
|
||||||
// Moving this code into the `beatHit` function allows for scripts and modules to control the camera better.
|
// Moving this code into the `beatHit` function allows for scripts and modules to control the camera better.
|
||||||
if (generatedMusic && SongLoad.getSong()[Std.int(curStep / 16)] != null)
|
if (currentSong != null)
|
||||||
{
|
{
|
||||||
cameraRightSide = SongLoad.getSong()[Std.int(curStep / 16)].mustHitSection;
|
if (generatedMusic && SongLoad.getSong()[Std.int(Conductor.currentStep / 16)] != null)
|
||||||
|
{
|
||||||
|
cameraRightSide = SongLoad.getSong()[Std.int(Conductor.currentStep / 16)].mustHitSection;
|
||||||
controlCamera();
|
controlCamera();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SongLoad.getSong()[Math.floor(curStep / 16)] != null)
|
if (SongLoad.getSong()[Math.floor(Conductor.currentStep / 16)] != null)
|
||||||
{
|
{
|
||||||
if (SongLoad.getSong()[Math.floor(curStep / 16)].changeBPM)
|
if (SongLoad.getSong()[Math.floor(Conductor.currentStep / 16)].changeBPM)
|
||||||
{
|
{
|
||||||
Conductor.forceBPM(SongLoad.getSong()[Math.floor(curStep / 16)].bpm);
|
Conductor.forceBPM(SongLoad.getSong()[Math.floor(Conductor.currentStep / 16)].bpm);
|
||||||
FlxG.log.add('CHANGED BPM!');
|
FlxG.log.add('CHANGED BPM!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// HARDCODING FOR MILF ZOOMS!
|
// HARDCODING FOR MILF ZOOMS!
|
||||||
|
|
||||||
if (PreferencesMenu.getPref('camera-zoom'))
|
if (PreferencesMenu.getPref('camera-zoom'))
|
||||||
{
|
{
|
||||||
if (currentSong.song.toLowerCase() == 'milf' && curBeat >= 168 && curBeat < 200 && camZooming && FlxG.camera.zoom < 1.35)
|
if (currentSong != null
|
||||||
|
&& currentSong.song.toLowerCase() == 'milf'
|
||||||
|
&& Conductor.currentBeat >= 168
|
||||||
|
&& Conductor.currentBeat < 200
|
||||||
|
&& camZooming
|
||||||
|
&& FlxG.camera.zoom < 1.35)
|
||||||
{
|
{
|
||||||
FlxG.camera.zoom += 0.015 * FlxCamera.defaultZoom;
|
FlxG.camera.zoom += 0.015 * FlxCamera.defaultZoom;
|
||||||
camHUD.zoom += 0.03;
|
camHUD.zoom += 0.03;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (camZooming && FlxG.camera.zoom < (1.35 * FlxCamera.defaultZoom) && curBeat % 4 == 0)
|
if (camZooming && FlxG.camera.zoom < (1.35 * FlxCamera.defaultZoom) && Conductor.currentBeat % 4 == 0)
|
||||||
{
|
{
|
||||||
FlxG.camera.zoom += 0.015 * FlxCamera.defaultZoom;
|
FlxG.camera.zoom += 0.015 * FlxCamera.defaultZoom;
|
||||||
camHUD.zoom += 0.03;
|
camHUD.zoom += 0.03;
|
||||||
|
@ -2242,14 +2243,19 @@ class PlayState extends MusicBeatState
|
||||||
// bruh this var is bonkers i thot it was a function lmfaooo
|
// bruh this var is bonkers i thot it was a function lmfaooo
|
||||||
|
|
||||||
// Break up into individual lines to aid debugging.
|
// Break up into individual lines to aid debugging.
|
||||||
var shouldShowComboText:Bool = (curBeat % 8 == 7);
|
|
||||||
var daSection = SongLoad.getSong()[Std.int(curStep / 16)];
|
var shouldShowComboText:Bool = false;
|
||||||
|
if (currentSong != null)
|
||||||
|
{
|
||||||
|
shouldShowComboText = (Conductor.currentBeat % 8 == 7);
|
||||||
|
var daSection = SongLoad.getSong()[Std.int(Conductor.currentBeat / 16)];
|
||||||
shouldShowComboText = shouldShowComboText && (daSection != null && daSection.mustHitSection);
|
shouldShowComboText = shouldShowComboText && (daSection != null && daSection.mustHitSection);
|
||||||
shouldShowComboText = shouldShowComboText && (combo > 5);
|
shouldShowComboText = shouldShowComboText && (combo > 5);
|
||||||
|
|
||||||
var daNextSection = SongLoad.getSong()[Std.int(curStep / 16) + 1];
|
var daNextSection = SongLoad.getSong()[Std.int(Conductor.currentBeat / 16) + 1];
|
||||||
var isEndOfSong = SongLoad.getSong().length < Std.int(curStep / 16);
|
var isEndOfSong = SongLoad.getSong().length < Std.int(Conductor.currentBeat / 16);
|
||||||
shouldShowComboText = shouldShowComboText && (isEndOfSong || (daNextSection != null && !daNextSection.mustHitSection));
|
shouldShowComboText = shouldShowComboText && (isEndOfSong || (daNextSection != null && !daNextSection.mustHitSection));
|
||||||
|
}
|
||||||
|
|
||||||
if (shouldShowComboText)
|
if (shouldShowComboText)
|
||||||
{
|
{
|
||||||
|
@ -2282,17 +2288,16 @@ class PlayState extends MusicBeatState
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// TODO: Move this to a song event.
|
// TODO: Move this to a song event.
|
||||||
if (curBeat % 8 == 7 && currentSong.song == 'Bopeebo')
|
// if (Conductor.currentBeat % 8 == 7 && currentSong.song == 'Bopeebo')
|
||||||
{
|
// {
|
||||||
currentStage.getBoyfriend().playAnimation('hey', true);
|
// currentStage.getBoyfriend().playAnimation('hey', true);
|
||||||
}
|
// }
|
||||||
|
|
||||||
// TODO: Move this to a song event.
|
// TODO: Move this to a song event.
|
||||||
if (curBeat % 16 == 15
|
if (Conductor.currentBeat % 16 == 15 // && currentSong.song == 'Tutorial'
|
||||||
&& currentSong.song == 'Tutorial'
|
|
||||||
&& currentStage.getDad().characterId == 'gf'
|
&& currentStage.getDad().characterId == 'gf'
|
||||||
&& curBeat > 16
|
&& Conductor.currentBeat > 16
|
||||||
&& curBeat < 48)
|
&& Conductor.currentBeat < 48)
|
||||||
{
|
{
|
||||||
currentStage.getBoyfriend().playAnimation('hey', true);
|
currentStage.getBoyfriend().playAnimation('hey', true);
|
||||||
currentStage.getDad().playAnimation('cheer', true);
|
currentStage.getDad().playAnimation('cheer', true);
|
||||||
|
@ -2478,7 +2483,7 @@ class PlayState extends MusicBeatState
|
||||||
if (currentChart != null)
|
if (currentChart != null)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
else
|
else if (currentSong != null)
|
||||||
{
|
{
|
||||||
openfl.utils.Assets.cache.clear(Paths.inst(currentSong.song));
|
openfl.utils.Assets.cache.clear(Paths.inst(currentSong.song));
|
||||||
openfl.utils.Assets.cache.clear(Paths.voices(currentSong.song));
|
openfl.utils.Assets.cache.clear(Paths.voices(currentSong.song));
|
||||||
|
|
|
@ -204,30 +204,29 @@ class SongDifficulty
|
||||||
|
|
||||||
public inline function cacheInst()
|
public inline function cacheInst()
|
||||||
{
|
{
|
||||||
// DEBUG: Remove this.
|
FlxG.sound.cache(Paths.inst(this.song.songId));
|
||||||
// FlxG.sound.cache(Paths.inst(this.song.songId));
|
|
||||||
FlxG.sound.cache(Paths.inst('bopeebo'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public inline function playInst(volume:Float = 1.0, looped:Bool = false)
|
public inline function playInst(volume:Float = 1.0, looped:Bool = false)
|
||||||
{
|
{
|
||||||
// DEBUG: Remove this.
|
FlxG.sound.playMusic(Paths.inst(this.song.songId), volume, looped);
|
||||||
// FlxG.sound.playMusic(Paths.inst(this.song.songId), volume, looped);
|
|
||||||
FlxG.sound.playMusic(Paths.inst('bopeebo'), volume, looped);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public inline function cacheVocals()
|
public inline function cacheVocals()
|
||||||
{
|
{
|
||||||
// DEBUG: Remove this.
|
FlxG.sound.cache(Paths.voices(this.song.songId));
|
||||||
// FlxG.sound.cache(Paths.voices(this.song.songId));
|
|
||||||
FlxG.sound.cache(Paths.voices('bopeebo'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public inline function buildVocals(charId:String = "bf"):VoicesGroup
|
public function buildVoiceList():Array<String>
|
||||||
{
|
{
|
||||||
// DEBUG: Remove this.
|
// TODO: Implement.
|
||||||
// var result:VoicesGroup = new VoicesGroup(this.song.songId, null, false);
|
|
||||||
var result:VoicesGroup = new VoicesGroup('bopeebo', null, false);
|
return [""];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function buildVocals(charId:String = "bf"):VoicesGroup
|
||||||
|
{
|
||||||
|
var result:VoicesGroup = new VoicesGroup(this.song.songId, this.buildVoiceList());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ class SongDataParser
|
||||||
|
|
||||||
static final DEFAULT_SONG_ID = 'UNKNOWN';
|
static final DEFAULT_SONG_ID = 'UNKNOWN';
|
||||||
static final SONG_DATA_PATH = 'songs/';
|
static final SONG_DATA_PATH = 'songs/';
|
||||||
static final SONG_DATA_SUFFIX = '/metadata.json';
|
static final SONG_DATA_SUFFIX = '-metadata.json';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses and preloads the game's song metadata and scripts when the game starts.
|
* Parses and preloads the game's song metadata and scripts when the game starts.
|
||||||
|
@ -56,7 +56,10 @@ class SongDataParser
|
||||||
//
|
//
|
||||||
// UNSCRIPTED SONGS
|
// UNSCRIPTED SONGS
|
||||||
//
|
//
|
||||||
var songIdList:Array<String> = DataAssets.listDataFilesInPath(SONG_DATA_PATH, SONG_DATA_SUFFIX);
|
var songIdList:Array<String> = DataAssets.listDataFilesInPath(SONG_DATA_PATH, SONG_DATA_SUFFIX).map(function(songDataPath:String):String
|
||||||
|
{
|
||||||
|
return songDataPath.split('/')[0];
|
||||||
|
});
|
||||||
var unscriptedSongIds:Array<String> = songIdList.filter(function(songId:String):Bool
|
var unscriptedSongIds:Array<String> = songIdList.filter(function(songId:String):Bool
|
||||||
{
|
{
|
||||||
return !songCache.exists(songId);
|
return !songCache.exists(songId);
|
||||||
|
@ -154,7 +157,7 @@ class SongDataParser
|
||||||
|
|
||||||
static function loadSongMetadataFile(songPath:String, variation:String = ''):String
|
static function loadSongMetadataFile(songPath:String, variation:String = ''):String
|
||||||
{
|
{
|
||||||
var songMetadataFilePath:String = (variation != '') ? Paths.json('$SONG_DATA_PATH$songPath/metadata-$variation') : Paths.json('$SONG_DATA_PATH$songPath/metadata');
|
var songMetadataFilePath:String = (variation != '') ? Paths.json('$SONG_DATA_PATH$songPath/$songPath-metadata-$variation') : Paths.json('$SONG_DATA_PATH$songPath/$songPath-metadata');
|
||||||
|
|
||||||
var rawJson:String = Assets.getText(songMetadataFilePath).trim();
|
var rawJson:String = Assets.getText(songMetadataFilePath).trim();
|
||||||
|
|
||||||
|
@ -192,7 +195,7 @@ class SongDataParser
|
||||||
|
|
||||||
static function loadSongChartDataFile(songPath:String, variation:String = ''):String
|
static function loadSongChartDataFile(songPath:String, variation:String = ''):String
|
||||||
{
|
{
|
||||||
var songChartDataFilePath:String = (variation != '') ? Paths.json('$SONG_DATA_PATH$songPath/chart-$variation') : Paths.json('$SONG_DATA_PATH$songPath/chart');
|
var songChartDataFilePath:String = (variation != '') ? Paths.json('$SONG_DATA_PATH$songPath/$songPath-chart-$variation') : Paths.json('$SONG_DATA_PATH$songPath/$songPath-chart');
|
||||||
|
|
||||||
var rawJson:String = Assets.getText(songChartDataFilePath).trim();
|
var rawJson:String = Assets.getText(songChartDataFilePath).trim();
|
||||||
|
|
||||||
|
@ -600,17 +603,6 @@ typedef RawSongTimeChange =
|
||||||
var bt:OneOfTwo<Int, Array<Int>>;
|
var bt:OneOfTwo<Int, Array<Int>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef RawConductorTimeChange =
|
|
||||||
{
|
|
||||||
> RawSongTimeChange,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The time in the song (in steps) that this change occurs at.
|
|
||||||
* This time is somewhat weird because the rate it increases is dependent on the BPM at that point in the song.
|
|
||||||
*/
|
|
||||||
public var st:Float;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add aliases to the minimalized property names of the typedef,
|
* Add aliases to the minimalized property names of the typedef,
|
||||||
* to improve readability.
|
* to improve readability.
|
||||||
|
|
Loading…
Reference in a new issue