Compare commits

..

27 Commits

Author SHA1 Message Date
8630c6c1f3 Update icons in-game 2026-03-22 15:04:14 -07:00
Pal
83dbbba8e6 Finalized Item Icons + New Weapon Slashes 2026-03-20 16:23:51 -07:00
f19cb7edda Rework projectiles and fix some demon wall attacks
Still working on Demon Wall boss fight overall
2026-03-09 22:05:53 -07:00
2c26d6f548 Fix ambassador walk animations to only move while moving arms, fix attack animation hitboxes for them too
Make Chinthe check for safe landing zone before teleporting behind player
Adjust size of Palan/Agni/Shield
2026-03-04 19:26:45 -08:00
70f9807b6c Minor fixes 2026-03-03 22:24:05 -08:00
ff82f51451 Block on events where the inventory will close after, block in general to prevent inventory scrolling during inventory message display 2026-03-03 18:59:09 -08:00
7b6ca68e65 Rust 2026-03-02 22:28:23 -08:00
701e7b0858 Fix receiving items from boxes 2026-03-02 18:17:57 -08:00
e6937244ec Move line of code to move item spawn position after being added to node tree 2026-03-02 15:32:35 -08:00
c4150e78fa Fixed item spawn locations, make filth eater stop firing animation on death 2026-03-02 14:35:48 -08:00
28f38d236e Show inventory alert when equipping/unequipping/augmenting items 2026-03-02 10:33:58 -08:00
bc010a7d82 Started implementation of information about item used screen 2026-03-02 01:57:43 -08:00
46f0e78405 Apply that physics interpolation thing to warping enemies with items 2026-03-01 18:06:48 -08:00
840ffe1a9a Fix really really really annoying issue with enemy spawns
Godot refuses to set CharacterBody3D positions correctly unless you call ResetPhysicsInterpolation immediately after
2026-03-01 17:54:34 -08:00
e50035d9c7 Revert some pathing stuff, adjust general spawn rates 2026-03-01 16:34:18 -08:00
721a45c6bb Fix some boxes and global positioning 2026-02-26 22:56:57 -08:00
0c4a424a4d Fixed teleport enemies bug (swapped Y and Z values....) 2026-02-26 20:06:18 -08:00
c043c6ad04 Animation update 2026-02-26 19:13:47 -08:00
bf168a2577 Add some on-screen FX for some items 2026-02-26 02:56:16 -08:00
fadb1652d4 Add more spell effects 2026-02-26 02:09:38 -08:00
a686ce2fbc Switch navigation mesh to be based on collision only, not collision and texture meshes
Will need to finetune enemy navigation agent placement depending on if they're now too high/low to sit in the navigation region
2026-02-25 22:33:38 -08:00
9d18bbb349 Fix up projectiles 2026-02-24 12:28:01 -08:00
846c8a4c59 2-24-16 build changes 2026-02-24 10:39:34 -08:00
3c1a221522 Enemy viewer fixes 2026-02-23 10:36:08 -08:00
e77ca00002 Fix up enemy viewer, reduce some memory footprint 2026-02-20 01:02:03 -08:00
fd1eb77f57 Fix full size image scaling 2026-02-19 02:15:46 -08:00
6e3175fb99 Add more implementation for gallery menu 2026-02-19 02:12:32 -08:00
2607 changed files with 36893 additions and 13683 deletions

View File

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

View File

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

View File

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

View File

@@ -32,5 +32,8 @@ public enum UsableItemTag
DecreaseAllStats, DecreaseAllStats,
Clone, Clone,
MeltAllEquipment, MeltAllEquipment,
RestoreStats RestoreStats,
GlueAllEquipment,
DoubleStackedItems,
IdentifyRandomItem
} }

View File

