using System; using System.Collections; using Godot; public partial class GameOver { private static readonly AudioStream goTheme = GD.Load("res://Audio/Music/gameover_yellow.ogg"); public static bool repeatable; public static GameOver instance; private const string space = "\t\t\t\t\t\t\t"; private const float x = -72f; private const float x2 = 64f; private static PackedScene opt = GD.Load("res://Objects/UI/GameOverOpt.tscn"); public static IEnumerator DoGameOver(Vector2? soulPos = null) { instance = new GameOver(); float a; for (a = 0f; a < 10f; a += Main.deltaTime) { yield return null; } Audio.music.Stop(); Room.current.ProcessMode = Node.ProcessModeEnum.Disabled; if (BattleDR.current != null) { BattleDR.current.Visible = false; soulPos = DWMenu.instance.soulBody.GlobalPosition; } else { soulPos.GetValueOrDefault(); if (!soulPos.HasValue) { Vector2 value = Player.instance.GlobalPosition + new Vector2(0f, -16f); soulPos = value; } } DWMenu.instance.Visible = false; CameraController.instance.cover.SelfModulate = Main.colorBlack; CameraController.instance.cover.Visible = true; Control cover = CameraController.instance.cover; Sprite2D node; Sprite2D soul = (node = new Sprite2D { Texture = GD.Load("res://Sprites/Menus/Menu Sprites/Soul.tres"), SelfModulate = Main.colorYellow }); cover.AddChild(node, forceReadableName: false, Node.InternalMode.Disabled); soul.GlobalPosition = soulPos.Value; for (a = 0f; a < 30f; a += Main.deltaTime) { yield return null; } Audio.PlaySound("snd_break1.wav"); soul.Texture = GD.Load("res://Sprites/Menus/Menu Sprites/SoulBreak.tres"); for (a = 0f; a < 60f; a += Main.deltaTime) { yield return null; } Audio.PlaySound("snd_break2.wav"); ((Node2D)Main.Particle("SoulBreak", soul.Position, 4096, CameraController.instance)).GlobalPosition = soul.GlobalPosition; soul.Free(); for (a = 0f; a < 120f; a += Main.deltaTime) { yield return null; } Audio.ChangeMusic(goTheme); Control cover2 = CameraController.instance.cover; soul = (node = new Sprite2D { Texture = GD.Load("res://Sprites/Menus/Menu Sprites/GameOver.tres"), Position = new Vector2(204f, 135f), SelfModulate = Main.colorClear }); cover2.AddChild(node, forceReadableName: false, Node.InternalMode.Disabled); a = 0f; for (float b = 80f; a <= b + 1f; a += Main.deltaTime) { soul.SelfModulate = Main.colorClear.Lerp(Main.colorWhite, Mathf.Min(a / b, 1f)); yield return null; } Control o = opt.Instantiate(PackedScene.GenEditState.Disabled); o.Modulate = Main.colorClear; soul.AddChild(o, forceReadableName: false, Node.InternalMode.Disabled); o.Position = new Vector2(0f, 50f); Node2D s = o.GetChild(0); RichTextLabel text = o.GetChild(1); text.Text = "[center]" + Texts.common[52] + "\t\t\t\t\t\t\t" + Texts.common[53]; text.AnchorsPreset = 7; int option = -1; float gcCD = 0f; while (true) { o.Modulate = o.Modulate.Lerp(Main.colorWhite, Main.deltaTime * 0.15f); if (option != -1) { MoveSoul(s, in option); } if (Input.IsActionJustPressed(Main.keys[2])) { option = 0; text.Text = "[center][color=yellow]" + Texts.common[52] + "[/color]\t\t\t\t\t\t\t" + Texts.common[53]; } else if (Input.IsActionJustPressed(Main.keys[3])) { option = 1; text.Text = "[center]" + Texts.common[52] + "\t\t\t\t\t\t\t[color=yellow]" + Texts.common[53]; } else if (Input.IsActionJustPressed(Main.keys[4])) { switch (option) { case 0: { Audio.ChangeMusic((Audio.AudioBlock)null, 3f); AudioStreamPlayer sound = Audio.PlaySound("snd_dtrans_lw.ogg"); CameraController.Transition(Main.colorWhite, 180f); float b = 0f; for (a = 180f; b < a; b += Main.deltaTime) { soul.Modulate = Main.colorWhite.Lerp(Main.colorClear, b / a); MoveSoul(s, in option); yield return null; } while (sound.Playing) { yield return null; } if (BattleDR.current != null) { BattleDR.Abort(nullify: false); } if (FightingGame.instance != null) { Room.current.ProcessMode = Node.ProcessModeEnum.Inherit; FightingGame.instance.Start(); CameraController.Transition(Main.colorClearB, 10f); } else if (repeatable) { Coroutine.Start(BattleDR.StartBattle(null, BattleDR.reloadStats.Value.bg, BattleDR.reloadStats.Value.enemies, null, BattleDR.reloadStats.Value.mes, BattleDR.reloadStats.Value.audioBlock, quickIntro: true)); } else { CameraController.instance.GlobalPosition = Vector2.Zero; MainMenu.forceReload = SaveFile.current.slot; Main.instance.GetTree().ReloadCurrentScene(); } soul.QueueFree(); yield break; } case 1: Audio.ChangeMusic((Audio.AudioBlock)null, 3f); for (a = 0f; a < 180f; a += Main.deltaTime) { soul.SelfModulate = Main.colorWhite.Lerp(Main.colorClear, a / 180f); o.Modulate = o.Modulate.Lerp(Main.colorClear, Main.deltaTime * 0.15f); yield return null; } CameraController.instance.GlobalPosition = Vector2.Zero; Main.instance.GetTree().ReloadCurrentScene(); yield break; } } gcCD += Main.deltaTime; if (gcCD > 120f) { gcCD = 0f; GC.Collect(); } yield return null; } } private static void MoveSoul(Node2D s, in int option) { s.Position = s.Position.Lerp(new Vector2((option == 0) ? (-72f) : 64f, s.Position.Y), Main.deltaTime * 0.2f); } }