Move files and folders to new repo format to enable multi-project format

This commit is contained in:
2025-03-06 22:07:25 -08:00
parent 12cbb82ac9
commit a09f6ec5a5
3973 changed files with 1781 additions and 2938 deletions

View File

@@ -0,0 +1,3 @@
[gd_resource type="AnimationNodeStateMachinePlayback" format=3 uid="uid://5olovmdoiwt3"]
[resource]

View File

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

View File

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

View File

@@ -0,0 +1,13 @@
[gd_scene load_steps=2 format=3 uid="uid://br6dlxj36fw5i"]
[sub_resource type="BoxShape3D" id="BoxShape3D_7056c"]
[node name="CollisionDetector" type="Area3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.500351, 0)
disable_mode = 2
collision_layer = 18
collision_mask = 18
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.633259, 0)
shape = SubResource("BoxShape3D_7056c")

View File

@@ -0,0 +1,11 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://hbmd7rft6ejc"]
[ext_resource type="Shader" path="res://src/vfx/shaders/DamageHit.gdshader" id="1_kqs86"]
[resource]
resource_local_to_scene = true
shader = ExtResource("1_kqs86")
shader_parameter/shock_color = Color(1, 0, 0, 1)
shader_parameter/amplitude = 30.0
shader_parameter/progress = -1.0
shader_parameter/frequecy = 10.0

View File

@@ -0,0 +1,268 @@
using Chickensoft.AutoInject;
using Chickensoft.Collections;
using Chickensoft.Introspection;
using Godot;
using System.Linq;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
{
#region Registration
public override void _Notification(int what) => this.Notify(what);
protected IEnemyLogic _enemyLogic { get; set; } = default!;
IEnemyLogic IProvide<IEnemyLogic>.Value() => _enemyLogic;
public EnemyLogic.IBinding EnemyBinding { get; set; } = default!;
#endregion
#region Dependencies
[Dependency] IGame Game => this.DependOn<IGame>();
[Dependency] protected IPlayer _player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single());
#endregion
#region Exports
[Export] protected EnemyStatResource _enemyStatResource { get; set; } = default!;
[Export]
private float _movementSpeed = 2f;
#endregion
#region Node Dependencies
[Node] private CollisionShape3D _collisionShape { get; set; } = default!;
[Node] private Area3D _lineOfSight { get; set; } = default!;
[Node] private Timer _attackTimer { get; set; } = default!;
[Node] private RayCast3D _raycast { get; set; } = default!;
[Node] protected IEnemyModelView _enemyModelView { get; set; } = default!;
#endregion
public double CurrentHP => _currentHP.Value;
private AutoProp<double> _currentHP { get; set; }
private float _knockbackStrength = 0.0f;
private Vector3 _knockbackDirection = Vector3.Zero;
#region Godot methods
public void Setup()
{
_enemyLogic = new EnemyLogic();
_enemyLogic.Set(_enemyStatResource);
_enemyLogic.Set(this as IEnemy);
_enemyLogic.Set(_player);
}
public void OnResolved()
{
EnemyBinding = _enemyLogic.Bind();
EnemyBinding
.Handle((in EnemyLogic.Output.TakeAction _) =>
{
TakeAction();
})
.Handle((in EnemyLogic.Output.Defeated output) =>
{
});
this.Provide();
_enemyLogic.Start();
_currentHP = new AutoProp<double>(_enemyStatResource.MaximumHP);
_currentHP.Sync += OnHPChanged;
_lineOfSight.BodyEntered += LineOfSight_BodyEntered;
}
public override void _PhysicsProcess(double delta)
{
if (CurrentHP <= 0)
return;
var lookDir = GlobalPosition + Velocity;
if (!lookDir.IsEqualApprox(GlobalPosition) || !Velocity.IsZeroApprox())
LookAt(lookDir, Vector3.Up, true);
var isWalking = _enemyLogic.Value is EnemyLogic.State.Patrolling or EnemyLogic.State.FollowPlayer;
if (_enemyModelView is EnemyModelView2D enemyModelView2D)
enemyModelView2D.RotateModel(GlobalTransform.Basis, -_player.CurrentBasis.Z, isWalking);
}
#endregion
public virtual void TakeAction()
{
}
public virtual void SetTarget(Vector3 target)
{
}
public virtual void Move(Vector3 velocity)
{
_knockbackStrength = _knockbackStrength * 0.9f;
Velocity = velocity + (_knockbackDirection * _knockbackStrength);
MoveAndSlide();
}
public virtual void TakeDamage(double damage, ElementType elementType, bool isCriticalHit = false, bool ignoreDefense = false, bool ignoreElementalResistance = false)
{
if (_currentHP.Value > 0)
{
if (!ignoreElementalResistance)
damage = CalculateElementalResistance(damage, elementType);
if (!ignoreDefense)
damage = CalculateDefenseResistance(damage);
if (isCriticalHit)
damage *= 2;
GD.Print($"Enemy Hit for {damage} damage.");
_currentHP.OnNext(_currentHP.Value - damage);
GD.Print("Current HP: " + _currentHP.Value);
if (_currentHP.Value <= 0)
return;
_enemyModelView.PlayHitAnimation();
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
if (_player.EquippedWeapon.Value.WeaponTag == WeaponTag.SelfDamage)
_player.Stats.SetCurrentHP(_player.Stats.CurrentHP.Value - 5);
}
}
public void Knockback(float impulse, Vector3 direction)
{
_knockbackDirection = direction;
_knockbackStrength = 0.3f;
}
public void Die()
{
_currentHP.OnNext(0);
_enemyLogic.Input(new EnemyLogic.Input.EnemyDefeated());
_collisionShape.SetDeferred("disabled", true);
_enemyModelView.PlayDeathAnimation();
var tweener = GetTree().CreateTween();
tweener.TweenInterval(1.0f);
tweener.TweenCallback(Callable.From(QueueFree));
Game.EnemyDefeated(GlobalPosition, _enemyStatResource);
}
public void SetCurrentHP(int targetHP)
{
_currentHP.OnNext(targetHP);
}
public int GetMaximumHP()
{
return _enemyStatResource.MaximumHP;
}
public void StartAttackTimer()
{
_attackTimer.Timeout += OnAttackTimeout;
}
public void StopAttackTimer()
{
_attackTimer.Timeout -= OnAttackTimeout;
}
public Vector3 GetEnemyGlobalPosition() => GlobalPosition;
public void SetEnemyGlobalPosition(Vector3 target)
{
GlobalPosition = new Vector3(target.X, -0.5f, target.Z);
}
public IDungeonRoom GetCurrentRoom()
{
var currentRooms = Game.CurrentFloor.Rooms;
foreach (var room in currentRooms)
{
var enemiesInCurrentRoom = room.EnemiesInRoom;
if (enemiesInCurrentRoom.Contains(this))
return room;
}
return null;
}
private void OnAttackTimeout()
{
if (GlobalPosition.DistanceTo(_player.CurrentPosition) > 5f)
{
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
return;
}
var rng = new RandomNumberGenerator();
rng.Randomize();
_enemyLogic.Input(new EnemyLogic.Input.AttackTimer());
_attackTimer.Stop();
_attackTimer.WaitTime = rng.RandfRange(2f, 5.0f);
_attackTimer.Start();
}
private void LineOfSight_BodyEntered(Node3D body)
{
var overlappingBodies = _lineOfSight.GetOverlappingBodies();
foreach (var _ in overlappingBodies)
{
if (_raycast.GlobalPosition != _player.CurrentPosition)
_raycast.LookAt(_player.CurrentPosition, Vector3.Up);
_raycast.ForceRaycastUpdate();
if (_raycast.IsColliding())
{
var collider = _raycast.GetCollider();
if (collider is IPlayer)
{
_raycast.DebugShapeCustomColor = Color.FromString("Purple", Colors.Purple);
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
}
}
}
}
private void OnHPChanged(double newHP)
{
if (newHP <= 0)
Die();
}
private double CalculateElementalResistance(double incomingDamage, ElementType incomingElementType)
{
if (incomingElementType == ElementType.Aeolic)
return Mathf.Max(incomingDamage - (incomingDamage * _enemyStatResource.AeolicResistance), 0.0);
if (incomingElementType == ElementType.Hydric)
return Mathf.Max(incomingDamage - (incomingDamage * _enemyStatResource.HydricResistance), 0.0);
if (incomingElementType == ElementType.Igneous)
return Mathf.Max(incomingDamage - (incomingDamage * _enemyStatResource.IgneousResistance), 0.0);
if (incomingElementType == ElementType.Ferrum)
return Mathf.Max(incomingDamage - (incomingDamage * _enemyStatResource.FerrumResistance), 0.0);
if (incomingElementType == ElementType.Telluric)
return Mathf.Max(incomingDamage - (incomingDamage * _enemyStatResource.TelluricResistance), 0.0);
return Mathf.Max(incomingDamage, 0.0);
}
private double CalculateDefenseResistance(double incomingDamage)
{
return Mathf.Max(incomingDamage - _enemyStatResource.CurrentDefense, 0.0);
}
public void OnExitTree()
{
_enemyLogic.Stop();
EnemyBinding.Dispose();
}
}

