Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions source/funkin/data/SongMetaData.hx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ typedef SongMetaData =
var ?coders:Array<String>;

var ?displayName:String;
var ?difficulties:Array<String>;

var ?freeplayColor:String;
var ?freeplayIcon:String;
Expand Down
6 changes: 3 additions & 3 deletions source/funkin/data/WeekData.hx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ typedef WeekFile =
var hiddenUntilUnlocked:Bool;
var hideStoryMode:Bool;
var hideFreeplay:Bool;
var difficulties:String;
var difficulties:Array<String>;
}

class WeekData
Expand All @@ -43,7 +43,7 @@ class WeekData
public var hiddenUntilUnlocked:Bool = false;
public var hideStoryMode:Bool = false;
public var hideFreeplay:Bool = false;
public var difficulties:String = '';
public var difficulties:Array<String> = [];

public var fileName:String;
public var folder:String = '';
Expand All @@ -67,7 +67,7 @@ class WeekData
hiddenUntilUnlocked: false,
hideStoryMode: false,
hideFreeplay: false,
difficulties: ''
difficulties: ['Easy', 'Normal', 'Hard']
};
return weekFile;
}
Expand Down
133 changes: 57 additions & 76 deletions source/funkin/states/FreeplayState.hx
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,14 @@ class FreeplayState extends MusicBeatState

loadFreeplayData();

if (WeekData.weeksList.length == 0 && freeplayTabs.length == 0)
if (freeplayTabs.length == 0)
{
CoolUtil.setTransSkip(true, false);
persistentUpdate = false;
FlxG.switchState(() -> new FallbackState('Cannot load Freeplay as there are no weeks or tabs loaded.', () -> FlxG.switchState(MainMenuState.new)));
FlxG.switchState(() -> new FallbackState('Cannot load Freeplay as there are no tabs loaded.', () -> FlxG.switchState(MainMenuState.new)));
return;
}

if (freeplayTabs.length == 0) loadFreeplayFromWeeks();

initStateScript();

scriptGroup.set('SongMetadata', SongMetadata);
Expand Down Expand Up @@ -149,17 +147,12 @@ class FreeplayState extends MusicBeatState
debugTxt.screenCenter(Y);
add(debugTxt);

if (freeplayTabs.length > 0) loadTab(0);
else createSongs();

WeekData.setDirectoryFromWeek();

if (freeplayTabs.length > 0) changeTab();
changeTab();

changeSelection();
changeDiff();

if (curSelected >= songs.length) curSelected = 0;
bg.color = songs[curSelected].color;
intendedColor = bg.color;

Expand Down Expand Up @@ -208,11 +201,25 @@ class FreeplayState extends MusicBeatState
iconArray.push(icon);
add(icon);
}

changeSelection();
}

public function addSong(songName:String, displayName:String, weekNum:Int, songCharacter:String, color:Int)
public function addSong(songName:String, weekName:String = "")
{
songs.push(new SongMetadata(songName, displayName, weekNum, songCharacter, color));
var displayName:String = songName;
var icon:String = "face";
var color:String = "#8DA399";

var songMeta = getSongMeta(songName);
if (songMeta != null)
{
if (songMeta.displayName != null) displayName = songMeta.displayName;
if (songMeta.freeplayIcon != null) icon = songMeta.freeplayIcon;
if (songMeta.freeplayColor != null) color = songMeta.freeplayColor;
}

songs.push(new SongMetadata(songName, displayName, weekName, icon, FlxColor.fromString(color)));
}

function weekIsLocked(name:String):Bool
Expand All @@ -234,7 +241,7 @@ class FreeplayState extends MusicBeatState
FlxG.sound.music.volume += 0.5 * FlxG.elapsed;
}

if (WeekData.weeksList.length == 0) return;
if (freeplayTabs.length == 0) return;

