Compare commits

...

16 Commits

322 changed files with 18456 additions and 3131 deletions

5
.gitignore vendored
View File

@@ -715,3 +715,8 @@ healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017 # Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/ MigrationBackup/
/Zennysoft.Game.Ma/src/map/dungeon/models/Area 2/Puer/A2-Puer.glb.import
/Zennysoft.Game.Ma/src/audio/AMB/amb_beach.wav.import
/Zennysoft.Game.Ma/src/audio/AMB/amb_perlin.wav.import
/Zennysoft.Game.Ma/src/audio/AMB/amb_white_noise.wav.import
/Zennysoft.Game.Ma/src/audio/AMB/amb_wind_loop_altar.wav.import

View File

@@ -10,6 +10,8 @@ public interface IAppRepo : IDisposable
event Action? MainMenuEntered; event Action? MainMenuEntered;
event Action? DataViewerExited;
void SkipSplashScreen(); void SkipSplashScreen();
void OnMainMenuEntered(); void OnMainMenuEntered();
@@ -19,4 +21,6 @@ public interface IAppRepo : IDisposable
void OnExitGame(); void OnExitGame();
void OnGameOver(); void OnGameOver();
void OnDataViewerExited();
} }

View File

@@ -8,6 +8,7 @@ public class AppRepo : IAppRepo
public event Action? MainMenuEntered; public event Action? MainMenuEntered;
public event Action? GameEntered; public event Action? GameEntered;
public event Action? GameExited; public event Action? GameExited;
public event Action? DataViewerExited;
private bool _disposedValue; private bool _disposedValue;
@@ -21,6 +22,8 @@ public class AppRepo : IAppRepo
public void OnGameOver() => GameExited?.Invoke(); public void OnGameOver() => GameExited?.Invoke();
public void OnDataViewerExited() => DataViewerExited?.Invoke();
protected void Dispose(bool disposing) protected void Dispose(bool disposing)
{ {
if (!_disposedValue) if (!_disposedValue)

View File

@@ -24,6 +24,8 @@ public partial class AppLogic
public readonly record struct EnemyViewerOpened; public readonly record struct EnemyViewerOpened;
public readonly record struct EnemyViewerExited;
public readonly record struct GalleryOpened; public readonly record struct GalleryOpened;
} }
} }

View File

@@ -24,6 +24,8 @@ public partial class AppLogic
public readonly record struct ShowMainMenu; public readonly record struct ShowMainMenu;
public readonly record struct CloseGame;
public readonly record struct ExitGame; public readonly record struct ExitGame;
public readonly record struct GameOver; public readonly record struct GameOver;
@@ -32,6 +34,8 @@ public partial class AppLogic
public readonly record struct EnemyViewerOpened; public readonly record struct EnemyViewerOpened;
public readonly record struct EnemyViewerExited;
public readonly record struct GalleryOpened; public readonly record struct GalleryOpened;
} }
} }

View File

@@ -9,7 +9,7 @@ public partial class AppLogic
public partial record State public partial record State
{ {
[Meta] [Meta]
public partial record EnemyViewer : State public partial record EnemyViewer : State, IGet<Input.EnemyViewerExited>
{ {
public EnemyViewer() public EnemyViewer()
{ {
@@ -18,7 +18,13 @@ public partial class AppLogic
{ {
Output(new Output.EnemyViewerOpened()); Output(new Output.EnemyViewerOpened());
}); });
this.OnExit(() =>
{
Output(new Output.EnemyViewerExited());
});
} }
public Transition On(in Input.EnemyViewerExited input) => To<MainMenu>();
} }
} }
} }

View File

@@ -9,7 +9,7 @@ public partial class AppLogic
public partial record State public partial record State
{ {
[Meta] [Meta]
public partial record GameStarted : State public partial record GameStarted : State, IGet<Input.QuitGame>
{ {
public GameStarted() public GameStarted()
{ {
@@ -26,6 +26,11 @@ public partial class AppLogic
OnDetach(() => Get<IAppRepo>().GameExited -= OnGameExited); OnDetach(() => Get<IAppRepo>().GameExited -= OnGameExited);
} }
public Transition On(in Input.QuitGame input)
{
Output(new Output.CloseGame());
return To<MainMenu>();
}
public void OnGameExited() => Input(new Input.QuitGame()); public void OnGameExited() => Input(new Input.QuitGame());
} }
} }

View File

@@ -8,10 +8,14 @@ public partial class GameState
public readonly record struct LoadGame; public readonly record struct LoadGame;
public readonly record struct ExitGame;
public readonly record struct LoadNextFloor; public readonly record struct LoadNextFloor;
public readonly record struct InventoryButtonPressed; public readonly record struct InventoryButtonPressed;
public readonly record struct InteractButtonPressed;
public readonly record struct PauseButtonPressed; public readonly record struct PauseButtonPressed;
public readonly record struct DebugButtonPressed; public readonly record struct DebugButtonPressed;

View File

@@ -6,6 +6,8 @@ public partial class GameState
{ {
public readonly record struct InitializeGame; public readonly record struct InitializeGame;
public readonly record struct ExitGame;
public readonly record struct LoadGameFromFile; public readonly record struct LoadGameFromFile;
public readonly record struct OpenInventoryMenu; public readonly record struct OpenInventoryMenu;

View File

@@ -8,9 +8,9 @@ public partial class GameState
public partial record State public partial record State
{ {
[Meta, LogicBlock(typeof(State), Diagram = true)] [Meta, LogicBlock(typeof(State), Diagram = true)]
public partial record InventoryScreen : State, IGet<Input.InventoryButtonPressed> public partial record InventoryScreen : State, IGet<Input.InteractButtonPressed>
{ {
public Transition On(in Input.InventoryButtonPressed input) public Transition On(in Input.InteractButtonPressed input)
{ {
Output(new Output.CloseInventoryMenu()); Output(new Output.CloseInventoryMenu());
return To<InGame>(); return To<InGame>();

View File

@@ -1,5 +1,6 @@
using Chickensoft.Introspection; using Chickensoft.Introspection;
using Chickensoft.LogicBlocks; using Chickensoft.LogicBlocks;
using static Zennysoft.Ma.Adapter.GameState.Output;
namespace Zennysoft.Ma.Adapter; namespace Zennysoft.Ma.Adapter;
@@ -8,13 +9,20 @@ public partial class GameState
public partial record State public partial record State
{ {
[Meta, LogicBlock(typeof(State), Diagram = true)] [Meta, LogicBlock(typeof(State), Diagram = true)]
public partial record PauseScreen : State, IGet<Input.PauseButtonPressed> public partial record PauseScreen : State, IGet<Input.PauseButtonPressed>, IGet<Input.ExitGame>
{ {
public Transition On(in Input.PauseButtonPressed input) public Transition On(in Input.PauseButtonPressed input)
{ {
Output(new Output.ClosePauseScreen()); Output(new Output.ClosePauseScreen());
return To<InGame>(); return To<InGame>();
} }
public Transition On(in Input.ExitGame input)
{
Output(new Output.ClosePauseScreen());
Output(new Output.ExitGame());
return To<State>();
}
} }
} }
} }

View File

@@ -40,6 +40,8 @@ public interface IPlayer : IKillable, ICharacterBody3D
public IEquipmentComponent EquipmentComponent { get; } public IEquipmentComponent EquipmentComponent { get; }
public void PlayTestAnimation();
public event Action PlayerDied; public event Action PlayerDied;
public delegate InventoryItem RerollItem(InventoryItem item); public delegate InventoryItem RerollItem(InventoryItem item);
} }

View File

@@ -0,0 +1,38 @@
<Project Sdk="Godot.NET.Sdk/4.4.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
<WarningsAsErrors>CS9057</WarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Chickensoft.AutoInject" Version="2.5.0" />
<PackageReference Include="Chickensoft.GodotNodeInterfaces" Version="2.4.0" />
<PackageReference Include="Chickensoft.Introspection" Version="2.2.0" />
<PackageReference Include="Chickensoft.Introspection.Generator" Version="2.2.0" />
<PackageReference Include="Chickensoft.LogicBlocks" Version="5.16.0" />
<PackageReference Include="Chickensoft.LogicBlocks.DiagramGenerator" Version="5.16.0" />
<PackageReference Include="Chickensoft.SaveFileBuilder" Version="1.1.0" />
<PackageReference Include="Chickensoft.Serialization.Godot" Version="0.7.6" />
<PackageReference Include="GodotSharp.SourceGenerators" Version="2.6.0-250131-2115.Release" />
<PackageReference Include="SimpleInjector" Version="5.5.0" />
<PackageReference Include="SSH.NET" Version="2024.2.0" />
<PackageReference Include="System.IO.Abstractions" Version="22.0.11" />
<PackageReference Include="Zeroconf" Version="3.7.16" />
</ItemGroup>
<ItemGroup>
<None Include=".editorconfig" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Zennysoft.Game.Godot.Implementation\Zennysoft.Game.Implementation.csproj" />
<ProjectReference Include="..\Zennysoft.Game.Ma.Implementation\Zennysoft.Ma.Adapter.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Update="Godot.SourceGenerators" Version="4.4.0-dev.2" />
</ItemGroup>
<ItemGroup>
<PackageReference Update="GodotSharp" Version="4.4.0-dev.2" />
</ItemGroup>
<ItemGroup>
<PackageReference Update="GodotSharpEditor" Version="4.4.0-dev.2" />
</ItemGroup>
</Project>

View File

@@ -1,4 +1,8 @@
[gd_resource type="AudioBusLayout" load_steps=2 format=3 uid="uid://c2mk6c27y0mdf"] [gd_resource type="AudioBusLayout" load_steps=4 format=3 uid="uid://c2mk6c27y0mdf"]
[sub_resource type="AudioEffectLimiter" id="AudioEffectLimiter_j3pel"]
resource_name = "Limiter"
soft_clip_db = 1.0
[sub_resource type="AudioEffectReverb" id="AudioEffectReverb_j3pel"] [sub_resource type="AudioEffectReverb" id="AudioEffectReverb_j3pel"]
resource_name = "Reverb" resource_name = "Reverb"
@@ -7,8 +11,16 @@ damping = 0.9
dry = 0.99 dry = 0.99
wet = 0.05 wet = 0.05
[sub_resource type="AudioEffectLimiter" id="AudioEffectLimiter_g28q7"]
resource_name = "Limiter"
ceiling_db = -0.5
threshold_db = -0.6
soft_clip_db = 1.5
[resource] [resource]
bus/0/volume_db = -0.130497 bus/0/volume_db = -0.130497
bus/0/effect/0/effect = SubResource("AudioEffectLimiter_j3pel")
bus/0/effect/0/enabled = true
bus/1/name = &"AMBIENT" bus/1/name = &"AMBIENT"
bus/1/solo = false bus/1/solo = false
bus/1/mute = false bus/1/mute = false
@@ -23,6 +35,8 @@ bus/2/volume_db = 0.0
bus/2/send = &"Master" bus/2/send = &"Master"
bus/2/effect/0/effect = SubResource("AudioEffectReverb_j3pel") bus/2/effect/0/effect = SubResource("AudioEffectReverb_j3pel")
bus/2/effect/0/enabled = true bus/2/effect/0/enabled = true
bus/2/effect/1/effect = SubResource("AudioEffectLimiter_g28q7")
bus/2/effect/1/enabled = true
bus/3/name = &"MUSIC" bus/3/name = &"MUSIC"
bus/3/solo = false bus/3/solo = false
bus/3/mute = false bus/3/mute = false

View File

@@ -36,8 +36,7 @@ runtime/advanced/uses_dotnet=true
window/size/viewport_width=1920 window/size/viewport_width=1920
window/size/viewport_height=1080 window/size/viewport_height=1080
window/stretch/mode="viewport" window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[dotnet] [dotnet]
@@ -124,24 +123,28 @@ MoveUp={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
] ]
} }
MoveLeft={ MoveLeft={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
] ]
} }
MoveRight={ MoveRight={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
] ]
} }
MoveDown={ MoveDown={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
] ]
} }
Attack={ Attack={
@@ -225,10 +228,30 @@ AltAttack={
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null) "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null)
] ]
} }
CameraForward={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
]
}
CameraBack={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
]
}
EnemyViewerIdle={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
]
}
EnemyViewerWalk={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
]
}
[internationalization] [internationalization]
locale/translations_pot_files=PackedStringArray("res://src/dialog/Dialogue.dialogue", "res://src/npc/Ran/ran.dialogue", "res://src/npc/Rat/ratdialogue.dialogue") locale/translations_pot_files=PackedStringArray("res://src/dialog/Dialogue.dialogue", "res://src/npc/Ran/ran.dialogue", "res://src/npc/Rat/ratdialogue.dialogue", "res://src/dialog/Altar.dialogue")
[layer_names] [layer_names]

View File

@@ -36,12 +36,18 @@ public class HealthComponent : IHealthComponent
public void Heal(int healAmount) public void Heal(int healAmount)
{ {
if (CurrentHP.Value <= 0)
return;
var cappedAmount = Math.Min(healAmount + _currentHP.Value, _maximumHP.Value); var cappedAmount = Math.Min(healAmount + _currentHP.Value, _maximumHP.Value);
_currentHP.OnNext(cappedAmount); _currentHP.OnNext(cappedAmount);
} }
public void Damage(int damageAmount) public void Damage(int damageAmount)
{ {
if (CurrentHP.Value <= 0)
return;
var cappedAmount = Math.Max(_currentHP.Value - damageAmount, 0); var cappedAmount = Math.Max(_currentHP.Value - damageAmount, 0);
_currentHP.OnNext(cappedAmount); _currentHP.OnNext(cappedAmount);

View File

@@ -2,18 +2,13 @@ namespace Zennysoft.Game.Ma;
using Godot; using Godot;
#if DEBUG
using System.Reflection;
#endif
public partial class Main : Node public partial class Main : Node
{ {
public override void _Ready() public override void _Ready()
{ {
// If we don't need to run tests, we can just switch to the game scene. CallDeferred("RunScene");
CallDeferred("RunScene");
} }
private void RunScene() private void RunScene()
=> GetTree().ChangeSceneToFile("res://src/app/App.tscn"); => GetTree().ChangeSceneToFile("res://src/app/App.tscn");
} }

View File

@@ -1,13 +1,10 @@
using Chickensoft.AutoInject; using Chickensoft.AutoInject;
using Chickensoft.Collections;
using Chickensoft.GodotNodeInterfaces; using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection; using Chickensoft.Introspection;
using Godot; using Godot;
using Godot.Collections;
using NathanHoad; using NathanHoad;
using SimpleInjector.Lifestyles; using SimpleInjector.Lifestyles;
using System.IO.Abstractions; using System.IO.Abstractions;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Zennysoft.Game.Abstractions; using Zennysoft.Game.Abstractions;
using Zennysoft.Game.Implementation; using Zennysoft.Game.Implementation;
@@ -32,7 +29,7 @@ public partial class App : Node, IApp
[Node] private OptionsMenu OptionsMenu { get; set; } [Node] private OptionsMenu OptionsMenu { get; set; }
public IInstantiator Instantiator { get; set; } = default!; [Node] private GalleryMenu GalleryMenu { get; set; }
IAppRepo IProvide<IAppRepo>.Value() => AppRepo; IAppRepo IProvide<IAppRepo>.Value() => AppRepo;
@@ -40,15 +37,19 @@ public partial class App : Node, IApp
public IAppLogic AppLogic { get; set; } = default!; public IAppLogic AppLogic { get; set; } = default!;
public AppLogic.IBinding AppBinding { get; set; } = default!; public AppLogic.IBinding AppBinding { get; set; } = default!;
private Array _progress; private Godot.Collections.Array _progress;
private SimpleInjector.Container _container; private SimpleInjector.Container _container;
private AutoProp<string> _loadedScene = new(string.Empty); private DataViewer _dataViewer;
private bool _loadingGame = false; private bool _loadingGame = false;
private bool _loadingEnemyViewer = false; private bool _loadingEnemyViewer = false;
private string _optionsSavePath = string.Empty; private string _optionsSavePath = string.Empty;
private string _controllerSavePath = string.Empty; private string _controllerSavePath = string.Empty;
private ISaveFileManager _saveFileManager; private ISaveFileManager _saveFileManager;
private IGame _game;
private IDataViewer _enemyViewer;
private double _reportedProgress = 0;
public void Initialize() public void Initialize()
{ {
@@ -77,9 +78,11 @@ public partial class App : Node, IApp
MainMenu.StartGame += OnStartGame; MainMenu.StartGame += OnStartGame;
MainMenu.EnemyViewer += OnEnemyViewer; MainMenu.EnemyViewer += OnEnemyViewer;
MainMenu.Gallery += OnGallery;
MainMenu.Options += OnOptions; MainMenu.Options += OnOptions;
MainMenu.Quit += OnQuit; MainMenu.Quit += OnQuit;
_loadedScene.Changed += OnGameLoaded;
GalleryMenu.GalleryExited += GalleryExited;
OptionsMenu.OptionsMenuExited += OptionsMenu_OptionsMenuExited; OptionsMenu.OptionsMenuExited += OptionsMenu_OptionsMenuExited;
OptionsMenu.DeleteSaveData += DeleteSaveData; OptionsMenu.DeleteSaveData += DeleteSaveData;
@@ -89,17 +92,29 @@ public partial class App : Node, IApp
AppLogic.Set(AppRepo); AppLogic.Set(AppRepo);
AppLogic.Set(new AppLogic.Data()); AppLogic.Set(new AppLogic.Data());
AppRepo.DataViewerExited += DataViewerExited;
Input.MouseMode = Input.MouseModeEnum.Visible; Input.MouseMode = Input.MouseModeEnum.Visible;
_progress = []; _progress = [];
this.Provide(); this.Provide();
} }
private void GameExitRequested()
{
AppLogic.Input(new AppLogic.Input.QuitGame());
}
private void DeleteSaveData() private void DeleteSaveData()
{ {
var saveFileManager = _container.GetInstance<ISaveFileManager>(); var saveFileManager = _container.GetInstance<ISaveFileManager>();
saveFileManager.DeleteSaveData(); saveFileManager.DeleteSaveData();
} }
private void DataViewerExited()
{
AppLogic.Input(new AppLogic.Input.EnemyViewerExited());
}
private async void OptionsMenu_OptionsMenuExited() private async void OptionsMenu_OptionsMenuExited()
{ {
var saveFileManager = _container.GetInstance<ISaveFileManager>(); var saveFileManager = _container.GetInstance<ISaveFileManager>();
@@ -110,12 +125,10 @@ public partial class App : Node, IApp
MainMenu.OptionsButton.GrabFocus(); MainMenu.OptionsButton.GrabFocus();
} }
private void OnGameLoaded(string sceneName) private void GalleryExited()
{ {
LoadingScreen.Hide(); GalleryMenu.Hide();
var scene = (PackedScene)ResourceLoader.LoadThreadedGet(sceneName); MainMenu.GalleryButton.GrabFocus();
var node = scene.Instantiate();
AddChild(node);
} }
public void OnReady() public void OnReady()
@@ -131,25 +144,35 @@ public partial class App : Node, IApp
}) })
.Handle((in AppLogic.Output.SetupGameScene _) => .Handle((in AppLogic.Output.SetupGameScene _) =>
{ {
ResourceLoader.LoadThreadedRequest(GAME_SCENE_PATH); LoadingScreen.Show();
_loadingGame = true; LoadGame(GAME_SCENE_PATH);
MainMenu.ReleaseFocus();
MainMenu.Hide();
}) })
.Handle((in AppLogic.Output.ShowMainMenu _) => .Handle((in AppLogic.Output.ShowMainMenu _) =>
{ {
}) })
.Handle((in AppLogic.Output.ShowGame _) => .Handle((in AppLogic.Output.CloseGame _) =>
{ {
LoadingScreen.Hide();
_game.GameExitRequested -= GameExitRequested;
MainMenu.StartGameButton.GrabFocus();
_game.CallDeferred(MethodName.QueueFree, []);
GetTree().Paused = false;
}) })
.Handle((in AppLogic.Output.StartLoadingSaveFile _) => .Handle((in AppLogic.Output.StartLoadingSaveFile _) =>
{ {
}) })
.Handle((in AppLogic.Output.EnemyViewerOpened _) => .Handle((in AppLogic.Output.EnemyViewerOpened _) =>
{ {
ResourceLoader.LoadThreadedRequest(ENEMY_VIEWER_PATH); LoadingScreen.Show();
_loadingEnemyViewer = true; LoadEnemyViewer(ENEMY_VIEWER_PATH);
MainMenu.Hide(); })
.Handle((in AppLogic.Output.EnemyViewerExited _) =>
{
LoadingScreen.Hide();
if (_enemyViewer != null && _enemyViewer is DataViewer enemyViewer)
enemyViewer.CallDeferred(MethodName.QueueFree);
MainMenu.Show();
MainMenu.EnemyViewerButton.GrabFocus();
}) })
.Handle((in AppLogic.Output.ExitGame _) => .Handle((in AppLogic.Output.ExitGame _) =>
{ {
@@ -161,31 +184,61 @@ public partial class App : Node, IApp
public override void _Process(double delta) public override void _Process(double delta)
{ {
if (_loadingGame) if (_reportedProgress < 1)
{ LoadingScreen.ProgressBar.Value = Mathf.RoundToInt(Mathf.Lerp(LoadingScreen.ProgressBar.Value, _reportedProgress * 100, (float)delta * 2));
ResourceLoader.LoadThreadedGetStatus(GAME_SCENE_PATH, _progress); else
LoadingScreen.ProgressBar.Value = (double)_progress.Single(); LoadingScreen.ProgressBar.Value = Mathf.RoundToInt(Mathf.Lerp(LoadingScreen.ProgressBar.Value, 200, (float)delta * 5));
if ((double)_progress.Single() == 1)
_loadedScene.OnNext(GAME_SCENE_PATH);
}
if (_loadingEnemyViewer)
{
ResourceLoader.LoadThreadedGetStatus(ENEMY_VIEWER_PATH, _progress);
LoadingScreen.ProgressBar.Value = (double)_progress.Single();
if ((double)_progress.Single() == 1)
_loadedScene.OnNext(ENEMY_VIEWER_PATH);
}
} }
public void OnStartGame() => AppLogic.Input(new AppLogic.Input.NewGame()); public void OnStartGame() => AppLogic.Input(new AppLogic.Input.NewGame());
private void OnEnemyViewer() => AppLogic.Input(new AppLogic.Input.EnemyViewerOpened()); private void OnEnemyViewer() => AppLogic.Input(new AppLogic.Input.EnemyViewerOpened());
private void OnGalleryViewer() => AppLogic.Input(new AppLogic.Input.GalleryOpened());
private async void LoadGame(string sceneName)
{
var scene = await LoadSceneInternal(sceneName);
_game = scene as IGame;
_game.GameExitRequested += GameExitRequested;
await ToSignal(GetTree().CreateTimer(0.8f), "timeout");
CallDeferred(MethodName.AddChild, scene);
}
private async void LoadEnemyViewer(string sceneName)
{
var scene = await LoadSceneInternal(sceneName);
_enemyViewer = scene as IDataViewer;
await ToSignal(GetTree().CreateTimer(0.8f), "timeout");
CallDeferred(MethodName.AddChild, scene);
}
private async Task<Node> LoadSceneInternal(string sceneName)
{
LoadingScreen.Show();
LoadingScreen.ProgressBar.Value = 0;
var sceneLoader = new SceneLoader();
CallDeferred(MethodName.AddChild, sceneLoader);
sceneLoader.LoadSceneRequest(sceneName);
sceneLoader.SceneReportedProgress += SceneLoader_SceneReportedProgress;
await ToSignal(sceneLoader, SceneLoader.SignalName.SceneLoaded);
var result = sceneLoader.LoadedScene;
sceneLoader.QueueFree();
return result;
}
private void SceneLoader_SceneReportedProgress(double progress) => _reportedProgress = progress;
private async void OnOptions() private async void OnOptions()
{ {
OptionsMenu.Show(); OptionsMenu.Show();
OptionsMenu.MasterVolumeSlider.GrabFocus(); OptionsMenu.GameTab.GrabFocus();
}
private async void OnGallery()
{
GalleryMenu.Show();
GalleryMenu.ItemButton1.GrabFocus();
} }
public void OnQuit() => AppLogic.Input(new AppLogic.Input.QuitGame()); public void OnQuit() => AppLogic.Input(new AppLogic.Input.QuitGame());
@@ -204,6 +257,5 @@ public partial class App : Node, IApp
MainMenu.StartGame -= OnStartGame; MainMenu.StartGame -= OnStartGame;
MainMenu.EnemyViewer -= OnEnemyViewer; MainMenu.EnemyViewer -= OnEnemyViewer;
MainMenu.Quit -= OnQuit; MainMenu.Quit -= OnQuit;
_loadedScene.Changed -= OnGameLoaded;
} }
} }

