diff --git a/project.godot b/project.godot index ebb50bae..7d9b9c2f 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="GameJamDungeon" -run/main_scene="uid://d1gjaijijd5ot" +run/main_scene="uid://cagfc5ridmteu" run/print_header=false config/features=PackedStringArray("4.4", "C#", "GL Compatibility") run/delta_smoothing=false diff --git a/src/app/App.cs b/src/app/App.cs index 9722186d..025d07d6 100644 --- a/src/app/App.cs +++ b/src/app/App.cs @@ -2,6 +2,7 @@ using Chickensoft.GodotNodeInterfaces; using Chickensoft.Introspection; using Godot; +using static GameJamDungeon.AppLogic.Input; namespace GameJamDungeon; @@ -28,14 +29,24 @@ public partial class App : CanvasLayer, IApp [Node] public ISubViewport GameWindow { get; set; } = default!; + [Node] public ISplash Splash { get; set; } = default!; + [Node] public IColorRect BlankScreen { get; set; } = default!; + [Node] public IAnimationPlayer AnimationPlayer { get; set; } = default!; + public void Initialize() { Instantiator = new Instantiator(GetTree()); AppRepo = new AppRepo(); AppLogic = new AppLogic(); AppLogic.Set(AppRepo); + AppLogic.Set(new AppLogic.Data()); + Menu.NewGame += OnNewGame; + Menu.LoadGame += OnLoadGame; Menu.Quit += OnQuit; + + AnimationPlayer.AnimationFinished += OnAnimationFinished; + Input.MouseMode = Input.MouseModeEnum.Visible; this.Provide(); } @@ -45,22 +56,44 @@ public partial class App : CanvasLayer, IApp AppBinding = AppLogic.Bind(); AppBinding - .Handle((in AppLogic.Output.ShowLoadingScreen _) => + .Handle((in AppLogic.Output.ShowSplashScreen _) => { - Menu.Hide(); + HideMenus(); + BlankScreen.Hide(); + Splash.Show(); + }) + .Handle((in AppLogic.Output.HideSplashScreen _) => + { + BlankScreen.Show(); + FadeToBlack(); }) .Handle((in AppLogic.Output.SetupGameScene _) => { - Menu.Hide(); - Instantiator.SceneTree.Paused = true; Game = Instantiator.LoadAndInstantiate(GAME_SCENE_PATH); GameWindow.AddChildEx(Game); + Instantiator.SceneTree.Paused = false; }) + .Handle((in AppLogic.Output.ShowMainMenu _) => + { + // Load everything while we're showing a black screen, then fade in. + HideMenus(); + Menu.Show(); + Game.Show(); + + FadeInFromBlack(); + }) + .Handle((in AppLogic.Output.FadeToBlack _) => FadeToBlack()) + .Handle((in AppLogic.Output.HideGame _) => FadeToBlack()) .Handle((in AppLogic.Output.ShowGame _) => { - Instantiator.SceneTree.Paused = false; - Game.Show(); + HideMenus(); + FadeInFromBlack(); }) + .Handle((in AppLogic.Output.StartLoadingSaveFile _) => + { + Game.SaveFileLoaded += OnSaveFileLoaded; + Game.LoadExistingGame(); + }) .Handle((in AppLogic.Output.ExitGame _) => { GetTree().Quit(); @@ -70,9 +103,51 @@ public partial class App : CanvasLayer, IApp AppLogic.Start(); } - public void OnNewGame() => AppLogic.Input(new AppLogic.Input.NewGame()); + public void OnNewGame() => AppLogic.Input(new NewGame()); - public void OnQuit() => AppLogic.Input(new AppLogic.Input.QuitGame()); + private void OnLoadGame() => AppLogic.Input(new LoadGame()); + + public void OnQuit() => AppLogic.Input(new QuitGame()); + + public void OnSaveFileLoaded() + { + Game.SaveFileLoaded -= OnSaveFileLoaded; + AppLogic.Input(new SaveFileLoaded()); + } + + public void FadeInFromBlack() + { + BlankScreen.Show(); + AnimationPlayer.Play("fade_in"); + } + + public void FadeToBlack() + { + BlankScreen.Show(); + AnimationPlayer.Play("fade_out"); + } + + public void HideMenus() + { + Splash.Hide(); + Menu.Hide(); + } + + public void OnAnimationFinished(StringName animation) + { + // There's only two animations :) + // We don't care what state we're in — we just tell the current state what's + // happened and it will do the right thing. + + if (animation == "fade_in") + { + AppLogic.Input(new AppLogic.Input.FadeInFinished()); + BlankScreen.Hide(); + return; + } + + AppLogic.Input(new AppLogic.Input.FadeOutFinished()); + } public void OnExitTree() { diff --git a/src/app/App.tscn b/src/app/App.tscn index 1a9e8cf1..c14b7873 100644 --- a/src/app/App.tscn +++ b/src/app/App.tscn @@ -1,7 +1,60 @@ -[gd_scene load_steps=3 format=3 uid="uid://cagfc5ridmteu"] +[gd_scene load_steps=8 format=3 uid="uid://cagfc5ridmteu"] -[ext_resource type="Script" path="res://src/app/App.cs" id="1_rt73h"] +[ext_resource type="Script" uid="uid://d1f8blk5ucqvq" path="res://src/app/App.cs" id="1_rt73h"] [ext_resource type="PackedScene" uid="uid://rfvnddfqufho" path="res://src/menu/Menu.tscn" id="2_kvwo1"] +[ext_resource type="PackedScene" uid="uid://bd0p761qakisw" path="res://src/menu/splash/Splash.tscn" id="3_3st5l"] + +[sub_resource type="Animation" id="Animation_1uiag"] +resource_name = "fade_in" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("BlankScreenControl/BlankScreen:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.270588, 0, 0, 1), Color(0, 0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_3st5l"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("BlankScreenControl/BlankScreen:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0, 0, 0, 1)] +} + +[sub_resource type="Animation" id="Animation_v0mgf"] +resource_name = "fade_out" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("BlankScreenControl/BlankScreen:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0, 0, 0, 0), Color(0, 0, 0.454902, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_3st5l"] +_data = { +&"RESET": SubResource("Animation_3st5l"), +&"fade_in": SubResource("Animation_1uiag"), +&"fade_out": SubResource("Animation_v0mgf") +} [node name="App" type="CanvasLayer"] process_mode = 3 @@ -26,3 +79,31 @@ render_target_update_mode = 4 [node name="Menu" parent="." instance=ExtResource("2_kvwo1")] unique_name_in_owner = true +visible = false + +[node name="Splash" parent="." instance=ExtResource("3_3st5l")] +unique_name_in_owner = true + +[node name="BlankScreenControl" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="BlankScreen" type="ColorRect" parent="BlankScreenControl"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +unique_name_in_owner = true +libraries = { +&"": SubResource("AnimationLibrary_3st5l") +} diff --git a/src/app/domain/AppRepo.cs b/src/app/domain/AppRepo.cs index ccbd9fe0..f216a71e 100644 --- a/src/app/domain/AppRepo.cs +++ b/src/app/domain/AppRepo.cs @@ -12,8 +12,6 @@ public interface IAppRepo : IDisposable event Action? MainMenuEntered; - event Action? ShowLoadingScreen; - void SkipSplashScreen(); void OnMainMenuEntered(); @@ -23,9 +21,6 @@ public interface IAppRepo : IDisposable void OnExitGame(); void OnGameOver(); - - void OnShowLoadingScreen(); - } public class AppRepo : IAppRepo @@ -34,7 +29,6 @@ public class AppRepo : IAppRepo public event Action? MainMenuEntered; public event Action? GameEntered; public event Action? GameExited; - public event Action? ShowLoadingScreen; private bool _disposedValue; @@ -48,8 +42,6 @@ public class AppRepo : IAppRepo public void OnGameOver() => GameExited?.Invoke(); - public void OnShowLoadingScreen() => ShowLoadingScreen?.Invoke(); - protected void Dispose(bool disposing) { if (!_disposedValue) @@ -61,7 +53,6 @@ public class AppRepo : IAppRepo MainMenuEntered = null; GameEntered = null; GameExited = null; - ShowLoadingScreen = null; } _disposedValue = true; diff --git a/src/app/state/AppLogic.Data.cs b/src/app/state/AppLogic.Data.cs new file mode 100644 index 00000000..bd5b171b --- /dev/null +++ b/src/app/state/AppLogic.Data.cs @@ -0,0 +1,8 @@ +namespace GameJamDungeon; +public partial class AppLogic +{ + public record Data + { + public bool ShouldLoadExistingGame { get; set; } + } +} diff --git a/src/app/state/AppLogic.Input.cs b/src/app/state/AppLogic.Input.cs index 0174d8ea..c8c7c333 100644 --- a/src/app/state/AppLogic.Input.cs +++ b/src/app/state/AppLogic.Input.cs @@ -6,8 +6,11 @@ public partial class AppLogic { public readonly record struct NewGame; + public readonly record struct LoadGame; + public readonly record struct LoadGameFinished; + public readonly record struct FadeInFinished; public readonly record struct FadeOutFinished; public readonly record struct QuitGame; @@ -15,5 +18,7 @@ public partial class AppLogic public readonly record struct GameOver; public readonly record struct ShowLoadingScreen; + + public readonly record struct SaveFileLoaded; } } diff --git a/src/app/state/AppLogic.Output.cs b/src/app/state/AppLogic.Output.cs index 2fa5a4e6..ca00e952 100644 --- a/src/app/state/AppLogic.Output.cs +++ b/src/app/state/AppLogic.Output.cs @@ -27,5 +27,7 @@ public partial class AppLogic public readonly record struct ExitGame; public readonly record struct GameOver; + + public readonly record struct StartLoadingSaveFile; } } diff --git a/src/app/state/AppLogic.cs b/src/app/state/AppLogic.cs index 75ab20d4..fdc92428 100644 --- a/src/app/state/AppLogic.cs +++ b/src/app/state/AppLogic.cs @@ -9,5 +9,5 @@ public interface IAppLogic : ILogicBlock; [LogicBlock(typeof(State), Diagram = true)] public partial class AppLogic : LogicBlock, IAppLogic { - public override Transition GetInitialState() => To(); + public override Transition GetInitialState() => To(); } diff --git a/src/app/state/AppLogic.g.puml b/src/app/state/AppLogic.g.puml index 885c336b..4dd7c501 100644 --- a/src/app/state/AppLogic.g.puml +++ b/src/app/state/AppLogic.g.puml @@ -1,25 +1,30 @@ @startuml AppLogic state "AppLogic State" as GameJamDungeon_AppLogic_State { - state "SetupGameScene" as GameJamDungeon_AppLogic_State_SetupGameScene state "InGame" as GameJamDungeon_AppLogic_State_InGame - state "LoadingScreen" as GameJamDungeon_AppLogic_State_LoadingScreen + state "LeavingMenu" as GameJamDungeon_AppLogic_State_LeavingMenu + state "LoadingSaveFile" as GameJamDungeon_AppLogic_State_LoadingSaveFile state "MainMenu" as GameJamDungeon_AppLogic_State_MainMenu + state "SplashScreen" as GameJamDungeon_AppLogic_State_SplashScreen } GameJamDungeon_AppLogic_State_InGame --> GameJamDungeon_AppLogic_State_MainMenu : GameOver -GameJamDungeon_AppLogic_State_LoadingScreen --> GameJamDungeon_AppLogic_State_InGame : LoadGameFinished -GameJamDungeon_AppLogic_State_MainMenu --> GameJamDungeon_AppLogic_State_LoadingScreen : NewGame +GameJamDungeon_AppLogic_State_LeavingMenu --> GameJamDungeon_AppLogic_State_InGame : FadeOutFinished +GameJamDungeon_AppLogic_State_LeavingMenu --> GameJamDungeon_AppLogic_State_LoadingSaveFile : FadeOutFinished +GameJamDungeon_AppLogic_State_LoadingSaveFile --> GameJamDungeon_AppLogic_State_InGame : SaveFileLoaded +GameJamDungeon_AppLogic_State_MainMenu --> GameJamDungeon_AppLogic_State_LeavingMenu : LoadGame +GameJamDungeon_AppLogic_State_MainMenu --> GameJamDungeon_AppLogic_State_LeavingMenu : NewGame GameJamDungeon_AppLogic_State_MainMenu --> GameJamDungeon_AppLogic_State_MainMenu : QuitGame -GameJamDungeon_AppLogic_State_SetupGameScene --> GameJamDungeon_AppLogic_State_InGame : LoadGameFinished +GameJamDungeon_AppLogic_State_SplashScreen --> GameJamDungeon_AppLogic_State_MainMenu : FadeOutFinished GameJamDungeon_AppLogic_State_InGame : OnEnter → ShowGame GameJamDungeon_AppLogic_State_InGame : OnExit → HideGame GameJamDungeon_AppLogic_State_InGame : OnGameOver → RemoveExistingGame -GameJamDungeon_AppLogic_State_LoadingScreen : OnEnter → ShowLoadingScreen -GameJamDungeon_AppLogic_State_MainMenu : OnEnter → ShowMainMenu -GameJamDungeon_AppLogic_State_MainMenu : OnNewGame → SetupGameScene +GameJamDungeon_AppLogic_State_LeavingMenu : OnEnter → FadeToBlack +GameJamDungeon_AppLogic_State_LoadingSaveFile : OnEnter → StartLoadingSaveFile +GameJamDungeon_AppLogic_State_MainMenu : OnEnter → SetupGameScene, ShowMainMenu GameJamDungeon_AppLogic_State_MainMenu : OnQuitGame → ExitGame -GameJamDungeon_AppLogic_State_SetupGameScene : OnEnter → SetupGameScene, ShowGame +GameJamDungeon_AppLogic_State_SplashScreen : OnEnter → ShowSplashScreen +GameJamDungeon_AppLogic_State_SplashScreen : OnSplashScreenSkipped() → HideSplashScreen -[*] --> GameJamDungeon_AppLogic_State_SetupGameScene +[*] --> GameJamDungeon_AppLogic_State_SplashScreen @enduml \ No newline at end of file diff --git a/src/app/state/states/InGame.cs b/src/app/state/states/AppLogic.State.InGame.cs similarity index 92% rename from src/app/state/states/InGame.cs rename to src/app/state/states/AppLogic.State.InGame.cs index 2537ad8d..fa8275ba 100644 --- a/src/app/state/states/InGame.cs +++ b/src/app/state/states/AppLogic.State.InGame.cs @@ -30,7 +30,7 @@ public partial class AppLogic return To(); } - public void OnGameExited() => Input(new Input.GameOver()); + public void OnGameExited() => Input(new Input.QuitGame()); } } } diff --git a/src/app/state/states/AppLogic.State.LeavingMenu.cs b/src/app/state/states/AppLogic.State.LeavingMenu.cs new file mode 100644 index 00000000..8e25dd3a --- /dev/null +++ b/src/app/state/states/AppLogic.State.LeavingMenu.cs @@ -0,0 +1,24 @@ +namespace GameJamDungeon; + +using Chickensoft.Introspection; +using Chickensoft.LogicBlocks; + +public partial class AppLogic +{ + public partial record State + { + [Meta] + public partial record LeavingMenu : State, IGet + { + public LeavingMenu() + { + this.OnEnter(() => Output(new Output.FadeToBlack())); + } + + public Transition On(in Input.FadeOutFinished input) => + Get().ShouldLoadExistingGame + ? To() + : To(); + } + } +} diff --git a/src/app/state/states/AppLogic.State.LoadingSaveFile.cs b/src/app/state/states/AppLogic.State.LoadingSaveFile.cs new file mode 100644 index 00000000..bfb4f946 --- /dev/null +++ b/src/app/state/states/AppLogic.State.LoadingSaveFile.cs @@ -0,0 +1,20 @@ +namespace GameJamDungeon; + +using Chickensoft.Introspection; +using Chickensoft.LogicBlocks; + +public partial class AppLogic +{ + public partial record State + { + [Meta] + public partial record LoadingSaveFile : State, IGet + { + public LoadingSaveFile() + { + this.OnEnter(() => Output(new Output.StartLoadingSaveFile())); + } + public Transition On(in Input.SaveFileLoaded input) => To(); + } + } +} diff --git a/src/app/state/states/MainMenu.cs b/src/app/state/states/AppLogic.State.MainMenu.cs similarity index 65% rename from src/app/state/states/MainMenu.cs rename to src/app/state/states/AppLogic.State.MainMenu.cs index 6ed488e5..3e6512e1 100644 --- a/src/app/state/states/MainMenu.cs +++ b/src/app/state/states/AppLogic.State.MainMenu.cs @@ -8,20 +8,28 @@ public partial class AppLogic public partial record State { [Meta] - public partial record MainMenu : State, IGet, IGet + public partial record MainMenu : State, IGet, IGet, IGet { public MainMenu() { this.OnEnter(() => { + Get().ShouldLoadExistingGame = false; + Output(new Output.SetupGameScene()); Get().OnMainMenuEntered(); Output(new Output.ShowMainMenu()); }); } + public Transition On(in Input.NewGame input) { - Output(new Output.SetupGameScene()); - return To(); + return To(); + } + + public Transition On(in Input.LoadGame input) + { + Get().ShouldLoadExistingGame = true; + return To(); } public Transition On(in Input.QuitGame input) diff --git a/src/app/state/states/AppLogic.State.SetupGameScene.cs b/src/app/state/states/AppLogic.State.SetupGameScene.cs deleted file mode 100644 index fd074d2a..00000000 --- a/src/app/state/states/AppLogic.State.SetupGameScene.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Chickensoft.Introspection; -using Chickensoft.LogicBlocks; - -namespace GameJamDungeon; - -public partial class AppLogic -{ - public partial record State - { - [Meta] - public partial record SetupGameScene : State, IGet - { - public SetupGameScene() - { - this.OnEnter(() => - { - Output(new Output.SetupGameScene()); - Output(new Output.ShowGame()); - Input(new Input.LoadGameFinished()); - }); - } - - public Transition On(in Input.LoadGameFinished input) - { - return To(); - } - } - } -} diff --git a/src/app/state/states/AppLogic.State.SplashScreen.cs b/src/app/state/states/AppLogic.State.SplashScreen.cs new file mode 100644 index 00000000..794cb373 --- /dev/null +++ b/src/app/state/states/AppLogic.State.SplashScreen.cs @@ -0,0 +1,32 @@ +namespace GameJamDungeon; + +using Chickensoft.Introspection; +using Chickensoft.LogicBlocks; + +public partial class AppLogic +{ + public partial record State + { + [Meta] + public partial record SplashScreen : State, IGet + { + public SplashScreen() + { + this.OnEnter(() => Output(new Output.ShowSplashScreen())); + + OnAttach( + () => Get().SplashScreenSkipped += OnSplashScreenSkipped + ); + + OnDetach( + () => Get().SplashScreenSkipped -= OnSplashScreenSkipped + ); + } + + public Transition On(in Input.FadeOutFinished input) => To(); + + public void OnSplashScreenSkipped() => + Output(new Output.HideSplashScreen()); + } + } +} diff --git a/src/app/state/states/LoadingScreen.cs b/src/app/state/states/LoadingScreen.cs deleted file mode 100644 index cd781b10..00000000 --- a/src/app/state/states/LoadingScreen.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Chickensoft.Introspection; -using Chickensoft.LogicBlocks; - -namespace GameJamDungeon; - -public partial class AppLogic -{ - public partial record State - { - [Meta] - public partial record LoadingScreen : State, IGet - { - public LoadingScreen() - { - this.OnEnter(() => - { - Output(new Output.ShowLoadingScreen()); - }); - } - - public Transition On(in Input.LoadGameFinished input) => To(); - } - } -} \ No newline at end of file diff --git a/src/game/Game.cs b/src/game/Game.cs index 3fa6f82a..e8fb5523 100644 --- a/src/game/Game.cs +++ b/src/game/Game.cs @@ -75,6 +75,9 @@ public partial class Game : Node3D, IGame public ISaveChunk GameChunk { get; set; } = default!; ISaveChunk IProvide>.Value() => GameChunk; + + [Signal] + public delegate void SaveFileLoadedEventHandler(); #endregion public RescuedItemDatabase RescuedItems { get; set; } = default!; @@ -186,6 +189,7 @@ public partial class Game : Node3D, IGame .Handle((in GameLogic.Output.StartGame _) => { InGameUI.Show(); + GameRepo.Resume(); }) .Handle((in GameLogic.Output.GoToOverworld _) => { @@ -254,6 +258,12 @@ public partial class Game : Node3D, IGame SaveFile.Load(); } + public void LoadExistingGame() + { + SaveFile.Load() + .ContinueWith((_) => CallDeferred(nameof(FinishedLoadingSaveFile))); + } + public void TogglePause() { if (GameLogic.Value is Paused) @@ -483,5 +493,8 @@ public partial class Game : Node3D, IGame GameLogic.Input(new GameLogic.Input.PauseMenuTransitioned()); } - public void OnStart() => GameLogic.Input(new GameLogic.Input.StartGame()); + private void FinishedLoadingSaveFile() + { + EmitSignal(SignalName.SaveFileLoaded); + } } diff --git a/src/game/GameLogic.cs b/src/game/GameLogic.cs index 45b2e23a..594ff665 100644 --- a/src/game/GameLogic.cs +++ b/src/game/GameLogic.cs @@ -9,5 +9,5 @@ public interface IGameLogic : ILogicBlock; [LogicBlock(typeof(State), Diagram = true)] public partial class GameLogic : LogicBlock, IGameLogic { - public override Transition GetInitialState() => To(); + public override Transition GetInitialState() => To(); } diff --git a/src/game/GameLogic.g.puml b/src/game/GameLogic.g.puml index 6ae74104..ae57eb66 100644 --- a/src/game/GameLogic.g.puml +++ b/src/game/GameLogic.g.puml @@ -1,6 +1,6 @@ @startuml GameLogic state "GameLogic State" as GameJamDungeon_GameLogic_State { - state "GameStarted" as GameJamDungeon_GameLogic_State_GameStarted + state "MenuBackdrop" as GameJamDungeon_GameLogic_State_MenuBackdrop state "Playing" as GameJamDungeon_GameLogic_State_Playing { state "AskForTeleport" as GameJamDungeon_GameLogic_State_AskForTeleport state "FloorClearedDecisionState" as GameJamDungeon_GameLogic_State_FloorClearedDecisionState @@ -17,8 +17,8 @@ GameJamDungeon_GameLogic_State_AskForTeleport --> GameJamDungeon_GameLogic_State GameJamDungeon_GameLogic_State_FloorClearedDecisionState --> GameJamDungeon_GameLogic_State_FloorClearedDecisionState : GoToNextFloor GameJamDungeon_GameLogic_State_FloorClearedDecisionState --> GameJamDungeon_GameLogic_State_Playing : HideFloorClearMenu GameJamDungeon_GameLogic_State_FloorClearedDecisionState --> GameJamDungeon_GameLogic_State_Playing : SaveGame -GameJamDungeon_GameLogic_State_GameStarted --> GameJamDungeon_GameLogic_State_Playing : Initialize GameJamDungeon_GameLogic_State_InventoryOpened --> GameJamDungeon_GameLogic_State_Playing : CloseInventory +GameJamDungeon_GameLogic_State_MenuBackdrop --> GameJamDungeon_GameLogic_State_Playing : StartGame GameJamDungeon_GameLogic_State_MinimapOpen --> GameJamDungeon_GameLogic_State_Playing : MiniMapButtonReleased GameJamDungeon_GameLogic_State_Paused --> GameJamDungeon_GameLogic_State_Resuming : UnpauseGame GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_AskForTeleport : AskForTeleport @@ -32,16 +32,16 @@ GameJamDungeon_GameLogic_State_Resuming --> GameJamDungeon_GameLogic_State_Playi GameJamDungeon_GameLogic_State : OnIsPaused() → SetPauseMode GameJamDungeon_GameLogic_State_FloorClearedDecisionState : OnGoToNextFloor → LoadNextFloor GameJamDungeon_GameLogic_State_FloorClearedDecisionState : OnSaveGame → SaveGame -GameJamDungeon_GameLogic_State_GameStarted : OnInitialize → StartGame GameJamDungeon_GameLogic_State_InventoryOpened : OnEnter → OpenInventory GameJamDungeon_GameLogic_State_InventoryOpened : OnExit → HideInventory GameJamDungeon_GameLogic_State_MinimapOpen : OnEnter → ShowMiniMap GameJamDungeon_GameLogic_State_MinimapOpen : OnExit → HideMiniMap GameJamDungeon_GameLogic_State_Paused : OnEnter → ShowPauseMenu GameJamDungeon_GameLogic_State_Paused : OnExit → ExitPauseMenu +GameJamDungeon_GameLogic_State_Playing : None → StartGame GameJamDungeon_GameLogic_State_Playing : OnGoToOverworld → GoToOverworld GameJamDungeon_GameLogic_State_Quit : OnEnter → ShowLostScreen GameJamDungeon_GameLogic_State_Resuming : OnExit → HidePauseMenu -[*] --> GameJamDungeon_GameLogic_State_GameStarted +[*] --> GameJamDungeon_GameLogic_State_MenuBackdrop @enduml \ No newline at end of file diff --git a/src/game/GameRepo.cs b/src/game/GameRepo.cs index d6561c15..ff17f007 100644 --- a/src/game/GameRepo.cs +++ b/src/game/GameRepo.cs @@ -41,7 +41,7 @@ public class GameRepo : IGameRepo public GameRepo() { - _isPaused = new AutoProp(false); + _isPaused = new AutoProp(true); _playerGlobalTransform = new AutoProp(Transform3D.Identity); } diff --git a/src/game/IGame.cs b/src/game/IGame.cs index efc3d38a..b5120f19 100644 --- a/src/game/IGame.cs +++ b/src/game/IGame.cs @@ -9,6 +9,10 @@ using System; public interface IGame : IProvide, IProvide, IProvide, IProvide, IProvide>, INode3D { + void LoadExistingGame(); + + event Game.SaveFileLoadedEventHandler? SaveFileLoaded; + event Game.StatRaisedAlertEventHandler StatRaisedAlert; public RescuedItemDatabase RescuedItems { get; } diff --git a/src/game/state/states/GameLogic.State.GameStarted.cs b/src/game/state/states/GameLogic.State.GameStarted.cs deleted file mode 100644 index 0e8028ba..00000000 --- a/src/game/state/states/GameLogic.State.GameStarted.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Chickensoft.Introspection; -using Chickensoft.LogicBlocks; - -namespace GameJamDungeon; - -public partial class GameLogic -{ - public partial record State - { - [Meta] - public partial record GameStarted : State, IGet - { - public GameStarted() - { - this.OnEnter(() => { Get().Pause(); }); - this.OnExit(() => { Get().Resume(); }); - } - - public Transition On(in Input.Initialize input) - { - Output(new Output.StartGame()); - return To(); - } - } - } -} diff --git a/src/game/state/states/GameLogic.State.MenuBackdrop.cs b/src/game/state/states/GameLogic.State.MenuBackdrop.cs new file mode 100644 index 00000000..31cbc21d --- /dev/null +++ b/src/game/state/states/GameLogic.State.MenuBackdrop.cs @@ -0,0 +1,23 @@ +namespace GameJamDungeon; + +using Chickensoft.Introspection; + +public partial class GameLogic +{ + public partial record State + { + [Meta] + public partial record MenuBackdrop : State, IGet + { + public MenuBackdrop() + { + OnAttach(() => Get().GameEntered += OnGameEntered); + OnDetach(() => Get().GameEntered -= OnGameEntered); + } + + public void OnGameEntered() => Input(new Input.StartGame()); + + public Transition On(in Input.StartGame input) => To(); + } + } +} diff --git a/src/game/state/states/GameLogic.State.Playing.cs b/src/game/state/states/GameLogic.State.Playing.cs index 6ae0cab6..30b0ef1c 100644 --- a/src/game/state/states/GameLogic.State.Playing.cs +++ b/src/game/state/states/GameLogic.State.Playing.cs @@ -1,4 +1,5 @@ using Chickensoft.Introspection; +using Chickensoft.LogicBlocks; namespace GameJamDungeon; @@ -17,6 +18,7 @@ public partial class GameLogic { public Playing() { + OnAttach(() => Output(new Output.StartGame())); } public void OnEnded() => Input(new Input.GameOver()); diff --git a/src/map/dungeon/floors/Floor01.tscn b/src/map/dungeon/floors/Floor01.tscn index 034cff35..ffe1125b 100644 --- a/src/map/dungeon/floors/Floor01.tscn +++ b/src/map/dungeon/floors/Floor01.tscn @@ -1,12 +1,10 @@ -[gd_scene load_steps=15 format=3 uid="uid://bc1sp6xwe0j65"] +[gd_scene load_steps=13 format=3 uid="uid://bc1sp6xwe0j65"] [ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_0ecnn"] [ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_cxmwa"] [ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/rooms/Set A/03. Antechamber A.tscn" id="3_gkkr3"] [ext_resource type="PackedScene" uid="uid://dn5546yqyntfr" path="res://src/map/dungeon/rooms/Set A/10. Item Transfer Room.tscn" id="6_atq1f"] -[ext_resource type="Script" uid="uid://ce73fuh74l81l" path="res://addons/SimpleDungeons/DungeonRoom3D.gd" id="8_1l8yt"] [ext_resource type="PackedScene" uid="uid://b82dx66mgs2d7" path="res://src/map/dungeon/rooms/Set A/08. Basin Room.tscn" id="8_5rblf"] -[ext_resource type="Script" uid="uid://fk3jis6rsipv" path="res://src/map/dungeon/code/corridor.gd" id="9_lcc45"] [ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="12_aw26s"] [ext_resource type="PackedScene" uid="uid://cihbmyo0ltq4m" path="res://src/map/dungeon/rooms/Set A/19. Floor Exit A.tscn" id="12_n02rw"] [ext_resource type="PackedScene" uid="uid://bksq62muhk3h5" path="res://src/enemy/enemy_types/01. sproingy/Sproingy.tscn" id="13_kwaga"] @@ -14,6 +12,8 @@ [ext_resource type="PackedScene" uid="uid://b0gwivt7cw7nd" path="res://src/enemy/enemy_types/02. michael/Michael.tscn" id="14_gkkr3"] [sub_resource type="NavigationMesh" id="NavigationMesh_xw4dv"] +vertices = PackedVector3Array(38, -0.588592, 22.75, 38, -0.588592, 23.75, 39.5, -0.588592, 23.75, 19.75, -0.588592, 25, 17, -0.588592, 25, 17, -0.588592, 26, 16.5, -0.588592, 26.25, 16.75, -0.588592, 30.5, 33.5, -0.588592, -20.75, 33.5, -0.588592, -17.5, 36.5, -0.588592, -17.5, -20.5, -0.588592, -29.5, -17.25, -0.588592, -29.5, -17.25, -0.588592, -32.75, -11.5, -0.588592, -23, -14.5, -0.588592, -23, -14.75, -0.588592, -19.25, 16.75, -0.588592, 13.5, 16.5, -0.588592, 18, 17.25, -0.588592, 18.5, 30.75, -0.588592, 18.5, 37.5, -0.588592, -16.75, 39.5, -0.588592, -39.5, -10.5, -0.588592, -23.5, -0.75, -0.588592, -15, -1.25, -0.588592, -15.5, 4.5, -0.588592, -33.5, 5.5, -0.588592, -32.75, 32.5, -0.588592, -21.5, -28.5, -0.588592, -25.5, -21.25, -0.588592, -25.5, -21.25, -0.588592, -28.75, 16.25, -0.588592, 32.5, 19.75, -0.588592, 39.5, -0.75, -0.588592, 11.5, -22.75, -0.588592, -11.25, -28.75, -0.588592, -11, -39.5, -0.588592, 39.5, -0.75, -0.588592, 32.25, -1.25, -0.588592, -27, -10.5, -0.588592, -27, -22.5, -0.588592, -19, -29.25, -0.588592, -24.75, -39.5, -0.588592, -39.5, -16.5, -0.588592, -33.5, -29.25, -0.588592, -11.5, 16.25, -0.588592, 11.25, 30.75, -0.588592, -11, 27.25, -0.588592, -11, 37.5, -0.588592, 22.5, 26.75, -0.588592, -11.5, 26.75, -0.588592, -15, 5.5, -0.588592, -21.5, 13.75, -0.588592, 13.5, 15, -0.588592, 13.25, 15, -0.588592, 12.75, 0.75, -0.588592, 12.75, 0.75, -0.588592, 13.25, 2.25, -0.588592, 13.5, 2.25, -0.588592, 30.25, 0.75, -0.588592, 30.5, 0.75, -0.588592, 31, 15, -0.588592, 31, 13.75, -0.588592, 30.5, 15, -0.588592, 27.5, 15, -0.588592, 26.25, 14.25, -0.588592, 26, 13.75, -0.588592, 27.75, 6.75, -0.588592, 23.5, 6.5, -0.588592, 20.75, 2.25, -0.588592, 16, 0.75, -0.588592, 16.25, 0.75, -0.588592, 27.5, 2.25, -0.588592, 27.75, 9.5, -0.588592, 23.25, 14.25, -0.588592, 18.25, 15, -0.588592, 18, 15, -0.588592, 16.25, 13.75, -0.588592, 16, 9.25, -0.588592, 20.5, 14.75, -0.588592, 21.5, 14.25, -0.588592, 21.25, 20.5, 6.66141, 24.75, 20.5, 6.66141, 27.25, 23.25, 6.66141, 27.25, 23.25, 6.66141, 24.75, 36.75, 6.66141, 24.75, 36.75, 6.66141, 27.25, 39.25, 6.66141, 27.25, 39.25, 6.66141, 24.75, 21, -0.588592, 25, 21, -0.588592, 27, 23, -0.588592, 27, 23, -0.588592, 25, 25.25, -0.588592, 38.5, 25.25, -0.588592, 39.5, 26.75, -0.588592, 39.5, 27, -0.588592, 38.25, 35.75, -0.588592, 36, 36, -0.588592, 28.25, 35.75, -0.588592, 25.25, 24.25, -0.588592, 38.25, 24, -0.588592, 35.75, 39.25, -0.588592, 35.75, 39.25, -0.588592, 28.25, 29.75, -0.588592, 38.25, 30, -0.588592, 39.25, 35.75, -0.588592, 39.25, 24.25, -0.588592, 25, 24, -0.588592, 28.25, 21, -0.588592, 28.25, 21, -0.588592, 35.75, 20.75, 6.66141, 36.75, 20.75, 6.66141, 39.25, 23.25, 6.66141, 39.25, 23.25, 6.66141, 36.75, 36.75, 6.66141, 36.75, 36.75, 6.66141, 39.25, 39.25, 6.66141, 39.25, 39.25, 6.66141, 36.75, 37, -0.588592, 37, 37, -0.588592, 39, 39, -0.588592, 39, 39, -0.588592, 37) +polygons = [PackedInt32Array(2, 1, 0), PackedInt32Array(5, 4, 3), PackedInt32Array(5, 3, 6), PackedInt32Array(6, 3, 7), PackedInt32Array(10, 9, 8), PackedInt32Array(13, 12, 11), PackedInt32Array(16, 15, 14), PackedInt32Array(18, 17, 19), PackedInt32Array(19, 17, 20), PackedInt32Array(10, 8, 21), PackedInt32Array(21, 8, 22), PackedInt32Array(14, 23, 16), PackedInt32Array(16, 23, 25), PackedInt32Array(16, 25, 24), PackedInt32Array(27, 26, 28), PackedInt32Array(28, 26, 22), PackedInt32Array(31, 30, 29), PackedInt32Array(7, 3, 32), PackedInt32Array(32, 3, 33), PackedInt32Array(35, 34, 36), PackedInt32Array(36, 34, 38), PackedInt32Array(36, 38, 37), PackedInt32Array(11, 31, 29), PackedInt32Array(40, 39, 23), PackedInt32Array(23, 39, 25), PackedInt32Array(41, 16, 35), PackedInt32Array(35, 16, 24), PackedInt32Array(22, 8, 28), PackedInt32Array(43, 29, 42), PackedInt32Array(13, 11, 29), PackedInt32Array(13, 29, 44), PackedInt32Array(44, 29, 43), PackedInt32Array(0, 21, 2), PackedInt32Array(2, 21, 22), PackedInt32Array(45, 36, 37), PackedInt32Array(17, 46, 20), PackedInt32Array(20, 46, 48), PackedInt32Array(20, 48, 47), PackedInt32Array(32, 33, 38), PackedInt32Array(38, 33, 37), PackedInt32Array(0, 49, 21), PackedInt32Array(42, 45, 43), PackedInt32Array(43, 45, 37), PackedInt32Array(44, 43, 26), PackedInt32Array(26, 43, 22), PackedInt32Array(50, 48, 46), PackedInt32Array(50, 46, 51), PackedInt32Array(51, 46, 34), PackedInt32Array(51, 34, 24), PackedInt32Array(24, 34, 35), PackedInt32Array(28, 52, 27), PackedInt32Array(54, 53, 55), PackedInt32Array(55, 53, 58), PackedInt32Array(55, 58, 57), PackedInt32Array(55, 57, 56), PackedInt32Array(60, 59, 61), PackedInt32Array(61, 59, 63), PackedInt32Array(61, 63, 62), PackedInt32Array(65, 64, 66), PackedInt32Array(66, 64, 67), PackedInt32Array(73, 72, 68), PackedInt32Array(68, 72, 69), PackedInt32Array(69, 72, 70), PackedInt32Array(70, 72, 71), PackedInt32Array(73, 68, 59), PackedInt32Array(59, 68, 74), PackedInt32Array(59, 74, 67), PackedInt32Array(59, 67, 63), PackedInt32Array(76, 75, 77), PackedInt32Array(77, 75, 78), PackedInt32Array(78, 79, 53), PackedInt32Array(53, 79, 69), PackedInt32Array(53, 69, 70), PackedInt32Array(53, 70, 58), PackedInt32Array(81, 80, 66), PackedInt32Array(78, 75, 81), PackedInt32Array(66, 67, 81), PackedInt32Array(81, 67, 74), PackedInt32Array(81, 74, 79), PackedInt32Array(81, 79, 78), PackedInt32Array(85, 84, 82), PackedInt32Array(82, 84, 83), PackedInt32Array(89, 88, 86), PackedInt32Array(86, 88, 87), PackedInt32Array(93, 92, 90), PackedInt32Array(90, 92, 91), PackedInt32Array(95, 94, 96), PackedInt32Array(96, 94, 97), PackedInt32Array(100, 99, 98), PackedInt32Array(94, 101, 97), PackedInt32Array(97, 101, 102), PackedInt32Array(104, 103, 99), PackedInt32Array(99, 103, 98), PackedInt32Array(106, 105, 107), PackedInt32Array(107, 105, 98), PackedInt32Array(105, 97, 102), PackedInt32Array(109, 108, 102), PackedInt32Array(102, 108, 105), PackedInt32Array(105, 108, 98), PackedInt32Array(98, 108, 100), PackedInt32Array(109, 102, 110), PackedInt32Array(110, 102, 111), PackedInt32Array(115, 114, 112), PackedInt32Array(112, 114, 113), PackedInt32Array(119, 118, 116), PackedInt32Array(116, 118, 117), PackedInt32Array(123, 122, 120), PackedInt32Array(120, 122, 121)] sample_partition_type = 2 geometry_parsed_geometry_type = 1 geometry_collision_mask = 2147483648 @@ -43,222 +43,128 @@ corridor_cost_multiplier = 0.1 show_debug_in_editor = false hide_debug_visuals_for_all_generated_rooms = false -[node name="BasinRoom_0" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("8_5rblf")] +[node name="BasinRoom_0" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("8_5rblf")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 8, 0, 22) -script = ExtResource("8_1l8yt") -size_in_voxels = Vector3i(5, 1, 4) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 2 -[node name="Antechamber A_1" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("3_gkkr3")] +[node name="Antechamber A_1" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("3_gkkr3")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 32) -script = ExtResource("8_1l8yt") -size_in_voxels = Vector3i(5, 1, 4) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 2 -[node name="Floor Exit A_2" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("12_n02rw")] +[node name="Floor Exit A_2" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("12_n02rw")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 22, 0, -30) -script = ExtResource("8_1l8yt") -size_in_voxels = Vector3i(5, 1, 9) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 1 -[node name="Item Transfer Room_3" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("6_atq1f")] +[node name="Item Transfer Room_3" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("6_atq1f")] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -16, 0, -14) -script = ExtResource("8_1l8yt") -size_in_voxels = Vector3i(3, 1, 4) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 1 -[node name="Corridor_4" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_4" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18, 0, 22) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_5" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_5" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, 22) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_6" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_6" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 26, 0, 22) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_7" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_7" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 22) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_8" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_8" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, 22) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_9" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_9" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, 18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_10" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_10" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, 14) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_11" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_11" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, 10) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_12" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_12" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, 6) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_13" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_13" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, 2) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_14" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_14" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, -2) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_15" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_15" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, -6) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_16" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_16" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, -10) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_17" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_17" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, -14) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_18" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_18" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, -14) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_19" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_19" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, -18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_20" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_20" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 26, 0, -18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_21" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_21" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, -18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_22" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_22" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18, 0, -18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_23" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_23" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0, -18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_24" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_24" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_25" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_25" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, -18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_26" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_26" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, -18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_27" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_27" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, -22) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_28" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_28" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, -26) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_29" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_29" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, -30) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_30" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_30" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, -30) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_31" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_31" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 0, -30) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_32" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_32" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -30) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_33" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_33" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14, 0, -30) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_34" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_34" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14, 0, -26) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_35" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_35" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18, 0, -26) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_36" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_36" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18, 0, -22) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_37" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_37" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22, 0, -22) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_38" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_38" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26, 0, -22) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_39" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_39" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26, 0, -18) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_40" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] +[node name="Corridor_40" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("13_ofywd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26, 0, -14) -script = ExtResource("9_lcc45") -voxel_scale = Vector3(4, 4, 4) [node name="RoomsContainer" type="Node3D" parent="NavigationRegion3D/DungeonGenerator"] diff --git a/src/map/dungeon/floors/Floor03.tscn b/src/map/dungeon/floors/Floor03.tscn index 8ed9c9e1..01e26d8b 100644 --- a/src/map/dungeon/floors/Floor03.tscn +++ b/src/map/dungeon/floors/Floor03.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=21 format=3 uid="uid://dl1scvkp8r5sw"] +[gd_scene load_steps=19 format=3 uid="uid://dl1scvkp8r5sw"] [ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="1_ou8lo"] [ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/rooms/Set A/03. Antechamber A.tscn" id="3_yeqmp"] @@ -14,8 +14,6 @@ [ext_resource type="PackedScene" uid="uid://cihbmyo0ltq4m" path="res://src/map/dungeon/rooms/Set A/19. Floor Exit A.tscn" id="11_0ea7q"] [ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="11_kyvxc"] [ext_resource type="PackedScene" uid="uid://bksq62muhk3h5" path="res://src/enemy/enemy_types/01. sproingy/Sproingy.tscn" id="12_1j6d5"] -[ext_resource type="Script" uid="uid://ce73fuh74l81l" path="res://addons/SimpleDungeons/DungeonRoom3D.gd" id="12_g81xt"] -[ext_resource type="Script" uid="uid://fk3jis6rsipv" path="res://src/map/dungeon/code/corridor.gd" id="13_0ea7q"] [ext_resource type="PackedScene" uid="uid://b0gwivt7cw7nd" path="res://src/enemy/enemy_types/02. michael/Michael.tscn" id="13_q8fb5"] [ext_resource type="PackedScene" uid="uid://cvk007twac22c" path="res://src/enemy/enemy_types/03. filth_eater/FilthEater.tscn" id="14_g81xt"] @@ -47,467 +45,266 @@ dungeon_size = Vector3i(30, 1, 30) voxel_scale = Vector3(4, 4, 4) generate_on_ready = false -[node name="Floor Exit A_0" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("11_0ea7q")] +[node name="Floor Exit A_0" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("11_0ea7q")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, -34, 0, -22) -script = ExtResource("12_g81xt") -size_in_voxels = Vector3i(5, 1, 9) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 1 -[node name="RansRoom_1" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("10_1j6d5")] +[node name="RansRoom_1" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("10_1j6d5")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 8, 0, 10) -script = ExtResource("12_g81xt") -size_in_voxels = Vector3i(8, 1, 9) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 1 -[node name="BasinRoom_2" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("4_2o7kq")] +[node name="BasinRoom_2" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("4_2o7kq")] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -32, 0, -46) -script = ExtResource("12_g81xt") -size_in_voxels = Vector3i(5, 1, 4) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 2 -[node name="Water Room_3" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("8_06hbf")] +[node name="Water Room_3" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("8_06hbf")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 38, 0, 16) -script = ExtResource("12_g81xt") -size_in_voxels = Vector3i(7, 1, 12) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 2 -[node name="Column Room_4" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("6_o010k")] +[node name="Column Room_4" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("6_o010k")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, -46, 0, 20) -script = ExtResource("12_g81xt") -size_in_voxels = Vector3i(12, 1, 7) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 1 -[node name="Balcony Room A_5" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("5_wo0bu")] +[node name="Balcony Room A_5" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("5_wo0bu")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 42, 0, -44) -script = ExtResource("12_g81xt") -size_in_voxels = Vector3i(9, 1, 8) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 1 -[node name="Pit Room A_6" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("9_imrv0")] +[node name="Pit Room A_6" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("9_imrv0")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 2, 0, -26) -script = ExtResource("12_g81xt") -size_in_voxels = Vector3i(9, 1, 9) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 2 -[node name="Antechamber A_7" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("3_yeqmp")] +[node name="Antechamber A_7" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("3_yeqmp")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 52, 0, 50) -script = ExtResource("12_g81xt") -size_in_voxels = Vector3i(5, 1, 4) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 2 -[node name="Statue Room_8" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("9_ym1ny")] +[node name="Statue Room_8" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("9_ym1ny")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, -20, 0, 4) -script = ExtResource("12_g81xt") -size_in_voxels = Vector3i(4, 1, 4) -voxel_scale = Vector3(4, 4, 4) -min_count = 1 -max_count = 2 -[node name="Corridor_9" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_9" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -54, 0, -22) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_10" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_10" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -54, 0, -18) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_11" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_11" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -54, 0, -14) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_12" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_12" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -54, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_13" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_13" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -50, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_14" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_14" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -46, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_15" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_15" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -42, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_16" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_16" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -38, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_17" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_17" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -34, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_18" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_18" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_19" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_19" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_20" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_20" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_21" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_21" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_22" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_22" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18, 0, -6) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_23" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_23" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14, 0, -6) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_24" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_24" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -6) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_25" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_25" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -2) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_26" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_26" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 2) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_27" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_27" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 6) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_28" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_28" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_29" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_29" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -54, 0, -26) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_30" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_30" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -54, 0, -30) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_31" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_31" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -54, 0, -34) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_32" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_32" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -54, 0, -38) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_33" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_33" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -54, 0, -42) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_34" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_34" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -50, 0, -42) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_35" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_35" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -46, 0, -42) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_36" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_36" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -46, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_37" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_37" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -42, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_38" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_38" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -42, 0, -50) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_39" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_39" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -42, 0, -54) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_40" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_40" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -42, 0, -58) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_41" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_41" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -38, 0, -58) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_42" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_42" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -34, 0, -58) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_43" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_43" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -58) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_44" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_44" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26, 0, -58) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_45" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_45" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22, 0, -58) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_46" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_46" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22, 0, -54) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_47" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_47" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22, 0, -50) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_48" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_48" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18, 0, -50) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_49" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_49" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14, 0, -50) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_50" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_50" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_51" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_51" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_52" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_52" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_53" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_53" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_54" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_54" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_55" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_55" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, -26) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_56" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_56" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, -22) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_57" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_57" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, -18) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_58" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_58" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, -14) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_59" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_59" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_60" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_60" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 26, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_61" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_61" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_62" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_62" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_63" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_63" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 38, 0, -10) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_64" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_64" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -6) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_65" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_65" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -2) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_66" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_66" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 2) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_67" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_67" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 6) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_68" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_68" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_69" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_69" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_70" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_70" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_71" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_71" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_72" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_72" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, -46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_73" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_73" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 30) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_74" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_74" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 30) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_75" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_75" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0, 30) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_76" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_76" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18, 0, 30) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_77" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_77" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, 30) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_78" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_78" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, 34) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_79" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_79" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, 38) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_80" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_80" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 0, 42) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_81" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_81" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 26, 0, 42) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_82" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_82" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 42) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_83" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_83" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34, 0, 42) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_84" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_84" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 38, 0, 42) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_85" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_85" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 42, 0, 42) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) -[node name="Corridor_86" type="Node3D" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] +[node name="Corridor_86" parent="NavigationRegion3D/DungeonGenerator" instance=ExtResource("7_qjouh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 42, 0, 46) -script = ExtResource("13_0ea7q") -voxel_scale = Vector3(4, 4, 4) [node name="RoomsContainer" type="Node3D" parent="NavigationRegion3D/DungeonGenerator"] diff --git a/src/menu/Menu.cs b/src/menu/Menu.cs index 5a05bc75..a4426a4a 100644 --- a/src/menu/Menu.cs +++ b/src/menu/Menu.cs @@ -9,6 +9,7 @@ namespace GameJamDungeon; public interface IMenu : IControl { event Menu.NewGameEventHandler NewGame; + event Menu.LoadGameEventHandler LoadGame; event Menu.QuitEventHandler Quit; } @@ -17,20 +18,23 @@ public partial class Menu : Control, IMenu { public override void _Notification(int what) => this.Notify(what); - [Node] - public IButton NewGameButton { get; set; } = default!; + [Node] public IButton NewGameButton { get; set; } = default!; - [Node] - public IButton QuitButton { get; set; } = default!; + [Node] public IButton LoadGameButton { get; set; } = default!; + + [Node] public IButton QuitButton { get; set; } = default!; [Signal] public delegate void NewGameEventHandler(); [Signal] + public delegate void LoadGameEventHandler(); + [Signal] public delegate void QuitEventHandler(); public void OnReady() { NewGameButton.Pressed += OnNewGamePressed; + LoadGameButton.Pressed += OnLoadGamePressed; QuitButton.Pressed += OnQuitPressed; NewGameButton.GrabFocus(); } @@ -38,11 +42,14 @@ public partial class Menu : Control, IMenu public void OnExitTree() { NewGameButton.Pressed -= OnNewGamePressed; + LoadGameButton.Pressed -= OnLoadGamePressed; QuitButton.Pressed -= OnQuitPressed; } public void OnNewGamePressed() => EmitSignal(SignalName.NewGame); + public void OnLoadGamePressed() => EmitSignal(SignalName.LoadGame); + public void OnQuitPressed() => EmitSignal(SignalName.Quit); public override void _UnhandledInput(InputEvent @event) diff --git a/src/menu/Menu.tscn b/src/menu/Menu.tscn index 548bdfdb..9137db01 100644 --- a/src/menu/Menu.tscn +++ b/src/menu/Menu.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://rfvnddfqufho"] -[ext_resource type="Script" path="res://src/menu/Menu.cs" id="1_vehpg"] +[ext_resource type="Script" uid="uid://14b7o2c6cgry" path="res://src/menu/Menu.cs" id="1_vehpg"] [node name="Menu" type="Control"] layout_mode = 3 @@ -33,6 +33,11 @@ unique_name_in_owner = true layout_mode = 2 text = "New Game" +[node name="LoadGameButton" type="Button" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Load Game" + [node name="QuitButton" type="Button" parent="MarginContainer/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 diff --git a/src/menu/splash/Splash.cs b/src/menu/splash/Splash.cs index 96caac76..392871ff 100644 --- a/src/menu/splash/Splash.cs +++ b/src/menu/splash/Splash.cs @@ -15,8 +15,7 @@ public partial class Splash : Control, ISplash [Dependency] public IAppRepo AppRepo => this.DependOn(); - [Node] - public IAnimationPlayer AnimationPlayer { get; set; } = default!; + [Node] public IAnimationPlayer AnimationPlayer { get; set; } = default!; public void OnReady() => AnimationPlayer.AnimationFinished += OnAnimationFinished; @@ -26,4 +25,12 @@ public partial class Splash : Control, ISplash public void OnAnimationFinished(StringName name) => AppRepo.SkipSplashScreen(); + + public override void _Input(InputEvent @event) + { + if (Input.IsActionJustPressed(GameInputs.Attack) || Input.IsActionJustPressed(GameInputs.Pause)) + { + AppRepo.SkipSplashScreen(); + } + } } diff --git a/src/menu/splash/Splash.tscn b/src/menu/splash/Splash.tscn new file mode 100644 index 00000000..ec11fcf7 --- /dev/null +++ b/src/menu/splash/Splash.tscn @@ -0,0 +1,65 @@ +[gd_scene load_steps=5 format=3 uid="uid://bd0p761qakisw"] + +[ext_resource type="Script" uid="uid://cl3shd6l7frmg" path="res://src/menu/splash/Splash.cs" id="1_7ivmr"] + +[sub_resource type="Animation" id="Animation_7ivmr"] +resource_name = "intro" +length = 3.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("ColorRect:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_jiqgw"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("ColorRect:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_jiqgw"] +_data = { +&"RESET": SubResource("Animation_jiqgw"), +&"intro": SubResource("Animation_7ivmr") +} + +[node name="Splash" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_7ivmr") + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +unique_name_in_owner = true +libraries = { +&"": SubResource("AnimationLibrary_jiqgw") +} +autoplay = "intro"