View File

@@ -0,0 +1 @@
uid://2d34jler3rmv

View File

@@ -0,0 +1,12 @@
using Godot;
namespace Zennysoft.Game.Ma;
public partial class EnemyDatabase : Node
{
[Export]
public PackedScene[] EnemyList;
[Export]
public float[] SpawnRate;
}

View File

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

View File

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

View File

@@ -0,0 +1,19 @@
shader_type spatial;
uniform bool enable = false;
uniform vec3 albedo_color : source_color = vec3(1.0);
void vertex() {
if (enable)
//VERTEX.x += cos(VERTEX.x * 3.0 * TIME) * sin(VERTEX.z * 24.0 * TIME);
VERTEX.y += cos(VERTEX.y * 2.0 * TIME) * sin(VERTEX.y * 3.0 * TIME);
}
void fragment() {
// Called for every pixel the material is visible on.
ALBEDO = albedo_color;
}
//void light() {
// Called for every pixel for every light affecting the material.
// Uncomment to replace the default light processing function with this one.
//}

View File

@@ -0,0 +1 @@
uid://86pfv5qnd36q

View File

@@ -0,0 +1,9 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://wrsnwuvv1rw3"]
[ext_resource type="Shader" path="res://src/enemy/EnemyDie.gdshader" id="1_pk3sx"]
[resource]
render_priority = 0
shader = ExtResource("1_pk3sx")
shader_parameter/enable = true
shader_parameter/albedo_color = Color(1, 0, 0, 1)

View File

