Compare commits

..

9 Commits

Author SHA1 Message Date
34c125e6bb no message 2026-02-15 01:14:09 -08:00
66905c9b53 Overhaul 2026-02-15 01:06:46 -08:00
a6ea1b1873 laptop 2026-02-14 19:26:33 -08:00
bf6b0d50c3 Additional in progress changes 2026-02-13 23:39:49 -08:00
c7603a163f Revert "update"
This reverts commit fe0241ac88.
2026-02-13 16:33:44 -08:00
a20c80d922 Remaining changes 2026-02-13 16:33:30 -08:00
e14007b7f4 Merge branch 'main' into item_changes 2026-02-13 16:24:40 -08:00
fe0241ac88 update 2026-02-13 16:11:38 -08:00
0ab6ef1343 In progress item changes 2026-02-13 15:59:10 -08:00
3090 changed files with 19574 additions and 43962 deletions

View File

@@ -6,9 +6,6 @@ using System.IO.Abstractions;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization.Metadata; using System.Text.Json.Serialization.Metadata;
using Zennysoft.Game.Abstractions; using Zennysoft.Game.Abstractions;
using System.Threading.Tasks;
using System.IO;
using Zennysoft.Game.Ma;
namespace Zennysoft.Game.Implementation; namespace Zennysoft.Game.Implementation;
@@ -30,9 +27,9 @@ public class SaveFileManager : ISaveFileManager
public Task<T?> ReadFromFile<T>(params IJsonTypeInfoResolver?[] resolvers) public Task<T?> ReadFromFile<T>(params IJsonTypeInfoResolver?[] resolvers)
{ {
return !_fileSystem.File.Exists(_defaultSaveLocation) if (!_fileSystem.File.Exists(_defaultSaveLocation))
? throw new FileNotFoundException() throw new FileNotFoundException();
: ReadFromFile<T>(_defaultSaveLocation, resolvers); return ReadFromFile<T>(_defaultSaveLocation, resolvers);
} }
public async Task<T?> ReadFromFile<T>(string filePath, params IJsonTypeInfoResolver?[] resolvers) public async Task<T?> ReadFromFile<T>(string filePath, params IJsonTypeInfoResolver?[] resolvers)

View File

@@ -15,6 +15,4 @@ public interface IAttackComponent : IEntityComponent
public void SetAttack(int attack); public void SetAttack(int attack);
public void RaiseMaximumAttack(int raiseAmount); public void RaiseMaximumAttack(int raiseAmount);
public void LowerMaximumAttack(int lowerAmount);
} }

View File

@@ -15,6 +15,4 @@ public interface IDefenseComponent : IEntityComponent
public void SetDefense(int attack); public void SetDefense(int attack);
public void RaiseMaximumDefense(int raiseAmount); public void RaiseMaximumDefense(int raiseAmount);
public void LowerMaximumDefense(int lowerAmount);
} }

View File

@@ -1,4 +1,5 @@
using Chickensoft.Collections; using Chickensoft.Collections;
using Godot;
using Zennysoft.Ma.Adapter.Entity; using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Ma.Adapter; namespace Zennysoft.Ma.Adapter;

View File

@@ -20,9 +20,5 @@ public interface IExperiencePointsComponent : IEntityComponent
public void LevelUp(); public void LevelUp();
public void LevelDown();
public event Action PlayerLevelUp; public event Action PlayerLevelUp;
public event Action PlayerLevelDown;
} }

View File

@@ -22,6 +22,4 @@ public interface IHealthComponent : IEntityComponent
public void SetMaximumHealth(int health); public void SetMaximumHealth(int health);
public void RaiseMaximumHP(int raiseAmount, bool restoreHP = false); public void RaiseMaximumHP(int raiseAmount, bool restoreHP = false);
public void LowerMaximumHP(int lowerAmount);
} }

View File

@@ -1,13 +0,0 @@
using Chickensoft.Collections;
using Godot;
using Zennysoft.Ma.Adapter;
public interface IStatusEffectComponent : IEntityComponent
{
[Export] public double RustDuration { get; set; }
public AutoProp<bool> Rust { get; }
public bool ImmuneToRust { get; set; }
}

View File

@@ -4,11 +4,7 @@ namespace Zennysoft.Ma.Adapter;
public interface ILuckComponent : IEntityComponent public interface ILuckComponent : IEntityComponent
{ {
public int InitialLuck { get; }
public IAutoProp<int> Luck { get; } public IAutoProp<int> Luck { get; }
public void IncreaseLuck(int value); public void IncreaseLuck(int value);
void DecreaseLuck(int value);
} }

View File

@@ -18,7 +18,5 @@ public interface IVTComponent : IEntityComponent
public void RaiseMaximumVT(int raiseAmount, bool restoreVT = true); public void RaiseMaximumVT(int raiseAmount, bool restoreVT = true);
public void LowerMaximumVT(int lowerAmount);
public void SetMaximumVT(int vt); public void SetMaximumVT(int vt);
} }

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3] [gd_scene load_steps=2 format=3 uid="uid://c7e5g8l6wuph"]
[ext_resource type="Script" path="res://src/enemy/behaviors/PatrolBehavior.cs" id="1_lobva"] [ext_resource type="Script" uid="uid://87d8kluait8y" path="res://src/enemy/behaviors/PatrolBehavior.cs" id="1_lobva"]
[node name="NavigationAgent" type="NavigationAgent3D"] [node name="NavigationAgent" type="NavigationAgent3D"]
avoidance_enabled = true avoidance_enabled = true

View File

@@ -31,8 +31,6 @@ namespace Zennysoft.Ma.Adapter.Entity
public IDefenseComponent DefenseComponent { get; } public IDefenseComponent DefenseComponent { get; }
public IStatusEffectComponent StatusEffectComponent { get; }
public ElementalResistanceSet ElementalResistanceSet { get; } public ElementalResistanceSet ElementalResistanceSet { get; }
public int InitialHP { get; } public int InitialHP { get; }

View File

@@ -1,11 +0,0 @@
namespace Zennysoft.Ma.Adapter;
public enum SpellFXEnum
{
AnBradan,
DivinityRecall,
ItemBreak,
Kyuuketsuki,
Persiko,
Radial
}

View File

@@ -1,26 +1,16 @@
using Godot; using Zennysoft.Ma.Adapter;
using Zennysoft.Ma.Adapter;
public class Augment public class Augment
{ {
public JewelTags AugmentTag; public JewelTags AugmentTag;
public Augment(JewelTags tag, IAugmentType augment, string name, string description, Texture2D augmentTexture) public Augment(JewelTags tag, IAugmentType augment)
{ {
AugmentTag = tag; AugmentTag = tag;
AugmentName = name;
AugmentType = augment; AugmentType = augment;
AugmentDescription = description;
AugmentTexture = augmentTexture;
} }
public IAugmentType AugmentType { get; set; } public IAugmentType AugmentType { get; set; }
public string AugmentName { get; set; }
public string AugmentDescription { get; set; }
public Texture2D AugmentTexture { get; set; }
} }
public class HPRecoverySpeedAugment : IAugmentType public class HPRecoverySpeedAugment : IAugmentType
@@ -104,33 +94,6 @@ public class LowerEXPRateAugment : IAugmentType
public void Remove() => _player.ExperiencePointsComponent.ModifyExpGainRate(_player.ExperiencePointsComponent.ExpGainRate.Value + 0.25f); public void Remove() => _player.ExperiencePointsComponent.ModifyExpGainRate(_player.ExperiencePointsComponent.ExpGainRate.Value + 0.25f);
} }
public class BoostStatsAugment : IAugmentType
{
private readonly IPlayer _player;
private readonly int _bonusLuck;
private readonly int _bonusHp;
private readonly int _bonusVt;
public BoostStatsAugment(IPlayer player, int bonusLuck, int bonusHp, int bonusVt)
{
_player = player;
_bonusLuck = bonusLuck;
_bonusHp = bonusHp;
_bonusVt = bonusVt;
}
public void Apply()
{
_player.HealthComponent.RaiseMaximumHP(_bonusHp);
_player.VTComponent.RaiseMaximumVT(_bonusVt);
_player.LuckComponent.IncreaseLuck(_bonusLuck);
}
public void Remove()
{
}
}
public class LowerHPRecoveryAugment : IAugmentType public class LowerHPRecoveryAugment : IAugmentType
{ {
private readonly IPlayer _player; private readonly IPlayer _player;

View File

@@ -4,6 +4,5 @@ public enum AccessoryTag
{ {
None, None,
HalfVTConsumption, HalfVTConsumption,
StatusEffectImmunity, StatusEffectImmunity
BoostEXPGainRate
} }

View File

@@ -1,7 +0,0 @@
namespace Zennysoft.Ma.Adapter;
public enum ArmorTag
{
None,
DegradeOnHit
}

View File

@@ -3,7 +3,7 @@
public enum ItemTag public enum ItemTag
{ {
None, None,
BreaksOnFloorExit, BreaksOnChange,
MysteryItem, MysteryItem,
DamagesPlayer, DamagesPlayer,
ContainsRestorative, ContainsRestorative,
@@ -20,8 +20,5 @@ public enum ItemTag
RestrictUnequip, RestrictUnequip,
UnequipAllItems, UnequipAllItems,
EjectAllItems, EjectAllItems,
UseAllItems, UseAllItems
GlueOnEquip,
BreaksOnUnequip,
ContainsJewel
} }

View File

@@ -14,26 +14,11 @@ public enum UsableItemTag
DealElementalDamageToAllEnemiesInRoom, DealElementalDamageToAllEnemiesInRoom,
RaiseCurrentWeaponAttack, RaiseCurrentWeaponAttack,
RaiseCurrentDefenseArmor, RaiseCurrentDefenseArmor,
LowerCurrentDefenseArmor,
RaiseLevel, RaiseLevel,
LowerLevel,
RandomEffect, RandomEffect,
DoubleExp, DoubleExp,
LowerTargetTo1HP, LowerTargetTo1HP,
CanChangeAffinity, CanChangeAffinity,
TeleportToRandomLocation, TeleportToRandomLocation,
WarpToExitIfFound, WarpToExitIfFound
IncreaseDefense,
IncreaseLuck,
IncreaseAttack,
DecreaseDefense,
DecreaseLuck,
DecreaseAttack,
DecreaseAllStats,
Clone,
MeltAllEquipment,
RestoreStats,
GlueAllEquipment,
DoubleStackedItems,
IdentifyRandomItem
} }

View File

