Skip to content
Open
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
23 changes: 22 additions & 1 deletion source/funkin/data/freeplay/style/FreeplayStyleData.hx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package funkin.data.freeplay.style;
import funkin.data.animation.AnimationData;

/**
* A type definition for the data for an album of songs.
* A type definition for the data for a freeplay style.
* It includes things like what graphics to display in Freeplay.
* @see https://lib.haxe.org/p/json2object/
*/
Expand Down Expand Up @@ -40,6 +40,27 @@ typedef FreeplayStyleData =
*/
public var capsuleTextColors:Array<String>;

@:optional
public var sounds:
{
@:optional
var freeplayRandomMusic:Null<String>;
@:optional
var fav:Null<String>;
@:optional
var unfav:Null<String>;
@:optional
var menu:
{
@:optional
var scroll:Null<String>;
@:optional
var cancel:Null<String>;
@:optional
var confirm:Null<String>;
};
};

/**
* Delay time after confirming a song selection, before entering PlayState.
* Useful for letting longer animations play out.
Expand Down
30 changes: 15 additions & 15 deletions source/funkin/ui/freeplay/FreeplayState.hx
Original file line number Diff line number Diff line change
Expand Up @@ -1460,13 +1460,13 @@ class FreeplayState extends MusicBeatSubState
else
{
trace('Not enough characters unlocked to open character select!');
FunkinSound.playOnce(Paths.sound('cancelMenu'));
FunkinSound.playOnce(Paths.sound(styleData?.getCancelMenuSoundKey() ?? 'cancelMenu'));
return;
}

uiStateMachine.transition(Exiting);

FunkinSound.playOnce(Paths.sound('confirmMenu'));
FunkinSound.playOnce(Paths.sound(styleData?.getConfirmMenuSoundKey() ?? 'confirmMenu'));

dj?.toCharSelect();

Expand Down Expand Up @@ -1853,7 +1853,7 @@ class FreeplayState extends MusicBeatSubState
{
trace('No songs available!');
uiStateMachine.transition(Idle);
FunkinSound.playOnce(Paths.sound('cancelMenu'));
FunkinSound.playOnce(Paths.sound(styleData?.getCancelMenuSoundKey() ?? 'cancelMenu'));
return;
}

Expand All @@ -1865,7 +1865,7 @@ class FreeplayState extends MusicBeatSubState
targetSongID = currentCapsule?.freeplayData?.data.id ?? 'unknown';
}
// Play the confirm animation so the user knows they actually did something.
FunkinSound.playOnce(Paths.sound('confirmMenu'));
FunkinSound.playOnce(Paths.sound(styleData?.getConfirmMenuSoundKey() ?? 'confirmMenu'));
// if (dj != null) dj.confirm();
dj?.onConfirm();
new FlxTimer().start(styleData?.getStartDelay(), function(tmr:FlxTimer)
Expand Down Expand Up @@ -1904,7 +1904,7 @@ class FreeplayState extends MusicBeatSubState
{
trace('No songs available!');
uiStateMachine.transition(Idle);
FunkinSound.playOnce(Paths.sound('cancelMenu'));
FunkinSound.playOnce(Paths.sound(styleData?.getCancelMenuSoundKey() ?? 'cancelMenu'));
return;
}

Expand Down Expand Up @@ -1968,7 +1968,7 @@ class FreeplayState extends MusicBeatSubState
{
curSelected = i;
changeSelection(0);
FunkinSound.playOnce(Paths.sound('scrollMenu'), 0.4);
FunkinSound.playOnce(Paths.sound(styleData?.getScrollMenuSoundKey() ?? 'scrollMenu'), 0.4);
HapticUtil.vibrate(0, 0.01, 0.5);
}
break;
Expand Down Expand Up @@ -2212,7 +2212,7 @@ class FreeplayState extends MusicBeatSubState

dispatchEvent(new FreeplayScriptEvent(FREEPLAY_OUTRO));

FunkinSound.playOnce(Paths.sound('cancelMenu'));
FunkinSound.playOnce(Paths.sound(styleData?.getCancelMenuSoundKey() ?? 'cancelMenu'));

var longestTimer:Float = 0;

Expand Down Expand Up @@ -2360,7 +2360,7 @@ class FreeplayState extends MusicBeatSubState
if (change != 0)
{
HapticUtil.vibrate(0, 0.01, 0.5, 0.1);
FunkinSound.playOnce(Paths.sound('scrollMenu'), 0.4);
FunkinSound.playOnce(Paths.sound(styleData?.getScrollMenuSoundKey() ?? 'scrollMenu'), 0.4);
}

var previousVariation:String = currentVariation;
Expand Down Expand Up @@ -2545,7 +2545,7 @@ class FreeplayState extends MusicBeatSubState
trace('No songs available!');
uiStateMachine.transition(Idle);

FunkinSound.playOnce(Paths.sound('cancelMenu'));
FunkinSound.playOnce(Paths.sound(styleData?.getCancelMenuSoundKey() ?? 'cancelMenu'));
return;
}

Expand Down Expand Up @@ -2735,7 +2735,7 @@ class FreeplayState extends MusicBeatSubState
}

// Visual and audio effects.
FunkinSound.playOnce(Paths.sound('confirmMenu'));
FunkinSound.playOnce(Paths.sound(styleData?.getConfirmMenuSoundKey() ?? 'confirmMenu'));
dj?.onConfirm();

currentCapsule.forcePosition();
Expand Down Expand Up @@ -2853,7 +2853,7 @@ class FreeplayState extends MusicBeatSubState

if (curSelected != prevSelected)
{
FunkinSound.playOnce(Paths.sound('scrollMenu'), 0.4);
FunkinSound.playOnce(Paths.sound(styleData?.getScrollMenuSoundKey() ?? 'scrollMenu'), 0.4);
HapticUtil.vibrate(0, 0.01, 0.5);
dj?.onPlayerAction(); // dj?.resetAFKTimer();
_pressedOnSelected = false;
Expand Down Expand Up @@ -2886,7 +2886,7 @@ class FreeplayState extends MusicBeatSubState
#end
}

if (!prepForNewRank && curSelected != prevSelected) FunkinSound.playOnce(Paths.sound('scrollMenu'), 0.4);
if (!prepForNewRank && curSelected != prevSelected) FunkinSound.playOnce(Paths.sound(styleData?.getScrollMenuSoundKey() ?? 'scrollMenu'), 0.4);

var songScore:Null<SaveScoreData> = Save.instance.getSongScore(currentCapsule.freeplayData?.data.id ?? "", currentDifficulty, currentVariation);
intendedScore = songScore?.score ?? 0;
Expand Down Expand Up @@ -2948,7 +2948,7 @@ class FreeplayState extends MusicBeatSubState

if (curSelected == 0)
{
FunkinSound.playMusic('freeplayRandom', {
FunkinSound.playMusic(styleData?.getFreeplayRandomMusicKey() ?? 'freeplayRandom', {
startingVolume: 0.0,
overrideExisting: true,
restartTrack: false
Expand Down Expand Up @@ -3060,7 +3060,7 @@ class FreeplayState extends MusicBeatSubState
selectedCapsule.favIconBlurred.visible = true;
selectedCapsule.favIcon.animation.play('fav');
selectedCapsule.favIconBlurred.animation.play('fav');
FunkinSound.playOnce(Paths.sound('fav'), 1);
FunkinSound.playOnce(Paths.sound(styleData?.getFavSoundKey() ?? 'fav'), 1);
selectedCapsule.checkClip();
selectedCapsule.selected = true; // set selected again, so it can run its getter function to initialize movement
uiStateMachine.transition(Interacting);
Expand All @@ -3082,7 +3082,7 @@ class FreeplayState extends MusicBeatSubState
{
selectedCapsule.favIcon.animation.play('fav', true, true, 9);
selectedCapsule.favIconBlurred.animation.play('fav', true, true, 9);
FunkinSound.playOnce(Paths.sound('unfav'), 1);
FunkinSound.playOnce(Paths.sound(styleData?.getUnFavSoundKey() ?? 'unfav'), 1);
new FlxTimer().start(0.2, _ ->
{
selectedCapsule.favIcon.visible = false;
Expand Down
32 changes: 31 additions & 1 deletion source/funkin/ui/freeplay/FreeplayStyle.hx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class FreeplayStyle implements IRegistryEntry<FreeplayStyleData>

if (_data == null)
{
throw 'Could not parse album data for id: $id';
throw 'Could not parse freeplay style for id: $id';
}
}

Expand Down Expand Up @@ -87,6 +87,36 @@ class FreeplayStyle implements IRegistryEntry<FreeplayStyleData>
return FlxColor.fromString(_data?.capsuleTextColors[0] ?? "#00ccff") ?? 0x00CCFF;
}

public function getFreeplayRandomMusicKey():String
{
return _data?.sounds?.freeplayRandomMusic ?? "freeplayRandom";
}

public function getFavSoundKey():String
{
return _data?.sounds?.fav ?? "fav";
}

public function getUnFavSoundKey():String
{
return _data?.sounds?.unfav ?? "unfav";
}

public function getScrollMenuSoundKey():String
{
return _data?.sounds?.menu?.scroll ?? "scrollMenu";
}

public function getCancelMenuSoundKey():String
{
return _data?.sounds?.menu?.cancel ?? "cancelMenu";
}

public function getConfirmMenuSoundKey():String
{
return _data?.sounds?.menu?.confirm ?? "confirmMenu";
}

/**
* Return the song selection transition delay.
* @return The start delay
Expand Down
Loading