View File

@@ -1,140 +1,42 @@
// Attach to a ColorRect in front of texture/background
shader_type canvas_item; shader_type canvas_item;
// Handles the resolution changes, color depth, and dithering // Handles the concentric ripples
group_uniforms resolution_and_colors; uniform float frequency: hint_range(0, 15, 0.01) = 4.0;
uniform bool change_color_depth = false; uniform float amplitude: hint_range(0, 3, 0.1) = 2.0;
uniform int target_color_depth : hint_range(1, 8) = 5; uniform float ripple_rate : hint_range(0, 20.0, 1) = 5;
uniform bool dithering = false;
uniform bool scale_resolution = false;
uniform int target_resolution_scale = 3;
// Handles the LUTish recoloring // Handles the waves themselves
group_uniforms gradient_recoloring; uniform float wave_amplitude: hint_range(0.001, 0.1, 0.001) = 0.05;
uniform bool enable_recolor = false; uniform float wave_frequency: hint_range(0, 15, 0.01) = 4.0;
uniform sampler2D to_gradient: hint_default_black;
int dithering_pattern(ivec2 fragcoord) { uniform sampler2D noise;
const int pattern[] = {
-4, +0, -3, +1,
+2, -2, +3, -1,
-3, +1, -4, +0,
+3, -1, +2, -2
};
int x = fragcoord.x % 4; uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, filter_linear_mipmap;
int y = fragcoord.y % 4;
return pattern[y * 4 + x]; vec2 wave(vec2 uv, float time) {
} return vec2(
uv.x + sin(uv.y * wave_frequency + time) * wave_amplitude,
vec3 rgb2hsv(vec3 rgb) { //Converts RGB values to HSV uv.y + sin(uv.x * wave_frequency + time) * wave_amplitude
float r = rgb.r; );
float g = rgb.g;
float b = rgb.b;
float cmax = max(r,max(g,b));
float cmin = min(r,min(g,b));
float delta = cmax - cmin;
float h = 0.f; //hue
if (delta > 0.f){
if (cmax == r){
h = (g-b)/delta;
h = mod(h,6.f);
} else if (cmax == g){
h = ((b - r) / delta) + 2.f;
} else {
h = ((r-g)/delta) + 4.f;
}
h = h * 60.f;
}
float s = 0.f; //saturation
if (cmax > 0.f){
s = delta / cmax;
}
return vec3(h,s,cmax); // Keep original alpha value
}
vec3 hsv2rgb(vec3 hsv) { //Converts HSV values to RGB
float h = hsv.r;
float s = hsv.g;
float v = hsv.b;
float c = v * s;
//X = C × (1 - |(H / 60°) mod 2 - 1|)
float x = h / 60.f;
x = mod(x,2.f);
x = abs(x - 1.f);
x = c * (1.f - x);
float m = v - c;
vec3 rgb = vec3(0.f,0.f,0.f);
if (h < 60.f) {
rgb = vec3(c,x,0.f);
} else if (h < 120.f){
rgb = vec3(x,c,0.f);
} else if (h < 180.f){
rgb = vec3(0.f,c,x);
} else if (h < 240.f){
rgb = vec3(0.f,x,c);
} else if (h < 300.f){
rgb = vec3(x,0.f,c);
} else if (h < 360.f){
rgb = vec3(c,0.f,x);
}
rgb[0] = rgb[0] + m;
rgb[1] = rgb[1] + m;
rgb[2] = rgb[2] + m;
return rgb;
} }
void fragment() { void fragment() {
ivec2 uv; vec2 center_position = -1.0 + 2.0 * UV / (1.0 / TEXTURE_PIXEL_SIZE);
vec3 color; float center_distance = length(center_position);
if(scale_resolution){ float ripple = sin(center_distance * -frequency * PI + ripple_rate * TIME) * amplitude / (center_distance + 1.0);
uv = ivec2(FRAGCOORD.xy / float(target_resolution_scale));
color = texelFetch(TEXTURE, uv * target_resolution_scale, 0).rgb;
} else {
uv = ivec2(FRAGCOORD.xy);
color = texelFetch(TEXTURE, uv, 0).rgb;
}
if(enable_recolor){ vec2 uv = FRAGCOORD.xy / (1.0 / SCREEN_PIXEL_SIZE).xy + (center_position/center_distance) * ripple * wave_amplitude;
vec3 hsv = rgb2hsv(color); vec2 background_wave = wave(uv, TIME);
float color_pos = (hsv.x / 360.0); vec4 background_texture = texture(SCREEN_TEXTURE,background_wave) * sqrt(amplitude);
vec3 new_color = texture(to_gradient, vec2((color_pos), 0.5)).rgb;
vec3 new_hsv = rgb2hsv(new_color);
hsv.x = new_hsv.x;
vec3 final_rgb = hsv2rgb(hsv);
color.rgb = final_rgb; float alpha_scalar = (1.0 - min(center_distance, 1.0)) * background_texture.x * 2.5;
}
background_texture.a *= 1.0 * alpha_scalar * (ripple + background_texture.x * background_texture.y);
background_texture.a = max(background_texture.a - (background_texture.y * 0.45), 0.0);
// Convert from [0.0, 1.0] range to [0, 255] range COLOR = vec4(background_texture.xyz, background_texture.a);
ivec3 c = ivec3(round(color * 255.0));
// Apply the dithering pattern
if (dithering) {
c += ivec3(dithering_pattern(uv));
}
vec3 final_color;
if(change_color_depth){
// Truncate from 8 bits to color_depth bits
c >>= (8 - target_color_depth);
final_color = vec3(c) / float(1 << target_color_depth);
} else {
final_color = vec3(c) / float(1 << 8);
}
// Convert back to [0.0, 1.0] range
COLOR.rgb = final_color;
} }

View File