@@ -16,8 +16,18 @@ public interface IGameRepo : IDisposable
event Action<string>? AnnounceMessageInInventoryEvent; event Action<string>? AnnounceMessageInInventoryEvent;
event Action<int>? DoubleExpTimeStart;
event Action? DoubleExpTimeEnd;
event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent; event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent;
event Action? PlayerAttack;
event Action? PlayerAttackedWall;
event Action? PlayerAttackedEnemy;
event Action<IEquipableItem>? EquippedItem; event Action<IEquipableItem>? EquippedItem;
event Action<IEquipableItem>? UnequippedItem; event Action<IEquipableItem>? UnequippedItem;
@@ -30,12 +40,20 @@ public interface IGameRepo : IDisposable
IAutoProp<bool> IsPaused { get; } IAutoProp<bool> IsPaused { get; }
public void StartDoubleEXP(TimeSpan lengthOfEffect);
public void EndDoubleExp();
public void AnnounceMessageOnMainScreen(string message); public void AnnounceMessageOnMainScreen(string message);
public void AnnounceMessageInInventory(string message); public void AnnounceMessageInInventory(string message);
public void RemoveItemFromInventory(IBaseInventoryItem item); public void RemoveItemFromInventory(IBaseInventoryItem item);
public void OnPlayerAttack();
public void OnPlayerAttackedWall();
public void CloseInventory(); public void CloseInventory();
public void GameEnded(); public void GameEnded();
@@ -45,6 +63,8 @@ public interface IGameRepo : IDisposable
public void OnUnequippedItem(IEquipableItem item); public void OnUnequippedItem(IEquipableItem item);
public void OnEnemyDied(IEnemy enemy); public void OnEnemyDied(IEnemy enemy);
public double ExpRate { get; }
} }
public class GameRepo : IGameRepo public class GameRepo : IGameRepo
@@ -53,18 +73,26 @@ public class GameRepo : IGameRepo
public event Action? CloseInventoryEvent; public event Action? CloseInventoryEvent;
public event Action<string>? AnnounceMessageOnMainScreenEvent; public event Action<string>? AnnounceMessageOnMainScreenEvent;
public event Action<string>? AnnounceMessageInInventoryEvent; public event Action<string>? AnnounceMessageInInventoryEvent;
public event Action<int>? DoubleExpTimeStart;
public event Action? DoubleExpTimeEnd;
public event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent; public event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent;
public event Action? PlayerAttack;
public event Action? PlayerAttackedWall;
public event Action? PlayerAttackedEnemy;
public event Action<IEquipableItem>? EquippedItem; public event Action<IEquipableItem>? EquippedItem;
public event Action<IEquipableItem>? UnequippedItem; public event Action<IEquipableItem>? UnequippedItem;
public event Action<IEnemy>? EnemyDied; public event Action<IEnemy>? EnemyDied;
public IAutoProp<bool> IsPaused => _isPaused; public IAutoProp<bool> IsPaused => _isPaused;
private readonly AutoProp<bool> _isPaused; private readonly AutoProp<bool> _isPaused;
public double ExpRate { get; private set; }
private bool _disposedValue; private bool _disposedValue;
public GameRepo() public GameRepo()
{ {
_isPaused = new AutoProp<bool>(true); _isPaused = new AutoProp<bool>(true);
ExpRate = 1;
} }
public void Pause() public void Pause()
@@ -79,6 +107,20 @@ public class GameRepo : IGameRepo
GD.Print("Resume"); GD.Print("Resume");
} }
public void StartDoubleEXP(TimeSpan lengthOfEffect)
{
AnnounceMessageInInventory("Experience points temporarily doubled.");
DoubleExpTimeStart?.Invoke(lengthOfEffect.Seconds);
ExpRate *= 2;
}
public void EndDoubleExp()
{
AnnounceMessageOnMainScreen("Experience points effect wore off.");
DoubleExpTimeEnd?.Invoke();
ExpRate /= 2;
}
public void AnnounceMessageOnMainScreen(string message) public void AnnounceMessageOnMainScreen(string message)
{ {
AnnounceMessageOnMainScreenEvent?.Invoke(message); AnnounceMessageOnMainScreenEvent?.Invoke(message);
@@ -94,6 +136,16 @@ public class GameRepo : IGameRepo
RemoveItemFromInventoryEvent?.Invoke(item); RemoveItemFromInventoryEvent?.Invoke(item);
} }
public void OnPlayerAttack()
{
PlayerAttack?.Invoke();
}
public void OnPlayerAttackedWall()
{
PlayerAttackedWall?.Invoke();
}
public void CloseInventory() public void CloseInventory()
{ {
CloseInventoryEvent?.Invoke(); CloseInventoryEvent?.Invoke();

View File

@@ -2,9 +2,4 @@
public interface IArmor : IEquipableItem, IAugmentableItem public interface IArmor : IEquipableItem, IAugmentableItem
{ {
public void IncreaseArmorDefense(int bonus);
public void DecreaseArmorDefense(int lowerAmount);
public ArmorTag ArmorTag { get; }
} }

View File

@@ -5,8 +5,7 @@ using Zennysoft.Ma.Adapter;
public interface IBaseInventoryItem public interface IBaseInventoryItem
{ {
public string ItemName { get; } public string ItemName { get; }
public string StatDescription { get; } public string Description { get; }
public string FlavorText { get; }
public float SpawnRate { get; } public float SpawnRate { get; }
public int ThrowDamage { get; } public int ThrowDamage { get; }
public float ThrowSpeed { get; } public float ThrowSpeed { get; }

View File

@@ -1,38 +1,16 @@
using Chickensoft.Serialization; using Chickensoft.Introspection;
using Chickensoft.Serialization;
namespace Zennysoft.Ma.Adapter; namespace Zennysoft.Ma.Adapter;
public class RescuedItemDatabase [Meta, Id("rescued_items")]
public partial class RescuedItemDatabase
{ {
[Save("rescued_item_list")] [Save("rescued_item_list")]
private List<IBaseInventoryItem> _items { get; init; } public List<IBaseInventoryItem> Items { get; init; }
private int _maxSize { get; init; } = 20;
public RescuedItemDatabase(int maxSize) public RescuedItemDatabase()
{ {
_items = []; Items = new List<IBaseInventoryItem>();
_maxSize = maxSize;
} }
public RescuedItemDatabase(List<IBaseInventoryItem> items, int maxSize)
{
_items = items;
_maxSize = maxSize;
}
public bool TryAdd(IBaseInventoryItem item)
{
if (_items.Count >= _maxSize)
return false;
if (item is IEquipableItem equipable)
equipable.Glued = false;
_items.Add(item);
return true;
}
public void Remove(IBaseInventoryItem item) => _items.Remove(item);
public List<IBaseInventoryItem> GetItems() => _items;
public void Clear() => _items.Clear();
} }

View File

@@ -19,18 +19,3 @@ public partial class BoxItemTagEnumContext : JsonSerializerContext;
[JsonSerializable(typeof(ElementType))] [JsonSerializable(typeof(ElementType))]
public partial class ElementTypeEnumContext : JsonSerializerContext; public partial class ElementTypeEnumContext : JsonSerializerContext;
[JsonSerializable(typeof(JewelTags))]
public partial class JewelTagsEnumContext : JsonSerializerContext;
[JsonSerializable(typeof(IBaseInventoryItem))]
public partial class BaseInventoryItemContext : JsonSerializerContext
{
}
[JsonSerializable(typeof(RescuedItemDatabase))]
public partial class RescuedItemDatabaseContext : JsonSerializerContext
{
}

View File

@@ -11,5 +11,7 @@ public interface IDungeonFloor : INode3D
public ImmutableList<IDungeonRoom> Rooms { get; } public ImmutableList<IDungeonRoom> Rooms { get; }
public void FadeOutAudio();
public bool FloorIsLoaded { get; set; } public bool FloorIsLoaded { get; set; }
} }

View File

@@ -10,6 +10,8 @@ public class Module
public static void Bootstrap(Container container) public static void Bootstrap(Container container)
{ {
container.RegisterSingleton<IFileSystem, FileSystem>(); container.RegisterSingleton<IFileSystem, FileSystem>();
container.RegisterSingleton<ISaveFileManager, SaveFileManager>();
container.RegisterSingleton<IMaSaveFileManager, MaSaveFileManager>();
container.RegisterSingleton<IGameRepo, GameRepo>(); container.RegisterSingleton<IGameRepo, GameRepo>();
container.RegisterSingleton<IGameState, GameState>(); container.RegisterSingleton<IGameState, GameState>();
container.RegisterSingleton<IDimmableAudioStreamPlayer, DimmableAudioStreamPlayer>(); container.RegisterSingleton<IDimmableAudioStreamPlayer, DimmableAudioStreamPlayer>();

View File

@@ -28,7 +28,7 @@ public interface IPlayer : IKillable, ICharacterBody3D
public void ApplyNewAugment(IAugmentItem jewel, IAugmentableItem equipableItem); public void ApplyNewAugment(IAugmentItem jewel, IAugmentableItem equipableItem);
public IBaseInventoryItem IdentifyItem(IBaseInventoryItem unidentifiedItem); public void IdentifyItem(IBaseInventoryItem unidentifiedItem);
public IInventory Inventory { get; } public IInventory Inventory { get; }
@@ -46,14 +46,10 @@ public interface IPlayer : IKillable, ICharacterBody3D
public IEquipmentComponent EquipmentComponent { get; } public IEquipmentComponent EquipmentComponent { get; }
public IStatusEffectComponent StatusEffectComponent { get; }
public void SetHealthTimerStatus(bool isActive); public void SetHealthTimerStatus(bool isActive);
public void ModifyHealthTimerSpeed(float newModifier); public void ModifyHealthTimerSpeed(float newModifier);
public void PlaySpellFX(SpellFXEnum spellEnum);
public bool AutoRevive { get; set; } public bool AutoRevive { get; set; }
public int TotalAttack { get; } public int TotalAttack { get; }

View File

@@ -1,9 +1,6 @@
using System.Collections.Immutable; using System.Collections.Immutable;
using System.IO.Abstractions;
using System.Text.Json.Serialization.Metadata; using System.Text.Json.Serialization.Metadata;
using System.Threading.Tasks;
using Zennysoft.Game.Abstractions; using Zennysoft.Game.Abstractions;
using Zennysoft.Game.Implementation;
namespace Zennysoft.Ma.Adapter; namespace Zennysoft.Ma.Adapter;
@@ -17,12 +14,12 @@ public interface IMaSaveFileManager
public sealed class MaSaveFileManager : IMaSaveFileManager public sealed class MaSaveFileManager : IMaSaveFileManager
{ {
private readonly ISaveFileManager _saveFileManager; private readonly ISaveFileManager _saveFileManager;
private readonly ImmutableList<IJsonTypeInfoResolver> _converters; private ImmutableList<IJsonTypeInfoResolver> _converters;
public MaSaveFileManager() public MaSaveFileManager(ISaveFileManager saveFileManager)
{ {
_saveFileManager = new SaveFileManager(new FileSystem()); _saveFileManager = saveFileManager;
_converters = [WeaponTagEnumContext.Default, ItemTagEnumContext.Default, ElementTypeEnumContext.Default, AccessoryTagEnumContext.Default, UsableItemTagEnumContext.Default, BoxItemTagEnumContext.Default, JewelTagsEnumContext.Default, BaseInventoryItemContext.Default, RescuedItemDatabaseContext.Default]; _converters = [WeaponTagEnumContext.Default, ItemTagEnumContext.Default, ElementTypeEnumContext.Default, AccessoryTagEnumContext.Default, UsableItemTagEnumContext.Default, BoxItemTagEnumContext.Default];
} }
public async Task Save<T>(T gameData) public async Task Save<T>(T gameData)

View File

@@ -31,8 +31,4 @@
<ProjectReference Include="..\Zennysoft.Game.Godot.Implementation\Zennysoft.Game.Implementation.csproj" /> <ProjectReference Include="..\Zennysoft.Game.Godot.Implementation\Zennysoft.Game.Implementation.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Save\" />
</ItemGroup>
</Project> </Project>

View File

@@ -1,61 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35222.181
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ma", "Ma.csproj", "{94D57D73-EDC5-47B2-BF34-7B57BA9C3881}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Zennysoft.Game.Abstractions", "..\Zennysoft.Game.Abstractions\Zennysoft.Game.Abstractions.csproj", "{D65D2AE9-D371-49F8-9E1D-BBA2907AB4AA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Zennysoft.Game.Implementation", "..\Zennysoft.Game.Godot.Implementation\Zennysoft.Game.Implementation.csproj", "{F6808C1C-EDFB-4602-BA01-34FB682A270C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Zennysoft.Ma.Adapter", "..\Zennysoft.Game.Ma.Implementation\Zennysoft.Ma.Adapter.csproj", "{CC55EDC3-B9EA-4393-BE4D-630C34393A94}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
ExportDebug|Any CPU = ExportDebug|Any CPU
ExportRelease|Any CPU = ExportRelease|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{94D57D73-EDC5-47B2-BF34-7B57BA9C3881}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{94D57D73-EDC5-47B2-BF34-7B57BA9C3881}.Debug|Any CPU.Build.0 = Debug|Any CPU
{94D57D73-EDC5-47B2-BF34-7B57BA9C3881}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
{94D57D73-EDC5-47B2-BF34-7B57BA9C3881}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
{94D57D73-EDC5-47B2-BF34-7B57BA9C3881}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
{94D57D73-EDC5-47B2-BF34-7B57BA9C3881}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
{94D57D73-EDC5-47B2-BF34-7B57BA9C3881}.Release|Any CPU.ActiveCfg = ExportRelease|Any CPU
{94D57D73-EDC5-47B2-BF34-7B57BA9C3881}.Release|Any CPU.Build.0 = ExportRelease|Any CPU
{D65D2AE9-D371-49F8-9E1D-BBA2907AB4AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D65D2AE9-D371-49F8-9E1D-BBA2907AB4AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D65D2AE9-D371-49F8-9E1D-BBA2907AB4AA}.ExportDebug|Any CPU.ActiveCfg = Debug|Any CPU
{D65D2AE9-D371-49F8-9E1D-BBA2907AB4AA}.ExportDebug|Any CPU.Build.0 = Debug|Any CPU
{D65D2AE9-D371-49F8-9E1D-BBA2907AB4AA}.ExportRelease|Any CPU.ActiveCfg = Release|Any CPU
{D65D2AE9-D371-49F8-9E1D-BBA2907AB4AA}.ExportRelease|Any CPU.Build.0 = Release|Any CPU
{D65D2AE9-D371-49F8-9E1D-BBA2907AB4AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D65D2AE9-D371-49F8-9E1D-BBA2907AB4AA}.Release|Any CPU.Build.0 = Release|Any CPU
{F6808C1C-EDFB-4602-BA01-34FB682A270C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F6808C1C-EDFB-4602-BA01-34FB682A270C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6808C1C-EDFB-4602-BA01-34FB682A270C}.ExportDebug|Any CPU.ActiveCfg = Debug|Any CPU
{F6808C1C-EDFB-4602-BA01-34FB682A270C}.ExportDebug|Any CPU.Build.0 = Debug|Any CPU
{F6808C1C-EDFB-4602-BA01-34FB682A270C}.ExportRelease|Any CPU.ActiveCfg = Release|Any CPU
{F6808C1C-EDFB-4602-BA01-34FB682A270C}.ExportRelease|Any CPU.Build.0 = Release|Any CPU
{F6808C1C-EDFB-4602-BA01-34FB682A270C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6808C1C-EDFB-4602-BA01-34FB682A270C}.Release|Any CPU.Build.0 = Release|Any CPU
{CC55EDC3-B9EA-4393-BE4D-630C34393A94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC55EDC3-B9EA-4393-BE4D-630C34393A94}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC55EDC3-B9EA-4393-BE4D-630C34393A94}.ExportDebug|Any CPU.ActiveCfg = Debug|Any CPU
{CC55EDC3-B9EA-4393-BE4D-630C34393A94}.ExportDebug|Any CPU.Build.0 = Debug|Any CPU
{CC55EDC3-B9EA-4393-BE4D-630C34393A94}.ExportRelease|Any CPU.ActiveCfg = Release|Any CPU
{CC55EDC3-B9EA-4393-BE4D-630C34393A94}.ExportRelease|Any CPU.Build.0 = Release|Any CPU
{CC55EDC3-B9EA-4393-BE4D-630C34393A94}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC55EDC3-B9EA-4393-BE4D-630C34393A94}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {797FF6A1-5959-42C9-A7A2-A8D39F9AC1A4}
EndGlobalSection
EndGlobal

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=4 format=3 uid="uid://ekf8y405ewyq"] [gd_scene load_steps=4 format=3 uid="uid://civ6shmka5e8u"]
[ext_resource type="Script" uid="uid://klpiq4tk3t7a" path="res://addons/dialogue_manager/components/code_edit_syntax_highlighter.gd" id="1_58cfo"] [ext_resource type="Script" uid="uid://klpiq4tk3t7a" path="res://addons/dialogue_manager/components/code_edit_syntax_highlighter.gd" id="1_58cfo"]
[ext_resource type="Script" uid="uid://djeybvlb332mp" path="res://addons/dialogue_manager/components/code_edit.gd" id="1_g324i"] [ext_resource type="Script" uid="uid://djeybvlb332mp" path="res://addons/dialogue_manager/components/code_edit.gd" id="1_g324i"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=3 format=3 uid="uid://cstps104wl17j"] [gd_scene load_steps=3 format=3 uid="uid://qdxrxv3c3hxk"]
[ext_resource type="Script" uid="uid://kpwo418lb2t2" path="res://addons/dialogue_manager/components/download_update_panel.gd" id="1_4tm1k"] [ext_resource type="Script" uid="uid://kpwo418lb2t2" path="res://addons/dialogue_manager/components/download_update_panel.gd" id="1_4tm1k"]
[ext_resource type="Texture2D" uid="uid://d3baj6rygkb3f" path="res://addons/dialogue_manager/assets/update.svg" id="2_4o2m6"] [ext_resource type="Texture2D" uid="uid://d3baj6rygkb3f" path="res://addons/dialogue_manager/assets/update.svg" id="2_4o2m6"]

View File

@@ -1,8 +1,8 @@
[gd_scene load_steps=4 format=3 uid="uid://bsal283gclopj"] [gd_scene load_steps=4 format=3 uid="uid://ycn6uaj7dsrh"]
[ext_resource type="Script" uid="uid://dooe2pflnqtve" path="res://addons/dialogue_manager/components/editor_property/editor_property_control.gd" id="1_het12"] [ext_resource type="Script" uid="uid://dooe2pflnqtve" path="res://addons/dialogue_manager/components/editor_property/editor_property_control.gd" id="1_het12"]
[ext_resource type="PackedScene" path="res://addons/dialogue_manager/components/editor_property/resource_button.tscn" id="2_hh3d4"] [ext_resource type="PackedScene" uid="uid://b16uuqjuof3n5" path="res://addons/dialogue_manager/components/editor_property/resource_button.tscn" id="2_hh3d4"]
[ext_resource type="PackedScene" path="res://addons/dialogue_manager/components/files_list.tscn" id="3_l8fp6"] [ext_resource type="PackedScene" uid="uid://dnufpcdrreva3" path="res://addons/dialogue_manager/components/files_list.tscn" id="3_l8fp6"]
[node name="PropertyEditorButton" type="HBoxContainer"] [node name="PropertyEditorButton" type="HBoxContainer"]
offset_right = 40.0 offset_right = 40.0

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://bylecer7aexlb"] [gd_scene load_steps=2 format=3 uid="uid://b16uuqjuof3n5"]
[ext_resource type="Script" uid="uid://damhqta55t67c" path="res://addons/dialogue_manager/components/editor_property/resource_button.gd" id="1_7u2i7"] [ext_resource type="Script" uid="uid://damhqta55t67c" path="res://addons/dialogue_manager/components/editor_property/resource_button.gd" id="1_7u2i7"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=4 format=3 uid="uid://c3pniua1enw8v"] [gd_scene load_steps=4 format=3 uid="uid://cs8pwrxr5vxix"]
[ext_resource type="Script" uid="uid://d2l8nlb6hhrfp" path="res://addons/dialogue_manager/components/errors_panel.gd" id="1_nfm3c"] [ext_resource type="Script" uid="uid://d2l8nlb6hhrfp" path="res://addons/dialogue_manager/components/errors_panel.gd" id="1_nfm3c"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=3 format=3 uid="uid://b21h8gsbo60xg"] [gd_scene load_steps=3 format=3 uid="uid://dnufpcdrreva3"]
[ext_resource type="Script" uid="uid://dqa4a4wwoo0aa" path="res://addons/dialogue_manager/components/files_list.gd" id="1_cytii"] [ext_resource type="Script" uid="uid://dqa4a4wwoo0aa" path="res://addons/dialogue_manager/components/files_list.gd" id="1_cytii"]
[ext_resource type="Texture2D" uid="uid://d3lr2uas6ax8v" path="res://addons/dialogue_manager/assets/icon.svg" id="2_3ijx1"] [ext_resource type="Texture2D" uid="uid://d3lr2uas6ax8v" path="res://addons/dialogue_manager/assets/icon.svg" id="2_3ijx1"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=3 format=3 uid="uid://c5to0aeerreb4"] [gd_scene load_steps=3 format=3 uid="uid://0n7hwviyyly4"]
[ext_resource type="Script" uid="uid://q368fmxxa8sd" path="res://addons/dialogue_manager/components/find_in_files.gd" id="1_3xicy"] [ext_resource type="Script" uid="uid://q368fmxxa8sd" path="res://addons/dialogue_manager/components/find_in_files.gd" id="1_3xicy"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://xnv1ojlgiss3"] [gd_scene load_steps=2 format=3 uid="uid://gr8nakpbrhby"]
[ext_resource type="Script" uid="uid://cijsmjkq21cdq" path="res://addons/dialogue_manager/components/search_and_replace.gd" id="1_8oj1f"] [ext_resource type="Script" uid="uid://cijsmjkq21cdq" path="res://addons/dialogue_manager/components/search_and_replace.gd" id="1_8oj1f"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://b7v2agbddgaoi"] [gd_scene load_steps=2 format=3 uid="uid://ctns6ouwwd68i"]
[ext_resource type="Script" uid="uid://d0k2wndjj0ifm" path="res://addons/dialogue_manager/components/title_list.gd" id="1_5qqmd"] [ext_resource type="Script" uid="uid://d0k2wndjj0ifm" path="res://addons/dialogue_manager/components/title_list.gd" id="1_5qqmd"]

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://c1dliyrsif5jj"] [gd_scene load_steps=3 format=3 uid="uid://co8yl23idiwbi"]
[ext_resource type="Script" uid="uid://cr1tt12dh5ecr" path="res://addons/dialogue_manager/components/update_button.gd" id="1_d2tpb"] [ext_resource type="Script" uid="uid://cr1tt12dh5ecr" path="res://addons/dialogue_manager/components/update_button.gd" id="1_d2tpb"]
[ext_resource type="PackedScene" uid="uid://cstps104wl17j" path="res://addons/dialogue_manager/components/download_update_panel.tscn" id="2_iwm7r"] [ext_resource type="PackedScene" uid="uid://qdxrxv3c3hxk" path="res://addons/dialogue_manager/components/download_update_panel.tscn" id="2_iwm7r"]
[node name="UpdateButton" type="Button"] [node name="UpdateButton" type="Button"]
visible = false visible = false

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://b0sflwm2j27gu"] [gd_scene load_steps=2 format=3 uid="uid://ckvgyvclnwggo"]
[ext_resource type="Script" uid="uid://g32um0mltv5d" path="res://addons/dialogue_manager/dialogue_label.gd" id="1_cital"] [ext_resource type="Script" uid="uid://g32um0mltv5d" path="res://addons/dialogue_manager/dialogue_label.gd" id="1_cital"]

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=9 format=3 uid="uid://bs44fggx87t73"] [gd_scene load_steps=9 format=3 uid="uid://73jm5qjy52vq"]
[ext_resource type="Script" uid="uid://5b3w40kwakl3" path="res://addons/dialogue_manager/example_balloon/ExampleBalloon.cs" id="1_36de5"] [ext_resource type="Script" uid="uid://5b3w40kwakl3" path="res://addons/dialogue_manager/example_balloon/ExampleBalloon.cs" id="1_36de5"]
[ext_resource type="PackedScene" path="res://addons/dialogue_manager/dialogue_label.tscn" id="2_a8ve6"] [ext_resource type="PackedScene" uid="uid://ckvgyvclnwggo" path="res://addons/dialogue_manager/dialogue_label.tscn" id="2_a8ve6"]
[ext_resource type="Script" uid="uid://bb52rsfwhkxbn" path="res://addons/dialogue_manager/dialogue_responses_menu.gd" id="3_72ixx"] [ext_resource type="Script" uid="uid://bb52rsfwhkxbn" path="res://addons/dialogue_manager/dialogue_responses_menu.gd" id="3_72ixx"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_spyqn"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_spyqn"]

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=10 format=3 uid="uid://c4tqvq4mjcfv2"] [gd_scene load_steps=10 format=3 uid="uid://13s5spsk34qu"]
[ext_resource type="Script" uid="uid://5b3w40kwakl3" path="res://addons/dialogue_manager/example_balloon/ExampleBalloon.cs" id="1_s2gbs"] [ext_resource type="Script" uid="uid://5b3w40kwakl3" path="res://addons/dialogue_manager/example_balloon/ExampleBalloon.cs" id="1_s2gbs"]
[ext_resource type="PackedScene" path="res://addons/dialogue_manager/dialogue_label.tscn" id="2_hfvdi"] [ext_resource type="PackedScene" uid="uid://ckvgyvclnwggo" path="res://addons/dialogue_manager/dialogue_label.tscn" id="2_hfvdi"]
[ext_resource type="Script" uid="uid://bb52rsfwhkxbn" path="res://addons/dialogue_manager/dialogue_responses_menu.gd" id="3_1j1j0"] [ext_resource type="Script" uid="uid://bb52rsfwhkxbn" path="res://addons/dialogue_manager/dialogue_responses_menu.gd" id="3_1j1j0"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_235ry"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_235ry"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://c3ty75yb1un26"] [gd_scene load_steps=2 format=3 uid="uid://ugd552efvil0"]
[ext_resource type="Script" uid="uid://c8e16qdgu40wo" path="res://addons/dialogue_manager/test_scene.gd" id="1_yupoh"] [ext_resource type="Script" uid="uid://c8e16qdgu40wo" path="res://addons/dialogue_manager/test_scene.gd" id="1_yupoh"]

View File

@@ -1,15 +1,15 @@
[gd_scene load_steps=16 format=3 uid="uid://b2lot8kdw2snd"] [gd_scene load_steps=16 format=3 uid="uid://cbuf1q3xsse3q"]
[ext_resource type="Script" uid="uid://cipjcc7bkh1pc" path="res://addons/dialogue_manager/views/main_view.gd" id="1_h6qfq"] [ext_resource type="Script" uid="uid://cipjcc7bkh1pc" path="res://addons/dialogue_manager/views/main_view.gd" id="1_h6qfq"]
[ext_resource type="PackedScene" uid="uid://ekf8y405ewyq" path="res://addons/dialogue_manager/components/code_edit.tscn" id="2_f73fm"] [ext_resource type="PackedScene" uid="uid://civ6shmka5e8u" path="res://addons/dialogue_manager/components/code_edit.tscn" id="2_f73fm"]
[ext_resource type="PackedScene" uid="uid://b21h8gsbo60xg" path="res://addons/dialogue_manager/components/files_list.tscn" id="2_npj2k"] [ext_resource type="PackedScene" uid="uid://dnufpcdrreva3" path="res://addons/dialogue_manager/components/files_list.tscn" id="2_npj2k"]
[ext_resource type="PackedScene" uid="uid://b7v2agbddgaoi" path="res://addons/dialogue_manager/components/title_list.tscn" id="2_onb4i"] [ext_resource type="PackedScene" uid="uid://ctns6ouwwd68i" path="res://addons/dialogue_manager/components/title_list.tscn" id="2_onb4i"]
[ext_resource type="PackedScene" uid="uid://c1dliyrsif5jj" path="res://addons/dialogue_manager/components/update_button.tscn" id="2_ph3vs"] [ext_resource type="PackedScene" uid="uid://co8yl23idiwbi" path="res://addons/dialogue_manager/components/update_button.tscn" id="2_ph3vs"]
[ext_resource type="PackedScene" uid="uid://xnv1ojlgiss3" path="res://addons/dialogue_manager/components/search_and_replace.tscn" id="6_ylh0t"] [ext_resource type="PackedScene" uid="uid://gr8nakpbrhby" path="res://addons/dialogue_manager/components/search_and_replace.tscn" id="6_ylh0t"]
[ext_resource type="PackedScene" uid="uid://c3pniua1enw8v" path="res://addons/dialogue_manager/components/errors_panel.tscn" id="7_5cvl4"] [ext_resource type="PackedScene" uid="uid://cs8pwrxr5vxix" path="res://addons/dialogue_manager/components/errors_panel.tscn" id="7_5cvl4"]
[ext_resource type="Script" uid="uid://klpiq4tk3t7a" path="res://addons/dialogue_manager/components/code_edit_syntax_highlighter.gd" id="7_necsa"] [ext_resource type="Script" uid="uid://klpiq4tk3t7a" path="res://addons/dialogue_manager/components/code_edit_syntax_highlighter.gd" id="7_necsa"]
[ext_resource type="Texture2D" uid="uid://cnm67htuohhlo" path="res://addons/dialogue_manager/assets/banner.png" id="9_y6rqu"] [ext_resource type="Texture2D" uid="uid://cnm67htuohhlo" path="res://addons/dialogue_manager/assets/banner.png" id="9_y6rqu"]
[ext_resource type="PackedScene" uid="uid://c5to0aeerreb4" path="res://addons/dialogue_manager/components/find_in_files.tscn" id="10_yold3"] [ext_resource type="PackedScene" uid="uid://0n7hwviyyly4" path="res://addons/dialogue_manager/components/find_in_files.tscn" id="10_yold3"]
[sub_resource type="Image" id="Image_y6rqu"] [sub_resource type="Image" id="Image_y6rqu"]
data = { data = {

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=3 format=3 uid="uid://bf5kpeg711bo8"] [gd_scene load_steps=3 format=3 uid="uid://b7mst0qu7vjk1"]
[ext_resource type="Script" uid="uid://dcff0mowkn6km" path="res://addons/input_helper/components/download_update_panel.gd" id="1_4tm1k"] [ext_resource type="Script" uid="uid://dcff0mowkn6km" path="res://addons/input_helper/components/download_update_panel.gd" id="1_4tm1k"]
[ext_resource type="Texture2D" uid="uid://ddixs2ish5bi6" path="res://addons/input_helper/assets/update.svg" id="2_j7shv"] [ext_resource type="Texture2D" uid="uid://ddixs2ish5bi6" path="res://addons/input_helper/assets/update.svg" id="2_j7shv"]

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=3 format=3 uid="uid://bsi3bm7ig32p"] [gd_scene load_steps=3 format=3 uid="uid://bownbkcmm43gn"]
[ext_resource type="PackedScene" uid="uid://bf5kpeg711bo8" path="res://addons/input_helper/components/download_update_panel.tscn" id="1_37q37"] [ext_resource type="PackedScene" uid="uid://b7mst0qu7vjk1" path="res://addons/input_helper/components/download_update_panel.tscn" id="1_37q37"]
[ext_resource type="Script" uid="uid://1t3qhgrro2es" path="res://addons/input_helper/views/download_dialog.gd" id="1_ltktf"] [ext_resource type="Script" uid="uid://1t3qhgrro2es" path="res://addons/input_helper/views/download_dialog.gd" id="1_ltktf"]
[node name="DownloadDialog" type="AcceptDialog"] [node name="DownloadDialog" type="AcceptDialog"]

View File

@@ -1,12 +1,9 @@
[gd_resource type="AudioBusLayout" load_steps=5 format=3 uid="uid://c2mk6c27y0mdf"] [gd_resource type="AudioBusLayout" load_steps=4 format=3 uid="uid://c2mk6c27y0mdf"]
[sub_resource type="AudioEffectLimiter" id="AudioEffectLimiter_j3pel"] [sub_resource type="AudioEffectLimiter" id="AudioEffectLimiter_j3pel"]
resource_name = "Limiter" resource_name = "Limiter"
soft_clip_db = 1.0 soft_clip_db = 1.0
[sub_resource type="AudioEffectHardLimiter" id="AudioEffectHardLimiter_j3pel"]
resource_name = "HardLimiter"
[sub_resource type="AudioEffectReverb" id="AudioEffectReverb_j3pel"] [sub_resource type="AudioEffectReverb" id="AudioEffectReverb_j3pel"]
resource_name = "Reverb" resource_name = "Reverb"
room_size = 0.5 room_size = 0.5
@@ -23,9 +20,7 @@ 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/effect = SubResource("AudioEffectLimiter_j3pel")
bus/0/effect/0/enabled = false bus/0/effect/0/enabled = true
bus/0/effect/1/effect = SubResource("AudioEffectHardLimiter_j3pel")
bus/0/effect/1/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

View File

@@ -9,7 +9,7 @@ custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter=""
export_path="../../Demo/Export.exe" export_path="Export/Ma.exe"
patches=PackedStringArray() patches=PackedStringArray()
encryption_include_filters="" encryption_include_filters=""
encryption_exclude_filters="" encryption_exclude_filters=""

View File

@@ -8,10 +8,6 @@
config_version=5 config_version=5
[animation]
warnings/check_invalid_track_paths=false
[application] [application]
config/name="Ma" config/name="Ma"
@@ -40,7 +36,6 @@ 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="canvas_items" window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[dotnet] [dotnet]
@@ -87,7 +82,6 @@ import/blender/enabled=false
[global_group] [global_group]
DimmableAudio="" DimmableAudio=""
enemy=""
[importer_defaults] [importer_defaults]
@@ -260,15 +254,11 @@ AltAttack={
CameraForward={ CameraForward={
"deadzone": 0.2, "deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null) "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
, 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":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, 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":4194446,"key_label":0,"unicode":56,"location":0,"echo":false,"script":null)
] ]
} }
CameraBack={ CameraBack={
"deadzone": 0.2, "deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null) "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
, 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":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, 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":4194440,"key_label":0,"unicode":50,"location":0,"echo":false,"script":null)
] ]
} }
EnemyViewerIdle={ EnemyViewerIdle={
@@ -284,7 +274,7 @@ EnemyViewerWalk={
[internationalization] [internationalization]
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", "res://stone.dialogue", "res://src/npc/Proscenium/JumpScare.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", "res://stone.dialogue", "res://src/npc/Proscenium/JumpScare.dialogue", "res://tutorialstone.dialogue")
[layer_names] [layer_names]
@@ -318,7 +308,6 @@ jolt_physics_3d/simulation/areas_detect_static_bodies=true
textures/canvas_textures/default_texture_filter=0 textures/canvas_textures/default_texture_filter=0
textures/lossless_compression/force_png=true textures/lossless_compression/force_png=true
lights_and_shadows/directional_shadow/size=2048
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=4 lights_and_shadows/directional_shadow/soft_shadow_filter_quality=4
lights_and_shadows/directional_shadow/16_bits=false lights_and_shadows/directional_shadow/16_bits=false
lights_and_shadows/positional_shadow/soft_shadow_filter_quality=3 lights_and_shadows/positional_shadow/soft_shadow_filter_quality=3

View File

@@ -1,5 +1,4 @@
using Chickensoft.Collections; using Chickensoft.Collections;
using Godot;
using System; using System;
using Zennysoft.Ma.Adapter; using Zennysoft.Ma.Adapter;
@@ -50,14 +49,7 @@ public class AttackComponent : IAttackComponent
public void RaiseMaximumAttack(int raiseAmount) public void RaiseMaximumAttack(int raiseAmount)
{ {
_maximumAttack.OnNext(_maximumAttack.Value + raiseAmount); _maximumAttack.OnNext(raiseAmount);
Restore(raiseAmount); Restore(raiseAmount);
} }
public void LowerMaximumAttack(int lowerAmount)
{
_maximumAttack.OnNext(Mathf.Max(_maximumAttack.Value - lowerAmount, 1));
if (_currentAttack.Value > _maximumAttack.Value)
_currentAttack.OnNext(_maximumAttack.Value);
}
} }

View File

@@ -1,5 +1,4 @@
using Chickensoft.Collections; using Chickensoft.Collections;
using Godot;
using System; using System;
using Zennysoft.Ma.Adapter; using Zennysoft.Ma.Adapter;
@@ -50,14 +49,7 @@ public class DefenseComponent : IDefenseComponent
public void RaiseMaximumDefense(int raiseAmount) public void RaiseMaximumDefense(int raiseAmount)
{ {
_maximumDefense.OnNext(_maximumDefense.Value + raiseAmount); _maximumDefense.OnNext(raiseAmount);
Restore(raiseAmount); Restore(raiseAmount);
} }
public void LowerMaximumDefense(int lowerAmount)
{
_maximumDefense.OnNext(Mathf.Max(_maximumDefense.Value - lowerAmount, 1));
if (_currentDefense.Value > _maximumDefense.Value)
_currentDefense.OnNext(_maximumDefense.Value);
}
} }

