Add Sara
@@ -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}\"";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
uid://jjulhqd5g3bd
|
||||
uid://dssu6tgi8dapq
|
||||
|
||||
@@ -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="."]
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"]
|
||||
|
||||
76
Zennysoft.Game.Ma/src/enemy/enemy_types/04. sara/Sara.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://jjulhqd5g3bd
|
||||
95
Zennysoft.Game.Ma/src/enemy/enemy_types/04. sara/Sara.tscn
Normal 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
|
||||
@@ -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")
|
||||
@@ -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")
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 8.8 KiB |