@@ -0,0 +1,13 @@
using Godot;
namespace Zennysoft.Game.Ma;
[GlobalClass]
public partial class EnemyLoreInfo : Resource
{
[Export]
public string Name { get; set; }
[Export]
public string Description { get; set; }
}

View File

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

View File

@@ -0,0 +1,135 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class EnemyModelView2D : Node3D, IEnemyModelView
{
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 EnemyLoreInfo EnemyLoreInfo { get; set; } = default!;
[Node] public AnimatedSprite2D AnimatedSprite { get; set; } = default!;
[Node] public IHitbox Hitbox { get; set; } = default!;
[Node] public AnimationPlayer AnimationPlayer { get; set; } = default!;
[Node] public AnimationTree AnimationTree { get; set; } = default!;
public void Setup()
{
AnimationTree.AnimationFinished += AnimationTree_AnimationFinished;
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Start(IDLE_FORWARD);
}
public void PlayPrimaryAttackAnimation()
{
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(PRIMARY_ATTACK);
}
public void PlaySecondaryAttackAnimation()
{
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(SECONDARY_ATTACK);
}
public void PlayPrimarySkillAnimation()
{
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(PRIMARY_SKILL);
}
public void PlayHitAnimation()
{
LoadShader("res://src/vfx/shaders/DamageHit.gdshader");
var tweener = GetTree().CreateTween();
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 1.0f);
}
public void PlayDeathAnimation()
{
LoadShader("res://src/vfx/shaders/PixelMelt.gdshader");
var tweener = GetTree().CreateTween();
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 0.8f);
tweener.TweenCallback(Callable.From(QueueFree));
}
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection, bool isWalking) => RotateModel(enemyBasis, cameraDirection, 0.55f, 0.45f, isWalking);
public virtual 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 (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 (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 (isWalking)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_LEFT_WALK);
else
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_LEFT);
}
}
}
private void LoadShader(string shaderPath)
{
var shader = GD.Load<Shader>(shaderPath);
AnimatedSprite.Material = new ShaderMaterial();
var shaderMaterial = (ShaderMaterial)AnimatedSprite.Material;
shaderMaterial.Shader = shader;
}
private void AnimationTree_AnimationFinished(StringName animName)
{
if (animName == PRIMARY_ATTACK || animName == SECONDARY_ATTACK || animName == PRIMARY_SKILL)
{
AnimationTree.Get("parameters/playback").As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD);
}
}
private void SetShaderValue(float shaderValue)
{
var shaderMaterial = (ShaderMaterial)AnimatedSprite.Material;
shaderMaterial.SetShaderParameter("progress", shaderValue);
}
}

View File

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

View File

@@ -0,0 +1,57 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class EnemyModelView3D : Node3D, IEnemyModelView
{
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 TAKE_DAMAGE = "take_damage";
private const string DEFEATED = "defeated";
private const string PARAMETERS_PLAYBACK = "parameters/playback";
public override void _Notification(int what) => this.Notify(what);
[Export] public EnemyLoreInfo EnemyLoreInfo { get; set; } = default!;
[Node] private MeshInstance3D _meshInstance { get; set; } = default!;
[Node] private AnimationPlayer _animationPlayer { get; set; } = default!;
public void Setup()
{
}
public void PlayPrimaryAttackAnimation()
{
_animationPlayer.Play(PRIMARY_ATTACK);
}
public void PlaySecondaryAttackAnimation()
{
}
public void PlayPrimarySkillAnimation()
{
}
public void PlayHitAnimation()
{
_animationPlayer.Play(TAKE_DAMAGE);
}
public void PlayDeathAnimation()
{
_animationPlayer.Play(DEFEATED);
}
}

View File

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

View File

@@ -0,0 +1,49 @@
using Godot;
namespace Zennysoft.Game.Ma;
[GlobalClass]
public partial class EnemyStatResource : Resource
{
[Export]
public double CurrentHP { get; set; }
[Export]
public int MaximumHP { get; set; }
[Export]
public int CurrentAttack { get; set; }
[Export]
public int CurrentDefense { get; set; }
[Export]
public int MaxAttack { get; set; }
[Export]
public int MaxDefense { get; set; }
[Export]
public int ExpFromDefeat { get; set; }
[Export]
public double Luck { get; set; } = 0.05f;
[Export]
public double TelluricResistance { get; set; }
[Export]
public double AeolicResistance { get; set; }
[Export]
public double HydricResistance { get; set; }
[Export]
public double IgneousResistance { get; set; }
[Export]
public double FerrumResistance { get; set; }
[Export]
public float DropsSoulGemChance { get; set; } = 0.75f;
}

View File

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

View File

@@ -0,0 +1,6 @@
namespace Zennysoft.Game.Ma.src.enemy;
public interface ICanPatrol
{
public void Patrol();
}

View File

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

View File

@@ -0,0 +1,32 @@
using Godot;
namespace Zennysoft.Game.Ma;
public interface IEnemy : IKillable
{
public void TakeAction();
public void Move(Vector3 velocity);
public void TakeDamage(double damage, ElementType elementType = ElementType.None, bool isCriticalHit = false, bool ignoreDefense = false, bool ignoreElementalResistance = false);
public void Knockback(float impulse, Vector3 direction);
public double CurrentHP { get; }
public void SetCurrentHP(int newHP);
public int GetMaximumHP();
public void StartAttackTimer();
public void StopAttackTimer();
public abstract void SetTarget(Vector3 target);
public void SetEnemyGlobalPosition(Vector3 target);
public Vector3 GetEnemyGlobalPosition();
public IDungeonRoom GetCurrentRoom();
}