View File

@@ -1,5 +1,4 @@
using Chickensoft.Collections; using Chickensoft.Collections;
using Godot;
using System; using System;
using Zennysoft.Ma.Adapter; using Zennysoft.Ma.Adapter;
@@ -25,8 +24,6 @@ public class ExperiencePointsComponent : IExperiencePointsComponent
public event Action PlayerLevelUp; public event Action PlayerLevelUp;
public event Action PlayerLevelDown;
public ExperiencePointsComponent() public ExperiencePointsComponent()
{ {
var firstLevelExpRequirement = ExpToNextLevelCalculation(1); var firstLevelExpRequirement = ExpToNextLevelCalculation(1);
@@ -48,17 +45,20 @@ public class ExperiencePointsComponent : IExperiencePointsComponent
public void Gain(int baseExpGain) public void Gain(int baseExpGain)
{ {
var modifiedExpGain = baseExpGain * _expGainRate.Value; var modifiedExpGain = baseExpGain * _expGainRate.Value;
_currentExp.OnNext(Mathf.RoundToInt(modifiedExpGain + _currentExp.Value)); var newCurrentExpTotal = modifiedExpGain + _currentExp.Value;
while (_currentExp.Value >= _expToNextLevel.Value) while (modifiedExpGain + _currentExp.Value >= _expToNextLevel.Value)
LevelUp(); LevelUp();
var cappedAmount = Math.Min(baseExpGain + _currentExp.Value, _expToNextLevel.Value);
_currentExp.OnNext(cappedAmount);
} }
public void GainUnmodified(int flatRateExp) public void GainUnmodified(int flatRateExp)
{ {
var newCurrentExpTotal = flatRateExp + _currentExp.Value; var newCurrentExpTotal = flatRateExp + _currentExp.Value;
_currentExp.OnNext(newCurrentExpTotal); while (flatRateExp + _currentExp.Value >= _expToNextLevel.Value)
while (_currentExp.Value >= _expToNextLevel.Value)
LevelUp(); LevelUp();
var cappedAmount = Math.Min(flatRateExp + _currentExp.Value, _expToNextLevel.Value);
_currentExp.OnNext(cappedAmount);
} }
public void ModifyExpGainRate(double newRate) => _expGainRate.OnNext(newRate); public void ModifyExpGainRate(double newRate) => _expGainRate.OnNext(newRate);
@@ -73,21 +73,6 @@ public class ExperiencePointsComponent : IExperiencePointsComponent
PlayerLevelUp?.Invoke(); PlayerLevelUp?.Invoke();
} }
public void LevelDown()
{
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
_currentExp.OnNext(0);
if (_level.Value == 1)
return;
var newLevel = Mathf.Max(_level.Value - 1, 1);
_level.OnNext(newLevel);
var expToNextLevel = ExpToNextLevelCalculation(newLevel);
_expToNextLevel.OnNext(expToNextLevel);
PlayerLevelDown.Invoke();
}
private int ExpToNextLevelCalculation(int nextLevel) private int ExpToNextLevelCalculation(int nextLevel)
{ {
return (int)(6.5 * nextLevel + 4.5 * Math.Pow(nextLevel, 2) + Math.Pow(nextLevel, 3)); return (int)(6.5 * nextLevel + 4.5 * Math.Pow(nextLevel, 2) + Math.Pow(nextLevel, 3));

View File

@@ -1,5 +1,4 @@
using Chickensoft.Collections; using Chickensoft.Collections;
using Godot;
using System; using System;
using Zennysoft.Ma.Adapter; using Zennysoft.Ma.Adapter;
@@ -78,11 +77,4 @@ public class HealthComponent : IHealthComponent
if (restoreHP) if (restoreHP)
Heal(raiseAmount); Heal(raiseAmount);
} }
public void LowerMaximumHP(int lowerAmount)
{
_maximumHP.OnNext(Mathf.Max(_maximumHP.Value - lowerAmount, 1));
if (_currentHP.Value > _maximumHP.Value)
_currentHP.OnNext(_maximumHP.Value);
}
} }

