fixed weapon slashes, removed some unused ones, cleaned up vfx filestructure, made new scene for overworld bad end and finalized animaiton + environment, more item fixes and some texture downsizes, took scripts off overworld duplicate and moved to EX folder

This commit is contained in:
Pal
2026-04-22 16:09:00 -07:00
parent 0d2acf8549
commit 6f79c64924
71 changed files with 4032 additions and 3872 deletions

View File

@@ -1,6 +1,6 @@
using Godot;
using Godot;
namespace Zennysoft.Game.Ma;
public abstract partial class FloorNode : Node
{
}
}

View File

@@ -37,29 +37,29 @@ public partial class Map : Node3D, IMap
public void OnResolved()
{
AnimationPlayer.AnimationFinished += AnimationPlayer_AnimationFinished;
this.Provide();
AnimationPlayer.AnimationFinished += AnimationPlayer_AnimationFinished;
this.Provide();
}
private async void AnimationPlayer_AnimationFinished(StringName animName)
{
if (animName == "fade_out")
{
await LoadNewFloor();
FloorLoaded?.Invoke();
}
if (animName == "fade_out")
{
await LoadNewFloor();
FloorLoaded?.Invoke();
}
}
private async Task LoadNewFloor()
{
SpawnPointCreated?.Invoke((Vector3.Forward, new Vector3(-999, -999, -999)));
var newFloor = await LoadNewFloor(_sceneName);
ClearFloor();
AddChild(newFloor);
InitializeFloor(newFloor);
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value);
if (CurrentFloor is DungeonFloor dungeonFloor && floor is DungeonFloorNode dungeonFloorNode)
dungeonFloor.SpawnEnemies(dungeonFloorNode);
SpawnPointCreated?.Invoke((Vector3.Forward, new Vector3(-999, -999, -999)));
var newFloor = await LoadNewFloor(_sceneName);
ClearFloor();
AddChild(newFloor);
InitializeFloor(newFloor);
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value);
if (CurrentFloor is DungeonFloor dungeonFloor && floor is DungeonFloorNode dungeonFloorNode)
dungeonFloor.SpawnEnemies(dungeonFloorNode);
}
public void FadeIn() => AnimationPlayer.Play("fade_in");
@@ -67,66 +67,66 @@ public partial class Map : Node3D, IMap
public void InitializeMapData()
{
CurrentFloorNumber.OnNext(-1);
CurrentFloorNumber.OnNext(-1);
}
public IDungeonRoom GetPlayersCurrentRoom()
{
var rooms = CurrentFloor.Rooms;
var playersRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
return playersRoom;
var rooms = CurrentFloor.Rooms;
var playersRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
return playersRoom;
}
public (Vector3 Rotation, Vector3 Position) GetPlayerSpawnPosition()
{
var spawnPoint = CurrentFloor.GetPlayerSpawnPoint();
return (spawnPoint.Rotation, spawnPoint.Position);
var spawnPoint = CurrentFloor.GetPlayerSpawnPoint();
return (spawnPoint.Rotation, spawnPoint.Position);
}
public void ClearFloor()
{
CurrentFloor?.CallDeferred(MethodName.QueueFree, []);
CurrentFloor?.CallDeferred(MethodName.QueueFree, []);
}
public async Task LoadFloor()
{
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value + 1);
var sceneToLoad = LayoutToScenePathConverter.Convert(floor);
await LoadFloor(sceneToLoad);
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value + 1);
var sceneToLoad = LayoutToScenePathConverter.Convert(floor);
await LoadFloor(sceneToLoad);
}
public async Task LoadFloor(string sceneName)
{
CallDeferred(MethodName.FadeOut);
_sceneName = sceneName;
var dimmableAudio = GetTree().GetNodesInGroup("DimmableAudio").OfType<IDimmableAudioStreamPlayer>();
foreach (var node in dimmableAudio)
node.FadeOut();
CallDeferred(MethodName.FadeOut);
_sceneName = sceneName;
var dimmableAudio = GetTree().GetNodesInGroup("DimmableAudio").OfType<IDimmableAudioStreamPlayer>();
foreach (var node in dimmableAudio)
node.FadeOut();
}
private void InitializeFloor(Node newFloor)
{
CurrentFloor = (IDungeonFloor)newFloor;
SetupDungeonFloor();
CurrentFloor.FloorIsLoaded = true;
CurrentFloorNumber.OnNext(CurrentFloorNumber.Value + 1);
CurrentFloor = (IDungeonFloor)newFloor;
SetupDungeonFloor();
CurrentFloor.FloorIsLoaded = true;
CurrentFloorNumber.OnNext(CurrentFloorNumber.Value + 1);
}
private async Task<Node> LoadNewFloor(string sceneName)
{
var sceneLoader = new SceneLoader();
AddChild(sceneLoader);
sceneLoader.LoadSceneRequest(sceneName);
await ToSignal(sceneLoader, SceneLoader.SignalName.SceneLoaded);
var result = sceneLoader.LoadedScene;
sceneLoader.QueueFree();
return result;
var sceneLoader = new SceneLoader();
AddChild(sceneLoader);
sceneLoader.LoadSceneRequest(sceneName);
await ToSignal(sceneLoader, SceneLoader.SignalName.SceneLoaded);
var result = sceneLoader.LoadedScene;
sceneLoader.QueueFree();
return result;
}
private void SetupDungeonFloor()
{
CurrentFloor.InitializeDungeon();
var transform = GetPlayerSpawnPosition();
SpawnPointCreated?.Invoke(transform);
CurrentFloor.InitializeDungeon();
var transform = GetPlayerSpawnPosition();
SpawnPointCreated?.Invoke(transform);
}
}

View File

@@ -61,7 +61,7 @@ height = 2.24425
radius = 1.941
[node name="SteleE" type="Node3D"]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
transform = Transform3D(0.43, 0, 0, 0, 0.43, 0, 0, 0, 0.43, 0, 0.0391899, 0)
script = ExtResource("1_kuew0")
[node name="Steles_" type="Node3D" parent="."]

View File

@@ -1,4 +1,4 @@
using Godot;
using Godot;
namespace Zennysoft.Game.Ma;
@@ -6,4 +6,4 @@ public partial class SpecialFloorNode : FloorNode
{
[Export]
public SpecialFloorType FloorName { get; set; }
}
}

View File

@@ -11,18 +11,18 @@ public partial class UnlockableDoor : Node3D, IDoor
public void OnReady()
{
UnlockArea.AreaEntered += UnlockArea_AreaEntered;
UnlockArea.AreaEntered += UnlockArea_AreaEntered;
}
private void UnlockArea_AreaEntered(Area3D area)
{
var children = GetChildren();
foreach (var child in children)
child.QueueFree();
var children = GetChildren();
foreach (var child in children)
child.QueueFree();
}
public void OnExitTree()
{
UnlockArea.AreaEntered -= UnlockArea_AreaEntered;
UnlockArea.AreaEntered -= UnlockArea_AreaEntered;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 MiB

After

Width:  |  Height:  |  Size: 55 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long