View File

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

View File

@@ -0,0 +1,17 @@
using Chickensoft.GodotNodeInterfaces;
using Godot;
namespace Zennysoft.Game.Ma;
public interface IEnemyModelView : INode3D
{
public void PlayPrimaryAttackAnimation();
public void PlaySecondaryAttackAnimation();
public void PlayPrimarySkillAnimation();
public void PlayHitAnimation();
public void PlayDeathAnimation();
}

View File

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

View File

@@ -0,0 +1,8 @@
using Godot;
namespace Zennysoft.Game.Ma;
public interface IKnockbackable
{
public void Knockback(float impulse, Vector3 direction);
}

View File

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

View File

@@ -0,0 +1,12 @@
using Godot;
namespace Zennysoft.Game.Ma;
public interface INavigationAgentClient
{
public void CalculateVelocity(Vector3 currentPosition, bool canMove);
public void SetTarget(Vector3 target);
public bool IsAvoidanceEnabled { get; }
}

View File

@@ -0,0 +1 @@
uid://71hjyrgwnvxx

View File

@@ -0,0 +1,77 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Zennysoft.Game.Ma.src.enemy;
using Godot;
using System;
using System.Threading.Tasks;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class NavigationAgentClient : Node3D, INavigationAgentClient
{
public override void _Notification(int what) => this.Notify(what);
[Node] private NavigationAgent3D NavAgent { get; set; } = default!;
[Node] private Timer _patrolTimer { get; set; } = default!;
private Vector3 _currentTarget = Vector3.Zero;
private Timer _thinkTimer;
private bool _canMove = false;
public void Setup()
{
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);
_thinkTimer = new Timer
{
WaitTime = 0.4f
};
AddChild(_thinkTimer);
_thinkTimer.Timeout += NavAgent_TargetReached;
_thinkTimer.Start();
}
private void NavAgent_VelocityComputed(Vector3 safeVelocity)
{
if (!_canMove)
return;
var enemy = GetParent() as IEnemy;
enemy.Move(safeVelocity);
}
public void CalculateVelocity(Vector3 currentPosition, bool canMove)
{
_canMove = canMove;
var nextPathPosition = NavAgent.GetNextPathPosition();
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));
public bool IsAvoidanceEnabled => NavAgent.AvoidanceEnabled;
private void NavAgent_TargetReached()
{
NavAgent.TargetPosition = _currentTarget;
}
private void OnPatrolTimeout()
{
var rng = new RandomNumberGenerator();
rng.Randomize();
_patrolTimer.WaitTime = rng.RandfRange(5.0f, 10.0f);
var enemy = GetParent() as ICanPatrol;
enemy.Patrol();
}
}

View File

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

View File

@@ -0,0 +1,14 @@
[gd_scene load_steps=2 format=3 uid="uid://pbnsngx5jvrh"]
[ext_resource type="Script" uid="uid://rcnriaxfld2h" path="res://src/enemy/NavigationAgentClient.cs" id="1_qwonp"]
[node name="NavigationAgentClient" type="Node3D"]
script = ExtResource("1_qwonp")
[node name="NavAgent" type="NavigationAgent3D" parent="."]
unique_name_in_owner = true
path_desired_distance = 2.0
target_desired_distance = 2.5
avoidance_enabled = true
radius = 1.5
time_horizon_obstacles = 1.0

View File

@@ -0,0 +1,9 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://x2bv1q51mcjq"]
[ext_resource type="Shader" path="res://src/vfx/shaders/PixelMelt.gdshader" id="1_fbp5a"]
[resource]
shader = ExtResource("1_fbp5a")
shader_parameter/progress = 0.0
shader_parameter/meltiness = 1.0
shader_parameter/reverse = false

View File

@@ -0,0 +1,23 @@
using System.Text.Json.Serialization;
namespace Zennysoft.Game.Ma;
public enum WeaponTag
{
None,
SelfDamage,
IgnoreAffinity,
Knockback,
}
[JsonSerializable(typeof(WeaponTag))]
public partial class WeaponTagEnumContext : JsonSerializerContext;
public enum ItemTag
{
None,
BreaksOnChange
}
[JsonSerializable(typeof(ItemTag))]
public partial class ItemTagEnumContext : JsonSerializerContext;

View File

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

Binary file not shown.

View File

@@ -0,0 +1,75 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Zennysoft.Game.Ma.src.enemy;
using Godot;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class Sproingy : 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) < 3.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) > 5f)
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
_navigationAgentClient.CalculateVelocity(GlobalPosition, true);
base._PhysicsProcess(delta);
}
public override void TakeAction()
{
PrimaryAttack();
}
public void PrimaryAttack()
{
_enemyModelView.PlayPrimaryAttackAnimation();
}
public override void SetTarget(Vector3 target) => _navigationAgentClient.SetTarget(target);
public void Patrol()
{
var rng = new RandomNumberGenerator();
rng.Randomize();
var randomizedSpot = new Vector3(rng.RandfRange(-5.0f, 5.0f), 0, rng.RandfRange(-5.0f, 5.0f));
_enemyLogic.Input(new EnemyLogic.Input.PatrolToRandomSpot(GlobalPosition + randomizedSpot));
_enemyLogic.Input(new EnemyLogic.Input.StartPatrol());
}
private void Hitbox_AreaEntered(Area3D area)
{
var target = area.GetOwner();
if (target is IPlayer player)
{
var damage = _enemyStatResource.CurrentAttack * PrimaryAttackElementalDamageBonus;
player.TakeDamage(damage, PrimaryAttackElementalType, BattleExtensions.IsCriticalHit(_enemyStatResource.Luck));
}
}
}