View File

@@ -1,5 +1,4 @@
using Chickensoft.Collections; using Chickensoft.Collections;
using System;
using Zennysoft.Ma.Adapter; using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma; namespace Zennysoft.Game.Ma;
@@ -7,14 +6,12 @@ namespace Zennysoft.Game.Ma;
public class LuckComponent : ILuckComponent public class LuckComponent : ILuckComponent
{ {
public IAutoProp<int> Luck => _luck; public IAutoProp<int> Luck => _luck;
public int InitialLuck { get; }
private readonly AutoProp<int> _luck; private AutoProp<int> _luck;
private readonly int _initialValue; private readonly int _initialValue;
public LuckComponent(int initialLuck) public LuckComponent(int initialLuck)
{ {
InitialLuck = initialLuck;
_luck = new AutoProp<int>(initialLuck); _luck = new AutoProp<int>(initialLuck);
_initialValue = initialLuck; _initialValue = initialLuck;
} }
@@ -25,6 +22,4 @@ public class LuckComponent : ILuckComponent
} }
public void IncreaseLuck(int value) => _luck.OnNext(_luck.Value + value); public void IncreaseLuck(int value) => _luck.OnNext(_luck.Value + value);
public void DecreaseLuck(int value) => _luck.OnNext(Godot.Mathf.Max(_luck.Value - value, 0));
} }

View File

@@ -1,20 +0,0 @@
using Chickensoft.Collections;
public class StatusEffectComponent : IStatusEffectComponent
{
public StatusEffectComponent(double rustDuration)
{
RustDuration = rustDuration;
}
public double RustDuration { get; set; }
public AutoProp<bool> Rust { get; } = new AutoProp<bool>(false);
public bool ImmuneToRust { get; set; } = false;
public void Reset()
{
Rust.OnNext(false);
}
}

View File

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

View File