@@ -1,20 +1,26 @@
[gd_scene load_steps=5 format=3 uid="uid://cagfc5ridmteu"] [gd_scene load_steps=6 format=3 uid="uid://cagfc5ridmteu"]
[ext_resource type="Script" uid="uid://d1f8blk5ucqvq" 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/MainMenu.tscn" id="2_1uiag"] [ext_resource type="PackedScene" uid="uid://rfvnddfqufho" path="res://src/menu/MainMenu.tscn" id="2_1uiag"]
[ext_resource type="PackedScene" uid="uid://drkl3btdy6uxj" path="res://src/options/OptionsMenu.tscn" id="2_v0mgf"] [ext_resource type="PackedScene" uid="uid://drkl3btdy6uxj" path="res://src/options/OptionsMenu.tscn" id="2_v0mgf"]
[ext_resource type="PackedScene" uid="uid://cpjlj7kxdhv16" path="res://src/menu/LoadingScreen.tscn" id="3_3st5l"] [ext_resource type="PackedScene" uid="uid://cpjlj7kxdhv16" path="res://src/menu/LoadingScreen.tscn" id="3_3st5l"]
[ext_resource type="PackedScene" uid="uid://cm6fo70yb2hip" path="res://src/ui/gallery/GalleryMenu.tscn" id="5_iuu71"]
[node name="App" type="Node"] [node name="App" type="Node"]
process_mode = 3 process_mode = 3
script = ExtResource("1_rt73h") script = ExtResource("1_rt73h")
[node name="MainMenu" parent="." instance=ExtResource("2_1uiag")]
unique_name_in_owner = true
[node name="LoadingScreen" parent="." instance=ExtResource("3_3st5l")] [node name="LoadingScreen" parent="." instance=ExtResource("3_3st5l")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
[node name="OptionsMenu" parent="." instance=ExtResource("2_v0mgf")] [node name="OptionsMenu" parent="." instance=ExtResource("2_v0mgf")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
[node name="MainMenu" parent="." instance=ExtResource("2_1uiag")] [node name="GalleryMenu" parent="." instance=ExtResource("5_iuu71")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false

View File

@@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://ddii3pi8x75xc"
path="res://.godot/imported/amb_beach.wav-046e4f838e50e43a1aba1a754b92aad6.sample"
[deps]
source_file="res://src/audio/AMB/amb_beach.wav"
dest_files=["res://.godot/imported/amb_beach.wav-046e4f838e50e43a1aba1a754b92aad6.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=3
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://ym4ur8a2qxhp"
path="res://.godot/imported/amb_perlin.wav-ba6da0d5591f392e4aca7d2f85c4dfc2.sample"
[deps]
source_file="res://src/audio/AMB/amb_perlin.wav"
dest_files=["res://.godot/imported/amb_perlin.wav-ba6da0d5591f392e4aca7d2f85c4dfc2.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=3
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://b7wxddjx3qw5o"
path="res://.godot/imported/amb_white_noise.wav-d316dd05afe429f6bcdda594285ad718.sample"
[deps]
source_file="res://src/audio/AMB/amb_white_noise.wav"
dest_files=["res://.godot/imported/amb_white_noise.wav-d316dd05afe429f6bcdda594285ad718.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=3
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://bmiitw4fcs68e"
path="res://.godot/imported/amb_wind_loop_altar.wav-e766e3db29faa01ad6dbaa8cb18d7de6.sample"
[deps]
source_file="res://src/audio/AMB/amb_wind_loop_altar.wav"
dest_files=["res://.godot/imported/amb_wind_loop_altar.wav-e766e3db29faa01ad6dbaa8cb18d7de6.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=3
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@@ -0,0 +1,45 @@
using Godot;
public partial class ShakeCamera : Camera3D
{
[Export] private double _shakeIntensity = 1.0;
[Export] private double _maxX = 10;
[Export] private double _maxY = 10;
[Export] private double _maxZ = 5;
[Export] private FastNoiseLite _noise;
[Export] private double _noiseSpeed = 50.0;
private double _shake = 0.0;
private double _time = 0.0;
private Vector3 _initialRotation;
public override void _Ready()
{
_initialRotation = RotationDegrees;
}
public override void _Process(double delta)
{
_time += delta;
_shake = Mathf.Max(_shake - delta * _shakeIntensity, 0.0);
RotationDegrees = new Vector3(
(float)(_initialRotation.X + _maxX * Mathf.Pow(_shake, 2) * GetNoiseFromSeed(0)),
(float)(_initialRotation.Y + _maxY * Mathf.Pow(_shake, 2) * GetNoiseFromSeed(1)),
(float)(_initialRotation.Z + _maxZ * Mathf.Pow(_shake, 2) * GetNoiseFromSeed(2)));
}
public void AddShake(float shakeAmount)
{
_shake = Mathf.Clamp(_shake + shakeAmount, 0.0, 1.0);
}
private double GetNoiseFromSeed(int seed)
{
_noise.Seed = seed;
return _noise.GetNoise1D((float)(_time * _noiseSpeed));
}
}

View File

@@ -0,0 +1 @@
uid://bb36q1wpe0tlw

View File

@@ -0,0 +1,20 @@
[gd_scene load_steps=3 format=3 uid="uid://didc6vnf5ftlg"]
[ext_resource type="Script" uid="uid://bb36q1wpe0tlw" path="res://src/camera/ShakeCamera.cs" id="1_ubmds"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_ubmds"]
frequency = 0.08
fractal_octaves = 4
[node name="Camera3D" type="Camera3D"]
cull_mask = 1048569
doppler_tracking = 1
fov = 52.0
near = 0.01
far = 9000.0
script = ExtResource("1_ubmds")
_shakeIntensity = 1.8
_maxX = 0.0
_maxY = 5.0
_noise = SubResource("FastNoiseLite_ubmds")
_noiseSpeed = 40.0

View File

@@ -0,0 +1,47 @@
shader_type spatial;
render_mode diffuse_toon,specular_toon,cull_disabled;
uniform sampler2D iChannel0 : source_color;
uniform int samples =100;
//
//
uniform float alpha_cut ;
uniform float gain = 1.0; // gain : (gain), min = 0., max = 50.
//
uniform float blur_x =50.0; // X blur : (X blur), min = 0, max = 1000.
uniform float blur_y = 50.0; // Y blur : (Y blur), min = 0, max = 1000.
uniform float Rot_Angle : hint_range(0.0, 100.0, 0.1);
uniform float Metal : hint_range(0.0, 1.0, 0.1);
//
//
//
vec2 rotate(vec2 uv, vec2 p, float angle)
{
mat2 rotation = mat2(vec2(cos(angle), -sin(angle)),vec2(sin(angle), cos(angle)));
uv -= p;
uv = uv * rotation;
uv += p;
return uv;
}
void fragment(){
float Angle = Rot_Angle/-100.0;
vec2 uv = UV;
vec2 origin;
float precompute = Angle * (1.0 / float(samples - 1));
origin = vec2(0.5,0.5);
vec4 color = vec4(0.0);
float ws = 0.0;
vec2 center = vec2(0.5,0.5);
for(int i = 0; i <= samples; i++)
{
float p = (float(i)* precompute);
float w = 1.0 ;
color += texture(iChannel0, rotate(uv,origin, p)) * w;
ws += w;
}
ALBEDO = vec4(color.rgb / ws * gain, 1.0).rgb;
//ALPHA = vec4(color.rgb / ws * gain, 1.0).r;
ALPHA = step(alpha_cut,1.0 - distance(center,UV));
METALLIC = Metal;
}

View File

@@ -0,0 +1 @@
uid://o80s4yvp0rto

View File

@@ -1,16 +1,25 @@
using Chickensoft.AutoInject; using Chickensoft.AutoInject;
using Chickensoft.Introspection; using Chickensoft.Introspection;
using Godot; using Godot;
using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Game.Ma; namespace Zennysoft.Game.Ma;
public interface IDataViewer
{
}
[Meta(typeof(IAutoNode))] [Meta(typeof(IAutoNode))]
public partial class DataViewer : Control public partial class DataViewer : Control, IDataViewer
{ {
public override void _Notification(int what) => this.Notify(what); public override void _Notification(int what) => this.Notify(what);
public IInstantiator Instantiator { get; set; } = default!; [Dependency]
public IAppRepo AppRepo => this.DependOn<IAppRepo>();
[Export] [Export]
public float _cameraSpeed = 0.01f; public float _cameraSpeed = 0.01f;
@@ -21,73 +30,135 @@ public partial class DataViewer : Control
[Node] public Node3D ModelPivot { get; set; } = default!; [Node] public Node3D ModelPivot { get; set; } = default!;
[Node] public DataViewerRepository DataViewerRepository { get; set; } = default!;
#region UI #region UI
[Node] public RichTextLabel EnemyName { get; set; } = default!; [Node] public RichTextLabel EnemyName { get; set; } = default!;
[Node] public RichTextLabel Description { get; set; } = default!; [Node] public RichTextLabel Description { get; set; } = default!;
[Node] public Label HPValue { get; set; } = default!;
[Node] public Label ATKValue { get; set; } = default!;
[Node] public Label DEFValue { get; set; } = default!;
[Node] public Label Drop1Value { get; set; } = default!;
[Node] public Label Drop2Value { get; set; } = default!;
[Node] public Label AffinityValue { get; set; } = default!;
[Node] public Label WeaknessValue { get; set; } = default!;
[Node] public Control EnemyInfo { get; set; } = default!;
[Node] public Button BackButton { get; set; } = default!;
#endregion #endregion
private EnemyModelView2D _currentModel; private EnemyModelView _currentModel;
private float _cameraStartingPoint = 0f;
private int _currentIndex = 0;
private int _modelIndex = 0; private List<EnemyModelView> _enemies;
public void Initialize() public void OnReady()
{ {
Instantiator = new Instantiator(GetTree()); BackButton.Pressed += BackButton_Pressed;
LoadModel(); _enemies = [.. ModelPivot.GetChildren().Cast<EnemyModelView>()];
_currentModel = _enemies.First();
DisplayEnemy();
}
public void OnEnterTree() => GetTree().Paused = false;
public void OnExitTree() => GetTree().Paused = false;
private void BackButton_Pressed() => AppRepo.OnDataViewerExited();
public override void _Input(InputEvent @event)
{
if (BackButton.HasFocus() && @event.IsActionPressed(GameInputs.Interact))
{
GetTree().Paused = false;
BackButton.ReleaseFocus();
return;
}
if (_currentModel == null || BackButton.HasFocus())
return;
if (@event.IsActionPressed(GameInputs.Attack))
_currentModel.PlayPrimaryAttackAnimation();
if (@event.IsActionPressed(GameInputs.InventorySort))
_currentModel.PlaySecondaryAttackAnimation();
if (Input.IsActionJustPressed(GameInputs.Inventory))
_currentModel.PlayActivateAnimation();
if (@event.IsActionPressed(GameInputs.EnemyViewerWalk))
_currentModel.PlayWalkAnimation();
if (@event.IsActionReleased(GameInputs.EnemyViewerWalk))
_currentModel.PlayIdleAnimation();
if (@event.IsActionPressed(GameInputs.Interact))
{
GetTree().Paused = true;
BackButton.GrabFocus();
}
if (@event.IsActionPressed(GameInputs.StrafeRight))
{
// Load next model
_enemies[_currentIndex].Hide();
if (_currentIndex == _enemies.Count - 1)
_currentIndex = 0;
else
_currentIndex++;
DisplayEnemy();
}
if (@event.IsActionPressed(GameInputs.StrafeLeft))
{
_enemies[_currentIndex].Hide();
// Load previous model
if (_currentIndex == 0)
_currentIndex = _enemies.Count - 1;
else
_currentIndex--;
DisplayEnemy();
}
} }
public override void _Process(double delta) public override void _Process(double delta)
{ {
if (Input.IsActionPressed(GameInputs.MoveLeft)) if (_currentModel == null || BackButton.HasFocus())
CameraPivot.RotateY(_cameraSpeed); return;
if (Input.IsActionPressed(GameInputs.MoveRight))
CameraPivot.RotateY(-_cameraSpeed);
if (Input.IsActionPressed(GameInputs.StrafeLeft))
Camera3D.Position = Camera3D.Position.MoveToward(CameraPivot.Position, (float)delta * 2f);
if (Input.IsActionPressed(GameInputs.StrafeRight))
Camera3D.Position = Camera3D.Position.MoveToward(CameraPivot.Position, -(float)delta * 2f);
Camera3D.Position = Camera3D.Position.Clamp(new Vector3(0, 0, 1), new Vector3(0, 0, 4)); var forwardStrength = Input.GetActionStrength(GameInputs.CameraForward);
Camera3D.Position = Camera3D.Position.MoveToward(CameraPivot.Position, _cameraSpeed * forwardStrength * (_cameraStartingPoint / 10));
var backStrength = Input.GetActionStrength(GameInputs.CameraBack);
Camera3D.Position = Camera3D.Position.MoveToward(CameraPivot.Position, -_cameraSpeed * backStrength * (_cameraStartingPoint / 10));
var leftStrength = Input.GetActionStrength(GameInputs.MoveLeft);
CameraPivot.RotateY(_cameraSpeed * leftStrength);
var rightStrength = Input.GetActionStrength(GameInputs.MoveRight);
CameraPivot.RotateY(-_cameraSpeed * rightStrength);
Camera3D.Position = Camera3D.Position.Clamp(new Vector3(0, 0, _cameraStartingPoint / 2), new Vector3(0, 0, _cameraStartingPoint));
ModelPivot.Rotation = ModelPivot.Rotation.Clamp(Mathf.DegToRad(-60), Mathf.DegToRad(60)); ModelPivot.Rotation = ModelPivot.Rotation.Clamp(Mathf.DegToRad(-60), Mathf.DegToRad(60));
_currentModel.SetCurrentDirection(_currentModel.GlobalBasis, -CameraPivot.Basis.Z);
Description.Text = (-CameraPivot.RotationDegrees).ToString();
if (Input.IsActionJustPressed(GameInputs.Attack)) if (_currentModel is EnemyModelView2D enemyModelView2D)
_currentModel.PlayPrimaryAttackAnimation(); enemyModelView2D.SetCurrentDirection(_currentModel.GlobalBasis, -CameraPivot.Basis.Z);
if (Input.IsActionJustPressed(GameInputs.AltAttack))
_currentModel.PlaySecondaryAttackAnimation();
if (Input.IsActionJustPressed(GameInputs.Inventory))
_currentModel.PlayActivateAnimation();
if (Input.IsActionPressed(GameInputs.StrafeRight))
_currentModel.PlayWalkAnimation();
if (Input.IsActionJustReleased(GameInputs.StrafeRight))
_currentModel.PlayIdleAnimation();
if (Input.IsActionJustPressed(GameInputs.Next))
{
// Load next model
_currentModel.CallDeferred(MethodName.QueueFree);
_modelIndex = (_modelIndex + 1) % DataViewerRepository.ModelRepository.Count;
GD.Print(_modelIndex);
CallDeferred(MethodName.LoadModel);
}
if (Input.IsActionJustPressed(GameInputs.Previous))
{
// Load previous model
_currentModel.CallDeferred(MethodName.QueueFree);
_modelIndex = (_modelIndex - 1 < 0 ? DataViewerRepository.ModelRepository.Count : _modelIndex) - 1;
CallDeferred(MethodName.LoadModel);
}
} }
private void LoadModel() private void DisplayEnemy()
{ {
var modelScene = DataViewerRepository.ModelRepository.ElementAt(_modelIndex); _currentModel = _enemies[_currentIndex];
_currentModel = modelScene.Instantiate<EnemyModelView2D>();
ModelPivot.AddChild(_currentModel); var size = _currentModel.GetSize();
EnemyName.Text = _currentModel.EnemyLoreInfo.Name; if (_currentModel is EnemyModelView2D)
Description.Text = _currentModel.EnemyLoreInfo.Description; _cameraStartingPoint = size.X / 50;
else
_cameraStartingPoint = size.X * 2;
Camera3D.Position = new Vector3(Camera3D.Position.X, Camera3D.Position.Y, _cameraStartingPoint);
EnemyName.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.Name : "Placeholder Text";
Description.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.Description : "Placeholder Text";
HPValue.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.MaximumHP : "Placeholder Text";
ATKValue.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.ATK : "Placeholder Text";
DEFValue.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.DEF : "Placeholder Text";
Drop1Value.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.Drop1 : "Placeholder Text";
Drop2Value.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.Drop2 : "Placeholder Text";
AffinityValue.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.Affinity : "Placeholder Text";
WeaknessValue.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.Weakness : "Placeholder Text";
_enemies[_currentIndex].Show();
} }
} }

View File

@@ -1,28 +1,35 @@
[gd_scene load_steps=22 format=3 uid="uid://c7wjbgbrdivol"] [gd_scene load_steps=19 format=3 uid="uid://c7wjbgbrdivol"]
[ext_resource type="Script" uid="uid://bgaflnnur26vk" path="res://src/data_viewer/DataViewer.cs" id="1_1qako"] [ext_resource type="Script" uid="uid://bgaflnnur26vk" path="res://src/data_viewer/DataViewer.cs" id="1_1qako"]
[ext_resource type="Theme" uid="uid://daxuhpmyxwxck" path="res://src/ui/inventory_menu/InventoryDialogueSelectionStyle.tres" id="2_bef6s"] [ext_resource type="Texture2D" uid="uid://dsf5l6g8n1tkw" path="res://src/ui/rendered_assets/SCREEN_RENDERS_Viewer_720_16_9.png" id="2_hpkd1"]
[ext_resource type="Texture2D" uid="uid://bg7elvikjtl36" path="res://src/map/assets/Sarcophagus/sarco altar_greeen2.png" id="3_3wl4s"] [ext_resource type="Texture2D" uid="uid://bophm5or5opdf" path="res://src/data_viewer/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg" id="3_hpkd1"]
[ext_resource type="PackedScene" uid="uid://c16i1gmg6yu5a" path="res://src/data_viewer/DataViewerRepository.tscn" id="3_ejdn0"] [ext_resource type="PackedScene" uid="uid://bimjnsu52y3xi" path="res://src/enemy/enemy_types/01. sproingy/SproingyModelView.tscn" id="3_vk1lh"]
[ext_resource type="PackedScene" uid="uid://bjg8wyvp8q6oc" path="res://src/enemy/enemy_types/02. michael/MichaelModelView.tscn" id="4_bef6s"] [ext_resource type="Shader" uid="uid://o80s4yvp0rto" path="res://src/data_viewer/BlurSprite3D.gdshader" id="4_vk1lh"]
[ext_resource type="PackedScene" uid="uid://dcm53j3rncxdm" path="res://src/enemy/enemy_types/06. chariot/ChariotModelView.tscn" id="5_vk1lh"] [ext_resource type="LabelSettings" uid="uid://b6f8ggy3ulonb" path="res://src/ui/label_settings/GeorgiaItalic.tres" id="6_vk1lh"]
[ext_resource type="PackedScene" uid="uid://bimjnsu52y3xi" path="res://src/enemy/enemy_types/01. sproingy/SproingyModelView.tscn" id="6_hpkd1"] [ext_resource type="FontFile" uid="uid://beh6d5lo5ihq0" path="res://src/ui/fonts/georgiai.ttf" id="7_dvixg"]
[ext_resource type="PackedScene" uid="uid://bup8c4x1na3aw" path="res://src/enemy/enemy_types/03. filth_eater/FilthEaterModelView.tscn" id="8_dvixg"] [ext_resource type="PackedScene" uid="uid://bjg8wyvp8q6oc" path="res://src/enemy/enemy_types/02. michael/MichaelModelView.tscn" id="8_ekqja"]
[ext_resource type="PackedScene" uid="uid://bls3mcsyld4vy" path="res://src/enemy/enemy_types/09. Agni/AgniDemonModelView.tscn" id="9_utjpw"] [ext_resource type="PackedScene" uid="uid://c5xijwxkg4pf6" path="res://src/enemy/enemy_types/05. ballos/BallosModelView.tscn" id="11_icshd"]
[ext_resource type="PackedScene" uid="uid://cu7n814hhtjwm" path="res://src/enemy/enemy_types/9b. Aqueos Demon/AqueosModelView.tscn" id="10_ylptw"] [ext_resource type="PackedScene" uid="uid://bid6f48l0q58o" path="res://src/enemy/enemy_types/14. horse_head/HorseFaceModelView.tscn" id="19_qagkd"]
[ext_resource type="PackedScene" uid="uid://c2i8ylr3y0bri" path="res://src/enemy/enemy_types/08a. Ambassador/AmbassadorModelView.tscn" id="11_fm7p5"] [ext_resource type="PackedScene" uid="uid://dnomfbym36ivg" path="res://src/enemy/enemy_types/15. ox_face/OxFaceModelView.tscn" id="20_bw7jv"]
[ext_resource type="PackedScene" uid="uid://72lbcmp4bcx4" path="res://src/enemy/enemy_types/08b. Ambassador (red)/AmbassadorSmallModelView.tscn" id="12_5hrw6"] [ext_resource type="PackedScene" uid="uid://l4413jwn0m8v" path="res://src/enemy/enemy_types/16. demon wall/DemonWallModelView.tscn" id="21_i7aes"]
[ext_resource type="PackedScene" uid="uid://lc5koiqn1sca" path="res://src/enemy/enemy_types/08c. Ambassador (steel)/AmbassadorSteelModelView.tscn" id="13_5hrw6"] [ext_resource type="StyleBox" uid="uid://bxuy4tnftibfq" path="res://src/options/SelectedOptionsBox.tres" id="25_gdy4a"]
[ext_resource type="PackedScene" uid="uid://dxwwfbt2mtmer" path="res://src/enemy/enemy_types/11. Palan/PalanModelView.tscn" id="14_3wl4s"] [ext_resource type="StyleBox" uid="uid://bl15q835s4ene" path="res://src/options/UnselectedOptionsBox.tres" id="26_br3ej"]
[ext_resource type="PackedScene" uid="uid://drkaq6grim1fb" path="res://src/enemy/enemy_types/12. Shield of Heaven/ShieldModelView.tscn" id="15_37gx6"]
[ext_resource type="PackedScene" uid="uid://bli0t0d6ommvi" path="res://src/enemy/enemy_types/04. sara/SaraModelView.tscn" id="16_alsxp"]
[ext_resource type="PackedScene" uid="uid://byd7cwxq1be6f" path="res://src/enemy/enemy_types/07. chinthe/ChintheModelView.tscn" id="17_qov77"]
[ext_resource type="PackedScene" uid="uid://c5xijwxkg4pf6" path="res://src/enemy/enemy_types/05. ballos/BallosModelView.tscn" id="18_sxd8s"]
[ext_resource type="PackedScene" uid="uid://c5asojy73n44d" path="res://src/enemy/enemy_types/13. gold sproingy/GoldSproingyModelView2.tscn" id="19_gkucd"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dvixg"] [sub_resource type="Environment" id="Environment_vk1lh"]
shading_mode = 0
albedo_texture = ExtResource("3_3wl4s") [sub_resource type="CameraAttributesPhysical" id="CameraAttributesPhysical_dvixg"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dvixg"]
render_priority = 0
shader = ExtResource("4_vk1lh")
shader_parameter/iChannel0 = ExtResource("3_hpkd1")
shader_parameter/samples = 100
shader_parameter/alpha_cut = 0.0
shader_parameter/gain = 17.73
shader_parameter/blur_x = 50.0
shader_parameter/blur_y = 50.0
shader_parameter/Rot_Angle = 4.9
shader_parameter/Metal = 0.0
[sub_resource type="Environment" id="Environment_3wl4s"] [sub_resource type="Environment" id="Environment_3wl4s"]
background_mode = 1 background_mode = 1
@@ -37,131 +44,245 @@ grow_vertical = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
script = ExtResource("1_1qako") script = ExtResource("1_1qako")
_cameraSpeed = 0.015 _cameraSpeed = 0.08
[node name="CenterContainer" type="CenterContainer" parent="."] [node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 1 layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
texture = ExtResource("2_hpkd1")
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer"] [node name="CenterContainer2" type="CenterContainer" parent="."]
layout_mode = 2 layout_mode = 0
theme_override_constants/separation = 0 offset_left = 69.0
alignment = 1 offset_top = 196.0
offset_right = 900.0
offset_bottom = 942.0
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/VBoxContainer"] [node name="SubViewportContainer" type="SubViewportContainer" parent="CenterContainer2"]
layout_mode = 2 custom_minimum_size = Vector2(750, 600)
theme_override_constants/separation = 0
[node name="LeftPanel" type="Panel" parent="CenterContainer/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(390, 0)
layout_mode = 2
size_flags_horizontal = 3
[node name="EnemyName" type="RichTextLabel" parent="CenterContainer/VBoxContainer/HBoxContainer/LeftPanel"]
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
theme = ExtResource("2_bef6s")
text = "Placeholder Text"
[node name="SubViewportContainer" type="SubViewportContainer" parent="CenterContainer/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(500, 500)
layout_mode = 2 layout_mode = 2
stretch = true stretch = true
[node name="SubViewport" type="SubViewport" parent="CenterContainer/VBoxContainer/HBoxContainer/SubViewportContainer"] [node name="SubViewport" type="SubViewport" parent="CenterContainer2/SubViewportContainer"]
process_mode = 1
own_world_3d = true own_world_3d = true
handle_input_locally = false handle_input_locally = false
size = Vector2i(500, 500) size = Vector2i(750, 600)
render_target_update_mode = 4 render_target_update_mode = 4
[node name="ModelPivot" type="Node3D" parent="CenterContainer/VBoxContainer/HBoxContainer/SubViewportContainer/SubViewport"] [node name="Light" type="OmniLight3D" parent="CenterContainer2/SubViewportContainer/SubViewport"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0.401216)
omni_range = 4096.0
[node name="ModelPivot" type="Node3D" parent="CenterContainer2/SubViewportContainer/SubViewport"]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.82392, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.82392, 0)
[node name="CameraPivot" type="Node3D" parent="CenterContainer/VBoxContainer/HBoxContainer/SubViewportContainer/SubViewport"] [node name="Sproingy" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("3_vk1lh")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.26108, 0)
visible = false
[node name="Michael" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("8_ekqja")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.20608, 0)
visible = false
[node name="Ballos" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("11_icshd")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.23608, 0)
visible = false
[node name="Horse Face" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("19_qagkd")]
visible = false
[node name="Ox Face" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("20_bw7jv")]
visible = false
[node name="Demon Wall" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("21_i7aes")]
visible = false
[node name="CameraPivot" type="Node3D" parent="CenterContainer2/SubViewportContainer/SubViewport"]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
[node name="Camera3D" type="Camera3D" parent="CenterContainer/VBoxContainer/HBoxContainer/SubViewportContainer/SubViewport/CameraPivot"] [node name="Camera3D" type="Camera3D" parent="CenterContainer2/SubViewportContainer/SubViewport/CameraPivot"]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.82023e-08, 0, 3.1233) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
environment = SubResource("Environment_vk1lh")
attributes = SubResource("CameraAttributesPhysical_dvixg")
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="CenterContainer/VBoxContainer/HBoxContainer/SubViewportContainer/SubViewport"] [node name="Sprite3D" type="Sprite3D" parent="CenterContainer2/SubViewportContainer/SubViewport/CameraPivot/Camera3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2.84891, 0) transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 349.344, -203.088, -300)
radius = 1.5 material_override = SubResource("ShaderMaterial_dvixg")
height = 5.46951 pixel_size = 1.0
material = SubResource("StandardMaterial3D_dvixg") billboard = 2
transparent = false
texture_filter = 2
texture = ExtResource("3_hpkd1")
[node name="RightPanel" type="Panel" parent="CenterContainer/VBoxContainer/HBoxContainer"] [node name="MarginContainer" type="MarginContainer" parent="."]
custom_minimum_size = Vector2(390, 0) layout_mode = 2
anchor_left = 0.5
anchor_top = 0.186
anchor_right = 0.969
anchor_bottom = 0.87
offset_left = 13.0
offset_top = 4.12
offset_right = 5.5199
offset_bottom = 3.3999
theme_override_constants/margin_left = 25
theme_override_constants/margin_top = 25
theme_override_constants/margin_right = 25
[node name="EnemyInfo" type="VBoxContainer" parent="MarginContainer"]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/separation = 20
[node name="EnemyName" type="RichTextLabel" parent="MarginContainer/EnemyInfo"]
unique_name_in_owner = true
custom_minimum_size = Vector2(800, 50)
layout_mode = 2
theme_override_fonts/normal_font = ExtResource("7_dvixg")
theme_override_font_sizes/normal_font_size = 40
text = "Placeholder Text"
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/EnemyInfo"]
custom_minimum_size = Vector2(0, 150)
layout_mode = 2
[node name="StatBlock" type="VBoxContainer" parent="MarginContainer/EnemyInfo/HBoxContainer"]
custom_minimum_size = Vector2(300, 0)
layout_mode = 2
[node name="HPBlock" type="HBoxContainer" parent="MarginContainer/EnemyInfo/HBoxContainer/StatBlock"]
layout_mode = 2
[node name="Label" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/StatBlock/HPBlock"]
layout_mode = 2
text = "HP"
label_settings = ExtResource("6_vk1lh")
[node name="HPValue" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/StatBlock/HPBlock"]
unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
text = "992"
label_settings = ExtResource("6_vk1lh")
[node name="TextEdit" type="RichTextLabel" parent="CenterContainer/VBoxContainer/HBoxContainer/RightPanel"] [node name="ATKBlock" type="HBoxContainer" parent="MarginContainer/EnemyInfo/HBoxContainer/StatBlock"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("2_bef6s")
text = "Placeholder Text"
[node name="BottomPanel" type="Panel" parent="CenterContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 460)
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3
[node name="ColorRect" type="ColorRect" parent="CenterContainer/VBoxContainer/BottomPanel"] [node name="Label" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/StatBlock/ATKBlock"]
layout_mode = 1 layout_mode = 2
anchors_preset = 12 text = "ATK"
anchor_top = 1.0 label_settings = ExtResource("6_vk1lh")
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 0
[node name="Description" type="RichTextLabel" parent="CenterContainer/VBoxContainer/BottomPanel"] [node name="ATKValue" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/StatBlock/ATKBlock"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 1 layout_mode = 2
anchors_preset = 15 size_flags_horizontal = 3
anchor_right = 1.0 text = "14"
anchor_bottom = 1.0 label_settings = ExtResource("6_vk1lh")
grow_horizontal = 2
grow_vertical = 2 [node name="DEFBlock" type="HBoxContainer" parent="MarginContainer/EnemyInfo/HBoxContainer/StatBlock"]
theme = ExtResource("2_bef6s") layout_mode = 2
[node name="Label" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/StatBlock/DEFBlock"]
layout_mode = 2
text = "DEF"
label_settings = ExtResource("6_vk1lh")
[node name="DEFValue" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/StatBlock/DEFBlock"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "15"
label_settings = ExtResource("6_vk1lh")
[node name="DropsBlock" type="VBoxContainer" parent="MarginContainer/EnemyInfo/HBoxContainer"]
custom_minimum_size = Vector2(300, 0)
layout_mode = 2
[node name="Drops" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/DropsBlock"]
layout_mode = 2
text = "Drops:"
label_settings = ExtResource("6_vk1lh")
[node name="FirstDrop" type="HBoxContainer" parent="MarginContainer/EnemyInfo/HBoxContainer/DropsBlock"]
layout_mode = 2
[node name="Label" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/DropsBlock/FirstDrop"]
layout_mode = 2
text = "1."
label_settings = ExtResource("6_vk1lh")
[node name="Drop1Value" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/DropsBlock/FirstDrop"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "???"
label_settings = ExtResource("6_vk1lh")
[node name="SecondDrop" type="HBoxContainer" parent="MarginContainer/EnemyInfo/HBoxContainer/DropsBlock"]
layout_mode = 2
[node name="Label" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/DropsBlock/SecondDrop"]
layout_mode = 2
text = "2."
label_settings = ExtResource("6_vk1lh")
[node name="Drop2Value" type="Label" parent="MarginContainer/EnemyInfo/HBoxContainer/DropsBlock/SecondDrop"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Goddess Garb"
label_settings = ExtResource("6_vk1lh")
[node name="AffinityBlock" type="VBoxContainer" parent="MarginContainer/EnemyInfo"]
custom_minimum_size = Vector2(300, 0)
layout_mode = 2
[node name="Affinity" type="HBoxContainer" parent="MarginContainer/EnemyInfo/AffinityBlock"]
layout_mode = 2
[node name="Label" type="Label" parent="MarginContainer/EnemyInfo/AffinityBlock/Affinity"]
layout_mode = 2
text = "Affinity:"
label_settings = ExtResource("6_vk1lh")
[node name="AffinityValue" type="Label" parent="MarginContainer/EnemyInfo/AffinityBlock/Affinity"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Metal"
label_settings = ExtResource("6_vk1lh")
[node name="Weakness" type="HBoxContainer" parent="MarginContainer/EnemyInfo/AffinityBlock"]
layout_mode = 2
[node name="Label" type="Label" parent="MarginContainer/EnemyInfo/AffinityBlock/Weakness"]
layout_mode = 2
text = "Weakness:"
label_settings = ExtResource("6_vk1lh")
[node name="WeaknessValue" type="Label" parent="MarginContainer/EnemyInfo/AffinityBlock/Weakness"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Holy"
label_settings = ExtResource("6_vk1lh")
[node name="Description" type="RichTextLabel" parent="MarginContainer/EnemyInfo"]
unique_name_in_owner = true
custom_minimum_size = Vector2(800, 625)
layout_mode = 2
theme_override_fonts/normal_font = ExtResource("7_dvixg")
theme_override_font_sizes/normal_font_size = 30
text = "Placeholder Text" text = "Placeholder Text"
[node name="Label" type="Label" parent="CenterContainer/VBoxContainer/BottomPanel"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -460.0
offset_top = -228.0
grow_horizontal = 0
grow_vertical = 0
theme = ExtResource("2_bef6s")
text = "Switch: L1/R1 or <- ->
Primary Attack: X (Space)
Secondary Attack: ◻ (RMB)
Activate: △ (E)"
[node name="DataViewerRepository" parent="." instance=ExtResource("3_ejdn0")]
unique_name_in_owner = true
ModelRepository = Array[PackedScene]([ExtResource("5_vk1lh"), ExtResource("4_bef6s"), ExtResource("6_hpkd1"), ExtResource("8_dvixg"), ExtResource("9_utjpw"), ExtResource("10_ylptw"), ExtResource("11_fm7p5"), ExtResource("12_5hrw6"), ExtResource("13_5hrw6"), ExtResource("14_3wl4s"), ExtResource("15_37gx6"), ExtResource("16_alsxp"), ExtResource("17_qov77"), ExtResource("18_sxd8s"), ExtResource("19_gkucd")])
[node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_3wl4s") environment = SubResource("Environment_3wl4s")
@@ -170,3 +291,22 @@ transform = Transform3D(1, 0, 0, 0, -0.31977, 0.947495, 0, -0.947495, -0.31977,
light_energy = 8.943 light_energy = 8.943
spot_range = 9.00889 spot_range = 9.00889
spot_attenuation = 3.45 spot_attenuation = 3.45
[node name="BackButton" type="Button" parent="."]
unique_name_in_owner = true
layout_mode = 0
offset_left = 1671.0
offset_top = 972.0
offset_right = 1803.0
offset_bottom = 1028.0
theme_override_styles/focus = ExtResource("25_gdy4a")
theme_override_styles/disabled_mirrored = ExtResource("26_br3ej")
theme_override_styles/disabled = ExtResource("26_br3ej")
theme_override_styles/hover_pressed_mirrored = ExtResource("26_br3ej")
theme_override_styles/hover_pressed = ExtResource("26_br3ej")
theme_override_styles/hover_mirrored = ExtResource("26_br3ej")
theme_override_styles/hover = ExtResource("26_br3ej")
theme_override_styles/pressed_mirrored = ExtResource("26_br3ej")
theme_override_styles/pressed = ExtResource("26_br3ej")
theme_override_styles/normal_mirrored = ExtResource("26_br3ej")
theme_override_styles/normal = ExtResource("26_br3ej")

View File

@@ -1,12 +0,0 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class DataViewerRepository : Node
{
[Export]
public Godot.Collections.Array<PackedScene> ModelRepository;
}

View File

@@ -1,6 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://c16i1gmg6yu5a"]
[ext_resource type="Script" uid="uid://03k48fke03vu" path="res://src/data_viewer/DataViewerRepository.cs" id="1_1cvot"]
[node name="DataViewerRepository" type="Node"]
script = ExtResource("1_1cvot")

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bophm5or5opdf"
path="res://.godot/imported/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg-c763a9fd7b565d1015c74205c4c551f8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/data_viewer/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg"
dest_files=["res://.godot/imported/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg-c763a9fd7b565d1015c74205c4c551f8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

View File

@@ -0,0 +1,3 @@
~ no_exit
Altar: This is the text that shows when you try to leave
=> END

View File

@@ -0,0 +1,16 @@
[remap]
importer="dialogue_manager"
importer_version=15
type="Resource"
uid="uid://bqnfw6r4085yv"
path="res://.godot/imported/Altar.dialogue-4c0a39657904bbae8a3f60621532f38d.tres"
[deps]
source_file="res://src/dialog/Altar.dialogue"
dest_files=["res://.godot/imported/Altar.dialogue-4c0a39657904bbae8a3f60621532f38d.tres"]
[params]
defaults=true

View File

@@ -10,4 +10,24 @@ public partial class EnemyLoreInfo : Resource
[Export] [Export]
public string Description { get; set; } public string Description { get; set; }
[Export]
public string MaximumHP { get; set; }
[Export] public string ATK { get; set; }
[Export] public string DEF { get; set; }
[Export]
public string Affinity { get; set; }
[Export]
public string Weakness { get; set; }
[Export]
public string Drop1 { get; set; }
[Export]
public string Drop2 { get; set; }
} }

View File

@@ -41,6 +41,8 @@ public abstract partial class EnemyModelView : Node3D, IEnemyModelView
[Export] [Export]
public bool CanMove { get; set; } = false; public bool CanMove { get; set; } = false;
[Export] public EnemyLoreInfo EnemyLoreInfo { get; set; } = default!;
public void OnReady() public void OnReady()
{ {
if (AnimationTree != null) if (AnimationTree != null)
@@ -50,32 +52,50 @@ public abstract partial class EnemyModelView : Node3D, IEnemyModelView
} }
} }
public virtual Vector2 GetSize()
{
return Vector2.Zero;
}
public virtual void PlayPrimaryAttackAnimation() public virtual void PlayPrimaryAttackAnimation()
{ {
if (!AnimationTree.HasAnimation("primary_attack"))
return;
_walkSFX.Stop(); _walkSFX.Stop();
_stateMachine.Travel(_primaryAttackName, false); _stateMachine.Travel(_primaryAttackName, false);
} }
public virtual void PlaySecondaryAttackAnimation() public virtual void PlaySecondaryAttackAnimation()
{ {
if (!AnimationTree.HasAnimation("secondary_attack"))
return;
_walkSFX.Stop(); _walkSFX.Stop();
_stateMachine.Travel(_secondaryAttackName, false); _stateMachine.Travel(_secondaryAttackName, false);
} }
public virtual void PlayPrimarySkillAnimation() public virtual void PlayPrimarySkillAnimation()
{ {
if (!AnimationTree.HasAnimation("teleport"))
return;
_walkSFX.Stop(); _walkSFX.Stop();
_stateMachine.Travel(_primarySkillName, false); _stateMachine.Travel(_primarySkillName, false);
} }
public virtual void PlayIdleAnimation() public virtual void PlayIdleAnimation()
{ {
if (!AnimationTree.HasAnimation("idle_front"))
return;
_walkSFX.Stop(); _walkSFX.Stop();
_stateMachine.Travel(_idleName, false); _stateMachine.Travel(_idleName, false);
} }
public virtual void PlayWalkAnimation() public virtual void PlayWalkAnimation()
{ {
if (!AnimationTree.HasAnimation("idle_front_walking"))
return;
if (!_walkSFX.Playing) if (!_walkSFX.Playing)
_walkSFX.Play(); _walkSFX.Play();
_stateMachine.Travel(_walkingName, false); _stateMachine.Travel(_walkingName, false);
@@ -89,6 +109,9 @@ public abstract partial class EnemyModelView : Node3D, IEnemyModelView
public virtual void PlayActivateAnimation() public virtual void PlayActivateAnimation()
{ {
if (!AnimationTree.HasAnimation(_activateFront))
return;
_walkSFX.Stop(); _walkSFX.Stop();
_stateMachine.Travel(_activateName, false); _stateMachine.Travel(_activateName, false);
} }

View File

@@ -10,10 +10,10 @@ public partial class EnemyModelView2D : EnemyModelView, IEnemyModelView
{ {
public override void _Notification(int what) => this.Notify(what); public override void _Notification(int what) => this.Notify(what);
[Export] public EnemyLoreInfo EnemyLoreInfo { get; set; } = default!;
[Node] public AnimatedSprite2D AnimatedSprite { get; set; } = default!; [Node] public AnimatedSprite2D AnimatedSprite { get; set; } = default!;
[Node] public Sprite3D Sprite3D { get; set; } = default!;
[Node] public Area3D Hitbox { get; set; } = default!; [Node] public Area3D Hitbox { get; set; } = default!;
[Node] public AnimationPlayer AnimationPlayer { get; set; } = default!; [Node] public AnimationPlayer AnimationPlayer { get; set; } = default!;
@@ -34,6 +34,12 @@ public partial class EnemyModelView2D : EnemyModelView, IEnemyModelView
base.OnReady(); base.OnReady();
} }
public override Vector2 GetSize()
{
return Sprite3D.GetItemRect().Size;
}
private void Hitbox_AreaEntered(Area3D area) => OnPlayerHit(new AttackEventArgs(AttackData)); private void Hitbox_AreaEntered(Area3D area) => OnPlayerHit(new AttackEventArgs(AttackData));
public void SetCurrentDirection(Basis enemyBasis, Vector3 cameraDirection) => _enemyDirection = GetEnemyDirection(enemyBasis, cameraDirection, _upperThreshold, _lowerThreshold); public void SetCurrentDirection(Basis enemyBasis, Vector3 cameraDirection) => _enemyDirection = GetEnemyDirection(enemyBasis, cameraDirection, _upperThreshold, _lowerThreshold);

View File

@@ -13,6 +13,12 @@ public partial class EnemyModelView3D : EnemyModelView
[Node] public MeshInstance3D MeshInstance { get; set; } = default!; [Node] public MeshInstance3D MeshInstance { get; set; } = default!;
public override Vector2 GetSize()
{
var aabb = MeshInstance.GetAabb();
return new Vector2(aabb.Size.X, aabb.Position.Abs().Y);
}
private void ChangeMaterial() private void ChangeMaterial()
{ {
var material = new StandardMaterial3D var material = new StandardMaterial3D

View File

@@ -7,6 +7,8 @@ namespace Zennysoft.Game.Ma;
public interface IEnemyModelView : INode3D public interface IEnemyModelView : INode3D
{ {
public EnemyLoreInfo EnemyLoreInfo { get; }
public void PlayIdleAnimation(); public void PlayIdleAnimation();
public void PlayWalkAnimation(); public void PlayWalkAnimation();

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=79 format=3 uid="uid://bimjnsu52y3xi"] [gd_scene load_steps=80 format=3 uid="uid://bimjnsu52y3xi"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_oh25a"] [ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_oh25a"]
[ext_resource type="Texture2D" uid="uid://dd0ia6isdqg61" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 1.png" id="1_pbx41"] [ext_resource type="Texture2D" uid="uid://dd0ia6isdqg61" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 1.png" id="1_pbx41"]
@@ -59,6 +59,7 @@
[ext_resource type="Texture2D" uid="uid://b1cmx8l4ia3fv" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 14.png" id="54_jdvn0"] [ext_resource type="Texture2D" uid="uid://b1cmx8l4ia3fv" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 14.png" id="54_jdvn0"]
[ext_resource type="Texture2D" uid="uid://c7t4626rox02s" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 15.png" id="55_2eqor"] [ext_resource type="Texture2D" uid="uid://c7t4626rox02s" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 15.png" id="55_2eqor"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="60_x7uye"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="60_x7uye"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="61_djeua"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="62_8wbs7"] [ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="62_8wbs7"]
[sub_resource type="Resource" id="Resource_ivy74"] [sub_resource type="Resource" id="Resource_ivy74"]
@@ -657,6 +658,7 @@ script = ExtResource("1_oh25a")
EnemyLoreInfo = SubResource("Resource_ivy74") EnemyLoreInfo = SubResource("Resource_ivy74")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0) transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0)
pixel_size = 0.001 pixel_size = 0.001
billboard = 2 billboard = 2
@@ -715,3 +717,10 @@ anim_player = NodePath("../AnimationPlayer")
unique_name_in_owner = true unique_name_in_owner = true
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.115, 0, 0, 0, -5.02681e-09, 0.115, 0, -0.115, -5.02681e-09, -0.00018537, -1.10125, 0.0453106)
transparency = 0.1
cast_shadow = 0
texture_filter = 0
texture = ExtResource("61_djeua")

View File

@@ -18,23 +18,23 @@ public partial class Michael : Enemy2D, IHavePatrolBehavior, IHaveEngagePlayerBe
public void OnReady() public void OnReady()
{ {
FollowBehavior.Init(NavigationAgent); FollowBehavior.Init(NavigationAgent);
PatrolBehavior.Init(NavigationAgent); PatrolBehavior.Init(NavigationAgent);
PatrolBehavior.HomePosition = GlobalPosition; PatrolBehavior.HomePosition = GlobalPosition;
PatrolBehavior.OnVelocityComputed += OnVelocityComputed; PatrolBehavior.OnVelocityComputed += OnVelocityComputed;
FollowBehavior.OnVelocityComputed += OnVelocityComputed; FollowBehavior.OnVelocityComputed += OnVelocityComputed;
EngagePlayerBehavior.TakeAction += EngagePlayerBehavior_TakeAction; EngagePlayerBehavior.TakeAction += EngagePlayerBehavior_TakeAction;
EngagePlayerBehavior.AcquireTarget += EngagePlayerBehavior_AcquireTarget; EngagePlayerBehavior.AcquireTarget += EngagePlayerBehavior_AcquireTarget;
PlayerDetector.BodyEntered += PlayerDetector_BodyEntered; PlayerDetector.BodyEntered += PlayerDetector_BodyEntered;
PlayerDetector.BodyExited += PlayerDetector_BodyExited; PlayerDetector.BodyExited += PlayerDetector_BodyExited;
SetPhysicsProcess(true); SetPhysicsProcess(true);
} }
public void OnResolved() public void OnResolved()
{ {
_enemyLogic.Input(new EnemyLogic.Input.Patrol()); _enemyLogic.Input(new EnemyLogic.Input.Patrol());
} }
public override void Move() => EnemyModelView.PlayIdleAnimation(); public override void Move() => EnemyModelView.PlayIdleAnimation();
} }

View File

@@ -56,6 +56,7 @@ shape = SubResource("CapsuleShape3D_0h5s2")
[node name="EnemyModelView" parent="." instance=ExtResource("3_wrps7")] [node name="EnemyModelView" parent="." instance=ExtResource("3_wrps7")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0799522, 0, 0)
[node name="PlayerDetector" type="Area3D" parent="."] [node name="PlayerDetector" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=141 format=3 uid="uid://bjg8wyvp8q6oc"] [gd_scene load_steps=142 format=3 uid="uid://bjg8wyvp8q6oc"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_o4cc2"] [ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_o4cc2"]
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_3eot4"] [ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_3eot4"]
@@ -75,6 +75,7 @@
[ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="74_fxhv6"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="74_fxhv6"]
[ext_resource type="Texture2D" uid="uid://duygq1qfer5oa" path="res://src/vfx/Enemy/michael_attack.png" id="74_mip6u"] [ext_resource type="Texture2D" uid="uid://duygq1qfer5oa" path="res://src/vfx/Enemy/michael_attack.png" id="74_mip6u"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="74_pxi1p"] [ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="74_pxi1p"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="76_fxhv6"]
[sub_resource type="Resource" id="Resource_gby04"] [sub_resource type="Resource" id="Resource_gby04"]
script = ExtResource("2_3eot4") script = ExtResource("2_3eot4")
@@ -1178,6 +1179,7 @@ script = ExtResource("1_o4cc2")
EnemyLoreInfo = SubResource("Resource_gby04") EnemyLoreInfo = SubResource("Resource_gby04")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.086869, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.086869, 0)
billboard = 2 billboard = 2
shaded = true shaded = true
@@ -1246,3 +1248,11 @@ sprite_frames = SubResource("SpriteFrames_suy1t")
unique_name_in_owner = true unique_name_in_owner = true
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.38, 0, 0, 0, -1.66103e-08, 0.38, 0, -0.38, -1.66103e-08, 0.00393164, -1.31885, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("76_fxhv6")

View File

@@ -193,6 +193,7 @@
[ext_resource type="Texture2D" uid="uid://cvivq23738fvf" path="res://src/enemy/enemy_types/03. filth_eater/animations/Filth Side Attacks Frames/ATTACK 2 SIDE/frame_072_delay-0.01s.png" id="189_uqsli"] [ext_resource type="Texture2D" uid="uid://cvivq23738fvf" path="res://src/enemy/enemy_types/03. filth_eater/animations/Filth Side Attacks Frames/ATTACK 2 SIDE/frame_072_delay-0.01s.png" id="189_uqsli"]
[ext_resource type="Texture2D" uid="uid://bxijhjyqvfrip" path="res://src/enemy/enemy_types/03. filth_eater/animations/Filth Side Attacks Frames/ATTACK 2 SIDE/frame_073_delay-0.01s.png" id="190_wg32o"] [ext_resource type="Texture2D" uid="uid://bxijhjyqvfrip" path="res://src/enemy/enemy_types/03. filth_eater/animations/Filth Side Attacks Frames/ATTACK 2 SIDE/frame_073_delay-0.01s.png" id="190_wg32o"]
[ext_resource type="AudioStream" uid="uid://dl818xjlcm7vu" path="res://src/audio/sfx/ENEMY_FILTH_ATTACK.ogg" id="193_4h5gj"] [ext_resource type="AudioStream" uid="uid://dl818xjlcm7vu" path="res://src/audio/sfx/ENEMY_FILTH_ATTACK.ogg" id="193_4h5gj"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="193_e5pq0"]
[ext_resource type="PackedScene" uid="uid://diaxvpmwgl65u" path="res://src/enemy/TwoAttacksEnemyAnimationTree.tscn" id="193_krqul"] [ext_resource type="PackedScene" uid="uid://diaxvpmwgl65u" path="res://src/enemy/TwoAttacksEnemyAnimationTree.tscn" id="193_krqul"]
[ext_resource type="Texture2D" uid="uid://d0q5jru1am4v0" path="res://src/vfx/Enemy/FILTH_BLAST.png" id="194_pyy2h"] [ext_resource type="Texture2D" uid="uid://d0q5jru1am4v0" path="res://src/vfx/Enemy/FILTH_BLAST.png" id="194_pyy2h"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="194_u5xjp"] [ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="194_u5xjp"]
@@ -208,12 +209,6 @@ Name = "Filth Eater"
Description = "yuck" Description = "yuck"
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3" metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
[sub_resource type="Resource" id="Resource_e5pq0"]
script = ExtResource("3_4h5gj")
Damage = 10
ElementType = 0
metadata/_custom_type_script = "uid://ctshiyffvt4y5"
[sub_resource type="ViewportTexture" id="ViewportTexture_7tggm"] [sub_resource type="ViewportTexture" id="ViewportTexture_7tggm"]
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport") viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
@@ -3308,9 +3303,9 @@ _data = {
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
script = ExtResource("1_718m1") script = ExtResource("1_718m1")
EnemyLoreInfo = SubResource("Resource_pyy2h") EnemyLoreInfo = SubResource("Resource_pyy2h")
AttackData = SubResource("Resource_e5pq0")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0862446, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0862446, 0)
billboard = 2 billboard = 2
shaded = true shaded = true
@@ -3338,6 +3333,14 @@ rotation = 0.0174533
sprite_frames = SubResource("SpriteFrames_673a4") sprite_frames = SubResource("SpriteFrames_673a4")
animation = &"idle_back_walk" animation = &"idle_back_walk"
[node name="Shadow" type="Sprite3D" parent="Sprite3D"]
transform = Transform3D(0.93, 0, 0, 0, -4.06516e-08, 0.93, 0, -0.93, -4.06516e-08, 0.00393164, -0.670112, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("193_e5pq0")
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0)

View File

@@ -23,30 +23,30 @@ public partial class Sara : Enemy2D, IHavePatrolBehavior, IHaveEngagePlayerBehav
public void OnReady() public void OnReady()
{ {
FollowBehavior.Init(NavigationAgent); FollowBehavior.Init(NavigationAgent);
PatrolBehavior.Init(NavigationAgent); PatrolBehavior.Init(NavigationAgent);
PatrolBehavior.HomePosition = GlobalPosition; PatrolBehavior.HomePosition = GlobalPosition;
PatrolBehavior.OnVelocityComputed += OnVelocityComputed; PatrolBehavior.OnVelocityComputed += OnVelocityComputed;
FollowBehavior.OnVelocityComputed += OnVelocityComputed; FollowBehavior.OnVelocityComputed += OnVelocityComputed;
EngagePlayerBehavior.TakeAction += EngagePlayerBehavior_TakeAction; EngagePlayerBehavior.TakeAction += EngagePlayerBehavior_TakeAction;
EngagePlayerBehavior.AcquireTarget += EngagePlayerBehavior_AcquireTarget; EngagePlayerBehavior.AcquireTarget += EngagePlayerBehavior_AcquireTarget;
PlayerDetector.BodyEntered += PlayerDetector_BodyEntered; PlayerDetector.BodyEntered += PlayerDetector_BodyEntered;
PlayerDetector.BodyExited += PlayerDetector_BodyExited; PlayerDetector.BodyExited += PlayerDetector_BodyExited;
SetPhysicsProcess(true); SetPhysicsProcess(true);
} }
public void OnResolved() public void OnResolved()
{ {
_enemyLogic.Input(new EnemyLogic.Input.Patrol()); _enemyLogic.Input(new EnemyLogic.Input.Patrol());
} }
public override void Move() => EnemyModelView.PlayIdleAnimation(); public override void Move() => EnemyModelView.PlayIdleAnimation();
public override void PerformAction() public override void PerformAction()
{ {
var rng = new RandomNumberGenerator(); var rng = new RandomNumberGenerator();
var options = new List<Action>() { EnemyModelView.PlayPrimaryAttackAnimation, EnemyModelView.PlaySecondaryAttackAnimation }; var options = new List<Action>() { EnemyModelView.PlayPrimaryAttackAnimation, EnemyModelView.PlaySecondaryAttackAnimation };
var selection = rng.RandWeighted([PrimaryAttackChance, SecondaryAttackChance]); var selection = rng.RandWeighted([PrimaryAttackChance, SecondaryAttackChance]);
options[(int)selection].Invoke(); options[(int)selection].Invoke();
} }
} }

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=14 format=3 uid="uid://bksq62muhk3h5"] [gd_scene load_steps=15 format=3 uid="uid://bksq62muhk3h5"]
[ext_resource type="Script" uid="uid://jjulhqd5g3bd" path="res://src/enemy/enemy_types/04. sara/Sara.cs" id="1_3ejdn"] [ext_resource type="Script" uid="uid://jjulhqd5g3bd" path="res://src/enemy/enemy_types/04. sara/Sara.cs" id="1_3ejdn"]
[ext_resource type="PackedScene" uid="uid://2nkvacxsd46b" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="4_8ymq6"] [ext_resource type="PackedScene" uid="uid://2nkvacxsd46b" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="4_8ymq6"]
@@ -8,6 +8,7 @@
[ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_lxgpb"] [ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_lxgpb"]
[ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="7_ddchx"] [ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="7_ddchx"]
[ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_746fv"] [ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_746fv"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="10_746fv"]
[ext_resource type="AudioStream" uid="uid://bemrovoemoq5u" path="res://src/audio/sfx/ENEMY_APSARA_AGGRO.ogg" id="10_ddchx"] [ext_resource type="AudioStream" uid="uid://bemrovoemoq5u" path="res://src/audio/sfx/ENEMY_APSARA_AGGRO.ogg" id="10_ddchx"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
@@ -119,3 +120,11 @@ bus = &"SFX"
unique_name_in_owner = true unique_name_in_owner = true
stream = ExtResource("10_ddchx") stream = ExtResource("10_ddchx")
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.925, 0, 0, 0, -4.0433e-08, 0.925, 0, -0.925, -4.0433e-08, 0.00393164, -1.00089, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("10_746fv")

View File

@@ -1828,6 +1828,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.31442, 0)
script = ExtResource("1_oh25a") script = ExtResource("1_oh25a")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, -1.31336, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, -1.31336, 0)
pixel_size = 0.005 pixel_size = 0.005
billboard = 1 billboard = 1

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=172 format=3 uid="uid://c5xijwxkg4pf6"] [gd_scene load_steps=173 format=3 uid="uid://c5xijwxkg4pf6"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_ueqp5"] [ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_ueqp5"]
[ext_resource type="Texture2D" uid="uid://bgkx485uy065" path="res://src/enemy/enemy_types/05. ballos/animations/WALK BACK/1.png" id="3_b3ny6"] [ext_resource type="Texture2D" uid="uid://bgkx485uy065" path="res://src/enemy/enemy_types/05. ballos/animations/WALK BACK/1.png" id="3_b3ny6"]
@@ -99,6 +99,7 @@
[ext_resource type="AnimationNodeStateMachine" uid="uid://clybvwx3itfeo" path="res://src/enemy/animation_state_machines/SecondaryAttackStateMachine.tres" id="97_i3hgg"] [ext_resource type="AnimationNodeStateMachine" uid="uid://clybvwx3itfeo" path="res://src/enemy/animation_state_machines/SecondaryAttackStateMachine.tres" id="97_i3hgg"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="97_ktg2j"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="97_ktg2j"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://cy2ngl55c0rws" path="res://src/enemy/animation_state_machines/WalkingStateMachine.tres" id="98_ktg2j"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cy2ngl55c0rws" path="res://src/enemy/animation_state_machines/WalkingStateMachine.tres" id="98_ktg2j"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="100_ktg2j"]
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"] [sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport") viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
@@ -1470,6 +1471,7 @@ _data = {
script = ExtResource("1_ueqp5") script = ExtResource("1_ueqp5")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0275542, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0275542, 0)
billboard = 2 billboard = 2
alpha_cut = 1 alpha_cut = 1
@@ -1533,3 +1535,11 @@ unique_name_in_owner = true
stream = ExtResource("94_i3hgg") stream = ExtResource("94_i3hgg")
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(1.265, 0, 0, 0, -5.52949e-08, 1.265, 0, -1.265, -5.52949e-08, 0.00393164, -1.31885, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("100_ktg2j")

View File

@@ -14,8 +14,8 @@ public partial class ChariotModelView : EnemyModelView2D, IEnemyModelView
public override void PlayActivateAnimation() public override void PlayActivateAnimation()
{ {
_stateMachine.Travel(_activateName); _stateMachine.Travel(_activateName);
var scrollStateMachine = (AnimationNodeStateMachinePlayback)ScrollAnimationTree.Get(_parametersPlayback); var scrollStateMachine = (AnimationNodeStateMachinePlayback)ScrollAnimationTree.Get(_parametersPlayback);
scrollStateMachine.Travel(_activateName); scrollStateMachine.Travel(_activateName);
} }
} }

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=1238 format=3 uid="uid://dcm53j3rncxdm"] [gd_scene load_steps=1239 format=3 uid="uid://dcm53j3rncxdm"]
[ext_resource type="Script" uid="uid://ckxqmb4tu4rml" path="res://src/enemy/enemy_types/06. chariot/ChariotModelView.cs" id="1_behrq"] [ext_resource type="Script" uid="uid://ckxqmb4tu4rml" path="res://src/enemy/enemy_types/06. chariot/ChariotModelView.cs" id="1_behrq"]
[ext_resource type="Texture2D" uid="uid://2gwychj1wbtx" path="res://src/enemy/enemy_types/06. chariot/animations/APPEAR/F/0051.png" id="2_1844k"] [ext_resource type="Texture2D" uid="uid://2gwychj1wbtx" path="res://src/enemy/enemy_types/06. chariot/animations/APPEAR/F/0051.png" id="2_1844k"]
@@ -979,6 +979,7 @@
[ext_resource type="AnimationNodeStateMachine" uid="uid://cy2ngl55c0rws" path="res://src/enemy/animation_state_machines/WalkingStateMachine.tres" id="976_vxyya"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cy2ngl55c0rws" path="res://src/enemy/animation_state_machines/WalkingStateMachine.tres" id="976_vxyya"]
[ext_resource type="Script" uid="uid://cqm6u7qa8japr" path="res://src/system/Projectile.cs" id="978_jrkfh"] [ext_resource type="Script" uid="uid://cqm6u7qa8japr" path="res://src/system/Projectile.cs" id="978_jrkfh"]
[ext_resource type="Texture2D" uid="uid://f32ew15v8v30" path="res://src/vfx/Enemy/chariot_projectile.png" id="979_p70s4"] [ext_resource type="Texture2D" uid="uid://f32ew15v8v30" path="res://src/vfx/Enemy/chariot_projectile.png" id="979_p70s4"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="980_jrkfh"]
[sub_resource type="ViewportTexture" id="ViewportTexture_vr4bf"] [sub_resource type="ViewportTexture" id="ViewportTexture_vr4bf"]
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport") viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
@@ -8098,3 +8099,11 @@ libraries = {
unique_name_in_owner = true unique_name_in_owner = true
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(1.08, 0, 0, 0, -4.72083e-08, 1.08, 0, -1.08, -4.72083e-08, 0.00393164, -1.92335, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("980_jrkfh")

View File

@@ -1,8 +1,7 @@
[gd_scene load_steps=504 format=3 uid="uid://byd7cwxq1be6f"] [gd_scene load_steps=503 format=3 uid="uid://byd7cwxq1be6f"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_6dej3"] [ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_6dej3"]
[ext_resource type="Texture2D" uid="uid://dnd6d5cx7x7i8" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0400.png" id="2_3sdh3"] [ext_resource type="Texture2D" uid="uid://dnd6d5cx7x7i8" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0400.png" id="2_3sdh3"]
[ext_resource type="Script" uid="uid://ctshiyffvt4y5" path="res://src/system/AttackDataResource.cs" id="2_keq07"]
[ext_resource type="Texture2D" uid="uid://c0unwba144tls" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0402.png" id="3_dbwem"] [ext_resource type="Texture2D" uid="uid://c0unwba144tls" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0402.png" id="3_dbwem"]
[ext_resource type="Texture2D" uid="uid://ca1im2so1vkym" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0404.png" id="4_y7pe6"] [ext_resource type="Texture2D" uid="uid://ca1im2so1vkym" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0404.png" id="4_y7pe6"]
[ext_resource type="Texture2D" uid="uid://cgnm3v0t63aiw" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0406.png" id="5_xu4hf"] [ext_resource type="Texture2D" uid="uid://cgnm3v0t63aiw" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0406.png" id="5_xu4hf"]
@@ -396,16 +395,11 @@
[ext_resource type="Texture2D" uid="uid://csdrkeer8xklt" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/FRONT/0354.png" id="390_ksvn0"] [ext_resource type="Texture2D" uid="uid://csdrkeer8xklt" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/FRONT/0354.png" id="390_ksvn0"]
[ext_resource type="AudioStream" uid="uid://dr7w0i4v8qqip" path="res://src/audio/sfx/enemy_chinthe_land.ogg" id="391_5lbxl"] [ext_resource type="AudioStream" uid="uid://dr7w0i4v8qqip" path="res://src/audio/sfx/enemy_chinthe_land.ogg" id="391_5lbxl"]
[ext_resource type="AudioStream" uid="uid://bq4te4d8m0uiw" path="res://src/audio/sfx/enemy_chinthe_mainattack.ogg" id="392_li182"] [ext_resource type="AudioStream" uid="uid://bq4te4d8m0uiw" path="res://src/audio/sfx/enemy_chinthe_mainattack.ogg" id="392_li182"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="392_sgkk0"]
[ext_resource type="AudioStream" uid="uid://b0w77kgmtd3g5" path="res://src/audio/sfx/enemy_chinthe_teleport.ogg" id="393_sgkk0"] [ext_resource type="AudioStream" uid="uid://b0w77kgmtd3g5" path="res://src/audio/sfx/enemy_chinthe_teleport.ogg" id="393_sgkk0"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="394_ldtka"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="394_ldtka"]
[ext_resource type="Texture2D" uid="uid://c7pf2dib2ilhs" path="res://src/vfx/Enemy/CHINTHE_BLAST.png" id="395_ymova"] [ext_resource type="Texture2D" uid="uid://c7pf2dib2ilhs" path="res://src/vfx/Enemy/CHINTHE_BLAST.png" id="395_ymova"]
[sub_resource type="Resource" id="Resource_w4c47"]
script = ExtResource("2_keq07")
Damage = 10
ElementType = 0
metadata/_custom_type_script = "uid://ctshiyffvt4y5"
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"] [sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport") viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
@@ -3070,6 +3064,7 @@ advance_mode = 2
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_li182"] [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_li182"]
states/Start/position = Vector2(273, 100) states/Start/position = Vector2(273, 100)
transitions = ["Start", "End", SubResource("AnimationNodeStateMachineTransition_li182")] transitions = ["Start", "End", SubResource("AnimationNodeStateMachineTransition_li182")]
graph_offset = Vector2(-179, 5)
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_li182"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_li182"]
animation = &"teleport in" animation = &"teleport in"
@@ -3230,7 +3225,7 @@ states/Start/position = Vector2(199, 100)
states/Walking/node = SubResource("AnimationNodeStateMachine_7dl50") states/Walking/node = SubResource("AnimationNodeStateMachine_7dl50")
states/Walking/position = Vector2(348, 400.144) states/Walking/position = Vector2(348, 400.144)
transitions = ["Start", "Unactivated Idle", SubResource("AnimationNodeStateMachineTransition_umemc"), "Unactivated Idle", "Activate", SubResource("AnimationNodeStateMachineTransition_t3xhd"), "Activate", "Idle", SubResource("AnimationNodeStateMachineTransition_5jjkq"), "Primary Attack", "Idle", SubResource("AnimationNodeStateMachineTransition_keq07"), "Idle", "Primary Skill", SubResource("AnimationNodeStateMachineTransition_manul"), "Primary Skill", "Teleport In", SubResource("AnimationNodeStateMachineTransition_auprl"), "Teleport In", "Idle", SubResource("AnimationNodeStateMachineTransition_i5vf2"), "Idle", "Primary Attack", SubResource("AnimationNodeStateMachineTransition_jbhro"), "Stop Walk", "Idle", SubResource("AnimationNodeStateMachineTransition_yu6fp"), "Idle", "Walking", SubResource("AnimationNodeStateMachineTransition_sgkk0"), "Walking", "Stop Walk", SubResource("AnimationNodeStateMachineTransition_8e7of")] transitions = ["Start", "Unactivated Idle", SubResource("AnimationNodeStateMachineTransition_umemc"), "Unactivated Idle", "Activate", SubResource("AnimationNodeStateMachineTransition_t3xhd"), "Activate", "Idle", SubResource("AnimationNodeStateMachineTransition_5jjkq"), "Primary Attack", "Idle", SubResource("AnimationNodeStateMachineTransition_keq07"), "Idle", "Primary Skill", SubResource("AnimationNodeStateMachineTransition_manul"), "Primary Skill", "Teleport In", SubResource("AnimationNodeStateMachineTransition_auprl"), "Teleport In", "Idle", SubResource("AnimationNodeStateMachineTransition_i5vf2"), "Idle", "Primary Attack", SubResource("AnimationNodeStateMachineTransition_jbhro"), "Stop Walk", "Idle", SubResource("AnimationNodeStateMachineTransition_yu6fp"), "Idle", "Walking", SubResource("AnimationNodeStateMachineTransition_sgkk0"), "Walking", "Stop Walk", SubResource("AnimationNodeStateMachineTransition_8e7of")]
graph_offset = Vector2(-196.563, 38.1444) graph_offset = Vector2(-331.563, 123.457)
[sub_resource type="AtlasTexture" id="AtlasTexture_tawq7"] [sub_resource type="AtlasTexture" id="AtlasTexture_tawq7"]
atlas = ExtResource("395_ymova") atlas = ExtResource("395_ymova")
@@ -3493,9 +3488,9 @@ rings = 8
[node name="EnemyModelView" type="Node3D"] [node name="EnemyModelView" type="Node3D"]
script = ExtResource("1_6dej3") script = ExtResource("1_6dej3")
AttackData = SubResource("Resource_w4c47")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0)
pixel_size = 0.005 pixel_size = 0.005
billboard = 2 billboard = 2
@@ -3522,6 +3517,14 @@ sprite_frames = SubResource("SpriteFrames_22ecf")
animation = &"idle_front_walk" animation = &"idle_front_walk"
offset = Vector2(500, 500) offset = Vector2(500, 500)
[node name="Shadow" type="Sprite3D" parent="Sprite3D"]
transform = Transform3D(0.5, 0, 0, 0, -2.18557e-08, 0.5, 0, -0.5, -2.18557e-08, 0.00393164, -0.943969, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("392_sgkk0")
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0)

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=299 format=3 uid="uid://c2i8ylr3y0bri"] [gd_scene load_steps=300 format=3 uid="uid://c2i8ylr3y0bri"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_h27bt"] [ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_h27bt"]
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_yyynn"] [ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_yyynn"]
@@ -266,6 +266,7 @@
[ext_resource type="AnimationNodeStateMachine" uid="uid://cy2ngl55c0rws" path="res://src/enemy/animation_state_machines/WalkingStateMachine.tres" id="263_312rt"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cy2ngl55c0rws" path="res://src/enemy/animation_state_machines/WalkingStateMachine.tres" id="263_312rt"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="263_sroq1"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="263_sroq1"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://clybvwx3itfeo" path="res://src/enemy/animation_state_machines/SecondaryAttackStateMachine.tres" id="264_dcx20"] [ext_resource type="AnimationNodeStateMachine" uid="uid://clybvwx3itfeo" path="res://src/enemy/animation_state_machines/SecondaryAttackStateMachine.tres" id="264_dcx20"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="267_evddb"]
[sub_resource type="Resource" id="Resource_f45wt"] [sub_resource type="Resource" id="Resource_f45wt"]
script = ExtResource("2_yyynn") script = ExtResource("2_yyynn")
@@ -2002,6 +2003,7 @@ script = ExtResource("1_h27bt")
EnemyLoreInfo = SubResource("Resource_f45wt") EnemyLoreInfo = SubResource("Resource_f45wt")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.765249, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.765249, 0)
pixel_size = 0.02 pixel_size = 0.02
billboard = 2 billboard = 2
@@ -2059,3 +2061,11 @@ bus = &"SFX"
unique_name_in_owner = true unique_name_in_owner = true
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.835, 0, 0, 0, -3.6499e-08, 0.835, 0, -0.835, -3.6499e-08, 0.00393164, -1.31885, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("267_evddb")

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=299 format=3 uid="uid://72lbcmp4bcx4"] [gd_scene load_steps=300 format=3 uid="uid://72lbcmp4bcx4"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_a8qtn"] [ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_a8qtn"]
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_xa3ug"] [ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_xa3ug"]
@@ -261,6 +261,7 @@
[ext_resource type="Texture2D" uid="uid://dg7l1crtk7m3s" path="res://src/enemy/enemy_types/08b. Ambassador (red)/animations/SIDE/0197.png" id="259_ymdu4"] [ext_resource type="Texture2D" uid="uid://dg7l1crtk7m3s" path="res://src/enemy/enemy_types/08b. Ambassador (red)/animations/SIDE/0197.png" id="259_ymdu4"]
[ext_resource type="Texture2D" uid="uid://by2vqyh68egwr" path="res://src/enemy/enemy_types/08b. Ambassador (red)/animations/SIDE/0199.png" id="260_jtq5d"] [ext_resource type="Texture2D" uid="uid://by2vqyh68egwr" path="res://src/enemy/enemy_types/08b. Ambassador (red)/animations/SIDE/0199.png" id="260_jtq5d"]
[ext_resource type="AudioStream" uid="uid://bgumf0x52xmby" path="res://src/audio/sfx/enemy_ambassador_kick.ogg" id="261_qerwx"] [ext_resource type="AudioStream" uid="uid://bgumf0x52xmby" path="res://src/audio/sfx/enemy_ambassador_kick.ogg" id="261_qerwx"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="261_xxvov"]
[ext_resource type="PackedScene" uid="uid://diaxvpmwgl65u" path="res://src/enemy/TwoAttacksEnemyAnimationTree.tscn" id="262_a3dro"] [ext_resource type="PackedScene" uid="uid://diaxvpmwgl65u" path="res://src/enemy/TwoAttacksEnemyAnimationTree.tscn" id="262_a3dro"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="263_qerwx"] [ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="263_qerwx"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="264_xxvov"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="264_xxvov"]
@@ -1945,6 +1946,7 @@ script = ExtResource("1_a8qtn")
EnemyLoreInfo = SubResource("Resource_f45wt") EnemyLoreInfo = SubResource("Resource_f45wt")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, -0.941682, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, -0.941682, 0)
pixel_size = 0.015 pixel_size = 0.015
billboard = 2 billboard = 2
@@ -1976,6 +1978,14 @@ scale = Vector2(0.25, 0.25)
sprite_frames = SubResource("SpriteFrames_6drt6") sprite_frames = SubResource("SpriteFrames_6drt6")
animation = &"idle_front" animation = &"idle_front"
[node name="Shadow" type="Sprite3D" parent="Sprite3D"]
transform = Transform3D(0.29, 0, 0, 0, -1.26763e-08, 0.29, 0, -0.29, -1.26763e-08, 0.00393164, -0.492758, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("261_xxvov")
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0)

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=300 format=3 uid="uid://lc5koiqn1sca"] [gd_scene load_steps=301 format=3 uid="uid://lc5koiqn1sca"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_s0qsg"] [ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_s0qsg"]
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_84ebe"] [ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_84ebe"]
@@ -267,6 +267,7 @@
[ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="264_5tr5n"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="264_5tr5n"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://clybvwx3itfeo" path="res://src/enemy/animation_state_machines/SecondaryAttackStateMachine.tres" id="265_yj1cx"] [ext_resource type="AnimationNodeStateMachine" uid="uid://clybvwx3itfeo" path="res://src/enemy/animation_state_machines/SecondaryAttackStateMachine.tres" id="265_yj1cx"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://cy2ngl55c0rws" path="res://src/enemy/animation_state_machines/WalkingStateMachine.tres" id="266_jq47d"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cy2ngl55c0rws" path="res://src/enemy/animation_state_machines/WalkingStateMachine.tres" id="266_jq47d"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="268_yj1cx"]
[sub_resource type="Resource" id="Resource_f45wt"] [sub_resource type="Resource" id="Resource_f45wt"]
script = ExtResource("2_84ebe") script = ExtResource("2_84ebe")
@@ -2006,6 +2007,7 @@ script = ExtResource("1_s0qsg")
EnemyLoreInfo = SubResource("Resource_f45wt") EnemyLoreInfo = SubResource("Resource_f45wt")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, -0.765249, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, -0.765249, 0)
billboard = 2 billboard = 2
shaded = true shaded = true
@@ -2063,3 +2065,11 @@ bus = &"SFX"
unique_name_in_owner = true unique_name_in_owner = true
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.665, 0, 0, 0, -2.90681e-08, 0.665, 0, -0.665, -2.90681e-08, 0.00393164, -1.31885, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("268_yj1cx")

View File

@@ -2082,7 +2082,7 @@ script = ExtResource("1_wl7dh")
EnemyLoreInfo = SubResource("Resource_f45wt") EnemyLoreInfo = SubResource("Resource_f45wt")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, -1.11516, 0) unique_name_in_owner = true
billboard = 2 billboard = 2
texture_filter = 0 texture_filter = 0
render_priority = 100 render_priority = 100
@@ -2090,28 +2090,25 @@ texture = SubResource("ViewportTexture_h1kaf")
[node name="SubViewportContainer" type="SubViewportContainer" parent="Sprite3D"] [node name="SubViewportContainer" type="SubViewportContainer" parent="Sprite3D"]
visibility_layer = 0 visibility_layer = 0
offset_right = 40.0 offset_right = 512.0
offset_bottom = 40.0 offset_bottom = 512.0
[node name="SubViewport" type="SubViewport" parent="Sprite3D/SubViewportContainer"] [node name="SubViewport" type="SubViewport" parent="Sprite3D/SubViewportContainer"]
disable_3d = true disable_3d = true
transparent_bg = true transparent_bg = true
handle_input_locally = false handle_input_locally = false
size = Vector2i(1000, 1000)
render_target_update_mode = 4 render_target_update_mode = 4
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"] [node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
unique_name_in_owner = true unique_name_in_owner = true
texture_filter = 1 texture_filter = 1
position = Vector2(507, 425)
scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_6drt6") sprite_frames = SubResource("SpriteFrames_6drt6")
animation = &"idle_front" animation = &"idle_front"
offset = Vector2(250, 150)
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"] [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
position = Vector2(508, 425)
scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_d844v") sprite_frames = SubResource("SpriteFrames_d844v")
offset = Vector2(250, 150)
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -124,8 +124,8 @@ max_polyphony = 3
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("14_xdeci")] [node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("14_xdeci")]
unique_name_in_owner = true unique_name_in_owner = true
_minimumAttackTime = 10.0 _minimumAttackTime = 5.0
_maximumAttackTime = 15.0 _maximumAttackTime = 10.0
[node name="PlayerDetector" type="Area3D" parent="."] [node name="PlayerDetector" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -175,7 +175,7 @@ length = 0.001
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
tracks/0/path = NodePath("MeshInstance:material_override") tracks/0/path = NodePath("EdenPillar/MeshInstance:material_override")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
@@ -187,7 +187,7 @@ tracks/0/keys = {
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/imported = false tracks/1/imported = false
tracks/1/enabled = true tracks/1/enabled = true
tracks/1/path = NodePath("MeshInstance:material_override:transparency") tracks/1/path = NodePath("EdenPillar/MeshInstance:material_override:transparency")
tracks/1/interp = 1 tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/keys = { tracks/1/keys = {
@@ -199,7 +199,7 @@ tracks/1/keys = {
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/imported = false tracks/2/imported = false
tracks/2/enabled = true tracks/2/enabled = true
tracks/2/path = NodePath("MeshInstance:transparency") tracks/2/path = NodePath("EdenPillar/MeshInstance:transparency")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
@@ -215,7 +215,7 @@ step = 0.0833333
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
tracks/0/path = NodePath("MeshInstance:transparency") tracks/0/path = NodePath("EdenPillar/MeshInstance:transparency")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
@@ -227,7 +227,7 @@ tracks/0/keys = {
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/imported = false tracks/1/imported = false
tracks/1/enabled = true tracks/1/enabled = true
tracks/1/path = NodePath("MeshInstance:material_override") tracks/1/path = NodePath("EdenPillar/MeshInstance:material_override")
tracks/1/interp = 1 tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/keys = { tracks/1/keys = {
@@ -244,7 +244,7 @@ step = 0.0833333
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
tracks/0/path = NodePath("MeshInstance:material_override") tracks/0/path = NodePath("EdenPillar/MeshInstance:material_override")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
@@ -256,7 +256,7 @@ tracks/0/keys = {
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/imported = false tracks/1/imported = false
tracks/1/enabled = true tracks/1/enabled = true
tracks/1/path = NodePath("MeshInstance:material_override:transparency") tracks/1/path = NodePath("EdenPillar/MeshInstance:material_override:transparency")
tracks/1/interp = 1 tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/keys = { tracks/1/keys = {
@@ -268,7 +268,7 @@ tracks/1/keys = {
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/imported = false tracks/2/imported = false
tracks/2/enabled = true tracks/2/enabled = true
tracks/2/path = NodePath("MeshInstance:transparency") tracks/2/path = NodePath("EdenPillar/MeshInstance:transparency")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
@@ -288,28 +288,32 @@ _data = {
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_qhmtu"] [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_qhmtu"]
[node name="EdenPillarModelView" type="Node3D"] [node name="EdenPillarModelView" type="Node3D"]
transform = Transform3D(0.9, 0, 0, 0, 0.9, 0, 0, 0, 0.9, 0, 0, 0)
script = ExtResource("1_qhmtu") script = ExtResource("1_qhmtu")
[node name="MeshInstance" type="MeshInstance3D" parent="."] [node name="EdenPillar" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -4.28807, 0)
[node name="MeshInstance" type="MeshInstance3D" parent="EdenPillar"]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-2.29567e-08, 0.525188, 0.290134, -0.6, -2.62268e-08, 0, 1.26821e-08, -0.290134, 0.525188, -0.00582695, 4.44911, -0.0565475) transform = Transform3D(-2.29567e-08, 0.525188, 0.290134, -0.6, -2.62268e-08, -5.45934e-14, 1.26821e-08, -0.290134, 0.525188, -0.00582695, 4.44911, -0.0565475)
mesh = SubResource("ArrayMesh_8pgwy") mesh = SubResource("ArrayMesh_8pgwy")
skeleton = NodePath("") skeleton = NodePath("")
[node name="Firing" type="AudioStreamPlayer3D" parent="."] [node name="Firing" type="AudioStreamPlayer3D" parent="EdenPillar"]
[node name="WalkSFX" type="AudioStreamPlayer3D" parent="."] [node name="WalkSFX" type="AudioStreamPlayer3D" parent="EdenPillar"]
unique_name_in_owner = true unique_name_in_owner = true
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="AnimationPlayer" type="AnimationPlayer" parent="."] [node name="AnimationPlayer" type="AnimationPlayer" parent="EdenPillar"]
unique_name_in_owner = true unique_name_in_owner = true
root_node = NodePath("../..")
libraries = { libraries = {
&"": SubResource("AnimationLibrary_mi284") &"": SubResource("AnimationLibrary_mi284")
} }
[node name="AnimationTree" type="AnimationTree" parent="."] [node name="AnimationTree" type="AnimationTree" parent="EdenPillar"]
unique_name_in_owner = true unique_name_in_owner = true
root_node = NodePath("../..")
tree_root = SubResource("AnimationNodeStateMachine_qhmtu") tree_root = SubResource("AnimationNodeStateMachine_qhmtu")

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=387 format=3 uid="uid://dxwwfbt2mtmer"] [gd_scene load_steps=388 format=3 uid="uid://dxwwfbt2mtmer"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_yke7o"] [ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_yke7o"]
[ext_resource type="Texture2D" uid="uid://cob5mo4lrbkrp" path="res://src/enemy/enemy_types/11. Palan/animations/B/frame_000_delay-0.01s.png" id="2_lf0wi"] [ext_resource type="Texture2D" uid="uid://cob5mo4lrbkrp" path="res://src/enemy/enemy_types/11. Palan/animations/B/frame_000_delay-0.01s.png" id="2_lf0wi"]
@@ -211,6 +211,7 @@
[ext_resource type="Script" uid="uid://cqm6u7qa8japr" path="res://src/system/Projectile.cs" id="208_0yqqu"] [ext_resource type="Script" uid="uid://cqm6u7qa8japr" path="res://src/system/Projectile.cs" id="208_0yqqu"]
[ext_resource type="Texture2D" uid="uid://bn83xiolaxr6j" path="res://src/vfx/Enemy/PALANQUIN ATTACK 1.png" id="208_1bumx"] [ext_resource type="Texture2D" uid="uid://bn83xiolaxr6j" path="res://src/vfx/Enemy/PALANQUIN ATTACK 1.png" id="208_1bumx"]
[ext_resource type="Texture2D" uid="uid://dy8vmgvihf313" path="res://src/vfx/Enemy/sunlance.png" id="211_r6aec"] [ext_resource type="Texture2D" uid="uid://dy8vmgvihf313" path="res://src/vfx/Enemy/sunlance.png" id="211_r6aec"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="212_lid5r"]
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"] [sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport") viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
@@ -2890,6 +2891,7 @@ _data = {
script = ExtResource("1_yke7o") script = ExtResource("1_yke7o")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0366734, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0366734, 0)
pixel_size = 0.005 pixel_size = 0.005
billboard = 1 billboard = 1
@@ -3025,3 +3027,11 @@ libraries = {
unique_name_in_owner = true unique_name_in_owner = true
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(1.445, 0, 0, 0, -6.3163e-08, 1.445, 0, -1.445, -6.3163e-08, 0.00393164, -1.53476, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("212_lid5r")

View File

@@ -3404,6 +3404,7 @@ animations = [{
script = ExtResource("1_h8pla") script = ExtResource("1_h8pla")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 1.12245, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 1.12245, 0)
billboard = 2 billboard = 2
alpha_cut = 1 alpha_cut = 1

View File

@@ -17,25 +17,25 @@ public partial class ShieldOfHeaven : Enemy2D, IHavePatrolBehavior, IHaveEngageP
public void OnReady() public void OnReady()
{ {
FollowBehavior.Init(NavigationAgent); FollowBehavior.Init(NavigationAgent);
PatrolBehavior.Init(NavigationAgent); PatrolBehavior.Init(NavigationAgent);
PatrolBehavior.HomePosition = GlobalPosition; PatrolBehavior.HomePosition = GlobalPosition;
PatrolBehavior.OnVelocityComputed += OnVelocityComputed; PatrolBehavior.OnVelocityComputed += OnVelocityComputed;
FollowBehavior.OnVelocityComputed += OnVelocityComputed; FollowBehavior.OnVelocityComputed += OnVelocityComputed;
EngagePlayerBehavior.TakeAction += EngagePlayerBehavior_TakeAction; EngagePlayerBehavior.TakeAction += EngagePlayerBehavior_TakeAction;
EngagePlayerBehavior.AcquireTarget += EngagePlayerBehavior_AcquireTarget; EngagePlayerBehavior.AcquireTarget += EngagePlayerBehavior_AcquireTarget;
PlayerDetector.BodyEntered += PlayerDetector_BodyEntered; PlayerDetector.BodyEntered += PlayerDetector_BodyEntered;
PlayerDetector.BodyExited += PlayerDetector_BodyExited; PlayerDetector.BodyExited += PlayerDetector_BodyExited;
SetPhysicsProcess(true); SetPhysicsProcess(true);
} }
public override void _ExitTree() public override void _ExitTree()
{ {
PatrolBehavior.OnVelocityComputed -= OnVelocityComputed; PatrolBehavior.OnVelocityComputed -= OnVelocityComputed;
FollowBehavior.OnVelocityComputed -= OnVelocityComputed; FollowBehavior.OnVelocityComputed -= OnVelocityComputed;
EngagePlayerBehavior.TakeAction -= EngagePlayerBehavior_TakeAction; EngagePlayerBehavior.TakeAction -= EngagePlayerBehavior_TakeAction;
EngagePlayerBehavior.AcquireTarget -= EngagePlayerBehavior_AcquireTarget; EngagePlayerBehavior.AcquireTarget -= EngagePlayerBehavior_AcquireTarget;
PlayerDetector.BodyEntered -= PlayerDetector_BodyEntered; PlayerDetector.BodyEntered -= PlayerDetector_BodyEntered;
PlayerDetector.BodyExited -= PlayerDetector_BodyExited; PlayerDetector.BodyExited -= PlayerDetector_BodyExited;
} }
} }

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=13 format=3 uid="uid://5s7c4dsb1wwk"] [gd_scene load_steps=14 format=3 uid="uid://5s7c4dsb1wwk"]
[ext_resource type="Script" uid="uid://cjdivu0v1kfhy" path="res://src/enemy/enemy_types/12. Shield of Heaven/ShieldOfHeaven.cs" id="1_oxa5b"] [ext_resource type="Script" uid="uid://cjdivu0v1kfhy" path="res://src/enemy/enemy_types/12. Shield of Heaven/ShieldOfHeaven.cs" id="1_oxa5b"]
[ext_resource type="PackedScene" uid="uid://drkaq6grim1fb" path="res://src/enemy/enemy_types/12. Shield of Heaven/ShieldModelView.tscn" id="3_r2swr"] [ext_resource type="PackedScene" uid="uid://drkaq6grim1fb" path="res://src/enemy/enemy_types/12. Shield of Heaven/ShieldModelView.tscn" id="3_r2swr"]
@@ -8,6 +8,7 @@
[ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_uwf0x"] [ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_uwf0x"]
[ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="7_8rh66"] [ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="7_8rh66"]
[ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_m1i5i"] [ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_m1i5i"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="9_cacc5"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
radius = 0.226425 radius = 0.226425
@@ -112,3 +113,11 @@ bus = &"SFX"
[node name="AggroSFX" type="AudioStreamPlayer3D" parent="HitSounds"] [node name="AggroSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
unique_name_in_owner = true unique_name_in_owner = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(1.955, 0, 0, 0, -8.54558e-08, 1.955, 0, -1.955, -8.54558e-08, 0.00393164, -2.8107, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("9_cacc5")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 417 KiB

View File

@@ -1,8 +1,7 @@
[gd_scene load_steps=68 format=3 uid="uid://dobiqowi8mhfi"] [gd_scene load_steps=67 format=3 uid="uid://dobiqowi8mhfi"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_7w22e"] [ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_7w22e"]
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_ca1o5"] [ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_ca1o5"]
[ext_resource type="Script" uid="uid://ctshiyffvt4y5" path="res://src/system/AttackDataResource.cs" id="3_3rk4a"]
[ext_resource type="Texture2D" uid="uid://bokmaslnp1a4u" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_FRONT/Layer 1.png" id="3_kfpgw"] [ext_resource type="Texture2D" uid="uid://bokmaslnp1a4u" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_FRONT/Layer 1.png" id="3_kfpgw"]
[ext_resource type="Texture2D" uid="uid://bi5by5os5u7py" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_BACK/Layer 1.png" id="3_w6gcy"] [ext_resource type="Texture2D" uid="uid://bi5by5os5u7py" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_BACK/Layer 1.png" id="3_w6gcy"]
[ext_resource type="Texture2D" uid="uid://ca5uvl08g0147" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_BACK/Layer 2.png" id="4_2o8qa"] [ext_resource type="Texture2D" uid="uid://ca5uvl08g0147" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_BACK/Layer 2.png" id="4_2o8qa"]
@@ -49,6 +48,7 @@
[ext_resource type="Texture2D" uid="uid://cssrkfehdhgp5" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_SIDE/Layer 13.png" id="30_lcdw8"] [ext_resource type="Texture2D" uid="uid://cssrkfehdhgp5" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_SIDE/Layer 13.png" id="30_lcdw8"]
[ext_resource type="Texture2D" uid="uid://dl12u2wcp0fkb" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_SIDE/Layer 14.png" id="31_ie1nt"] [ext_resource type="Texture2D" uid="uid://dl12u2wcp0fkb" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_SIDE/Layer 14.png" id="31_ie1nt"]
[ext_resource type="Texture2D" uid="uid://bcu6ei8kbcv2w" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_SIDE/Layer 15.png" id="32_u2p8a"] [ext_resource type="Texture2D" uid="uid://bcu6ei8kbcv2w" path="res://src/enemy/enemy_types/13. gold sproingy/animations/GOLD_SPROING_SIDE/Layer 15.png" id="32_u2p8a"]
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="51_smvnd"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="60_uwoec"] [ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="60_uwoec"]
[sub_resource type="Resource" id="Resource_ivy74"] [sub_resource type="Resource" id="Resource_ivy74"]
@@ -57,12 +57,6 @@ Name = "Sproingy"
Description = "He's smaller than I expected..." Description = "He's smaller than I expected..."
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3" metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
[sub_resource type="Resource" id="Resource_8wbs7"]
script = ExtResource("3_3rk4a")
Damage = 10
ElementType = 0
metadata/_custom_type_script = "uid://ctshiyffvt4y5"
[sub_resource type="ViewportTexture" id="ViewportTexture_etb7g"] [sub_resource type="ViewportTexture" id="ViewportTexture_etb7g"]
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport") viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
@@ -607,9 +601,9 @@ transitions = ["Start", "Idle", SubResource("AnimationNodeStateMachineTransition
[node name="EnemyModelView" type="Node3D"] [node name="EnemyModelView" type="Node3D"]
script = ExtResource("1_7w22e") script = ExtResource("1_7w22e")
EnemyLoreInfo = SubResource("Resource_ivy74") EnemyLoreInfo = SubResource("Resource_ivy74")
AttackData = SubResource("Resource_8wbs7")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0) transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0)
pixel_size = 0.001 pixel_size = 0.001
billboard = 2 billboard = 2
@@ -668,3 +662,11 @@ anim_player = NodePath("../AnimationPlayer")
unique_name_in_owner = true unique_name_in_owner = true
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.29, 0, 0, 0, -1.26763e-08, 0.29, 0, -0.29, -1.26763e-08, 0.00393164, -1.31885, 0.0077811)
transparency = 0.1
cast_shadow = 0
modulate = Color(1, 1, 1, 0.591)
texture_filter = 0
texture = ExtResource("51_smvnd")

View File

@@ -988,7 +988,7 @@ bones/0/name = "spine1"
bones/0/parent = -1 bones/0/parent = -1
bones/0/rest = Transform3D(1.49012e-06, 0.00846654, -0.999964, 2.93367e-08, 0.999964, 0.00846654, 1, -4.23752e-08, 1.49012e-06, 0.000155807, -0.00105953, -2.01735) bones/0/rest = Transform3D(1.49012e-06, 0.00846654, -0.999964, 2.93367e-08, 0.999964, 0.00846654, 1, -4.23752e-08, 1.49012e-06, 0.000155807, -0.00105953, -2.01735)
bones/0/enabled = true bones/0/enabled = true
bones/0/position = Vector3(0.0996386, -0.279526, -1.53144) bones/0/position = Vector3(0.0996386, -0.294616, -1.53144)
bones/0/rotation = Quaternion(0.0256267, -0.805691, 0.0118477, 0.591662) bones/0/rotation = Quaternion(0.0256267, -0.805691, 0.0118477, 0.591662)
bones/0/scale = Vector3(1, 1, 1) bones/0/scale = Vector3(1, 1, 1)
bones/1/name = "spine0" bones/1/name = "spine0"
@@ -1017,7 +1017,7 @@ bones/4/parent = 3
bones/4/rest = Transform3D(0.901905, -0.410135, 0.135488, 0.412416, 0.910915, 0.0120912, -0.128377, 0.0449723, 0.990705, 2.5332e-07, 0.990515, -7.07805e-08) bones/4/rest = Transform3D(0.901905, -0.410135, 0.135488, 0.412416, 0.910915, 0.0120912, -0.128377, 0.0449723, 0.990705, 2.5332e-07, 0.990515, -7.07805e-08)
bones/4/enabled = true bones/4/enabled = true
bones/4/position = Vector3(2.5332e-07, 0.990515, -7.07805e-08) bones/4/position = Vector3(2.5332e-07, 0.990515, -7.07805e-08)
bones/4/rotation = Quaternion(0.00787143, 0.0673259, 0.209846, 0.975382) bones/4/rotation = Quaternion(0.00648616, 0.0665248, 0.207275, 0.975997)
bones/4/scale = Vector3(1, 1, 1) bones/4/scale = Vector3(1, 1, 1)
bones/5/name = "neck4" bones/5/name = "neck4"
bones/5/parent = 4 bones/5/parent = 4
@@ -1031,7 +1031,7 @@ bones/6/parent = 5
bones/6/rest = Transform3D(0.0598389, 0.98531, 0.15995, -0.975271, 0.0235553, 0.219755, 0.212759, -0.169144, 0.962353, 3.65078e-07, 1.40318, 0) bones/6/rest = Transform3D(0.0598389, 0.98531, 0.15995, -0.975271, 0.0235553, 0.219755, 0.212759, -0.169144, 0.962353, 3.65078e-07, 1.40318, 0)
bones/6/enabled = true bones/6/enabled = true
bones/6/position = Vector3(3.65078e-07, 1.40318, 0) bones/6/position = Vector3(3.65078e-07, 1.40318, 0)
bones/6/rotation = Quaternion(-0.343022, 0.0521047, -0.494747, 0.796772) bones/6/rotation = Quaternion(-0.341528, 0.0519651, -0.490475, 0.800058)
bones/6/scale = Vector3(1, 1, 1) bones/6/scale = Vector3(1, 1, 1)
bones/7/name = "Bone.007" bones/7/name = "Bone.007"
bones/7/parent = 6 bones/7/parent = 6
@@ -1066,7 +1066,7 @@ bones/11/parent = 1
bones/11/rest = Transform3D(0.981457, 0.0769315, -0.175568, 0.18837, -0.217537, 0.957703, 0.035485, -0.973015, -0.227995, -1.09896e-07, 3.84743, -2.10479e-07) bones/11/rest = Transform3D(0.981457, 0.0769315, -0.175568, 0.18837, -0.217537, 0.957703, 0.035485, -0.973015, -0.227995, -1.09896e-07, 3.84743, -2.10479e-07)
bones/11/enabled = true bones/11/enabled = true
bones/11/position = Vector3(-1.09896e-07, 3.84743, -2.10479e-07) bones/11/position = Vector3(-1.09896e-07, 3.84743, -2.10479e-07)
bones/11/rotation = Quaternion(-0.806075, -0.07973, -0.0234888, 0.585948) bones/11/rotation = Quaternion(-0.806907, -0.0812587, -0.0235244, 0.584589)
bones/11/scale = Vector3(1, 1, 1) bones/11/scale = Vector3(1, 1, 1)
bones/12/name = "arm2_L" bones/12/name = "arm2_L"
bones/12/parent = 11 bones/12/parent = 11
@@ -1093,7 +1093,7 @@ bones/15/name = "arm1_R"
bones/15/parent = 1 bones/15/parent = 1
bones/15/rest = Transform3D(-0.98213, 0.0512573, -0.181089, -0.187541, -0.185921, 0.964501, 0.0157694, 0.981227, 0.192212, 0.00107862, 3.8461, -0.0821097) bones/15/rest = Transform3D(-0.98213, 0.0512573, -0.181089, -0.187541, -0.185921, 0.964501, 0.0157694, 0.981227, 0.192212, 0.00107862, 3.8461, -0.0821097)
bones/15/enabled = true bones/15/enabled = true
bones/15/position = Vector3(-0.202609, 3.65099, 0.0754982) bones/15/position = Vector3(-0.199309, 3.62561, 0.0802962)
bones/15/rotation = Quaternion(-0.502686, 0.531044, 0.680821, -0.0422068) bones/15/rotation = Quaternion(-0.502686, 0.531044, 0.680821, -0.0422068)
bones/15/scale = Vector3(1, 1, 1) bones/15/scale = Vector3(1, 1, 1)
bones/16/name = "arm2_R" bones/16/name = "arm2_R"
@@ -1108,7 +1108,7 @@ bones/17/parent = 16
bones/17/rest = Transform3D(0.998789, 0.0488077, -0.00615137, -0.0491113, 0.996528, -0.0672226, 0.00284903, 0.0674433, 0.997719, -5.21541e-08, 3.04263, -1.31503e-06) bones/17/rest = Transform3D(0.998789, 0.0488077, -0.00615137, -0.0491113, 0.996528, -0.0672226, 0.00284903, 0.0674433, 0.997719, -5.21541e-08, 3.04263, -1.31503e-06)
bones/17/enabled = true bones/17/enabled = true
bones/17/position = Vector3(-5.21541e-08, 3.04263, -1.31503e-06) bones/17/position = Vector3(-5.21541e-08, 3.04263, -1.31503e-06)
bones/17/rotation = Quaternion(-0.0459497, 0.097357, 0.264908, 0.958245) bones/17/rotation = Quaternion(-0.0422391, 0.0972348, 0.266217, 0.958066)
bones/17/scale = Vector3(1, 1, 1) bones/17/scale = Vector3(1, 1, 1)
bones/18/name = "hand_R" bones/18/name = "hand_R"
bones/18/parent = 17 bones/18/parent = 17
@@ -1121,7 +1121,7 @@ bones/19/name = "hip_L"
bones/19/parent = -1 bones/19/parent = -1
bones/19/rest = Transform3D(0.138486, 0.897208, 0.419333, -0.129033, -0.403458, 0.905854, 0.981923, -0.179556, 0.059896, 0.000155807, -0.00105953, -2.01735) bones/19/rest = Transform3D(0.138486, 0.897208, 0.419333, -0.129033, -0.403458, 0.905854, 0.981923, -0.179556, 0.059896, 0.000155807, -0.00105953, -2.01735)
bones/19/enabled = true bones/19/enabled = true
bones/19/position = Vector3(0.147751, -0.282267, -1.49267) bones/19/position = Vector3(0.147751, -0.291, -1.49267)
bones/19/rotation = Quaternion(0.427793, 0.34021, 0.687061, -0.478745) bones/19/rotation = Quaternion(0.427793, 0.34021, 0.687061, -0.478745)
bones/19/scale = Vector3(1, 1, 1) bones/19/scale = Vector3(1, 1, 1)
bones/20/name = "leg1_L" bones/20/name = "leg1_L"
@@ -1129,14 +1129,14 @@ bones/20/parent = 19
bones/20/rest = Transform3D(0.945603, 0.113405, 0.304916, -0.324072, 0.410457, 0.852351, -0.0284943, -0.9048, 0.424881, 2.08616e-07, 2.00996, -7.1153e-07) bones/20/rest = Transform3D(0.945603, 0.113405, 0.304916, -0.324072, 0.410457, 0.852351, -0.0284943, -0.9048, 0.424881, 2.08616e-07, 2.00996, -7.1153e-07)
bones/20/enabled = true bones/20/enabled = true
bones/20/position = Vector3(2.08616e-07, 2.00996, -7.1153e-07) bones/20/position = Vector3(2.08616e-07, 2.00996, -7.1153e-07)
bones/20/rotation = Quaternion(-0.437808, -0.325257, -0.369348, 0.752405) bones/20/rotation = Quaternion(-0.437352, -0.325827, -0.370051, 0.752079)
bones/20/scale = Vector3(1, 1, 1) bones/20/scale = Vector3(1, 1, 1)
bones/21/name = "leg2_L" bones/21/name = "leg2_L"
bones/21/parent = 20 bones/21/parent = 20
bones/21/rest = Transform3D(0.990336, -0.138679, 0.00180777, 0.138628, 0.990193, 0.0173138, -0.00419111, -0.0168959, 0.999848, 5.96046e-08, 5.85994, -5.23403e-07) bones/21/rest = Transform3D(0.990336, -0.138679, 0.00180777, 0.138628, 0.990193, 0.0173138, -0.00419111, -0.0168959, 0.999848, 5.96046e-08, 5.85994, -5.23403e-07)
bones/21/enabled = true bones/21/enabled = true
bones/21/position = Vector3(5.96046e-08, 5.85994, -5.23403e-07) bones/21/position = Vector3(5.96046e-08, 5.85994, -5.23403e-07)
bones/21/rotation = Quaternion(-0.0475168, 0.00188995, 0.38009, 0.923726) bones/21/rotation = Quaternion(-0.0476923, 0.00188875, 0.381494, 0.923138)
bones/21/scale = Vector3(1, 1, 1) bones/21/scale = Vector3(1, 1, 1)
bones/22/name = "foot1_L" bones/22/name = "foot1_L"
bones/22/parent = 21 bones/22/parent = 21
@@ -1170,7 +1170,7 @@ bones/26/name = "hip_R"
bones/26/parent = -1 bones/26/parent = -1
bones/26/rest = Transform3D(0.138486, -0.897208, -0.419333, 0.129033, -0.403458, 0.905854, -0.981923, -0.179556, 0.059896, -0.000155807, -0.00105953, -2.01735) bones/26/rest = Transform3D(0.138486, -0.897208, -0.419333, 0.129033, -0.403458, 0.905854, -0.981923, -0.179556, 0.059896, -0.000155807, -0.00105953, -2.01735)
bones/26/enabled = true bones/26/enabled = true
bones/26/position = Vector3(0.0289172, -0.298136, -1.59603) bones/26/position = Vector3(0.0289172, -0.303958, -1.59603)
bones/26/rotation = Quaternion(0.695067, -0.09936, -0.377924, -0.603475) bones/26/rotation = Quaternion(0.695067, -0.09936, -0.377924, -0.603475)
bones/26/scale = Vector3(1, 1, 1) bones/26/scale = Vector3(1, 1, 1)
bones/27/name = "leg1_R" bones/27/name = "leg1_R"
@@ -1178,14 +1178,14 @@ bones/27/parent = 26
bones/27/rest = Transform3D(0.945603, -0.113405, -0.304916, 0.324072, 0.410457, 0.852351, 0.0284943, -0.9048, 0.424881, -9.54606e-09, 2.00996, -3.52971e-07) bones/27/rest = Transform3D(0.945603, -0.113405, -0.304916, 0.324072, 0.410457, 0.852351, 0.0284943, -0.9048, 0.424881, -9.54606e-09, 2.00996, -3.52971e-07)
bones/27/enabled = true bones/27/enabled = true
bones/27/position = Vector3(-9.54606e-09, 2.00996, -3.52971e-07) bones/27/position = Vector3(-9.54606e-09, 2.00996, -3.52971e-07)
bones/27/rotation = Quaternion(-0.317636, 0.174004, 0.183885, 0.913793) bones/27/rotation = Quaternion(-0.316952, 0.174488, 0.183941, 0.913926)
bones/27/scale = Vector3(1, 1, 1) bones/27/scale = Vector3(1, 1, 1)
bones/28/name = "leg2_R" bones/28/name = "leg2_R"
bones/28/parent = 27 bones/28/parent = 27
bones/28/rest = Transform3D(0.990336, 0.138679, -0.00180777, -0.138628, 0.990193, 0.0173138, 0.00419111, -0.0168959, 0.999848, 4.51691e-08, 5.85994, -3.72529e-09) bones/28/rest = Transform3D(0.990336, 0.138679, -0.00180777, -0.138628, 0.990193, 0.0173138, 0.00419111, -0.0168959, 0.999848, 4.51691e-08, 5.85994, -3.72529e-09)
bones/28/enabled = true bones/28/enabled = true
bones/28/position = Vector3(4.51691e-08, 5.85994, -3.72529e-09) bones/28/position = Vector3(4.51691e-08, 5.85994, -3.72529e-09)
bones/28/rotation = Quaternion(-0.268021, 0.0202226, -0.17488, 0.947192) bones/28/rotation = Quaternion(-0.269003, 0.0202141, -0.17552, 0.946795)
bones/28/scale = Vector3(1, 1, 1) bones/28/scale = Vector3(1, 1, 1)
bones/29/name = "foot1_R" bones/29/name = "foot1_R"
bones/29/parent = 28 bones/29/parent = 28
@@ -1222,12 +1222,12 @@ mesh = SubResource("ArrayMesh_6e63x")
skin = SubResource("Skin_yvw71") skin = SubResource("Skin_yvw71")
[node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D"] [node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D"]
transform = Transform3D(-0.370165, -0.13327, -0.919357, -0.258559, -0.935769, 0.239755, -0.892258, 0.326457, 0.311931, -2.00356, 8.78487, 6.14065) transform = Transform3D(-0.370165, -0.13327, -0.919357, -0.263026, -0.934123, 0.241313, -0.890952, 0.33114, 0.310726, -2.00357, 8.77889, 6.15984)
bone_name = "TOP OF SKULL" bone_name = "TOP OF SKULL"
bone_idx = 8 bone_idx = 8
[node name="BoneAttachment3D2" type="BoneAttachment3D" parent="Armature/Skeleton3D"] [node name="BoneAttachment3D2" type="BoneAttachment3D" parent="Armature/Skeleton3D"]
transform = Transform3D(0.960238, 0.142738, 0.239935, -0.230152, -0.0817476, 0.969715, 0.158029, -0.986379, -0.0456457, -2.41576, 1.74228, -8.89334) transform = Transform3D(0.960238, 0.142738, 0.239935, -0.23139, -0.073971, 0.970045, 0.15621, -0.986993, -0.0380017, -2.41575, 1.72785, -8.91814)
bone_name = "hand_R" bone_name = "hand_R"
bone_idx = 18 bone_idx = 18

View File

@@ -1,37 +0,0 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dqy21hc81trgg"
path="res://.godot/imported/OX FACE exploding.glb-720cbe989c703d3ef4275c053e0a33bc.scn"
[deps]
source_file="res://src/enemy/enemy_types/15. ox_face/Death Animation/OX FACE exploding.glb"
dest_files=["res://.godot/imported/OX FACE exploding.glb-720cbe989c703d3ef4275c053e0a33bc.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

View File

@@ -1,37 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://denk7ylhfmh71"
path="res://.godot/imported/OX FACE exploding_Metal054C_1K-JPG_Displacement.jpg-7c27b77c6fa7b2ccd407918a129a5f60.ctex"
metadata={
"vram_texture": false
}
generator_parameters={
"md5": "ebbb46c4f552a8b17e6801dc6b95714a"
}
[deps]
source_file="res://src/enemy/enemy_types/15. ox_face/Death Animation/OX FACE exploding_Metal054C_1K-JPG_Displacement.jpg"
dest_files=["res://.godot/imported/OX FACE exploding_Metal054C_1K-JPG_Displacement.jpg-7c27b77c6fa7b2ccd407918a129a5f60.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=1
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=1
roughness/src_normal="res://src/enemy/enemy_types/15. ox_face/Death Animation/OX FACE exploding_Metal054C_1K-JPG_Displacement.jpg"
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

View File

@@ -206,7 +206,7 @@ bones/0/name = "spine1"
bones/0/parent = -1 bones/0/parent = -1
bones/0/rest = Transform3D(1.49012e-06, 0.00846654, -0.999964, 2.93367e-08, 0.999964, 0.00846654, 1, -4.23752e-08, 1.49012e-06, 0.000155807, -0.00105953, -2.01735) bones/0/rest = Transform3D(1.49012e-06, 0.00846654, -0.999964, 2.93367e-08, 0.999964, 0.00846654, 1, -4.23752e-08, 1.49012e-06, 0.000155807, -0.00105953, -2.01735)
bones/0/enabled = true bones/0/enabled = true
bones/0/position = Vector3(-0.260276, -1.05389, -1.96769) bones/0/position = Vector3(-0.260019, -1.02446, -1.96967)
bones/0/rotation = Quaternion(0.0915277, -0.692111, -0.0341586, 0.715149) bones/0/rotation = Quaternion(0.0915277, -0.692111, -0.0341586, 0.715149)
bones/0/scale = Vector3(1, 1, 1) bones/0/scale = Vector3(1, 1, 1)
bones/1/name = "spine0" bones/1/name = "spine0"
@@ -249,7 +249,7 @@ bones/6/parent = 5
bones/6/rest = Transform3D(0.0598389, 0.98531, 0.15995, -0.975271, 0.0235553, 0.219755, 0.212759, -0.169144, 0.962353, 3.65078e-07, 1.40318, 0) bones/6/rest = Transform3D(0.0598389, 0.98531, 0.15995, -0.975271, 0.0235553, 0.219755, 0.212759, -0.169144, 0.962353, 3.65078e-07, 1.40318, 0)
bones/6/enabled = true bones/6/enabled = true
bones/6/position = Vector3(3.65078e-07, 1.40318, 0) bones/6/position = Vector3(3.65078e-07, 1.40318, 0)
bones/6/rotation = Quaternion(-0.0520092, -0.295864, -0.744301, 0.596469) bones/6/rotation = Quaternion(-0.0605755, -0.299004, -0.744536, 0.593796)
bones/6/scale = Vector3(1, 1, 1) bones/6/scale = Vector3(1, 1, 1)
bones/7/name = "Bone.007" bones/7/name = "Bone.007"
bones/7/parent = 6 bones/7/parent = 6
@@ -284,7 +284,7 @@ bones/11/parent = 1
bones/11/rest = Transform3D(0.981457, 0.0769315, -0.175568, 0.18837, -0.217537, 0.957703, 0.035485, -0.973015, -0.227995, -1.09896e-07, 3.84743, -2.10479e-07) bones/11/rest = Transform3D(0.981457, 0.0769315, -0.175568, 0.18837, -0.217537, 0.957703, 0.035485, -0.973015, -0.227995, -1.09896e-07, 3.84743, -2.10479e-07)
bones/11/enabled = true bones/11/enabled = true
bones/11/position = Vector3(-1.09896e-07, 3.84743, -2.10479e-07) bones/11/position = Vector3(-1.09896e-07, 3.84743, -2.10479e-07)
bones/11/rotation = Quaternion(-0.779476, -0.0570599, 0.0822994, 0.618375) bones/11/rotation = Quaternion(-0.781165, -0.058524, 0.0789656, 0.616539)
bones/11/scale = Vector3(1, 0.999999, 1) bones/11/scale = Vector3(1, 0.999999, 1)
bones/12/name = "arm2_L" bones/12/name = "arm2_L"
bones/12/parent = 11 bones/12/parent = 11
@@ -312,7 +312,7 @@ bones/15/parent = 1
bones/15/rest = Transform3D(-0.98213, 0.0512573, -0.181089, -0.187541, -0.185921, 0.964501, 0.0157694, 0.981227, 0.192212, 0.00107862, 3.8461, -0.0821097) bones/15/rest = Transform3D(-0.98213, 0.0512573, -0.181089, -0.187541, -0.185921, 0.964501, 0.0157694, 0.981227, 0.192212, 0.00107862, 3.8461, -0.0821097)
bones/15/enabled = true bones/15/enabled = true
bones/15/position = Vector3(0.00107886, 3.8461, -0.0821095) bones/15/position = Vector3(0.00107886, 3.8461, -0.0821095)
bones/15/rotation = Quaternion(-0.21553, 0.745444, 0.613412, -0.146924) bones/15/rotation = Quaternion(-0.21398, 0.743041, 0.616062, -0.150233)
bones/15/scale = Vector3(1, 1, 1) bones/15/scale = Vector3(1, 1, 1)
bones/16/name = "arm2_R" bones/16/name = "arm2_R"
bones/16/parent = 15 bones/16/parent = 15
@@ -339,22 +339,22 @@ bones/19/name = "hip_L"
bones/19/parent = -1 bones/19/parent = -1
bones/19/rest = Transform3D(0.138486, 0.897208, 0.419333, -0.129033, -0.403458, 0.905854, 0.981923, -0.179556, 0.059896, 0.000155807, -0.00105953, -2.01735) bones/19/rest = Transform3D(0.138486, 0.897208, 0.419333, -0.129033, -0.403458, 0.905854, 0.981923, -0.179556, 0.059896, 0.000155807, -0.00105953, -2.01735)
bones/19/enabled = true bones/19/enabled = true
bones/19/position = Vector3(-0.381562, -1.20042, -1.71619) bones/19/position = Vector3(-0.357863, -1.178, -1.79428)
bones/19/rotation = Quaternion(0.627767, 0.292688, 0.544975, -0.472487) bones/19/rotation = Quaternion(0.622974, 0.298676, 0.553029, -0.465678)
bones/19/scale = Vector3(1, 1, 1) bones/19/scale = Vector3(1, 1, 1)
bones/20/name = "leg1_L" bones/20/name = "leg1_L"
bones/20/parent = 19 bones/20/parent = 19
bones/20/rest = Transform3D(0.945603, 0.113405, 0.304916, -0.324072, 0.410457, 0.852351, -0.0284943, -0.9048, 0.424881, 2.08616e-07, 2.00996, -7.1153e-07) bones/20/rest = Transform3D(0.945603, 0.113405, 0.304916, -0.324072, 0.410457, 0.852351, -0.0284943, -0.9048, 0.424881, 2.08616e-07, 2.00996, -7.1153e-07)
bones/20/enabled = true bones/20/enabled = true
bones/20/position = Vector3(2.08616e-07, 2.00996, -7.1153e-07) bones/20/position = Vector3(2.08616e-07, 2.00996, -7.1153e-07)
bones/20/rotation = Quaternion(-0.327925, -0.422597, -0.300857, 0.789533) bones/20/rotation = Quaternion(-0.322869, -0.42834, -0.292442, 0.791681)
bones/20/scale = Vector3(1, 0.999999, 1) bones/20/scale = Vector3(1, 0.999999, 1)
bones/21/name = "leg2_L" bones/21/name = "leg2_L"
bones/21/parent = 20 bones/21/parent = 20
bones/21/rest = Transform3D(0.990336, -0.138679, 0.00180777, 0.138628, 0.990193, 0.0173138, -0.00419111, -0.0168959, 0.999848, 5.96046e-08, 5.85994, -5.23403e-07) bones/21/rest = Transform3D(0.990336, -0.138679, 0.00180777, 0.138628, 0.990193, 0.0173138, -0.00419111, -0.0168959, 0.999848, 5.96046e-08, 5.85994, -5.23403e-07)
bones/21/enabled = true bones/21/enabled = true
bones/21/position = Vector3(5.96046e-08, 5.85994, -5.23403e-07) bones/21/position = Vector3(5.96046e-08, 5.85994, -5.23403e-07)
bones/21/rotation = Quaternion(-0.0605445, 0.00129802, 0.49011, 0.869554) bones/21/rotation = Quaternion(-0.0604396, 0.00129875, 0.489262, 0.870039)
bones/21/scale = Vector3(1, 1, 1) bones/21/scale = Vector3(1, 1, 1)
bones/22/name = "foot1_L" bones/22/name = "foot1_L"
bones/22/parent = 21 bones/22/parent = 21
@@ -388,7 +388,7 @@ bones/26/name = "hip_R"
bones/26/parent = -1 bones/26/parent = -1
bones/26/rest = Transform3D(0.138486, -0.897208, -0.419333, 0.129033, -0.403458, 0.905854, -0.981923, -0.179556, 0.059896, -0.000155807, -0.00105953, -2.01735) bones/26/rest = Transform3D(0.138486, -0.897208, -0.419333, 0.129033, -0.403458, 0.905854, -0.981923, -0.179556, 0.059896, -0.000155807, -0.00105953, -2.01735)
bones/26/enabled = true bones/26/enabled = true
bones/26/position = Vector3(-0.0218232, -1.11395, -2.01917) bones/26/position = Vector3(-0.0914828, -1.11395, -2.0187)
bones/26/rotation = Quaternion(0.608697, -0.3155, -0.575514, -0.445793) bones/26/rotation = Quaternion(0.608697, -0.3155, -0.575514, -0.445793)
bones/26/scale = Vector3(1, 1, 1) bones/26/scale = Vector3(1, 1, 1)
bones/27/name = "leg1_R" bones/27/name = "leg1_R"
@@ -396,14 +396,14 @@ bones/27/parent = 26
bones/27/rest = Transform3D(0.945603, -0.113405, -0.304916, 0.324072, 0.410457, 0.852351, 0.0284943, -0.9048, 0.424881, -9.54606e-09, 2.00996, -3.52971e-07) bones/27/rest = Transform3D(0.945603, -0.113405, -0.304916, 0.324072, 0.410457, 0.852351, 0.0284943, -0.9048, 0.424881, -9.54606e-09, 2.00996, -3.52971e-07)
bones/27/enabled = true bones/27/enabled = true
bones/27/position = Vector3(-9.54606e-09, 2.00996, -3.52971e-07) bones/27/position = Vector3(-9.54606e-09, 2.00996, -3.52971e-07)
bones/27/rotation = Quaternion(-0.201704, 0.42497, 0.137533, 0.871666) bones/27/rotation = Quaternion(-0.203553, 0.423945, 0.138932, 0.871513)
bones/27/scale = Vector3(1, 0.999999, 1) bones/27/scale = Vector3(1, 0.999999, 1)
bones/28/name = "leg2_R" bones/28/name = "leg2_R"
bones/28/parent = 27 bones/28/parent = 27
bones/28/rest = Transform3D(0.990336, 0.138679, -0.00180777, -0.138628, 0.990193, 0.0173138, 0.00419111, -0.0168959, 0.999848, 4.51691e-08, 5.85994, -3.72529e-09) bones/28/rest = Transform3D(0.990336, 0.138679, -0.00180777, -0.138628, 0.990193, 0.0173138, 0.00419111, -0.0168959, 0.999848, 4.51691e-08, 5.85994, -3.72529e-09)
bones/28/enabled = true bones/28/enabled = true
bones/28/position = Vector3(4.51691e-08, 5.85994, -3.72529e-09) bones/28/position = Vector3(4.51691e-08, 5.85994, -3.72529e-09)
bones/28/rotation = Quaternion(-0.0627068, -0.00116495, -0.500645, 0.863378) bones/28/rotation = Quaternion(-0.0631419, -0.00116218, -0.50412, 0.861322)
bones/28/scale = Vector3(1, 1, 1) bones/28/scale = Vector3(1, 1, 1)
bones/29/name = "foot1_R" bones/29/name = "foot1_R"
bones/29/parent = 28 bones/29/parent = 28
@@ -435,7 +435,7 @@ bones/32/rotation = Quaternion(0.456756, 0.539878, -0.539587, -0.456893)
bones/32/scale = Vector3(1, 1, 1) bones/32/scale = Vector3(1, 1, 1)
[node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D"] [node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D"]
transform = Transform3D(-0.271443, -0.0440478, -0.961446, -0.333033, -0.932944, 0.136766, -0.902999, 0.357318, 0.238571, -1.68503, 8.20202, 4.95649) transform = Transform3D(-0.281277, -0.0594146, -0.957786, -0.331575, -0.930592, 0.155103, -0.900522, 0.361205, 0.242053, -1.67626, 8.23547, 4.95359)
bone_name = "TOP OF SKULL" bone_name = "TOP OF SKULL"
bone_idx = 8 bone_idx = 8
@@ -458,7 +458,7 @@ mesh = SubResource("ArrayMesh_5ew54")
skin = SubResource("Skin_e330f") skin = SubResource("Skin_e330f")
[node name="BoneAttachment3D2" type="BoneAttachment3D" parent="Armature/Skeleton3D"] [node name="BoneAttachment3D2" type="BoneAttachment3D" parent="Armature/Skeleton3D"]
transform = Transform3D(-0.0477638, -0.00543313, -0.998843, -0.0797991, -0.996767, 0.00923727, -0.995664, 0.080149, 0.0471753, -6.32381, -1.21705, -0.163401) transform = Transform3D(-0.046878, 0.0046197, -0.998889, -0.0819302, -0.996637, -0.000764847, -0.995533, 0.0818041, 0.0470983, -6.27641, -1.24577, -0.158031)
bone_name = "hand_R" bone_name = "hand_R"
bone_idx = 18 bone_idx = 18

View File

@@ -25,14 +25,14 @@ public partial class DemonWallArm : EnemyModelView
public new void OnReady() public new void OnReady()
{ {
Hitbox.AreaEntered += Hitbox_AreaEntered; Hitbox.AreaEntered += Hitbox_AreaEntered;
base.OnReady(); base.OnReady();
} }
private void Hitbox_AreaEntered(Area3D area) private void Hitbox_AreaEntered(Area3D area)
{ {
var target = area.GetOwner(); var target = area.GetOwner();
if (target is IPlayer player) if (target is IPlayer player)
base.OnPlayerHit(new AttackEventArgs(AttackData)); base.OnPlayerHit(new AttackEventArgs(AttackData));
} }
} }

View File

@@ -340,47 +340,41 @@ script = ExtResource("1_r5yku")
[node name="LeftArms" type="Node3D" parent="."] [node name="LeftArms" type="Node3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25727, -7.67419, 0)
[node name="Arm1" parent="LeftArms" instance=ExtResource("1_ell80")] [node name="Arm1" parent="LeftArms" instance=ExtResource("1_ell80")]
unique_name_in_owner = true unique_name_in_owner = true
AttackData = null
[node name="Arm2" parent="LeftArms" instance=ExtResource("2_kblru")] [node name="Arm2" parent="LeftArms" instance=ExtResource("2_kblru")]
unique_name_in_owner = true unique_name_in_owner = true
AttackData = null
[node name="Arm3" parent="LeftArms" instance=ExtResource("3_nqxqr")] [node name="Arm3" parent="LeftArms" instance=ExtResource("3_nqxqr")]
unique_name_in_owner = true unique_name_in_owner = true
AttackData = null
[node name="Arm4" parent="LeftArms" instance=ExtResource("4_r5yku")] [node name="Arm4" parent="LeftArms" instance=ExtResource("4_r5yku")]
unique_name_in_owner = true unique_name_in_owner = true
AttackData = null
[node name="Arm5" parent="LeftArms" instance=ExtResource("5_5oa7x")] [node name="Arm5" parent="LeftArms" instance=ExtResource("5_5oa7x")]
unique_name_in_owner = true unique_name_in_owner = true
AttackData = null
[node name="RightArms" type="Node3D" parent="."] [node name="RightArms" type="Node3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25727, -7.67419, 0)
[node name="Arm6" parent="RightArms" instance=ExtResource("6_h1yna")] [node name="Arm6" parent="RightArms" instance=ExtResource("6_h1yna")]
unique_name_in_owner = true unique_name_in_owner = true
AttackData = null
[node name="Arm7" parent="RightArms" instance=ExtResource("7_6s6sq")] [node name="Arm7" parent="RightArms" instance=ExtResource("7_6s6sq")]
unique_name_in_owner = true unique_name_in_owner = true
AttackData = null
[node name="Arm8" parent="RightArms" instance=ExtResource("8_e82oe")] [node name="Arm8" parent="RightArms" instance=ExtResource("8_e82oe")]
unique_name_in_owner = true unique_name_in_owner = true
AttackData = null
[node name="Arm9" parent="RightArms" instance=ExtResource("9_c826n")] [node name="Arm9" parent="RightArms" instance=ExtResource("9_c826n")]
unique_name_in_owner = true unique_name_in_owner = true
AttackData = null
[node name="DEMON WALL BASE + PIPES" type="Node3D" parent="."] [node name="DEMON WALL BASE + PIPES" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25727, -7.67419, 0)
[node name="SMALL FACES" type="MeshInstance3D" parent="DEMON WALL BASE + PIPES"] [node name="SMALL FACES" type="MeshInstance3D" parent="DEMON WALL BASE + PIPES"]
mesh = SubResource("ArrayMesh_xb46g") mesh = SubResource("ArrayMesh_xb46g")
@@ -432,10 +426,11 @@ skeleton = NodePath("")
[node name="Rotation" type="Node3D" parent="."] [node name="Rotation" type="Node3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.11577, 9.46987, 4.38761) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.141497, 1.79568, 4.38761)
[node name="OpposingWall" type="AnimatableBody3D" parent="."] [node name="OpposingWall" type="AnimatableBody3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25727, -7.67419, 0)
visible = false visible = false
collision_layer = 2 collision_layer = 2
collision_mask = 2 collision_mask = 2
@@ -459,5 +454,6 @@ anim_player = NodePath("../AnimationPlayer")
[node name="WalkSFX" type="AudioStreamPlayer3D" parent="."] [node name="WalkSFX" type="AudioStreamPlayer3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25727, -7.67419, 0)
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"

View File

@@ -1996,6 +1996,7 @@ states/Idle/position = Vector2(481, 100)
"states/Secondary Attack/node" = ExtResource("336_oklrx") "states/Secondary Attack/node" = ExtResource("336_oklrx")
"states/Secondary Attack/position" = Vector2(601, 252) "states/Secondary Attack/position" = Vector2(601, 252)
transitions = ["Start", "Idle", SubResource("AnimationNodeStateMachineTransition_wr22k"), "Idle", "Primary Attack", SubResource("AnimationNodeStateMachineTransition_s1m3f"), "Idle", "Secondary Attack", SubResource("AnimationNodeStateMachineTransition_chae2"), "Primary Attack", "Idle", SubResource("AnimationNodeStateMachineTransition_rh3bi"), "Secondary Attack", "Idle", SubResource("AnimationNodeStateMachineTransition_ar8mh")] transitions = ["Start", "Idle", SubResource("AnimationNodeStateMachineTransition_wr22k"), "Idle", "Primary Attack", SubResource("AnimationNodeStateMachineTransition_s1m3f"), "Idle", "Secondary Attack", SubResource("AnimationNodeStateMachineTransition_chae2"), "Primary Attack", "Idle", SubResource("AnimationNodeStateMachineTransition_rh3bi"), "Secondary Attack", "Idle", SubResource("AnimationNodeStateMachineTransition_ar8mh")]
graph_offset = Vector2(0, 25.9753)
[sub_resource type="Animation" id="Animation_lsphj"] [sub_resource type="Animation" id="Animation_lsphj"]
length = 0.001 length = 0.001
@@ -2065,7 +2066,7 @@ script = ExtResource("1_vf7er")
EnemyLoreInfo = ExtResource("2_ejhrk") EnemyLoreInfo = ExtResource("2_ejhrk")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, -1.11516, 0) unique_name_in_owner = true
billboard = 2 billboard = 2
texture_filter = 0 texture_filter = 0
render_priority = 100 render_priority = 100
@@ -2080,21 +2081,18 @@ offset_bottom = 40.0
disable_3d = true disable_3d = true
transparent_bg = true transparent_bg = true
handle_input_locally = false handle_input_locally = false
size = Vector2i(1000, 1000)
render_target_update_mode = 4 render_target_update_mode = 4
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"] [node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
unique_name_in_owner = true unique_name_in_owner = true
texture_filter = 1 texture_filter = 1
position = Vector2(507, 440)
scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_6drt6") sprite_frames = SubResource("SpriteFrames_6drt6")
animation = &"idle_front" animation = &"idle_front"
offset = Vector2(250, 150)
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"] [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
position = Vector2(508, 440)
scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_d844v") sprite_frames = SubResource("SpriteFrames_d844v")
offset = Vector2(250, 150)
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -38,9 +38,9 @@ public partial class Game : Node3D, IGame
[Node] private InGameUI InGameUI { get; set; } = default!; [Node] private InGameUI InGameUI { get; set; } = default!;
[Node] private IFloorClearMenu FloorClearMenu { get; set; } = default!; [Node] private IFloorClearMenu LoadNextLevel { get; set; } = default!;
[Node] private DeathMenu DeathMenu { get; set; } = default!; [Node] private IGameOverMenu GameOverMenu { get; set; } = default!;
[Node] private IPauseMenu PauseMenu { get; set; } = default!; [Node] private IPauseMenu PauseMenu { get; set; } = default!;
#endregion #endregion
@@ -56,6 +56,8 @@ public partial class Game : Node3D, IGame
[Signal] [Signal]
public delegate void SaveFileLoadedEventHandler(); public delegate void SaveFileLoadedEventHandler();
public event Action GameExitRequested;
#endregion #endregion
public RescuedItemDatabase RescuedItems { get; set; } = default!; public RescuedItemDatabase RescuedItems { get; set; } = default!;
@@ -71,6 +73,8 @@ public partial class Game : Node3D, IGame
private IPlayer _player; private IPlayer _player;
private IMap _map; private IMap _map;
[Signal] private delegate void OnLoadLevelRequestEventHandler();
public Game() public Game()
{ {
_container = new SimpleInjector.Container(); _container = new SimpleInjector.Container();
@@ -156,17 +160,23 @@ public partial class Game : Node3D, IGame
InGameUI.UseTeleportPrompt.TeleportToNextFloor += UseTeleportPrompt_TeleportToNextFloor; InGameUI.UseTeleportPrompt.TeleportToNextFloor += UseTeleportPrompt_TeleportToNextFloor;
InGameUI.UseTeleportPrompt.CloseTeleportPrompt += UseTeleportPrompt_CloseTeleportPrompt; InGameUI.UseTeleportPrompt.CloseTeleportPrompt += UseTeleportPrompt_CloseTeleportPrompt;
FloorClearMenu.GoToNextFloor += FloorClearMenu_GoToNextFloor; LoadNextLevel.GoToNextFloor += FloorClearMenu_GoToNextFloor;
FloorClearMenu.Exit += FloorClearMenu_Exit; LoadNextLevel.Exit += FloorClearMenu_Exit;
FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted; LoadNextLevel.TransitionCompleted += FloorClearMenu_TransitionCompleted;
OnLoadLevelRequest += LoadLevel;
GameRepo.RestorativePickedUp += GameEventDepot_RestorativePickedUp; GameRepo.RestorativePickedUp += GameEventDepot_RestorativePickedUp;
_player.Inventory.BroadcastMessage += BroadcastMessage; _player.Inventory.BroadcastMessage += BroadcastMessage;
_map.FloorLoaded += OnFloorLoadFinished;
_player.PlayerDied += GameOver; _player.PlayerDied += GameOver;
DeathMenu.NewGame += OnNewGame; GameOverMenu.NewGame += OnNewGame;
DeathMenu.QuitGame += OnQuit; GameOverMenu.QuitGame += OnQuit;
PauseMenu.ExitGamePressed += OnQuit;
GameRepo.IsPaused.Sync += IsPaused_Sync; GameRepo.IsPaused.Sync += IsPaused_Sync;
InGameUI.PlayerInfoUI.Activate(); InGameUI.PlayerInfoUI.Activate();
@@ -246,6 +256,12 @@ public partial class Game : Node3D, IGame
{ {
if (@event.IsActionPressed(GameInputs.Debug)) if (@event.IsActionPressed(GameInputs.Debug))
GameState.Input(new GameState.Input.DebugButtonPressed()); GameState.Input(new GameState.Input.DebugButtonPressed());
if (@event.IsActionPressed(GameInputs.Pause))
GameState.Input(new GameState.Input.PauseButtonPressed());
if (Input.IsActionJustPressed(GameInputs.Inventory))
GameState.Input(new GameState.Input.InventoryButtonPressed());
if (Input.IsActionJustPressed(GameInputs.Interact))
GameState.Input(new GameState.Input.InteractButtonPressed());
} }
private void HandleGameLogic() private void HandleGameLogic()
@@ -274,12 +290,13 @@ public partial class Game : Node3D, IGame
}) })
.Handle((in GameState.Output.OpenInventoryMenu _) => .Handle((in GameState.Output.OpenInventoryMenu _) =>
{ {
//InGameUI.InventoryMenu.RefreshInventoryScreen(); GameRepo.Pause();
InGameUI.InventoryMenu.Show(); InGameUI.InventoryMenu.Show();
InGameUI.InventoryMenu.SetProcessInput(true); InGameUI.InventoryMenu.SetProcessInput(true);
}) })
.Handle((in GameState.Output.CloseInventoryMenu _) => .Handle((in GameState.Output.CloseInventoryMenu _) =>
{ {
GameRepo.Resume();
InGameUI.InventoryMenu.Hide(); InGameUI.InventoryMenu.Hide();
InGameUI.InventoryMenu.SetProcessInput(false); InGameUI.InventoryMenu.SetProcessInput(false);
}) })
@@ -303,13 +320,13 @@ public partial class Game : Node3D, IGame
.Handle((in GameState.Output.OpenFloorExitScreen _) => .Handle((in GameState.Output.OpenFloorExitScreen _) =>
{ {
InGameUI.UseTeleportPrompt.FadeOut(); InGameUI.UseTeleportPrompt.FadeOut();
FloorClearMenu.Show(); LoadNextLevel.Show();
FloorClearMenu.FadeIn(); LoadNextLevel.FadeIn();
}) })
.Handle((in GameState.Output.LoadNextFloor _) => .Handle((in GameState.Output.LoadNextFloor _) =>
{ {
FloorClearMenu.FadeOut(); LoadNextLevel.FadeOut();
Task.Run(() => _map.LoadFloor()); EmitSignal(SignalName.OnLoadLevelRequest);
Task.Run(() => Save()); Task.Run(() => Save());
if (_player.EquipmentComponent.EquippedWeapon.Value.ItemTag == ItemTag.BreaksOnChange) if (_player.EquipmentComponent.EquippedWeapon.Value.ItemTag == ItemTag.BreaksOnChange)
{ {
@@ -329,12 +346,16 @@ public partial class Game : Node3D, IGame
_player.Unequip(itemToDestroy); _player.Unequip(itemToDestroy);
_player.Inventory.Remove(itemToDestroy); _player.Inventory.Remove(itemToDestroy);
} }
FloorClearMenu.FadeOut(); LoadNextLevel.FadeOut();
})
.Handle((in GameState.Output.ExitGame _) =>
{
OnQuit();
}) })
.Handle((in GameState.Output.GameOver _) => .Handle((in GameState.Output.GameOver _) =>
{ {
GameRepo.Pause(); //GameRepo.Pause();
DeathMenu.FadeIn(); //DeathMenu.FadeIn();
}); });
} }
@@ -345,6 +366,8 @@ public partial class Game : Node3D, IGame
InGameUI.Hide(); InGameUI.Hide();
} }
private async void LoadLevel() => await _map.LoadFloor();
private void FloorClearMenu_GoToNextFloor() => GameState.Input(new GameState.Input.LoadNextFloor()); private void FloorClearMenu_GoToNextFloor() => GameState.Input(new GameState.Input.LoadNextFloor());
private void DropRestorative(Vector3 vector) private void DropRestorative(Vector3 vector)
@@ -402,6 +425,7 @@ public partial class Game : Node3D, IGame
private void EnactEffectItemEffects(EffectItem effectItem) private void EnactEffectItemEffects(EffectItem effectItem)
{ {
_player.PlayTestAnimation();
switch (effectItem.UsableItemTag) switch (effectItem.UsableItemTag)
{ {
case UsableItemTag.TeleportAllEnemiesToRoom: case UsableItemTag.TeleportAllEnemiesToRoom:
@@ -450,6 +474,7 @@ public partial class Game : Node3D, IGame
private void EnactThrowableItemEffects(ThrowableItem throwableItem) private void EnactThrowableItemEffects(ThrowableItem throwableItem)
{ {
_player.PlayTestAnimation();
switch (throwableItem.ThrowableItemTag) switch (throwableItem.ThrowableItemTag)
{ {
case ThrowableItemTag.DoubleExp: case ThrowableItemTag.DoubleExp:
@@ -492,22 +517,27 @@ public partial class Game : Node3D, IGame
GameRepo.Resume(); GameRepo.Resume();
} }
private void OnQuit() => GetTree().Root.QueueFree(); private void OnFloorLoadFinished()
{
LoadNextLevel.Hide();
}
private void OnQuit() => GameExitRequested?.Invoke();
public void OnExitTree() public void OnExitTree()
{ {
InGameUI.UseTeleportPrompt.TeleportToNextFloor -= UseTeleportPrompt_TeleportToNextFloor; InGameUI.UseTeleportPrompt.TeleportToNextFloor -= UseTeleportPrompt_TeleportToNextFloor;
InGameUI.UseTeleportPrompt.CloseTeleportPrompt -= UseTeleportPrompt_CloseTeleportPrompt; InGameUI.UseTeleportPrompt.CloseTeleportPrompt -= UseTeleportPrompt_CloseTeleportPrompt;
FloorClearMenu.GoToNextFloor -= FloorClearMenu_GoToNextFloor; LoadNextLevel.GoToNextFloor -= FloorClearMenu_GoToNextFloor;
FloorClearMenu.Exit -= FloorClearMenu_Exit; LoadNextLevel.Exit -= FloorClearMenu_Exit;
FloorClearMenu.TransitionCompleted -= FloorClearMenu_TransitionCompleted; LoadNextLevel.TransitionCompleted -= FloorClearMenu_TransitionCompleted;
_player.Inventory.BroadcastMessage -= BroadcastMessage; _player.Inventory.BroadcastMessage -= BroadcastMessage;
GameRepo.RestorativePickedUp -= GameEventDepot_RestorativePickedUp; GameRepo.RestorativePickedUp -= GameEventDepot_RestorativePickedUp;
DeathMenu.NewGame -= OnNewGame; GameOverMenu.NewGame -= OnNewGame;
DeathMenu.QuitGame -= OnQuit; GameOverMenu.QuitGame -= OnQuit;
GameRepo.IsPaused.Sync -= IsPaused_Sync; GameRepo.IsPaused.Sync -= IsPaused_Sync;
} }

View File

@@ -1,28 +1,17 @@
[gd_scene load_steps=9 format=3 uid="uid://33ek675mfb5n"] [gd_scene load_steps=7 format=3 uid="uid://33ek675mfb5n"]
[ext_resource type="Script" uid="uid://chftlu4proh3d" path="res://src/game/Game.cs" id="1_ytcii"] [ext_resource type="Script" uid="uid://chftlu4proh3d" path="res://src/game/Game.cs" id="1_ytcii"]
[ext_resource type="Shader" uid="uid://dmjxo4k2rx1an" path="res://src/app/App.gdshader" id="2_6ifxs"]
[ext_resource type="PackedScene" uid="uid://b1muxus5qdbeu" path="res://src/ui/in_game_ui/InGameUI.tscn" id="5_lxtnp"] [ext_resource type="PackedScene" uid="uid://b1muxus5qdbeu" path="res://src/ui/in_game_ui/InGameUI.tscn" id="5_lxtnp"]
[ext_resource type="PackedScene" uid="uid://cgwiwufvxvfs4" path="res://src/ui/load_next_level/LoadNextLevel.tscn" id="7_yw8km"]
[ext_resource type="Script" uid="uid://cbal5oeaha4nx" path="res://src/ui/pause_menu/PauseMenu.cs" id="11_5ng8c"] [ext_resource type="Script" uid="uid://cbal5oeaha4nx" path="res://src/ui/pause_menu/PauseMenu.cs" id="11_5ng8c"]
[ext_resource type="PackedScene" uid="uid://pu6gp8de3ck4" path="res://src/ui/floor_clear/FloorClearMenu.tscn" id="11_rya1n"] [ext_resource type="PackedScene" uid="uid://dbtfgrtgpr4qg" path="res://src/ui/game_over/GameOverMenu.tscn" id="11_wypid"]
[ext_resource type="PackedScene" uid="uid://dbtfgrtgpr4qg" path="res://src/ui/death_menu/DeathMenu.tscn" id="11_wypid"]
[ext_resource type="PackedScene" uid="uid://blbqgw3wosc1w" path="res://src/ui/pause_menu/PauseMenu.tscn" id="12_yev8k"] [ext_resource type="PackedScene" uid="uid://blbqgw3wosc1w" path="res://src/ui/pause_menu/PauseMenu.tscn" id="12_yev8k"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_e75a2"]
shader = ExtResource("2_6ifxs")
shader_parameter/change_color_depth = false
shader_parameter/target_color_depth = 7
shader_parameter/dithering = false
shader_parameter/scale_resolution = false
shader_parameter/target_resolution_scale = 4
shader_parameter/enable_recolor = false
[node name="Game" type="Node3D"] [node name="Game" type="Node3D"]
process_mode = 3 process_mode = 3
script = ExtResource("1_ytcii") script = ExtResource("1_ytcii")
[node name="SubViewportContainer" type="SubViewportContainer" parent="."] [node name="SubViewportContainer" type="SubViewportContainer" parent="."]
material = SubResource("ShaderMaterial_e75a2")
custom_minimum_size = Vector2(1440, 1080) custom_minimum_size = Vector2(1440, 1080)
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@@ -46,13 +35,12 @@ process_mode = 1
unique_name_in_owner = true unique_name_in_owner = true
custom_minimum_size = Vector2(1280, 720) custom_minimum_size = Vector2(1280, 720)
[node name="DeathMenu" parent="." instance=ExtResource("11_wypid")] [node name="GameOverMenu" parent="." instance=ExtResource("11_wypid")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
[node name="FloorClearMenu" parent="." instance=ExtResource("11_rya1n")] [node name="LoadNextLevel" parent="." instance=ExtResource("7_yw8km")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
[node name="PauseMenu" parent="." instance=ExtResource("12_yev8k")] [node name="PauseMenu" parent="." instance=ExtResource("12_yev8k")]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -4,6 +4,7 @@ namespace Zennysoft.Game.Ma;
using Chickensoft.AutoInject; using Chickensoft.AutoInject;
using Chickensoft.GodotNodeInterfaces; using Chickensoft.GodotNodeInterfaces;
using Chickensoft.SaveFileBuilder; using Chickensoft.SaveFileBuilder;
using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Zennysoft.Ma.Adapter; using Zennysoft.Ma.Adapter;
@@ -30,4 +31,6 @@ public interface IGame : IProvide<IGame>, IProvide<IGameRepo>, IProvide<IPlayer>
public Task Save(); public Task Save();
public QuestData QuestData { get; } public QuestData QuestData { get; }
public event Action GameExitRequested;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://25fd7vfy4em1"
path="res://.godot/imported/ATKincreaser1 - Copy.png-81f926f8a20d2ded005191e97e06da7b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/items/Icons/ATKincreaser1 - Copy.png"
dest_files=["res://.godot/imported/ATKincreaser1 - Copy.png-81f926f8a20d2ded005191e97e06da7b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://smvlfvl5mepf"
path="res://.godot/imported/ATKincreaser1.png-262dc628e5b8f814dbe88a024c8a172f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/items/Icons/ATKincreaser1.png"
dest_files=["res://.godot/imported/ATKincreaser1.png-262dc628e5b8f814dbe88a024c8a172f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bfivackn5p5ww"
path="res://.godot/imported/AirGeo - Copy.png-15b81ee4c274723fb9f3a07faf8ae600.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/items/Icons/AirGeo - Copy.png"
dest_files=["res://.godot/imported/AirGeo - Copy.png-15b81ee4c274723fb9f3a07faf8ae600.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d07kcaqe682l1"
path="res://.godot/imported/AirGeo.png-ca6078f5bcfba245d2df28cba83b675c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/items/Icons/AirGeo.png"
dest_files=["res://.godot/imported/AirGeo.png-ca6078f5bcfba245d2df28cba83b675c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bh30ncncy0cwi"
path="res://.godot/imported/DEFincreaser1 - Copy.png-e068db996d5d392343dbd4f99b681d94.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/items/Icons/DEFincreaser1 - Copy.png"
dest_files=["res://.godot/imported/DEFincreaser1 - Copy.png-e068db996d5d392343dbd4f99b681d94.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://4c8kwg7vn3p5"
path="res://.godot/imported/DEFincreaser1.png-f204db321cdb860cc3560f85da5ed710.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/items/Icons/DEFincreaser1.png"
dest_files=["res://.godot/imported/DEFincreaser1.png-f204db321cdb860cc3560f85da5ed710.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://1w8rtmyppinv"
path="res://.godot/imported/Geomantic Reactor1 - Copy.png-83821b5dd30650273c697837a5b4f54f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/items/Icons/Geomantic Reactor1 - Copy.png"
dest_files=["res://.godot/imported/Geomantic Reactor1 - Copy.png-83821b5dd30650273c697837a5b4f54f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cviym8iyjjjbq"
path="res://.godot/imported/WATER - Copy.png-c9968e567f871e7260abfba7b83e73e7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/items/Icons/WATER - Copy.png"
dest_files=["res://.godot/imported/WATER - Copy.png-c9968e567f871e7260abfba7b83e73e7.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhl6pwp71y8qm"
path="res://.godot/imported/WATER.png-081a033bb13bf2199df538c6f97ad417.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/items/Icons/WATER.png"
dest_files=["res://.godot/imported/WATER.png-081a033bb13bf2199df538c6f97ad417.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Some files were not shown because too many files have changed in this diff Show More