This commit is contained in:
2025-03-17 20:34:59 -07:00
parent 79bf3d598b
commit 5e863dfd81
221 changed files with 4610 additions and 634 deletions

View File

@@ -8,455 +8,458 @@ using System.Threading.Tasks;
namespace DialogueManagerRuntime
{
public enum TranslationSource
public enum TranslationSource
{
None,
Guess,
CSV,
PO
}
public partial class DialogueManager : RefCounted
{
public delegate void DialogueStartedEventHandler(Resource dialogueResource);
public delegate void PassedTitleEventHandler(string title);
public delegate void GotDialogueEventHandler(DialogueLine dialogueLine);
public delegate void MutatedEventHandler(Dictionary mutation);
public delegate void DialogueEndedEventHandler(Resource dialogueResource);
public static DialogueStartedEventHandler? DialogueStarted;
public static PassedTitleEventHandler? PassedTitle;
public static GotDialogueEventHandler? GotDialogue;
public static MutatedEventHandler? Mutated;
public static DialogueEndedEventHandler? DialogueEnded;
[Signal] public delegate void ResolvedEventHandler(Variant value);
private static GodotObject? instance;
public static GodotObject Instance
{
None,
Guess,
CSV,
PO
get
{
if (instance == null)
{
instance = Engine.GetSingleton("DialogueManager");
instance.Connect("bridge_dialogue_started", Callable.From((Resource dialogueResource) => DialogueStarted?.Invoke(dialogueResource)));
}
return instance;
}
}
public partial class DialogueManager : RefCounted
public static Godot.Collections.Array GameStates
{
public delegate void DialogueStartedEventHandler(Resource dialogueResource);
public delegate void PassedTitleEventHandler(string title);
public delegate void GotDialogueEventHandler(DialogueLine dialogueLine);
public delegate void MutatedEventHandler(Dictionary mutation);
public delegate void DialogueEndedEventHandler(Resource dialogueResource);
get => (Godot.Collections.Array)Instance.Get("game_states");
set => Instance.Set("game_states", value);
}
public static DialogueStartedEventHandler? DialogueStarted;
public static PassedTitleEventHandler? PassedTitle;
public static GotDialogueEventHandler? GotDialogue;
public static MutatedEventHandler? Mutated;
public static DialogueEndedEventHandler? DialogueEnded;
[Signal] public delegate void ResolvedEventHandler(Variant value);
public static bool IncludeSingletons
{
get => (bool)Instance.Get("include_singletons");
set => Instance.Set("include_singletons", value);
}
private static GodotObject? instance;
public static GodotObject Instance
public static bool IncludeClasses
{
get => (bool)Instance.Get("include_classes");
set => Instance.Set("include_classes", value);
}
public static TranslationSource TranslationSource
{
get => (TranslationSource)(int)Instance.Get("translation_source");
set => Instance.Set("translation_source", (int)value);
}
public static Func<Node> GetCurrentScene
{
set => Instance.Set("get_current_scene", Callable.From(value));
}
public static void Prepare(GodotObject instance)
{
instance.Connect("passed_title", Callable.From((string title) => PassedTitle?.Invoke(title)));
instance.Connect("got_dialogue", Callable.From((RefCounted line) => GotDialogue?.Invoke(new DialogueLine(line))));
instance.Connect("mutated", Callable.From((Dictionary mutation) => Mutated?.Invoke(mutation)));
instance.Connect("dialogue_ended", Callable.From((Resource dialogueResource) => DialogueEnded?.Invoke(dialogueResource)));
}
public static async Task<GodotObject> GetSingleton()
{
if (instance != null)
return instance;
var tree = Engine.GetMainLoop();
int x = 0;
// Try and find the singleton for a few seconds
while (!Engine.HasSingleton("DialogueManager") && x < 300)
{
await tree.ToSignal(tree, SceneTree.SignalName.ProcessFrame);
x++;
}
// If it times out something is wrong
if (x >= 300)
{
throw new Exception("The DialogueManager singleton is missing.");
}
instance = Engine.GetSingleton("DialogueManager");
return instance;
}
public static Resource CreateResourceFromText(string text)
{
return (Resource)Instance.Call("create_resource_from_text", text);
}
public static async Task<DialogueLine?> GetNextDialogueLine(Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
var instance = (Node)Instance.Call("_bridge_get_new_instance");
Prepare(instance);
instance.Call("_bridge_get_next_dialogue_line", dialogueResource, key, extraGameStates ?? new Array<Variant>());
var result = await instance.ToSignal(instance, "bridge_get_next_dialogue_line_completed");
instance.QueueFree();
if ((RefCounted)result[0] == null)
return null;
return new DialogueLine((RefCounted)result[0]);
}
public static CanvasLayer ShowExampleDialogueBalloon(Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (CanvasLayer)Instance.Call("show_example_dialogue_balloon", dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static Node ShowDialogueBalloonScene(string balloonScene, Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (Node)Instance.Call("show_dialogue_balloon_scene", balloonScene, dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static Node ShowDialogueBalloonScene(PackedScene balloonScene, Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (Node)Instance.Call("show_dialogue_balloon_scene", balloonScene, dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static Node ShowDialogueBalloonScene(Node balloonScene, Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (Node)Instance.Call("show_dialogue_balloon_scene", balloonScene, dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static Node ShowDialogueBalloon(Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (Node)Instance.Call("show_dialogue_balloon", dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static async void Mutate(Dictionary mutation, Array<Variant>? extraGameStates = null, bool isInlineMutation = false)
{
Instance.Call("_bridge_mutate", mutation, extraGameStates ?? new Array<Variant>(), isInlineMutation);
await Instance.ToSignal(Instance, "bridge_mutated");
}
public bool ThingHasMethod(GodotObject thing, string method, Array<Variant> args)
{
var methodInfos = thing.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.DeclaredOnly);
foreach (var methodInfo in methodInfos)
{
if (methodInfo.Name == method && args.Count == methodInfo.GetParameters().Length)
{
get
{
if (instance == null)
{
instance = Engine.GetSingleton("DialogueManager");
instance.Connect("bridge_dialogue_started", Callable.From((Resource dialogueResource) => DialogueStarted?.Invoke(dialogueResource)));
}
return instance;
}
return true;
}
}
return false;
}
public static Godot.Collections.Array GameStates
public async void ResolveThingMethod(GodotObject thing, string method, Array<Variant> args)
{
MethodInfo? info = null;
var methodInfos = thing.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.DeclaredOnly);
foreach (var methodInfo in methodInfos)
{
if (methodInfo.Name == method && args.Count == methodInfo.GetParameters().Length)
{
get => (Godot.Collections.Array)Instance.Get("game_states");
set => Instance.Set("game_states", value);
info = methodInfo;
}
}
public static bool IncludeSingletons
{
get => (bool)Instance.Get("include_singletons");
set => Instance.Set("include_singletons", value);
}
public static bool IncludeClasses
{
get => (bool)Instance.Get("include_classes");
set => Instance.Set("include_classes", value);
}
public static TranslationSource TranslationSource
{
get => (TranslationSource)(int)Instance.Get("translation_source");
set => Instance.Set("translation_source", (int)value);
}
public static Func<Node> GetCurrentScene
{
set => Instance.Set("get_current_scene", Callable.From(value));
}
public static void Prepare(GodotObject instance)
{
instance.Connect("passed_title", Callable.From((string title) => PassedTitle?.Invoke(title)));
instance.Connect("got_dialogue", Callable.From((RefCounted line) => GotDialogue?.Invoke(new DialogueLine(line))));
instance.Connect("mutated", Callable.From((Dictionary mutation) => Mutated?.Invoke(mutation)));
instance.Connect("dialogue_ended", Callable.From((Resource dialogueResource) => DialogueEnded?.Invoke(dialogueResource)));
}
public static async Task<GodotObject> GetSingleton()
{
if (instance != null) return instance;
var tree = Engine.GetMainLoop();
int x = 0;
// Try and find the singleton for a few seconds
while (!Engine.HasSingleton("DialogueManager") && x < 300)
{
await tree.ToSignal(tree, SceneTree.SignalName.ProcessFrame);
x++;
}
// If it times out something is wrong
if (x >= 300)
{
throw new Exception("The DialogueManager singleton is missing.");
}
instance = Engine.GetSingleton("DialogueManager");
return instance;
}
public static Resource CreateResourceFromText(string text)
{
return (Resource)Instance.Call("create_resource_from_text", text);
}
public static async Task<DialogueLine?> GetNextDialogueLine(Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
var instance = (Node)Instance.Call("_bridge_get_new_instance");
Prepare(instance);
instance.Call("_bridge_get_next_dialogue_line", dialogueResource, key, extraGameStates ?? new Array<Variant>());
var result = await instance.ToSignal(instance, "bridge_get_next_dialogue_line_completed");
instance.QueueFree();
if ((RefCounted)result[0] == null) return null;
return new DialogueLine((RefCounted)result[0]);
}
public static CanvasLayer ShowExampleDialogueBalloon(Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (CanvasLayer)Instance.Call("show_example_dialogue_balloon", dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static Node ShowDialogueBalloonScene(string balloonScene, Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (Node)Instance.Call("show_dialogue_balloon_scene", balloonScene, dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static Node ShowDialogueBalloonScene(PackedScene balloonScene, Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (Node)Instance.Call("show_dialogue_balloon_scene", balloonScene, dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static Node ShowDialogueBalloonScene(Node balloonScene, Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (Node)Instance.Call("show_dialogue_balloon_scene", balloonScene, dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static Node ShowDialogueBalloon(Resource dialogueResource, string key = "", Array<Variant>? extraGameStates = null)
{
return (Node)Instance.Call("show_dialogue_balloon", dialogueResource, key, extraGameStates ?? new Array<Variant>());
}
public static async void Mutate(Dictionary mutation, Array<Variant>? extraGameStates = null, bool isInlineMutation = false)
{
Instance.Call("_bridge_mutate", mutation, extraGameStates ?? new Array<Variant>(), isInlineMutation);
await Instance.ToSignal(Instance, "bridge_mutated");
}
public bool ThingHasMethod(GodotObject thing, string method, Array<Variant> args)
{
var methodInfos = thing.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.DeclaredOnly);
foreach (var methodInfo in methodInfos)
{
if (methodInfo.Name == method && args.Count == methodInfo.GetParameters().Length)
{
return true;
}
}
return false;
}
public async void ResolveThingMethod(GodotObject thing, string method, Array<Variant> args)
{
MethodInfo? info = null;
var methodInfos = thing.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.DeclaredOnly);
foreach (var methodInfo in methodInfos)
{
if (methodInfo.Name == method && args.Count == methodInfo.GetParameters().Length)
{
info = methodInfo;
}
}
if (info == null) return;
if (info == null)
return;
#nullable disable
// Convert the method args to something reflection can handle
ParameterInfo[] argTypes = info.GetParameters();
object[] _args = new object[argTypes.Length];
for (int i = 0; i < argTypes.Length; i++)
{
// check if args is assignable from derived type
if (i < args.Count && args[i].Obj != null)
{
if (argTypes[i].ParameterType.IsAssignableFrom(args[i].Obj.GetType()))
{
_args[i] = args[i].Obj;
}
// fallback to assigning primitive types
else
{
_args[i] = Convert.ChangeType(args[i].Obj, argTypes[i].ParameterType);
}
}
else if (argTypes[i].DefaultValue != null)
{
_args[i] = argTypes[i].DefaultValue;
}
}
// Add a single frame wait in case the method returns before signals can listen
await ToSignal(Engine.GetMainLoop(), SceneTree.SignalName.ProcessFrame);
// invoke method and handle the result based on return type
object result = info.Invoke(thing, _args);
if (result is Task taskResult)
{
await taskResult;
try
{
Variant value = (Variant)taskResult.GetType().GetProperty("Result").GetValue(taskResult);
EmitSignal(SignalName.Resolved, value);
}
catch (Exception err)
{
EmitSignal(SignalName.Resolved);
}
}
else
{
EmitSignal(SignalName.Resolved, (Variant)result);
}
// Convert the method args to something reflection can handle
ParameterInfo[] argTypes = info.GetParameters();
object[] _args = new object[argTypes.Length];
for (int i = 0; i < argTypes.Length; i++)
{
// check if args is assignable from derived type
if (i < args.Count && args[i].Obj != null)
{
if (argTypes[i].ParameterType.IsAssignableFrom(args[i].Obj.GetType()))
{
_args[i] = args[i].Obj;
}
// fallback to assigning primitive types
else
{
_args[i] = Convert.ChangeType(args[i].Obj, argTypes[i].ParameterType);
}
}
else if (argTypes[i].DefaultValue != null)
{
_args[i] = argTypes[i].DefaultValue;
}
}
// Add a single frame wait in case the method returns before signals can listen
await ToSignal(Engine.GetMainLoop(), SceneTree.SignalName.ProcessFrame);
// invoke method and handle the result based on return type
object result = info.Invoke(thing, _args);
if (result is Task taskResult)
{
await taskResult;
try
{
Variant value = (Variant)taskResult.GetType().GetProperty("Result").GetValue(taskResult);
EmitSignal(SignalName.Resolved, value);
}
catch (Exception)
{
EmitSignal(SignalName.Resolved);
}
}
else
{
EmitSignal(SignalName.Resolved, (Variant)result);
}
}
#nullable enable
}
}
public partial class DialogueLine : RefCounted
public partial class DialogueLine : RefCounted
{
private string id = "";
public string Id
{
private string id = "";
public string Id
{
get => id;
set => id = value;
}
private string type = "dialogue";
public string Type
{
get => type;
set => type = value;
}
private string next_id = "";
public string NextId
{
get => next_id;
set => next_id = value;
}
private string character = "";
public string Character
{
get => character;
set => character = value;
}
private string text = "";
public string Text
{
get => text;
set => text = value;
}
private string translation_key = "";
public string TranslationKey
{
get => translation_key;
set => translation_key = value;
}
private Array<DialogueResponse> responses = new Array<DialogueResponse>();
public Array<DialogueResponse> Responses
{
get => responses;
}
private string? time = null;
public string? Time
{
get => time;
}
private Dictionary pauses = new Dictionary();
public Dictionary Pauses
{
get => pauses;
}
private Dictionary speeds = new Dictionary();
public Dictionary Speeds
{
get => speeds;
}
private Array<Godot.Collections.Array> inline_mutations = new Array<Godot.Collections.Array>();
public Array<Godot.Collections.Array> InlineMutations
{
get => inline_mutations;
}
private Array<DialogueLine> concurrent_lines = new Array<DialogueLine>();
public Array<DialogueLine> ConcurrentLines
{
get => concurrent_lines;
}
private Array<Variant> extra_game_states = new Array<Variant>();
public Array<Variant> ExtraGameStates
{
get => extra_game_states;
}
private Array<string> tags = new Array<string>();
public Array<string> Tags
{
get => tags;
}
public DialogueLine(RefCounted data)
{
type = (string)data.Get("type");
next_id = (string)data.Get("next_id");
character = (string)data.Get("character");
text = (string)data.Get("text");
translation_key = (string)data.Get("translation_key");
pauses = (Dictionary)data.Get("pauses");
speeds = (Dictionary)data.Get("speeds");
inline_mutations = (Array<Godot.Collections.Array>)data.Get("inline_mutations");
time = (string)data.Get("time");
tags = (Array<string>)data.Get("tags");
foreach (var concurrent_line_data in (Array<RefCounted>)data.Get("concurrent_lines"))
{
concurrent_lines.Add(new DialogueLine(concurrent_line_data));
}
foreach (var response in (Array<RefCounted>)data.Get("responses"))
{
responses.Add(new DialogueResponse(response));
}
}
public string GetTagValue(string tagName)
{
string wrapped = $"{tagName}=";
foreach (var tag in tags)
{
if (tag.StartsWith(wrapped))
{
return tag.Substring(wrapped.Length);
}
}
return "";
}
public override string ToString()
{
switch (type)
{
case "dialogue":
return $"<DialogueLine character=\"{character}\" text=\"{text}\">";
case "mutation":
return "<DialogueLine mutation>";
default:
return "";
}
}
get => id;
set => id = value;
}
public partial class DialogueResponse : RefCounted
private string type = "dialogue";
public string Type
{
private string next_id = "";
public string NextId
{
get => next_id;
set => next_id = value;
}
private bool is_allowed = true;
public bool IsAllowed
{
get => is_allowed;
set => is_allowed = value;
}
private string text = "";
public string Text
{
get => text;
set => text = value;
}
private string translation_key = "";
public string TranslationKey
{
get => translation_key;
set => translation_key = value;
}
private Array<string> tags = new Array<string>();
public Array<string> Tags
{
get => tags;
}
public DialogueResponse(RefCounted data)
{
next_id = (string)data.Get("next_id");
is_allowed = (bool)data.Get("is_allowed");
text = (string)data.Get("text");
translation_key = (string)data.Get("translation_key");
tags = (Array<string>)data.Get("tags");
}
public string GetTagValue(string tagName)
{
string wrapped = $"{tagName}=";
foreach (var tag in tags)
{
if (tag.StartsWith(wrapped))
{
return tag.Substring(wrapped.Length);
}
}
return "";
}
public override string ToString()
{
return $"<DialogueResponse text=\"{text}\"";
}
get => type;
set => type = value;
}
private string next_id = "";
public string NextId
{
get => next_id;
set => next_id = value;
}
private string character = "";
public string Character
{
get => character;
set => character = value;
}
private string text = "";
public string Text
{
get => text;
set => text = value;
}
private string translation_key = "";
public string TranslationKey
{
get => translation_key;
set => translation_key = value;
}
private Array<DialogueResponse> responses = new Array<DialogueResponse>();
public Array<DialogueResponse> Responses
{
get => responses;
}
private string? time = null;
public string? Time
{
get => time;
}
private Dictionary pauses = new Dictionary();
public Dictionary Pauses
{
get => pauses;
}
private Dictionary speeds = new Dictionary();
public Dictionary Speeds
{
get => speeds;
}
private Array<Godot.Collections.Array> inline_mutations = new Array<Godot.Collections.Array>();
public Array<Godot.Collections.Array> InlineMutations
{
get => inline_mutations;
}
private Array<DialogueLine> concurrent_lines = new Array<DialogueLine>();
public Array<DialogueLine> ConcurrentLines
{
get => concurrent_lines;
}
private Array<Variant> extra_game_states = new Array<Variant>();
public Array<Variant> ExtraGameStates
{
get => extra_game_states;
}
private Array<string> tags = new Array<string>();
public Array<string> Tags
{
get => tags;
}
public DialogueLine(RefCounted data)
{
type = (string)data.Get("type");
next_id = (string)data.Get("next_id");
character = (string)data.Get("character");
text = (string)data.Get("text");
translation_key = (string)data.Get("translation_key");
pauses = (Dictionary)data.Get("pauses");
speeds = (Dictionary)data.Get("speeds");
inline_mutations = (Array<Godot.Collections.Array>)data.Get("inline_mutations");
time = (string)data.Get("time");
tags = (Array<string>)data.Get("tags");
foreach (var concurrent_line_data in (Array<RefCounted>)data.Get("concurrent_lines"))
{
concurrent_lines.Add(new DialogueLine(concurrent_line_data));
}
foreach (var response in (Array<RefCounted>)data.Get("responses"))
{
responses.Add(new DialogueResponse(response));
}
}
public string GetTagValue(string tagName)
{
string wrapped = $"{tagName}=";
foreach (var tag in tags)
{
if (tag.StartsWith(wrapped))
{
return tag.Substring(wrapped.Length);
}
}
return "";
}
public override string ToString()
{
switch (type)
{
case "dialogue":
return $"<DialogueLine character=\"{character}\" text=\"{text}\">";
case "mutation":
return "<DialogueLine mutation>";
default:
return "";
}
}
}
public partial class DialogueResponse : RefCounted
{
private string next_id = "";
public string NextId
{
get => next_id;
set => next_id = value;
}
private bool is_allowed = true;
public bool IsAllowed
{
get => is_allowed;
set => is_allowed = value;
}
private string text = "";
public string Text
{
get => text;
set => text = value;
}
private string translation_key = "";
public string TranslationKey
{
get => translation_key;
set => translation_key = value;
}
private Array<string> tags = new Array<string>();
public Array<string> Tags
{
get => tags;
}
public DialogueResponse(RefCounted data)
{
next_id = (string)data.Get("next_id");
is_allowed = (bool)data.Get("is_allowed");
text = (string)data.Get("text");
translation_key = (string)data.Get("translation_key");
tags = (Array<string>)data.Get("tags");
}
public string GetTagValue(string tagName)
{
string wrapped = $"{tagName}=";
foreach (var tag in tags)
{
if (tag.StartsWith(wrapped))
{
return tag.Substring(wrapped.Length);
}
}
return "";
}
public override string ToString()
{
return $"<DialogueResponse text=\"{text}\"";
}
}
}

View File

@@ -1,145 +0,0 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class ChintheModelView : EnemyModelView2D
{
private const string INACTIVE_FRONT = "inactive_front";
private const string INACTIVE_LEFT = "inactive_left";
private const string INACTIVE_BACK = "inactive_back";
private const string ACTIVATE_FRONT = "activate_front";
private const string ACTIVATE_LEFT = "activate_left";
private const string ACTIVATE_BACK = "activate_back";
public const string TELEPORT = "teleport";
private const string PRIMARY_ATTACK = "primary_attack";
private const string SECONDARY_ATTACK = "secondary_attack";
private const string PRIMARY_SKILL = "primary_skill";
private const string IDLE_FORWARD = "idle_front";
private const string IDLE_LEFT = "idle_left";
private const string IDLE_BACK = "idle_back";
private const string IDLE_FORWARD_WALK = "idle_front_walk";
private const string IDLE_LEFT_WALK = "idle_left_walk";
private const string IDLE_BACK_WALK = "idle_back_walk";
private const string PARAMETERS_PLAYBACK = "parameters/playback";
public override void _Notification(int what) => this.Notify(what);
[Export] public bool CanMove = false;
private bool _activated = false;
public void OnReady()
{
AnimationTree.AnimationFinished += AnimationTree_AnimationFinished1;
}
private void AnimationTree_AnimationFinished1(StringName animName)
{
if (animName == IDLE_FORWARD_WALK)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD);
if (animName == IDLE_LEFT_WALK)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_LEFT);
if (animName == IDLE_BACK_WALK)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_BACK);
}
public void PlayTeleportAnimation()
{
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(TELEPORT);
}
public void PlayActivateFrontAnimation()
{
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(ACTIVATE_FRONT);
_activated = true;
}
public void PlayActivateLeftAnimation()
{
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(ACTIVATE_LEFT);
_activated = true;
}
public void PlayActivateBackAnimation()
{
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(ACTIVATE_BACK);
_activated = true;
}
public override void RotateModel(
Basis enemyBasis,
Vector3 cameraDirection,
float rotateUpperThreshold,
float rotateLowerThreshold,
bool isWalking)
{
var enemyForwardDirection = enemyBasis.Z;
var enemyLeftDirection = enemyBasis.X;
var leftDotProduct = enemyLeftDirection.Dot(cameraDirection);
var forwardDotProduct = enemyForwardDirection.Dot(cameraDirection);
// Check if forward facing. If the dot product is -1, the enemy is facing the camera.
if (forwardDotProduct < -rotateUpperThreshold)
{
if (!_activated)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(INACTIVE_FRONT);
else if (isWalking)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD_WALK);
else
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD);
}
// Check if backward facing. If the dot product is 1, the enemy is facing the same direction as the camera.
else if (forwardDotProduct > rotateUpperThreshold)
{
if (!_activated)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(INACTIVE_BACK);
else if (isWalking)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_BACK_WALK);
else
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_BACK);
}
else
{
// If the dot product of the perpendicular direction is positive (up to 1), the enemy is facing to the left (since it's mirrored).
AnimatedSprite.FlipH = leftDotProduct > 0;
// Check if side facing. If the dot product is close to zero in the positive or negative direction, its close to the threshold for turning.
if (Mathf.Abs(forwardDotProduct) < rotateLowerThreshold)
{
if (!_activated)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(INACTIVE_LEFT);
else if (isWalking)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_LEFT_WALK);
else
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_LEFT);
}
}
}
private void LoadShader(string shaderPath)
{
var shader = GD.Load<Shader>(shaderPath);
AnimatedSprite.Material = new ShaderMaterial();
var shaderMaterial = (ShaderMaterial)AnimatedSprite.Material;
shaderMaterial.Shader = shader;
}
private void AnimationTree_AnimationFinished(StringName animName)
{
if (animName == PRIMARY_ATTACK || animName == SECONDARY_ATTACK || animName == PRIMARY_SKILL)
{
AnimationTree.Get("parameters/playback").As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD);
}
}
private void SetShaderValue(float shaderValue)
{
var shaderMaterial = (ShaderMaterial)AnimatedSprite.Material;
shaderMaterial.SetShaderParameter("progress", shaderValue);
}
}

View File

@@ -1,4 +1,4 @@
using Chickensoft.AutoInject;
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using System;
@@ -22,39 +22,39 @@ public partial class NavigationAgentClient : Node3D, INavigationAgentClient
public void Setup()
{
NavAgent.VelocityComputed += NavAgent_VelocityComputed;
NavAgent.TargetReached += NavAgent_TargetReached;
NavAgent.VelocityComputed += NavAgent_VelocityComputed;
NavAgent.TargetReached += NavAgent_TargetReached;
var rng = new RandomNumberGenerator();
rng.Randomize();
_patrolTimer.Timeout += OnPatrolTimeout;
_patrolTimer.WaitTime = rng.RandfRange(7.0f, 15.0f);
var rng = new RandomNumberGenerator();
rng.Randomize();
_patrolTimer.Timeout += OnPatrolTimeout;
_patrolTimer.WaitTime = rng.RandfRange(7.0f, 15.0f);
_thinkTimer = new Timer
{
WaitTime = 0.4f
};
AddChild(_thinkTimer);
_thinkTimer.Timeout += NavAgent_TargetReached;
_thinkTimer.Start();
_thinkTimer = new Timer
{
WaitTime = 0.4f
};
AddChild(_thinkTimer);
_thinkTimer.Timeout += NavAgent_TargetReached;
_thinkTimer.Start();
}
private void NavAgent_VelocityComputed(Vector3 safeVelocity)
{
if (!_canMove)
return;
if (!_canMove)
return;
var enemy = GetOwner() as IEnemy;
enemy.Move(safeVelocity);
var enemy = GetOwner() as IEnemy;
enemy.Move(safeVelocity);
}
public void CalculateVelocity(Vector3 currentPosition, bool canMove)
{
_canMove = canMove;
var nextPathPosition = NavAgent.GetNextPathPosition();
_canMove = canMove;
var nextPathPosition = NavAgent.GetNextPathPosition();
var newVelocity = currentPosition.DirectionTo(nextPathPosition) * 2f;
NavAgent.Velocity = newVelocity;
var newVelocity = currentPosition.DirectionTo(nextPathPosition) * 2f;
NavAgent.Velocity = newVelocity;
}
public void SetTarget(Vector3 target) => Task.Delay(TimeSpan.FromSeconds(0.4)).ContinueWith(_ => _currentTarget = new Vector3(target.X, -1.75f, target.Z));
@@ -63,15 +63,15 @@ public partial class NavigationAgentClient : Node3D, INavigationAgentClient
private void NavAgent_TargetReached()
{
NavAgent.TargetPosition = _currentTarget;
NavAgent.TargetPosition = _currentTarget;
}
private void OnPatrolTimeout()
{
var rng = new RandomNumberGenerator();
rng.Randomize();
_patrolTimer.WaitTime = rng.RandfRange(5.0f, 10.0f);
var enemy = GetOwner() as ICanPatrol;
enemy.Patrol();
var rng = new RandomNumberGenerator();
rng.Randomize();
_patrolTimer.WaitTime = rng.RandfRange(5.0f, 10.0f);
var enemy = GetOwner() as ICanPatrol;
enemy.Patrol();
}
}

View File

@@ -1 +1 @@
uid://jjulhqd5g3bd
uid://dssu6tgi8dapq

View File

@@ -1,27 +1,8 @@
[gd_scene load_steps=9 format=3 uid="uid://bksq62muhk3h5"]
[gd_scene load_steps=7 format=3 uid="uid://bs56ccgosmu47"]
[ext_resource type="Script" uid="uid://jjulhqd5g3bd" path="res://src/enemy/enemy_types/01. sproingy/Sproingy.cs" id="1_xsluo"]
[ext_resource type="Script" uid="uid://dnkmr0eq1sij0" path="res://src/enemy/EnemyStatResource.cs" id="2_oln85"]
[ext_resource type="Script" uid="uid://dssu6tgi8dapq" path="res://src/enemy/enemy_types/01. sproingy/Sproingy.cs" id="1_xsluo"]
[ext_resource type="PackedScene" uid="uid://pbnsngx5jvrh" path="res://src/enemy/NavigationAgentClient.tscn" id="3_ut5m2"]
[ext_resource type="PackedScene" uid="uid://bli0t0d6ommvi" path="res://src/enemy/enemy_types/01. sproingy/SproingyModelView.tscn" id="4_o3b7p"]
[sub_resource type="Resource" id="Resource_oln85"]
script = ExtResource("2_oln85")
CurrentHP = 30.0
MaximumHP = 30
CurrentAttack = 15
CurrentDefense = 7
MaxAttack = 15
MaxDefense = 7
ExpFromDefeat = 5
Luck = 0.05
TelluricResistance = 0.0
AeolicResistance = 0.0
HydricResistance = 0.0
IgneousResistance = 0.0
FerrumResistance = 0.0
DropsSoulGemChance = 0.75
metadata/_custom_type_script = ExtResource("2_oln85")
[ext_resource type="PackedScene" uid="uid://bimjnsu52y3xi" path="res://src/enemy/enemy_types/01. sproingy/SproingyModelView.tscn" id="4_o3b7p"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
radius = 0.106078
@@ -42,7 +23,6 @@ axis_lock_linear_y = true
axis_lock_angular_x = true
axis_lock_angular_z = true
script = ExtResource("1_xsluo")
_enemyStatResource = SubResource("Resource_oln85")
[node name="CollisionShape" type="CollisionShape3D" parent="."]
unique_name_in_owner = true
@@ -81,8 +61,6 @@ collision_mask = 3
[node name="Visual" type="Node3D" parent="."]
[node name="EnemyModelView" parent="Visual" instance=ExtResource("4_o3b7p")]
unique_name_in_owner = true
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0862446, 0)
[node name="Timers" type="Node" parent="."]

View File

@@ -1,9 +1,9 @@
[gd_resource type="Resource" script_class="EnemyLoreInfo" load_steps=2 format=3 uid="uid://bctxs1jlkhgmc"]
[gd_resource type="Resource" script_class="EnemyLoreInfo" load_steps=2 format=3 uid="uid://ctm2smti8eo8n"]
[ext_resource type="Script" path="res://src/enemy/EnemyLoreInfo.cs" id="1_220d4"]
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="1_1ncna"]
[resource]
script = ExtResource("1_220d4")
script = ExtResource("1_1ncna")
Name = "Sproingy"
Description = "A guy who likes to have fun."
metadata/_custom_type_script = ExtResource("1_220d4")
metadata/_custom_type_script = ExtResource("1_1ncna")

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=121 format=3 uid="uid://bli0t0d6ommvi"]
[gd_scene load_steps=121 format=3 uid="uid://bimjnsu52y3xi"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_oh25a"]
[ext_resource type="Texture2D" uid="uid://dd0ia6isdqg61" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 1.png" id="1_pbx41"]

View File

@@ -0,0 +1,76 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using Zennysoft.Game.Abstractions;
using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class Sara : Enemy, IHasPrimaryAttack, ICanPatrol
{
public override void _Notification(int what) => this.Notify(what);
[Export]
public ElementType PrimaryAttackElementalType { get; set; } = ElementType.None;
[Export]
public double PrimaryAttackElementalDamageBonus { get; set; } = 1.0;
[Node] private INavigationAgentClient _navigationAgentClient { get; set; } = default!;
public void OnReady()
{
SetPhysicsProcess(true);
((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered;
}
public void OnPhysicsProcess(double delta)
{
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
if (_enemyLogic.Value is not EnemyLogic.State.Activated)
return;
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 1.5f)
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) > 30f)
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 3f)
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
_navigationAgentClient.CalculateVelocity(GlobalPosition, true);
base._PhysicsProcess(delta);
}
public override void TakeAction()
{
PrimaryAttack();
}
public void PrimaryAttack()
{
_enemyModelView.PlayPrimaryAttackAnimation();
}
public override void SetTarget(Vector3 target) => _navigationAgentClient.SetTarget(target);
public void Patrol()
{
var rng = new RandomNumberGenerator();
rng.Randomize();
var randomizedSpot = new Vector3(rng.RandfRange(-5.0f, 5.0f), 0, rng.RandfRange(-5.0f, 5.0f));
_enemyLogic.Input(new EnemyLogic.Input.PatrolToRandomSpot(GlobalPosition + randomizedSpot));
_enemyLogic.Input(new EnemyLogic.Input.StartPatrol());
}
private void Hitbox_AreaEntered(Area3D area)
{
var target = area.GetOwner();
if (target is IPlayer player)
{
var damage = _enemyStatResource.CurrentAttack * PrimaryAttackElementalDamageBonus;
player.TakeDamage(damage, PrimaryAttackElementalType, BattleExtensions.IsCriticalHit(_enemyStatResource.Luck));
}
}
}

View File

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

View File

@@ -0,0 +1,95 @@
[gd_scene load_steps=9 format=3 uid="uid://bksq62muhk3h5"]
[ext_resource type="Script" uid="uid://jjulhqd5g3bd" path="res://src/enemy/enemy_types/04. sara/Sara.cs" id="1_1grvw"]
[ext_resource type="Script" uid="uid://dnkmr0eq1sij0" path="res://src/enemy/EnemyStatResource.cs" id="2_14et8"]
[ext_resource type="PackedScene" uid="uid://pbnsngx5jvrh" path="res://src/enemy/NavigationAgentClient.tscn" id="3_c4qcm"]
[ext_resource type="PackedScene" uid="uid://bli0t0d6ommvi" path="res://src/enemy/enemy_types/04. sara/SaraModelView.tscn" id="4_82s0m"]
[sub_resource type="Resource" id="Resource_oln85"]
script = ExtResource("2_14et8")
CurrentHP = 30.0
MaximumHP = 30
CurrentAttack = 15
CurrentDefense = 7
MaxAttack = 15
MaxDefense = 7
ExpFromDefeat = 5
Luck = 0.05
TelluricResistance = 0.0
AeolicResistance = 0.0
HydricResistance = 0.0
IgneousResistance = 0.0
FerrumResistance = 0.0
DropsSoulGemChance = 0.75
metadata/_custom_type_script = ExtResource("2_14et8")
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
radius = 0.106078
height = 1.23076
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
radius = 0.57308
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
height = 5.0
radius = 1.0
[node name="Sara" type="CharacterBody3D"]
process_mode = 1
collision_layer = 10
collision_mask = 3
axis_lock_linear_y = true
axis_lock_angular_x = true
axis_lock_angular_z = true
script = ExtResource("1_1grvw")
_enemyStatResource = SubResource("Resource_oln85")
[node name="CollisionShape" type="CollisionShape3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
shape = SubResource("CapsuleShape3D_cwfph")
[node name="Navigation" type="Node3D" parent="."]
[node name="NavigationAgentClient" parent="Navigation" instance=ExtResource("3_c4qcm")]
unique_name_in_owner = true
[node name="Collision" type="Node3D" parent="."]
[node name="Collision" type="Area3D" parent="Collision"]
collision_layer = 2048
collision_mask = 0
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision/Collision"]
shape = SubResource("SphereShape3D_8vcnq")
[node name="LineOfSight" type="Area3D" parent="Collision"]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
collision_layer = 2
collision_mask = 2
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision/LineOfSight"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -2)
shape = SubResource("CylinderShape3D_jbgmx")
[node name="Raycast" type="RayCast3D" parent="Collision"]
unique_name_in_owner = true
target_position = Vector3(0, 0, -5)
collision_mask = 3
[node name="Visual" type="Node3D" parent="."]
[node name="EnemyModelView" parent="Visual" instance=ExtResource("4_82s0m")]
[node name="Timers" type="Node" parent="."]
[node name="PatrolTimer" type="Timer" parent="Timers"]
unique_name_in_owner = true
wait_time = 10.0
autostart = true
[node name="AttackTimer" type="Timer" parent="Timers"]
unique_name_in_owner = true
wait_time = 0.8
autostart = true

View File

@@ -0,0 +1,9 @@
[gd_resource type="Resource" script_class="EnemyLoreInfo" load_steps=2 format=3 uid="uid://bctxs1jlkhgmc"]
[ext_resource type="Script" path="res://src/enemy/EnemyLoreInfo.cs" id="1_220d4"]
[resource]
script = ExtResource("1_220d4")
Name = "Sproingy"
Description = "A guy who likes to have fun."
metadata/_custom_type_script = ExtResource("1_220d4")

View File

@@ -0,0 +1,753 @@
[gd_scene load_steps=127 format=3 uid="uid://bli0t0d6ommvi"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_oh25a"]
[ext_resource type="Texture2D" uid="uid://cddgp7j8e3yb6" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/1.png" id="2_kaqik"]
[ext_resource type="Texture2D" uid="uid://douk20ronmcsp" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/2.png" id="3_5qj0o"]
[ext_resource type="Texture2D" uid="uid://br3mq8mlrdlp5" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/3.png" id="4_k4dk8"]
[ext_resource type="Texture2D" uid="uid://4vt6ltpw5h0d" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/4.png" id="5_pcatf"]
[ext_resource type="Texture2D" uid="uid://df25conljm3ac" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/5.png" id="6_64hdu"]
[ext_resource type="Texture2D" uid="uid://c76sv0obs8k2m" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/6.png" id="7_6hat0"]
[ext_resource type="Texture2D" uid="uid://bmy5syneqh1ua" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/7.png" id="8_0mfqh"]
[ext_resource type="Texture2D" uid="uid://dk83jluw0u32d" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/8.png" id="9_qe2qa"]
[ext_resource type="Texture2D" uid="uid://c64faxsjuilsa" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/9.png" id="10_lv3dv"]
[ext_resource type="Texture2D" uid="uid://cm3042jybafum" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/10.png" id="11_kvyvn"]
[ext_resource type="Texture2D" uid="uid://errp2wrd6hxe" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/11.png" id="12_50sje"]
[ext_resource type="Texture2D" uid="uid://d4cx4rxs3sbup" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/12.png" id="13_by4wq"]
[ext_resource type="Texture2D" uid="uid://cl25we4i2o5q4" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/13.png" id="14_ghb7l"]
[ext_resource type="Texture2D" uid="uid://cpfiu5vmmak8x" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/14.png" id="15_quhq4"]
[ext_resource type="Texture2D" uid="uid://bc0t803148wf7" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/15.png" id="16_jh1ur"]
[ext_resource type="Texture2D" uid="uid://c1nw601kjo5n7" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/16.png" id="17_qdwkq"]
[ext_resource type="Texture2D" uid="uid://nfa4e0wowv1f" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/17.png" id="18_r78pw"]
[ext_resource type="Texture2D" uid="uid://b4spv1832cxyl" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/18.png" id="19_rj5b6"]
[ext_resource type="Texture2D" uid="uid://xn84gg0ln21d" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/19.png" id="20_su3so"]
[ext_resource type="Texture2D" uid="uid://0fo7l3aemg1k" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/20.png" id="21_cuwsl"]
[ext_resource type="Texture2D" uid="uid://duem4iwelp46j" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/21.png" id="22_nbsde"]
[ext_resource type="Texture2D" uid="uid://bjbkhrktckdh2" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/22.png" id="23_jtcv8"]
[ext_resource type="Texture2D" uid="uid://ch78vmhfco8ho" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/23.png" id="24_5nq62"]
[ext_resource type="Texture2D" uid="uid://be20ojmsnxt3o" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/24.png" id="25_1j8fh"]
[ext_resource type="Texture2D" uid="uid://cuaghvm84rmpn" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/25.png" id="26_w1n2a"]
[ext_resource type="Texture2D" uid="uid://dnmhmxyt81aat" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/1.png" id="27_bw5xd"]
[ext_resource type="Texture2D" uid="uid://dfmyfil4i082v" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/2.png" id="28_cen27"]
[ext_resource type="Texture2D" uid="uid://dnk0jwrub6wtb" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/3.png" id="29_vnqkp"]
[ext_resource type="Texture2D" uid="uid://bmfunaq00je41" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/4.png" id="30_s247p"]
[ext_resource type="Texture2D" uid="uid://beqvfuudnyj5d" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/5.png" id="31_leexp"]
[ext_resource type="Texture2D" uid="uid://cf3b8cpv1ld6q" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/6.png" id="32_2v5p8"]
[ext_resource type="Texture2D" uid="uid://22wdqmsmm4ug" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/7.png" id="33_weeva"]
[ext_resource type="Texture2D" uid="uid://blhg5styb511c" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/8.png" id="34_aj3g2"]
[ext_resource type="Texture2D" uid="uid://n1tqbyekxmm2" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/9.png" id="35_12udx"]
[ext_resource type="Texture2D" uid="uid://diaxfowsixelq" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/10.png" id="36_mtwy4"]
[ext_resource type="Texture2D" uid="uid://nuanijakoh64" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/11.png" id="37_wuqoq"]
[ext_resource type="Texture2D" uid="uid://ctitsjjo7n3ng" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/12.png" id="38_vic1a"]
[ext_resource type="Texture2D" uid="uid://m5gnuolcc01f" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/13.png" id="39_n1eh4"]
[ext_resource type="Texture2D" uid="uid://bkdwup73p4by8" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/14.png" id="40_7ip58"]
[ext_resource type="Texture2D" uid="uid://bglkxwky7afcv" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/15.png" id="41_uvva7"]
[ext_resource type="Texture2D" uid="uid://dta04624axhh6" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/16.png" id="42_sobol"]
[ext_resource type="Texture2D" uid="uid://kw8wycjki1lm" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/17.png" id="43_pkiq5"]
[ext_resource type="Texture2D" uid="uid://8trni2kkw8jh" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/18.png" id="44_pep5o"]
[ext_resource type="Texture2D" uid="uid://hois80ntvu74" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/19.png" id="45_r14ie"]
[ext_resource type="Texture2D" uid="uid://c5ucuw0m0hv8p" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/20.png" id="46_iw0no"]
[ext_resource type="Texture2D" uid="uid://bwwd2oy2shc1j" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/21.png" id="47_wtyys"]
[ext_resource type="Texture2D" uid="uid://kumfrswf6kpp" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/22.png" id="48_ftlpx"]
[ext_resource type="Texture2D" uid="uid://7gqtxekbag2q" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/23.png" id="49_pfxm2"]
[ext_resource type="Texture2D" uid="uid://ri1kt354q0sx" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/24.png" id="50_0p57o"]
[ext_resource type="Texture2D" uid="uid://7dmremml2vo3" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_FRONT/25.png" id="51_4070g"]
[ext_resource type="Texture2D" uid="uid://c0dvfarwb2lt2" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/1.png" id="52_bw5xd"]
[ext_resource type="Texture2D" uid="uid://dhjgtjphpg81d" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/2.png" id="53_cen27"]
[ext_resource type="Texture2D" uid="uid://dkckg5nnsrl17" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/3.png" id="54_vnqkp"]
[ext_resource type="Texture2D" uid="uid://btj8yx6gvfh3w" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/4.png" id="55_s247p"]
[ext_resource type="Texture2D" uid="uid://b8336ae066os6" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/5.png" id="56_leexp"]
[ext_resource type="Texture2D" uid="uid://cr0en5p06xasx" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/6.png" id="57_2v5p8"]
[ext_resource type="Script" uid="uid://6edayafleq8y" path="res://src/hitbox/Hitbox.cs" id="57_lae8t"]
[ext_resource type="Texture2D" uid="uid://dtegcbk1e7oug" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/7.png" id="58_weeva"]
[ext_resource type="Texture2D" uid="uid://n8qkhvcs6x8y" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/8.png" id="59_aj3g2"]
[ext_resource type="Texture2D" uid="uid://dq3wpissaund6" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/9.png" id="60_12udx"]
[ext_resource type="Texture2D" uid="uid://pmwqpd4wtblx" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/10.png" id="61_mtwy4"]
[ext_resource type="Texture2D" uid="uid://cad65i0kkyhou" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/11.png" id="62_wuqoq"]
[ext_resource type="Texture2D" uid="uid://dwsybqou1ley3" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/12.png" id="63_vic1a"]
[ext_resource type="Texture2D" uid="uid://dtocf4vwyalys" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/13.png" id="64_n1eh4"]
[ext_resource type="Texture2D" uid="uid://bv22pjatvdcu5" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/14.png" id="65_7ip58"]
[ext_resource type="Texture2D" uid="uid://dentotv5oxecg" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/15.png" id="66_uvva7"]
[ext_resource type="Texture2D" uid="uid://bl1dhsqarb6ws" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/16.png" id="67_sobol"]
[ext_resource type="Texture2D" uid="uid://2h6p7v3ljhi" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/17.png" id="68_pkiq5"]
[ext_resource type="Texture2D" uid="uid://bky3fsaj17keh" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/18.png" id="69_pep5o"]
[ext_resource type="Texture2D" uid="uid://qpggxionawo5" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/19.png" id="70_r14ie"]
[ext_resource type="Texture2D" uid="uid://dq1gtdpp56jo0" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/20.png" id="71_iw0no"]
[ext_resource type="Texture2D" uid="uid://bnqn3gnev2bvi" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/21.png" id="72_wtyys"]
[ext_resource type="Texture2D" uid="uid://dx7fxyaryp3jk" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/22.png" id="73_ftlpx"]
[ext_resource type="Texture2D" uid="uid://s2f8pqyvi7ja" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/23.png" id="74_pfxm2"]
[ext_resource type="Texture2D" uid="uid://b7b2wus7h2yri" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/24.png" id="75_0p57o"]
[ext_resource type="Texture2D" uid="uid://dmp6ke2xirkj" path="res://src/enemy/enemy_types/04. sara/animations/IDLE_SIDE/25.png" id="76_4070g"]
[ext_resource type="Texture2D" uid="uid://b6ug2ys5w3k6b" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK1_FRONT/1.png" id="77_sobol"]
[ext_resource type="Texture2D" uid="uid://onw0gklhuyc6" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK1_FRONT/2.png" id="78_pkiq5"]
[ext_resource type="Texture2D" uid="uid://5f2hh2l28ukh" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK1_FRONT/3.png" id="79_pep5o"]
[ext_resource type="Texture2D" uid="uid://couss8fxw0hhy" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK1_FRONT/4.png" id="80_r14ie"]
[ext_resource type="Texture2D" uid="uid://bnfabp7okx0od" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK1_FRONT/5.png" id="81_iw0no"]
[ext_resource type="Texture2D" uid="uid://duru1y8ew3lfx" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK1_FRONT/6.png" id="82_wtyys"]
[ext_resource type="Texture2D" uid="uid://bn3lsychu3eoa" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK1_FRONT/7.png" id="83_ftlpx"]
[ext_resource type="Texture2D" uid="uid://cyqtc8k4yyhc6" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/1.png" id="84_pfxm2"]
[ext_resource type="Texture2D" uid="uid://d3hphcw4hjx8a" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/2.png" id="85_0p57o"]
[ext_resource type="Texture2D" uid="uid://ba5msye5ew6au" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/3.png" id="86_4070g"]
[ext_resource type="Texture2D" uid="uid://dtvix72s5ef8s" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/4.png" id="87_qd8rk"]
[ext_resource type="Texture2D" uid="uid://cf1t3wc586ahy" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/5.png" id="88_wfk5u"]
[ext_resource type="Texture2D" uid="uid://cbo3pwbjh347q" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/6.png" id="89_v7k5y"]
[ext_resource type="Texture2D" uid="uid://dr61jiolrs6j4" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/7.png" id="90_tff1e"]
[ext_resource type="Texture2D" uid="uid://tf8bnar22irj" path="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/8.png" id="91_yaeox"]
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
[sub_resource type="SpriteFrames" id="SpriteFrames_sobol"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("2_kaqik")
}, {
"duration": 1.0,
"texture": ExtResource("3_5qj0o")
}, {
"duration": 1.0,
"texture": ExtResource("4_k4dk8")
}, {
"duration": 1.0,
"texture": ExtResource("5_pcatf")
}, {
"duration": 1.0,
"texture": ExtResource("6_64hdu")
}, {
"duration": 1.0,
"texture": ExtResource("7_6hat0")
}, {
"duration": 1.0,
"texture": ExtResource("8_0mfqh")
}, {
"duration": 1.0,
"texture": ExtResource("9_qe2qa")
}, {
"duration": 1.0,
"texture": ExtResource("10_lv3dv")
}, {
"duration": 1.0,
"texture": ExtResource("11_kvyvn")
}, {
"duration": 1.0,
"texture": ExtResource("12_50sje")
}, {
"duration": 1.0,
"texture": ExtResource("13_by4wq")
}, {
"duration": 1.0,
"texture": ExtResource("14_ghb7l")
}, {
"duration": 1.0,
"texture": ExtResource("15_quhq4")
}, {
"duration": 1.0,
"texture": ExtResource("16_jh1ur")
}, {
"duration": 1.0,
"texture": ExtResource("17_qdwkq")
}, {
"duration": 1.0,
"texture": ExtResource("18_r78pw")
}, {
"duration": 1.0,
"texture": ExtResource("19_rj5b6")
}, {
"duration": 1.0,
"texture": ExtResource("20_su3so")
}, {
"duration": 1.0,
"texture": ExtResource("21_cuwsl")
}, {
"duration": 1.0,
"texture": ExtResource("22_nbsde")
}, {
"duration": 1.0,
"texture": ExtResource("23_jtcv8")
}, {
"duration": 1.0,
"texture": ExtResource("24_5nq62")
}, {
"duration": 1.0,
"texture": ExtResource("25_1j8fh")
}, {
"duration": 1.0,
"texture": ExtResource("26_w1n2a")
}],
"loop": true,
"name": &"idle_back",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("27_bw5xd")
}, {
"duration": 1.0,
"texture": ExtResource("28_cen27")
}, {
"duration": 1.0,
"texture": ExtResource("29_vnqkp")
}, {
"duration": 1.0,
"texture": ExtResource("30_s247p")
}, {
"duration": 1.0,
"texture": ExtResource("31_leexp")
}, {
"duration": 1.0,
"texture": ExtResource("32_2v5p8")
}, {
"duration": 1.0,
"texture": ExtResource("33_weeva")
}, {
"duration": 1.0,
"texture": ExtResource("34_aj3g2")
}, {
"duration": 1.0,
"texture": ExtResource("35_12udx")
}, {
"duration": 1.0,
"texture": ExtResource("36_mtwy4")
}, {
"duration": 1.0,
"texture": ExtResource("37_wuqoq")
}, {
"duration": 1.0,
"texture": ExtResource("38_vic1a")
}, {
"duration": 1.0,
"texture": ExtResource("39_n1eh4")
}, {
"duration": 1.0,
"texture": ExtResource("40_7ip58")
}, {
"duration": 1.0,
"texture": ExtResource("41_uvva7")
}, {
"duration": 1.0,
"texture": ExtResource("42_sobol")
}, {
"duration": 1.0,
"texture": ExtResource("43_pkiq5")
}, {
"duration": 1.0,
"texture": ExtResource("44_pep5o")
}, {
"duration": 1.0,
"texture": ExtResource("45_r14ie")
}, {
"duration": 1.0,
"texture": ExtResource("46_iw0no")
}, {
"duration": 1.0,
"texture": ExtResource("47_wtyys")
}, {
"duration": 1.0,
"texture": ExtResource("48_ftlpx")
}, {
"duration": 1.0,
"texture": ExtResource("49_pfxm2")
}, {
"duration": 1.0,
"texture": ExtResource("50_0p57o")
}, {
"duration": 1.0,
"texture": ExtResource("51_4070g")
}],
"loop": true,
"name": &"idle_front",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("52_bw5xd")
}, {
"duration": 1.0,
"texture": ExtResource("53_cen27")
}, {
"duration": 1.0,
"texture": ExtResource("54_vnqkp")
}, {
"duration": 1.0,
"texture": ExtResource("55_s247p")
}, {
"duration": 1.0,
"texture": ExtResource("56_leexp")
}, {
"duration": 1.0,
"texture": ExtResource("57_2v5p8")
}, {
"duration": 1.0,
"texture": ExtResource("58_weeva")
}, {
"duration": 1.0,
"texture": ExtResource("59_aj3g2")
}, {
"duration": 1.0,
"texture": ExtResource("60_12udx")
}, {
"duration": 1.0,
"texture": ExtResource("61_mtwy4")
}, {
"duration": 1.0,
"texture": ExtResource("62_wuqoq")
}, {
"duration": 1.0,
"texture": ExtResource("63_vic1a")
}, {
"duration": 1.0,
"texture": ExtResource("64_n1eh4")
}, {
"duration": 1.0,
"texture": ExtResource("65_7ip58")
}, {
"duration": 1.0,
"texture": ExtResource("66_uvva7")
}, {
"duration": 1.0,
"texture": ExtResource("67_sobol")
}, {
"duration": 1.0,
"texture": ExtResource("68_pkiq5")
}, {
"duration": 1.0,
"texture": ExtResource("69_pep5o")
}, {
"duration": 1.0,
"texture": ExtResource("70_r14ie")
}, {
"duration": 1.0,
"texture": ExtResource("71_iw0no")
}, {
"duration": 1.0,
"texture": ExtResource("72_wtyys")
}, {
"duration": 1.0,
"texture": ExtResource("73_ftlpx")
}, {
"duration": 1.0,
"texture": ExtResource("74_pfxm2")
}, {
"duration": 1.0,
"texture": ExtResource("75_0p57o")
}, {
"duration": 1.0,
"texture": ExtResource("76_4070g")
}],
"loop": true,
"name": &"idle_left",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("77_sobol")
}, {
"duration": 1.0,
"texture": ExtResource("78_pkiq5")
}, {
"duration": 1.0,
"texture": ExtResource("79_pep5o")
}, {
"duration": 1.0,
"texture": ExtResource("80_r14ie")
}, {
"duration": 1.0,
"texture": ExtResource("81_iw0no")
}, {
"duration": 1.0,
"texture": ExtResource("82_wtyys")
}, {
"duration": 1.0,
"texture": ExtResource("83_ftlpx")
}],
"loop": false,
"name": &"primary_attack",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("84_pfxm2")
}, {
"duration": 1.0,
"texture": ExtResource("85_0p57o")
}, {
"duration": 1.0,
"texture": ExtResource("86_4070g")
}, {
"duration": 1.0,
"texture": ExtResource("87_qd8rk")
}, {
"duration": 1.0,
"texture": ExtResource("88_wfk5u")
}, {
"duration": 1.0,
"texture": ExtResource("89_v7k5y")
}, {
"duration": 1.0,
"texture": ExtResource("90_tff1e")
}, {
"duration": 1.0,
"texture": ExtResource("91_yaeox")
}],
"loop": false,
"name": &"secondary_attack",
"speed": 12.0
}]
[sub_resource type="BoxShape3D" id="BoxShape3D_53wuj"]
size = Vector3(1, 0.565, 2)
[sub_resource type="Animation" id="Animation_pkiq5"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_front"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_sobol"]
resource_name = "idle_front"
length = 2.08334
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(1),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_front"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833341, 0.166667, 0.250001, 0.333334, 0.416667, 0.500001, 0.583334, 0.666667, 0.75, 0.833334, 0.916667, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.83333, 1.91667, 2),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
}
[sub_resource type="Animation" id="Animation_pep5o"]
resource_name = "idle_left"
length = 2.08334
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_left"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.83333, 1.91667, 2),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
}
[sub_resource type="Animation" id="Animation_r14ie"]
resource_name = "idle_back"
length = 2.08334
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_back"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.83333, 1.91667, 2),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
}
[sub_resource type="Animation" id="Animation_iw0no"]
resource_name = "primary_attack"
length = 0.500008
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"primary_attack"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.189498, 0.499215),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_wtyys"]
resource_name = "secondary_attack"
length = 0.583341
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"secondary_attack"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.500926, 0.583333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.167084, 0.413635),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_pkiq5"]
_data = {
&"RESET": SubResource("Animation_pkiq5"),
&"idle_back": SubResource("Animation_r14ie"),
&"idle_front": SubResource("Animation_sobol"),
&"idle_left": SubResource("Animation_pep5o"),
&"primary_attack": SubResource("Animation_iw0no"),
&"secondary_attack": SubResource("Animation_wtyys")
}
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_sobol"]
animation = &"idle_back"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_pkiq5"]
animation = &"idle_front"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_pep5o"]
animation = &"idle_left"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_r14ie"]
animation = &"primary_attack"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_iw0no"]
animation = &"secondary_attack"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_wtyys"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ftlpx"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_pfxm2"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0p57o"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4070g"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_qd8rk"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_wfk5u"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_v7k5y"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_tff1e"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yaeox"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ar6u5"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_63kln"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_edyim"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7aslh"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0xylu"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4pr4i"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_6sacx"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_muxwo"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_d5bmw"]
states/End/position = Vector2(905, 301)
states/Start/position = Vector2(29, 290)
states/idle_back/node = SubResource("AnimationNodeAnimation_sobol")
states/idle_back/position = Vector2(498.532, 164.977)
states/idle_front/node = SubResource("AnimationNodeAnimation_pkiq5")
states/idle_front/position = Vector2(270.532, 290)
states/idle_left/node = SubResource("AnimationNodeAnimation_pep5o")
states/idle_left/position = Vector2(431.532, 573.977)
states/primary_attack/node = SubResource("AnimationNodeAnimation_r14ie")
states/primary_attack/position = Vector2(757.532, 257.977)
states/secondary_attack/node = SubResource("AnimationNodeAnimation_iw0no")
states/secondary_attack/position = Vector2(784.532, 557.977)
transitions = ["idle_front", "idle_left", SubResource("AnimationNodeStateMachineTransition_wtyys"), "idle_left", "idle_front", SubResource("AnimationNodeStateMachineTransition_ftlpx"), "idle_front", "idle_back", SubResource("AnimationNodeStateMachineTransition_pfxm2"), "idle_back", "idle_front", SubResource("AnimationNodeStateMachineTransition_0p57o"), "idle_left", "idle_back", SubResource("AnimationNodeStateMachineTransition_4070g"), "idle_back", "idle_left", SubResource("AnimationNodeStateMachineTransition_qd8rk"), "idle_back", "primary_attack", SubResource("AnimationNodeStateMachineTransition_wfk5u"), "idle_front", "primary_attack", SubResource("AnimationNodeStateMachineTransition_v7k5y"), "idle_left", "primary_attack", SubResource("AnimationNodeStateMachineTransition_tff1e"), "primary_attack", "idle_back", SubResource("AnimationNodeStateMachineTransition_yaeox"), "primary_attack", "idle_front", SubResource("AnimationNodeStateMachineTransition_ar6u5"), "primary_attack", "idle_left", SubResource("AnimationNodeStateMachineTransition_63kln"), "idle_back", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_edyim"), "idle_front", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_7aslh"), "idle_left", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_0xylu"), "secondary_attack", "idle_back", SubResource("AnimationNodeStateMachineTransition_4pr4i"), "secondary_attack", "idle_front", SubResource("AnimationNodeStateMachineTransition_6sacx"), "secondary_attack", "idle_left", SubResource("AnimationNodeStateMachineTransition_muxwo")]
graph_offset = Vector2(-448.468, 116.977)
[node name="EnemyModelView" type="Node3D"]
script = ExtResource("1_oh25a")
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0)
pixel_size = 0.003
billboard = 2
alpha_cut = 1
texture_filter = 0
render_priority = 100
texture = SubResource("ViewportTexture_h1kaf")
[node name="SubViewportContainer" type="SubViewportContainer" parent="Sprite3D"]
visibility_layer = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="SubViewport" type="SubViewport" parent="Sprite3D/SubViewportContainer"]
disable_3d = true
transparent_bg = true
handle_input_locally = false
size = Vector2i(300, 300)
render_target_update_mode = 4
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
unique_name_in_owner = true
texture_filter = 1
position = Vector2(150, 150)
sprite_frames = SubResource("SpriteFrames_sobol")
animation = &"idle_front"
[node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0)
collision_layer = 64
collision_mask = 64
script = ExtResource("57_lae8t")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Hitbox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.189337, 0.217529, -1.45579)
shape = SubResource("BoxShape3D_53wuj")
disabled = true
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_pkiq5")
}
[node name="AnimationTree" type="AnimationTree" parent="."]
unique_name_in_owner = true
root_node = NodePath("%AnimationTree/..")
tree_root = SubResource("AnimationNodeStateMachine_d5bmw")
anim_player = NodePath("../AnimationPlayer")

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://onw0gklhuyc6"
path="res://.godot/imported/2.png-969ea026e89dd4f89e0b8059288d4218.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/ATTACK1_FRONT/2.png"
dest_files=["res://.godot/imported/2.png-969ea026e89dd4f89e0b8059288d4218.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://5f2hh2l28ukh"
path="res://.godot/imported/3.png-d627c89b1e647127b072fee7172a0c4c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/ATTACK1_FRONT/3.png"
dest_files=["res://.godot/imported/3.png-d627c89b1e647127b072fee7172a0c4c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d3hphcw4hjx8a"
path="res://.godot/imported/2.png-21230a2d7de8fa45c1f47de531713a09.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/2.png"
dest_files=["res://.godot/imported/2.png-21230a2d7de8fa45c1f47de531713a09.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ba5msye5ew6au"
path="res://.godot/imported/3.png-23de666f869203a66292b51f663f0f9a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/3.png"
dest_files=["res://.godot/imported/3.png-23de666f869203a66292b51f663f0f9a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dr61jiolrs6j4"
path="res://.godot/imported/7.png-56188b93a0e9177954eb21e703a23b95.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/7.png"
dest_files=["res://.godot/imported/7.png-56188b93a0e9177954eb21e703a23b95.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://tf8bnar22irj"
path="res://.godot/imported/8.png-27457ea86cb9853021fd645f3246e95d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/ATTACK_2/8.png"
dest_files=["res://.godot/imported/8.png-27457ea86cb9853021fd645f3246e95d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cm3042jybafum"
path="res://.godot/imported/10.png-9b2ff91f716e95d0766a574a17ddc06c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/10.png"
dest_files=["res://.godot/imported/10.png-9b2ff91f716e95d0766a574a17ddc06c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://errp2wrd6hxe"
path="res://.godot/imported/11.png-7ec211660b79df8ee3a260491d7ebc92.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/11.png"
dest_files=["res://.godot/imported/11.png-7ec211660b79df8ee3a260491d7ebc92.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d4cx4rxs3sbup"
path="res://.godot/imported/12.png-5a95652dbe5d1600dba6d6e568481f52.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/12.png"
dest_files=["res://.godot/imported/12.png-5a95652dbe5d1600dba6d6e568481f52.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c1nw601kjo5n7"
path="res://.godot/imported/16.png-43b66210e98ee994a00406aca834015f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/16.png"
dest_files=["res://.godot/imported/16.png-43b66210e98ee994a00406aca834015f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://0fo7l3aemg1k"
path="res://.godot/imported/20.png-01da41d413b1f199d11ba9ecab29c8ae.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/20.png"
dest_files=["res://.godot/imported/20.png-01da41d413b1f199d11ba9ecab29c8ae.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://duem4iwelp46j"
path="res://.godot/imported/21.png-5bb2862cd4d2bc90c081b1c0d4dd85d0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/21.png"
dest_files=["res://.godot/imported/21.png-5bb2862cd4d2bc90c081b1c0d4dd85d0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bjbkhrktckdh2"
path="res://.godot/imported/22.png-8e88dae4f78cd75f13808e7e65aad453.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/22.png"
dest_files=["res://.godot/imported/22.png-8e88dae4f78cd75f13808e7e65aad453.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cuaghvm84rmpn"
path="res://.godot/imported/25.png-62bf6db1b02a63f21caca1ea7b40ca8e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/25.png"
dest_files=["res://.godot/imported/25.png-62bf6db1b02a63f21caca1ea7b40ca8e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://df25conljm3ac"
path="res://.godot/imported/5.png-5294e8575bb85d0ecbd4c9420342798e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/5.png"
dest_files=["res://.godot/imported/5.png-5294e8575bb85d0ecbd4c9420342798e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bmy5syneqh1ua"
path="res://.godot/imported/7.png-78398a72a08eff7a88149d360156a363.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/7.png"
dest_files=["res://.godot/imported/7.png-78398a72a08eff7a88149d360156a363.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dk83jluw0u32d"
path="res://.godot/imported/8.png-380a92662f646337d45f17d9daadeec4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/8.png"
dest_files=["res://.godot/imported/8.png-380a92662f646337d45f17d9daadeec4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c64faxsjuilsa"
path="res://.godot/imported/9.png-5f12c5b0da6c45a1c582463271522457.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/04. sara/animations/IDLE_BACK/9.png"
dest_files=["res://.godot/imported/9.png-5f12c5b0da6c45a1c582463271522457.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

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