Compare commits
66 Commits
e7a2b7314f
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 0a71978db2 | |||
| 8939460eda | |||
| 30758cd28d | |||
| 68a8769834 | |||
| 35f4b2018d | |||
| f6573607d9 | |||
| 138b4538e1 | |||
| 9decb2a02d | |||
| f7c0476fa6 | |||
| 8158156f09 | |||
| bbadf9ccec | |||
| d4a27f6d4d | |||
| 3e1ad0d0cb | |||
| 4c9497de68 | |||
| 3afa0c4eeb | |||
| 83624012b8 | |||
| 03d6957d3b | |||
| cdfb7e95a9 | |||
| 6620c86f57 | |||
| 7b2483ee74 | |||
| f55d7935f6 | |||
| 3ab491e0af | |||
| 8575cd6ddf | |||
| 403b136c5c | |||
| fc598ab48f | |||
| e889709a91 | |||
| fa248e5ba1 | |||
| 714d3a771c | |||
| 31fcb275f5 | |||
| 1a7ee21fb5 | |||
| 38177babc2 | |||
| c7b47cb32e | |||
| 5acfac10a5 | |||
| b30a8f3eb4 | |||
| 10a0dd69d1 | |||
| 5665e3306c | |||
| 9b2e79dbd2 | |||
| d2be390aa7 | |||
| 2ab6158849 | |||
| 19bf9563b6 | |||
| d934461b23 | |||
| 696d995e61 | |||
| 380e275766 | |||
| 90242f7950 | |||
| 71bf3046fc | |||
| 1ec278d0bb | |||
| 313fbbd759 | |||
| 2a16e2277b | |||
| d2a81bb1cf | |||
| 72f8b5c050 | |||
| 947d311f27 | |||
| 85e74821ad | |||
| 09db0ccd88 | |||
| 011f72fb63 | |||
| 543a967fd5 | |||
| 7b4fe37dd5 | |||
| 765821895b | |||
| 07a7942d6d | |||
| 0f849f11dc | |||
| bb46f0dcd9 | |||
| d8b99e07de | |||
| 22ca9076e8 | |||
| b9c1058566 | |||
| 6b7bbd71af | |||
| 150a21aabc | |||
| 189497458d |
@@ -0,0 +1,54 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Zennysoft.Game.Abstractions.Audio
|
||||||
|
{
|
||||||
|
public enum SoundEffect
|
||||||
|
{
|
||||||
|
HealHP,
|
||||||
|
TakeDamage,
|
||||||
|
HealVT,
|
||||||
|
IncreaseStat,
|
||||||
|
DecreaseStat,
|
||||||
|
Crit,
|
||||||
|
PickupItem,
|
||||||
|
PickupFailure,
|
||||||
|
OpenInventory,
|
||||||
|
MoveUI,
|
||||||
|
Equip,
|
||||||
|
Unequip,
|
||||||
|
SortInventory,
|
||||||
|
SelectUI,
|
||||||
|
CancelUI,
|
||||||
|
LevelUp,
|
||||||
|
Transfer,
|
||||||
|
RecallEnemies,
|
||||||
|
KillHalfEnemies,
|
||||||
|
TeleportToRandomRoom,
|
||||||
|
TeleportToExit,
|
||||||
|
AbsorbHPFromAllEnemies,
|
||||||
|
SwapHPAndVT,
|
||||||
|
TurnAllEnemiesIntoHealingItems,
|
||||||
|
WeaponQuickSlash,
|
||||||
|
WeaponSlowSlash,
|
||||||
|
WeaponPlasmaSword,
|
||||||
|
Eucharistia,
|
||||||
|
Buff,
|
||||||
|
Debuff,
|
||||||
|
Death,
|
||||||
|
Glue,
|
||||||
|
Identify,
|
||||||
|
IdentifyAll,
|
||||||
|
Rust,
|
||||||
|
FireDamage,
|
||||||
|
WaterDamage,
|
||||||
|
AirDamage,
|
||||||
|
EarthDamage,
|
||||||
|
HolyDamage,
|
||||||
|
CurseDamage,
|
||||||
|
AbsorbHP,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
namespace Zennysoft.Game.Abstractions
|
||||||
|
{
|
||||||
|
public interface IFloorSpawnTable
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@ public enum ElementType
|
|||||||
Hydric,
|
Hydric,
|
||||||
Igneous,
|
Igneous,
|
||||||
Ferrum,
|
Ferrum,
|
||||||
Holy,
|
Sankta,
|
||||||
Curse,
|
Shura,
|
||||||
All
|
All
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +1,37 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
using Zennysoft.Ma.Adapter;
|
using Zennysoft.Ma.Adapter;
|
||||||
|
using Zennysoft.Ma.Adapter.Entity;
|
||||||
|
|
||||||
namespace Zennysoft.Ma;
|
namespace Zennysoft.Ma;
|
||||||
public interface ISigil : IEntityComponent
|
public interface ISigil
|
||||||
{
|
{
|
||||||
public double AttackModifier { get; set; }
|
[Export]
|
||||||
|
public double DamageModifier { get; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public double DefenseModifier { get; set; }
|
public double DefenseModifier { get; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public int HealthModifier { get; set; }
|
public double MoveSpeedModifier { get; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public int VTModifier { get; set; }
|
public double HealAmountModifier { get; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public double LuckModifier { get; set; }
|
public double VTDrainSpeedModifier { get; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public double ElementalModifier { get; set; }
|
public ElementType ElementType { get; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public ElementType ElementType { get; set; }
|
public ElementalResistanceSet ElementalResistanceSet { get; }
|
||||||
|
|
||||||
|
[Export] public SigilTag SigilTag { get; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum SigilTag
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
AutoRevive,
|
||||||
|
HPDrain,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ namespace Zennysoft.Ma.Adapter.Entity
|
|||||||
{ ElementType.Igneous, igneousResistance },
|
{ ElementType.Igneous, igneousResistance },
|
||||||
{ ElementType.Ferrum, ferrumResistance },
|
{ ElementType.Ferrum, ferrumResistance },
|
||||||
{ ElementType.Telluric, telluricResistance },
|
{ ElementType.Telluric, telluricResistance },
|
||||||
{ ElementType.Holy, holyResistance },
|
{ ElementType.Sankta, holyResistance },
|
||||||
{ ElementType.Curse, curseResistance },
|
{ ElementType.Shura, curseResistance },
|
||||||
{ ElementType.All, aeolicResistance + hydricResistance + igneousResistance + ferrumResistance + telluricResistance + holyResistance + curseResistance },
|
{ ElementType.All, aeolicResistance + hydricResistance + igneousResistance + ferrumResistance + telluricResistance + holyResistance + curseResistance },
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -33,8 +33,8 @@ namespace Zennysoft.Ma.Adapter.Entity
|
|||||||
left.ElementalResistance[ElementType.Igneous] + right.ElementalResistance[ElementType.Igneous],
|
left.ElementalResistance[ElementType.Igneous] + right.ElementalResistance[ElementType.Igneous],
|
||||||
left.ElementalResistance[ElementType.Ferrum] + right.ElementalResistance[ElementType.Ferrum],
|
left.ElementalResistance[ElementType.Ferrum] + right.ElementalResistance[ElementType.Ferrum],
|
||||||
left.ElementalResistance[ElementType.Telluric] + right.ElementalResistance[ElementType.Telluric],
|
left.ElementalResistance[ElementType.Telluric] + right.ElementalResistance[ElementType.Telluric],
|
||||||
left.ElementalResistance[ElementType.Holy] + right.ElementalResistance[ElementType.Holy],
|
left.ElementalResistance[ElementType.Sankta] + right.ElementalResistance[ElementType.Sankta],
|
||||||
left.ElementalResistance[ElementType.Curse] + right.ElementalResistance[ElementType.Curse]);
|
left.ElementalResistance[ElementType.Shura] + right.ElementalResistance[ElementType.Shura]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,14 @@ namespace Zennysoft.Ma.Adapter.Entity
|
|||||||
|
|
||||||
public void OnMorph();
|
public void OnMorph();
|
||||||
|
|
||||||
|
public void OnBuff();
|
||||||
|
|
||||||
|
public void OnDebuff();
|
||||||
|
|
||||||
|
public void OnHealed();
|
||||||
|
|
||||||
|
public int GetDefeatCount(IEnemy enemyType);
|
||||||
|
|
||||||
public IDungeonRoom GetCurrentRoom(ImmutableList<IDungeonRoom> dungeonRooms);
|
public IDungeonRoom GetCurrentRoom(ImmutableList<IDungeonRoom> dungeonRooms);
|
||||||
|
|
||||||
public void MoveEnemyToNewRoom(IDungeonRoom newRoom);
|
public void MoveEnemyToNewRoom(IDungeonRoom newRoom);
|
||||||
@@ -35,6 +43,10 @@ namespace Zennysoft.Ma.Adapter.Entity
|
|||||||
|
|
||||||
public ElementalResistanceSet ElementalResistanceSet { get; }
|
public ElementalResistanceSet ElementalResistanceSet { get; }
|
||||||
|
|
||||||
|
public void SetEnemySpeedByMultiplier(double multiplier);
|
||||||
|
|
||||||
|
public IEnemyLootTable LootTable { get; }
|
||||||
|
|
||||||
public int InitialHP { get; }
|
public int InitialHP { get; }
|
||||||
|
|
||||||
public int InitialAttack { get; }
|
public int InitialAttack { get; }
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
namespace Zennysoft.Ma.Adapter.Entity;
|
||||||
|
|
||||||
|
public interface IEnemyLootTable
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -202,3 +202,23 @@ public class RevivePlayerAugment : IAugmentType
|
|||||||
_player.AutoRevive = false;
|
_player.AutoRevive = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class KeyStaffAugment : IAugmentType
|
||||||
|
{
|
||||||
|
private readonly IPlayer _player;
|
||||||
|
|
||||||
|
public KeyStaffAugment(IPlayer player)
|
||||||
|
{
|
||||||
|
_player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Apply()
|
||||||
|
{
|
||||||
|
_player.CanOpenDoors = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Remove()
|
||||||
|
{
|
||||||
|
_player.CanOpenDoors &= false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,5 +3,6 @@
|
|||||||
public enum ArmorTag
|
public enum ArmorTag
|
||||||
{
|
{
|
||||||
None,
|
None,
|
||||||
DegradeOnHit
|
DegradeOnHit,
|
||||||
|
ImmuneToRust
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,5 +23,6 @@ public enum ItemTag
|
|||||||
UseAllItems,
|
UseAllItems,
|
||||||
GlueOnEquip,
|
GlueOnEquip,
|
||||||
BreaksOnUnequip,
|
BreaksOnUnequip,
|
||||||
ContainsJewel
|
ContainsJewel,
|
||||||
|
KeyItem
|
||||||
}
|
}
|
||||||
@@ -17,5 +17,6 @@ public enum JewelTags
|
|||||||
ReviveUserOnce,
|
ReviveUserOnce,
|
||||||
TelluricElement,
|
TelluricElement,
|
||||||
IncreaseAtkDefLuck,
|
IncreaseAtkDefLuck,
|
||||||
IncreaseLuck
|
IncreaseLuck,
|
||||||
|
KeyStaff
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ public partial class GameState
|
|||||||
|
|
||||||
public readonly record struct LoadNextFloor;
|
public readonly record struct LoadNextFloor;
|
||||||
|
|
||||||
|
public readonly record struct ReturnToOverworld;
|
||||||
|
|
||||||
public readonly record struct InventoryButtonPressed;
|
public readonly record struct InventoryButtonPressed;
|
||||||
|
|
||||||
public readonly record struct InteractButtonPressed;
|
public readonly record struct InteractButtonPressed;
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ public partial class GameState
|
|||||||
|
|
||||||
public readonly record struct LoadNextFloor;
|
public readonly record struct LoadNextFloor;
|
||||||
|
|
||||||
|
public readonly record struct ReturnToOverworld;
|
||||||
|
|
||||||
public readonly record struct OpenTeleportScreen;
|
public readonly record struct OpenTeleportScreen;
|
||||||
|
|
||||||
public readonly record struct OpenFloorExitScreen;
|
public readonly record struct OpenFloorExitScreen;
|
||||||
|
|||||||
+8
-1
@@ -8,11 +8,12 @@ public partial class GameState
|
|||||||
public partial record State
|
public partial record State
|
||||||
{
|
{
|
||||||
[Meta, LogicBlock(typeof(State), Diagram = true)]
|
[Meta, LogicBlock(typeof(State), Diagram = true)]
|
||||||
public partial record FloorExitScreen : State, IGet<Input.LoadNextFloor>
|
public partial record FloorExitScreen : State, IGet<Input.LoadNextFloor>, IGet<Input.ReturnToOverworld>
|
||||||
{
|
{
|
||||||
public FloorExitScreen()
|
public FloorExitScreen()
|
||||||
{
|
{
|
||||||
OnAttach(() => Get<IGameRepo>().Pause());
|
OnAttach(() => Get<IGameRepo>().Pause());
|
||||||
|
OnDetach(() => Get<IGameRepo>().Resume());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Transition On(in Input.LoadNextFloor input)
|
public Transition On(in Input.LoadNextFloor input)
|
||||||
@@ -20,6 +21,12 @@ public partial class GameState
|
|||||||
Output(new Output.LoadNextFloor());
|
Output(new Output.LoadNextFloor());
|
||||||
return To<InGame>();
|
return To<InGame>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Transition On(in Input.ReturnToOverworld input)
|
||||||
|
{
|
||||||
|
Output(new Output.ReturnToOverworld());
|
||||||
|
return To<InGame>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Zennysoft.Game.Abstractions;
|
||||||
using Zennysoft.Ma.Adapter;
|
using Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
public interface IBaseInventoryItem
|
public interface IBaseInventoryItem
|
||||||
@@ -7,10 +8,15 @@ public interface IBaseInventoryItem
|
|||||||
public string ItemName { get; }
|
public string ItemName { get; }
|
||||||
public string StatDescription { get; }
|
public string StatDescription { get; }
|
||||||
public string FlavorText { get; }
|
public string FlavorText { get; }
|
||||||
public float SpawnRate { get; }
|
|
||||||
public int ThrowDamage { get; }
|
public int ThrowDamage { get; }
|
||||||
public float ThrowSpeed { get; }
|
public float ThrowSpeed { get; }
|
||||||
public ItemTag ItemTag { get; }
|
public ItemTag ItemTag { get; }
|
||||||
|
|
||||||
public abstract Texture2D GetTexture();
|
public abstract Texture2D GetTexture();
|
||||||
|
|
||||||
|
public float SpawnRate { get; }
|
||||||
|
|
||||||
|
public RarityTag RarityTag { get; }
|
||||||
|
|
||||||
|
public IFloorSpawnTable SpawnsOn { get; }
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,11 @@ public class RescuedItemDatabase
|
|||||||
private List<IBaseInventoryItem> _items { get; init; }
|
private List<IBaseInventoryItem> _items { get; init; }
|
||||||
private int _maxSize { get; init; } = 20;
|
private int _maxSize { get; init; } = 20;
|
||||||
|
|
||||||
|
public RescuedItemDatabase()
|
||||||
|
{
|
||||||
|
_items = [];
|
||||||
|
}
|
||||||
|
|
||||||
public RescuedItemDatabase(int maxSize)
|
public RescuedItemDatabase(int maxSize)
|
||||||
{
|
{
|
||||||
_items = [];
|
_items = [];
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
namespace Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
|
public enum FloorType
|
||||||
|
{
|
||||||
|
Overworld,
|
||||||
|
Altar,
|
||||||
|
Floor01,
|
||||||
|
Floor02,
|
||||||
|
Floor03,
|
||||||
|
Floor04,
|
||||||
|
Floor05,
|
||||||
|
Floor06,
|
||||||
|
Floor07,
|
||||||
|
Floor09,
|
||||||
|
Floor10,
|
||||||
|
Floor11,
|
||||||
|
Floor12,
|
||||||
|
Floor13,
|
||||||
|
Floor14,
|
||||||
|
Floor15,
|
||||||
|
BossFloorA,
|
||||||
|
BossFloorB,
|
||||||
|
GoddessOfGuidance,
|
||||||
|
TrueGoddessOfGuidance,
|
||||||
|
Cellular,
|
||||||
|
Grassland,
|
||||||
|
Platform,
|
||||||
|
River,
|
||||||
|
Server,
|
||||||
|
FinalFloor,
|
||||||
|
BadEnd,
|
||||||
|
HeartOfAllThings
|
||||||
|
}
|
||||||
@@ -11,5 +11,7 @@ public interface IDungeonFloor : INode3D
|
|||||||
|
|
||||||
public ImmutableList<IDungeonRoom> Rooms { get; }
|
public ImmutableList<IDungeonRoom> Rooms { get; }
|
||||||
|
|
||||||
|
public IDungeonRoom GetPlayersCurrentRoom();
|
||||||
|
|
||||||
public bool FloorIsLoaded { get; set; }
|
public bool FloorIsLoaded { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using Godot.Collections;
|
||||||
|
|
||||||
|
namespace Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
|
public enum RarityTag
|
||||||
|
{
|
||||||
|
Common, // 50%
|
||||||
|
Uncommon, // 35%
|
||||||
|
Rare, // 14%
|
||||||
|
Legendary, // 1%
|
||||||
|
NotSpawnable
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
|
public enum GroundType
|
||||||
|
{
|
||||||
|
Dirt,
|
||||||
|
Concrete,
|
||||||
|
Metal,
|
||||||
|
Marble
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
using Chickensoft.GodotNodeInterfaces;
|
using Chickensoft.GodotNodeInterfaces;
|
||||||
using Godot;
|
using Godot;
|
||||||
using Zennysoft.Game.Abstractions;
|
using Zennysoft.Game.Abstractions;
|
||||||
|
using Zennysoft.Game.Abstractions.Audio;
|
||||||
|
|
||||||
namespace Zennysoft.Ma.Adapter;
|
namespace Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
@@ -30,10 +31,14 @@ public interface IPlayer : IKillable, ICharacterBody3D
|
|||||||
|
|
||||||
public void SetSigil(ISigil sigil);
|
public void SetSigil(ISigil sigil);
|
||||||
|
|
||||||
|
public void ShowCamera(bool showCamera);
|
||||||
|
|
||||||
public void ApplyNewAugment(IAugmentItem jewel, IAugmentableItem equipableItem);
|
public void ApplyNewAugment(IAugmentItem jewel, IAugmentableItem equipableItem);
|
||||||
|
|
||||||
public IBaseInventoryItem IdentifyItem(IBaseInventoryItem unidentifiedItem);
|
public IBaseInventoryItem IdentifyItem(IBaseInventoryItem unidentifiedItem);
|
||||||
|
|
||||||
|
public void ShakePlayerCamera(float shakeIntensity, float shakeAmount);
|
||||||
|
|
||||||
public IInventory Inventory { get; }
|
public IInventory Inventory { get; }
|
||||||
|
|
||||||
public IHealthComponent HealthComponent { get; }
|
public IHealthComponent HealthComponent { get; }
|
||||||
@@ -60,6 +65,9 @@ public interface IPlayer : IKillable, ICharacterBody3D
|
|||||||
|
|
||||||
public void PlaySpellFX(SpellFXEnum spellEnum);
|
public void PlaySpellFX(SpellFXEnum spellEnum);
|
||||||
|
|
||||||
|
|
||||||
|
public void SetPlayerWalkSFX(GroundType groundType);
|
||||||
|
|
||||||
public bool AutoRevive { get; set; }
|
public bool AutoRevive { get; set; }
|
||||||
|
|
||||||
public int TotalAttack { get; }
|
public int TotalAttack { get; }
|
||||||
@@ -74,6 +82,8 @@ public interface IPlayer : IKillable, ICharacterBody3D
|
|||||||
|
|
||||||
public bool BriefImmunity { get; set; }
|
public bool BriefImmunity { get; set; }
|
||||||
|
|
||||||
|
public bool CanOpenDoors { get; set; }
|
||||||
|
|
||||||
public event Action PlayerDied;
|
public event Action PlayerDied;
|
||||||
public delegate IBaseInventoryItem RerollItem(IBaseInventoryItem item);
|
public delegate IBaseInventoryItem RerollItem(IBaseInventoryItem item);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using Chickensoft.Introspection;
|
||||||
|
using Chickensoft.Serialization;
|
||||||
|
|
||||||
|
namespace Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
|
[Meta, Id("npc_data")]
|
||||||
|
public partial record NpcData
|
||||||
|
{
|
||||||
|
[Save("stele_list")]
|
||||||
|
public required List<int> SteleDiscovered { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
using Chickensoft.Introspection;
|
||||||
|
using Chickensoft.Serialization;
|
||||||
|
|
||||||
|
namespace Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
|
[Meta, Id("sarco_data")]
|
||||||
|
public partial record SarcoData
|
||||||
|
{
|
||||||
|
[Save("aeolic_sarco")]
|
||||||
|
public bool AeolicSarcoAcquired { get; set; } = false;
|
||||||
|
|
||||||
|
[Save("igneous_sarco")]
|
||||||
|
public bool IgneousSarcoAcquired { get; set; } = false;
|
||||||
|
|
||||||
|
[Save("telluric_sarco")]
|
||||||
|
public bool TelluricSarcoAcquired { get; set; } = false;
|
||||||
|
|
||||||
|
[Save("hydric_sarco")]
|
||||||
|
public bool HydricSarcoAcquired { get; set; } = false;
|
||||||
|
|
||||||
|
[Save("ferrum_sarco")]
|
||||||
|
public bool FerrumSarcoAcquired { get; set; } = false;
|
||||||
|
|
||||||
|
[Save("sankta_sarco")]
|
||||||
|
public bool SanktaSarcoAcquired { get; set; } = false;
|
||||||
|
|
||||||
|
[Save("shura_sarco")]
|
||||||
|
public bool ShuraSarcoAcquired { get; set; } = false;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using Chickensoft.Introspection;
|
||||||
|
using Chickensoft.Serialization;
|
||||||
|
|
||||||
|
namespace Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
|
[Meta, Id("stat_data")]
|
||||||
|
public partial record StatData
|
||||||
|
{
|
||||||
|
[Save("enemies_defeated")]
|
||||||
|
public Dictionary<string, int> EnemiesDefeated { get; set; } = [];
|
||||||
|
|
||||||
|
public int TotalEnemiesDefeated => EnemiesDefeated.Values.Sum();
|
||||||
|
}
|
||||||
@@ -284,7 +284,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://src/map/Placeables/sarco.dialogue")
|
||||||
|
|
||||||
[layer_names]
|
[layer_names]
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Chickensoft.Collections;
|
using Chickensoft.Collections;
|
||||||
using Godot;
|
using Godot;
|
||||||
using System;
|
using System;
|
||||||
|
using Zennysoft.Game.Abstractions.Audio;
|
||||||
using Zennysoft.Ma.Adapter;
|
using Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
namespace Zennysoft.Game.Ma;
|
namespace Zennysoft.Game.Ma;
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
using Chickensoft.AutoInject;
|
using Chickensoft.AutoInject;
|
||||||
using Chickensoft.GodotNodeInterfaces;
|
using Chickensoft.GodotNodeInterfaces;
|
||||||
using Chickensoft.Introspection;
|
using Chickensoft.Introspection;
|
||||||
|
using Chickensoft.SaveFileBuilder;
|
||||||
|
using Chickensoft.Serialization;
|
||||||
using Godot;
|
using Godot;
|
||||||
using NathanHoad;
|
using NathanHoad;
|
||||||
using SimpleInjector.Lifestyles;
|
using SimpleInjector.Lifestyles;
|
||||||
|
using System.IO;
|
||||||
using System.IO.Abstractions;
|
using System.IO.Abstractions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Zennysoft.Game.Abstractions;
|
using Zennysoft.Game.Abstractions;
|
||||||
@@ -12,10 +15,13 @@ using Zennysoft.Ma.Adapter;
|
|||||||
|
|
||||||
namespace Zennysoft.Game.Ma;
|
namespace Zennysoft.Game.Ma;
|
||||||
|
|
||||||
public interface IApp : INode, IProvide<IAppRepo>;
|
public interface IApp : INode, IProvide<IAppRepo>, IProvide<IApp>
|
||||||
|
{
|
||||||
|
public GalleryData GalleryData { get; }
|
||||||
|
}
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
[Meta(typeof(IAutoNode))]
|
||||||
public partial class App : Node, IApp
|
public partial class App : Node, IApp, IProvide<ISaveChunk<GalleryData>>
|
||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
@@ -33,22 +39,31 @@ public partial class App : Node, IApp
|
|||||||
|
|
||||||
IAppRepo IProvide<IAppRepo>.Value() => AppRepo;
|
IAppRepo IProvide<IAppRepo>.Value() => AppRepo;
|
||||||
|
|
||||||
|
IApp IProvide<IApp>.Value() => this;
|
||||||
|
|
||||||
public IAppRepo AppRepo { get; set; } = default!;
|
public IAppRepo AppRepo { get; set; } = default!;
|
||||||
public IAppLogic AppLogic { get; set; } = default!;
|
public IAppLogic AppLogic { get; set; } = default!;
|
||||||
public AppLogic.IBinding AppBinding { get; set; } = default!;
|
public AppLogic.IBinding AppBinding { get; set; } = default!;
|
||||||
|
|
||||||
private Godot.Collections.Array _progress;
|
private Godot.Collections.Array _progress;
|
||||||
private SimpleInjector.Container _container;
|
private SimpleInjector.Container _container;
|
||||||
|
private IMaSaveFileManager _gallerySaveDataManager;
|
||||||
private EnemyViewer _dataViewer;
|
private EnemyViewer _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 string _gallerySavePath = string.Empty;
|
||||||
private ISaveFileManager _saveFileManager;
|
private ISaveFileManager _saveFileManager;
|
||||||
private IGame _game;
|
private IGame _game;
|
||||||
private IEnemyViewer _enemyViewer;
|
private IEnemyViewer _enemyViewer;
|
||||||
|
|
||||||
|
public ISaveChunk<GalleryData> GameChunk { get; set; } = default!;
|
||||||
|
ISaveChunk<GalleryData> IProvide<ISaveChunk<GalleryData>>.Value() => GameChunk;
|
||||||
|
public ISaveFile<GalleryData> GallerySaveFile { get; set; } = default!;
|
||||||
|
|
||||||
|
public GalleryData GalleryData { get; private set; }
|
||||||
|
|
||||||
private double _reportedProgress = 0;
|
private double _reportedProgress = 0;
|
||||||
|
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
@@ -63,6 +78,64 @@ public partial class App : Node, IApp
|
|||||||
_saveFileManager = _container.GetInstance<ISaveFileManager>();
|
_saveFileManager = _container.GetInstance<ISaveFileManager>();
|
||||||
_optionsSavePath = $"{OS.GetUserDataDir()}/options.json";
|
_optionsSavePath = $"{OS.GetUserDataDir()}/options.json";
|
||||||
_controllerSavePath = $"{OS.GetUserDataDir()}/controls.json";
|
_controllerSavePath = $"{OS.GetUserDataDir()}/controls.json";
|
||||||
|
_gallerySavePath = $"{OS.GetUserDataDir()}/gallery.json";
|
||||||
|
|
||||||
|
GalleryData = new GalleryData();
|
||||||
|
|
||||||
|
GameChunk = new SaveChunk<GalleryData>(
|
||||||
|
(chunk) =>
|
||||||
|
{
|
||||||
|
var galleryData = new GalleryData()
|
||||||
|
{
|
||||||
|
SproingyFifty = GalleryData.SproingyFifty,
|
||||||
|
MichaelFifty = GalleryData.MichaelFifty,
|
||||||
|
FilthEaterFifty = GalleryData.FilthEaterFifty,
|
||||||
|
SaraFifty = GalleryData.SaraFifty,
|
||||||
|
BallosFifty = GalleryData.BallosFifty,
|
||||||
|
PlanterFifty = GalleryData.PlanterFifty,
|
||||||
|
ChintheFifty = GalleryData.ChintheFifty,
|
||||||
|
AmbassadorGreenFifty = GalleryData.AmbassadorGreenFifty,
|
||||||
|
AmbassadorRedFifty = GalleryData.AmbassadorRedFifty,
|
||||||
|
AmbassadorSteelFifty = GalleryData.AmbassadorSteelFifty,
|
||||||
|
AgniDemonFifty = GalleryData.AgniDemonFifty,
|
||||||
|
AqueousDemonFifty = GalleryData.AqueousDemonFifty,
|
||||||
|
EdenPillarFifty = GalleryData.EdenPillarFifty,
|
||||||
|
PalanFifty = GalleryData.PalanFifty,
|
||||||
|
ShieldOfHeavenFifty = GalleryData.ShieldOfHeavenFifty,
|
||||||
|
GoldSproingFifty = GalleryData.GoldSproingFifty,
|
||||||
|
TotalEnemiesFifty = GalleryData.TotalEnemiesFifty,
|
||||||
|
TotalEnemiesHundred = GalleryData.TotalEnemiesHundred,
|
||||||
|
NormalEnd = GalleryData.NormalEnd,
|
||||||
|
TrueEnd = GalleryData.TrueEnd,
|
||||||
|
BadEnd = GalleryData.BadEnd,
|
||||||
|
StelesTen = GalleryData.StelesTen
|
||||||
|
};
|
||||||
|
return galleryData;
|
||||||
|
},
|
||||||
|
onLoad:
|
||||||
|
(chunk, data) =>
|
||||||
|
{
|
||||||
|
GalleryData = data ?? new GalleryData();
|
||||||
|
});
|
||||||
|
|
||||||
|
_gallerySaveDataManager = new MaSaveFileManager(_gallerySavePath);
|
||||||
|
GallerySaveFile = new SaveFile<GalleryData>(
|
||||||
|
root: GameChunk,
|
||||||
|
onSave: _gallerySaveDataManager.Save,
|
||||||
|
onLoad: async () =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var galleryData = await _gallerySaveDataManager.Load<GalleryData>();
|
||||||
|
return galleryData;
|
||||||
|
}
|
||||||
|
catch (FileNotFoundException)
|
||||||
|
{
|
||||||
|
GD.Print("No save file found.");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
MainMenu.StartGame += OnStartGame;
|
MainMenu.StartGame += OnStartGame;
|
||||||
MainMenu.EnemyViewer += OnEnemyViewer;
|
MainMenu.EnemyViewer += OnEnemyViewer;
|
||||||
@@ -119,7 +192,7 @@ public partial class App : Node, IApp
|
|||||||
MainMenu.OptionsButton.GrabFocus();
|
MainMenu.OptionsButton.GrabFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GalleryExited()
|
private async void GalleryExited()
|
||||||
{
|
{
|
||||||
GalleryMenu.Hide();
|
GalleryMenu.Hide();
|
||||||
MainMenu.GalleryButton.GrabFocus();
|
MainMenu.GalleryButton.GrabFocus();
|
||||||
@@ -204,6 +277,7 @@ public partial class App : Node, IApp
|
|||||||
_game.GameLoaded += OnGameLoaded;
|
_game.GameLoaded += OnGameLoaded;
|
||||||
_game.GameExitRequested += GameExitRequested;
|
_game.GameExitRequested += GameExitRequested;
|
||||||
CallDeferred(MethodName.AddChild, scene);
|
CallDeferred(MethodName.AddChild, scene);
|
||||||
|
_game.UnlockGalleryItem += UnlockGalleryItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnGameLoaded() => LoadingScreen.HideLoadingScreen();
|
private void OnGameLoaded() => LoadingScreen.HideLoadingScreen();
|
||||||
@@ -216,6 +290,56 @@ public partial class App : Node, IApp
|
|||||||
LoadingScreen.HideLoadingScreen();
|
LoadingScreen.HideLoadingScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UnlockGalleryItem(string obj)
|
||||||
|
{
|
||||||
|
if (obj == nameof(GalleryData.SproingyFifty))
|
||||||
|
GalleryData.SproingyFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.MichaelFifty))
|
||||||
|
GalleryData.MichaelFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.FilthEaterFifty))
|
||||||
|
GalleryData.FilthEaterFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.SaraFifty))
|
||||||
|
GalleryData.SaraFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.BallosFifty))
|
||||||
|
GalleryData.BallosFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.PlanterFifty))
|
||||||
|
GalleryData.PlanterFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.ChintheFifty))
|
||||||
|
GalleryData.ChintheFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.AmbassadorGreenFifty))
|
||||||
|
GalleryData.AmbassadorGreenFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.AmbassadorRedFifty))
|
||||||
|
GalleryData.AmbassadorRedFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.AmbassadorSteelFifty))
|
||||||
|
GalleryData.AmbassadorSteelFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.AgniDemonFifty))
|
||||||
|
GalleryData.AgniDemonFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.AqueousDemonFifty))
|
||||||
|
GalleryData.AqueousDemonFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.EdenPillarFifty))
|
||||||
|
GalleryData.EdenPillarFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.PalanFifty))
|
||||||
|
GalleryData.PalanFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.ShieldOfHeavenFifty))
|
||||||
|
GalleryData.ShieldOfHeavenFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.GoldSproingFifty))
|
||||||
|
GalleryData.GoldSproingFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.TotalEnemiesFifty))
|
||||||
|
GalleryData.TotalEnemiesFifty = true;
|
||||||
|
if (obj == nameof(GalleryData.TotalEnemiesHundred))
|
||||||
|
GalleryData.TotalEnemiesHundred = true;
|
||||||
|
if (obj == nameof(GalleryData.NormalEnd))
|
||||||
|
GalleryData.NormalEnd = true;
|
||||||
|
if (obj == nameof(GalleryData.TrueEnd))
|
||||||
|
GalleryData.TrueEnd = true;
|
||||||
|
if (obj == nameof(GalleryData.BadEnd))
|
||||||
|
GalleryData.BadEnd = true;
|
||||||
|
if (obj == nameof(GalleryData.StelesTen))
|
||||||
|
GalleryData.StelesTen = true;
|
||||||
|
|
||||||
|
GallerySaveFile.Save();
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<Node> LoadSceneInternal(string sceneName)
|
private async Task<Node> LoadSceneInternal(string sceneName)
|
||||||
{
|
{
|
||||||
LoadingScreen.ShowLoadingScreen();
|
LoadingScreen.ShowLoadingScreen();
|
||||||
@@ -239,7 +363,11 @@ public partial class App : Node, IApp
|
|||||||
OptionsMenu.GameTab.GrabFocus();
|
OptionsMenu.GameTab.GrabFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void OnGallery() => GalleryMenu.Show();
|
private async void OnGallery()
|
||||||
|
{
|
||||||
|
GalleryData = await _gallerySaveDataManager.Load<GalleryData>();
|
||||||
|
GalleryMenu.Show();
|
||||||
|
}
|
||||||
|
|
||||||
public void OnQuit() => AppLogic.Input(new AppLogic.Input.QuitGame());
|
public void OnQuit() => AppLogic.Input(new AppLogic.Input.QuitGame());
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ namespace Zennysoft.Game.Ma;
|
|||||||
|
|
||||||
public partial class BGMPlayer : DimmableAudioStreamPlayer
|
public partial class BGMPlayer : DimmableAudioStreamPlayer
|
||||||
{
|
{
|
||||||
private static string _bgmPath = $"res://src/audio/bgm/";
|
private static readonly string _bgmPath = $"res://src/audio/bgm/";
|
||||||
private IDictionary<BackgroundMusic, AudioStream> _bgmDictionary;
|
private Dictionary<BackgroundMusic, AudioStream> _bgmDictionary;
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
_bgmDictionary = new Dictionary<BackgroundMusic, AudioStream>();
|
_bgmDictionary = [];
|
||||||
var backgroundMusic = Enum.GetValues(typeof(BackgroundMusic));
|
var backgroundMusic = Enum.GetValues(typeof(BackgroundMusic));
|
||||||
foreach (var bgm in backgroundMusic)
|
foreach (var bgm in backgroundMusic)
|
||||||
_bgmDictionary.Add((BackgroundMusic)bgm, GD.Load<AudioStream>(_bgmPath + bgm + ".ogg"));
|
_bgmDictionary.Add((BackgroundMusic)bgm, GD.Load<AudioStream>(_bgmPath + bgm + ".ogg"));
|
||||||
@@ -21,6 +21,7 @@ public partial class BGMPlayer : DimmableAudioStreamPlayer
|
|||||||
|
|
||||||
public void Play(BackgroundMusic backgroundMusic)
|
public void Play(BackgroundMusic backgroundMusic)
|
||||||
{
|
{
|
||||||
|
FadeOut();
|
||||||
_bgmDictionary.TryGetValue(backgroundMusic, out var stream);
|
_bgmDictionary.TryGetValue(backgroundMusic, out var stream);
|
||||||
Stream = stream;
|
Stream = stream;
|
||||||
FadeIn();
|
FadeIn();
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
[gd_scene load_steps=29 format=3 uid="uid://brgi35xj3b4ud"]
|
[gd_scene load_steps=42 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"]
|
||||||
[ext_resource type="AudioStream" uid="uid://1nuk6xpkwujl" path="res://src/audio/sfx/player_gain_VT.ogg" id="3_kac56"]
|
|
||||||
[ext_resource type="AudioStream" uid="uid://bfrp34y2m8b1l" path="res://src/audio/sfx/item_number_increase.ogg" id="4_fa8i8"]
|
[ext_resource type="AudioStream" uid="uid://bfrp34y2m8b1l" path="res://src/audio/sfx/item_number_increase.ogg" id="4_fa8i8"]
|
||||||
[ext_resource type="AudioStream" uid="uid://xjdv23q5cqhm" path="res://src/audio/sfx/UI_PAUSE.ogg" id="5_p5cio"]
|
[ext_resource type="AudioStream" uid="uid://xjdv23q5cqhm" path="res://src/audio/sfx/UI_PAUSE.ogg" id="5_p5cio"]
|
||||||
[ext_resource type="AudioStream" uid="uid://clhdcrs4dxt6h" path="res://src/audio/sfx/UI_MOVE.ogg" id="6_r16t0"]
|
[ext_resource type="AudioStream" uid="uid://clhdcrs4dxt6h" path="res://src/audio/sfx/UI_MOVE.ogg" id="6_r16t0"]
|
||||||
@@ -15,6 +14,8 @@
|
|||||||
[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"]
|
||||||
[ext_resource type="AudioStream" uid="uid://oslvh60ec5gc" path="res://src/audio/sfx/UI_CANCEL_BACK.ogg" id="11_rloay"]
|
[ext_resource type="AudioStream" uid="uid://oslvh60ec5gc" path="res://src/audio/sfx/UI_CANCEL_BACK.ogg" id="11_rloay"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bo2u1ceci6k1i" path="res://src/audio/sfx/PLAYER_quicker_slash.ogg" id="13_fa8i8"]
|
[ext_resource type="AudioStream" uid="uid://bo2u1ceci6k1i" path="res://src/audio/sfx/PLAYER_quicker_slash.ogg" id="13_fa8i8"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://d1ugsv7abo0jb" path="res://src/audio/sfx/player_misc.ogg" id="14_bi4v5"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://b0l5a8lg6wtig" path="res://src/audio/sfx/UI_FAILURE TO PICK UP.ogg" id="14_k25ba"]
|
||||||
[ext_resource type="AudioStream" uid="uid://na0lxb1lib11" path="res://src/audio/sfx/player_crit.ogg" id="14_p5cio"]
|
[ext_resource type="AudioStream" uid="uid://na0lxb1lib11" path="res://src/audio/sfx/player_crit.ogg" id="14_p5cio"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bsc83jkt7uisg" path="res://src/audio/sfx/PLAYER_GET_ITEM.ogg" id="15_r16t0"]
|
[ext_resource type="AudioStream" uid="uid://bsc83jkt7uisg" path="res://src/audio/sfx/PLAYER_GET_ITEM.ogg" id="15_r16t0"]
|
||||||
[ext_resource type="AudioStream" uid="uid://ckf3md1ujxhvm" path="res://src/audio/sfx/player_levelup.ogg" id="16_sew62"]
|
[ext_resource type="AudioStream" uid="uid://ckf3md1ujxhvm" path="res://src/audio/sfx/player_levelup.ogg" id="16_sew62"]
|
||||||
@@ -22,12 +23,24 @@
|
|||||||
[ext_resource type="AudioStream" uid="uid://brb8xj4vsgcw4" path="res://src/audio/sfx/player_DEBUFF.ogg" id="18_bi4v5"]
|
[ext_resource type="AudioStream" uid="uid://brb8xj4vsgcw4" path="res://src/audio/sfx/player_DEBUFF.ogg" id="18_bi4v5"]
|
||||||
[ext_resource type="AudioStream" uid="uid://coeynqnn61c43" path="res://src/audio/sfx/environment_ITEM_TRANSFER.ogg" id="18_l6w22"]
|
[ext_resource type="AudioStream" uid="uid://coeynqnn61c43" path="res://src/audio/sfx/environment_ITEM_TRANSFER.ogg" id="18_l6w22"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bfrmm07vthpwt" path="res://src/audio/sfx/item_divine_recall.ogg" id="19_nerso"]
|
[ext_resource type="AudioStream" uid="uid://bfrmm07vthpwt" path="res://src/audio/sfx/item_divine_recall.ogg" id="19_nerso"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://dl6svxp5ow2vk" path="res://src/audio/sfx/player_death_1.ogg" id="19_uv31i"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bu8akh5uh3ioo" path="res://src/audio/sfx/item_devic_balance_element1.ogg" id="20_rloay"]
|
[ext_resource type="AudioStream" uid="uid://bu8akh5uh3ioo" path="res://src/audio/sfx/item_devic_balance_element1.ogg" id="20_rloay"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://nk8m8xwqpfho" path="res://src/audio/sfx/general_RUST.ogg" id="21_6auhl"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bjkn6s2xjxuji" path="res://src/audio/sfx/item_gospel_dimension.ogg" id="21_6hsck"]
|
[ext_resource type="AudioStream" uid="uid://bjkn6s2xjxuji" path="res://src/audio/sfx/item_gospel_dimension.ogg" id="21_6hsck"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://droe1wrqv7oau" path="res://src/audio/sfx/general_fire_damage.ogg" id="21_8d214"]
|
||||||
[ext_resource type="AudioStream" uid="uid://c3ur4bgvmsidi" path="res://src/audio/sfx/item_gospel_escape.ogg" id="22_3wq6u"]
|
[ext_resource type="AudioStream" uid="uid://c3ur4bgvmsidi" path="res://src/audio/sfx/item_gospel_escape.ogg" id="22_3wq6u"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://4fx3xkjgffsq" path="res://src/audio/sfx/generaL_water_damage.ogg" id="22_rrmug"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bc2pe0l5nr5ro" path="res://src/audio/sfx/ITEM_kyuu_hit.ogg" id="23_aaerj"]
|
[ext_resource type="AudioStream" uid="uid://bc2pe0l5nr5ro" path="res://src/audio/sfx/ITEM_kyuu_hit.ogg" id="23_aaerj"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://bdb2wp6hc8dvh" path="res://src/audio/sfx/generaL_wind_damage.ogg" id="23_gcy74"]
|
||||||
[ext_resource type="AudioStream" uid="uid://ck0nc757t0jq5" path="res://src/audio/sfx/ITEM_PERSPECTIVE.ogg" id="23_jdwj3"]
|
[ext_resource type="AudioStream" uid="uid://ck0nc757t0jq5" path="res://src/audio/sfx/ITEM_PERSPECTIVE.ogg" id="23_jdwj3"]
|
||||||
[ext_resource type="AudioStream" uid="uid://dblijlgm8njjv" path="res://src/audio/sfx/item_sine_morphization.ogg" id="24_jdwj3"]
|
[ext_resource type="AudioStream" uid="uid://dblijlgm8njjv" path="res://src/audio/sfx/item_sine_morphization.ogg" id="24_jdwj3"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://bfpxwnxn2o0cy" path="res://src/audio/sfx/general_telluric_damage.ogg" id="24_vn70h"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://n8anuovfoqmp" path="res://src/audio/sfx/general_holy_damage_2.ogg" id="25_153g4"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://b4ks6pgrqn0gh" path="res://src/audio/sfx/general_curse_damage.ogg" id="26_je0ug"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="28_ur8ax"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://d2h4l0gxcs5i2" path="res://src/audio/sfx/item_glued.ogg" id="30_cx2n8"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://dcfqkapxwvmdd" path="res://src/audio/sfx/iTEM_identify_ALL.ogg" id="31_vpeit"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://bio3xjbanwas1" path="res://src/audio/sfx/player_item_identified.ogg" id="40_rqu44"]
|
||||||
|
|
||||||
[node name="SfxDatabase" type="Node"]
|
[node name="SfxDatabase" type="Node"]
|
||||||
script = ExtResource("1_ojkqd")
|
script = ExtResource("1_ojkqd")
|
||||||
@@ -76,7 +89,7 @@ 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
|
process_mode = 3
|
||||||
stream = ExtResource("3_kac56")
|
stream = ExtResource("16_sew62")
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="WeaponQuickSlashSound" type="AudioStreamPlayer" parent="Player"]
|
[node name="WeaponQuickSlashSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
@@ -109,10 +122,16 @@ process_mode = 3
|
|||||||
stream = ExtResource("15_r16t0")
|
stream = ExtResource("15_r16t0")
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="PickupFailureSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("14_k25ba")
|
||||||
|
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
|
process_mode = 3
|
||||||
stream = ExtResource("16_sew62")
|
stream = ExtResource("14_bi4v5")
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="EquipSound" type="AudioStreamPlayer" parent="Player"]
|
[node name="EquipSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
@@ -139,6 +158,60 @@ process_mode = 3
|
|||||||
stream = ExtResource("18_bi4v5")
|
stream = ExtResource("18_bi4v5")
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="DeathSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("19_uv31i")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="RustSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("21_6auhl")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="FireDamageSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("21_8d214")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="WaterDamageSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("22_rrmug")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="AirDamageSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("23_gcy74")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="EarthDamageSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("24_vn70h")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="HolyDamageSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("25_153g4")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="CurseDamageSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("26_je0ug")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="AbsorbHPSound" type="AudioStreamPlayer" parent="Player"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("28_ur8ax")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="Item" type="Node" parent="."]
|
[node name="Item" type="Node" parent="."]
|
||||||
|
|
||||||
[node name="TransferItemSound" type="AudioStreamPlayer" parent="Item"]
|
[node name="TransferItemSound" type="AudioStreamPlayer" parent="Item"]
|
||||||
@@ -206,3 +279,21 @@ unique_name_in_owner = true
|
|||||||
process_mode = 3
|
process_mode = 3
|
||||||
stream = ExtResource("24_jdwj3")
|
stream = ExtResource("24_jdwj3")
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="GlueSound" type="AudioStreamPlayer" parent="Item"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("30_cx2n8")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="IdentifyAllSound" type="AudioStreamPlayer" parent="Item"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("31_vpeit")
|
||||||
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="IdentifySound" type="AudioStreamPlayer" parent="Item"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
process_mode = 3
|
||||||
|
stream = ExtResource("40_rqu44")
|
||||||
|
bus = &"SFX"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ using Chickensoft.AutoInject;
|
|||||||
using Chickensoft.Introspection;
|
using Chickensoft.Introspection;
|
||||||
using Godot;
|
using Godot;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Zennysoft.Game.Abstractions.Audio;
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode)), Id("sfx_database")]
|
[Meta(typeof(IAutoNode)), Id("sfx_database")]
|
||||||
public partial class SfxDatabase : Node
|
public partial class SfxDatabase : Node
|
||||||
@@ -27,12 +28,14 @@ public partial class SfxDatabase : Node
|
|||||||
{SoundEffect.DecreaseStat, DecreaseStatSound },
|
{SoundEffect.DecreaseStat, DecreaseStatSound },
|
||||||
{SoundEffect.Crit, CritSound },
|
{SoundEffect.Crit, CritSound },
|
||||||
{SoundEffect.PickupItem, PickupItemSound },
|
{SoundEffect.PickupItem, PickupItemSound },
|
||||||
|
{SoundEffect.PickupFailure, PickupFailureSound },
|
||||||
{SoundEffect.OpenInventory, OpenInventorySound },
|
{SoundEffect.OpenInventory, OpenInventorySound },
|
||||||
{SoundEffect.MoveUI, MoveSound },
|
{SoundEffect.MoveUI, MoveSound },
|
||||||
{SoundEffect.Equip, EquipSound },
|
{SoundEffect.Equip, EquipSound },
|
||||||
{SoundEffect.Unequip, UnequipSound },
|
{SoundEffect.Unequip, UnequipSound },
|
||||||
{SoundEffect.Buff, BuffSound },
|
{SoundEffect.Buff, BuffSound },
|
||||||
{SoundEffect.Debuff, DebuffSound },
|
{SoundEffect.Debuff, DebuffSound },
|
||||||
|
{SoundEffect.Death, DeathSound },
|
||||||
{SoundEffect.SortInventory, SortSound },
|
{SoundEffect.SortInventory, SortSound },
|
||||||
{SoundEffect.SelectUI, SelectSound },
|
{SoundEffect.SelectUI, SelectSound },
|
||||||
{SoundEffect.CancelUI, CancelSound },
|
{SoundEffect.CancelUI, CancelSound },
|
||||||
@@ -44,9 +47,17 @@ public partial class SfxDatabase : Node
|
|||||||
{SoundEffect.TeleportToExit, TeleportToExitSound},
|
{SoundEffect.TeleportToExit, TeleportToExitSound},
|
||||||
{SoundEffect.AbsorbHPFromAllEnemies, AbsorbHPFromAllEnemiesSound},
|
{SoundEffect.AbsorbHPFromAllEnemies, AbsorbHPFromAllEnemiesSound},
|
||||||
{SoundEffect.TurnAllEnemiesIntoHealingItems, TurnAllEnemiesIntoHealingItemsSound},
|
{SoundEffect.TurnAllEnemiesIntoHealingItems, TurnAllEnemiesIntoHealingItemsSound},
|
||||||
{SoundEffect.WeaponQuickSlash, WeaponQuickSlashSound },
|
{SoundEffect.Glue, GlueSound },
|
||||||
{SoundEffect.WeaponSlowSlash, WeaponSlowSlashSound },
|
{SoundEffect.Identify, IdentifySound},
|
||||||
{SoundEffect.WeaponPlasmaSword, WeaponPlasmaSword },
|
{SoundEffect.IdentifyAll, IdentifyAllSound},
|
||||||
|
{SoundEffect.Rust, RustSound },
|
||||||
|
{SoundEffect.FireDamage, FireDamageSound},
|
||||||
|
{SoundEffect.AirDamage, AirDamageSound},
|
||||||
|
{SoundEffect.WaterDamage, WaterDamageSound},
|
||||||
|
{SoundEffect.EarthDamage, EarthDamageSound},
|
||||||
|
{SoundEffect.HolyDamage, HolyDamageSound},
|
||||||
|
{SoundEffect.CurseDamage, CurseDamageSound },
|
||||||
|
{SoundEffect.AbsorbHP, AbsorbHPSound},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,19 +65,19 @@ 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 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 PickupFailureSound { get; set; } = default!;
|
||||||
[Node] private AudioStreamPlayer OpenInventorySound { get; set; }
|
[Node] private AudioStreamPlayer OpenInventorySound { get; set; }
|
||||||
[Node] private AudioStreamPlayer MoveSound { get; set; }
|
[Node] private AudioStreamPlayer MoveSound { get; set; }
|
||||||
[Node] private AudioStreamPlayer EquipSound { get; set; }
|
[Node] private AudioStreamPlayer EquipSound { get; set; }
|
||||||
[Node] private AudioStreamPlayer UnequipSound { get; set; }
|
[Node] private AudioStreamPlayer UnequipSound { get; set; }
|
||||||
[Node] private AudioStreamPlayer BuffSound { get; set; }
|
[Node] private AudioStreamPlayer BuffSound { get; set; }
|
||||||
[Node] private AudioStreamPlayer DebuffSound { get; set; }
|
[Node] private AudioStreamPlayer DebuffSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer DeathSound { get; set; }
|
||||||
[Node] private AudioStreamPlayer SortSound { get; set; }
|
[Node] private AudioStreamPlayer SortSound { get; set; }
|
||||||
[Node] private AudioStreamPlayer SelectSound { get; set; }
|
[Node] private AudioStreamPlayer SelectSound { get; set; }
|
||||||
[Node] private AudioStreamPlayer CancelSound { get; set; }
|
[Node] private AudioStreamPlayer CancelSound { get; set; }
|
||||||
@@ -79,6 +90,17 @@ public partial class SfxDatabase : Node
|
|||||||
[Node] private AudioStreamPlayer AbsorbHPFromAllEnemiesSound { get; set; }
|
[Node] private AudioStreamPlayer AbsorbHPFromAllEnemiesSound { get; set; }
|
||||||
[Node] private AudioStreamPlayer SwapHPAndVTSound { get; set; }
|
[Node] private AudioStreamPlayer SwapHPAndVTSound { get; set; }
|
||||||
[Node] private AudioStreamPlayer TurnAllEnemiesIntoHealingItemsSound { get; set; }
|
[Node] private AudioStreamPlayer TurnAllEnemiesIntoHealingItemsSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer GlueSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer IdentifySound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer IdentifyAllSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer RustSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer FireDamageSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer AirDamageSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer WaterDamageSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer EarthDamageSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer HolyDamageSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer CurseDamageSound { get; set; }
|
||||||
|
[Node] private AudioStreamPlayer AbsorbHPSound { get; set; }
|
||||||
|
|
||||||
private Dictionary<SoundEffect, AudioStreamPlayer> _sfxMap;
|
private Dictionary<SoundEffect, AudioStreamPlayer> _sfxMap;
|
||||||
|
|
||||||
@@ -90,36 +112,3 @@ public partial class SfxDatabase : Node
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum SoundEffect
|
|
||||||
{
|
|
||||||
HealHP,
|
|
||||||
TakeDamage,
|
|
||||||
HealVT,
|
|
||||||
IncreaseStat,
|
|
||||||
DecreaseStat,
|
|
||||||
Crit,
|
|
||||||
PickupItem,
|
|
||||||
OpenInventory,
|
|
||||||
MoveUI,
|
|
||||||
Equip,
|
|
||||||
Unequip,
|
|
||||||
SortInventory,
|
|
||||||
SelectUI,
|
|
||||||
CancelUI,
|
|
||||||
LevelUp,
|
|
||||||
Transfer,
|
|
||||||
RecallEnemies,
|
|
||||||
KillHalfEnemies,
|
|
||||||
TeleportToRandomRoom,
|
|
||||||
TeleportToExit,
|
|
||||||
AbsorbHPFromAllEnemies,
|
|
||||||
SwapHPAndVT,
|
|
||||||
TurnAllEnemiesIntoHealingItems,
|
|
||||||
WeaponQuickSlash,
|
|
||||||
WeaponSlowSlash,
|
|
||||||
WeaponPlasmaSword,
|
|
||||||
Eucharistia,
|
|
||||||
Buff,
|
|
||||||
Debuff
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,17 +3,17 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://7esvkguxl3cb"
|
uid="uid://7esvkguxl3cb"
|
||||||
path="res://.godot/imported/AMB_BAD_END_EARTHQUAKE.ogg-e9eab5a667607eac71d31fddf6267597.oggvorbisstr"
|
path="res://.godot/imported/AMB_BAD_END_EARTHQUAKE.ogg-03e817303decd8b8e41745609f87f10c.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/AMB_BAD_END_EARTHQUAKE.ogg"
|
source_file="res://src/audio/AMB/AMB_BAD_END_EARTHQUAKE.ogg"
|
||||||
dest_files=["res://.godot/imported/AMB_BAD_END_EARTHQUAKE.ogg-e9eab5a667607eac71d31fddf6267597.oggvorbisstr"]
|
dest_files=["res://.godot/imported/AMB_BAD_END_EARTHQUAKE.ogg-03e817303decd8b8e41745609f87f10c.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
loop=false
|
loop=true
|
||||||
loop_offset=0
|
loop_offset=0.0
|
||||||
bpm=0
|
bpm=0.0
|
||||||
beat_count=0
|
beat_count=0
|
||||||
bar_beats=4
|
bar_beats=4
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://b5vhghigr263m"
|
uid="uid://b5vhghigr263m"
|
||||||
path="res://.godot/imported/amb_ATMOSTPHERE.ogg-d626a91a96dc0c9dd858ae437ed3ce9d.oggvorbisstr"
|
path="res://.godot/imported/amb_ATMOSTPHERE.ogg-45d9a9c09d45b233375d8c723e42c852.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_ATMOSTPHERE.ogg"
|
source_file="res://src/audio/AMB/amb_ATMOSTPHERE.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_ATMOSTPHERE.ogg-d626a91a96dc0c9dd858ae437ed3ce9d.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_ATMOSTPHERE.ogg-45d9a9c09d45b233375d8c723e42c852.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://dun1mdjlmv2iy"
|
uid="uid://dun1mdjlmv2iy"
|
||||||
path="res://.godot/imported/amb_CRICKETS.ogg-a3e94c03a4a4855112cb9771eb5d7995.oggvorbisstr"
|
path="res://.godot/imported/amb_CRICKETS.ogg-ee8db802e6163ca5c5e3101e3337d9d3.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_CRICKETS.ogg"
|
source_file="res://src/audio/AMB/amb_CRICKETS.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_CRICKETS.ogg-a3e94c03a4a4855112cb9771eb5d7995.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_CRICKETS.ogg-ee8db802e6163ca5c5e3101e3337d9d3.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://cstt5t4tspgll"
|
uid="uid://cstt5t4tspgll"
|
||||||
path="res://.godot/imported/amb_RIVER.ogg-76238514419f87d38ee6d9dc2c51ca64.oggvorbisstr"
|
path="res://.godot/imported/amb_RIVER.ogg-a5ed08fd6d161ef0a5f38f804143c9f8.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_RIVER.ogg"
|
source_file="res://src/audio/AMB/amb_RIVER.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_RIVER.ogg-76238514419f87d38ee6d9dc2c51ca64.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_RIVER.ogg-a5ed08fd6d161ef0a5f38f804143c9f8.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://db0e4p4b11tyf"
|
uid="uid://db0e4p4b11tyf"
|
||||||
path="res://.godot/imported/amb_beach.ogg-224ac40038a27ecc37bbaeb6ba133451.oggvorbisstr"
|
path="res://.godot/imported/amb_beach.ogg-8f340d18fd5888c59c80580ed33b86be.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_beach.ogg"
|
source_file="res://src/audio/AMB/amb_beach.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_beach.ogg-224ac40038a27ecc37bbaeb6ba133451.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_beach.ogg-8f340d18fd5888c59c80580ed33b86be.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://btkbelic75ecn"
|
uid="uid://btkbelic75ecn"
|
||||||
path="res://.godot/imported/amb_cellular.ogg-10f77202fdba4396453746a6dff1163f.oggvorbisstr"
|
path="res://.godot/imported/amb_cellular.ogg-58bcb88de2f576fd0d8bea7152aba8e8.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_cellular.ogg"
|
source_file="res://src/audio/AMB/amb_cellular.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_cellular.ogg-10f77202fdba4396453746a6dff1163f.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_cellular.ogg-58bcb88de2f576fd0d8bea7152aba8e8.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://b306wov6yfaan"
|
uid="uid://b306wov6yfaan"
|
||||||
path="res://.godot/imported/amb_flame_burning.ogg-a2d4a15c4e42af6cc417263c48ceac99.oggvorbisstr"
|
path="res://.godot/imported/amb_flame_burning.ogg-9ffba7ace9b30cdc0b929e1ee4bc8717.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_flame_burning.ogg"
|
source_file="res://src/audio/AMB/amb_flame_burning.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_flame_burning.ogg-a2d4a15c4e42af6cc417263c48ceac99.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_flame_burning.ogg-9ffba7ace9b30cdc0b929e1ee4bc8717.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://cgk17d8erskht"
|
uid="uid://cgk17d8erskht"
|
||||||
path="res://.godot/imported/amb_ocean.ogg-01a11020be2db82b0e22d1423cb26aa3.oggvorbisstr"
|
path="res://.godot/imported/amb_ocean.ogg-f4ee3d30caf9194f7881a02c6507d38a.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_ocean.ogg"
|
source_file="res://src/audio/AMB/amb_ocean.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_ocean.ogg-01a11020be2db82b0e22d1423cb26aa3.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_ocean.ogg-f4ee3d30caf9194f7881a02c6507d38a.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://60hn13ryqn88"
|
uid="uid://60hn13ryqn88"
|
||||||
path="res://.godot/imported/amb_perlin.ogg-64b80cc5587fac618d4038cf1d8fac57.oggvorbisstr"
|
path="res://.godot/imported/amb_perlin.ogg-369d474f40ce79fe9f5b6c639a907e11.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_perlin.ogg"
|
source_file="res://src/audio/AMB/amb_perlin.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_perlin.ogg-64b80cc5587fac618d4038cf1d8fac57.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_perlin.ogg-369d474f40ce79fe9f5b6c639a907e11.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://bxrlehky1833a"
|
uid="uid://bxrlehky1833a"
|
||||||
path="res://.godot/imported/amb_pipe_loop_brokenloop.ogg-002366fec6a5ad3285732ef207958668.oggvorbisstr"
|
path="res://.godot/imported/amb_pipe_loop_brokenloop.ogg-01835f0cb823262b3486e1d51b3fabed.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_pipe_loop_brokenloop.ogg"
|
source_file="res://src/audio/AMB/amb_pipe_loop_brokenloop.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_pipe_loop_brokenloop.ogg-002366fec6a5ad3285732ef207958668.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_pipe_loop_brokenloop.ogg-01835f0cb823262b3486e1d51b3fabed.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://cdweiwl17xnn6"
|
uid="uid://cdweiwl17xnn6"
|
||||||
path="res://.godot/imported/amb_water_lapping1.ogg-d0e545dbc1fa1d1d2f7f7ffee566dbd2.oggvorbisstr"
|
path="res://.godot/imported/amb_water_lapping1.ogg-b2ad73abfaf60b4ac41451d7cf3abd27.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_water_lapping1.ogg"
|
source_file="res://src/audio/AMB/amb_water_lapping1.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_water_lapping1.ogg-d0e545dbc1fa1d1d2f7f7ffee566dbd2.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_water_lapping1.ogg-b2ad73abfaf60b4ac41451d7cf3abd27.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://d3uj87dsngy22"
|
uid="uid://d3uj87dsngy22"
|
||||||
path="res://.godot/imported/amb_water_lapping2.ogg-48391199b506ee32adf8ac3cf8800f8d.oggvorbisstr"
|
path="res://.godot/imported/amb_water_lapping2.ogg-2e0e4c928ee7675858fe0c117f293287.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_water_lapping2.ogg"
|
source_file="res://src/audio/AMB/amb_water_lapping2.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_water_lapping2.ogg-48391199b506ee32adf8ac3cf8800f8d.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_water_lapping2.ogg-2e0e4c928ee7675858fe0c117f293287.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://b7g0tnn43an8"
|
uid="uid://b7g0tnn43an8"
|
||||||
path="res://.godot/imported/amb_white_noise.ogg-245b3fec83d54c77ba8886688002bdc1.oggvorbisstr"
|
path="res://.godot/imported/amb_white_noise.ogg-9d7d55b3e4f0f6e201e09e41d6f75ee0.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_white_noise.ogg"
|
source_file="res://src/audio/AMB/amb_white_noise.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_white_noise.ogg-245b3fec83d54c77ba8886688002bdc1.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_white_noise.ogg-9d7d55b3e4f0f6e201e09e41d6f75ee0.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
importer="oggvorbisstr"
|
importer="oggvorbisstr"
|
||||||
type="AudioStreamOggVorbis"
|
type="AudioStreamOggVorbis"
|
||||||
uid="uid://2veneecq76n7"
|
uid="uid://2veneecq76n7"
|
||||||
path="res://.godot/imported/amb_wind_loop_altar.ogg-c7176da6dd27414689e07f2c34c08519.oggvorbisstr"
|
path="res://.godot/imported/amb_wind_loop_altar.ogg-91bb4566a15451ea55b40bb8105195b0.oggvorbisstr"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/audio/amb/amb_wind_loop_altar.ogg"
|
source_file="res://src/audio/AMB/amb_wind_loop_altar.ogg"
|
||||||
dest_files=["res://.godot/imported/amb_wind_loop_altar.ogg-c7176da6dd27414689e07f2c34c08519.oggvorbisstr"]
|
dest_files=["res://.godot/imported/amb_wind_loop_altar.ogg-91bb4566a15451ea55b40bb8105195b0.oggvorbisstr"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -13,7 +13,7 @@ dest_files=["res://.godot/imported/iTEM_identify_ALL.ogg-41b5f26b3ea1b630ca215a5
|
|||||||
[params]
|
[params]
|
||||||
|
|
||||||
loop=false
|
loop=false
|
||||||
loop_offset=0
|
loop_offset=0.0
|
||||||
bpm=0
|
bpm=0.0
|
||||||
beat_count=0
|
beat_count=0
|
||||||
bar_beats=4
|
bar_beats=4
|
||||||
|
|||||||
Binary file not shown.
@@ -1,19 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="oggvorbisstr"
|
|
||||||
type="AudioStreamOggVorbis"
|
|
||||||
uid="uid://yjm1usonqxpw"
|
|
||||||
path="res://.godot/imported/item_persuader.ogg-c3c3292adcec7bbf7eb5289059116cde.oggvorbisstr"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://src/audio/sfx/item_persuader.ogg"
|
|
||||||
dest_files=["res://.godot/imported/item_persuader.ogg-c3c3292adcec7bbf7eb5289059116cde.oggvorbisstr"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
loop=false
|
|
||||||
loop_offset=0
|
|
||||||
bpm=0
|
|
||||||
beat_count=0
|
|
||||||
bar_beats=4
|
|
||||||
@@ -8,7 +8,7 @@ public partial class ShakeCamera : Camera3D
|
|||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
[Export] private double _shakeIntensity = 1.0;
|
[Export] public double _shakeIntensity { get; set; } = 1.0;
|
||||||
|
|
||||||
[Export] private double _maxX = 10;
|
[Export] private double _maxX = 10;
|
||||||
[Export] private double _maxY = 10;
|
[Export] private double _maxY = 10;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Godot;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Zennysoft.Game.Abstractions.Audio;
|
||||||
using Zennysoft.Ma.Adapter;
|
using Zennysoft.Ma.Adapter;
|
||||||
using Zennysoft.Ma.Adapter.Entity;
|
using Zennysoft.Ma.Adapter.Entity;
|
||||||
|
|
||||||
@@ -26,6 +27,8 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
|
|||||||
[Dependency] protected IPlayer _player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single());
|
[Dependency] protected IPlayer _player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single());
|
||||||
|
|
||||||
[Dependency] protected IGameRepo _gameRepo => this.DependOn<IGameRepo>();
|
[Dependency] protected IGameRepo _gameRepo => this.DependOn<IGameRepo>();
|
||||||
|
|
||||||
|
[Dependency] public IGame _game => this.DependOn<IGame>();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public IHealthComponent HealthComponent { get; private set; }
|
public IHealthComponent HealthComponent { get; private set; }
|
||||||
@@ -38,6 +41,10 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
|
|||||||
|
|
||||||
public virtual IEnemyModelView EnemyModelView { get; set; } = default!;
|
public virtual IEnemyModelView EnemyModelView { get; set; } = default!;
|
||||||
|
|
||||||
|
public IEnemyLootTable LootTable => _lootTable;
|
||||||
|
|
||||||
|
[Export] public EnemyLootTable _lootTable { get; set; }
|
||||||
|
|
||||||
public Vector3 TargetPosition { get; private set; }
|
public Vector3 TargetPosition { get; private set; }
|
||||||
|
|
||||||
[ExportGroup("Enemy Stats")]
|
[ExportGroup("Enemy Stats")]
|
||||||
@@ -174,20 +181,24 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
|
|||||||
EnemyModelView.PlayElementalDamageAnimation(damageElementType);
|
EnemyModelView.PlayElementalDamageAnimation(damageElementType);
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Alert());
|
_enemyLogic.Input(new EnemyLogic.Input.Alert());
|
||||||
EnemyModelView.PlayHitAnimation();
|
EnemyModelView.PlayHitAnimation();
|
||||||
|
if (damageElementType == ElementType.None || damageElementType == ElementType.Ferrum)
|
||||||
_hitSFX.Play();
|
_hitSFX.Play();
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Die()
|
public virtual async void Die()
|
||||||
{
|
{
|
||||||
SetPhysicsProcess(false);
|
SetPhysicsProcess(false);
|
||||||
_rustDuration.Stop();
|
_rustDuration.Stop();
|
||||||
_rustTimer.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.PlayHitAnimation();
|
||||||
_hitSFX.Play();
|
_hitSFX.Play();
|
||||||
|
await ToSignal(GetTree().CreateTimer(0.1f), "timeout");
|
||||||
|
EnemyModelView.PlayDeathAnimation();
|
||||||
_dieSFX.Play();
|
_dieSFX.Play();
|
||||||
_gameRepo.OnEnemyDied(this);
|
_gameRepo.OnEnemyDied(this);
|
||||||
|
await _game.IncrementEnemyDefeatedCount(EnemyModelView.EnemyLoreInfo.Name);
|
||||||
var tweener = CreateTween();
|
var tweener = CreateTween();
|
||||||
tweener.TweenInterval(1.0f);
|
tweener.TweenInterval(1.0f);
|
||||||
tweener.TweenCallback(Callable.From(QueueFree));
|
tweener.TweenCallback(Callable.From(QueueFree));
|
||||||
@@ -209,6 +220,23 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
|
|||||||
tweener.TweenCallback(Callable.From(QueueFree));
|
tweener.TweenCallback(Callable.From(QueueFree));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual void OnBuff()
|
||||||
|
{
|
||||||
|
EnemyModelView.PlayBuffAnimation();
|
||||||
|
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void OnDebuff()
|
||||||
|
{
|
||||||
|
EnemyModelView.PlayDebuffAnimation();
|
||||||
|
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void OnHealed()
|
||||||
|
{
|
||||||
|
EnemyModelView.PlayHealAnimation();
|
||||||
|
}
|
||||||
|
|
||||||
public IDungeonRoom GetCurrentRoom(ImmutableList<IDungeonRoom> roomList)
|
public IDungeonRoom GetCurrentRoom(ImmutableList<IDungeonRoom> roomList)
|
||||||
{
|
{
|
||||||
foreach (var room in roomList)
|
foreach (var room in roomList)
|
||||||
@@ -229,6 +257,16 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
|
|||||||
EnemyModelView.HitPlayer -= EnemyModelView_HitPlayer;
|
EnemyModelView.HitPlayer -= EnemyModelView_HitPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetEnemySpeedByMultiplier(double multiplier)
|
||||||
|
{
|
||||||
|
if (this is IHaveFleeBehavior fleeBehavior)
|
||||||
|
fleeBehavior.FleeBehavior.FleeSpeed *= multiplier;
|
||||||
|
if (this is IHavePatrolBehavior patrolBehavior)
|
||||||
|
patrolBehavior.PatrolBehavior.PatrolSpeed *= multiplier;
|
||||||
|
if (this is IHaveFollowBehavior followBehavior)
|
||||||
|
followBehavior.FollowBehavior.FollowSpeed *= multiplier;
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void MoveEnemyToNewRoom(IDungeonRoom newRoom)
|
public virtual void MoveEnemyToNewRoom(IDungeonRoom newRoom)
|
||||||
{
|
{
|
||||||
if (newRoom is MonsterRoom monsterRoom)
|
if (newRoom is MonsterRoom monsterRoom)
|
||||||
@@ -273,6 +311,7 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
|
|||||||
{
|
{
|
||||||
_rustTimer.Start();
|
_rustTimer.Start();
|
||||||
_rustDuration.Start();
|
_rustDuration.Start();
|
||||||
|
EnemyModelView.PlayRustActivateAnimation();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -283,11 +322,16 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
|
|||||||
private void _rustTimer_Timeout()
|
private void _rustTimer_Timeout()
|
||||||
{
|
{
|
||||||
HealthComponent.Damage(3, ElementType.Ferrum);
|
HealthComponent.Damage(3, ElementType.Ferrum);
|
||||||
TakeHit(ElementType.Ferrum);
|
EnemyModelView.PlayRustDamageAnimation();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _rustDuration_Timeout()
|
private void _rustDuration_Timeout()
|
||||||
{
|
{
|
||||||
StatusEffectComponent.Rust.OnNext(false);
|
StatusEffectComponent.Rust.OnNext(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int GetDefeatCount(IEnemy enemyType)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,11 +55,14 @@ public abstract partial class Enemy2D : Enemy
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void OnVelocityComputed(Vector3 safeVelocity)
|
protected void OnVelocityComputed(Vector3 safeVelocity)
|
||||||
|
{
|
||||||
|
if (_enemyModelView.CanMove)
|
||||||
{
|
{
|
||||||
Velocity = new Vector3(safeVelocity.X, 0, safeVelocity.Z);
|
Velocity = new Vector3(safeVelocity.X, 0, safeVelocity.Z);
|
||||||
LookAtTarget(safeVelocity);
|
LookAtTarget(safeVelocity);
|
||||||
MoveAndSlide();
|
MoveAndSlide();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void EngagePlayerBehavior_TakeAction()
|
protected void EngagePlayerBehavior_TakeAction()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://gvgpe17jldat"]
|
||||||
|
|
||||||
|
[ext_resource type="Shader" uid="uid://cjvysm0rhhdgi" path="res://src/vfx/shaders/DamageHit.gdshader" id="1_23uje"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource("1_23uje")
|
||||||
|
shader_parameter/shock_color = Color(1, 0, 0, 1)
|
||||||
|
shader_parameter/amplitude = 30.0
|
||||||
|
shader_parameter/progress = -1.0
|
||||||
|
shader_parameter/frequecy = 10.0
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using Godot;
|
||||||
|
using Godot.Collections;
|
||||||
|
using Zennysoft.Ma.Adapter.Entity;
|
||||||
|
|
||||||
|
namespace Zennysoft.Game.Ma;
|
||||||
|
|
||||||
|
[GlobalClass]
|
||||||
|
public partial class EnemyLootTable : Resource, IEnemyLootTable
|
||||||
|
{
|
||||||
|
[Export]
|
||||||
|
public Array<InventoryItemStats> Items { get; set; } = [];
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://bei3s7yr6xkc0
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
namespace Zennysoft.Game.Ma;
|
namespace Zennysoft.Game.Ma;
|
||||||
|
|
||||||
@@ -25,9 +26,20 @@ public partial class EnemyLoreInfo : Resource
|
|||||||
public string Weakness { get; set; }
|
public string Weakness { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public string Drop1 { get; set; }
|
public string PrimaryAttackName { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public string Drop2 { get; set; }
|
public ElementType PrimaryAttackType { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public string SecondaryAttackName { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public ElementType SecondaryAttackType { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public string TertiaryAttackName { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public ElementType TertiaryAttackType { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,6 +117,16 @@ public abstract partial class EnemyModelView : Node3D, IEnemyModelView
|
|||||||
|
|
||||||
public virtual void PlayHitAnimation() => throw new System.NotImplementedException();
|
public virtual void PlayHitAnimation() => throw new System.NotImplementedException();
|
||||||
|
|
||||||
|
public virtual void PlayBuffAnimation() => throw new System.NotImplementedException();
|
||||||
|
|
||||||
|
public virtual void PlayDebuffAnimation() => throw new System.NotImplementedException();
|
||||||
|
|
||||||
|
public virtual void PlayHealAnimation() => throw new System.NotImplementedException();
|
||||||
|
|
||||||
|
public virtual void PlayRustActivateAnimation() => throw new System.NotImplementedException();
|
||||||
|
|
||||||
|
public virtual void PlayRustDamageAnimation() => throw new System.NotImplementedException();
|
||||||
|
|
||||||
protected virtual void OnPlayerHit(AttackEventArgs arg) => HitPlayer?.Invoke(this, arg);
|
protected virtual void OnPlayerHit(AttackEventArgs arg) => HitPlayer?.Invoke(this, arg);
|
||||||
|
|
||||||
protected void AnimationTree_AnimationFinished(StringName animName)
|
protected void AnimationTree_AnimationFinished(StringName animName)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ using Chickensoft.AutoInject;
|
|||||||
using Chickensoft.Introspection;
|
using Chickensoft.Introspection;
|
||||||
using Godot;
|
using Godot;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Zennysoft.Game.Abstractions.Audio;
|
||||||
using Zennysoft.Ma.Adapter;
|
using Zennysoft.Ma.Adapter;
|
||||||
|
|
||||||
namespace Zennysoft.Game.Ma;
|
namespace Zennysoft.Game.Ma;
|
||||||
@@ -26,6 +27,7 @@ public partial class EnemyModelView2D : EnemyModelView, IEnemyModelView
|
|||||||
[Node] public AnimationPlayer WaterHitAnimation { get; set; } = default!;
|
[Node] public AnimationPlayer WaterHitAnimation { get; set; } = default!;
|
||||||
[Node] public AnimationPlayer CurseHitAnimation { get; set; } = default!;
|
[Node] public AnimationPlayer CurseHitAnimation { get; set; } = default!;
|
||||||
[Node] public AnimationPlayer EarthHitAnimation { get; set; } = default!;
|
[Node] public AnimationPlayer EarthHitAnimation { get; set; } = default!;
|
||||||
|
[Node] public Node2D VFXSprites { get; set; } = default!;
|
||||||
|
|
||||||
[ExportGroup("Enemy Model Properties")]
|
[ExportGroup("Enemy Model Properties")]
|
||||||
[Export(PropertyHint.Range, "0.0, 1.0")]
|
[Export(PropertyHint.Range, "0.0, 1.0")]
|
||||||
@@ -60,12 +62,47 @@ public partial class EnemyModelView2D : EnemyModelView, IEnemyModelView
|
|||||||
|
|
||||||
public override void PlayDeathAnimation()
|
public override void PlayDeathAnimation()
|
||||||
{
|
{
|
||||||
|
_stateMachine.Stop();
|
||||||
AnimationPlayer.Stop();
|
AnimationPlayer.Stop();
|
||||||
|
VFXSprites.Hide();
|
||||||
LoadShader("res://src/vfx/shaders/PixelMelt.gdshader");
|
LoadShader("res://src/vfx/shaders/PixelMelt.gdshader");
|
||||||
var tweener = GetTree().CreateTween();
|
var tweener = GetTree().CreateTween();
|
||||||
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 0.1f, 0.8f);
|
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 0.1f, 0.8f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void PlayBuffAnimation()
|
||||||
|
{
|
||||||
|
LoadShader("res://src/vfx/shaders/EnemyBuff.gdshader");
|
||||||
|
var tweener = GetTree().CreateTween();
|
||||||
|
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PlayDebuffAnimation()
|
||||||
|
{
|
||||||
|
LoadShader("res://src/vfx/shaders/EnemyDebuff.gdshader");
|
||||||
|
var tweener = GetTree().CreateTween();
|
||||||
|
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PlayHealAnimation()
|
||||||
|
{
|
||||||
|
LoadShader("res://src/vfx/shaders/EnemyHeal.gdshader");
|
||||||
|
var tweener = GetTree().CreateTween();
|
||||||
|
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PlayRustActivateAnimation()
|
||||||
|
{
|
||||||
|
RustHitAnimation.Play("RustActivate");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PlayRustDamageAnimation()
|
||||||
|
{
|
||||||
|
LoadShader("res://src/vfx/shaders/EnemyRust.gdshader");
|
||||||
|
var tweener = GetTree().CreateTween();
|
||||||
|
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
public override void PlayElementalDamageAnimation(ElementType elementType)
|
public override void PlayElementalDamageAnimation(ElementType elementType)
|
||||||
{
|
{
|
||||||
if (elementType == ElementType.Igneous)
|
if (elementType == ElementType.Igneous)
|
||||||
@@ -73,38 +110,43 @@ public partial class EnemyModelView2D : EnemyModelView, IEnemyModelView
|
|||||||
if (FlameHitAnimation.IsPlaying())
|
if (FlameHitAnimation.IsPlaying())
|
||||||
FlameHitAnimation.Stop();
|
FlameHitAnimation.Stop();
|
||||||
FlameHitAnimation.Play("FireHit");
|
FlameHitAnimation.Play("FireHit");
|
||||||
|
SfxDatabase.Instance.Play(SoundEffect.FireDamage);
|
||||||
}
|
}
|
||||||
else if (elementType == ElementType.Holy)
|
else if (elementType == ElementType.Sankta)
|
||||||
{
|
{
|
||||||
if (HolyHitAnimation.IsPlaying())
|
if (HolyHitAnimation.IsPlaying())
|
||||||
HolyHitAnimation.Stop();
|
HolyHitAnimation.Stop();
|
||||||
HolyHitAnimation.Play("HolyHit");
|
HolyHitAnimation.Play("HolyHit");
|
||||||
|
SfxDatabase.Instance.Play(SoundEffect.HolyDamage);
|
||||||
}
|
}
|
||||||
else if (elementType == ElementType.Aeolic)
|
else if (elementType == ElementType.Aeolic)
|
||||||
{
|
{
|
||||||
if (WindHitAnimation.IsPlaying())
|
if (WindHitAnimation.IsPlaying())
|
||||||
WindHitAnimation.Stop();
|
WindHitAnimation.Stop();
|
||||||
WindHitAnimation.Play("WindHit");
|
WindHitAnimation.Play("WindHit");
|
||||||
|
SfxDatabase.Instance.Play(SoundEffect.AirDamage);
|
||||||
}
|
}
|
||||||
else if (elementType == ElementType.Curse)
|
else if (elementType == ElementType.Shura)
|
||||||
{
|
{
|
||||||
if (CurseHitAnimation.IsPlaying())
|
if (CurseHitAnimation.IsPlaying())
|
||||||
CurseHitAnimation.Stop();
|
CurseHitAnimation.Stop();
|
||||||
CurseHitAnimation.Play("CurseHit");
|
CurseHitAnimation.Play("CurseHit");
|
||||||
|
SfxDatabase.Instance.Play(SoundEffect.CurseDamage);
|
||||||
}
|
}
|
||||||
else if (elementType == ElementType.Hydric)
|
else if (elementType == ElementType.Hydric)
|
||||||
{
|
{
|
||||||
if (WaterHitAnimation.IsPlaying())
|
if (WaterHitAnimation.IsPlaying())
|
||||||
WaterHitAnimation.Stop();
|
WaterHitAnimation.Stop();
|
||||||
WaterHitAnimation.Play("WaterHit");
|
WaterHitAnimation.Play("WaterHit");
|
||||||
|
SfxDatabase.Instance.Play(SoundEffect.WaterDamage);
|
||||||
}
|
}
|
||||||
else if (elementType == ElementType.Telluric)
|
else if (elementType == ElementType.Telluric)
|
||||||
{
|
{
|
||||||
if (EarthHitAnimation.IsPlaying())
|
if (EarthHitAnimation.IsPlaying())
|
||||||
EarthHitAnimation.Stop();
|
EarthHitAnimation.Stop();
|
||||||
EarthHitAnimation.Play("EarthHit");
|
EarthHitAnimation.Play("EarthHit");
|
||||||
|
SfxDatabase.Instance.Play(SoundEffect.EarthDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private EnemyDirection GetEnemyDirection(
|
private EnemyDirection GetEnemyDirection(
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ public enum EnemyType
|
|||||||
FilthEater,
|
FilthEater,
|
||||||
Sara,
|
Sara,
|
||||||
Ballos,
|
Ballos,
|
||||||
Chariot,
|
Planter,
|
||||||
Chinthe,
|
Chinthe,
|
||||||
AmbassadorGreen,
|
AmbassadorGreen,
|
||||||
AmbassadorRed,
|
AmbassadorRed,
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ public static class EnemyTypeToEnemyConverter
|
|||||||
return InstantiateFromPath(@$"{_folderPath}/04. sara/Sara.tscn");
|
return InstantiateFromPath(@$"{_folderPath}/04. sara/Sara.tscn");
|
||||||
case EnemyType.Ballos:
|
case EnemyType.Ballos:
|
||||||
return InstantiateFromPath(@$"{_folderPath}/05. ballos/Ballos.tscn");
|
return InstantiateFromPath(@$"{_folderPath}/05. ballos/Ballos.tscn");
|
||||||
case EnemyType.Chariot:
|
case EnemyType.Planter:
|
||||||
return InstantiateFromPath(@$"{_folderPath}/06. chariot/Chariot.tscn");
|
return InstantiateFromPath(@$"{_folderPath}/06. Planter/Planter.tscn");
|
||||||
case EnemyType.Chinthe:
|
case EnemyType.Chinthe:
|
||||||
return InstantiateFromPath(@$"{_folderPath}/07. chinthe/Chinthe.tscn");
|
return InstantiateFromPath(@$"{_folderPath}/07. chinthe/Chinthe.tscn");
|
||||||
case EnemyType.AmbassadorGreen:
|
case EnemyType.AmbassadorGreen:
|
||||||
@@ -62,8 +62,8 @@ public static class EnemyTypeToEnemyConverter
|
|||||||
return EnemyType.Sara;
|
return EnemyType.Sara;
|
||||||
if (enemy is Ballos)
|
if (enemy is Ballos)
|
||||||
return EnemyType.Ballos;
|
return EnemyType.Ballos;
|
||||||
if (enemy is Chariot)
|
if (enemy is Planter)
|
||||||
return EnemyType.Chariot;
|
return EnemyType.Planter;
|
||||||
if (enemy is Chinthe)
|
if (enemy is Chinthe)
|
||||||
return EnemyType.Chinthe;
|
return EnemyType.Chinthe;
|
||||||
if (enemy is Ambassador ambassador)
|
if (enemy is Ambassador ambassador)
|
||||||
|
|||||||
@@ -27,6 +27,16 @@ public interface IEnemyModelView : INode3D
|
|||||||
|
|
||||||
public void PlayDeathAnimation();
|
public void PlayDeathAnimation();
|
||||||
|
|
||||||
|
public void PlayBuffAnimation();
|
||||||
|
|
||||||
|
public void PlayDebuffAnimation();
|
||||||
|
|
||||||
|
public void PlayHealAnimation();
|
||||||
|
|
||||||
|
public void PlayRustActivateAnimation();
|
||||||
|
|
||||||
|
public void PlayRustDamageAnimation();
|
||||||
|
|
||||||
public void PlayElementalDamageAnimation(ElementType elementType);
|
public void PlayElementalDamageAnimation(ElementType elementType);
|
||||||
|
|
||||||
public double ViewerSize { get; }
|
public double ViewerSize { get; }
|
||||||
|
|||||||
@@ -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 = 0.3f;
|
||||||
_actionTimer.Timeout += OnAttackTimeout;
|
_actionTimer.Timeout += OnAttackTimeout;
|
||||||
_acquireTargetTimer.Timeout += OnAcquireTargetTimeout;
|
_acquireTargetTimer.Timeout += OnAcquireTargetTimeout;
|
||||||
AddChild(_actionTimer);
|
AddChild(_actionTimer);
|
||||||
@@ -39,6 +39,7 @@ public partial class EngagePlayerBehavior : Node, IEngagePlayerBehavior
|
|||||||
public void Disengage()
|
public void Disengage()
|
||||||
{
|
{
|
||||||
_actionTimer.Stop();
|
_actionTimer.Stop();
|
||||||
|
_actionTimer.WaitTime = 0.3f;
|
||||||
_acquireTargetTimer.Stop();
|
_acquireTargetTimer.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public partial class FleeBehavior : Node3D, IBehavior
|
|||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
[Export] private double _fleeSpeed { get; set; } = 300f;
|
[Export] public double FleeSpeed { get; set; } = 300f;
|
||||||
|
|
||||||
[Export] private double _thinkTime { get; set; } = 2f;
|
[Export] private double _thinkTime { get; set; } = 2f;
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ public partial class FleeBehavior : Node3D, IBehavior
|
|||||||
|
|
||||||
public void StartFlee(NavigationAgent3D navigationAgent)
|
public void StartFlee(NavigationAgent3D navigationAgent)
|
||||||
{
|
{
|
||||||
var currentRoom = _map.GetPlayersCurrentRoom();
|
var currentRoom = _map.CurrentFloor.GetPlayersCurrentRoom();
|
||||||
var rooms = _game.CurrentFloor.Rooms;
|
var rooms = _game.CurrentFloor.Rooms;
|
||||||
var validRooms = new Godot.Collections.Array<MonsterRoom>(rooms.OfType<MonsterRoom>());
|
var validRooms = new Godot.Collections.Array<MonsterRoom>(rooms.OfType<MonsterRoom>());
|
||||||
var randomRoom = validRooms.PickRandom();
|
var randomRoom = validRooms.PickRandom();
|
||||||
@@ -46,13 +46,14 @@ public partial class FleeBehavior : Node3D, IBehavior
|
|||||||
public void StopFlee()
|
public void StopFlee()
|
||||||
{
|
{
|
||||||
SetPhysicsProcess(false);
|
SetPhysicsProcess(false);
|
||||||
|
_navigationAgent.Velocity = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPhysicsProcess(double delta)
|
public void OnPhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
var nextVelocity = _navigationAgent.GetNextPathPosition();
|
var nextVelocity = _navigationAgent.GetNextPathPosition();
|
||||||
var parent = GetParent() as Node3D;
|
var parent = GetParent() as Node3D;
|
||||||
var velocity = parent.GlobalPosition.DirectionTo(nextVelocity) * (float)_fleeSpeed * (float)delta;
|
var velocity = parent.GlobalPosition.DirectionTo(nextVelocity) * (float)FleeSpeed * (float)delta;
|
||||||
EmitSignal(SignalName.OnVelocityComputed, velocity);
|
_navigationAgent.Velocity = velocity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public partial class FollowBehavior : Node3D, IBehavior
|
|||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
[Export] private double _followSpeed { get; set; } = 100f;
|
[Export] public double FollowSpeed { get; set; } = 100f;
|
||||||
|
|
||||||
[Export] private double _thinkTime { get; set; } = 2f;
|
[Export] private double _thinkTime { get; set; } = 2f;
|
||||||
|
|
||||||
@@ -27,9 +27,15 @@ public partial class FollowBehavior : Node3D, IBehavior
|
|||||||
public void Init(NavigationAgent3D navigationAgent)
|
public void Init(NavigationAgent3D navigationAgent)
|
||||||
{
|
{
|
||||||
_navigationAgent = navigationAgent;
|
_navigationAgent = navigationAgent;
|
||||||
|
_navigationAgent.VelocityComputed += _navigationAgent_VelocityComputed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnReady()
|
private void _navigationAgent_VelocityComputed(Vector3 safeVelocity)
|
||||||
|
{
|
||||||
|
EmitSignal(SignalName.OnVelocityComputed, safeVelocity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void _EnterTree()
|
||||||
{
|
{
|
||||||
_thinkTimer = new Timer() { WaitTime = _thinkTime };
|
_thinkTimer = new Timer() { WaitTime = _thinkTime };
|
||||||
_thinkTimer.Timeout += OnTimeout;
|
_thinkTimer.Timeout += OnTimeout;
|
||||||
@@ -50,19 +56,21 @@ public partial class FollowBehavior : Node3D, IBehavior
|
|||||||
{
|
{
|
||||||
SetPhysicsProcess(false);
|
SetPhysicsProcess(false);
|
||||||
_thinkTimer.Stop();
|
_thinkTimer.Stop();
|
||||||
|
_navigationAgent.Velocity = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPhysicsProcess(double delta)
|
public void OnPhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
var nextVelocity = _navigationAgent.GetNextPathPosition();
|
var nextVelocity = _navigationAgent.GetNextPathPosition();
|
||||||
var parent = GetParent() as Node3D;
|
var parent = GetParent() as Node3D;
|
||||||
var velocity = parent.GlobalPosition.DirectionTo(nextVelocity) * (float)_followSpeed * (float)delta;
|
var velocity = parent.GlobalPosition.DirectionTo(nextVelocity) * (float)FollowSpeed * (float)delta;
|
||||||
EmitSignal(SignalName.OnVelocityComputed, velocity);
|
_navigationAgent.Velocity = velocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnExitTree()
|
public void OnExitTree()
|
||||||
{
|
{
|
||||||
_thinkTimer.Stop();
|
_thinkTimer.Stop();
|
||||||
_thinkTimer.Timeout -= OnTimeout;
|
_thinkTimer.Timeout -= OnTimeout;
|
||||||
|
_navigationAgent.VelocityComputed -= _navigationAgent_VelocityComputed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public partial class PatrolBehavior : Node3D, IBehavior
|
|||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
[Export] private double _patrolSpeed { get; set; } = 100f;
|
[Export] public double PatrolSpeed { get; set; } = 100f;
|
||||||
|
|
||||||
[Export] private double _thinkTime { get; set; } = 0.8f;
|
[Export] private double _thinkTime { get; set; } = 0.8f;
|
||||||
|
|
||||||
@@ -49,6 +49,12 @@ public partial class PatrolBehavior : Node3D, IBehavior
|
|||||||
{
|
{
|
||||||
_navigationAgent = navigationAgent;
|
_navigationAgent = navigationAgent;
|
||||||
_navigationAgent.WaypointReached += NavigationAgent_WaypointReached;
|
_navigationAgent.WaypointReached += NavigationAgent_WaypointReached;
|
||||||
|
_navigationAgent.VelocityComputed += _navigationAgent_VelocityComputed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void _navigationAgent_VelocityComputed(Vector3 safeVelocity)
|
||||||
|
{
|
||||||
|
EmitSignal(SignalName.OnVelocityComputed, safeVelocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void NavigationAgent_WaypointReached(Dictionary details)
|
private async void NavigationAgent_WaypointReached(Dictionary details)
|
||||||
@@ -66,14 +72,15 @@ public partial class PatrolBehavior : Node3D, IBehavior
|
|||||||
{
|
{
|
||||||
SetPhysicsProcess(false);
|
SetPhysicsProcess(false);
|
||||||
_patrolTimer?.Stop();
|
_patrolTimer?.Stop();
|
||||||
|
_navigationAgent.Velocity = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPhysicsProcess(double delta)
|
public void OnPhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
var nextVelocity = _navigationAgent.GetNextPathPosition();
|
var nextVelocity = _navigationAgent.GetNextPathPosition();
|
||||||
var parent = GetParent() as Node3D;
|
var parent = GetParent() as Node3D;
|
||||||
var velocity = parent.GlobalPosition.DirectionTo(nextVelocity) * (float)_patrolSpeed * (float)delta;
|
var velocity = parent.GlobalPosition.DirectionTo(nextVelocity) * (float)PatrolSpeed * (float)delta;
|
||||||
EmitSignal(SignalName.OnVelocityComputed, velocity);
|
_navigationAgent.Velocity = velocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetPatrolTarget()
|
public void SetPatrolTarget()
|
||||||
@@ -94,5 +101,6 @@ public partial class PatrolBehavior : Node3D, IBehavior
|
|||||||
_patrolTimer.Stop();
|
_patrolTimer.Stop();
|
||||||
_patrolTimer.Timeout -= PatrolTimer_Timeout;
|
_patrolTimer.Timeout -= PatrolTimer_Timeout;
|
||||||
_navigationAgent.WaypointReached -= NavigationAgent_WaypointReached;
|
_navigationAgent.WaypointReached -= NavigationAgent_WaypointReached;
|
||||||
|
_navigationAgent.VelocityComputed -= _navigationAgent_VelocityComputed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using Chickensoft.AutoInject;
|
using Chickensoft.AutoInject;
|
||||||
using Chickensoft.Introspection;
|
using Chickensoft.Introspection;
|
||||||
using Godot;
|
using Godot;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace Zennysoft.Game.Ma;
|
namespace Zennysoft.Game.Ma;
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
[gd_scene load_steps=16 format=3 uid="uid://crsy7gygjy317"]
|
[gd_scene load_steps=22 format=3 uid="uid://crsy7gygjy317"]
|
||||||
|
|
||||||
[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="Script" uid="uid://b6vgwsjlshci" path="res://src/items/InventoryItemStats.cs" id="2_515no"]
|
||||||
|
[ext_resource type="Resource" uid="uid://d0cxrf0nldona" path="res://src/items/consumable/resources/Somalata Electuary.tres" id="3_4i0u2"]
|
||||||
|
[ext_resource type="Resource" uid="uid://75fpkwfp0t0k" path="res://src/items/consumable/resources/Catholicon Draught.tres" id="3_515no"]
|
||||||
|
[ext_resource type="Script" uid="uid://bei3s7yr6xkc0" path="res://src/enemy/EnemyLootTable.cs" id="4_515no"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cn4fv2gv6raql" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="4_drfkj"]
|
[ext_resource type="PackedScene" uid="uid://cn4fv2gv6raql" 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://bjcqrhtifpcvr" path="res://src/enemy/enemy_types/01. sproingy/SproingyModelView.tscn" id="4_o3b7p"]
|
||||||
|
[ext_resource type="Resource" uid="uid://d2rdaghcccw0f" path="res://src/items/jewels/resources/MeditativeOrb.tres" id="4_orghr"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cmhem5xknjsvc" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="5_drfkj"]
|
[ext_resource type="PackedScene" uid="uid://cmhem5xknjsvc" 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://cve5oouhowtff" 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"]
|
||||||
@@ -10,6 +15,11 @@
|
|||||||
[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"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bn6ns3jxkw03b" path="res://src/audio/sfx/ENEMY_SPROING_death.ogg" id="9_icstk"]
|
[ext_resource type="AudioStream" uid="uid://bn6ns3jxkw03b" path="res://src/audio/sfx/ENEMY_SPROING_death.ogg" id="9_icstk"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_fa44e"]
|
||||||
|
script = ExtResource("4_515no")
|
||||||
|
Items = Array[ExtResource("2_515no")]([ExtResource("3_4i0u2"), ExtResource("3_515no"), ExtResource("4_orghr")])
|
||||||
|
metadata/_custom_type_script = "uid://bei3s7yr6xkc0"
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
|
||||||
radius = 0.106078
|
radius = 0.106078
|
||||||
height = 1.23076
|
height = 1.23076
|
||||||
@@ -30,7 +40,7 @@ material = SubResource("StandardMaterial3D_p4gkk")
|
|||||||
top_radius = 0.0
|
top_radius = 0.0
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_drfkj"]
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_drfkj"]
|
||||||
radius = 1.0
|
radius = 1.33398
|
||||||
|
|
||||||
[node name="Sproingy" type="CharacterBody3D" groups=["enemy"]]
|
[node name="Sproingy" type="CharacterBody3D" groups=["enemy"]]
|
||||||
process_mode = 1
|
process_mode = 1
|
||||||
@@ -39,6 +49,7 @@ axis_lock_linear_y = true
|
|||||||
axis_lock_angular_x = true
|
axis_lock_angular_x = true
|
||||||
axis_lock_angular_z = true
|
axis_lock_angular_z = true
|
||||||
script = ExtResource("1_xsluo")
|
script = ExtResource("1_xsluo")
|
||||||
|
_lootTable = SubResource("Resource_fa44e")
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape3D" parent="."]
|
[node name="CollisionShape" type="CollisionShape3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -96,7 +107,7 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_moun4")]
|
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_moun4")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_followSpeed = 150.0
|
FollowSpeed = 175.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
|
||||||
@@ -106,7 +117,9 @@ _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
|
use_3d_avoidance = true
|
||||||
|
avoidance_layers = 9
|
||||||
|
avoidance_mask = 9
|
||||||
|
|
||||||
[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)
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = "Igneous"
|
Affinity = "Igneous"
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = "Baleful Strike"
|
||||||
Drop2 = ""
|
PrimaryAttackType = 0
|
||||||
|
SecondaryAttackName = ""
|
||||||
|
SecondaryAttackType = 0
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|||||||
@@ -80,8 +80,12 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = ""
|
Affinity = ""
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = ""
|
||||||
Drop2 = ""
|
PrimaryAttackType = 0
|
||||||
|
SecondaryAttackName = ""
|
||||||
|
SecondaryAttackType = 0
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
||||||
@@ -3177,7 +3181,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.332842, 0.66857),
|
"times": PackedFloat32Array(0, 0.332842, 0.416667),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3221,7 +3225,7 @@ tracks/1/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/1/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/1/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.332842, 0.66857),
|
"times": PackedFloat32Array(0, 0.332842, 0.4167),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3238,6 +3242,21 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [&"attack"]
|
"values": [&"attack"]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "audio"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("67_dnvt3")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/3/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_ivy74"]
|
[sub_resource type="Animation" id="Animation_ivy74"]
|
||||||
resource_name = "primary_attack_left"
|
resource_name = "primary_attack_left"
|
||||||
@@ -3262,7 +3281,7 @@ tracks/1/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/1/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/1/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.332842, 0.66857),
|
"times": PackedFloat32Array(0, 0.332842, 0.4167),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3279,6 +3298,21 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [&"attack"]
|
"values": [&"attack"]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "audio"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("67_dnvt3")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/3/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_x7uye"]
|
[sub_resource type="Animation" id="Animation_x7uye"]
|
||||||
resource_name = "primary_attack_right"
|
resource_name = "primary_attack_right"
|
||||||
@@ -3303,7 +3337,7 @@ tracks/1/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/1/interp = 1
|
tracks/1/interp = 1
|
||||||
tracks/1/loop_wrap = true
|
tracks/1/loop_wrap = true
|
||||||
tracks/1/keys = {
|
tracks/1/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.332842, 0.66857),
|
"times": PackedFloat32Array(0, 0.332842, 0.416667),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3332,6 +3366,21 @@ tracks/3/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [&"attack"]
|
"values": [&"attack"]
|
||||||
}
|
}
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("67_dnvt3")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_6tj5r"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_6tj5r"]
|
||||||
_data = {
|
_data = {
|
||||||
@@ -3842,14 +3891,18 @@ _data = {
|
|||||||
|
|
||||||
[node name="EnemyModelView" type="Node3D"]
|
[node name="EnemyModelView" type="Node3D"]
|
||||||
script = ExtResource("1_oh25a")
|
script = ExtResource("1_oh25a")
|
||||||
|
CanMove = true
|
||||||
EnemyLoreInfo = SubResource("Resource_ivy74")
|
EnemyLoreInfo = SubResource("Resource_ivy74")
|
||||||
|
|
||||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||||
unique_name_in_owner = true
|
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, 2.05501, 0)
|
||||||
|
layers = 5
|
||||||
|
cast_shadow = 0
|
||||||
modulate = Color(0.83, 0.83, 0.83, 1)
|
modulate = Color(0.83, 0.83, 0.83, 1)
|
||||||
pixel_size = 0.001
|
pixel_size = 0.001
|
||||||
billboard = 2
|
billboard = 2
|
||||||
|
shaded = true
|
||||||
alpha_cut = 1
|
alpha_cut = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
render_priority = 100
|
render_priority = 100
|
||||||
@@ -3876,6 +3929,7 @@ sprite_frames = SubResource("SpriteFrames_6drt6")
|
|||||||
animation = &"idle_left_walk"
|
animation = &"idle_left_walk"
|
||||||
|
|
||||||
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
@@ -4015,3 +4069,35 @@ libraries = {
|
|||||||
|
|
||||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="SpotLight3D" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.366956, 0.930238, 0, -0.930238, 0.366956, 0.00325984, 2.75088, 0.773075)
|
||||||
|
light_energy = 0.05
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_range = 2.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D2" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -0.534057, 0.845448, 0, -0.845448, -0.534057, -0.1912, 2.95882, -1.04038)
|
||||||
|
light_energy = 0.05
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_range = 2.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D3" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(0.619848, -0.663442, -0.419086, 0, -0.534057, 0.845448, -0.784722, -0.524049, -0.331034, -0.901541, 2.75088, -0.392173)
|
||||||
|
light_energy = 0.05
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_range = 2.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D4" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(-0.0257408, 0.845168, 0.53388, 1.84729e-08, -0.534057, 0.845448, 0.999669, 0.0217625, 0.013747, 0.89876, 2.87897, -0.00373673)
|
||||||
|
light_energy = 0.05
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_range = 2.0
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using Chickensoft.AutoInject;
|
using Chickensoft.AutoInject;
|
||||||
using Chickensoft.Introspection;
|
using Chickensoft.Introspection;
|
||||||
using Godot;
|
using Godot;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace Zennysoft.Game.Ma;
|
namespace Zennysoft.Game.Ma;
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
[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://cmhem5xknjsvc" 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://bvokiqp1pqgfs" path="res://src/audio/sfx/ENEMY_michael_death.ogg" id="9_bun8r"]
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
||||||
height = 5.0
|
height = 5.0
|
||||||
@@ -19,7 +19,7 @@ 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.51025
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_wrps7"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_wrps7"]
|
||||||
radius = 0.552847
|
radius = 0.552847
|
||||||
@@ -31,7 +31,6 @@ collision_mask = 11
|
|||||||
axis_lock_linear_y = true
|
axis_lock_linear_y = true
|
||||||
axis_lock_angular_x = true
|
axis_lock_angular_x = true
|
||||||
axis_lock_angular_z = true
|
axis_lock_angular_z = true
|
||||||
motion_mode = 1
|
|
||||||
script = ExtResource("1_lb5oy")
|
script = ExtResource("1_lb5oy")
|
||||||
AeolicResistance = -20.0
|
AeolicResistance = -20.0
|
||||||
HydricResistance = -20.0
|
HydricResistance = -20.0
|
||||||
@@ -90,13 +89,12 @@ 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
|
_patrolRange = 15.0
|
||||||
_patrolTime = 20.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
|
||||||
_followSpeed = 150.0
|
FollowSpeed = 175.0
|
||||||
|
|
||||||
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_x8mrp")]
|
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_x8mrp")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -107,7 +105,9 @@ _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
|
use_3d_avoidance = true
|
||||||
|
avoidance_layers = 9
|
||||||
|
avoidance_mask = 9
|
||||||
|
|
||||||
[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)
|
||||||
@@ -129,7 +129,7 @@ bus = &"SFX"
|
|||||||
|
|
||||||
[node name="DieSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
[node name="DieSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
stream = ExtResource("9_fm627")
|
stream = ExtResource("9_bun8r")
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="AggroSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
[node name="AggroSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = "Ferrum"
|
Affinity = "Ferrum"
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = "Limbic Shock"
|
||||||
Drop2 = ""
|
PrimaryAttackType = 6
|
||||||
|
SecondaryAttackName = ""
|
||||||
|
SecondaryAttackType = 0
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|||||||
@@ -3216,7 +3216,7 @@ tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.0333333, 0.3),
|
"times": PackedFloat32Array(0, 0.0333333, 0.0500001),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3282,7 +3282,7 @@ tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.0333333, 0.3),
|
"times": PackedFloat32Array(0, 0.0333333, 0.0500001),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3347,7 +3347,7 @@ tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.0333333, 0.3),
|
"times": PackedFloat32Array(0, 0.0333333, 0.0500001),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3412,7 +3412,7 @@ tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.0333333, 0.3),
|
"times": PackedFloat32Array(0, 0.0333333, 0.0500001),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4350,13 +4350,17 @@ _data = {
|
|||||||
|
|
||||||
[node name="EnemyModelView" type="Node3D"]
|
[node name="EnemyModelView" type="Node3D"]
|
||||||
script = ExtResource("1_o4cc2")
|
script = ExtResource("1_o4cc2")
|
||||||
|
CanMove = true
|
||||||
EnemyLoreInfo = ExtResource("2_pqohf")
|
EnemyLoreInfo = ExtResource("2_pqohf")
|
||||||
|
|
||||||
[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.98924, 0)
|
||||||
modulate = Color(0.68, 0.68, 0.68, 1)
|
layers = 5
|
||||||
|
cast_shadow = 0
|
||||||
|
gi_mode = 0
|
||||||
billboard = 2
|
billboard = 2
|
||||||
|
shaded = true
|
||||||
alpha_cut = 2
|
alpha_cut = 2
|
||||||
alpha_antialiasing_mode = 1
|
alpha_antialiasing_mode = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
@@ -4385,6 +4389,7 @@ animation = &"idle_front_walk"
|
|||||||
offset = Vector2(400, 400)
|
offset = Vector2(400, 400)
|
||||||
|
|
||||||
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
@@ -4439,6 +4444,50 @@ scale = Vector2(2.005, 2.005)
|
|||||||
sprite_frames = SubResource("SpriteFrames_kp6q4")
|
sprite_frames = SubResource("SpriteFrames_kp6q4")
|
||||||
animation = &"WATER DAMAGE"
|
animation = &"WATER DAMAGE"
|
||||||
|
|
||||||
|
[node name="SpotLight3D" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.366956, 0.930238, 0, -0.930238, 0.366956, 0, 0.895226, 0.771256)
|
||||||
|
light_energy = 0.1
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
distance_fade_enabled = true
|
||||||
|
distance_fade_begin = 10.0
|
||||||
|
distance_fade_length = 40.0
|
||||||
|
spot_range = 4.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D2" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -0.534057, 0.845448, 0, -0.845448, -0.534057, -0.19446, 1.10317, -1.0422)
|
||||||
|
light_energy = 0.1
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
distance_fade_enabled = true
|
||||||
|
distance_fade_begin = 10.0
|
||||||
|
distance_fade_length = 40.0
|
||||||
|
spot_range = 4.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D3" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.619848, -0.663442, -0.419087, 0, -0.534057, 0.845448, -0.784722, -0.524049, -0.331034, -0.904801, 0.895226, -0.393992)
|
||||||
|
light_energy = 0.1
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
distance_fade_enabled = true
|
||||||
|
distance_fade_begin = 10.0
|
||||||
|
distance_fade_length = 40.0
|
||||||
|
spot_range = 4.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D4" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(-0.0257408, 0.845168, 0.53388, 1.84729e-08, -0.534057, 0.845448, 0.999669, 0.0217625, 0.0137471, 0.8955, 1.02332, -0.00555617)
|
||||||
|
light_energy = 0.1
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
distance_fade_enabled = true
|
||||||
|
distance_fade_begin = 10.0
|
||||||
|
distance_fade_length = 40.0
|
||||||
|
spot_range = 4.0
|
||||||
|
|
||||||
[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, 1.34076, 0)
|
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 1.34076, 0)
|
||||||
|
|||||||
@@ -36,14 +36,13 @@ public partial class FilthEater : Enemy2D, IHavePatrolBehavior, IHaveEngagePlaye
|
|||||||
|
|
||||||
public void OnResolved()
|
public void OnResolved()
|
||||||
{
|
{
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Activate());
|
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Patrol());
|
_enemyLogic.Input(new EnemyLogic.Input.Patrol());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PerformAction()
|
public override void PerformAction()
|
||||||
{
|
{
|
||||||
var enemyPosition = new Vector3(GlobalPosition.X, _player.GlobalPosition.Y, GlobalPosition.Z);
|
var enemyPosition = new Vector3(GlobalPosition.X, _player.GlobalPosition.Y, GlobalPosition.Z);
|
||||||
if (enemyPosition.DistanceTo(_player.GlobalPosition) > 3)
|
if (enemyPosition.DistanceTo(_player.Position) > 4)
|
||||||
EnemyModelView.PlaySecondaryAttackAnimation();
|
EnemyModelView.PlaySecondaryAttackAnimation();
|
||||||
else
|
else
|
||||||
EnemyModelView.PlayPrimaryAttackAnimation();
|
EnemyModelView.PlayPrimaryAttackAnimation();
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
[gd_scene load_steps=16 format=3 uid="uid://bl426uws0i86l"]
|
[gd_scene load_steps=19 format=3 uid="uid://bl426uws0i86l"]
|
||||||
|
|
||||||
[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="Script" uid="uid://b6vgwsjlshci" path="res://src/items/InventoryItemStats.cs" id="2_m7220"]
|
||||||
|
[ext_resource type="Script" uid="uid://bei3s7yr6xkc0" path="res://src/enemy/EnemyLootTable.cs" id="3_g602r"]
|
||||||
[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://b6sa6ntu4rbrm" 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://cn4fv2gv6raql" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="5_pvjvo"]
|
||||||
@@ -9,18 +11,12 @@
|
|||||||
[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"]
|
||||||
[ext_resource type="AudioStream" uid="uid://6r74nka4oh20" path="res://src/audio/sfx/ENEMY_filth_aggro.ogg" id="11_qbmfg"]
|
[ext_resource type="AudioStream" uid="uid://bn6ns3jxkw03b" path="res://src/audio/sfx/ENEMY_SPROING_death.ogg" id="12_m7220"]
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
[sub_resource type="Resource" id="Resource_06aiy"]
|
||||||
height = 5.0
|
script = ExtResource("3_g602r")
|
||||||
radius = 1.0
|
Items = Array[ExtResource("2_m7220")]([])
|
||||||
|
metadata/_custom_type_script = "uid://bei3s7yr6xkc0"
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
|
|
||||||
radius = 2.54294
|
|
||||||
height = 5.08589
|
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_0y048"]
|
|
||||||
radius = 2.30121
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_fv5vf"]
|
[sub_resource type="Resource" id="Resource_fv5vf"]
|
||||||
script = ExtResource("4_5eid5")
|
script = ExtResource("4_5eid5")
|
||||||
@@ -31,89 +27,111 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = ""
|
Affinity = ""
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = ""
|
||||||
Drop2 = ""
|
PrimaryAttackType = 0
|
||||||
|
SecondaryAttackName = ""
|
||||||
|
SecondaryAttackType = 0
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
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_g602r"]
|
||||||
height = 5.81738
|
height = 13.8621
|
||||||
radius = 3.91016
|
radius = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_06aiy"]
|
||||||
|
radius = 1.8
|
||||||
|
height = 6.0
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_ygtll"]
|
||||||
|
radius = 6.70264
|
||||||
|
|
||||||
|
[sub_resource type="SphereShape3D" id="SphereShape3D_ebx6c"]
|
||||||
|
radius = 2.64628
|
||||||
|
|
||||||
[node name="FilthEater" type="CharacterBody3D" groups=["enemy"]]
|
[node name="FilthEater" type="CharacterBody3D" groups=["enemy"]]
|
||||||
process_mode = 1
|
process_mode = 1
|
||||||
collision_layer = 10
|
collision_layer = 10
|
||||||
collision_mask = 11
|
collision_mask = 3
|
||||||
axis_lock_linear_y = true
|
axis_lock_linear_y = true
|
||||||
axis_lock_angular_x = true
|
axis_lock_angular_x = true
|
||||||
|
axis_lock_angular_z = true
|
||||||
script = ExtResource("1_p438s")
|
script = ExtResource("1_p438s")
|
||||||
|
_lootTable = SubResource("Resource_06aiy")
|
||||||
[node name="LineOfSight" type="Area3D" parent="."]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 2.25757, 0)
|
|
||||||
collision_layer = 2
|
|
||||||
collision_mask = 2
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="LineOfSight"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -2)
|
|
||||||
shape = SubResource("CylinderShape3D_jbgmx")
|
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape3D" parent="."]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 2.25757, 0)
|
|
||||||
shape = SubResource("CapsuleShape3D_cwfph")
|
|
||||||
|
|
||||||
[node name="Raycast" type="RayCast3D" parent="."]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.31086, 0)
|
|
||||||
target_position = Vector3(0, 0, -5)
|
|
||||||
collision_mask = 3
|
|
||||||
|
|
||||||
[node name="Collision" type="Area3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25757, 0)
|
|
||||||
collision_layer = 2048
|
|
||||||
collision_mask = 0
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.120117, 0.221246, 0)
|
|
||||||
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, 0.114099, 0)
|
||||||
EnemyLoreInfo = SubResource("Resource_fv5vf")
|
EnemyLoreInfo = SubResource("Resource_fv5vf")
|
||||||
|
|
||||||
|
[node name="LineOfSight" type="Area3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1.71715, 0)
|
||||||
|
collision_layer = 2
|
||||||
|
collision_mask = 2
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="LineOfSight"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, -1.19209e-07, -6.43103)
|
||||||
|
shape = SubResource("CylinderShape3D_g602r")
|
||||||
|
|
||||||
|
[node name="Raycast" type="RayCast3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1.71715, 0)
|
||||||
|
target_position = Vector3(0, 0, -5)
|
||||||
|
collision_mask = 3
|
||||||
|
debug_shape_custom_color = Color(1, 0, 0, 1)
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.0824751, 3.16485, -0.0366802)
|
||||||
|
shape = SubResource("CapsuleShape3D_06aiy")
|
||||||
|
|
||||||
[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.71715, 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)
|
shape = SubResource("CylinderShape3D_ygtll")
|
||||||
shape = SubResource("CylinderShape3D_qbmfg")
|
|
||||||
|
[node name="Collision" type="Area3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.71715, 0)
|
||||||
|
collision_layer = 2048
|
||||||
|
collision_mask = 0
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.120117, 0.221246, 0)
|
||||||
|
shape = SubResource("SphereShape3D_ebx6c")
|
||||||
|
|
||||||
[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.71715, 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
|
||||||
|
_patrolRange = 15.0
|
||||||
|
_patrolTime = 20.0
|
||||||
|
|
||||||
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_fccr3")]
|
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_fccr3")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_followSpeed = 150.0
|
FollowSpeed = 175.0
|
||||||
|
|
||||||
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_8l567")]
|
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_8l567")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
_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
|
||||||
height = 2.0
|
|
||||||
radius = 3.0
|
radius = 3.0
|
||||||
|
use_3d_avoidance = true
|
||||||
|
avoidance_layers = 9
|
||||||
|
avoidance_mask = 9
|
||||||
|
|
||||||
[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.71715, 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
|
||||||
@@ -132,9 +150,9 @@ bus = &"SFX"
|
|||||||
|
|
||||||
[node name="DieSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
[node name="DieSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
stream = ExtResource("12_m7220")
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="AggroSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
[node name="AggroSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
stream = ExtResource("11_qbmfg")
|
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = "Eolic"
|
Affinity = "Eolic"
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = "Aero Cannon"
|
||||||
Drop2 = ""
|
PrimaryAttackType = 1
|
||||||
|
SecondaryAttackName = "Metal Cutter"
|
||||||
|
SecondaryAttackType = 5
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=706 format=3 uid="uid://b6sa6ntu4rbrm"]
|
[gd_scene load_steps=705 format=3 uid="uid://b6sa6ntu4rbrm"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_718m1"]
|
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_718m1"]
|
||||||
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_krqul"]
|
[ext_resource type="Resource" uid="uid://bwo656s0fq3ew" path="res://src/enemy/enemy_types/03. filth_eater/FilthEaterLoreInfo.tres" id="2_p4ilm"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bdar3daydbkge" path="res://src/enemy/enemy_types/03. filth_eater/animations/SWIPE/Layer 1.png" id="2_vpn42"]
|
[ext_resource type="Texture2D" uid="uid://bdar3daydbkge" path="res://src/enemy/enemy_types/03. filth_eater/animations/SWIPE/Layer 1.png" id="2_vpn42"]
|
||||||
[ext_resource type="Texture2D" uid="uid://o214hr614jit" path="res://src/enemy/enemy_types/03. filth_eater/animations/SWIPE/Layer 2.png" id="3_7tggm"]
|
[ext_resource type="Texture2D" uid="uid://o214hr614jit" path="res://src/enemy/enemy_types/03. filth_eater/animations/SWIPE/Layer 2.png" id="3_7tggm"]
|
||||||
[ext_resource type="Texture2D" uid="uid://hyipatqsvukp" path="res://src/enemy/enemy_types/03. filth_eater/animations/SWIPE/Layer 3.png" id="4_usgpm"]
|
[ext_resource type="Texture2D" uid="uid://hyipatqsvukp" path="res://src/enemy/enemy_types/03. filth_eater/animations/SWIPE/Layer 3.png" id="4_usgpm"]
|
||||||
@@ -215,19 +215,6 @@
|
|||||||
[ext_resource type="AudioStream" uid="uid://bajfar6pey7tm" path="res://src/audio/sfx/enemy_filth_1.ogg" id="205_01v4k"]
|
[ext_resource type="AudioStream" uid="uid://bajfar6pey7tm" path="res://src/audio/sfx/enemy_filth_1.ogg" id="205_01v4k"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bpuwajdvn5bp1" path="res://src/audio/sfx/enemy_filth_blast.ogg" id="206_jltoa"]
|
[ext_resource type="AudioStream" uid="uid://bpuwajdvn5bp1" path="res://src/audio/sfx/enemy_filth_blast.ogg" id="206_jltoa"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_pyy2h"]
|
|
||||||
script = ExtResource("2_krqul")
|
|
||||||
Name = "Filth Eater"
|
|
||||||
Description = "yuck"
|
|
||||||
MaximumHP = ""
|
|
||||||
ATK = ""
|
|
||||||
DEF = ""
|
|
||||||
Affinity = ""
|
|
||||||
Weakness = ""
|
|
||||||
Drop1 = ""
|
|
||||||
Drop2 = ""
|
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_7tggm"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_7tggm"]
|
||||||
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
|
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
|
||||||
|
|
||||||
@@ -3803,6 +3790,18 @@ tracks/5/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [0]
|
"values": [0]
|
||||||
}
|
}
|
||||||
|
tracks/6/type = "value"
|
||||||
|
tracks/6/imported = false
|
||||||
|
tracks/6/enabled = true
|
||||||
|
tracks/6/path = NodePath(".:CanMove")
|
||||||
|
tracks/6/interp = 1
|
||||||
|
tracks/6/loop_wrap = true
|
||||||
|
tracks/6/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_b1kem"]
|
[sub_resource type="Animation" id="Animation_b1kem"]
|
||||||
resource_name = "idle_back"
|
resource_name = "idle_back"
|
||||||
@@ -4157,7 +4156,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.588603, 0.833705),
|
"times": PackedFloat32Array(0, 0.588603, 0.666667),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4230,6 +4229,18 @@ tracks/6/keys = {
|
|||||||
"times": PackedFloat32Array(0.426553)
|
"times": PackedFloat32Array(0.426553)
|
||||||
}
|
}
|
||||||
tracks/6/use_blend = true
|
tracks/6/use_blend = true
|
||||||
|
tracks/7/type = "value"
|
||||||
|
tracks/7/imported = false
|
||||||
|
tracks/7/enabled = true
|
||||||
|
tracks/7/path = NodePath(".:CanMove")
|
||||||
|
tracks/7/interp = 1
|
||||||
|
tracks/7/loop_wrap = true
|
||||||
|
tracks/7/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1.16667),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_krqul"]
|
[sub_resource type="Animation" id="Animation_krqul"]
|
||||||
resource_name = "primary_attack_back"
|
resource_name = "primary_attack_back"
|
||||||
@@ -4266,7 +4277,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.588603, 0.833705),
|
"times": PackedFloat32Array(0, 0.588603, 0.666666),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4286,6 +4297,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0.333333)
|
"times": PackedFloat32Array(0.333333)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath(".:CanMove")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1.08333),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_hsn02"]
|
[sub_resource type="Animation" id="Animation_hsn02"]
|
||||||
resource_name = "primary_attack_left"
|
resource_name = "primary_attack_left"
|
||||||
@@ -4322,7 +4345,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.588603, 0.833705),
|
"times": PackedFloat32Array(0, 0.588603, 0.666666),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4354,6 +4377,18 @@ tracks/4/keys = {
|
|||||||
"times": PackedFloat32Array(0.333333)
|
"times": PackedFloat32Array(0.333333)
|
||||||
}
|
}
|
||||||
tracks/4/use_blend = true
|
tracks/4/use_blend = true
|
||||||
|
tracks/5/type = "value"
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath(".:CanMove")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1.16667),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_eslbn"]
|
[sub_resource type="Animation" id="Animation_eslbn"]
|
||||||
resource_name = "primary_attack_right"
|
resource_name = "primary_attack_right"
|
||||||
@@ -4390,7 +4425,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.588603, 0.833705),
|
"times": PackedFloat32Array(0, 0.588603, 0.666666),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4422,6 +4457,18 @@ tracks/4/keys = {
|
|||||||
"times": PackedFloat32Array(0.333333)
|
"times": PackedFloat32Array(0.333333)
|
||||||
}
|
}
|
||||||
tracks/4/use_blend = true
|
tracks/4/use_blend = true
|
||||||
|
tracks/5/type = "value"
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath(".:CanMove")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 1.16667),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_usgpm"]
|
[sub_resource type="Animation" id="Animation_usgpm"]
|
||||||
resource_name = "secondary_attack"
|
resource_name = "secondary_attack"
|
||||||
@@ -4552,6 +4599,18 @@ tracks/7/keys = {
|
|||||||
"times": PackedFloat32Array(0.015234, 0.984766, 1.42112, 1.91667)
|
"times": PackedFloat32Array(0.015234, 0.984766, 1.42112, 1.91667)
|
||||||
}
|
}
|
||||||
tracks/7/use_blend = true
|
tracks/7/use_blend = true
|
||||||
|
tracks/8/type = "value"
|
||||||
|
tracks/8/imported = false
|
||||||
|
tracks/8/enabled = true
|
||||||
|
tracks/8/path = NodePath(".:CanMove")
|
||||||
|
tracks/8/interp = 1
|
||||||
|
tracks/8/loop_wrap = true
|
||||||
|
tracks/8/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 3.25),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_7a6is"]
|
[sub_resource type="Animation" id="Animation_7a6is"]
|
||||||
resource_name = "secondary_attack_back"
|
resource_name = "secondary_attack_back"
|
||||||
@@ -4593,6 +4652,18 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath(".:CanMove")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 3),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_pyy2h"]
|
[sub_resource type="Animation" id="Animation_pyy2h"]
|
||||||
resource_name = "secondary_attack_left"
|
resource_name = "secondary_attack_left"
|
||||||
@@ -4646,6 +4717,18 @@ tracks/3/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [false]
|
"values": [false]
|
||||||
}
|
}
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath(".:CanMove")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 3),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_smxxh"]
|
[sub_resource type="Animation" id="Animation_smxxh"]
|
||||||
resource_name = "secondary_attack_right"
|
resource_name = "secondary_attack_right"
|
||||||
@@ -4699,6 +4782,18 @@ tracks/3/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true]
|
"values": [true]
|
||||||
}
|
}
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath(".:CanMove")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 3),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_tbr0l"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_tbr0l"]
|
||||||
_data = {
|
_data = {
|
||||||
@@ -5757,12 +5852,16 @@ _data = {
|
|||||||
|
|
||||||
[node name="EnemyModelView" type="Node3D"]
|
[node name="EnemyModelView" type="Node3D"]
|
||||||
script = ExtResource("1_718m1")
|
script = ExtResource("1_718m1")
|
||||||
EnemyLoreInfo = SubResource("Resource_pyy2h")
|
CanMove = true
|
||||||
|
EnemyLoreInfo = ExtResource("2_p4ilm")
|
||||||
|
|
||||||
[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.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 1.088, 0)
|
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 1.088, 0)
|
||||||
|
layers = 5
|
||||||
|
cast_shadow = 0
|
||||||
billboard = 2
|
billboard = 2
|
||||||
|
shaded = true
|
||||||
alpha_cut = 2
|
alpha_cut = 2
|
||||||
alpha_antialiasing_mode = 1
|
alpha_antialiasing_mode = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
@@ -5789,6 +5888,7 @@ sprite_frames = SubResource("SpriteFrames_673a4")
|
|||||||
animation = &"idle_back_walk"
|
animation = &"idle_back_walk"
|
||||||
|
|
||||||
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
@@ -5845,13 +5945,44 @@ animation = &"WATER DAMAGE"
|
|||||||
|
|
||||||
[node name="Shadow" type="Sprite3D" parent="Sprite3D"]
|
[node name="Shadow" type="Sprite3D" parent="Sprite3D"]
|
||||||
transform = Transform3D(0.93, 0, 0, 0, -4.06516e-08, 0.93, 0, -0.93, -4.06516e-08, 0.00393164, -0.670112, 0.0077811)
|
transform = Transform3D(0.93, 0, 0, 0, -4.06516e-08, 0.93, 0, -0.93, -4.06516e-08, 0.00393164, -0.670112, 0.0077811)
|
||||||
visible = false
|
|
||||||
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)
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
texture = ExtResource("193_e5pq0")
|
texture = ExtResource("193_e5pq0")
|
||||||
|
|
||||||
|
[node name="SpotLight3D" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.568025, 0.293152, -0.189351, -0.162412, 0.542214, 0.352237, 0.308892, -0.25399, 0.533404, -0.22092, 0.407914, 0.496013)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_range = 4.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D2" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.666667, 0, 0, 0, -0.356038, 0.563632, 0, -0.563632, -0.356038, 0.102954, 0.564758, -1.0422)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_range = 2.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D3" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.413232, -0.442295, -0.279391, -3.11258e-08, -0.356038, 0.563632, -0.523148, -0.349366, -0.220689, -0.607387, 0.356814, -0.393992)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_range = 4.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D4" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(-0.0169814, 0.506246, 0.433441, 0.00247344, -0.433531, 0.506448, 0.666446, 0.0145084, 0.00916469, 1.01706, 0.905553, -0.00555617)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_range = 4.0
|
||||||
|
|
||||||
[node name="Hitbox" type="Area3D" parent="."]
|
[node name="Hitbox" type="Area3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0.901429, 0)
|
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0.901429, 0)
|
||||||
@@ -5908,6 +6039,7 @@ unique_name_in_owner = true
|
|||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0509949, 1.00697, 0.684851)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0509949, 1.00697, 0.684851)
|
||||||
script = ExtResource("200_4h5gj")
|
script = ExtResource("200_4h5gj")
|
||||||
ProjectileScene = ExtResource("200_mno7m")
|
ProjectileScene = ExtResource("200_mno7m")
|
||||||
|
_projectileForce = 20.0
|
||||||
|
|
||||||
[node name="Marker3D" type="Marker3D" parent="ProjectileSystem"]
|
[node name="Marker3D" type="Marker3D" parent="ProjectileSystem"]
|
||||||
|
|
||||||
|
|||||||
@@ -831,6 +831,7 @@ collision_mask = 64
|
|||||||
shape = SubResource("SphereShape3D_kct8n")
|
shape = SubResource("SphereShape3D_kct8n")
|
||||||
|
|
||||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Bullet"]
|
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Bullet"]
|
||||||
|
process_mode = 1
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="Bullet"]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="Bullet"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -844,6 +845,7 @@ autoplay = "Fire"
|
|||||||
shape = SubResource("SphereShape3D_ka3x7")
|
shape = SubResource("SphereShape3D_ka3x7")
|
||||||
|
|
||||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||||
|
process_mode = 1
|
||||||
stream = ExtResource("5_m4i4a")
|
stream = ExtResource("5_m4i4a")
|
||||||
autoplay = true
|
autoplay = true
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ height = 5.0
|
|||||||
radius = 1.0
|
radius = 1.0
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_746fv"]
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_746fv"]
|
||||||
radius = 1.25
|
radius = 1.59424
|
||||||
|
|
||||||
[node name="Sara" type="CharacterBody3D" groups=["enemy"]]
|
[node name="Sara" type="CharacterBody3D" groups=["enemy"]]
|
||||||
process_mode = 1
|
process_mode = 1
|
||||||
@@ -89,16 +89,17 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="FollowBehavior" parent="Components" instance=ExtResource("5_lxgpb")]
|
[node name="FollowBehavior" parent="Components" instance=ExtResource("5_lxgpb")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_followSpeed = 150.0
|
|
||||||
|
|
||||||
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("6_ddchx")]
|
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("6_ddchx")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_acquireTargetTime = 2.0
|
_minimumAttackTime = 1.5
|
||||||
|
_maximumAttackTime = 3.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 = 1.0
|
use_3d_avoidance = true
|
||||||
|
avoidance_layers = 9
|
||||||
|
|
||||||
[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.95329, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.95329, 0)
|
||||||
@@ -128,9 +129,10 @@ stream = ExtResource("10_ddchx")
|
|||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="Shadow" type="Sprite3D" parent="."]
|
[node name="Shadow" type="Sprite3D" parent="."]
|
||||||
transform = Transform3D(0.925, 0, 0, 0, -4.0433e-08, 0.925, 0, -0.925, -4.0433e-08, 0.00393164, 0.101466, 0.0077811)
|
transform = Transform3D(0.925, 0, 0, 0, -4.0433e-08, 0.925, 0, -0.925, -4.0433e-08, 0.00393164, 0.110065, 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)
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
|
render_priority = 100
|
||||||
texture = ExtResource("10_746fv")
|
texture = ExtResource("10_746fv")
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = "Telluric"
|
Affinity = "Telluric"
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = "Tetra Strike"
|
||||||
Drop2 = ""
|
PrimaryAttackType = 5
|
||||||
|
SecondaryAttackName = "Miasma Vex"
|
||||||
|
SecondaryAttackType = 7
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|||||||
@@ -3720,7 +3720,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.189498, 0.499215),
|
"times": PackedFloat32Array(0, 0.189498, 0.25),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3776,7 +3776,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.189498, 0.499215),
|
"times": PackedFloat32Array(0, 0.189498, 0.25),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3832,7 +3832,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.189498, 0.499215),
|
"times": PackedFloat32Array(0, 0.189498, 0.25),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3888,7 +3888,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.189498, 0.499215),
|
"times": PackedFloat32Array(0, 0.189498, 0.25),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3920,7 +3920,7 @@ tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.167084, 0.5),
|
"times": PackedFloat32Array(0, 0.167084, 0.25),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4010,7 +4010,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.167084, 0.413635),
|
"times": PackedFloat32Array(0, 0.167084, 0.25),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4076,7 +4076,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.167084, 0.413635),
|
"times": PackedFloat32Array(0, 0.167084, 0.25),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4142,7 +4142,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.167084, 0.413635),
|
"times": PackedFloat32Array(0, 0.167084, 0.25),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4990,14 +4990,18 @@ _data = {
|
|||||||
|
|
||||||
[node name="EnemyModelView" type="Node3D"]
|
[node name="EnemyModelView" type="Node3D"]
|
||||||
script = ExtResource("1_oh25a")
|
script = ExtResource("1_oh25a")
|
||||||
|
CanMove = true
|
||||||
EnemyLoreInfo = ExtResource("2_cftgd")
|
EnemyLoreInfo = ExtResource("2_cftgd")
|
||||||
|
|
||||||
[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.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.88609, 0)
|
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.88609, 0)
|
||||||
|
layers = 5
|
||||||
|
cast_shadow = 0
|
||||||
modulate = Color(0.91, 0.91, 0.91, 1)
|
modulate = Color(0.91, 0.91, 0.91, 1)
|
||||||
pixel_size = 0.005
|
pixel_size = 0.005
|
||||||
billboard = 1
|
billboard = 1
|
||||||
|
shaded = true
|
||||||
alpha_cut = 2
|
alpha_cut = 2
|
||||||
alpha_antialiasing_mode = 1
|
alpha_antialiasing_mode = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
@@ -5024,6 +5028,7 @@ sprite_frames = SubResource("SpriteFrames_sobol")
|
|||||||
animation = &"idle_front"
|
animation = &"idle_front"
|
||||||
|
|
||||||
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
@@ -5078,6 +5083,34 @@ scale = Vector2(2.605, 2.605)
|
|||||||
sprite_frames = SubResource("SpriteFrames_bsjfy")
|
sprite_frames = SubResource("SpriteFrames_bsjfy")
|
||||||
animation = &"WATER DAMAGE"
|
animation = &"WATER DAMAGE"
|
||||||
|
|
||||||
|
[node name="SpotLight3D" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.666667, 0, 0, 0, 0.540614, 0.390104, 0, -0.390104, 0.540614, 0, 0.895226, 1.17112)
|
||||||
|
light_energy = 0.1
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D2" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -0.534057, 0.845448, 0, -0.845448, -0.534057, -0.19446, 1.10317, -1.0422)
|
||||||
|
light_energy = 0.1
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D3" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.619848, -0.663442, -0.419087, 0, -0.534057, 0.845448, -0.784722, -0.524049, -0.331034, -0.904801, 0.895226, -0.393992)
|
||||||
|
light_energy = 0.1
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D4" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(-0.188919, 0.423463, 0.478992, 0.052598, -0.487478, 0.451711, 0.637171, 0.165797, 0.104731, 1.08038, 1.13857, 0.101536)
|
||||||
|
light_energy = 0.1
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
[node name="Hitbox" type="Area3D" parent="."]
|
[node name="Hitbox" type="Area3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0.72758, 0)
|
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0.72758, 0)
|
||||||
|
|||||||
@@ -78,13 +78,13 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
|||||||
|
|
||||||
[node name="PatrolBehavior" parent="Components" instance=ExtResource("4_bjnvx")]
|
[node name="PatrolBehavior" parent="Components" instance=ExtResource("4_bjnvx")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_patrolSpeed = 325.0
|
PatrolSpeed = 200.0
|
||||||
_thinkTime = 2.0
|
_thinkTime = 2.0
|
||||||
_patrolTime = 30.0
|
_patrolTime = 30.0
|
||||||
|
|
||||||
[node name="FollowBehavior" parent="Components" instance=ExtResource("5_55sdf")]
|
[node name="FollowBehavior" parent="Components" instance=ExtResource("5_55sdf")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_followSpeed = 400.0
|
FollowSpeed = 500.0
|
||||||
|
|
||||||
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("6_2xj0s")]
|
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("6_2xj0s")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -93,7 +93,8 @@ _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 = 1.0
|
use_3d_avoidance = true
|
||||||
|
avoidance_layers = 9
|
||||||
|
|
||||||
[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, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = "Telluric"
|
Affinity = "Telluric"
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = "Telluric Strike"
|
||||||
Drop2 = ""
|
PrimaryAttackType = 2
|
||||||
|
SecondaryAttackName = "Three Colors Gaze"
|
||||||
|
SecondaryAttackType = 0
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[gd_scene load_steps=570 format=3 uid="uid://dppmk4nx2le20"]
|
[gd_scene load_steps=571 format=3 uid="uid://dppmk4nx2le20"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_ueqp5"]
|
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_ueqp5"]
|
||||||
|
[ext_resource type="Resource" uid="uid://cq6inhr48gc0y" path="res://src/enemy/enemy_types/05. ballos/BallosLoreInfo.tres" id="2_ice28"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bgkx485uy065" path="res://src/enemy/enemy_types/05. ballos/animations/WALK BACK/1.png" id="3_b3ny6"]
|
[ext_resource type="Texture2D" uid="uid://bgkx485uy065" path="res://src/enemy/enemy_types/05. ballos/animations/WALK BACK/1.png" id="3_b3ny6"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bb27nhsj1d30l" path="res://src/enemy/enemy_types/05. ballos/animations/WALK FRONT/1.png" id="3_mlptn"]
|
[ext_resource type="Texture2D" uid="uid://bb27nhsj1d30l" path="res://src/enemy/enemy_types/05. ballos/animations/WALK FRONT/1.png" id="3_mlptn"]
|
||||||
[ext_resource type="Texture2D" uid="uid://s46wl5rtsp6k" path="res://src/enemy/enemy_types/05. ballos/animations/WALK FRONT/2.png" id="4_qgnoe"]
|
[ext_resource type="Texture2D" uid="uid://s46wl5rtsp6k" path="res://src/enemy/enemy_types/05. ballos/animations/WALK FRONT/2.png" id="4_qgnoe"]
|
||||||
@@ -3485,7 +3486,7 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.335728, 0.749375),
|
"times": PackedFloat32Array(0, 0.335728, 0.416667),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -3555,11 +3556,41 @@ tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.335728, 0.749375),
|
"times": PackedFloat32Array(0, 0.335728, 0.416667),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "audio"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 3.5333,
|
||||||
|
"start_offset": 2.1795,
|
||||||
|
"stream": ExtResource("94_i3hgg")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("102_8xbn0")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_7d2d3"]
|
[sub_resource type="Animation" id="Animation_7d2d3"]
|
||||||
resource_name = "primary_attack_left"
|
resource_name = "primary_attack_left"
|
||||||
@@ -3600,6 +3631,36 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "audio"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 3.5333,
|
||||||
|
"start_offset": 2.1795,
|
||||||
|
"stream": ExtResource("94_i3hgg")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("102_8xbn0")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_poqxf"]
|
[sub_resource type="Animation" id="Animation_poqxf"]
|
||||||
resource_name = "primary_attack_right"
|
resource_name = "primary_attack_right"
|
||||||
@@ -3640,6 +3701,40 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "audio"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": null
|
||||||
|
}, {
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("102_8xbn0")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0, 0.0001)
|
||||||
|
}
|
||||||
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 3.5333,
|
||||||
|
"start_offset": 2.1795,
|
||||||
|
"stream": ExtResource("94_i3hgg")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_airxj"]
|
[sub_resource type="Animation" id="Animation_airxj"]
|
||||||
resource_name = "secondary_attack"
|
resource_name = "secondary_attack"
|
||||||
@@ -3762,6 +3857,36 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "audio"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 3.8412,
|
||||||
|
"start_offset": 0.5968,
|
||||||
|
"stream": ExtResource("94_i3hgg")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(-0.583333)
|
||||||
|
}
|
||||||
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("104_ice28")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_o6ljw"]
|
[sub_resource type="Animation" id="Animation_o6ljw"]
|
||||||
resource_name = "secondary_attack_left"
|
resource_name = "secondary_attack_left"
|
||||||
@@ -3803,6 +3928,36 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "audio"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 3.8412,
|
||||||
|
"start_offset": 0.5968,
|
||||||
|
"stream": ExtResource("94_i3hgg")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(-0.583333)
|
||||||
|
}
|
||||||
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("104_ice28")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_cyiv5"]
|
[sub_resource type="Animation" id="Animation_cyiv5"]
|
||||||
resource_name = "secondary_attack_right"
|
resource_name = "secondary_attack_right"
|
||||||
@@ -3856,6 +4011,40 @@ tracks/3/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true]
|
"values": [true]
|
||||||
}
|
}
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 3.8412,
|
||||||
|
"start_offset": 0.5968,
|
||||||
|
"stream": ExtResource("94_i3hgg")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(-0.583333)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
tracks/5/type = "audio"
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": null
|
||||||
|
}, {
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("104_ice28")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0, 0.0001)
|
||||||
|
}
|
||||||
|
tracks/5/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xidnl"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xidnl"]
|
||||||
_data = {
|
_data = {
|
||||||
@@ -4695,12 +4884,17 @@ _data = {
|
|||||||
|
|
||||||
[node name="EnemyModelView" type="Node3D"]
|
[node name="EnemyModelView" type="Node3D"]
|
||||||
script = ExtResource("1_ueqp5")
|
script = ExtResource("1_ueqp5")
|
||||||
|
CanMove = true
|
||||||
|
EnemyLoreInfo = ExtResource("2_ice28")
|
||||||
|
|
||||||
[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.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 1.76027, 0)
|
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 1.76027, 0)
|
||||||
|
layers = 5
|
||||||
|
cast_shadow = 0
|
||||||
pixel_size = 0.015
|
pixel_size = 0.015
|
||||||
billboard = 2
|
billboard = 2
|
||||||
|
shaded = true
|
||||||
alpha_cut = 2
|
alpha_cut = 2
|
||||||
alpha_antialiasing_mode = 1
|
alpha_antialiasing_mode = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
@@ -4726,6 +4920,7 @@ animation = &"idle_front_walk"
|
|||||||
offset = Vector2(400, 400)
|
offset = Vector2(400, 400)
|
||||||
|
|
||||||
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
@@ -4816,13 +5011,11 @@ libraries = {
|
|||||||
[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, 1.86303, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.86303, 0)
|
||||||
stream = ExtResource("94_i3hgg")
|
|
||||||
autoplay = true
|
autoplay = true
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="Shadow" type="Sprite3D" parent="."]
|
[node name="Shadow" type="Sprite3D" parent="."]
|
||||||
transform = Transform3D(1.265, 0, 0, 0, -5.52949e-08, 1.265, 0, -1.265, -5.52949e-08, 0.00393164, -0.0238594, 0.0077811)
|
transform = Transform3D(1.265, 0, 0, 0, -5.52949e-08, 1.265, 0, -1.265, -5.52949e-08, 0.00393164, -0.0238594, 0.0077811)
|
||||||
visible = false
|
|
||||||
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)
|
||||||
@@ -4876,3 +5069,31 @@ libraries = {
|
|||||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="."]
|
||||||
max_distance = 518.62
|
max_distance = 518.62
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
|
[node name="SpotLight3D" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.752335, 0.658781, 0, -0.658781, 0.752335, 0, 3.57796, 1.74705)
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_attenuation = 0.8
|
||||||
|
|
||||||
|
[node name="SpotLight3D2" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -0.534057, 0.845448, 0, -0.845448, -0.534057, -0.19446, 4.03218, -1.75588)
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_attenuation = 0.8
|
||||||
|
|
||||||
|
[node name="SpotLight3D3" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(0.598758, -0.502743, -0.623489, 0.160314, -0.687475, 0.708292, -0.784722, -0.52405, -0.331034, -2.50296, 4.04564, -0.393992)
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_attenuation = 0.8
|
||||||
|
|
||||||
|
[node name="SpotLight3D4" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(-0.0253979, 0.747023, 0.664313, 0.00418776, -0.664442, 0.747328, 0.999669, 0.0217625, 0.013747, 2.02917, 3.61058, -0.00555617)
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
spot_attenuation = 0.8
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = "Telluric"
|
Affinity = "Telluric"
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = "Biohazard Spray"
|
||||||
Drop2 = ""
|
PrimaryAttackType = 5
|
||||||
|
SecondaryAttackName = "Green-Earth Flare"
|
||||||
|
SecondaryAttackType = 2
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=851 format=3 uid="uid://dfih3tw51mumf"]
|
[gd_scene load_steps=850 format=3 uid="uid://dfih3tw51mumf"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_lp3cr"]
|
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_lp3cr"]
|
||||||
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_olcu2"]
|
[ext_resource type="Resource" uid="uid://y0eanqffc1pf" path="res://src/enemy/enemy_types/06. Planter/PlanterLoreInfo.tres" id="2_xn42l"]
|
||||||
[ext_resource type="AnimationNodeStateMachine" uid="uid://clybvwx3itfeo" path="res://src/enemy/animation_state_machines/SecondaryAttackStateMachine.tres" id="3_4l2tb"]
|
[ext_resource type="AnimationNodeStateMachine" uid="uid://clybvwx3itfeo" path="res://src/enemy/animation_state_machines/SecondaryAttackStateMachine.tres" id="3_4l2tb"]
|
||||||
[ext_resource type="AudioStream" uid="uid://dpsqle6gghgrq" path="res://src/audio/sfx/planter_moving_layer.ogg" id="3_xn42l"]
|
[ext_resource type="AudioStream" uid="uid://dpsqle6gghgrq" path="res://src/audio/sfx/planter_moving_layer.ogg" id="3_xn42l"]
|
||||||
[ext_resource type="AudioStream" uid="uid://b6xdgfp1ttdg4" path="res://src/audio/sfx/enemy_planter_ranged_attack.ogg" id="4_xf3uf"]
|
[ext_resource type="AudioStream" uid="uid://b6xdgfp1ttdg4" path="res://src/audio/sfx/enemy_planter_ranged_attack.ogg" id="4_xf3uf"]
|
||||||
@@ -412,19 +412,6 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://dwuu7ik20m5yq" path="res://src/vfx/Enemy/chariot_attack2/chariot_attack2_071.png" id="407_ruvnx"]
|
[ext_resource type="Texture2D" uid="uid://dwuu7ik20m5yq" path="res://src/vfx/Enemy/chariot_attack2/chariot_attack2_071.png" id="407_ruvnx"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cv83xpm5cd8mv" path="res://src/vfx/Enemy/chariot_blast.png" id="408_6oqs0"]
|
[ext_resource type="Texture2D" uid="uid://cv83xpm5cd8mv" path="res://src/vfx/Enemy/chariot_blast.png" id="408_6oqs0"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_ivy74"]
|
|
||||||
script = ExtResource("2_olcu2")
|
|
||||||
Name = "Sproingy"
|
|
||||||
Description = "He's smaller than I expected..."
|
|
||||||
MaximumHP = ""
|
|
||||||
ATK = ""
|
|
||||||
DEF = ""
|
|
||||||
Affinity = ""
|
|
||||||
Weakness = ""
|
|
||||||
Drop1 = ""
|
|
||||||
Drop2 = ""
|
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_53wuj"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_53wuj"]
|
||||||
size = Vector3(1, 1.07938, 3.51416)
|
size = Vector3(1, 1.07938, 3.51416)
|
||||||
|
|
||||||
@@ -683,7 +670,7 @@ tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.76, 1.16),
|
"times": PackedFloat32Array(0, 0.76, 0.8),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -790,7 +777,7 @@ tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.332842, 0.66857),
|
"times": PackedFloat32Array(0, 0.76, 0.8),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -843,7 +830,7 @@ tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.332842, 0.66857),
|
"times": PackedFloat32Array(0, 0.76, 0.8),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -896,7 +883,7 @@ tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.332842, 0.66857),
|
"times": PackedFloat32Array(0, 0.76, 0.8),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -5827,7 +5814,7 @@ animations = [{
|
|||||||
|
|
||||||
[node name="EnemyModelView" type="Node3D"]
|
[node name="EnemyModelView" type="Node3D"]
|
||||||
script = ExtResource("1_lp3cr")
|
script = ExtResource("1_lp3cr")
|
||||||
EnemyLoreInfo = SubResource("Resource_ivy74")
|
EnemyLoreInfo = ExtResource("2_xn42l")
|
||||||
|
|
||||||
[node name="Hitbox" type="Area3D" parent="."]
|
[node name="Hitbox" type="Area3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -5920,8 +5907,11 @@ libraries = {
|
|||||||
[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, 3, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0)
|
||||||
|
layers = 5
|
||||||
|
cast_shadow = 0
|
||||||
pixel_size = 0.006
|
pixel_size = 0.006
|
||||||
billboard = 2
|
billboard = 2
|
||||||
|
shaded = true
|
||||||
alpha_cut = 1
|
alpha_cut = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
render_priority = 100
|
render_priority = 100
|
||||||
@@ -5946,6 +5936,7 @@ animation = &"Idle FRONT"
|
|||||||
offset = Vector2(402.745, 400)
|
offset = Vector2(402.745, 400)
|
||||||
|
|
||||||
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
@@ -6000,6 +5991,50 @@ scale = Vector2(4.28, 4.28)
|
|||||||
sprite_frames = SubResource("SpriteFrames_6tam3")
|
sprite_frames = SubResource("SpriteFrames_6tam3")
|
||||||
animation = &"WATER DAMAGE"
|
animation = &"WATER DAMAGE"
|
||||||
|
|
||||||
|
[node name="SpotLight3D" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.366956, 0.930238, 0, -0.930238, 0.366956, 0, 1.4208, 0.771256)
|
||||||
|
light_energy = 0.25
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
distance_fade_enabled = true
|
||||||
|
distance_fade_begin = 20.0
|
||||||
|
distance_fade_length = 20.0
|
||||||
|
spot_range = 6.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D2" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -0.534057, 0.845448, 0, -0.845448, -0.534057, -0.19446, 1.62875, -1.0422)
|
||||||
|
light_energy = 0.25
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
distance_fade_enabled = true
|
||||||
|
distance_fade_begin = 20.0
|
||||||
|
distance_fade_length = 20.0
|
||||||
|
spot_range = 6.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D3" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.619848, -0.663442, -0.419086, 0, -0.534057, 0.845448, -0.784722, -0.524049, -0.331034, -0.904801, 1.4208, -0.393992)
|
||||||
|
light_energy = 0.25
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
distance_fade_enabled = true
|
||||||
|
distance_fade_begin = 20.0
|
||||||
|
distance_fade_length = 20.0
|
||||||
|
spot_range = 6.0
|
||||||
|
|
||||||
|
[node name="SpotLight3D4" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(-0.0257408, 0.845168, 0.53388, 1.84729e-08, -0.534057, 0.845448, 0.999669, 0.0217625, 0.013747, 0.8955, 1.5489, -0.00555617)
|
||||||
|
light_energy = 0.25
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
distance_fade_enabled = true
|
||||||
|
distance_fade_begin = 20.0
|
||||||
|
distance_fade_length = 20.0
|
||||||
|
spot_range = 6.0
|
||||||
|
|
||||||
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."]
|
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."]
|
||||||
transform = Transform3D(0.705, 0, 0, 0, 0.705, 0, 0, 0, 0.705, 0, 2.86141, 0.0472305)
|
transform = Transform3D(0.705, 0, 0, 0, 0.705, 0, 0, 0, 0.705, 0, 2.86141, 0.0472305)
|
||||||
modulate = Color(1, 1, 1, 0.627451)
|
modulate = Color(1, 1, 1, 0.627451)
|
||||||
|
|||||||
@@ -1,103 +0,0 @@
|
|||||||
using Chickensoft.AutoInject;
|
|
||||||
using Chickensoft.Introspection;
|
|
||||||
using Godot;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Zennysoft.Game.Ma;
|
|
||||||
using Zennysoft.Ma.Adapter;
|
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
|
||||||
public partial class Chariot : Enemy2D, IHavePatrolBehavior, IHaveEngagePlayerBehavior, IHaveFollowBehavior
|
|
||||||
{
|
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
|
||||||
|
|
||||||
[Export] private float PrimaryAttackChance { get; set; } = 0.75f;
|
|
||||||
|
|
||||||
[Export] private float SecondaryAttackChance { get; set; } = 0.25f;
|
|
||||||
|
|
||||||
[Node] public NavigationAgent3D NavigationAgent { get; set; }
|
|
||||||
[Node] public PatrolBehavior PatrolBehavior { get; set; } = default!;
|
|
||||||
[Node] public FollowBehavior FollowBehavior { get; set; } = default!;
|
|
||||||
[Node] public EngagePlayerBehavior EngagePlayerBehavior { get; set; } = default!;
|
|
||||||
|
|
||||||
[Node] public Area3D PlayerDetector { get; set; } = default!;
|
|
||||||
|
|
||||||
public void OnReady()
|
|
||||||
{
|
|
||||||
FollowBehavior.Init(NavigationAgent);
|
|
||||||
PatrolBehavior.Init(NavigationAgent);
|
|
||||||
PatrolBehavior.HomePosition = GlobalPosition;
|
|
||||||
PatrolBehavior.OnVelocityComputed += OnChariotVelocityComputed;
|
|
||||||
FollowBehavior.OnVelocityComputed += OnChariotVelocityComputed;
|
|
||||||
EngagePlayerBehavior.TakeAction += EngagePlayerBehavior_TakeAction;
|
|
||||||
EngagePlayerBehavior.AcquireTarget += EngagePlayerBehavior_AcquireTarget;
|
|
||||||
PlayerDetector.BodyEntered += Chariot_PlayerDetected;
|
|
||||||
PlayerDetector.BodyExited += Chariot_PlayerExitArea;
|
|
||||||
((EnemyModelView)EnemyModelView).CanMove = true;
|
|
||||||
SetPhysicsProcess(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Chariot_PlayerExitArea(Node3D body)
|
|
||||||
{
|
|
||||||
EngagePlayerBehavior.Disengage();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Chariot_PlayerDetected(Node3D body)
|
|
||||||
{
|
|
||||||
if (body is not IPlayer)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!_activated)
|
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Activate());
|
|
||||||
EngagePlayerBehavior.Engage();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Idle()
|
|
||||||
{
|
|
||||||
if (!_activated)
|
|
||||||
base.Idle();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Move()
|
|
||||||
{
|
|
||||||
if (!_activated)
|
|
||||||
base.Move();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnResolved()
|
|
||||||
{
|
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Patrol());
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Activate()
|
|
||||||
{
|
|
||||||
if (!_activated)
|
|
||||||
{
|
|
||||||
((EnemyModelView)EnemyModelView).CanMove = false;
|
|
||||||
Velocity = Vector3.Zero;
|
|
||||||
EnemyModelView.PlayActivateAnimation();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void _Process(double delta)
|
|
||||||
{
|
|
||||||
if (!_activated)
|
|
||||||
base._Process(delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void PerformAction()
|
|
||||||
{
|
|
||||||
var rng = new RandomNumberGenerator();
|
|
||||||
var options = new List<Action>() { EnemyModelView.PlayPrimaryAttackAnimation, EnemyModelView.PlaySecondaryAttackAnimation };
|
|
||||||
var selection = rng.RandWeighted([PrimaryAttackChance, SecondaryAttackChance]);
|
|
||||||
options[(int)selection].Invoke();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnChariotVelocityComputed(Vector3 safeVelocity)
|
|
||||||
{
|
|
||||||
Velocity = safeVelocity;
|
|
||||||
LookAtTarget(safeVelocity);
|
|
||||||
if (((EnemyModelView)EnemyModelView).CanMove)
|
|
||||||
MoveAndSlide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://djx5x5bhkku85
|
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
[gd_scene load_steps=14 format=3 uid="uid://cd12cj1g37bn4"]
|
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://djx5x5bhkku85" path="res://src/enemy/enemy_types/06. chariot/Chariot.cs" id="1_q1q0f"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dwgq2bxolnx8l" path="res://src/enemy/enemy_types/06. chariot/ChariotModelView.tscn" id="3_q1q0f"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cn4fv2gv6raql" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="4_ee8v4"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cve5oouhowtff" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="5_uv8in"]
|
|
||||||
[ext_resource type="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_582pa"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cmhem5xknjsvc" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="6_cfqmf"]
|
|
||||||
[ext_resource type="AudioStream" uid="uid://b7ycb6qvitpmw" path="res://src/audio/sfx/player_HITENEMY_3.ogg" id="7_jemva"]
|
|
||||||
[ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_ave6n"]
|
|
||||||
[ext_resource type="AudioStream" uid="uid://daye7334d7rfe" path="res://src/audio/sfx/ENEMY_CHARIOT_DEATH.ogg" id="9_cfqmf"]
|
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
|
|
||||||
radius = 1.67281
|
|
||||||
height = 3.34563
|
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
|
||||||
height = 5.0
|
|
||||||
radius = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_lqifn"]
|
|
||||||
radius = 1.20703
|
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_582pa"]
|
|
||||||
radius = 2.34863
|
|
||||||
|
|
||||||
[node name="Chariot" type="CharacterBody3D" groups=["enemy"]]
|
|
||||||
process_mode = 1
|
|
||||||
collision_layer = 10
|
|
||||||
collision_mask = 3
|
|
||||||
axis_lock_linear_y = true
|
|
||||||
axis_lock_angular_x = true
|
|
||||||
script = ExtResource("1_q1q0f")
|
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape3D" parent="."]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1.40414, 0)
|
|
||||||
shape = SubResource("CapsuleShape3D_cwfph")
|
|
||||||
|
|
||||||
[node name="LineOfSight" type="Area3D" parent="."]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1.40414, 0)
|
|
||||||
collision_layer = 2
|
|
||||||
collision_mask = 2
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="LineOfSight"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -2)
|
|
||||||
shape = SubResource("CylinderShape3D_jbgmx")
|
|
||||||
|
|
||||||
[node name="Raycast" type="RayCast3D" parent="LineOfSight"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0, 0, 0)
|
|
||||||
target_position = Vector3(0, 0, 3)
|
|
||||||
|
|
||||||
[node name="Collision" type="Area3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.40414, 0)
|
|
||||||
collision_layer = 2048
|
|
||||||
collision_mask = 0
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"]
|
|
||||||
shape = SubResource("SphereShape3D_lqifn")
|
|
||||||
|
|
||||||
[node name="EnemyModelView" parent="." instance=ExtResource("3_q1q0f")]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
transform = Transform3D(0.999848, 0, 0.0174524, 0, 1, 0, -0.0174524, 0, 0.999848, 0, 0.0547004, 0)
|
|
||||||
|
|
||||||
[node name="PlayerDetector" type="Area3D" parent="."]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.40414, 0)
|
|
||||||
collision_layer = 0
|
|
||||||
collision_mask = 2
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetector"]
|
|
||||||
shape = SubResource("CylinderShape3D_582pa")
|
|
||||||
|
|
||||||
[node name="Components" type="Node3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.40414, 0)
|
|
||||||
|
|
||||||
[node name="PatrolBehavior" parent="Components" instance=ExtResource("4_ee8v4")]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
|
|
||||||
[node name="FollowBehavior" parent="Components" instance=ExtResource("5_uv8in")]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
_followSpeed = 150.0
|
|
||||||
|
|
||||||
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("6_cfqmf")]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
_acquireTargetTime = 2.0
|
|
||||||
|
|
||||||
[node name="NavigationAgent" type="NavigationAgent3D" parent="Components"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
avoidance_enabled = true
|
|
||||||
height = 3.0
|
|
||||||
radius = 1.0
|
|
||||||
|
|
||||||
[node name="HitSounds" type="Node3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.40414, 0)
|
|
||||||
|
|
||||||
[node name="AbsorbSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
stream = ExtResource("6_582pa")
|
|
||||||
bus = &"SFX"
|
|
||||||
|
|
||||||
[node name="HitSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
stream = ExtResource("7_jemva")
|
|
||||||
bus = &"SFX"
|
|
||||||
|
|
||||||
[node name="MorphSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
stream = ExtResource("8_ave6n")
|
|
||||||
bus = &"SFX"
|
|
||||||
|
|
||||||
[node name="DieSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
stream = ExtResource("9_cfqmf")
|
|
||||||
bus = &"SFX"
|
|
||||||
|
|
||||||
[node name="AggroSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
bus = &"SFX"
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
using Chickensoft.AutoInject;
|
|
||||||
using Chickensoft.Introspection;
|
|
||||||
using Godot;
|
|
||||||
|
|
||||||
namespace Zennysoft.Game.Ma;
|
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
|
||||||
public partial class ChariotModelView : EnemyModelView2D, IEnemyModelView
|
|
||||||
{
|
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
|
||||||
|
|
||||||
[Node] AnimationTree ScrollAnimationTree { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
public override void PlayActivateAnimation()
|
|
||||||
{
|
|
||||||
_stateMachine.Travel(_activateName);
|
|
||||||
var scrollStateMachine = (AnimationNodeStateMachinePlayback)ScrollAnimationTree.Get(_parametersPlayback);
|
|
||||||
scrollStateMachine.Travel(_activateName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://ckxqmb4tu4rml
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -13,6 +13,10 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = "Eolic"
|
Affinity = "Eolic"
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = "Matter Shift"
|
||||||
Drop2 = ""
|
PrimaryAttackType = 0
|
||||||
|
SecondaryAttackName = "Mid-Century Pulsar"
|
||||||
|
SecondaryAttackType = 0
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
[ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_a4ku4"]
|
[ext_resource type="AudioStream" uid="uid://bf7adfdd857hw" path="res://src/audio/sfx/enemy_morph.ogg" id="8_a4ku4"]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
|
||||||
radius = 0.226425
|
radius = 1.0
|
||||||
height = 2.02807
|
height = 3.90429
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
||||||
height = 5.0
|
height = 5.0
|
||||||
@@ -26,8 +26,12 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = ""
|
Affinity = ""
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = ""
|
||||||
Drop2 = ""
|
PrimaryAttackType = 0
|
||||||
|
SecondaryAttackName = ""
|
||||||
|
SecondaryAttackType = 0
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
|
||||||
@@ -48,7 +52,7 @@ script = ExtResource("1_120m2")
|
|||||||
|
|
||||||
[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, 1.46013, 0)
|
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1.92003, 0)
|
||||||
shape = SubResource("CapsuleShape3D_cwfph")
|
shape = SubResource("CapsuleShape3D_cwfph")
|
||||||
|
|
||||||
[node name="LineOfSight" type="Area3D" parent="."]
|
[node name="LineOfSight" type="Area3D" parent="."]
|
||||||
@@ -88,7 +92,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.46013, 0)
|
|||||||
|
|
||||||
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_t7elt")]
|
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_t7elt")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_followSpeed = 500.0
|
FollowSpeed = 800.0
|
||||||
|
|
||||||
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_24q6i")]
|
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_24q6i")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -97,7 +101,8 @@ _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 = 1.0
|
use_3d_avoidance = true
|
||||||
|
avoidance_layers = 9
|
||||||
|
|
||||||
[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.46013, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.46013, 0)
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
[gd_scene load_steps=898 format=3 uid="uid://de6e8yv6mv4fe"]
|
[gd_scene load_steps=900 format=3 uid="uid://de6e8yv6mv4fe"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_6dej3"]
|
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_6dej3"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dnd6d5cx7x7i8" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0400.png" id="2_3sdh3"]
|
[ext_resource type="Texture2D" uid="uid://dnd6d5cx7x7i8" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0400.png" id="2_3sdh3"]
|
||||||
|
[ext_resource type="Resource" uid="uid://2j714tuwhbdu" path="res://src/enemy/enemy_types/07. chinthe/ChinteLoreInfo.tres" id="2_y2ova"]
|
||||||
[ext_resource type="Texture2D" uid="uid://c0unwba144tls" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0402.png" id="3_dbwem"]
|
[ext_resource type="Texture2D" uid="uid://c0unwba144tls" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0402.png" id="3_dbwem"]
|
||||||
[ext_resource type="Texture2D" uid="uid://ca1im2so1vkym" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0404.png" id="4_y7pe6"]
|
[ext_resource type="Texture2D" uid="uid://ca1im2so1vkym" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0404.png" id="4_y7pe6"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cgnm3v0t63aiw" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0406.png" id="5_xu4hf"]
|
[ext_resource type="Texture2D" uid="uid://cgnm3v0t63aiw" path="res://src/enemy/enemy_types/07. chinthe/animations/CHINTHE - RERENDER/BACK/0406.png" id="5_xu4hf"]
|
||||||
@@ -407,6 +408,7 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://cot4wx5fg5pfs" path="res://src/vfx/Enemy Affected/water_hit_layer2.png" id="397_3iqav"]
|
[ext_resource type="Texture2D" uid="uid://cot4wx5fg5pfs" path="res://src/vfx/Enemy Affected/water_hit_layer2.png" id="397_3iqav"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cbei66g134fgv" path="res://src/vfx/Enemy Affected/water layer 1.png" id="398_ii52r"]
|
[ext_resource type="Texture2D" uid="uid://cbei66g134fgv" path="res://src/vfx/Enemy Affected/water layer 1.png" id="398_ii52r"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bp6npqoco5fl3" path="res://src/vfx/Enemy Affected/curse_damage.png" id="399_v8fg0"]
|
[ext_resource type="Texture2D" uid="uid://bp6npqoco5fl3" path="res://src/vfx/Enemy Affected/curse_damage.png" id="399_v8fg0"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://6hbvxrms14mg" path="res://src/audio/sfx/enemy_chinthe_teleport_IN.ogg" id="404_8vs7h"]
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
||||||
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
|
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
|
||||||
@@ -5711,6 +5713,21 @@ tracks/6/keys = {
|
|||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [Color(1, 1, 1, 1), Color(100, 100, 100, 1), Color(1, 1, 1, 1)]
|
"values": [Color(1, 1, 1, 1), Color(100, 100, 100, 1), Color(1, 1, 1, 1)]
|
||||||
}
|
}
|
||||||
|
tracks/7/type = "audio"
|
||||||
|
tracks/7/imported = false
|
||||||
|
tracks/7/enabled = true
|
||||||
|
tracks/7/path = NodePath("Chinthe SFX")
|
||||||
|
tracks/7/interp = 1
|
||||||
|
tracks/7/loop_wrap = true
|
||||||
|
tracks/7/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("404_8vs7h")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/7/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_46p8q"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_46p8q"]
|
||||||
_data = {
|
_data = {
|
||||||
@@ -5906,13 +5923,13 @@ states/Start/position = Vector2(199, 100)
|
|||||||
"states/Stop Walk/node" = SubResource("AnimationNodeStateMachine_li182")
|
"states/Stop Walk/node" = SubResource("AnimationNodeStateMachine_li182")
|
||||||
"states/Stop Walk/position" = Vector2(72.437, 334.144)
|
"states/Stop Walk/position" = Vector2(72.437, 334.144)
|
||||||
"states/Teleport In/node" = SubResource("AnimationNodeAnimation_li182")
|
"states/Teleport In/node" = SubResource("AnimationNodeAnimation_li182")
|
||||||
"states/Teleport In/position" = Vector2(-67.563, 254.144)
|
"states/Teleport In/position" = Vector2(-67.563, 253.144)
|
||||||
"states/Unactivated Idle/node" = ExtResource("245_gr3tp")
|
"states/Unactivated Idle/node" = ExtResource("245_gr3tp")
|
||||||
"states/Unactivated Idle/position" = Vector2(357, 100)
|
"states/Unactivated Idle/position" = Vector2(357, 100)
|
||||||
states/Walking/node = SubResource("AnimationNodeStateMachine_7dl50")
|
states/Walking/node = SubResource("AnimationNodeStateMachine_7dl50")
|
||||||
states/Walking/position = Vector2(348, 400.144)
|
states/Walking/position = Vector2(348, 400.144)
|
||||||
transitions = ["Start", "Unactivated Idle", SubResource("AnimationNodeStateMachineTransition_umemc"), "Unactivated Idle", "Activate", SubResource("AnimationNodeStateMachineTransition_t3xhd"), "Activate", "Idle", SubResource("AnimationNodeStateMachineTransition_5jjkq"), "Primary Attack", "Idle", SubResource("AnimationNodeStateMachineTransition_keq07"), "Idle", "Primary Skill", SubResource("AnimationNodeStateMachineTransition_manul"), "Primary Skill", "Teleport In", SubResource("AnimationNodeStateMachineTransition_auprl"), "Teleport In", "Idle", SubResource("AnimationNodeStateMachineTransition_i5vf2"), "Idle", "Primary Attack", SubResource("AnimationNodeStateMachineTransition_jbhro"), "Stop Walk", "Idle", SubResource("AnimationNodeStateMachineTransition_yu6fp"), "Idle", "Walking", SubResource("AnimationNodeStateMachineTransition_sgkk0"), "Walking", "Stop Walk", SubResource("AnimationNodeStateMachineTransition_8e7of")]
|
transitions = ["Start", "Unactivated Idle", SubResource("AnimationNodeStateMachineTransition_umemc"), "Unactivated Idle", "Activate", SubResource("AnimationNodeStateMachineTransition_t3xhd"), "Activate", "Idle", SubResource("AnimationNodeStateMachineTransition_5jjkq"), "Primary Attack", "Idle", SubResource("AnimationNodeStateMachineTransition_keq07"), "Idle", "Primary Skill", SubResource("AnimationNodeStateMachineTransition_manul"), "Primary Skill", "Teleport In", SubResource("AnimationNodeStateMachineTransition_auprl"), "Teleport In", "Idle", SubResource("AnimationNodeStateMachineTransition_i5vf2"), "Idle", "Primary Attack", SubResource("AnimationNodeStateMachineTransition_jbhro"), "Stop Walk", "Idle", SubResource("AnimationNodeStateMachineTransition_yu6fp"), "Idle", "Walking", SubResource("AnimationNodeStateMachineTransition_sgkk0"), "Walking", "Stop Walk", SubResource("AnimationNodeStateMachineTransition_8e7of")]
|
||||||
graph_offset = Vector2(-313.563, 209.889)
|
graph_offset = Vector2(-216.563, -3.11099)
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_tawq7"]
|
[sub_resource type="AtlasTexture" id="AtlasTexture_tawq7"]
|
||||||
atlas = ExtResource("395_ymova")
|
atlas = ExtResource("395_ymova")
|
||||||
@@ -6513,7 +6530,7 @@ tracks/15/keys = {
|
|||||||
"times": PackedFloat32Array(0),
|
"times": PackedFloat32Array(0),
|
||||||
"transitions": PackedFloat32Array(1),
|
"transitions": PackedFloat32Array(1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [&"WATER DAMAGE"]
|
"values": [&"EARTH DAMAGE"]
|
||||||
}
|
}
|
||||||
tracks/16/type = "value"
|
tracks/16/type = "value"
|
||||||
tracks/16/imported = false
|
tracks/16/imported = false
|
||||||
@@ -6652,6 +6669,7 @@ _data = {
|
|||||||
|
|
||||||
[node name="EnemyModelView" type="Node3D"]
|
[node name="EnemyModelView" type="Node3D"]
|
||||||
script = ExtResource("1_6dej3")
|
script = ExtResource("1_6dej3")
|
||||||
|
EnemyLoreInfo = ExtResource("2_y2ova")
|
||||||
|
|
||||||
[node name="Shadow" type="Sprite3D" parent="."]
|
[node name="Shadow" type="Sprite3D" parent="."]
|
||||||
transform = Transform3D(0.75, 0, 0, 0, -3.27836e-08, 0.75, 0, -0.75, -3.27836e-08, 0.00589746, -0.0179769, 0.0116717)
|
transform = Transform3D(0.75, 0, 0, 0, -3.27836e-08, 0.75, 0, -0.75, -3.27836e-08, 0.00589746, -0.0179769, 0.0116717)
|
||||||
@@ -6664,9 +6682,12 @@ texture = ExtResource("392_sgkk0")
|
|||||||
[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.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0)
|
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0)
|
||||||
|
layers = 5
|
||||||
|
cast_shadow = 0
|
||||||
offset = Vector2(0, 200)
|
offset = Vector2(0, 200)
|
||||||
pixel_size = 0.005
|
pixel_size = 0.005
|
||||||
billboard = 2
|
billboard = 2
|
||||||
|
shaded = true
|
||||||
alpha_cut = 2
|
alpha_cut = 2
|
||||||
alpha_antialiasing_mode = 1
|
alpha_antialiasing_mode = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
@@ -6693,6 +6714,7 @@ animation = &"idle_front_walk"
|
|||||||
offset = Vector2(500, 500)
|
offset = Vector2(500, 500)
|
||||||
|
|
||||||
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
@@ -6745,7 +6767,35 @@ frame = 47
|
|||||||
position = Vector2(500, 500)
|
position = Vector2(500, 500)
|
||||||
scale = Vector2(4, 4)
|
scale = Vector2(4, 4)
|
||||||
sprite_frames = SubResource("SpriteFrames_8u7he")
|
sprite_frames = SubResource("SpriteFrames_8u7he")
|
||||||
animation = &"WATER DAMAGE"
|
animation = &"EARTH DAMAGE"
|
||||||
|
|
||||||
|
[node name="SpotLight3D" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.666667, 0, 0, 0, 0.244637, 0.620159, 0, -0.620159, 0.244637, 0, 1.78929, 0.771256)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D2" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.666667, 0, 0, 0, -0.356038, 0.563632, 0, -0.563632, -0.356038, -0.19446, 1.99723, -1.0422)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D3" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(0.413232, -0.442295, -0.279391, 0, -0.356038, 0.563632, -0.523148, -0.349366, -0.220689, -0.904801, 1.78929, -0.393992)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D4" type="SpotLight3D" parent="Sprite3D"]
|
||||||
|
transform = Transform3D(-0.0171605, 0.563446, 0.35592, 1.23153e-08, -0.356038, 0.563632, 0.666446, 0.0145083, 0.00916467, 0.8955, 1.91738, -0.00555617)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
[node name="Hitbox" type="Area3D" parent="."]
|
[node name="Hitbox" type="Area3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|||||||
@@ -12,11 +12,12 @@
|
|||||||
[ext_resource type="AudioStream" uid="uid://6aje2myxas3d" path="res://src/audio/sfx/enemy_ambassador_aggro.ogg" id="10_sjoyv"]
|
[ext_resource type="AudioStream" uid="uid://6aje2myxas3d" path="res://src/audio/sfx/enemy_ambassador_aggro.ogg" id="10_sjoyv"]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
|
||||||
radius = 0.106078
|
radius = 0.9672
|
||||||
height = 1.23076
|
height = 3.20843
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_sjoyv"]
|
||||||
radius = 0.57308
|
radius = 0.908537
|
||||||
|
height = 3.36877
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
|
||||||
height = 5.0
|
height = 5.0
|
||||||
@@ -47,7 +48,7 @@ collision_layer = 2048
|
|||||||
collision_mask = 0
|
collision_mask = 0
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision/Collision"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision/Collision"]
|
||||||
shape = SubResource("SphereShape3D_8vcnq")
|
shape = SubResource("CapsuleShape3D_sjoyv")
|
||||||
|
|
||||||
[node name="LineOfSight" type="Area3D" parent="Collision"]
|
[node name="LineOfSight" type="Area3D" parent="Collision"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -89,7 +90,6 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="FollowBehavior" parent="Components" instance=ExtResource("5_gy5yi")]
|
[node name="FollowBehavior" parent="Components" instance=ExtResource("5_gy5yi")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_followSpeed = 150.0
|
|
||||||
|
|
||||||
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("6_7f1qq")]
|
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("6_7f1qq")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -98,7 +98,8 @@ _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 = 1.0
|
use_3d_avoidance = true
|
||||||
|
avoidance_mask = 9
|
||||||
|
|
||||||
[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.29778, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.29778, 0)
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = "Ferrum"
|
Affinity = "Ferrum"
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = "Embargo Kick"
|
||||||
Drop2 = ""
|
PrimaryAttackType = 5
|
||||||
|
SecondaryAttackName = "Treaty Punch"
|
||||||
|
SecondaryAttackType = 5
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=695 format=3 uid="uid://7eo16vsbrgi3"]
|
[gd_scene load_steps=694 format=3 uid="uid://7eo16vsbrgi3"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_h27bt"]
|
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_h27bt"]
|
||||||
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_yyynn"]
|
[ext_resource type="Resource" uid="uid://bcg3dsd3jcxpb" path="res://src/enemy/enemy_types/08a. Ambassador/AmbassadorLoreInfo.tres" id="2_vh04b"]
|
||||||
[ext_resource type="Texture2D" uid="uid://7ef67gqhcb3d" path="res://src/enemy/enemy_types/08a. Ambassador/animations/B/Layer 173.png" id="3_mhafn"]
|
[ext_resource type="Texture2D" uid="uid://7ef67gqhcb3d" path="res://src/enemy/enemy_types/08a. Ambassador/animations/B/Layer 173.png" id="3_mhafn"]
|
||||||
[ext_resource type="Texture2D" uid="uid://i0pmr2jtdhu5" path="res://src/enemy/enemy_types/08a. Ambassador/animations/B/Layer 174.png" id="4_tuqu4"]
|
[ext_resource type="Texture2D" uid="uid://i0pmr2jtdhu5" path="res://src/enemy/enemy_types/08a. Ambassador/animations/B/Layer 174.png" id="4_tuqu4"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dxo32giakqy8n" path="res://src/enemy/enemy_types/08a. Ambassador/animations/B/Layer 175.png" id="5_66kkx"]
|
[ext_resource type="Texture2D" uid="uid://dxo32giakqy8n" path="res://src/enemy/enemy_types/08a. Ambassador/animations/B/Layer 175.png" id="5_66kkx"]
|
||||||
@@ -276,19 +276,6 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="267_evddb"]
|
[ext_resource type="Texture2D" uid="uid://dafpnwkwcukp4" path="res://src/vfx/shadow_test_1.png" id="267_evddb"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bp6npqoco5fl3" path="res://src/vfx/Enemy Affected/curse_damage.png" id="267_qpodb"]
|
[ext_resource type="Texture2D" uid="uid://bp6npqoco5fl3" path="res://src/vfx/Enemy Affected/curse_damage.png" id="267_qpodb"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_f45wt"]
|
|
||||||
script = ExtResource("2_yyynn")
|
|
||||||
Name = "Ambassador"
|
|
||||||
Description = "Running guy"
|
|
||||||
MaximumHP = ""
|
|
||||||
ATK = ""
|
|
||||||
DEF = ""
|
|
||||||
Affinity = ""
|
|
||||||
Weakness = ""
|
|
||||||
Drop1 = ""
|
|
||||||
Drop2 = ""
|
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
||||||
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
|
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
|
||||||
|
|
||||||
@@ -4375,6 +4362,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.166667, 0.333333),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_fmw6u"]
|
[sub_resource type="Animation" id="Animation_fmw6u"]
|
||||||
resource_name = "primary_attack_left"
|
resource_name = "primary_attack_left"
|
||||||
@@ -4431,6 +4430,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.166667, 0.333333),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_psv15"]
|
[sub_resource type="Animation" id="Animation_psv15"]
|
||||||
resource_name = "primary_attack_right"
|
resource_name = "primary_attack_right"
|
||||||
@@ -4487,6 +4498,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.166667, 0.333333),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_5y02v"]
|
[sub_resource type="Animation" id="Animation_5y02v"]
|
||||||
resource_name = "secondary_attack"
|
resource_name = "secondary_attack"
|
||||||
@@ -4611,6 +4634,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.583333, 0.75),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_m347f"]
|
[sub_resource type="Animation" id="Animation_m347f"]
|
||||||
resource_name = "secondary_attack_left"
|
resource_name = "secondary_attack_left"
|
||||||
@@ -4667,6 +4702,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.583333, 0.75),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_xe0e6"]
|
[sub_resource type="Animation" id="Animation_xe0e6"]
|
||||||
resource_name = "secondary_attack_right"
|
resource_name = "secondary_attack_right"
|
||||||
@@ -4723,6 +4770,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.583333, 0.75),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_x0ep5"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_x0ep5"]
|
||||||
_data = {
|
_data = {
|
||||||
@@ -5258,14 +5317,17 @@ _data = {
|
|||||||
|
|
||||||
[node name="EnemyModelView" type="Node3D"]
|
[node name="EnemyModelView" type="Node3D"]
|
||||||
script = ExtResource("1_h27bt")
|
script = ExtResource("1_h27bt")
|
||||||
EnemyLoreInfo = SubResource("Resource_f45wt")
|
EnemyLoreInfo = ExtResource("2_vh04b")
|
||||||
|
|
||||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.345, 0)
|
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.345, 0)
|
||||||
|
layers = 5
|
||||||
|
cast_shadow = 0
|
||||||
offset = Vector2(0, 75)
|
offset = Vector2(0, 75)
|
||||||
pixel_size = 0.02
|
pixel_size = 0.02
|
||||||
billboard = 2
|
billboard = 2
|
||||||
|
shaded = true
|
||||||
alpha_cut = 2
|
alpha_cut = 2
|
||||||
alpha_antialiasing_mode = 1
|
alpha_antialiasing_mode = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
@@ -5292,6 +5354,7 @@ sprite_frames = SubResource("SpriteFrames_6drt6")
|
|||||||
animation = &"idle_front"
|
animation = &"idle_front"
|
||||||
|
|
||||||
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
@@ -5430,3 +5493,31 @@ unique_name_in_owner = true
|
|||||||
libraries = {
|
libraries = {
|
||||||
&"": SubResource("AnimationLibrary_0tqwp")
|
&"": SubResource("AnimationLibrary_0tqwp")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[node name="SpotLight3D" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.366956, 0.930238, 0, -0.930238, 0.366956, 0, 3.146, 0.771256)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D2" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -0.534057, 0.845448, 0, -0.845448, -0.534057, -0.19446, 3.35395, -1.0422)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D3" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(0.619848, -0.663442, -0.419086, 0, -0.534057, 0.845448, -0.784722, -0.524049, -0.331034, -0.904801, 3.146, -0.393992)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D4" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(-0.0257408, 0.845168, 0.53388, 1.84729e-08, -0.534057, 0.845448, 0.999669, 0.0217625, 0.013747, 0.8955, 3.2741, -0.00555617)
|
||||||
|
light_energy = 0.5
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|||||||
@@ -88,7 +88,6 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_v4xmn")]
|
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_v4xmn")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_followSpeed = 150.0
|
|
||||||
|
|
||||||
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_a21yr")]
|
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_a21yr")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -97,7 +96,8 @@ _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 = 1.0
|
use_3d_avoidance = true
|
||||||
|
avoidance_layers = 9
|
||||||
|
|
||||||
[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.69068, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.69068, 0)
|
||||||
|
|||||||
+173
-4
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=695 format=3 uid="uid://d02te8cwjistl"]
|
[gd_scene load_steps=696 format=3 uid="uid://d02te8cwjistl"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_a8qtn"]
|
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_a8qtn"]
|
||||||
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_xa3ug"]
|
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="2_xa3ug"]
|
||||||
@@ -275,6 +275,7 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://cot4wx5fg5pfs" path="res://src/vfx/Enemy Affected/water_hit_layer2.png" id="266_ewlwi"]
|
[ext_resource type="Texture2D" uid="uid://cot4wx5fg5pfs" path="res://src/vfx/Enemy Affected/water_hit_layer2.png" id="266_ewlwi"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cbei66g134fgv" path="res://src/vfx/Enemy Affected/water layer 1.png" id="267_ucfs5"]
|
[ext_resource type="Texture2D" uid="uid://cbei66g134fgv" path="res://src/vfx/Enemy Affected/water layer 1.png" id="267_ucfs5"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bp6npqoco5fl3" path="res://src/vfx/Enemy Affected/curse_damage.png" id="268_4it51"]
|
[ext_resource type="Texture2D" uid="uid://bp6npqoco5fl3" path="res://src/vfx/Enemy Affected/curse_damage.png" id="268_4it51"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://ugc77goiwht0" path="res://src/audio/sfx/enemy_ambassador_punch.ogg" id="270_i3uxw"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_f45wt"]
|
[sub_resource type="Resource" id="Resource_f45wt"]
|
||||||
script = ExtResource("2_xa3ug")
|
script = ExtResource("2_xa3ug")
|
||||||
@@ -285,8 +286,12 @@ ATK = ""
|
|||||||
DEF = ""
|
DEF = ""
|
||||||
Affinity = ""
|
Affinity = ""
|
||||||
Weakness = ""
|
Weakness = ""
|
||||||
Drop1 = ""
|
PrimaryAttackName = ""
|
||||||
Drop2 = ""
|
PrimaryAttackType = 0
|
||||||
|
SecondaryAttackName = ""
|
||||||
|
SecondaryAttackType = 0
|
||||||
|
TertiaryAttackName = ""
|
||||||
|
TertiaryAttackType = 0
|
||||||
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
metadata/_custom_type_script = "uid://dlsgyx4i1jmp3"
|
||||||
|
|
||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
|
||||||
@@ -4329,7 +4334,7 @@ tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
|||||||
tracks/4/interp = 1
|
tracks/4/interp = 1
|
||||||
tracks/4/loop_wrap = true
|
tracks/4/loop_wrap = true
|
||||||
tracks/4/keys = {
|
tracks/4/keys = {
|
||||||
"times": PackedFloat32Array(0, 0.0833333, 0.25),
|
"times": PackedFloat32Array(0, 0.166667, 0.333333),
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
@@ -4390,6 +4395,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.166667, 0.333333),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_fmw6u"]
|
[sub_resource type="Animation" id="Animation_fmw6u"]
|
||||||
resource_name = "primary_attack_left"
|
resource_name = "primary_attack_left"
|
||||||
@@ -4446,6 +4463,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.166667, 0.333333),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_psv15"]
|
[sub_resource type="Animation" id="Animation_psv15"]
|
||||||
resource_name = "primary_attack_right"
|
resource_name = "primary_attack_right"
|
||||||
@@ -4502,6 +4531,18 @@ tracks/3/keys = {
|
|||||||
"times": PackedFloat32Array(0)
|
"times": PackedFloat32Array(0)
|
||||||
}
|
}
|
||||||
tracks/3/use_blend = true
|
tracks/3/use_blend = true
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.166667, 0.333333),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_5y02v"]
|
[sub_resource type="Animation" id="Animation_5y02v"]
|
||||||
resource_name = "secondary_attack"
|
resource_name = "secondary_attack"
|
||||||
@@ -4555,6 +4596,21 @@ tracks/3/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false, true]
|
"values": [true, false, true]
|
||||||
}
|
}
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("270_i3uxw")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_tlm8w"]
|
[sub_resource type="Animation" id="Animation_tlm8w"]
|
||||||
resource_name = "secondary_attack_back"
|
resource_name = "secondary_attack_back"
|
||||||
@@ -4596,6 +4652,33 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [false]
|
"values": [false]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.583333, 0.75),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("270_i3uxw")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_m347f"]
|
[sub_resource type="Animation" id="Animation_m347f"]
|
||||||
resource_name = "secondary_attack_left"
|
resource_name = "secondary_attack_left"
|
||||||
@@ -4637,6 +4720,33 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [false]
|
"values": [false]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.583333, 0.75),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("270_i3uxw")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_xe0e6"]
|
[sub_resource type="Animation" id="Animation_xe0e6"]
|
||||||
resource_name = "secondary_attack_right"
|
resource_name = "secondary_attack_right"
|
||||||
@@ -4678,6 +4788,33 @@ tracks/2/keys = {
|
|||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true]
|
"values": [true]
|
||||||
}
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("Hitbox/CollisionShape3D:disabled")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.583333, 0.75),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false, true]
|
||||||
|
}
|
||||||
|
tracks/4/type = "audio"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("AudioStreamPlayer3D")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"clips": [{
|
||||||
|
"end_offset": 0.0,
|
||||||
|
"start_offset": 0.0,
|
||||||
|
"stream": ExtResource("270_i3uxw")
|
||||||
|
}],
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
tracks/4/use_blend = true
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_x0ep5"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_x0ep5"]
|
||||||
_data = {
|
_data = {
|
||||||
@@ -5219,8 +5356,11 @@ EnemyLoreInfo = SubResource("Resource_f45wt")
|
|||||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(0.49, 0, 0, 0, 0.49, 0, 0, 0, 0.49, 0, 0.405037, 0)
|
transform = Transform3D(0.49, 0, 0, 0, 0.49, 0, 0, 0, 0.49, 0, 0.405037, 0)
|
||||||
|
layers = 5
|
||||||
|
cast_shadow = 0
|
||||||
offset = Vector2(0, 75)
|
offset = Vector2(0, 75)
|
||||||
billboard = 2
|
billboard = 2
|
||||||
|
shaded = true
|
||||||
alpha_cut = 2
|
alpha_cut = 2
|
||||||
alpha_antialiasing_mode = 1
|
alpha_antialiasing_mode = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
@@ -5251,6 +5391,7 @@ sprite_frames = SubResource("SpriteFrames_6drt6")
|
|||||||
animation = &"idle_front"
|
animation = &"idle_front"
|
||||||
|
|
||||||
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
@@ -5388,3 +5529,31 @@ unique_name_in_owner = true
|
|||||||
libraries = {
|
libraries = {
|
||||||
&"": SubResource("AnimationLibrary_0tqwp")
|
&"": SubResource("AnimationLibrary_0tqwp")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[node name="SpotLight3D" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.366956, 0.930238, 0, -0.930238, 0.366956, 0, 1.73576, 0.771256)
|
||||||
|
light_energy = 0.25
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D2" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -0.534057, 0.845448, 0, -0.845448, -0.534057, -0.19446, 1.9437, -1.0422)
|
||||||
|
light_energy = 0.25
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D3" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(0.619848, -0.663442, -0.419086, -4.66887e-08, -0.534057, 0.845448, -0.784722, -0.524049, -0.331034, -0.904801, 1.73576, -0.393992)
|
||||||
|
light_energy = 0.25
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|
||||||
|
[node name="SpotLight3D4" type="SpotLight3D" parent="."]
|
||||||
|
transform = Transform3D(-0.0257408, 0.845168, 0.53388, 8.06404e-08, -0.534057, 0.845448, 0.999669, 0.0217626, 0.013747, 0.8955, 1.86385, -0.00555617)
|
||||||
|
light_energy = 0.25
|
||||||
|
light_indirect_energy = 0.0
|
||||||
|
light_bake_mode = 0
|
||||||
|
light_cull_mask = 4293918724
|
||||||
|
|||||||
+2
-2
@@ -87,7 +87,6 @@ unique_name_in_owner = true
|
|||||||
|
|
||||||
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_g5uri")]
|
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_g5uri")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
_followSpeed = 150.0
|
|
||||||
|
|
||||||
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_5r3ee")]
|
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("7_5r3ee")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -96,7 +95,8 @@ _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 = 1.0
|
use_3d_avoidance = true
|
||||||
|
avoidance_layers = 9
|
||||||
|
|
||||||
[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.32738, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.32738, 0)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user