Files
CodenameEngine/source/funkin/game/GameOverSubstate.hx
T
6e23da8e86 Add more stuff from the OG game and more PART 1 (#228)
* senpai fucking dies

* final flash fadeout

* made cutscene not play on restart

* winter horrorland + fixes

* fix for pixel perfect shader

* trail + fixes

* better + shaking

last update about it, i swear

* never fucking mind + repacks + accuracy

* more fixes + chromatic aberration

* i hate how pixel shader fucks everything up

* aberration in the cutscene & its cool twitch

* camera beats when twitching

* tank stuff pt1

now the cutscenes look 99% like og (still gotta freeze the stage animated sprites n stuff)
PS: Deleting the lipSycn function in ugh and guns cutscenes cause its not needed + sometimes breaks the animations so lets just leave it in stress only like it was in og

* week 5 completed + retrocompatibility with altanim

now chrima parents work

* philly train

* gameplay shaders option

better adding it now

* tank stuff pt2

* blue balled text (death counter)

* winter horrorland better rework WIP

colored vignette usable by everyone (you can change its color, amount and strength)
wip cuz i wanna edit the amount/strength based on the zoom, i'll do later, now i dont have time gotta do christmas irl stuff yay

* winter horrorland better rework completed

* seen cutscene variable

finally

* even better cutscenes

* oops

* tank stuff pt3

* tank stuff pt4

WIP running tanks

Co-Authored-By: Ne_Eo <NeeEoo@users.noreply.github.com>

* tankstuff pt4.5

imma check tmr why do some tankmen spawn too much up

* tank stuff pt4.75

* dumb

* tank stuff pt 4.9

* type on xml sprite type fix and more

Co-Authored-By: Ne_Eo <NeeEoo@users.noreply.github.com>

---------

Co-authored-by: Ne_Eo <NeeEoo@users.noreply.github.com>
Co-authored-by: lunarcleint <88809950+lunarcleint@users.noreply.github.com>
2024-02-04 00:54:00 -07:00

130 lines
3.2 KiB
Haxe

package funkin.game;
import flixel.addons.transition.FlxTransitionableState;
import flixel.sound.FlxSound;
import flixel.FlxSubState;
import flixel.math.FlxPoint;
import flixel.util.FlxColor;
import flixel.util.FlxTimer;
import funkin.menus.StoryMenuState;
import funkin.menus.FreeplayState;
import funkin.backend.system.Conductor;
class GameOverSubstate extends MusicBeatSubstate
{
var character:Character;
public var characterName:String;
public var gameOverSong:String;
public var lossSFXName:String;
public var retrySFX:String;
public var player:Bool;
var camFollow:FlxObject;
var x:Float = 0;
var y:Float = 0;
public var lossSFX:FlxSound;
public function new(x:Float, y:Float, character:String = "bf-dead", player:Bool = true, gameOverSong:String = "gameOver", lossSFX:String = "gameOverSFX", retrySFX:String = "gameOverEnd") {
super();
this.x = x;
this.y = y;
this.characterName = character;
this.player = player;
this.gameOverSong = gameOverSong;
this.lossSFXName = lossSFX;
this.retrySFX = retrySFX;
}
public override function create()
{
super.create();
if (FlxG.sound.music != null)
FlxG.sound.music.stop();
character = new Character(x, y, characterName, player);
character.danceOnBeat = false;
character.playAnim('firstDeath');
add(character);
var camPos = character.getCameraPosition();
camFollow = new FlxObject(camPos.x, camPos.y, 1, 1);
add(camFollow);
FlxG.camera.target = camFollow;
lossSFX = FlxG.sound.play(Paths.sound(lossSFXName));
Conductor.changeBPM(100);
DiscordUtil.changePresence('Game Over', PlayState.SONG.meta.displayName + " (" + PlayState.difficulty + ")");
}
override function update(elapsed:Float)
{
super.update(elapsed);
if (controls.ACCEPT)
{
endBullshit();
}
if (controls.BACK)
{
PlayState.resetSongInfos();
if (FlxG.sound.music != null)
FlxG.sound.music.stop();
FlxG.sound.music = null;
if (PlayState.isStoryMode)
FlxG.switchState(new StoryMenuState());
else
FlxG.switchState(new FreeplayState());
}
if (!isEnding && ((!lossSFX.playing) || (character.getAnimName() == "firstDeath" && character.isAnimFinished())) && (FlxG.sound.music == null || !FlxG.sound.music.playing)) {
CoolUtil.playMusic(Paths.music(gameOverSong), false, 1, true, 100);
beatHit(0);
}
}
override function beatHit(curBeat:Int)
{
super.beatHit(curBeat);
if (FlxG.sound.music != null && FlxG.sound.music.playing)
character.playAnim("deathLoop", true, DANCE);
}
var isEnding:Bool = false;
function endBullshit():Void
{
if (!isEnding)
{
isEnding = true;
character.playAnim('deathConfirm', true);
if (FlxG.sound.music != null)
FlxG.sound.music.stop();
FlxG.sound.music = null;
var sound = FlxG.sound.play(Paths.sound(retrySFX));
var secsLength:Float = sound.length / 1000;
var waitTime = 0.7;
var fadeOutTime = secsLength - 0.7;
if (fadeOutTime < 0.5) {
fadeOutTime = secsLength;
waitTime = 0;
}
new FlxTimer().start(waitTime, function(tmr:FlxTimer)
{
FlxG.camera.fade(FlxColor.BLACK, fadeOutTime, false, function()
{
MusicBeatState.skipTransOut = true;
FlxG.switchState(new PlayState());
});
});
}
}
}