@@ -18,12 +18,6 @@ public interface IGameRepo : IDisposable
event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent; event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent;
event Action? PlayerAttack;
event Action? PlayerAttackedWall;
event Action? PlayerAttackedEnemy;
event Action<IEquipableItem>? EquippedItem; event Action<IEquipableItem>? EquippedItem;
event Action<IEquipableItem>? UnequippedItem; event Action<IEquipableItem>? UnequippedItem;
@@ -42,10 +36,6 @@ public interface IGameRepo : IDisposable
public void RemoveItemFromInventory(IBaseInventoryItem item); public void RemoveItemFromInventory(IBaseInventoryItem item);
public void OnPlayerAttack();
public void OnPlayerAttackedWall();
public void CloseInventory(); public void CloseInventory();
public void GameEnded(); public void GameEnded();
@@ -64,9 +54,6 @@ public class GameRepo : IGameRepo
public event Action<string>? AnnounceMessageOnMainScreenEvent; public event Action<string>? AnnounceMessageOnMainScreenEvent;
public event Action<string>? AnnounceMessageInInventoryEvent; public event Action<string>? AnnounceMessageInInventoryEvent;
public event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent; public event Action<IBaseInventoryItem>? RemoveItemFromInventoryEvent;
public event Action? PlayerAttack;
public event Action? PlayerAttackedWall;
public event Action? PlayerAttackedEnemy;
public event Action<IEquipableItem>? EquippedItem; public event Action<IEquipableItem>? EquippedItem;
public event Action<IEquipableItem>? UnequippedItem; public event Action<IEquipableItem>? UnequippedItem;
public event Action<IEnemy>? EnemyDied; public event Action<IEnemy>? EnemyDied;
@@ -107,16 +94,6 @@ public class GameRepo : IGameRepo
RemoveItemFromInventoryEvent?.Invoke(item); RemoveItemFromInventoryEvent?.Invoke(item);
} }
public void OnPlayerAttack()
{
PlayerAttack?.Invoke();
}
public void OnPlayerAttackedWall()
{
PlayerAttackedWall?.Invoke();
}
public void CloseInventory() public void CloseInventory()
{ {
CloseInventoryEvent?.Invoke(); CloseInventoryEvent?.Invoke();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -40,6 +40,7 @@ runtime/advanced/uses_dotnet=true
window/size/viewport_width=1920 window/size/viewport_width=1920
window/size/viewport_height=1080 window/size/viewport_height=1080
window/stretch/mode="canvas_items" window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[dotnet] [dotnet]
@@ -86,6 +87,7 @@ import/blender/enabled=false
[global_group] [global_group]
DimmableAudio="" DimmableAudio=""
enemy=""
[importer_defaults] [importer_defaults]
@@ -258,11 +260,15 @@ AltAttack={
CameraForward={ CameraForward={
"deadzone": 0.2, "deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null) "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194446,"key_label":0,"unicode":56,"location":0,"echo":false,"script":null)
] ]
} }
CameraBack={ CameraBack={
"deadzone": 0.2, "deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null) "events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194440,"key_label":0,"unicode":50,"location":0,"echo":false,"script":null)
] ]
} }
EnemyViewerIdle={ EnemyViewerIdle={
@@ -278,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", "res://tutorialstone.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")
[layer_names] [layer_names]
@@ -312,6 +318,7 @@ jolt_physics_3d/simulation/areas_detect_static_bodies=true
textures/canvas_textures/default_texture_filter=0 textures/canvas_textures/default_texture_filter=0
textures/lossless_compression/force_png=true textures/lossless_compression/force_png=true
lights_and_shadows/directional_shadow/size=2048
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=4 lights_and_shadows/directional_shadow/soft_shadow_filter_quality=4
lights_and_shadows/directional_shadow/16_bits=false lights_and_shadows/directional_shadow/16_bits=false
lights_and_shadows/positional_shadow/soft_shadow_filter_quality=3 lights_and_shadows/positional_shadow/soft_shadow_filter_quality=3

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -74,9 +74,9 @@ public partial class BossTypeA : Enemy, IHaveEngagePlayerBehavior, IHaveFollowBe
protected void OnVelocityComputed(Vector3 safeVelocity) protected void OnVelocityComputed(Vector3 safeVelocity)
{ {
Velocity = safeVelocity; Velocity = new Vector3(safeVelocity.X, 0, safeVelocity.Z);
if (!Velocity.IsZeroApprox()) if (!Velocity.IsZeroApprox())
LookAtTarget(safeVelocity); LookAtTarget(Velocity);
MoveAndSlide(); MoveAndSlide();
} }
@@ -150,7 +150,7 @@ public partial class BossTypeA : Enemy, IHaveEngagePlayerBehavior, IHaveFollowBe
private float GetRotationAngle() private float GetRotationAngle()
{ {
var target = new Vector3(_player.GlobalPosition.X, Position.Y, _player.GlobalPosition.Z); var target = new Vector3(_player.GlobalPosition.X, GlobalPosition.Y, _player.GlobalPosition.Z);
_rotation.LookAt(target, Vector3.Up, true); _rotation.LookAt(target, Vector3.Up, true);
_rotation.RotateY(Rotation.Y); _rotation.RotateY(Rotation.Y);
return _rotation.Rotation.Y; return _rotation.Rotation.Y;

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 = RandomizeTimer(_minimumAttackTime, _maximumAttackTime); _actionTimer.WaitTime = 0.8f;
_actionTimer.Timeout += OnAttackTimeout; _actionTimer.Timeout += OnAttackTimeout;
_acquireTargetTimer.Timeout += OnAcquireTargetTimeout; _acquireTargetTimer.Timeout += OnAcquireTargetTimeout;
AddChild(_actionTimer); AddChild(_actionTimer);
@@ -34,7 +34,6 @@ public partial class EngagePlayerBehavior : Node, IEngagePlayerBehavior
{ {
_actionTimer.Start(); _actionTimer.Start();
_acquireTargetTimer.Start(); _acquireTargetTimer.Start();
EmitSignal(SignalName.TakeAction);
} }
public void Disengage() public void Disengage()

View File

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

View File

@@ -32,7 +32,7 @@ top_radius = 0.0
[sub_resource type="CylinderShape3D" id="CylinderShape3D_drfkj"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_drfkj"]
radius = 1.0 radius = 1.0
[node name="Sproingy" type="CharacterBody3D"] [node name="Sproingy" type="CharacterBody3D" groups=["enemy"]]
process_mode = 1 process_mode = 1
collision_layer = 10 collision_layer = 10
axis_lock_linear_y = true axis_lock_linear_y = true
@@ -84,7 +84,6 @@ collision_mask = 34
shape = SubResource("CylinderShape3D_drfkj") shape = SubResource("CylinderShape3D_drfkj")
[node name="Visual" type="Node3D" parent="."] [node name="Visual" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.975554, 0)
[node name="EnemyModelView" parent="Visual" instance=ExtResource("4_o3b7p")] [node name="EnemyModelView" parent="Visual" instance=ExtResource("4_o3b7p")]
unique_name_in_owner = true unique_name_in_owner = true
@@ -101,14 +100,13 @@ _followSpeed = 150.0
[node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("5_drfkj")] [node name="EngagePlayerBehavior" parent="Components" instance=ExtResource("5_drfkj")]
unique_name_in_owner = true unique_name_in_owner = true
_minimumAttackTime = 1.0 _maximumAttackTime = 4.0
_maximumAttackTime = 3.0
_acquireTargetTime = 2.0 _acquireTargetTime = 2.0
[node name="NavigationAgent" type="NavigationAgent3D" parent="Components"] [node name="NavigationAgent" type="NavigationAgent3D" parent="Components"]
unique_name_in_owner = true unique_name_in_owner = true
avoidance_enabled = true avoidance_enabled = true
radius = 1.0 radius = 3.0
[node name="SFX" type="Node3D" parent="."] [node name="SFX" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.0617, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.0617, 0)

View File

@@ -666,7 +666,7 @@ EnemyLoreInfo = SubResource("Resource_ivy74")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 1.1044, 0) transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 2.05501, 0)
pixel_size = 0.001 pixel_size = 0.001
billboard = 2 billboard = 2
shaded = true shaded = true
@@ -697,7 +697,7 @@ animation = &"idle_left_walk"
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 1.1044, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 2.05501, 0)
collision_layer = 64 collision_layer = 64
collision_mask = 64 collision_mask = 64
@@ -722,12 +722,12 @@ anim_player = NodePath("../AnimationPlayer")
[node name="WalkSFX" type="AudioStreamPlayer3D" parent="."] [node name="WalkSFX" type="AudioStreamPlayer3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1044, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.05501, 0)
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."] [node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.115, 0, 0, 0, -5.02681e-09, 0.115, 0, -0.115, -5.02681e-09, -0.00018537, -0.942894, 0.0453106) transform = Transform3D(0.115, 0, 0, 0, -5.02681e-09, 0.115, 0, -0.115, -5.02681e-09, -0.00018537, 0.00771421, 0.0453106)
transparency = 0.1 transparency = 0.1
cast_shadow = 0 cast_shadow = 0
texture_filter = 0 texture_filter = 0

View File

@@ -15,15 +15,16 @@ height = 5.0
radius = 1.0 radius = 1.0
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0h5s2"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0h5s2"]
radius = 0.34933
height = 2.66932 height = 2.66932
[sub_resource type="CylinderShape3D" id="CylinderShape3D_eek1b"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_eek1b"]
radius = 1.0 radius = 1.0
[sub_resource type="SphereShape3D" id="SphereShape3D_wrps7"] [sub_resource type="SphereShape3D" id="SphereShape3D_wrps7"]
radius = 1.0 radius = 0.552847
[node name="Michael" type="CharacterBody3D"] [node name="Michael" type="CharacterBody3D" groups=["enemy"]]
process_mode = 1 process_mode = 1
collision_layer = 10 collision_layer = 10
collision_mask = 11 collision_mask = 11
@@ -64,7 +65,7 @@ shape = SubResource("CapsuleShape3D_0h5s2")
[node name="EnemyModelView" parent="." instance=ExtResource("3_wrps7")] [node name="EnemyModelView" parent="." instance=ExtResource("3_wrps7")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0799522, 0.805832, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.08, 0, 0)
[node name="PlayerDetector" type="Area3D" parent="."] [node name="PlayerDetector" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
@@ -89,6 +90,9 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.71715, 0)
[node name="PatrolBehavior" parent="Components" instance=ExtResource("5_fkx5j")] [node name="PatrolBehavior" parent="Components" instance=ExtResource("5_fkx5j")]
unique_name_in_owner = true unique_name_in_owner = true
_patrolSpeed = 60.0
_patrolRange = 15.0
_patrolTime = 20.0
[node name="FollowBehavior" parent="Components" instance=ExtResource("6_bun8r")] [node name="FollowBehavior" parent="Components" instance=ExtResource("6_bun8r")]
unique_name_in_owner = true unique_name_in_owner = true
@@ -103,7 +107,7 @@ _acquireTargetTime = 2.0
[node name="NavigationAgent" type="NavigationAgent3D" parent="Components"] [node name="NavigationAgent" type="NavigationAgent3D" parent="Components"]
unique_name_in_owner = true unique_name_in_owner = true
avoidance_enabled = true avoidance_enabled = true
radius = 1.0 radius = 3.0
[node name="HitSounds" type="Node3D" parent="."] [node name="HitSounds" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.71715, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.71715, 0)

View File

@@ -71,7 +71,7 @@
[ext_resource type="Texture2D" uid="uid://vxphbifafq0q" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (21).png" id="68_msiau"] [ext_resource type="Texture2D" uid="uid://vxphbifafq0q" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (21).png" id="68_msiau"]
[ext_resource type="Texture2D" uid="uid://7r30bjydumon" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (22).png" id="69_lec8c"] [ext_resource type="Texture2D" uid="uid://7r30bjydumon" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (22).png" id="69_lec8c"]
[ext_resource type="Texture2D" uid="uid://djspx2smexhme" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (23).png" id="70_f0jo7"] [ext_resource type="Texture2D" uid="uid://djspx2smexhme" path="res://src/enemy/enemy_types/02. michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (23).png" id="70_f0jo7"]
[ext_resource type="PackedScene" path="res://src/enemy/BasicEnemyAnimationTree.tscn" id="73_gby04"] [ext_resource type="PackedScene" uid="uid://cygwsc1gebeut" path="res://src/enemy/BasicEnemyAnimationTree.tscn" id="73_gby04"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="74_fxhv6"] [ext_resource type="AnimationNodeStateMachine" uid="uid://cbq8xog50cjjy" path="res://src/enemy/animation_state_machines/PrimaryAttackStateMachine.tres" id="74_fxhv6"]
[ext_resource type="Texture2D" uid="uid://duygq1qfer5oa" path="res://src/vfx/Enemy/michael_attack.png" id="74_mip6u"] [ext_resource type="Texture2D" uid="uid://duygq1qfer5oa" path="res://src/vfx/Enemy/michael_attack.png" id="74_mip6u"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="74_pxi1p"] [ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="74_pxi1p"]
@@ -1187,7 +1187,7 @@ EnemyLoreInfo = SubResource("Resource_gby04")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25389, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.98924, 0)
billboard = 2 billboard = 2
shaded = true shaded = true
alpha_cut = 1 alpha_cut = 1
@@ -1245,19 +1245,19 @@ libraries = {
} }
[node name="Michael Attack VFX" type="AnimatedSprite3D" parent="."] [node name="Michael Attack VFX" type="AnimatedSprite3D" parent="."]
transform = Transform3D(0.72, 0, 0, 0, 0.72, 0, 0, 0, 0.72, -0.129818, 1.61521, 0.532815) transform = Transform3D(0.72, 0, 0, 0, 0.72, 0, 0, 0, 0.72, -0.129818, 2.35056, 0.532815)
modulate = Color(0.977, 0.31, 1, 0.741176) modulate = Color(0.977, 0.31, 1, 0.741176)
billboard = 2 billboard = 2
sprite_frames = SubResource("SpriteFrames_suy1t") sprite_frames = SubResource("SpriteFrames_suy1t")
[node name="WalkSFX" type="AudioStreamPlayer3D" parent="."] [node name="WalkSFX" type="AudioStreamPlayer3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.34076, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.07611, 0)
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."] [node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.38, 0, 0, 0, -1.66103e-08, 0.38, 0, -0.38, -1.66103e-08, 0.00393164, -0.728023, 0.0077811) transform = Transform3D(0.38, 0, 0, 0, -1.66103e-08, 0.38, 0, -0.38, -1.66103e-08, 0.00393164, 0.0073306, 0.0077811)
transparency = 0.1 transparency = 0.1
cast_shadow = 0 cast_shadow = 0
modulate = Color(1, 1, 1, 0.591) modulate = Color(1, 1, 1, 0.591)

View File

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

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=16 format=3 uid="uid://bl426uws0i86l"] [gd_scene load_steps=16 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="PackedScene" 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"]
[ext_resource type="PackedScene" uid="uid://cve5oouhowtff" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="6_fccr3"] [ext_resource type="PackedScene" uid="uid://cve5oouhowtff" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="6_fccr3"]
@@ -16,10 +16,11 @@ height = 5.0
radius = 1.0 radius = 1.0
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
radius = 1.0 radius = 2.54294
height = 5.08589
[sub_resource type="SphereShape3D" id="SphereShape3D_0y048"] [sub_resource type="SphereShape3D" id="SphereShape3D_0y048"]
radius = 1.0 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")
@@ -35,10 +36,10 @@ Drop2 = ""
metadata/_custom_type_script = ExtResource("4_5eid5") metadata/_custom_type_script = ExtResource("4_5eid5")
[sub_resource type="CylinderShape3D" id="CylinderShape3D_qbmfg"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_qbmfg"]
height = 1.5 height = 5.81738
radius = 2.0 radius = 3.91016
[node name="FilthEater" type="CharacterBody3D"] [node name="FilthEater" type="CharacterBody3D" groups=["enemy"]]
process_mode = 1 process_mode = 1
collision_layer = 10 collision_layer = 10
collision_mask = 11 collision_mask = 11
@@ -48,7 +49,7 @@ script = ExtResource("1_p438s")
[node name="LineOfSight" type="Area3D" parent="."] [node name="LineOfSight" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1.56859, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 2.25757, 0)
collision_layer = 2 collision_layer = 2
collision_mask = 2 collision_mask = 2
@@ -58,17 +59,17 @@ shape = SubResource("CylinderShape3D_jbgmx")
[node name="CollisionShape" type="CollisionShape3D" parent="."] [node name="CollisionShape" type="CollisionShape3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1.56859, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 2.25757, 0)
shape = SubResource("CapsuleShape3D_cwfph") shape = SubResource("CapsuleShape3D_cwfph")
[node name="Raycast" type="RayCast3D" parent="."] [node name="Raycast" type="RayCast3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.56859, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.31086, 0)
target_position = Vector3(0, 0, -5) target_position = Vector3(0, 0, -5)
collision_mask = 3 collision_mask = 3
[node name="Collision" type="Area3D" parent="."] [node name="Collision" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.56859, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25757, 0)
collision_layer = 2048 collision_layer = 2048
collision_mask = 0 collision_mask = 0
@@ -78,21 +79,21 @@ shape = SubResource("SphereShape3D_0y048")
[node name="EnemyModelView" parent="." instance=ExtResource("3_rrwed")] [node name="EnemyModelView" parent="." instance=ExtResource("3_rrwed")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.06859, 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="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, 1.56859, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25757, 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.179932, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2771, 0)
shape = SubResource("CylinderShape3D_qbmfg") shape = SubResource("CylinderShape3D_qbmfg")
[node name="Components" type="Node3D" parent="."] [node name="Components" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.56859, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25757, 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
@@ -108,10 +109,11 @@ _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 height = 2.0
radius = 3.0
[node name="HitSounds" type="Node3D" parent="."] [node name="HitSounds" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.56859, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.25757, 0)
[node name="AbsorbSFX" type="AudioStreamPlayer3D" parent="HitSounds"] [node name="AbsorbSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -0,0 +1,843 @@
[gd_scene load_steps=119 format=3 uid="uid://cnhoya51br05n"]
[ext_resource type="Script" uid="uid://bbvi33wy7w7d5" path="res://src/system/EnemyProjectile.cs" id="1_lfvya"]
[ext_resource type="Script" uid="uid://ctshiyffvt4y5" path="res://src/system/AttackDataResource.cs" id="2_6m87k"]
[ext_resource type="Texture2D" uid="uid://dvjqokin1o1ic" path="res://src/vfx/Enemy/green_orbs.png" id="3_uopp7"]
[ext_resource type="AudioStream" uid="uid://c0jveij17p14k" path="res://src/audio/sfx/ENEMY_EDEN_PILLAR_PROJECTILETRAVEL.ogg" id="4_n84oq"]
[sub_resource type="Resource" id="Resource_ka3x7"]
script = ExtResource("2_6m87k")
Damage = 10
ElementType = 1
SpecialEffectType = 0
metadata/_custom_type_script = "uid://ctshiyffvt4y5"
[sub_resource type="AtlasTexture" id="AtlasTexture_fwra5"]
atlas = ExtResource("3_uopp7")
region = Rect2(6656, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_nmlvd"]
atlas = ExtResource("3_uopp7")
region = Rect2(7168, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_4i1f6"]
atlas = ExtResource("3_uopp7")
region = Rect2(7680, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_g2tr6"]
atlas = ExtResource("3_uopp7")
region = Rect2(8192, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_v28id"]
atlas = ExtResource("3_uopp7")
region = Rect2(8704, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_sab8s"]
atlas = ExtResource("3_uopp7")
region = Rect2(9216, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_u7dbd"]
atlas = ExtResource("3_uopp7")
region = Rect2(9728, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_4g55l"]
atlas = ExtResource("3_uopp7")
region = Rect2(10240, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ef44f"]
atlas = ExtResource("3_uopp7")
region = Rect2(10752, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_aqbh5"]
atlas = ExtResource("3_uopp7")
region = Rect2(11264, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_eyym5"]
atlas = ExtResource("3_uopp7")
region = Rect2(11776, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_m2eau"]
atlas = ExtResource("3_uopp7")
region = Rect2(12288, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_gmksg"]
atlas = ExtResource("3_uopp7")
region = Rect2(12800, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_jacuc"]
atlas = ExtResource("3_uopp7")
region = Rect2(13312, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_5ligs"]
atlas = ExtResource("3_uopp7")
region = Rect2(13824, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_fsvo7"]
atlas = ExtResource("3_uopp7")
region = Rect2(14336, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_6meg3"]
atlas = ExtResource("3_uopp7")
region = Rect2(14848, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_kj2al"]
atlas = ExtResource("3_uopp7")
region = Rect2(15360, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_erggy"]
atlas = ExtResource("3_uopp7")
region = Rect2(15872, 0, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_oko1t"]
atlas = ExtResource("3_uopp7")
region = Rect2(0, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ngo1a"]
atlas = ExtResource("3_uopp7")
region = Rect2(512, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_d50mx"]
atlas = ExtResource("3_uopp7")
region = Rect2(1024, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_pdnto"]
atlas = ExtResource("3_uopp7")
region = Rect2(1536, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ppjtg"]
atlas = ExtResource("3_uopp7")
region = Rect2(2048, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_4r8qo"]
atlas = ExtResource("3_uopp7")
region = Rect2(2560, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_w65xu"]
atlas = ExtResource("3_uopp7")
region = Rect2(3072, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_3v0vv"]
atlas = ExtResource("3_uopp7")
region = Rect2(3584, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_nxbom"]
atlas = ExtResource("3_uopp7")
region = Rect2(4096, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_53p68"]
atlas = ExtResource("3_uopp7")
region = Rect2(4608, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_jlpox"]
atlas = ExtResource("3_uopp7")
region = Rect2(5120, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_uqsli"]
atlas = ExtResource("3_uopp7")
region = Rect2(5632, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_wg32o"]
atlas = ExtResource("3_uopp7")
region = Rect2(6144, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_b016l"]
atlas = ExtResource("3_uopp7")
region = Rect2(6656, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ntr7w"]
atlas = ExtResource("3_uopp7")
region = Rect2(7168, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_5rarj"]
atlas = ExtResource("3_uopp7")
region = Rect2(7680, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_0jdgy"]
atlas = ExtResource("3_uopp7")
region = Rect2(8192, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_6bj2s"]
atlas = ExtResource("3_uopp7")
region = Rect2(8704, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_pjf7m"]
atlas = ExtResource("3_uopp7")
region = Rect2(9216, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_2uv64"]
atlas = ExtResource("3_uopp7")
region = Rect2(9728, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_vw551"]
atlas = ExtResource("3_uopp7")
region = Rect2(10240, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_kjw5c"]
atlas = ExtResource("3_uopp7")
region = Rect2(10752, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_qxstr"]
atlas = ExtResource("3_uopp7")
region = Rect2(11264, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_2dppr"]
atlas = ExtResource("3_uopp7")
region = Rect2(11776, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_awr7x"]
atlas = ExtResource("3_uopp7")
region = Rect2(12288, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_1hgp1"]
atlas = ExtResource("3_uopp7")
region = Rect2(12800, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_r0tmy"]
atlas = ExtResource("3_uopp7")
region = Rect2(13312, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_eptep"]
atlas = ExtResource("3_uopp7")
region = Rect2(13824, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_c7ped"]
atlas = ExtResource("3_uopp7")
region = Rect2(14336, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_hen63"]
atlas = ExtResource("3_uopp7")
region = Rect2(14848, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_knyyh"]
atlas = ExtResource("3_uopp7")
region = Rect2(15360, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_v6123"]
atlas = ExtResource("3_uopp7")
region = Rect2(15872, 512, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_f5sm0"]
atlas = ExtResource("3_uopp7")
region = Rect2(0, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_xau62"]
atlas = ExtResource("3_uopp7")
region = Rect2(512, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_pxsp5"]
atlas = ExtResource("3_uopp7")
region = Rect2(1024, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_n4qhf"]
atlas = ExtResource("3_uopp7")
region = Rect2(1536, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ngbkn"]
atlas = ExtResource("3_uopp7")
region = Rect2(2048, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_p60oa"]
atlas = ExtResource("3_uopp7")
region = Rect2(2560, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_xxtor"]
atlas = ExtResource("3_uopp7")
region = Rect2(3072, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_sd3ar"]
atlas = ExtResource("3_uopp7")
region = Rect2(3584, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_760ua"]
atlas = ExtResource("3_uopp7")
region = Rect2(4096, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ej064"]
atlas = ExtResource("3_uopp7")
region = Rect2(4608, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_omwgy"]
atlas = ExtResource("3_uopp7")
region = Rect2(5120, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_yhxse"]
atlas = ExtResource("3_uopp7")
region = Rect2(5632, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_neq7o"]
atlas = ExtResource("3_uopp7")
region = Rect2(6144, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_e0lhk"]
atlas = ExtResource("3_uopp7")
region = Rect2(6656, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_15mir"]
atlas = ExtResource("3_uopp7")
region = Rect2(7168, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_cxq3x"]
atlas = ExtResource("3_uopp7")
region = Rect2(7680, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ajyjc"]
atlas = ExtResource("3_uopp7")
region = Rect2(8192, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_i2tjp"]
atlas = ExtResource("3_uopp7")
region = Rect2(8704, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_w73fq"]
atlas = ExtResource("3_uopp7")
region = Rect2(9216, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_c823a"]
atlas = ExtResource("3_uopp7")
region = Rect2(9728, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_wje2w"]
atlas = ExtResource("3_uopp7")
region = Rect2(10240, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_bgmkr"]
atlas = ExtResource("3_uopp7")
region = Rect2(10752, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_pcpin"]
atlas = ExtResource("3_uopp7")
region = Rect2(11264, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_siqu3"]
atlas = ExtResource("3_uopp7")
region = Rect2(11776, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_w57vc"]
atlas = ExtResource("3_uopp7")
region = Rect2(12288, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_bj2gd"]
atlas = ExtResource("3_uopp7")
region = Rect2(12800, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_mvlj8"]
atlas = ExtResource("3_uopp7")
region = Rect2(13312, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_vbqgu"]
atlas = ExtResource("3_uopp7")
region = Rect2(13824, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_w6bd8"]
atlas = ExtResource("3_uopp7")
region = Rect2(14336, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_xaiwn"]
atlas = ExtResource("3_uopp7")
region = Rect2(14848, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_hlqf2"]
atlas = ExtResource("3_uopp7")
region = Rect2(15360, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_djgeg"]
atlas = ExtResource("3_uopp7")
region = Rect2(15872, 1024, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_0vyr1"]
atlas = ExtResource("3_uopp7")
region = Rect2(0, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_wxeaf"]
atlas = ExtResource("3_uopp7")
region = Rect2(512, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_gstdc"]
atlas = ExtResource("3_uopp7")
region = Rect2(1024, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_2t3th"]
atlas = ExtResource("3_uopp7")
region = Rect2(1536, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_5pprm"]
atlas = ExtResource("3_uopp7")
region = Rect2(2048, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_6g7pw"]
atlas = ExtResource("3_uopp7")
region = Rect2(2560, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_ew882"]
atlas = ExtResource("3_uopp7")
region = Rect2(3072, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_wa7kq"]
atlas = ExtResource("3_uopp7")
region = Rect2(3584, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_por7r"]
atlas = ExtResource("3_uopp7")
region = Rect2(4096, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_4imy8"]
atlas = ExtResource("3_uopp7")
region = Rect2(4608, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_h0jgt"]
atlas = ExtResource("3_uopp7")
region = Rect2(5120, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_4onds"]
atlas = ExtResource("3_uopp7")
region = Rect2(5632, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_7epd5"]
atlas = ExtResource("3_uopp7")
region = Rect2(6144, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_whtc5"]
atlas = ExtResource("3_uopp7")
region = Rect2(6656, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_8iuha"]
atlas = ExtResource("3_uopp7")
region = Rect2(7168, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_u27ji"]
atlas = ExtResource("3_uopp7")
region = Rect2(7680, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_o6fjn"]
atlas = ExtResource("3_uopp7")
region = Rect2(8192, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_sb1rd"]
atlas = ExtResource("3_uopp7")
region = Rect2(8704, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_jwx81"]
atlas = ExtResource("3_uopp7")
region = Rect2(9216, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_w12jc"]
atlas = ExtResource("3_uopp7")
region = Rect2(9728, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_1wl6e"]
atlas = ExtResource("3_uopp7")
region = Rect2(10240, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_0cf10"]
atlas = ExtResource("3_uopp7")
region = Rect2(10752, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_bvqx0"]
atlas = ExtResource("3_uopp7")
region = Rect2(11264, 1536, 512, 512)
[sub_resource type="AtlasTexture" id="AtlasTexture_pfkh6"]
atlas = ExtResource("3_uopp7")
region = Rect2(11776, 1536, 512, 512)
[sub_resource type="SpriteFrames" id="SpriteFrames_brsyt"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_fwra5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_nmlvd")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4i1f6")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_g2tr6")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_v28id")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_sab8s")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_u7dbd")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4g55l")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ef44f")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_aqbh5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_eyym5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_m2eau")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_gmksg")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jacuc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5ligs")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fsvo7")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6meg3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_kj2al")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_erggy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_oko1t")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ngo1a")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_d50mx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_pdnto")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ppjtg")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4r8qo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_w65xu")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_3v0vv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_nxbom")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_53p68")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jlpox")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_uqsli")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wg32o")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_b016l")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ntr7w")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5rarj")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0jdgy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6bj2s")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_pjf7m")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2uv64")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vw551")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_kjw5c")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_qxstr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2dppr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_awr7x")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1hgp1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_r0tmy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_eptep")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_c7ped")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_hen63")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_knyyh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_v6123")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_f5sm0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_xau62")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_pxsp5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_n4qhf")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ngbkn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_p60oa")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_xxtor")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_sd3ar")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_760ua")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ej064")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_omwgy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_yhxse")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_neq7o")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_e0lhk")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_15mir")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_cxq3x")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ajyjc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_i2tjp")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_w73fq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_c823a")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wje2w")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bgmkr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_pcpin")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_siqu3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_w57vc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bj2gd")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mvlj8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vbqgu")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_w6bd8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_xaiwn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_hlqf2")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_djgeg")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0vyr1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wxeaf")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_gstdc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2t3th")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5pprm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6g7pw")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ew882")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wa7kq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_por7r")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4imy8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_h0jgt")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4onds")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7epd5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_whtc5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8iuha")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_u27ji")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_o6fjn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_sb1rd")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jwx81")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_w12jc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1wl6e")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0cf10")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bvqx0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_pfkh6")
}],
"loop": true,
"name": &"default",
"speed": 24.0
}]
[sub_resource type="SphereShape3D" id="SphereShape3D_kct8n"]
[sub_resource type="Animation" id="Animation_xrn7e"]
resource_name = "fire"
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../AudioStreamPlayer3D")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("4_n84oq")
}],
"times": PackedFloat32Array(0.0334333)
}
tracks/0/use_blend = true
[sub_resource type="Animation" id="Animation_8qeb2"]
length = 0.001
[sub_resource type="AnimationLibrary" id="AnimationLibrary_q8n6h"]
_data = {
&"Fire": SubResource("Animation_xrn7e"),
&"RESET": SubResource("Animation_8qeb2")
}
[sub_resource type="SphereShape3D" id="SphereShape3D_ka3x7"]
[node name="FilthEaterProjectile" type="RigidBody3D"]
collision_layer = 0
gravity_scale = 0.0
contact_monitor = true
max_contacts_reported = 10
script = ExtResource("1_lfvya")
AttackData = SubResource("Resource_ka3x7")
[node name="Bullet" type="Node3D" parent="."]
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="Bullet"]
unique_name_in_owner = true
transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, -1.01, 0)
offset = Vector2(0, 150)
billboard = 1
texture_filter = 0
render_priority = 100
sprite_frames = SubResource("SpriteFrames_brsyt")
autoplay = "default"
frame_progress = 0.259173
[node name="Area3D" type="Area3D" parent="Bullet"]
unique_name_in_owner = true
collision_layer = 0
collision_mask = 64
[node name="CollisionShape3D" type="CollisionShape3D" parent="Bullet/Area3D"]
shape = SubResource("SphereShape3D_kct8n")
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Bullet"]
[node name="AnimationPlayer" type="AnimationPlayer" parent="Bullet"]
unique_name_in_owner = true
root_node = NodePath("../AnimatedSprite3D")
libraries = {
&"": SubResource("AnimationLibrary_q8n6h")
}
autoplay = "Fire"
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("SphereShape3D_ka3x7")

View File

@@ -25,7 +25,7 @@ radius = 1.0
[sub_resource type="CylinderShape3D" id="CylinderShape3D_746fv"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_746fv"]
radius = 1.25 radius = 1.25
[node name="Sara" type="CharacterBody3D"] [node name="Sara" type="CharacterBody3D" groups=["enemy"]]
process_mode = 1 process_mode = 1
collision_layer = 10 collision_layer = 10
collision_mask = 3 collision_mask = 3
@@ -70,6 +70,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.95329, 0)
[node name="EnemyModelView" parent="Visual" instance=ExtResource("4_82s0m")] [node name="EnemyModelView" parent="Visual" instance=ExtResource("4_82s0m")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0108221, -0.896212, 0)
[node name="PlayerDetector" type="Area3D" parent="."] [node name="PlayerDetector" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -162,7 +162,7 @@
[ext_resource type="Texture2D" uid="uid://n2c8kfwt6ve3" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK2/SIDE R/0019.png" id="160_r8ggx"] [ext_resource type="Texture2D" uid="uid://n2c8kfwt6ve3" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK2/SIDE R/0019.png" id="160_r8ggx"]
[ext_resource type="Texture2D" uid="uid://dykb4rwua8iyw" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK2/SIDE R/0022.png" id="161_xafpd"] [ext_resource type="Texture2D" uid="uid://dykb4rwua8iyw" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK2/SIDE R/0022.png" id="161_xafpd"]
[ext_resource type="AudioStream" uid="uid://b4bseex34nu6c" path="res://src/audio/sfx/ENEMY_APSARA_STRIKE.ogg" id="162_veo2p"] [ext_resource type="AudioStream" uid="uid://b4bseex34nu6c" path="res://src/audio/sfx/ENEMY_APSARA_STRIKE.ogg" id="162_veo2p"]
[ext_resource type="PackedScene" path="res://src/enemy/TwoAttacksEnemyAnimationTree.tscn" id="163_e6etm"] [ext_resource type="PackedScene" uid="uid://3ax3e5uce27d" path="res://src/enemy/TwoAttacksEnemyAnimationTree.tscn" id="163_e6etm"]
[ext_resource type="AudioStream" uid="uid://dnnhfw6cgrca4" path="res://src/audio/sfx/enemy_sara_magic.ogg" id="163_xppqu"] [ext_resource type="AudioStream" uid="uid://dnnhfw6cgrca4" path="res://src/audio/sfx/enemy_sara_magic.ogg" id="163_xppqu"]
[ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="164_fc7i0"] [ext_resource type="AnimationNodeStateMachine" uid="uid://co7lshemjrro8" path="res://src/enemy/animation_state_machines/IdleStateMachine.tres" id="164_fc7i0"]
[ext_resource type="Texture2D" uid="uid://cxibdrta6imfb" path="res://src/vfx/Enemy/nega.png" id="164_rrjme"] [ext_resource type="Texture2D" uid="uid://cxibdrta6imfb" path="res://src/vfx/Enemy/nega.png" id="164_rrjme"]
@@ -1824,12 +1824,11 @@ _data = {
} }
[node name="EnemyModelView" type="Node3D"] [node name="EnemyModelView" type="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.31442, 0)
script = ExtResource("1_oh25a") script = ExtResource("1_oh25a")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, -1.31336, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.88609, 0)
pixel_size = 0.005 pixel_size = 0.005
billboard = 1 billboard = 1
shaded = true shaded = true
@@ -1859,7 +1858,7 @@ animation = &"idle_front"
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0.72758, 0)
collision_layer = 64 collision_layer = 64
collision_mask = 64 collision_mask = 64
@@ -1880,7 +1879,7 @@ tree_root = SubResource("AnimationNodeStateMachine_rasxg")
advance_expression_base_node = NodePath("..") advance_expression_base_node = NodePath("..")
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."] [node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."]
transform = Transform3D(0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, -0.0335064, -0.0871174, -0.40289) transform = Transform3D(0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, -0.0335064, 0.640463, -0.40289)
modulate = Color(1, 1, 1, 0.72549) modulate = Color(1, 1, 1, 0.72549)
billboard = 2 billboard = 2
texture_filter = 1 texture_filter = 1
@@ -1893,9 +1892,11 @@ libraries = {
[node name="Attacks" type="AudioStreamPlayer3D" parent="."] [node name="Attacks" type="AudioStreamPlayer3D" parent="."]
process_mode = 3 process_mode = 3
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.72758, 0)
bus = &"SFX" bus = &"SFX"
[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, 0.72758, 0)
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=13 format=3 uid="uid://da32nr35mpqrn"] [gd_scene load_steps=13 format=3 uid="uid://da32nr35mpqrn"]
[ext_resource type="Script" uid="uid://dwfxs5yrf7i3v" path="res://src/enemy/enemy_types/05. ballos/Ballos.cs" id="1_iy2fp"] [ext_resource type="Script" uid="uid://dwfxs5yrf7i3v" path="res://src/enemy/enemy_types/05. ballos/Ballos.cs" id="1_iy2fp"]
[ext_resource type="PackedScene" path="res://src/enemy/enemy_types/05. ballos/BallosModelView.tscn" id="2_v2urn"] [ext_resource type="PackedScene" uid="uid://dppmk4nx2le20" path="res://src/enemy/enemy_types/05. ballos/BallosModelView.tscn" id="2_v2urn"]
[ext_resource type="PackedScene" uid="uid://cn4fv2gv6raql" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="4_bjnvx"] [ext_resource type="PackedScene" uid="uid://cn4fv2gv6raql" path="res://src/enemy/behaviors/PatrolBehavior.tscn" id="4_bjnvx"]
[ext_resource type="PackedScene" uid="uid://cve5oouhowtff" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="5_55sdf"] [ext_resource type="PackedScene" uid="uid://cve5oouhowtff" path="res://src/enemy/behaviors/FollowBehavior.tscn" id="5_55sdf"]
[ext_resource type="PackedScene" uid="uid://cmhem5xknjsvc" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="6_2xj0s"] [ext_resource type="PackedScene" uid="uid://cmhem5xknjsvc" path="res://src/enemy/behaviors/EngagePlayerBehavior.tscn" id="6_2xj0s"]
@@ -18,12 +18,12 @@ height = 5.0
radius = 1.0 radius = 1.0
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"] [sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
radius = 1.20703 radius = 1.63453
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jhnwb"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_jhnwb"]
radius = 1.75 radius = 2.74414
[node name="Ballos" type="CharacterBody3D"] [node name="Ballos" type="CharacterBody3D" groups=["enemy"]]
process_mode = 1 process_mode = 1
collision_layer = 10 collision_layer = 10
collision_mask = 11 collision_mask = 11
@@ -62,7 +62,7 @@ shape = SubResource("SphereShape3D_8vcnq")
[node name="EnemyModelView" parent="." instance=ExtResource("2_v2urn")] [node name="EnemyModelView" parent="." instance=ExtResource("2_v2urn")]
unique_name_in_owner = true unique_name_in_owner = true
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, 0.00777042, 0)
[node name="PlayerDetector" type="Area3D" parent="."] [node name="PlayerDetector" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
@@ -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 = 200.0 _patrolSpeed = 325.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 = 225.0 _followSpeed = 400.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

View File

@@ -1472,8 +1472,10 @@ script = ExtResource("1_ueqp5")
[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.0275542, 0) transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 1.76027, 0)
pixel_size = 0.015
billboard = 2 billboard = 2
shaded = true
alpha_cut = 1 alpha_cut = 1
texture_filter = 0 texture_filter = 0
render_priority = 100 render_priority = 100
@@ -1499,7 +1501,7 @@ offset = Vector2(400, 400)
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 1.86303, 0)
collision_layer = 64 collision_layer = 64
collision_mask = 64 collision_mask = 64
@@ -1522,7 +1524,7 @@ advance_expression_base_node = NodePath("..")
anim_player = NodePath("../AnimationPlayer") anim_player = NodePath("../AnimationPlayer")
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."] [node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.101011, 1.67041, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.101011, 3.53344, 0)
sprite_frames = SubResource("SpriteFrames_ikty0") sprite_frames = SubResource("SpriteFrames_ikty0")
[node name="AnimationPlayer" type="AnimationPlayer" parent="AnimatedSprite3D"] [node name="AnimationPlayer" type="AnimationPlayer" parent="AnimatedSprite3D"]
@@ -1532,12 +1534,13 @@ 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)
stream = ExtResource("94_i3hgg") 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, -1.88689, 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)
transparency = 0.1 transparency = 0.1
cast_shadow = 0 cast_shadow = 0
modulate = Color(1, 1, 1, 0.591) modulate = Color(1, 1, 1, 0.591)

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=14 format=3 uid="uid://cd12cj1g37bn4"] [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="Script" uid="uid://djx5x5bhkku85" path="res://src/enemy/enemy_types/06. chariot/Chariot.cs" id="1_q1q0f"]
[ext_resource type="PackedScene" path="res://src/enemy/enemy_types/06. chariot/ChariotModelView.tscn" id="3_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://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="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="AudioStream" uid="uid://ba8xendacec6" path="res://src/audio/sfx/item_kyuu_layer_2.ogg" id="6_582pa"]
@@ -11,7 +11,8 @@
[ext_resource type="AudioStream" uid="uid://daye7334d7rfe" path="res://src/audio/sfx/ENEMY_CHARIOT_DEATH.ogg" id="9_cfqmf"] [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"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
radius = 1.0 radius = 1.67281
height = 3.34563
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
height = 5.0 height = 5.0
@@ -21,9 +22,9 @@ radius = 1.0
radius = 1.20703 radius = 1.20703
[sub_resource type="CylinderShape3D" id="CylinderShape3D_582pa"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_582pa"]
radius = 2.0 radius = 2.34863
[node name="Chariot" type="CharacterBody3D"] [node name="Chariot" type="CharacterBody3D" groups=["enemy"]]
process_mode = 1 process_mode = 1
collision_layer = 10 collision_layer = 10
collision_mask = 3 collision_mask = 3
@@ -61,7 +62,7 @@ shape = SubResource("SphereShape3D_lqifn")
[node name="EnemyModelView" parent="." instance=ExtResource("3_q1q0f")] [node name="EnemyModelView" parent="." instance=ExtResource("3_q1q0f")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(0.999848, 0, 0.0174524, 0, 1, 0, -0.0174524, 0, 0.999848, 0, 1.40414, 0) 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="."] [node name="PlayerDetector" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 113 KiB

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