lerpScore = Math.floor(FlxMath.lerp(lerpScore, intendedScore, FlxMath.bound(elapsed * 24, 0, 1)));
lerpRating = FlxMath.lerp(lerpRating, intendedRating, FlxMath.bound(elapsed * 12, 0, 1));
Expand Down Expand Up @@ -438,27 +445,6 @@ class FreeplayState extends MusicBeatState
}
}

function loadFreeplayFromWeeks()
{
for (i in 0...WeekData.weeksList.length)
{
if (weekIsLocked(WeekData.weeksList[i])) continue;

var leWeek:WeekData = WeekData.weeksLoaded.get(WeekData.weeksList[i]);

WeekData.setDirectoryFromWeek(leWeek);
for (song in leWeek.songs)
{
var colors:Array<Int> = song[2];
if (colors == null || colors.length < 3)
{
colors = [146, 113, 253];
}
addSong(song[0], song[0], i, song[1], FlxColor.fromRGB(colors[0], colors[1], colors[2]));
}
}
}

function getSongMeta(song:String):Null<SongMetaData>
{
return SongMeta.getFromPath(Paths.json('$song/data/meta'));
Expand All @@ -474,22 +460,27 @@ class FreeplayState extends MusicBeatState
function loadTab(tab:Int):Void
{
var tab = freeplayTabs[tab];
for (song in tab.songs)
if (tab.songs == null) tab.songs = [];

if (tab.fromWeeks != null)
{
var displayName:String = song;
var icon:String = "face";
var weekNum:Int = 0;
var color:String = "#8DA399";

var songMeta = getSongMeta(song);
if (songMeta != null)
for (weekName in tab.fromWeeks)
{
if (songMeta.displayName != null) displayName = songMeta.displayName;
if (songMeta.freeplayIcon != null) icon = songMeta.freeplayIcon;
if (songMeta.freeplayColor != null) color = songMeta.freeplayColor;
if (weekIsLocked(weekName)) continue;

var week:WeekData = WeekData.weeksLoaded[weekName];

WeekData.setDirectoryFromWeek(week);
for (song in week.songs)
{
addSong(Paths.sanitize(song[0]), week.fileName);
}
}

addSong(song, displayName, weekNum, icon, FlxColor.fromString(color));
}

for (song in tab.songs)
{
addSong(song);
}
}

Expand Down Expand Up @@ -527,9 +518,6 @@ class FreeplayState extends MusicBeatState
FlxTween.color(bg, 1, bg.color, intendedColor);
}

intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty);
intendedRating = Highscore.getRating(songs[curSelected].songName, curDifficulty);

for (i in 0...iconArray.length)
{
iconArray[i].alpha = 0.6;
Expand All @@ -550,31 +538,22 @@ class FreeplayState extends MusicBeatState
}

Mods.currentModDirectory = songs[curSelected].folder;
PlayState.storyMeta.curWeek = songs[curSelected].week;

Difficulty.reset();

var diffStr:String = WeekData.getCurrentWeek().difficulties;
if (diffStr != null) diffStr = diffStr.trim(); // Fuck you HTML5
var songMeta = getSongMeta(songs[curSelected].songName);

var weekDiffs:Array<String> = [];
var songWeek = WeekData.weeksLoaded[songs[curSelected].week];
if (songWeek != null) weekDiffs = songWeek.difficulties;

if (diffStr != null && diffStr.length > 0)
if (songMeta != null && songMeta.difficulties != null)
{
var diffs:Array<String> = diffStr.split(',');
var i:Int = diffs.length - 1;
while (i > 0)
{
if (diffs[i] != null)
{
diffs[i] = diffs[i].trim();
if (diffs[i].length < 1) diffs.remove(diffs[i]);
}
--i;
}

if (diffs.length > 0 && diffs[0].length > 0)
{
Difficulty.difficulties = diffs;
}
Difficulty.difficulties = songMeta.difficulties;
}
else if (weekDiffs != null && weekDiffs.length > 0)
{
Difficulty.difficulties = weekDiffs;
}