@@ -1,5 +1,4 @@
using Chickensoft.Collections; using Chickensoft.Collections;
using Godot;
using System; using System;
using Zennysoft.Ma.Adapter; using Zennysoft.Ma.Adapter;
@@ -57,13 +56,6 @@ public class VTComponent : IVTComponent
Restore(raiseAmount); Restore(raiseAmount);
} }
public void LowerMaximumVT(int lowerAmount)
{
_maximumVT.OnNext(Mathf.Max(_maximumVT.Value - lowerAmount, 1));
if (_currentVT.Value > _maximumVT.Value)
_currentVT.OnNext(_maximumVT.Value);
}
public void SetMaximumVT(int vt) public void SetMaximumVT(int vt)
{ {
_maximumVT.OnNext(vt); _maximumVT.OnNext(vt);

View File

@@ -21,7 +21,7 @@ public partial class App : Node, IApp
public const string GAME_SCENE_PATH = "res://src/game/Game.tscn"; public const string GAME_SCENE_PATH = "res://src/game/Game.tscn";
public const string ENEMY_VIEWER_PATH = "res://src/enemy_viewer/EnemyViewer.tscn"; public const string ENEMY_VIEWER_PATH = "res://src/data_viewer/DataViewer.tscn";
[Node] private MainMenu MainMenu { get; set; } = default!; [Node] private MainMenu MainMenu { get; set; } = default!;
@@ -40,14 +40,14 @@ public partial class App : Node, IApp
private Godot.Collections.Array _progress; private Godot.Collections.Array _progress;
private SimpleInjector.Container _container; private SimpleInjector.Container _container;
private EnemyViewer _dataViewer; 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 IGame _game;
private IEnemyViewer _enemyViewer; private IDataViewer _enemyViewer;
private double _reportedProgress = 0; private double _reportedProgress = 0;
@@ -173,7 +173,7 @@ public partial class App : Node, IApp
.Handle((in AppLogic.Output.EnemyViewerExited _) => .Handle((in AppLogic.Output.EnemyViewerExited _) =>
{ {
LoadingScreen.HideLoadingScreen(); LoadingScreen.HideLoadingScreen();
if (_enemyViewer != null && _enemyViewer is EnemyViewer enemyViewer) if (_enemyViewer != null && _enemyViewer is DataViewer enemyViewer)
enemyViewer.CallDeferred(MethodName.QueueFree); enemyViewer.CallDeferred(MethodName.QueueFree);
MainMenu.Show(); MainMenu.Show();
MainMenu.EnemyViewerButton.GrabFocus(); MainMenu.EnemyViewerButton.GrabFocus();
@@ -211,7 +211,7 @@ public partial class App : Node, IApp
private async void LoadEnemyViewer(string sceneName) private async void LoadEnemyViewer(string sceneName)
{ {
var scene = await LoadSceneInternal(sceneName); var scene = await LoadSceneInternal(sceneName);
_enemyViewer = scene as IEnemyViewer; _enemyViewer = scene as IDataViewer;
CallDeferred(MethodName.AddChild, scene); CallDeferred(MethodName.AddChild, scene);
LoadingScreen.HideLoadingScreen(); LoadingScreen.HideLoadingScreen();
} }
@@ -219,7 +219,6 @@ public partial class App : Node, IApp
private async Task<Node> LoadSceneInternal(string sceneName) private async Task<Node> LoadSceneInternal(string sceneName)
{ {
LoadingScreen.ShowLoadingScreen(); LoadingScreen.ShowLoadingScreen();
MainMenu.Hide();
LoadingScreen.ProgressBar.Value = 0; LoadingScreen.ProgressBar.Value = 0;
var sceneLoader = new SceneLoader(); var sceneLoader = new SceneLoader();
CallDeferred(MethodName.AddChild, sceneLoader); CallDeferred(MethodName.AddChild, sceneLoader);
@@ -239,7 +238,11 @@ public partial class App : Node, IApp
OptionsMenu.GameTab.GrabFocus(); OptionsMenu.GameTab.GrabFocus();
} }
private async void OnGallery() => GalleryMenu.Show(); 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());

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=6 format=3 uid="uid://bkhaksn82ws6h"] [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"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=27 format=3 uid="uid://brgi35xj3b4ud"] [gd_scene load_steps=26 format=3 uid="uid://brgi35xj3b4ud"]
[ext_resource type="Script" uid="uid://cw100tox0ufsy" path="res://src/audio/SfxDatabase.cs" id="1_ojkqd"] [ext_resource type="Script" uid="uid://cw100tox0ufsy" path="res://src/audio/SfxDatabase.cs" id="1_ojkqd"]
[ext_resource type="AudioStream" uid="uid://cye8wlqbx66h4" path="res://src/audio/sfx/player_heal.ogg" id="2_158j8"] [ext_resource type="AudioStream" uid="uid://cye8wlqbx66h4" path="res://src/audio/sfx/player_heal.ogg" id="2_158j8"]
@@ -9,7 +9,6 @@
[ext_resource type="AudioStream" uid="uid://c817txm4tmup7" path="res://src/audio/sfx/PLAYER_EQUIP.ogg" id="7_sew62"] [ext_resource type="AudioStream" uid="uid://c817txm4tmup7" path="res://src/audio/sfx/PLAYER_EQUIP.ogg" id="7_sew62"]
[ext_resource type="AudioStream" uid="uid://qxi7qto7hhgk" path="res://src/audio/sfx/PLAYER_UNEQUIP.ogg" id="8_rf1la"] [ext_resource type="AudioStream" uid="uid://qxi7qto7hhgk" path="res://src/audio/sfx/PLAYER_UNEQUIP.ogg" id="8_rf1la"]
[ext_resource type="AudioStream" uid="uid://doeefxilh0luj" path="res://src/audio/sfx/ITEM_SORT.ogg" id="9_l6w22"] [ext_resource type="AudioStream" uid="uid://doeefxilh0luj" path="res://src/audio/sfx/ITEM_SORT.ogg" id="9_l6w22"]
[ext_resource type="AudioStream" uid="uid://cyae4bt60m7p4" path="res://src/audio/sfx/item_plasma_sword.ogg" id="10_7th20"]
[ext_resource type="AudioStream" uid="uid://4mk4hlse81if" path="res://src/audio/sfx/player_losehealth.ogg" id="10_kac56"] [ext_resource type="AudioStream" uid="uid://4mk4hlse81if" path="res://src/audio/sfx/player_losehealth.ogg" id="10_kac56"]
[ext_resource type="AudioStream" uid="uid://dwp3ep3jddvrr" path="res://src/audio/sfx/UI_SELECT.ogg" id="10_nerso"] [ext_resource type="AudioStream" uid="uid://dwp3ep3jddvrr" path="res://src/audio/sfx/UI_SELECT.ogg" id="10_nerso"]
[ext_resource type="AudioStream" uid="uid://ilf2s8ct2stt" path="res://src/audio/sfx/PLAYER_slower_slash.ogg" id="10_vyvit"] [ext_resource type="AudioStream" uid="uid://ilf2s8ct2stt" path="res://src/audio/sfx/PLAYER_slower_slash.ogg" id="10_vyvit"]
@@ -34,26 +33,22 @@ script = ExtResource("1_ojkqd")
[node name="OpenInventorySound" type="AudioStreamPlayer" parent="UI"] [node name="OpenInventorySound" type="AudioStreamPlayer" parent="UI"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("5_p5cio") stream = ExtResource("5_p5cio")
bus = &"SFX" bus = &"SFX"
[node name="MoveSound" type="AudioStreamPlayer" parent="UI"] [node name="MoveSound" type="AudioStreamPlayer" parent="UI"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("6_r16t0") stream = ExtResource("6_r16t0")
max_polyphony = 5 max_polyphony = 5
bus = &"SFX" bus = &"SFX"
[node name="SelectSound" type="AudioStreamPlayer" parent="UI"] [node name="SelectSound" type="AudioStreamPlayer" parent="UI"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("10_nerso") stream = ExtResource("10_nerso")
bus = &"SFX" bus = &"SFX"
[node name="CancelSound" type="AudioStreamPlayer" parent="UI"] [node name="CancelSound" type="AudioStreamPlayer" parent="UI"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("11_rloay") stream = ExtResource("11_rloay")
bus = &"SFX" bus = &"SFX"
@@ -61,67 +56,51 @@ bus = &"SFX"
[node name="HealHPSound" type="AudioStreamPlayer" parent="Player"] [node name="HealHPSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("2_158j8") stream = ExtResource("2_158j8")
bus = &"SFX" bus = &"SFX"
[node name="TakeDamageSound" type="AudioStreamPlayer" parent="Player"] [node name="TakeDamageSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("10_kac56") stream = ExtResource("10_kac56")
bus = &"SFX" bus = &"SFX"
[node name="HealVTSound" type="AudioStreamPlayer" parent="Player"] [node name="HealVTSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("3_kac56") stream = ExtResource("3_kac56")
bus = &"SFX" bus = &"SFX"
[node name="WeaponQuickSlashSound" type="AudioStreamPlayer" parent="Player"] [node name="WeaponQuickSlashSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("13_fa8i8") stream = ExtResource("13_fa8i8")
bus = &"SFX" bus = &"SFX"
[node name="WeaponPlasmaSword" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true
process_mode = 3
stream = ExtResource("10_7th20")
bus = &"SFX"
[node name="WeaponSlowSlashSound" type="AudioStreamPlayer" parent="Player"] [node name="WeaponSlowSlashSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("10_vyvit") stream = ExtResource("10_vyvit")
bus = &"SFX" bus = &"SFX"
[node name="CritSound" type="AudioStreamPlayer" parent="Player"] [node name="CritSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("14_p5cio") stream = ExtResource("14_p5cio")
bus = &"SFX" bus = &"SFX"
[node name="PickupItemSound" type="AudioStreamPlayer" parent="Player"] [node name="PickupItemSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("15_r16t0") stream = ExtResource("15_r16t0")
bus = &"SFX" bus = &"SFX"
[node name="LevelUpSound" type="AudioStreamPlayer" parent="Player"] [node name="LevelUpSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("16_sew62") stream = ExtResource("16_sew62")
bus = &"SFX" bus = &"SFX"
[node name="EquipSound" type="AudioStreamPlayer" parent="Player"] [node name="EquipSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("7_sew62") stream = ExtResource("7_sew62")
bus = &"SFX" bus = &"SFX"
[node name="UnequipSound" type="AudioStreamPlayer" parent="Player"] [node name="UnequipSound" type="AudioStreamPlayer" parent="Player"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("8_rf1la") stream = ExtResource("8_rf1la")
bus = &"SFX" bus = &"SFX"
@@ -129,66 +108,50 @@ bus = &"SFX"
[node name="TransferItemSound" type="AudioStreamPlayer" parent="Item"] [node name="TransferItemSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("18_l6w22") stream = ExtResource("18_l6w22")
bus = &"SFX" bus = &"SFX"
[node name="IncreaseStatSound" type="AudioStreamPlayer" parent="Item"] [node name="IncreaseStatSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("4_fa8i8")
bus = &"SFX"
[node name="DecreaseStatSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true
process_mode = 3
stream = ExtResource("4_fa8i8") stream = ExtResource("4_fa8i8")
bus = &"SFX" bus = &"SFX"
[node name="SortSound" type="AudioStreamPlayer" parent="Item"] [node name="SortSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("9_l6w22") stream = ExtResource("9_l6w22")
bus = &"SFX" bus = &"SFX"
[node name="RecallEnemiesSound" type="AudioStreamPlayer" parent="Item"] [node name="RecallEnemiesSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("19_nerso") stream = ExtResource("19_nerso")
bus = &"SFX" bus = &"SFX"
[node name="KillHalfEnemiesSound" type="AudioStreamPlayer" parent="Item"] [node name="KillHalfEnemiesSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("20_rloay") stream = ExtResource("20_rloay")
bus = &"SFX" bus = &"SFX"
[node name="TeleportToRandomRoomSound" type="AudioStreamPlayer" parent="Item"] [node name="TeleportToRandomRoomSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("21_6hsck") stream = ExtResource("21_6hsck")
bus = &"SFX" bus = &"SFX"
[node name="TeleportToExitSound" type="AudioStreamPlayer" parent="Item"] [node name="TeleportToExitSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("22_3wq6u") stream = ExtResource("22_3wq6u")
bus = &"SFX" bus = &"SFX"
[node name="AbsorbHPFromAllEnemiesSound" type="AudioStreamPlayer" parent="Item"] [node name="AbsorbHPFromAllEnemiesSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("23_aaerj") stream = ExtResource("23_aaerj")
bus = &"SFX" bus = &"SFX"
[node name="SwapHPAndVTSound" type="AudioStreamPlayer" parent="Item"] [node name="SwapHPAndVTSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("23_jdwj3") stream = ExtResource("23_jdwj3")
bus = &"SFX" bus = &"SFX"
[node name="TurnAllEnemiesIntoHealingItemsSound" type="AudioStreamPlayer" parent="Item"] [node name="TurnAllEnemiesIntoHealingItemsSound" type="AudioStreamPlayer" parent="Item"]
unique_name_in_owner = true unique_name_in_owner = true
process_mode = 3
stream = ExtResource("24_jdwj3") stream = ExtResource("24_jdwj3")
bus = &"SFX" bus = &"SFX"

View File

@@ -24,7 +24,6 @@ public partial class SfxDatabase : Node
{SoundEffect.TakeDamage, TakeDamageSound }, {SoundEffect.TakeDamage, TakeDamageSound },
{SoundEffect.HealVT, HealVTSound }, {SoundEffect.HealVT, HealVTSound },
{SoundEffect.IncreaseStat, IncreaseStatSound }, {SoundEffect.IncreaseStat, IncreaseStatSound },
{SoundEffect.DecreaseStat, DecreaseStatSound },
{SoundEffect.Crit, CritSound }, {SoundEffect.Crit, CritSound },
{SoundEffect.PickupItem, PickupItemSound }, {SoundEffect.PickupItem, PickupItemSound },
{SoundEffect.OpenInventory, OpenInventorySound }, {SoundEffect.OpenInventory, OpenInventorySound },
@@ -44,7 +43,6 @@ public partial class SfxDatabase : Node
{SoundEffect.TurnAllEnemiesIntoHealingItems, TurnAllEnemiesIntoHealingItemsSound}, {SoundEffect.TurnAllEnemiesIntoHealingItems, TurnAllEnemiesIntoHealingItemsSound},
{SoundEffect.WeaponQuickSlash, WeaponQuickSlashSound }, {SoundEffect.WeaponQuickSlash, WeaponQuickSlashSound },
{SoundEffect.WeaponSlowSlash, WeaponSlowSlashSound }, {SoundEffect.WeaponSlowSlash, WeaponSlowSlashSound },
{SoundEffect.WeaponPlasmaSword, WeaponPlasmaSword },
}; };
} }
@@ -52,11 +50,8 @@ public partial class SfxDatabase : Node
[Node] private AudioStreamPlayer TakeDamageSound { get; set; } = default!; [Node] private AudioStreamPlayer TakeDamageSound { get; set; } = default!;
[Node] private AudioStreamPlayer HealVTSound { get; set; } = default!; [Node] private AudioStreamPlayer HealVTSound { get; set; } = default!;
[Node] private AudioStreamPlayer IncreaseStatSound { get; set; } = default!; [Node] private AudioStreamPlayer IncreaseStatSound { get; set; } = default!;
[Node] private AudioStreamPlayer DecreaseStatSound { get; set; } = default!;
[Node] private AudioStreamPlayer WeaponQuickSlashSound { get; set; } = default!; [Node] private AudioStreamPlayer WeaponQuickSlashSound { get; set; } = default!;
[Node] private AudioStreamPlayer WeaponSlowSlashSound { get; set; } = default!; [Node] private AudioStreamPlayer WeaponSlowSlashSound { get; set; } = default!;
[Node] private AudioStreamPlayer WeaponPlasmaSword { get; set; } = default!;
[Node] private AudioStreamPlayer CritSound { get; set; } = default!; [Node] private AudioStreamPlayer CritSound { get; set; } = default!;
[Node] private AudioStreamPlayer PickupItemSound { get; set; } = default!; [Node] private AudioStreamPlayer PickupItemSound { get; set; } = default!;
[Node] private AudioStreamPlayer OpenInventorySound { get; set; } [Node] private AudioStreamPlayer OpenInventorySound { get; set; }
@@ -92,7 +87,6 @@ public enum SoundEffect
TakeDamage, TakeDamage,
HealVT, HealVT,
IncreaseStat, IncreaseStat,
DecreaseStat,
Crit, Crit,
PickupItem, PickupItem,
OpenInventory, OpenInventory,
@@ -113,6 +107,5 @@ public enum SoundEffect
TurnAllEnemiesIntoHealingItems, TurnAllEnemiesIntoHealingItems,
WeaponQuickSlash, WeaponQuickSlash,
WeaponSlowSlash, WeaponSlowSlash,
WeaponPlasmaSword
} }

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=3 format=3 uid="uid://dqvlemme0iwa"] [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"] [ext_resource type="Script" uid="uid://bb36q1wpe0tlw" path="res://src/camera/ShakeCamera.cs" id="1_ubmds"]

View File

@@ -8,8 +8,13 @@ using Zennysoft.Game.Abstractions;
namespace Zennysoft.Game.Ma; namespace Zennysoft.Game.Ma;
public interface IDataViewer
{
}
[Meta(typeof(IAutoNode))] [Meta(typeof(IAutoNode))]
public partial class EnemyViewer : Control, IEnemyViewer public partial class DataViewer : Control, IDataViewer
{ {
public override void _Notification(int what) => this.Notify(what); public override void _Notification(int what) => this.Notify(what);
@@ -19,9 +24,6 @@ public partial class EnemyViewer : Control, IEnemyViewer
[Export] [Export]
public float _cameraSpeed = 0.01f; public float _cameraSpeed = 0.01f;
[Export]
public float _distance = 50;
[Node] public Node3D CameraPivot { get; set; } = default!; [Node] public Node3D CameraPivot { get; set; } = default!;
[Node] public Camera3D Camera3D { get; set; } = default!; [Node] public Camera3D Camera3D { get; set; } = default!;
@@ -124,16 +126,19 @@ public partial class EnemyViewer : Control, IEnemyViewer
public override void _Process(double delta) public override void _Process(double delta)
{ {
var forwardStrength = Input.GetActionStrength(GameInputs.MoveUp); if (_currentModel == null || BackButton.HasFocus())
Camera3D.Position = Camera3D.Position.MoveToward(CameraPivot.Position, _cameraSpeed * forwardStrength * (_cameraStartingPoint / 3)); return;
var backStrength = Input.GetActionStrength(GameInputs.MoveDown);
Camera3D.Position = Camera3D.Position.MoveToward(CameraPivot.Position, -_cameraSpeed * backStrength * (_cameraStartingPoint / 3)); 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); var leftStrength = Input.GetActionStrength(GameInputs.MoveLeft);
CameraPivot.RotateY(_cameraSpeed * leftStrength); CameraPivot.RotateY(_cameraSpeed * leftStrength);
var rightStrength = Input.GetActionStrength(GameInputs.MoveRight); var rightStrength = Input.GetActionStrength(GameInputs.MoveRight);
CameraPivot.RotateY(-_cameraSpeed * rightStrength); CameraPivot.RotateY(-_cameraSpeed * rightStrength);
Camera3D.Position = Camera3D.Position.Clamp(new Vector3(0, 1, _cameraStartingPoint / 2), new Vector3(0, 1, _cameraStartingPoint)); 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));
if (_currentModel is EnemyModelView2D enemyModelView2D) if (_currentModel is EnemyModelView2D enemyModelView2D)
@@ -144,9 +149,13 @@ public partial class EnemyViewer : Control, IEnemyViewer
{ {
_currentModel = _enemies[_currentIndex]; _currentModel = _enemies[_currentIndex];
_cameraStartingPoint = (float)_currentModel.ViewerSize; var size = _currentModel.GetSize();
Camera3D.Position = new Vector3(Camera3D.Position.X, Camera3D.Position.Y, _cameraStartingPoint); if (_currentModel is EnemyModelView2D)
_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"; EnemyName.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.Name : "Placeholder Text";
Description.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.Description : "Placeholder Text"; Description.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.Description : "Placeholder Text";
HPValue.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.MaximumHP : "Placeholder Text"; HPValue.Text = _currentModel.EnemyLoreInfo != null ? _currentModel.EnemyLoreInfo.MaximumHP : "Placeholder Text";

View File

@@ -1,32 +1,23 @@
[gd_scene load_steps=29 format=3 uid="uid://b02ykp0nm7cyw"] [gd_scene load_steps=19 format=3 uid="uid://c7wjbgbrdivol"]
[ext_resource type="Script" uid="uid://bgaflnnur26vk" path="res://src/enemy_viewer/EnemyViewer.cs" id="1_1qako"] [ext_resource type="Script" uid="uid://bgaflnnur26vk" path="res://src/data_viewer/DataViewer.cs" id="1_1qako"]
[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://dsf5l6g8n1tkw" path="res://src/ui/rendered_assets/SCREEN_RENDERS_Viewer_720_16_9.png" id="2_hpkd1"]
[ext_resource type="Texture2D" uid="uid://bophm5or5opdf" path="res://src/enemy_viewer/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg" id="3_hpkd1"] [ext_resource type="Texture2D" uid="uid://bophm5or5opdf" path="res://src/data_viewer/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg" id="3_hpkd1"]
[ext_resource type="PackedScene" uid="uid://bjcqrhtifpcvr" path="res://src/enemy/enemy_types/01. sproingy/SproingyModelView.tscn" id="3_vk1lh"] [ext_resource type="PackedScene" uid="uid://bimjnsu52y3xi" path="res://src/enemy/enemy_types/01. sproingy/SproingyModelView.tscn" id="3_vk1lh"]
[ext_resource type="Shader" uid="uid://o80s4yvp0rto" path="res://src/enemy_viewer/BlurSprite3D.gdshader" id="4_vk1lh"] [ext_resource type="Shader" uid="uid://o80s4yvp0rto" path="res://src/data_viewer/BlurSprite3D.gdshader" id="4_vk1lh"]
[ext_resource type="PackedScene" uid="uid://b6sa6ntu4rbrm" path="res://src/enemy/enemy_types/03. filth_eater/FilthEaterModelView.tscn" id="5_w2r6i"]
[ext_resource type="PackedScene" uid="uid://g84hcmgo3gtl" path="res://src/enemy/enemy_types/04. sara/SaraModelView.tscn" id="6_rdiwx"]
[ext_resource type="LabelSettings" uid="uid://b6f8ggy3ulonb" path="res://src/ui/label_settings/GeorgiaItalic.tres" id="6_vk1lh"] [ext_resource type="LabelSettings" uid="uid://b6f8ggy3ulonb" path="res://src/ui/label_settings/GeorgiaItalic.tres" id="6_vk1lh"]
[ext_resource type="FontFile" uid="uid://beh6d5lo5ihq0" path="res://src/ui/fonts/georgiai.ttf" id="7_dvixg"] [ext_resource type="FontFile" uid="uid://beh6d5lo5ihq0" path="res://src/ui/fonts/georgiai.ttf" id="7_dvixg"]
[ext_resource type="PackedScene" uid="uid://dppmk4nx2le20" path="res://src/enemy/enemy_types/05. ballos/BallosModelView.tscn" id="7_w2r6i"] [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://uqle8gaeajg6" path="res://src/enemy/enemy_types/02. michael/MichaelModelView.tscn" id="8_ekqja"] [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://de6e8yv6mv4fe" path="res://src/enemy/enemy_types/07. chinthe/ChintheModelView.tscn" id="9_rdiwx"] [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://7eo16vsbrgi3" path="res://src/enemy/enemy_types/08a. Ambassador/AmbassadorModelView.tscn" id="10_rdiwx"] [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://d02te8cwjistl" path="res://src/enemy/enemy_types/08b. Ambassador (red)/AmbassadorSmallModelView.tscn" id="11_elpsj"] [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://g8km112r1lqa" path="res://src/enemy/enemy_types/08c. Ambassador (steel)/AmbassadorSteelModelView.tscn" id="12_3kprl"]
[ext_resource type="PackedScene" uid="uid://uynf2cg7wtqo" path="res://src/enemy/enemy_types/09. Agni/AgniDemonModelView.tscn" id="12_dr0jx"]
[ext_resource type="PackedScene" uid="uid://omkas04o46rq" path="res://src/enemy/enemy_types/9b. Aqueos Demon/AqueosModelView.tscn" id="13_dr0jx"]
[ext_resource type="PackedScene" uid="uid://cuar5bbhxie4r" path="res://src/enemy/enemy_types/11. Palan/PalanModelView.tscn" id="15_7bm5s"]
[ext_resource type="PackedScene" uid="uid://bochx2nfql67q" path="res://src/enemy/enemy_types/12. Shield of Heaven/ShieldModelView.tscn" id="16_7bm5s"]
[ext_resource type="PackedScene" uid="uid://dw7fyurv4vkd5" path="res://src/enemy/enemy_types/13. gold sproingy/GoldSproingyModelView.tscn" id="17_c1y0w"]
[ext_resource type="PackedScene" uid="uid://dykkkt8mr1012" path="res://src/enemy/enemy_types/10. Eden Pillar/EdenPillarModelView.tscn" id="18_r2vgt"]
[ext_resource type="PackedScene" uid="uid://c00olwjise7iv" path="res://src/enemy/enemy_types/14. horse_head/HorseFaceModelView.tscn" id="18_tnrj6"]
[ext_resource type="PackedScene" uid="uid://bbvw38l6407s2" path="res://src/enemy/enemy_types/15. ox_face/OxFaceModelView.tscn" id="19_elms1"]
[ext_resource type="PackedScene" uid="uid://b3oupv6tkt4ad" path="res://src/enemy/enemy_types/16. demon wall/DemonWallModelView.tscn" id="20_elms1"]
[ext_resource type="StyleBox" uid="uid://bxuy4tnftibfq" path="res://src/options/SelectedOptionsBox.tres" id="25_gdy4a"] [ext_resource type="StyleBox" uid="uid://bxuy4tnftibfq" path="res://src/options/SelectedOptionsBox.tres" id="25_gdy4a"]
[ext_resource type="StyleBox" uid="uid://bl15q835s4ene" path="res://src/options/UnselectedOptionsBox.tres" id="26_br3ej"] [ext_resource type="StyleBox" uid="uid://bl15q835s4ene" path="res://src/options/UnselectedOptionsBox.tres" id="26_br3ej"]
[ext_resource type="Script" uid="uid://bc6iu0oq18y2l" path="res://src/player/DummyPlayer.cs" id="27_v1qxp"]
[sub_resource type="Environment" id="Environment_vk1lh"]
[sub_resource type="CameraAttributesPhysical" id="CameraAttributesPhysical_dvixg"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dvixg"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_dvixg"]
render_priority = 0 render_priority = 0
@@ -40,6 +31,9 @@ shader_parameter/blur_y = 50.0
shader_parameter/Rot_Angle = 4.9 shader_parameter/Rot_Angle = 4.9
shader_parameter/Metal = 0.0 shader_parameter/Metal = 0.0
[sub_resource type="Environment" id="Environment_3wl4s"]
background_mode = 1
[node name="DataViewer" type="Control"] [node name="DataViewer" type="Control"]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
@@ -51,7 +45,6 @@ size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
script = ExtResource("1_1qako") script = ExtResource("1_1qako")
_cameraSpeed = 0.08 _cameraSpeed = 0.08
_distance = 200.0
[node name="TextureRect" type="TextureRect" parent="."] [node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 1 layout_mode = 1
@@ -76,114 +69,52 @@ stretch = true
[node name="SubViewport" type="SubViewport" parent="CenterContainer2/SubViewportContainer"] [node name="SubViewport" type="SubViewport" parent="CenterContainer2/SubViewportContainer"]
process_mode = 1 process_mode = 1
own_world_3d = true
handle_input_locally = false handle_input_locally = false
size = Vector2i(750, 600) size = Vector2i(750, 600)
render_target_update_mode = 4 render_target_update_mode = 4
[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"] [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)
[node name="Sproingy" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("3_vk1lh")] [node name="Sproingy" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("3_vk1lh")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.00286, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.26108, 0)
visible = false visible = false
ViewerSize = 1.5
[node name="Michael" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("8_ekqja")] [node name="Michael" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("8_ekqja")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.00286, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.20608, 0)
visible = false visible = false
ViewerSize = 2.0
[node name="FilthEater" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("5_w2r6i")] [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 visible = false
ViewerSize = 3.5
[node name="Apsara" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("6_rdiwx")] [node name="Horse Face" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("19_qagkd")]
visible = false visible = false
ViewerSize = 3.0
[node name="Ballos" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("7_w2r6i")] [node name="Ox Face" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("20_bw7jv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.796934, 0)
visible = false visible = false
ViewerSize = 4.0
[node name="Chinthe" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("9_rdiwx")] [node name="Demon Wall" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("21_i7aes")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.41574, 0)
visible = false visible = false
ViewerSize = 3.5
[node name="AmbassadorGreen" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("10_rdiwx")]
visible = false
ViewerSize = 5.0
[node name="AmbassadorRed" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("11_elpsj")]
visible = false
ViewerSize = 4.0
[node name="AmbassadorSteel" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("12_3kprl")]
visible = false
ViewerSize = 5.0
[node name="AgniDemon" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("12_dr0jx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
visible = false
ViewerSize = 4.5
[node name="AqueosDemon" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("13_dr0jx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.25, 0)
visible = false
ViewerSize = 4.0
[node name="Palan" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("15_7bm5s")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.492472, 0)
visible = false
ViewerSize = 4.0
[node name="ShieldOfHeaven" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("16_7bm5s")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.676215, 0)
visible = false
ViewerSize = 4.0
[node name="GoldSproingy" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("17_c1y0w")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.996254, 0)
visible = false
ViewerSize = 3.0
[node name="EdenPillarModelView" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("18_r2vgt")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -5.14047, 0)
visible = false
ViewerSize = 17.0
[node name="HorseHead" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("18_tnrj6")]
transform = Transform3D(0.15, 0, 0, 0, 0.15, 0, 0, 0, 0.15, 0, -1.10523, 0)
visible = false
ViewerSize = 8.0
[node name="OxFace" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("19_elms1")]
transform = Transform3D(0.15, 0, 0, 0, 0.15, 0, 0, 0, 0.15, 0, -1.105, 0)
visible = false
ViewerSize = 8.0
[node name="DemonWall" parent="CenterContainer2/SubViewportContainer/SubViewport/ModelPivot" instance=ExtResource("20_elms1")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2.99034, 0)
visible = false
ViewerSize = 35.0
[node name="CameraPivot" type="Node3D" parent="CenterContainer2/SubViewportContainer/SubViewport"] [node name="CameraPivot" 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.010191, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
[node name="Camera3D" type="Camera3D" parent="CenterContainer2/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, 0.999848, -0.0174524, 0, 0.0174524, 0.999848, 0.003, 1.05, 3) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
cull_mask = 1048569 environment = SubResource("Environment_vk1lh")
doppler_tracking = 1 attributes = SubResource("CameraAttributesPhysical_dvixg")
current = true
fov = 52.9
near = 0.01
far = 9000.0
[node name="Sprite3D" type="Sprite3D" parent="CenterContainer2/SubViewportContainer/SubViewport/CameraPivot/Camera3D"] [node name="Sprite3D" type="Sprite3D" parent="CenterContainer2/SubViewportContainer/SubViewport/CameraPivot/Camera3D"]
transform = Transform3D(-1, 0, 8.74228e-08, -1.52574e-09, 0.999848, -0.0174524, -8.74095e-08, -0.0174524, -0.999848, 349.341, -209.25, -288.223) transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 349.344, -203.088, -300)
material_override = SubResource("ShaderMaterial_dvixg") material_override = SubResource("ShaderMaterial_dvixg")
pixel_size = 1.0 pixel_size = 1.0
billboard = 2 billboard = 2
@@ -191,10 +122,6 @@ transparent = false
texture_filter = 2 texture_filter = 2
texture = ExtResource("3_hpkd1") texture = ExtResource("3_hpkd1")
[node name="OmniLight3D" type="OmniLight3D" parent="CenterContainer2/SubViewportContainer/SubViewport"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6.99017, 9.40485)
omni_range = 55.7097
[node name="MarginContainer" type="MarginContainer" parent="."] [node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 2 layout_mode = 2
anchor_left = 0.5 anchor_left = 0.5
@@ -356,6 +283,15 @@ theme_override_fonts/normal_font = ExtResource("7_dvixg")
theme_override_font_sizes/normal_font_size = 30 theme_override_font_sizes/normal_font_size = 30
text = "Placeholder Text" text = "Placeholder Text"
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_3wl4s")
[node name="SpotLight3D" type="SpotLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -0.31977, 0.947495, 0, -0.947495, -0.31977, 0, 6.05742, -1.13242)
light_energy = 8.943
spot_range = 9.00889
spot_attenuation = 3.45
[node name="BackButton" type="Button" parent="."] [node name="BackButton" type="Button" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 0 layout_mode = 0
@@ -374,6 +310,3 @@ theme_override_styles/pressed_mirrored = ExtResource("26_br3ej")
theme_override_styles/pressed = ExtResource("26_br3ej") theme_override_styles/pressed = ExtResource("26_br3ej")
theme_override_styles/normal_mirrored = ExtResource("26_br3ej") theme_override_styles/normal_mirrored = ExtResource("26_br3ej")
theme_override_styles/normal = ExtResource("26_br3ej") theme_override_styles/normal = ExtResource("26_br3ej")
[node name="DummyPlayer" type="CharacterBody3D" parent="."]
script = ExtResource("27_v1qxp")

View File

@@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bophm5or5opdf" uid="uid://bophm5or5opdf"
path="res://.godot/imported/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg-f88d8853613b3452be42477990890b3a.ctex" path="res://.godot/imported/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg-c763a9fd7b565d1015c74205c4c551f8.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://src/enemy_viewer/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg" source_file="res://src/data_viewer/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg"
dest_files=["res://.godot/imported/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg-f88d8853613b3452be42477990890b3a.ctex"] dest_files=["res://.godot/imported/bafkreicavupacvvhtig6ii2zb3svww7luvmuknyttza6s4doxm4oursnzm.jpg-c763a9fd7b565d1015c74205c4c551f8.ctex"]
[params] [params]

View File

@@ -25,13 +25,13 @@ public partial class DebugInfo : Control
_map.FloorLoaded += _map_FloorLoaded; _map.FloorLoaded += _map_FloorLoaded;
_gameRepo.EnemyDied += _gameRepo_EnemyDied; _gameRepo.EnemyDied += _gameRepo_EnemyDied;
_player.PlayerDied += _player_PlayerDied; _player.PlayerDied += _player_PlayerDied;
DeathCount.Text = _game.QuestData.DeathCount.ToString();
} }
private void _gameRepo_EnemyDied(IEnemy obj) => EnemyCount.Text = (EnemyCount.Text.ToInt() - 1).ToString(); private void _gameRepo_EnemyDied(IEnemy obj) => EnemyCount.Text = (EnemyCount.Text.ToInt() - 1).ToString();
private void _map_FloorLoaded() private void _map_FloorLoaded()
{ {
DeathCount.Text = _game.QuestData.DeathCount.ToString();
MapName.Text = _map.CurrentFloor.SceneFilePath.GetFile().TrimSuffix(".tscn"); MapName.Text = _map.CurrentFloor.SceneFilePath.GetFile().TrimSuffix(".tscn");
EnemyCount.Text = _map.CurrentFloor.GetChild(0).GetChildren().OfType<IDungeonRoom>().Select(x => x.GetChildren().OfType<IEnemy>()).Count().ToString(); EnemyCount.Text = _map.CurrentFloor.GetChild(0).GetChildren().OfType<IDungeonRoom>().Select(x => x.GetChildren().OfType<IEnemy>()).Count().ToString();
} }

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=4 format=3 uid="uid://0eo47mewhlit"] [gd_scene load_steps=4 format=3 uid="uid://t22s2y1t8ktc"]
[ext_resource type="Script" uid="uid://c4g3frcpt0h36" path="res://src/debug_info/DebugInfo.cs" id="1_6tk84"] [ext_resource type="Script" uid="uid://c4g3frcpt0h36" path="res://src/debug_info/DebugInfo.cs" id="1_6tk84"]
[ext_resource type="LabelSettings" uid="uid://b6f8ggy3ulonb" path="res://src/ui/label_settings/GeorgiaItalic.tres" id="1_i766g"] [ext_resource type="LabelSettings" uid="uid://b6f8ggy3ulonb" path="res://src/ui/label_settings/GeorgiaItalic.tres" id="1_i766g"]

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="DialogueResource" load_steps=2 format=3 uid="uid://dlbsw423e12au"] [gd_resource type="Resource" script_class="DialogueResource" load_steps=2 format=3 uid="uid://dlbsw423e12au"]
[ext_resource type="Script" uid="uid://dbs4435dsf3ry" path="res://addons/dialogue_manager/dialogue_resource.gd" id="1_p1wx7"] [ext_resource type="Script" path="res://addons/dialogue_manager/dialogue_resource.gd" id="1_p1wx7"]
[resource] [resource]
script = ExtResource("1_p1wx7") script = ExtResource("1_p1wx7")

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://ci8272gtj7oj6"] [gd_scene load_steps=2 format=3 uid="uid://kt5fg0it26cf"]
[ext_resource type="Script" uid="uid://g32um0mltv5d" path="res://addons/dialogue_manager/dialogue_label.gd" id="1_bkcfu"] [ext_resource type="Script" path="res://addons/dialogue_manager/dialogue_label.gd" id="1_bkcfu"]
[node name="Dialog" type="RichTextLabel"] [node name="Dialog" type="RichTextLabel"]
anchors_preset = 15 anchors_preset = 15

View File

@@ -1,5 +1,15 @@
~ general ~ general
Hi...
=> END => END
~ introduction ~ introduction
I haven't had a script added yet.
=> END
~ hit
Yep, hitting me does work though.
=> END
~ get_item
ooo yum
=> END => END

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=95 format=3 uid="uid://cygwsc1gebeut"] [gd_scene load_steps=95 format=3 uid="uid://dpoonda2dwwic"]
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_53wuj"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_53wuj"]
animation = &"idle_back" animation = &"idle_back"

View File

@@ -3,6 +3,7 @@ using Chickensoft.Introspection;
using Godot; using Godot;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using Zennysoft.Ma.Adapter; using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma; namespace Zennysoft.Game.Ma;
@@ -37,6 +38,8 @@ public partial class BossTypeA : Enemy, IHaveEngagePlayerBehavior, IHaveFollowBe
[Node] public Area3D PlayerDetector { get; set; } = default!; [Node] public Area3D PlayerDetector { get; set; } = default!;
[Node] public Label BossHP { get; set; } = default!;
private Vector3 _previousPosition = Vector3.Zero; private Vector3 _previousPosition = Vector3.Zero;
public void OnResolved() public void OnResolved()
@@ -57,6 +60,8 @@ public partial class BossTypeA : Enemy, IHaveEngagePlayerBehavior, IHaveFollowBe
_enemyLogic.Input(new EnemyLogic.Input.Move()); _enemyLogic.Input(new EnemyLogic.Input.Move());
_previousPosition = GlobalPosition; _previousPosition = GlobalPosition;
} }
BossHP.Text = HealthComponent.CurrentHP.Value + "/" + HealthComponent.MaximumHP.Value;
} }
public void OnPhysicsProcess(double delta) public void OnPhysicsProcess(double delta)
@@ -74,9 +79,9 @@ public partial class BossTypeA : Enemy, IHaveEngagePlayerBehavior, IHaveFollowBe
protected void OnVelocityComputed(Vector3 safeVelocity) protected void OnVelocityComputed(Vector3 safeVelocity)
{ {
Velocity = new Vector3(safeVelocity.X, 0, safeVelocity.Z); Velocity = safeVelocity;
if (!Velocity.IsZeroApprox()) if (!Velocity.IsZeroApprox())
LookAtTarget(Velocity); LookAtTarget(safeVelocity);
MoveAndSlide(); MoveAndSlide();
} }
@@ -150,7 +155,7 @@ public partial class BossTypeA : Enemy, IHaveEngagePlayerBehavior, IHaveFollowBe
private float GetRotationAngle() private float GetRotationAngle()
{ {
var target = new Vector3(_player.GlobalPosition.X, GlobalPosition.Y, _player.GlobalPosition.Z); var target = new Vector3(_player.GlobalPosition.X, Position.Y, _player.GlobalPosition.Z);
_rotation.LookAt(target, Vector3.Up, true); _rotation.LookAt(target, Vector3.Up, true);
_rotation.RotateY(Rotation.Y); _rotation.RotateY(Rotation.Y);
return _rotation.Rotation.Y; return _rotation.Rotation.Y;

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://bbc80e2421xlb"] [gd_scene load_steps=2 format=3 uid="uid://br6dlxj36fw5i"]
[sub_resource type="BoxShape3D" id="BoxShape3D_7056c"] [sub_resource type="BoxShape3D" id="BoxShape3D_7056c"]

View File

@@ -34,8 +34,6 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
public IDefenseComponent DefenseComponent { get; private set; } public IDefenseComponent DefenseComponent { get; private set; }
public IStatusEffectComponent StatusEffectComponent { get; private set; }
public virtual IEnemyModelView EnemyModelView { get; set; } = default!; public virtual IEnemyModelView EnemyModelView { get; set; } = default!;
public Vector3 TargetPosition { get; private set; } public Vector3 TargetPosition { get; private set; }
@@ -71,9 +69,6 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
[Node] private AudioStreamPlayer3D _dieSFX { get; set; } = default!; [Node] private AudioStreamPlayer3D _dieSFX { get; set; } = default!;
[Node] private AudioStreamPlayer3D _aggroSFX { get; set; } = default!; [Node] private AudioStreamPlayer3D _aggroSFX { get; set; } = default!;
private Timer _rustTimer;
private Timer _rustDuration;
protected bool _activated = false; protected bool _activated = false;
private Vector3 _previousPosition = Vector3.Zero; private Vector3 _previousPosition = Vector3.Zero;
@@ -91,22 +86,8 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
HealthComponent.HealthReachedZero += Die; HealthComponent.HealthReachedZero += Die;
HealthComponent.DamageTaken += TakeHit; HealthComponent.DamageTaken += TakeHit;
_rustTimer = new Timer();
_rustDuration = new Timer();
_rustTimer.WaitTime = 3;
_rustDuration.WaitTime = 30;
_rustTimer.Timeout += _rustTimer_Timeout;
_rustDuration.Timeout += _rustDuration_Timeout;
AddChild(_rustTimer);
AddChild(_rustDuration);
AttackComponent = new AttackComponent(InitialAttack); AttackComponent = new AttackComponent(InitialAttack);
DefenseComponent = new DefenseComponent(InitialDefense); DefenseComponent = new DefenseComponent(InitialDefense);
StatusEffectComponent = new StatusEffectComponent(30);
StatusEffectComponent.Rust.Changed += OnRusted;
EnemyBinding EnemyBinding
.Handle((in EnemyLogic.Output.Activate _) => .Handle((in EnemyLogic.Output.Activate _) =>
@@ -179,8 +160,6 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
public virtual void Die() public virtual void Die()
{ {
SetPhysicsProcess(false); SetPhysicsProcess(false);
_rustDuration.Stop();
_rustTimer.Stop();
_enemyLogic.Input(new EnemyLogic.Input.Defeated()); _enemyLogic.Input(new EnemyLogic.Input.Defeated());
_player.ExperiencePointsComponent.Gain(ExpGiven); _player.ExperiencePointsComponent.Gain(ExpGiven);
EnemyModelView.PlayDeathAnimation(); EnemyModelView.PlayDeathAnimation();
@@ -201,11 +180,8 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
{ {
_morphSFX.Play(); _morphSFX.Play();
SetPhysicsProcess(false); SetPhysicsProcess(false);
_player.ExperiencePointsComponent.Gain(ExpGiven); _enemyLogic.Input(new EnemyLogic.Input.Defeated());
EnemyModelView.PlayDeathAnimation(); Callable.From(QueueFree);
var tweener = CreateTween();
tweener.TweenInterval(1.0f);
tweener.TweenCallback(Callable.From(QueueFree));
} }
public IDungeonRoom GetCurrentRoom(ImmutableList<IDungeonRoom> roomList) public IDungeonRoom GetCurrentRoom(ImmutableList<IDungeonRoom> roomList)
@@ -236,8 +212,7 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
var spawnPointsGodotCollection = new Godot.Collections.Array<Marker3D>(spawnPoints); var spawnPointsGodotCollection = new Godot.Collections.Array<Marker3D>(spawnPoints);
var randomSpawnPoint = spawnPointsGodotCollection.PickRandom(); var randomSpawnPoint = spawnPointsGodotCollection.PickRandom();
GlobalPosition = new Vector3(randomSpawnPoint.GlobalPosition.X, GlobalPosition.Y, randomSpawnPoint.GlobalPosition.Z); GlobalPosition = new Vector3(randomSpawnPoint.GlobalPosition.X, 0, randomSpawnPoint.GlobalPosition.Y);
ResetPhysicsInterpolation();
_previousPosition = GlobalPosition; _previousPosition = GlobalPosition;
if (this is IHavePatrolBehavior patrolEnemy) if (this is IHavePatrolBehavior patrolEnemy)
@@ -265,28 +240,4 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
{ {
_player.TakeDamage(new AttackData(AttackComponent.CurrentAttack.Value, ElementType.None)); _player.TakeDamage(new AttackData(AttackComponent.CurrentAttack.Value, ElementType.None));
} }
private void OnRusted(bool rustStatus)
{
if (rustStatus)
{
_rustTimer.Start();
_rustDuration.Start();
}
else
{
_rustTimer.Stop();
}
}
private void _rustTimer_Timeout()
{
HealthComponent.Damage(3);
TakeHit();
}
private void _rustDuration_Timeout()
{
StatusEffectComponent.Rust.OnNext(false);
}
} }

View File

@@ -21,13 +21,11 @@ public abstract partial class Enemy2D : Enemy
public void OnEnterTree() public void OnEnterTree()
{ {
LineOfSight.BodyEntered += LineOfSight_BodyEntered; LineOfSight.BodyEntered += LineOfSight_BodyEntered;
_previousPosition = GlobalPosition;
} }
public override void _PhysicsProcess(double delta) public override void _PhysicsProcess(double delta)
{ {
_enemyModelView.SetCurrentDirection(GlobalBasis, -_player.GlobalBasis.Z); _enemyModelView.SetCurrentDirection(GlobalBasis, -_player.GlobalBasis.Z);
_previousPosition = GlobalPosition;
} }
public override void _Process(double delta) public override void _Process(double delta)
@@ -35,10 +33,11 @@ public abstract partial class Enemy2D : Enemy
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer || _enemyLogic.Value is EnemyLogic.State.Patrolling) if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer || _enemyLogic.Value is EnemyLogic.State.Patrolling)
{ {
var velocity = (GlobalPosition - _previousPosition) / (float)delta; var velocity = (GlobalPosition - _previousPosition) / (float)delta;
if (velocity.Length() < 0.15f) if (velocity.Length() < 0.3f)
_enemyLogic.Input(new EnemyLogic.Input.Idle()); _enemyLogic.Input(new EnemyLogic.Input.Idle());
else else
_enemyLogic.Input(new EnemyLogic.Input.Move()); _enemyLogic.Input(new EnemyLogic.Input.Move());
_previousPosition = GlobalPosition;
} }
} }
@@ -56,16 +55,12 @@ public abstract partial class Enemy2D : Enemy
protected void OnVelocityComputed(Vector3 safeVelocity) protected void OnVelocityComputed(Vector3 safeVelocity)
{ {
Velocity = new Vector3(safeVelocity.X, 0, safeVelocity.Z); Velocity = safeVelocity;
LookAtTarget(safeVelocity); LookAtTarget(safeVelocity);
MoveAndSlide(); MoveAndSlide();
} }
protected void EngagePlayerBehavior_TakeAction() protected void EngagePlayerBehavior_TakeAction() => PerformAction();
{
if (_player.HealthComponent.CurrentHP.Value > 0)
PerformAction();
}
protected void EngagePlayerBehavior_AcquireTarget() => LookAt(new Vector3(_player.GlobalPosition.X, GlobalPosition.Y, _player.GlobalPosition.Z), Vector3.Up, true); protected void EngagePlayerBehavior_AcquireTarget() => LookAt(new Vector3(_player.GlobalPosition.X, GlobalPosition.Y, _player.GlobalPosition.Z), Vector3.Up, true);

View File

@@ -1,12 +1,10 @@
[gd_scene load_steps=4 format=3 uid="uid://dcj80fft8v6ww"] [gd_scene load_steps=4 format=3 uid="uid://dbvr8ewajja6a"]
[ext_resource type="PackedScene" uid="uid://xeuulxx1p702" path="res://src/enemy/enemy_types/02. michael/Michael.tscn" id="2_tja3j"] [ext_resource type="Script" uid="uid://cp02ufnj6c7kg" path="res://src/enemy/EnemyDatabase.cs" id="1_ywy58"]
[ext_resource type="PackedScene" uid="uid://ckow4bnkohxsj" path="res://src/enemy/enemy_types/04. sara/Sara.tscn" id="3_cpupr"] [ext_resource type="PackedScene" uid="uid://b0gwivt7cw7nd" path="res://src/enemy/enemy_types/02. michael/Michael.tscn" id="2_tja3j"]
[ext_resource type="PackedScene" uid="uid://bksq62muhk3h5" path="res://src/enemy/enemy_types/01. sproingy/Sproingy.tscn" id="3_cpupr"]
[sub_resource type="Resource" id="Resource_fevii"]
metadata/__load_path__ = "res://src/enemy/EnemyDatabase.cs"
[node name="EnemyDatabase" type="Node"] [node name="EnemyDatabase" type="Node"]
script = SubResource("Resource_fevii") script = ExtResource("1_ywy58")
EnemyList = Array[PackedScene]([ExtResource("2_tja3j"), ExtResource("3_cpupr")]) EnemyList = Array[PackedScene]([ExtResource("2_tja3j"), ExtResource("3_cpupr")])
SpawnRate = PackedFloat32Array(1, 1) SpawnRate = PackedFloat32Array(1, 1)

View File

@@ -38,9 +38,6 @@ public abstract partial class EnemyModelView : Node3D, IEnemyModelView
public event EventHandler TeleportAnimationFinished; public event EventHandler TeleportAnimationFinished;
[Export]
public double ViewerSize { get; set; } = 1f;
[Export] [Export]
public bool CanMove { get; set; } = false; public bool CanMove { get; set; } = false;

View File

@@ -1,7 +1,5 @@
using Godot; using Godot;
using System; using System;
using System.Collections.Generic;
using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Game.Ma; namespace Zennysoft.Game.Ma;
@@ -50,45 +48,6 @@ public static class EnemyTypeToEnemyConverter
} }
} }
public static EnemyType Convert(IEnemy enemy)
{
if (enemy is Sproingy)
return EnemyType.Sproingy;
if (enemy is Michael)
return EnemyType.Michael;
if (enemy is FilthEater)
return EnemyType.FilthEater;
if (enemy is Sara)
return EnemyType.Sara;
if (enemy is Ballos)
return EnemyType.Ballos;
if (enemy is Chariot)
return EnemyType.Chariot;
if (enemy is Chinthe)
return EnemyType.Chinthe;
if (enemy is Ambassador ambassador)
if (ambassador.Name == "Ambassador")
return EnemyType.AmbassadorGreen;
else if (ambassador.Name == "AmbassadorRed")
return EnemyType.AmbassadorRed;
else
return EnemyType.AmbassadorSteel;
if (enemy is AgniDemon)
return EnemyType.AgniDemon;
if (enemy is AqueousDemon)
return EnemyType.AqueousDemon;
if (enemy is EdenPillar)
return EnemyType.EdenPillar;
if (enemy is Palan)
return EnemyType.Palan;
if (enemy is ShieldOfHeaven)
return EnemyType.ShieldOfHeaven;
if (enemy is GoldSproingy)
return EnemyType.GoldSproingy;
throw new NotImplementedException("Cannot duplicate this type of enemy.");
}
private static Enemy InstantiateFromPath(string scenePath) private static Enemy InstantiateFromPath(string scenePath)
{ {
var enemyScene = GD.Load<PackedScene>(scenePath); var enemyScene = GD.Load<PackedScene>(scenePath);

View File

@@ -27,8 +27,6 @@ public interface IEnemyModelView : INode3D
public void PlayDeathAnimation(); public void PlayDeathAnimation();
public double ViewerSize { get; }
public AttackData AttackData { get; set; } public AttackData AttackData { get; set; }
public event EventHandler HitPlayer; public event EventHandler HitPlayer;

View File

@@ -1,10 +1,9 @@
[gd_scene load_steps=2 format=3 uid="uid://ddvhuhttr5q0m"] [gd_scene load_steps=2 format=3 uid="uid://p74f12fh5v0i"]
[sub_resource type="Resource" id="Resource_g8n53"] [ext_resource type="Script" uid="uid://vjb6sjktj6m0" path="res://src/enemy/PatrolComponent.cs" id="1_dhoym"]
metadata/__load_path__ = "res://src/enemy/PatrolComponent.cs"
[node name="PatrolComponent" type="Node3D"] [node name="PatrolComponent" type="Node3D"]
script = SubResource("Resource_g8n53") script = ExtResource("1_dhoym")
[node name="Navigation" type="Node3D" parent="."] [node name="Navigation" type="Node3D" parent="."]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=171 format=3 uid="uid://3ax3e5uce27d"] [gd_scene load_steps=171 format=3 uid="uid://diaxvpmwgl65u"]
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_53wuj"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_53wuj"]
animation = &"idle_back" animation = &"idle_back"

View File

@@ -23,7 +23,7 @@ public partial class EngagePlayerBehavior : Node, IEngagePlayerBehavior
{ {
_actionTimer = new Timer(); _actionTimer = new Timer();
_acquireTargetTimer = new Timer() { WaitTime = _acquireTargetTime }; _acquireTargetTimer = new Timer() { WaitTime = _acquireTargetTime };
_actionTimer.WaitTime = 0.8f; _actionTimer.WaitTime = RandomizeTimer(_minimumAttackTime, _maximumAttackTime);
_actionTimer.Timeout += OnAttackTimeout; _actionTimer.Timeout += OnAttackTimeout;
_acquireTargetTimer.Timeout += OnAcquireTargetTimeout; _acquireTargetTimer.Timeout += OnAcquireTargetTimeout;
AddChild(_actionTimer); AddChild(_actionTimer);
@@ -44,7 +44,6 @@ public partial class EngagePlayerBehavior : Node, IEngagePlayerBehavior
private void OnAttackTimeout() private void OnAttackTimeout()
{ {
_actionTimer.Stop();
_actionTimer.WaitTime = RandomizeTimer(_minimumAttackTime, _maximumAttackTime); _actionTimer.WaitTime = RandomizeTimer(_minimumAttackTime, _maximumAttackTime);
_actionTimer.Start(); _actionTimer.Start();
EmitSignal(SignalName.TakeAction); EmitSignal(SignalName.TakeAction);

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://cmhem5xknjsvc"] [gd_scene load_steps=2 format=3 uid="uid://8bcme8ao4axa"]
[ext_resource type="Script" uid="uid://bbe5nt3kpvk0f" path="res://src/enemy/behaviors/EngagePlayerBehavior.cs" id="1_7r6b3"] [ext_resource type="Script" uid="uid://bbe5nt3kpvk0f" path="res://src/enemy/behaviors/EngagePlayerBehavior.cs" id="1_7r6b3"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://dld534cmm5twd"] [gd_scene load_steps=2 format=3 uid="uid://g4cupevu280j"]
[ext_resource type="Script" uid="uid://drur3hx4p4du4" path="res://src/enemy/behaviors/FleeBehavior.cs" id="1_cty3c"] [ext_resource type="Script" uid="uid://drur3hx4p4du4" path="res://src/enemy/behaviors/FleeBehavior.cs" id="1_cty3c"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://cve5oouhowtff"] [gd_scene load_steps=2 format=3 uid="uid://mqj4jju3870v"]
[ext_resource type="Script" uid="uid://chfhmralfmwva" path="res://src/enemy/behaviors/FollowBehavior.cs" id="1_3rkk2"] [ext_resource type="Script" uid="uid://chfhmralfmwva" path="res://src/enemy/behaviors/FollowBehavior.cs" id="1_3rkk2"]

View File

@@ -2,7 +2,6 @@
using Chickensoft.Introspection; using Chickensoft.Introspection;
using Godot; using Godot;
using Godot.Collections; using Godot.Collections;
using System.Linq;
using Zennysoft.Game.Abstractions.Entity; using Zennysoft.Game.Abstractions.Entity;
namespace Zennysoft.Game.Ma; namespace Zennysoft.Game.Ma;
@@ -23,6 +22,7 @@ public partial class PatrolBehavior : Node3D, IBehavior
private Timer _patrolTimer { get; set; } = default!; private Timer _patrolTimer { get; set; } = default!;
private NavigationAgent3D _navigationAgent; private NavigationAgent3D _navigationAgent;
private int _recursiveCounter = 0;
private Vector3 _homePosition; private Vector3 _homePosition;
public Vector3 HomePosition public Vector3 HomePosition
@@ -82,9 +82,16 @@ public partial class PatrolBehavior : Node3D, IBehavior
rng.Randomize(); rng.Randomize();
var randomPointX = rng.RandfRange(-_patrolRange, _patrolRange); var randomPointX = rng.RandfRange(-_patrolRange, _patrolRange);
var randomPointZ = rng.RandfRange(-_patrolRange, _patrolRange); var randomPointZ = rng.RandfRange(-_patrolRange, _patrolRange);
var patrolPoint = HomePosition + new Vector3(randomPointX, 0, randomPointZ); _navigationAgent.TargetPosition = HomePosition + new Vector3(randomPointX, 0, randomPointZ);
var rid = NavigationServer3D.GetMaps().Single(); if (!_navigationAgent.IsTargetReachable())
_navigationAgent.TargetPosition = NavigationServer3D.MapGetClosestPoint(rid, patrolPoint); {
_recursiveCounter++;
if (_recursiveCounter <= 100)
SetPatrolTarget();
else
_navigationAgent.TargetPosition = HomePosition;
}
_recursiveCounter = 0;
} }
private void PatrolTimer_Timeout() => SetPatrolTarget(); private void PatrolTimer_Timeout() => SetPatrolTarget();

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=2 format=3 uid="uid://cn4fv2gv6raql"] [gd_scene load_steps=2 format=3 uid="uid://2nkvacxsd46b"]
[ext_resource type="Script" uid="uid://hpb1f5r17k5y" path="res://src/enemy/behaviors/PatrolBehavior.cs" id="1_lobva"] [ext_resource type="Script" uid="uid://hpb1f5r17k5y" path="res://src/enemy/behaviors/PatrolBehavior.cs" id="1_lobva"]

View File

@@ -1,10 +1,10 @@
[gd_scene load_steps=16 format=3 uid="uid://crsy7gygjy317"] [gd_scene load_steps=16 format=3 uid="uid://bs56ccgosmu47"]
[ext_resource type="Script" uid="uid://cq6b4ma3sy1en" path="res://src/enemy/enemy_types/01. sproingy/Sproingy.cs" id="1_xsluo"] [ext_resource type="Script" uid="uid://cq6b4ma3sy1en" path="res://src/enemy/enemy_types/01. sproingy/Sproingy.cs" id="1_xsluo"]
[ext_resource type="PackedScene" uid="uid://cn4fv2gv6raql" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="4_drfkj"] [ext_resource type="PackedScene" uid="uid://2nkvacxsd46b" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="4_drfkj"]
[ext_resource type="PackedScene" uid="uid://bjcqrhtifpcvr" path="res://src/enemy/enemy_types/01. sproingy/SproingyModelView.tscn" id="4_o3b7p"] [ext_resource type="PackedScene" uid="uid://bimjnsu52y3xi" path="res://src/enemy/enemy_types/01. sproingy/SproingyModelView.tscn" id="4_o3b7p"]
[ext_resource type="PackedScene" uid="uid://cmhem5xknjsvc" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="5_drfkj"] [ext_resource type="PackedScene" uid="uid://8bcme8ao4axa" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="5_drfkj"]
[ext_resource type="PackedScene" uid="uid://cve5oouhowtff" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="6_moun4"] [ext_resource type="PackedScene" uid="uid://mqj4jju3870v" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="6_moun4"]
[ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_ungov"] [ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_ungov"]
[ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="7_ungov"] [ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="7_ungov"]
[ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_agkuf"] [ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_agkuf"]
@@ -32,7 +32,7 @@ top_radius = 0.0
[sub_resource type="CylinderShape3D" id="CylinderShape3D_drfkj"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_drfkj"]
radius = 1.0 radius = 1.0
[node name="Sproingy" type="CharacterBody3D" groups=["enemy"]] [node name="Sproingy" type="CharacterBody3D"]
process_mode = 1 process_mode = 1
collision_layer = 10 collision_layer = 10
axis_lock_linear_y = true axis_lock_linear_y = true
@@ -84,6 +84,7 @@ collision_mask = 34
shape = SubResource("CylinderShape3D_drfkj") shape = SubResource("CylinderShape3D_drfkj")
[node name="Visual" type="Node3D" parent="."] [node name="Visual" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.975554, 0)
[node name="EnemyModelView" parent="Visual" instance=ExtResource("4_o3b7p")] [node name="EnemyModelView" parent="Visual" instance=ExtResource("4_o3b7p")]
unique_name_in_owner = true unique_name_in_owner = true
@@ -100,13 +101,14 @@ _followSpeed = 150.0
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("5_drfkj")] [node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("5_drfkj")]
unique_name_in_owner = true unique_name_in_owner = true
_maximumAttackTime = 4.0 _minimumAttackTime = 1.0
_maximumAttackTime = 3.0
_acquireTargetTime = 2.0 _acquireTargetTime = 2.0
[node name="NavigationAgent" type="NavigationAgent3D" parent="Components"] [node name="NavigationAgent" type="NavigationAgent3D" parent="Components"]
unique_name_in_owner = true unique_name_in_owner = true
avoidance_enabled = true avoidance_enabled = true
radius = 3.0 radius = 1.0
[node name="SFX" type="Node3D" parent="."] [node name="SFX" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.0617, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.0617, 0)

View File

@@ -6,11 +6,4 @@
script = ExtResource("1_1ncna") script = ExtResource("1_1ncna")
Name = "Sproingy" Name = "Sproingy"
Description = "A guy who likes to have fun." Description = "A guy who likes to have fun."
MaximumHP = ""
ATK = ""
DEF = ""
Affinity = ""
Weakness = ""
Drop1 = ""
Drop2 = ""
metadata/_custom_type_script = ExtResource("1_1ncna") metadata/_custom_type_script = ExtResource("1_1ncna")

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=80 format=3 uid="uid://bjcqrhtifpcvr"] [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"]
@@ -666,7 +666,7 @@ EnemyLoreInfo = SubResource("Resource_ivy74")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 2.05501, 0) transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 1.1044, 0)
pixel_size = 0.001 pixel_size = 0.001
billboard = 2 billboard = 2
shaded = true shaded = true
@@ -697,7 +697,7 @@ animation = &"idle_left_walk"
[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, 2.05501, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 1.1044, 0)
collision_layer = 64 collision_layer = 64
collision_mask = 64 collision_mask = 64
@@ -722,12 +722,12 @@ 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, 0, 2.05501, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1044, 0)
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."] [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, 0.00771421, 0.0453106) transform = Transform3D(0.115, 0, 0, 0, -5.02681e-09, 0.115, 0, -0.115, -5.02681e-09, -0.00018537, -0.942894, 0.0453106)
transparency = 0.1 transparency = 0.1
cast_shadow = 0 cast_shadow = 0
texture_filter = 0 texture_filter = 0

View File

@@ -1,12 +1,12 @@
[gd_scene load_steps=14 format=3 uid="uid://xeuulxx1p702"] [gd_scene load_steps=14 format=3 uid="uid://b0gwivt7cw7nd"]
[ext_resource type="Script" uid="uid://c4pdledq3bll3" path="res://src/enemy/enemy_types/02. michael/Michael.cs" id="1_lb5oy"] [ext_resource type="Script" uid="uid://c4pdledq3bll3" path="res://src/enemy/enemy_types/02. michael/Michael.cs" id="1_lb5oy"]
[ext_resource type="PackedScene" uid="uid://uqle8gaeajg6" path="res://src/enemy/enemy_types/02. michael/MichaelModelView.tscn" id="3_wrps7"] [ext_resource type="PackedScene" uid="uid://bjg8wyvp8q6oc" path="res://src/enemy/enemy_types/02. michael/MichaelModelView.tscn" id="3_wrps7"]
[ext_resource type="PackedScene" uid="uid://cn4fv2gv6raql" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="5_fkx5j"] [ext_resource type="PackedScene" uid="uid://2nkvacxsd46b" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="5_fkx5j"]
[ext_resource type="PackedScene" uid="uid://cve5oouhowtff" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="6_bun8r"] [ext_resource type="PackedScene" uid="uid://mqj4jju3870v" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="6_bun8r"]
[ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_x8mrp"] [ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_x8mrp"]
[ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="7_kwkfv"] [ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="7_kwkfv"]
[ext_resource type="PackedScene" uid="uid://cmhem5xknjsvc" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="7_x8mrp"] [ext_resource type="PackedScene" uid="uid://8bcme8ao4axa" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="7_x8mrp"]
[ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_upf7y"] [ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_upf7y"]
[ext_resource type="AudioStream" uid="uid://bn6ns3jxkw03b" path="res://src/audio/sfx/ENEMY_SPROING_death.ogg" id="9_fm627"] [ext_resource type="AudioStream" uid="uid://bn6ns3jxkw03b" path="res://src/audio/sfx/ENEMY_SPROING_death.ogg" id="9_fm627"]
@@ -15,16 +15,15 @@ height = 5.0
radius = 1.0 radius = 1.0
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0h5s2"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0h5s2"]
radius = 0.34933
height = 2.66932 height = 2.66932
[sub_resource type="CylinderShape3D" id="CylinderShape3D_eek1b"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_eek1b"]
radius = 1.0 radius = 1.0
[sub_resource type="SphereShape3D" id="SphereShape3D_wrps7"] [sub_resource type="SphereShape3D" id="SphereShape3D_wrps7"]
radius = 0.552847 radius = 1.0
[node name="Michael" type="CharacterBody3D" groups=["enemy"]] [node name="Michael" type="CharacterBody3D"]
process_mode = 1 process_mode = 1
collision_layer = 10 collision_layer = 10
collision_mask = 11 collision_mask = 11
@@ -33,13 +32,6 @@ axis_lock_angular_x = true
axis_lock_angular_z = true axis_lock_angular_z = true
motion_mode = 1 motion_mode = 1
script = ExtResource("1_lb5oy") script = ExtResource("1_lb5oy")
AeolicResistance = -20.0
HydricResistance = -20.0
IgenousResistance = -20.0
FerrumResistance = -20.0
TelluricResistance = -20.0
HolyResistance = -20.0
CurseResistance = -20.0
[node name="LineOfSight" type="Area3D" parent="."] [node name="LineOfSight" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
@@ -65,7 +57,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.08, 0, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0799522, 0.805832, 0)
[node name="PlayerDetector" type="Area3D" parent="."] [node name="PlayerDetector" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
@@ -90,9 +82,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.71715, 0)
[node name="PatrolBehavior" parent="Components" instance=ExtResource("5_fkx5j")] [node name="PatrolBehavior" parent="Components" instance=ExtResource("5_fkx5j")]
unique_name_in_owner = true unique_name_in_owner = true
_patrolSpeed = 60.0
_patrolRange = 15.0
_patrolTime = 20.0
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_bun8r")] [node name="FollowBehavior" parent="Components" instance=ExtResource("6_bun8r")]
unique_name_in_owner = true unique_name_in_owner = true
@@ -107,7 +96,7 @@ _acquireTargetTime = 2.0
[node name="NavigationAgent" type="NavigationAgent3D" parent="Components"] [node name="NavigationAgent" type="NavigationAgent3D" parent="Components"]
unique_name_in_owner = true unique_name_in_owner = true
avoidance_enabled = true avoidance_enabled = true
radius = 3.0 radius = 1.0
[node name="HitSounds" type="Node3D" parent="."] [node name="HitSounds" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.71715, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.71715, 0)

View File

@@ -1,16 +1,9 @@
[gd_resource type="Resource" script_class="EnemyLoreInfo" load_steps=2 format=3 uid="uid://6d7ivtna8dqb"] [gd_resource type="Resource" script_class="EnemyLoreInfo" load_steps=2 format=3 uid="uid://6d7ivtna8dqb"]
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="1_xsclu"] [ext_resource type="Script" path="res://src/enemy/EnemyLoreInfo.cs" id="1_xsclu"]
[resource] [resource]
script = ExtResource("1_xsclu") script = ExtResource("1_xsclu")
Name = "Michael" Name = "Michael"
Description = "This one doesn't like fun at all." Description = "This one doesn't like fun at all."
MaximumHP = ""
ATK = ""
DEF = ""
Affinity = ""
Weakness = ""
Drop1 = ""
Drop2 = ""
metadata/_custom_type_script = ExtResource("1_xsclu") metadata/_custom_type_script = ExtResource("1_xsclu")

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=142 format=3 uid="uid://uqle8gaeajg6"] [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"]
@@ -71,7 +71,7 @@
[ext_resource type="Texture2D" uid="uid://vxphbifafq0q" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (21).png" id="68_msiau"] [ext_resource type="Texture2D" uid="uid://vxphbifafq0q" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (21).png" id="68_msiau"]
[ext_resource type="Texture2D" uid="uid://7r30bjydumon" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (22).png" id="69_lec8c"] [ext_resource type="Texture2D" uid="uid://7r30bjydumon" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (22).png" id="69_lec8c"]
[ext_resource type="Texture2D" uid="uid://djspx2smexhme" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (23).png" id="70_f0jo7"] [ext_resource type="Texture2D" uid="uid://djspx2smexhme" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (23).png" id="70_f0jo7"]
[ext_resource type="PackedScene" uid="uid://cygwsc1gebeut" path="res://src/enemy/BasicEnemyAnimationTree.tscn" id="73_gby04"] [ext_resource type="PackedScene" uid="uid://dpoonda2dwwic" path="res://src/enemy/BasicEnemyAnimationTree.tscn" id="73_gby04"]
[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"]
@@ -1187,7 +1187,7 @@ EnemyLoreInfo = SubResource("Resource_gby04")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.98924, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25389, 0)
billboard = 2 billboard = 2
shaded = true shaded = true
alpha_cut = 1 alpha_cut = 1
@@ -1245,19 +1245,19 @@ libraries = {
} }
[node name="Michael Attack VFX" type="AnimatedSprite3D" parent="."] [node name="Michael Attack VFX" type="AnimatedSprite3D" parent="."]
transform = Transform3D(0.72, 0, 0, 0, 0.72, 0, 0, 0, 0.72, -0.129818, 2.35056, 0.532815) transform = Transform3D(0.72, 0, 0, 0, 0.72, 0, 0, 0, 0.72, -0.129818, 1.61521, 0.532815)
modulate = Color(0.977, 0.31, 1, 0.741176) modulate = Color(0.977, 0.31, 1, 0.741176)
billboard = 2 billboard = 2
sprite_frames = SubResource("SpriteFrames_suy1t") sprite_frames = SubResource("SpriteFrames_suy1t")
[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, 0, 2.07611, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.34076, 0)
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."] [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, 0.0073306, 0.0077811) transform = Transform3D(0.38, 0, 0, 0, -1.66103e-08, 0.38, 0, -0.38, -1.66103e-08, 0.00393164, -0.728023, 0.0077811)
transparency = 0.1 transparency = 0.1
cast_shadow = 0 cast_shadow = 0
modulate = Color(1, 1, 1, 0.591) modulate = Color(1, 1, 1, 0.591)

View File

@@ -1,6 +1,9 @@
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;
namespace Zennysoft.Game.Ma; namespace Zennysoft.Game.Ma;
@@ -42,11 +45,10 @@ public partial class FilthEater : Enemy2D, IHavePatrolBehavior, IHaveEngagePlaye
public override void PerformAction() public override void PerformAction()
{ {
var enemyPosition = new Vector3(GlobalPosition.X, _player.GlobalPosition.Y, GlobalPosition.Z); var rng = new RandomNumberGenerator();
if (enemyPosition.DistanceTo(_player.GlobalPosition) > 3) var options = new List<Action>() { EnemyModelView.PlayPrimaryAttackAnimation, EnemyModelView.PlaySecondaryAttackAnimation };
EnemyModelView.PlaySecondaryAttackAnimation(); var selection = rng.RandWeighted([PrimaryAttackChance, SecondaryAttackChance]);
else options[(int)selection].Invoke();
EnemyModelView.PlayPrimaryAttackAnimation();
} }
public override void _ExitTree() public override void _ExitTree()

View File

@@ -1,11 +1,11 @@
[gd_scene load_steps=16 format=3 uid="uid://bl426uws0i86l"] [gd_scene load_steps=16 format=3 uid="uid://cvk007twac22c"]
[ext_resource type="Script" uid="uid://cohal8w5ceneg" path="res://src/enemy/enemy_types/03. filth_eater/FilthEater.cs" id="1_p438s"] [ext_resource type="Script" uid="uid://cohal8w5ceneg" path="res://src/enemy/enemy_types/03. filth_eater/FilthEater.cs" id="1_p438s"]
[ext_resource type="PackedScene" uid="uid://b6sa6ntu4rbrm" path="res://src/enemy/enemy_types/03. filth_eater/FilthEaterModelView.tscn" id="3_rrwed"] [ext_resource type="PackedScene" uid="uid://bup8c4x1na3aw" path="res://src/enemy/enemy_types/03. filth_eater/FilthEaterModelView.tscn" id="3_rrwed"]
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="4_5eid5"] [ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="4_5eid5"]
[ext_resource type="PackedScene" uid="uid://cn4fv2gv6raql" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="5_pvjvo"] [ext_resource type="PackedScene" uid="uid://2nkvacxsd46b" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="5_pvjvo"]
[ext_resource type="PackedScene" uid="uid://cve5oouhowtff" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="6_fccr3"] [ext_resource type="PackedScene" uid="uid://mqj4jju3870v" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="6_fccr3"]
[ext_resource type="PackedScene" uid="uid://cmhem5xknjsvc" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="7_8l567"] [ext_resource type="PackedScene" uid="uid://8bcme8ao4axa" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="7_8l567"]
[ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="7_qbmfg"] [ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="7_qbmfg"]
[ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="8_m7220"] [ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="8_m7220"]
[ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="9_g602r"] [ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="9_g602r"]
@@ -16,11 +16,10 @@ height = 5.0
radius = 1.0 radius = 1.0
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
radius = 2.54294 radius = 1.0
height = 5.08589
[sub_resource type="SphereShape3D" id="SphereShape3D_0y048"] [sub_resource type="SphereShape3D" id="SphereShape3D_0y048"]
radius = 2.30121 radius = 1.0
[sub_resource type="Resource" id="Resource_fv5vf"] [sub_resource type="Resource" id="Resource_fv5vf"]
script = ExtResource("4_5eid5") script = ExtResource("4_5eid5")
@@ -36,10 +35,10 @@ Drop2 = ""
metadata/_custom_type_script = ExtResource("4_5eid5") metadata/_custom_type_script = ExtResource("4_5eid5")
[sub_resource type="CylinderShape3D" id="CylinderShape3D_qbmfg"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_qbmfg"]
height = 5.81738 height = 1.5
radius = 3.91016 radius = 2.0
[node name="FilthEater" type="CharacterBody3D" groups=["enemy"]] [node name="FilthEater" type="CharacterBody3D"]
process_mode = 1 process_mode = 1
collision_layer = 10 collision_layer = 10
collision_mask = 11 collision_mask = 11
@@ -49,7 +48,7 @@ script = ExtResource("1_p438s")
[node name="LineOfSight" type="Area3D" parent="."] [node name="LineOfSight" 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, 2.25757, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1.56859, 0)
collision_layer = 2 collision_layer = 2
collision_mask = 2 collision_mask = 2
@@ -59,17 +58,17 @@ shape = SubResource("CylinderShape3D_jbgmx")
[node name="CollisionShape" type="CollisionShape3D" parent="."] [node name="CollisionShape" type="CollisionShape3D" 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, 2.25757, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1.56859, 0)
shape = SubResource("CapsuleShape3D_cwfph") shape = SubResource("CapsuleShape3D_cwfph")
[node name="Raycast" type="RayCast3D" parent="."] [node name="Raycast" type="RayCast3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.31086, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.56859, 0)
target_position = Vector3(0, 0, -5) target_position = Vector3(0, 0, -5)
collision_mask = 3 collision_mask = 3
[node name="Collision" type="Area3D" parent="."] [node name="Collision" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25757, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.56859, 0)
collision_layer = 2048 collision_layer = 2048
collision_mask = 0 collision_mask = 0
@@ -79,21 +78,21 @@ shape = SubResource("SphereShape3D_0y048")
[node name="EnemyModelView" parent="." instance=ExtResource("3_rrwed")] [node name="EnemyModelView" parent="." instance=ExtResource("3_rrwed")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.114099, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.06859, 0)
EnemyLoreInfo = SubResource("Resource_fv5vf") EnemyLoreInfo = SubResource("Resource_fv5vf")
[node name="PlayerDetector" type="Area3D" parent="."] [node name="PlayerDetector" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25757, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.56859, 0)
collision_layer = 0 collision_layer = 0
collision_mask = 34 collision_mask = 34
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetector"] [node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetector"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2771, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.179932, 0)
shape = SubResource("CylinderShape3D_qbmfg") shape = SubResource("CylinderShape3D_qbmfg")
[node name="Components" type="Node3D" parent="."] [node name="Components" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25757, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.56859, 0)
[node name="PatrolBehavior" parent="Components" instance=ExtResource("5_pvjvo")] [node name="PatrolBehavior" parent="Components" instance=ExtResource("5_pvjvo")]
unique_name_in_owner = true unique_name_in_owner = true
@@ -109,11 +108,10 @@ _acquireTargetTime = 2.0
[node name="NavigationAgent" type="NavigationAgent3D" parent="Components"] [node name="NavigationAgent" type="NavigationAgent3D" parent="Components"]
unique_name_in_owner = true unique_name_in_owner = true
avoidance_enabled = true avoidance_enabled = true
height = 2.0 radius = 1.0
radius = 3.0
[node name="HitSounds" type="Node3D" parent="."] [node name="HitSounds" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25757, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.56859, 0)
[node name="AbsorbSFX" type="AudioStreamPlayer3D" parent="HitSounds"] [node name="AbsorbSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -6,11 +6,4 @@
script = ExtResource("1_hdamr") script = ExtResource("1_hdamr")
Name = "Filth Eater" Name = "Filth Eater"
Description = "Don't like this one" Description = "Don't like this one"
MaximumHP = ""
ATK = ""
DEF = ""
Affinity = ""
Weakness = ""
Drop1 = ""
Drop2 = ""
metadata/_custom_type_script = ExtResource("1_hdamr") metadata/_custom_type_script = ExtResource("1_hdamr")

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