View File

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

View File

@@ -0,0 +1,89 @@
[gd_scene load_steps=9 format=3 uid="uid://bksq62muhk3h5"]
[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="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.0
CurrentAttack = 12
CurrentDefense = 7
MaxAttack = 12
MaxDefense = 7
ExpFromDefeat = 15
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")
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cwfph"]
radius = 0.106078
height = 1.23076
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
height = 5.0
radius = 1.0
[sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"]
radius = 0.762524
[node name="Sproingy" 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_xsluo")
_enemyStatResource = SubResource("Resource_oln85")
[node name="NavigationAgentClient" parent="." instance=ExtResource("3_ut5m2")]
unique_name_in_owner = true
[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="LineOfSight" type="Area3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
collision_layer = 2
collision_mask = 2
[node name="CollisionShape3D" type="CollisionShape3D" parent="LineOfSight"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -2)
shape = SubResource("CylinderShape3D_jbgmx")
[node name="PatrolTimer" type="Timer" parent="."]
unique_name_in_owner = true
wait_time = 10.0
autostart = true
[node name="AttackTimer" type="Timer" parent="."]
unique_name_in_owner = true
wait_time = 0.8
autostart = true
[node name="Raycast" type="RayCast3D" parent="."]
unique_name_in_owner = true
target_position = Vector3(0, 0, -5)
collision_mask = 3
[node name="EnemyModelView" parent="." 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="Collision" type="Area3D" parent="."]
collision_layer = 2048
collision_mask = 0
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"]
shape = SubResource("SphereShape3D_8vcnq")

View File

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

View File

@@ -0,0 +1,744 @@
[gd_scene load_steps=121 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://dd0ia6isdqg61" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 1.png" id="1_pbx41"]
[ext_resource type="Texture2D" uid="uid://bs4ico5ouo5d3" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 2.png" id="2_0vbio"]
[ext_resource type="Texture2D" uid="uid://85ki5mc4h0vs" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 3.png" id="3_lae8t"]
[ext_resource type="Texture2D" uid="uid://bwt1m2frb3r0e" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 4.png" id="4_53wuj"]
[ext_resource type="Texture2D" uid="uid://ckssl1np6vnlu" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 5.png" id="5_d5bmw"]
[ext_resource type="Texture2D" uid="uid://c4sqc6i3xcfac" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 6.png" id="6_fpvxl"]
[ext_resource type="Texture2D" uid="uid://cawexe4wkosc8" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 7.png" id="7_qq0ru"]
[ext_resource type="Texture2D" uid="uid://d0j1vrx7xdnxl" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 8.png" id="8_c54uj"]
[ext_resource type="Texture2D" uid="uid://d0qhndaukki7c" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 9.png" id="9_qmo72"]
[ext_resource type="Texture2D" uid="uid://cnd08q34wa7ww" path="res://src/enemy/enemy_types/01. sproingy/animations/ATTACK/Layer 10.png" id="10_jyt1n"]
[ext_resource type="Texture2D" uid="uid://b8ntr7hh6rr5h" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 1.png" id="11_5un2v"]
[ext_resource type="Texture2D" uid="uid://csgthlou2tnvb" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 2.png" id="12_2x3nl"]
[ext_resource type="Texture2D" uid="uid://cfyxuk85350gn" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 3.png" id="13_6a5nw"]
[ext_resource type="Texture2D" uid="uid://dufdb5gc0gfkr" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 4.png" id="14_0jqty"]
[ext_resource type="Texture2D" uid="uid://buu4btd3adrr4" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 5.png" id="15_yjcrh"]
[ext_resource type="Texture2D" uid="uid://ddgctjau0dnmh" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 6.png" id="16_2ybyh"]
[ext_resource type="Texture2D" uid="uid://2jwaacvarrha" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 7.png" id="17_n454k"]
[ext_resource type="Texture2D" uid="uid://8837jm7f78uo" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 8.png" id="18_vrcjv"]
[ext_resource type="Texture2D" uid="uid://devt1gmwduo5h" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 9.png" id="19_h1yxw"]
[ext_resource type="Texture2D" uid="uid://cj3m4eyagiye6" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 10.png" id="20_kg6hd"]
[ext_resource type="Texture2D" uid="uid://cyigr4eip1mxt" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 11.png" id="21_25i3y"]
[ext_resource type="Texture2D" uid="uid://kavqjxq17m0p" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 12.png" id="22_5g722"]
[ext_resource type="Texture2D" uid="uid://bcce7b4wp6a4v" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 13.png" id="23_a6y4x"]
[ext_resource type="Texture2D" uid="uid://doiu8sug4t8ki" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 14.png" id="24_7y7m4"]
[ext_resource type="Texture2D" uid="uid://dqymhvgu03xpl" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_BACK/Layer 15.png" id="25_ldcvv"]
[ext_resource type="Texture2D" uid="uid://cjk1vjjk3gnjl" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 1.png" id="26_aalmk"]
[ext_resource type="Texture2D" uid="uid://1nv7dlxcqlia" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 2.png" id="27_2le5t"]
[ext_resource type="Texture2D" uid="uid://bniq2b1phbjk5" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 3.png" id="28_4nmgu"]
[ext_resource type="Texture2D" uid="uid://ba846rlx4phr2" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 4.png" id="29_mw5r6"]
[ext_resource type="Texture2D" uid="uid://b76dai3g8nh2a" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 5.png" id="30_jbtxi"]
[ext_resource type="Texture2D" uid="uid://wqec5p5xahew" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 6.png" id="31_mjxlk"]
[ext_resource type="Texture2D" uid="uid://sl7fel3muw2y" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 7.png" id="32_al2xs"]
[ext_resource type="Texture2D" uid="uid://cucixinggd5s2" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 8.png" id="33_afa0q"]
[ext_resource type="Texture2D" uid="uid://ccn6vymd07kd2" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 9.png" id="34_irq32"]
[ext_resource type="Texture2D" uid="uid://b7jqturu5jm2c" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 10.png" id="35_2khaq"]
[ext_resource type="Texture2D" uid="uid://c1m065dts364p" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 11.png" id="36_k7x0x"]
[ext_resource type="Texture2D" uid="uid://qsm43ovrbr7m" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 12.png" id="37_noc6c"]
[ext_resource type="Texture2D" uid="uid://bslsx7k6aa4tf" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 13.png" id="38_tfygr"]
[ext_resource type="Texture2D" uid="uid://cefke0gsokfi1" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 14.png" id="39_fpoao"]
[ext_resource type="Texture2D" uid="uid://blmpd2lu84ppt" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_FRONT/Layer 15.png" id="40_s4c8e"]
[ext_resource type="Texture2D" uid="uid://kwaf2jj5oyu4" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 1.png" id="41_d3ufd"]
[ext_resource type="Texture2D" uid="uid://ul0q834bwd6" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 2.png" id="42_ap0nr"]
[ext_resource type="Texture2D" uid="uid://bpohl3uqutcyb" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 3.png" id="43_snwjc"]
[ext_resource type="Texture2D" uid="uid://dlbt7lj5ryl0v" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 4.png" id="44_wba7a"]
[ext_resource type="Texture2D" uid="uid://bkhn4ck7bx6tt" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 5.png" id="45_v1iqd"]
[ext_resource type="Texture2D" uid="uid://c8uw6qdsi1720" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 6.png" id="46_mylxl"]
[ext_resource type="Texture2D" uid="uid://cnoouhy7p3gi3" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 7.png" id="47_gg0cg"]
[ext_resource type="Texture2D" uid="uid://b1xldymngql00" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 8.png" id="48_33r3i"]
[ext_resource type="Texture2D" uid="uid://btuxhmmb6ikvf" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 9.png" id="49_r4mim"]
[ext_resource type="Texture2D" uid="uid://dlrn3cbdubg5s" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 10.png" id="50_r2i8l"]
[ext_resource type="Texture2D" uid="uid://oukshrxpgscg" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 11.png" id="51_xbv86"]
[ext_resource type="Texture2D" uid="uid://buk3stdgcg44w" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 12.png" id="52_rtp20"]
[ext_resource type="Texture2D" uid="uid://b3gndmrlrvexy" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 13.png" id="53_nr2vc"]
[ext_resource type="Texture2D" uid="uid://b1cmx8l4ia3fv" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 14.png" id="54_jdvn0"]
[ext_resource type="Texture2D" uid="uid://c7t4626rox02s" path="res://src/enemy/enemy_types/01. sproingy/animations/IDLE_WALK_SIDE/Layer 15.png" id="55_2eqor"]
[ext_resource type="Script" uid="uid://6edayafleq8y" path="res://src/hitbox/Hitbox.cs" id="57_lae8t"]
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
[sub_resource type="SpriteFrames" id="SpriteFrames_6drt6"]
resource_local_to_scene = true
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("1_pbx41")
}, {
"duration": 1.0,
"texture": ExtResource("2_0vbio")
}, {
"duration": 1.0,
"texture": ExtResource("3_lae8t")
}, {
"duration": 1.0,
"texture": ExtResource("4_53wuj")
}, {
"duration": 1.0,
"texture": ExtResource("5_d5bmw")
}, {
"duration": 1.0,
"texture": ExtResource("6_fpvxl")
}, {
"duration": 1.0,
"texture": ExtResource("7_qq0ru")
}, {
"duration": 1.0,
"texture": ExtResource("8_c54uj")
}, {
"duration": 1.0,
"texture": ExtResource("9_qmo72")
}, {
"duration": 1.0,
"texture": ExtResource("10_jyt1n")
}],
"loop": false,
"name": &"attack",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("11_5un2v")
}, {
"duration": 1.0,
"texture": ExtResource("12_2x3nl")
}, {
"duration": 1.0,
"texture": ExtResource("13_6a5nw")
}, {
"duration": 1.0,
"texture": ExtResource("14_0jqty")
}, {
"duration": 1.0,
"texture": ExtResource("15_yjcrh")
}, {
"duration": 1.0,
"texture": ExtResource("16_2ybyh")
}, {
"duration": 1.0,
"texture": ExtResource("17_n454k")
}, {
"duration": 1.0,
"texture": ExtResource("18_vrcjv")
}, {
"duration": 1.0,
"texture": ExtResource("19_h1yxw")
}, {
"duration": 1.0,
"texture": ExtResource("20_kg6hd")
}, {
"duration": 1.0,
"texture": ExtResource("21_25i3y")
}, {
"duration": 1.0,
"texture": ExtResource("22_5g722")
}, {
"duration": 1.0,
"texture": ExtResource("23_a6y4x")
}, {
"duration": 1.0,
"texture": ExtResource("24_7y7m4")
}, {
"duration": 1.0,
"texture": ExtResource("25_ldcvv")
}],
"loop": true,
"name": &"idle_back_walk",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("26_aalmk")
}, {
"duration": 1.0,
"texture": ExtResource("27_2le5t")
}, {
"duration": 1.0,
"texture": ExtResource("28_4nmgu")
}, {
"duration": 1.0,
"texture": ExtResource("29_mw5r6")
}, {
"duration": 1.0,
"texture": ExtResource("30_jbtxi")
}, {
"duration": 1.0,
"texture": ExtResource("31_mjxlk")
}, {
"duration": 1.0,
"texture": ExtResource("32_al2xs")
}, {
"duration": 1.0,
"texture": ExtResource("33_afa0q")
}, {
"duration": 1.0,
"texture": ExtResource("34_irq32")
}, {
"duration": 1.0,
"texture": ExtResource("35_2khaq")
}, {
"duration": 1.0,
"texture": ExtResource("36_k7x0x")
}, {
"duration": 1.0,
"texture": ExtResource("37_noc6c")
}, {
"duration": 1.0,
"texture": ExtResource("38_tfygr")
}, {
"duration": 1.0,
"texture": ExtResource("39_fpoao")
}, {
"duration": 1.0,
"texture": ExtResource("40_s4c8e")
}],
"loop": true,
"name": &"idle_front_walk",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("41_d3ufd")
}, {
"duration": 1.0,
"texture": ExtResource("42_ap0nr")
}, {
"duration": 1.0,
"texture": ExtResource("43_snwjc")
}, {
"duration": 1.0,
"texture": ExtResource("44_wba7a")
}, {
"duration": 1.0,
"texture": ExtResource("45_v1iqd")
}, {
"duration": 1.0,
"texture": ExtResource("46_mylxl")
}, {
"duration": 1.0,
"texture": ExtResource("47_gg0cg")
}, {
"duration": 1.0,
"texture": ExtResource("48_33r3i")
}, {
"duration": 1.0,
"texture": ExtResource("49_r4mim")
}, {
"duration": 1.0,
"texture": ExtResource("50_r2i8l")
}, {
"duration": 1.0,
"texture": ExtResource("51_xbv86")
}, {
"duration": 1.0,
"texture": ExtResource("52_rtp20")
}, {
"duration": 1.0,
"texture": ExtResource("53_nr2vc")
}, {
"duration": 1.0,
"texture": ExtResource("54_jdvn0")
}, {
"duration": 1.0,
"texture": ExtResource("55_2eqor")
}],
"loop": true,
"name": &"idle_left_walk",
"speed": 12.0
}]
[sub_resource type="BoxShape3D" id="BoxShape3D_53wuj"]
size = Vector3(1, 0.565, 2)
[sub_resource type="Animation" id="Animation_ch8ic"]
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_left_walk"]
}
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_d5bmw"]
resource_name = "idle_back"
length = 1.16667
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_walk"]
}
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),
"transitions": PackedFloat32Array(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]
}
[sub_resource type="Animation" id="Animation_1tda5"]
resource_name = "idle_back_walk"
length = 1.16667
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_walk"]
}
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),
"transitions": PackedFloat32Array(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]
}
[sub_resource type="Animation" id="Animation_53wuj"]
resource_name = "idle_front"
length = 1.16667
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_front_walk"]
}
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.333333, 0.416667, 0.5, 0.583333, 0.666667, 0.75, 0.833333, 0.916667, 1, 1.08333, 1.16667, 1.25),
"transitions": PackedFloat32Array(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]
}
[sub_resource type="Animation" id="Animation_31nry"]
resource_name = "idle_front_walk"
length = 1.16667
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_front_walk"]
}
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.666667, 0.75, 0.833333, 0.916667, 1, 1.08333, 1.16667),
"transitions": PackedFloat32Array(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]
}
[sub_resource type="Animation" id="Animation_fpvxl"]
resource_name = "idle_left"
length = 1.25001
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:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/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),
"transitions": PackedFloat32Array(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]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_left_walk"]
}
[sub_resource type="Animation" id="Animation_1870e"]
resource_name = "idle_left_walk"
length = 1.25001
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:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/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),
"transitions": PackedFloat32Array(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]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewportContainer/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_left_walk"]
}
[sub_resource type="Animation" id="Animation_ruc6s"]
resource_name = "attack"
length = 0.750008
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": [&"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, 0.583333, 0.666666, 0.75),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}
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.332842, 0.66857),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_6tj5r"]
_data = {
&"RESET": SubResource("Animation_ch8ic"),
&"idle_back": SubResource("Animation_d5bmw"),
&"idle_back_walk": SubResource("Animation_1tda5"),
&"idle_front": SubResource("Animation_53wuj"),
&"idle_front_walk": SubResource("Animation_31nry"),
&"idle_left": SubResource("Animation_fpvxl"),
&"idle_left_walk": SubResource("Animation_1870e"),
&"primary_attack": SubResource("Animation_ruc6s")
}
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_53wuj"]
animation = &"idle_back"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_o0tmb"]
animation = &"idle_back_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_d5bmw"]
animation = &"idle_front"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_a6s5c"]
animation = &"idle_front_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_fpvxl"]
animation = &"idle_left"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dvj10"]
animation = &"idle_left_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_erbrx"]
animation = &"primary_attack"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_3xv6a"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0h1op"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_361b7"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_wftla"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_gqqkl"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5cj36"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4t05h"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_8hgxu"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_fq2yw"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yqm0k"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_bmy1k"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mxl7w"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_qq0ru"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_c54uj"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_qmo72"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_jyt1n"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5un2v"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2x3nl"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_6a5nw"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0jqty"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yjcrh"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2ybyh"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_n454k"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vrcjv"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_h1yxw"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_kg6hd"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_25i3y"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5g722"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_a6y4x"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7y7m4"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ldcvv"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_aalmk"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2le5t"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4nmgu"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mw5r6"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_jbtxi"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mjxlk"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_al2xs"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_afa0q"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_irq32"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2khaq"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_k7x0x"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_noc6c"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_d5bmw"]
states/End/position = Vector2(1466, 104)
states/Start/position = Vector2(29, 290)
states/idle_back/node = SubResource("AnimationNodeAnimation_53wuj")
states/idle_back/position = Vector2(180.116, -34)
states/idle_back_walk/node = SubResource("AnimationNodeAnimation_o0tmb")
states/idle_back_walk/position = Vector2(1024, 12.9474)
states/idle_front/node = SubResource("AnimationNodeAnimation_d5bmw")
states/idle_front/position = Vector2(644, 532)
states/idle_front_walk/node = SubResource("AnimationNodeAnimation_a6s5c")
states/idle_front_walk/position = Vector2(644, -100)
states/idle_left/node = SubResource("AnimationNodeAnimation_fpvxl")
states/idle_left/position = Vector2(466.116, 119)
states/idle_left_walk/node = SubResource("AnimationNodeAnimation_dvj10")
states/idle_left_walk/position = Vector2(438, 242.947)
states/primary_attack/node = SubResource("AnimationNodeAnimation_erbrx")
states/primary_attack/position = Vector2(1760, 309)
transitions = ["idle_front_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_3xv6a"), "idle_left_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0h1op"), "idle_front_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_361b7"), "idle_back_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_wftla"), "idle_back_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_gqqkl"), "idle_left_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_5cj36"), "idle_front_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_4t05h"), "primary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8hgxu"), "primary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_fq2yw"), "primary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_yqm0k"), "idle_back_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_bmy1k"), "idle_left_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_mxl7w"), "Start", "idle_front", SubResource("AnimationNodeStateMachineTransition_qq0ru"), "idle_front", "idle_back", SubResource("AnimationNodeStateMachineTransition_c54uj"), "idle_back", "idle_left", SubResource("AnimationNodeStateMachineTransition_qmo72"), "idle_left", "idle_front", SubResource("AnimationNodeStateMachineTransition_jyt1n"), "idle_left", "idle_back", SubResource("AnimationNodeStateMachineTransition_5un2v"), "idle_back", "idle_front", SubResource("AnimationNodeStateMachineTransition_2x3nl"), "idle_front", "idle_left", SubResource("AnimationNodeStateMachineTransition_6a5nw"), "idle_back", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0jqty"), "idle_front", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_yjcrh"), "idle_back", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_2ybyh"), "idle_left", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_n454k"), "idle_back_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_vrcjv"), "idle_back_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_h1yxw"), "idle_back_walk", "idle_back", SubResource("AnimationNodeStateMachineTransition_kg6hd"), "idle_back", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_25i3y"), "idle_left", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_5g722"), "idle_front", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_a6y4x"), "idle_left_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_7y7m4"), "idle_left_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_ldcvv"), "idle_left_walk", "idle_back", SubResource("AnimationNodeStateMachineTransition_aalmk"), "idle_front_walk", "idle_back", SubResource("AnimationNodeStateMachineTransition_2le5t"), "idle_front_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_4nmgu"), "idle_front_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_mw5r6"), "idle_front", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_jbtxi"), "idle_left", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_mjxlk"), "idle_back", "primary_attack", SubResource("AnimationNodeStateMachineTransition_al2xs"), "primary_attack", "idle_back", SubResource("AnimationNodeStateMachineTransition_afa0q"), "idle_front", "primary_attack", SubResource("AnimationNodeStateMachineTransition_irq32"), "primary_attack", "idle_front", SubResource("AnimationNodeStateMachineTransition_2khaq"), "idle_left", "primary_attack", SubResource("AnimationNodeStateMachineTransition_k7x0x"), "primary_attack", "idle_left", SubResource("AnimationNodeStateMachineTransition_noc6c")]
graph_offset = Vector2(495.706, -34.8579)
[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(200, 200)
render_target_update_mode = 4
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
unique_name_in_owner = true
texture_filter = 1
position = Vector2(100, 100)
sprite_frames = SubResource("SpriteFrames_6drt6")
animation = &"idle_left_walk"
[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_6tj5r")
}
[node name="AnimationTree" type="AnimationTree" parent="."]
unique_name_in_owner = true
root_node = NodePath("%AnimationTree/..")
tree_root = SubResource("AnimationNodeStateMachine_d5bmw")
anim_player = NodePath("../AnimationPlayer")

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

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