if (Difficulty.difficulties.contains(Difficulty.defaultDifficulty))
Expand All @@ -591,6 +570,9 @@ class FreeplayState extends MusicBeatState
{
curDifficulty = newPos;
}

intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty);
intendedRating = Highscore.getRating(songs[curSelected].songName, curDifficulty);
}

function changeTab(diff:Int = 0)
Expand All @@ -604,8 +586,6 @@ class FreeplayState extends MusicBeatState

loadTab(currentTab);

curSelected = Std.int(Math.min(curSelected, freeplayTabs[currentTab].songs.length - 1));

createSongs();
}

Expand Down Expand Up @@ -642,12 +622,12 @@ class SongMetadata
{
public var displayName:String = "";
public var songName:String = "";
public var week:Int = 0;
public var week:String = "";
public var songCharacter:String = "";
public var color:Int = -7179779;
public var folder:String = "";

public function new(song:String, displayName:String, week:Int, songCharacter:String, color:Int)
public function new(song:String, displayName:String, week:String, songCharacter:String, color:Int)
{
this.songName = song;
this.displayName = displayName;
Expand All @@ -666,6 +646,7 @@ typedef FreeplayData =

typedef FreeplayTab =
{
var ?title:String;
var songs:Array<String>;
var title:String;
var ?fromWeeks:Array<String>;
var ?songs:Array<String>;
}
22 changes: 3 additions & 19 deletions source/funkin/states/StoryMenuState.hx
Original file line number Diff line number Diff line change
Expand Up @@ -416,28 +416,12 @@ class StoryMenuState extends MusicBeatState
PlayState.storyMeta.curWeek = curWeek;

Difficulty.reset();
var diffStr:String = WeekData.getCurrentWeek().difficulties;
if (diffStr != null) diffStr = diffStr.trim(); // Fuck you HTML5
var diffs:Array<String> = WeekData.getCurrentWeek().difficulties;
difficultySelectors.visible = unlocked;

if (diffStr != null && diffStr.length > 0)
if (diffs != null && diffs.length > 0)
{
var diffs:Array<String> = diffStr.split(',');
var i:Int = diffs.length - 1;
while (i > 0)
{
if (diffs[i] != null)
{
diffs[i] = diffs[i].trim();
if (diffs[i].length < 1) diffs.remove(diffs[i]);
}
--i;
}

if (diffs.length > 0 && diffs[0].length > 0)
{
Difficulty.difficulties = diffs;
}
Difficulty.difficulties = diffs;
}

if (Difficulty.difficulties.contains(Difficulty.defaultDifficulty))
Expand Down
23 changes: 21 additions & 2 deletions source/funkin/states/editors/WeekEditorState.hx
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ class WeekEditorState extends MusicBeatState
weekBeforeInputText.text = weekFile.weekBefore;

difficultiesInputText.text = '';
if (weekFile.difficulties != null) difficultiesInputText.text = weekFile.difficulties;
if (weekFile.difficulties != null) difficultiesInputText.text = weekFile.difficulties.join(',');

lockedCheckbox.checked = !weekFile.startUnlocked;
lock.visible = lockedCheckbox.checked;
Expand Down Expand Up @@ -434,7 +434,26 @@ class WeekEditorState extends MusicBeatState
}
else if (sender == difficultiesInputText)
{
weekFile.difficulties = difficultiesInputText.text.trim();
var rawDiffString:String = difficultiesInputText.text.trim();
if (rawDiffString != null && rawDiffString.length > 0)
{
var diffs:Array<String> = rawDiffString.split(',');
var i:Int = diffs.length - 1;
while (i > 0)
{
if (diffs[i] != null)
{
diffs[i] = diffs[i].trim();
if (diffs[i].length < 1) diffs.remove(diffs[i]);
}
--i;
}

if (diffs.length > 0 && diffs[0].length > 0)
{
weekFile.difficulties = diffs;
}
}
}
}
}
Expand Down
Loading