Files
resources/semag/fridaynightfunkin/assets/scripts/songs/roses.hxc
2025-06-22 12:00:12 -04:00

99 lines
2.5 KiB
Plaintext
Executable File

import funkin.play.song.Song;
import funkin.play.PlayState;
import funkin.Preferences;
import flixel.FlxSprite;
import funkin.graphics.FunkinSprite;
import funkin.Paths;
import flixel.FlxG;
import funkin.play.PlayStatePlaylist;
import funkin.audio.FunkinSound;
import flixel.tweens.FlxTween;
import flixel.tweens.FlxEase;
import funkin.ui.options.PreferencesMenu;
class RosesSong extends Song {
var hasPlayedCutscene:Bool;
public function new() {
super('roses');
}
public override function onCountdownStart(event:CountdownScriptEvent):Void {
super.onCountdownStart(event);
trace('Started countdown for Roses...');
if (!PlayStatePlaylist.isStoryMode) hasPlayedCutscene = true;
if (!hasPlayedCutscene) {
trace('Pausing countdown to play cutscene.');
hasPlayedCutscene = true;
event.cancel(); // CANCEL THE COUNTDOWN!
// Play a SFX
FunkinSound.playOnce(Paths.sound('ANGRY'), 1.0);
PlayState.instance.currentStage.pause();
startDialogue();
}
}
function startDialogue() {
if (Preferences.naughtyness) {
trace('Playing uncensored dialogue...');
PlayState.instance.startConversation('roses');
} else {
trace('Playing censored dialogue...');
PlayState.instance.startConversation('roses-censored');
}
}
/**
* Don't replay the cutscene between restarts.
*/
function onSongRetry(event:ScriptEvent)
{
super.onSongRetry(event);
hasPlayedCutscene = true;
}
/**
* Replay the cutscene after leaving the song.
*/
function onCreate(event:ScriptEvent):Void
{
super.onCreate(event);
hasPlayedCutscene = false;
}
function onBeatHit(event:SongTimeScriptEvent)
{
// When overriding onBeatHit, make sure to call super.onBeatHit,
// otherwise boppers will not work.
super.onBeatHit(event);
if (event.beat == 180 && PlayStatePlaylist.isStoryMode) {
trace('Hit end of song! Starting outro.');
PlayState.instance.camCutscene.visible = true;
var red = new FunkinSprite(-20, -20).makeSolidColor(FlxG.width * 1.5, FlxG.height * 1.5, 0xFFFF1B31);
red.cameras = [PlayState.instance.camCutscene];
red.alpha = 0.0;
FlxTween.tween(PlayState.instance.camHUD, {alpha: 0.0}, 1.5, {ease: FlxEase.linear});
FlxTween.tween(red, {alpha: 1.0}, 2.0, {ease: FlxEase.linear});
PlayState.instance.add(red);
}
}
public override function onDialogueEnd() {
// We may need to wait for the outro to play.
Countdown.performCountdown();
}
}