Add elemental VFX when hitting enemies (2D only currently)

This commit is contained in:
2026-04-23 01:04:02 -07:00
parent 65a78f9871
commit 89da483448
46 changed files with 46974 additions and 755 deletions

View File

@@ -9,13 +9,13 @@ public interface IHealthComponent : IEntityComponent
public IAutoProp<int> MaximumHP { get; }
public event Action? HealthReachedZero;
public event Action? DamageTaken;
public event Action<ElementType>? DamageTaken;
public bool AtFullHealth { get; }
public void Heal(int healAmount);
public void Damage(int damageAmount);
public void Damage(int damageAmount, ElementType elementType);
public void SetCurrentHealth(int health);

View File

@@ -16,7 +16,7 @@ public class HealthComponent : IHealthComponent
private readonly AutoProp<int> _maximumHP;
public event Action? HealthReachedZero;
public event Action? DamageTaken;
public event Action<ElementType>? DamageTaken;
public bool AtFullHealth => CurrentHP.Value == MaximumHP.Value;
@@ -44,7 +44,7 @@ public class HealthComponent : IHealthComponent
_currentHP.OnNext(cappedAmount);
}
public void Damage(int damageAmount)
public void Damage(int damageAmount, ElementType elementType)
{
if (CurrentHP.Value <= 0)
return;
@@ -55,7 +55,7 @@ public class HealthComponent : IHealthComponent
if (cappedAmount == 0)
HealthReachedZero?.Invoke();
else
DamageTaken?.Invoke();
DamageTaken?.Invoke(elementType);
}
public void SetCurrentHealth(int health)

View File

@@ -3,12 +3,12 @@
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://cgk17d8erskht"
path="res://.godot/imported/amb_ocean.ogg-01a11020be2db82b0e22d1423cb26aa3.oggvorbisstr"
path="res://.godot/imported/amb_ocean.ogg-f4ee3d30caf9194f7881a02c6507d38a.oggvorbisstr"
[deps]
source_file="res://src/audio/amb/amb_ocean.ogg"
dest_files=["res://.godot/imported/amb_ocean.ogg-01a11020be2db82b0e22d1423cb26aa3.oggvorbisstr"]
source_file="res://src/audio/AMB/amb_ocean.ogg"
dest_files=["res://.godot/imported/amb_ocean.ogg-f4ee3d30caf9194f7881a02c6507d38a.oggvorbisstr"]
[params]

View File

@@ -169,8 +169,9 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
}
public virtual void TakeHit()
public virtual void TakeHit(ElementType damageElementType)
{
EnemyModelView.PlayElementalDamageAnimation(damageElementType);
_enemyLogic.Input(new EnemyLogic.Input.Alert());
EnemyModelView.PlayHitAnimation();
_hitSFX.Play();
@@ -281,8 +282,8 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
private void _rustTimer_Timeout()
{
HealthComponent.Damage(3);
TakeHit();
HealthComponent.Damage(3, ElementType.Ferrum);
TakeHit(ElementType.Ferrum);
}
private void _rustDuration_Timeout()

View File

@@ -134,4 +134,6 @@ public abstract partial class EnemyModelView : Node3D, IEnemyModelView
AnimationTree.Get(_parametersPlayback).As<AnimationNodeStateMachinePlayback>().Stop();
AnimationTree.AnimationFinished -= AnimationTree_AnimationFinished;
}
public abstract void PlayElementalDamageAnimation(ElementType elementType);
}

View File

@@ -2,6 +2,7 @@ using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using System.Linq;
using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
@@ -17,6 +18,15 @@ public partial class EnemyModelView2D : EnemyModelView, IEnemyModelView
[Node] public AnimationPlayer AnimationPlayer { get; set; } = default!;
[Node] public AnimationPlayer FlameHitAnimation { get; set; } = default!;
[Node] public AnimationPlayer RustHitAnimation { get; set; } = default!;
[Node] public AnimationPlayer HolyHitAnimation { get; set; } = default!;
[Node] public AnimationPlayer WindHitAnimation { get; set; } = default!;
[Node] public AnimationPlayer WaterHitAnimation { get; set; } = default!;
[Node] public AnimationPlayer CurseHitAnimation { get; set; } = default!;
[Node] public AnimationPlayer EarthHitAnimation { get; set; } = default!;
[ExportGroup("Enemy Model Properties")]
[Export(PropertyHint.Range, "0.0, 1.0")]
private float _upperThreshold { get; set; } = 0.5f;
@@ -56,6 +66,47 @@ public partial class EnemyModelView2D : EnemyModelView, IEnemyModelView
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 0.1f, 0.8f);
}
public override void PlayElementalDamageAnimation(ElementType elementType)
{
if (elementType == ElementType.Igneous)
{
if (FlameHitAnimation.IsPlaying())
FlameHitAnimation.Stop();
FlameHitAnimation.Play("FireHit");
}
else if (elementType == ElementType.Holy)
{
if (HolyHitAnimation.IsPlaying())
HolyHitAnimation.Stop();
HolyHitAnimation.Play("HolyHit");
}
else if (elementType == ElementType.Aeolic)
{
if (WindHitAnimation.IsPlaying())
WindHitAnimation.Stop();
WindHitAnimation.Play("WindHit");
}
else if (elementType == ElementType.Curse)
{
if (CurseHitAnimation.IsPlaying())
CurseHitAnimation.Stop();
CurseHitAnimation.Play("CurseHit");
}
else if (elementType == ElementType.Hydric)
{
if (WaterHitAnimation.IsPlaying())
WaterHitAnimation.Stop();
WaterHitAnimation.Play("WaterHit");
}
else if (elementType == ElementType.Telluric)
{
if (EarthHitAnimation.IsPlaying())
EarthHitAnimation.Stop();
EarthHitAnimation.Play("EarthHit");
}
}
private EnemyDirection GetEnemyDirection(
Basis enemyBasis,
Vector3 cameraDirection,

View File

@@ -1,6 +1,7 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma;
@@ -59,4 +60,9 @@ public partial class EnemyModelView3D : EnemyModelView
{
MeshInstance.Transparency = transparencyAmount;
}
public override void PlayElementalDamageAnimation(ElementType elementType)
{
}
}

View File

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

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=621 format=3 uid="uid://g84hcmgo3gtl"]
[gd_scene load_steps=627 format=3 uid="uid://g84hcmgo3gtl"]
[ext_resource type="Script" uid="uid://cvr1qimxpignl" path="res://src/enemy/EnemyModelView2D.cs" id="1_oh25a"]
[ext_resource type="Texture2D" uid="uid://nps7rrvkgews" path="res://src/enemy/enemy_types/04. sara/animations/IDLE+MOVE/FRONT/0001.png" id="2_8j76g"]
@@ -1442,6 +1442,9 @@ region = Rect2(3072, 512, 512, 512)
animations = [{
"frames": [{
"duration": 1.0,
"texture": null
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_slhg2")
}, {
"duration": 1.0,
@@ -4507,13 +4510,69 @@ _data = {
&"RESET": SubResource("Animation_8wlnr")
}
[sub_resource type="Animation" id="Animation_6shfu"]
resource_name = "Fire Damage"
length = 1.33334
[sub_resource type="Animation" id="Animation_30xy4"]
resource_name = "CurseHit"
length = 1.56667
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/Flame Hit Effect:animation")
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Curse Hit Effect:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"default"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Curse Hit Effect:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.56667),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 47]
}
[sub_resource type="Animation" id="Animation_3pm1j"]
resource_name = "EarthHit"
length = 1.46667
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Earth Hit Effect:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"EARTH DAMAGE"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Earth Hit Effect:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.46667),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 44]
}
[sub_resource type="Animation" id="Animation_6shfu"]
resource_name = "Fire Damage"
length = 2.93334
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Flame Hit Effect:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
@@ -4525,7 +4584,7 @@ tracks/0/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/Flame Hit Effect:frame")
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Flame Hit Effect:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
@@ -4537,7 +4596,7 @@ tracks/1/keys = {
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/Flame Hit Effect:modulate")
tracks/2/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Flame Hit Effect:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
@@ -4546,13 +4605,65 @@ tracks/2/keys = {
"update": 0,
"values": [Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056), Color(1, 1, 1, 0.85), Color(1, 1, 1, 0.056)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Rust Activation Effect:animation")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"default"]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Rust Activation Effect:frame")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 2.93333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [88, 88]
}
[sub_resource type="Animation" id="Animation_f5cjs"]
resource_name = "HolyHit"
length = 0.700003
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Holy Hit Layer Effect:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"HOLY"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Holy Hit Layer Effect:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.7),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 21]
}
[sub_resource type="Animation" id="Animation_cftgd"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/Flame Hit Effect:modulate")
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Flame Hit Effect:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
@@ -4564,7 +4675,7 @@ tracks/0/keys = {
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/Flame Hit Effect:frame")
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Flame Hit Effect:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
@@ -4576,7 +4687,7 @@ tracks/1/keys = {
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/Flame Hit Effect:animation")
tracks/2/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Flame Hit Effect:animation")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
@@ -4585,11 +4696,295 @@ tracks/2/keys = {
"update": 1,
"values": [&"Flame Damage"]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Rust Activation Effect:animation")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"default"]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Rust Activation Effect:frame")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [88]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Holy Hit Layer Effect:animation")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"HOLY"]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Holy Hit Layer Effect:frame")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Wind Hit Layer Effect:animation")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"default"]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Wind Hit Layer Effect:frame")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [50]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Water Hit Layer 1 Effect:animation")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"WATER DAMAGE"]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Water Hit Layer 1 Effect:frame")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [29]
}
tracks/11/type = "value"
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Water Hit Layer 2Effect:animation")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"WATER"]
}
tracks/12/type = "value"
tracks/12/imported = false
tracks/12/enabled = true
tracks/12/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Water Hit Layer 2Effect:frame")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [51]
}
tracks/13/type = "value"
tracks/13/imported = false
tracks/13/enabled = true
tracks/13/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Curse Hit Effect:animation")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"default"]
}
tracks/14/type = "value"
tracks/14/imported = false
tracks/14/enabled = true
tracks/14/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Curse Hit Effect:frame")
tracks/14/interp = 1
tracks/14/loop_wrap = true
tracks/14/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [47]
}
tracks/15/type = "value"
tracks/15/imported = false
tracks/15/enabled = true
tracks/15/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Earth Hit Effect:animation")
tracks/15/interp = 1
tracks/15/loop_wrap = true
tracks/15/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"WATER DAMAGE"]
}
tracks/16/type = "value"
tracks/16/imported = false
tracks/16/enabled = true
tracks/16/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Earth Hit Effect:frame")
tracks/16/interp = 1
tracks/16/loop_wrap = true
tracks/16/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_0tqwp"]
resource_name = "RustActivate"
length = 1.46667
step = 0.0166667
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Rust Activation Effect:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"default"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Rust Activation Effect:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.46667),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 88]
}
[sub_resource type="Animation" id="Animation_q5dfb"]
resource_name = "WaterHit"
length = 1.7
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Water Hit Layer 1 Effect:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"WATER DAMAGE"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Water Hit Layer 1 Effect:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 29]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Water Hit Layer 2Effect:animation")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"WATER"]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Water Hit Layer 2Effect:frame")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 1.7),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 51]
}
[sub_resource type="Animation" id="Animation_godpv"]
resource_name = "WindHit"
length = 0.833335
step = 0.0166667
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Wind Hit Layer Effect:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"default"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Sprite3D/SubViewportContainer/SubViewport/VFXSprites/Wind Hit Layer Effect:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.833333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 50]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_0tqwp"]
_data = {
&"Fire Damage": SubResource("Animation_6shfu"),
&"RESET": SubResource("Animation_cftgd")
&"CurseHit": SubResource("Animation_30xy4"),
&"EarthHit": SubResource("Animation_3pm1j"),
&"FireHit": SubResource("Animation_6shfu"),
&"HolyHit": SubResource("Animation_f5cjs"),
&"RESET": SubResource("Animation_cftgd"),
&"RustActivate": SubResource("Animation_0tqwp"),
&"WaterHit": SubResource("Animation_q5dfb"),
&"WindHit": SubResource("Animation_godpv")
}
[node name="EnemyModelView" type="Node3D"]
@@ -4625,66 +5020,59 @@ position = Vector2(400, 400)
sprite_frames = SubResource("SpriteFrames_sobol")
animation = &"idle_front"
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
[node name="VFXSprites" type="Node2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
[node name="Rust Activation Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
position = Vector2(400, 400)
scale = Vector2(1.54, 1.54)
sprite_frames = SubResource("SpriteFrames_s0t7i")
frame = 88
frame_progress = 1.0
[node name="Holy Hit Layer Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
[node name="Holy Hit Layer Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
position = Vector2(400, 400)
scale = Vector2(0.675, 0.675)
sprite_frames = SubResource("SpriteFrames_jy23v")
animation = &"HOLY"
frame = 20
frame_progress = 1.0
[node name="Wind Hit Layer Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
[node name="Wind Hit Layer Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
position = Vector2(400, 400)
scale = Vector2(1.445, 1.445)
sprite_frames = SubResource("SpriteFrames_olmld")
frame = 50
frame_progress = 1.0
[node name="Flame Hit Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
[node name="Flame Hit Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
position = Vector2(400, 400)
scale = Vector2(3.445, 3.445)
sprite_frames = SubResource("SpriteFrames_a23f0")
animation = &"Flame Damage"
frame = 40
[node name="Water Hit Layer 1 Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
[node name="Water Hit Layer 1 Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
position = Vector2(400, 400)
scale = Vector2(2.215, 2.215)
sprite_frames = SubResource("SpriteFrames_bsjfy")
animation = &"WATER DAMAGE"
frame = 29
frame_progress = 1.0
[node name="Water Hit Layer 2Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
[node name="Water Hit Layer 2Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
position = Vector2(400, 400)
scale = Vector2(1.105, 0.895)
sprite_frames = SubResource("SpriteFrames_cht2c")
animation = &"WATER"
frame = 51
frame_progress = 1.0
[node name="Curse Hit Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
[node name="Curse Hit Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
texture_filter = 1
position = Vector2(400, 400)
scale = Vector2(2.78, 2.78)
sprite_frames = SubResource("SpriteFrames_v3crq")
frame = 47
frame_progress = 1.0
[node name="Earth Hit Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
[node name="Earth Hit Effect" type="AnimatedSprite2D" parent="Sprite3D/SubViewportContainer/SubViewport/VFXSprites"]
position = Vector2(400, 400)
scale = Vector2(2.005, 2.005)
sprite_frames = SubResource("SpriteFrames_bsjfy")
animation = &"WATER DAMAGE"
frame = 29
frame_progress = 1.0
[node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true
@@ -4731,8 +5119,53 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.72758, 0)
autoplay = true
bus = &"SFX"
[node name="Flame Animation Player" type="AnimationPlayer" parent="."]
root_node = NodePath("../Secondary Animation Player")
[node name="VFXAnimations" type="Node" parent="."]
[node name="FlameHitAnimation" type="AnimationPlayer" parent="VFXAnimations"]
unique_name_in_owner = true
root_node = NodePath("../../Secondary Animation Player")
libraries = {
&"": SubResource("AnimationLibrary_0tqwp")
}
[node name="RustHitAnimation" type="AnimationPlayer" parent="VFXAnimations"]
unique_name_in_owner = true
root_node = NodePath("../../Secondary Animation Player")
libraries = {
&"": SubResource("AnimationLibrary_0tqwp")
}
[node name="HolyHitAnimation" type="AnimationPlayer" parent="VFXAnimations"]
unique_name_in_owner = true
root_node = NodePath("../../Secondary Animation Player")
libraries = {
&"": SubResource("AnimationLibrary_0tqwp")
}
[node name="WindHitAnimation" type="AnimationPlayer" parent="VFXAnimations"]
unique_name_in_owner = true
root_node = NodePath("../../Secondary Animation Player")
libraries = {
&"": SubResource("AnimationLibrary_0tqwp")
}
[node name="WaterHitAnimation" type="AnimationPlayer" parent="VFXAnimations"]
unique_name_in_owner = true
root_node = NodePath("../../Secondary Animation Player")
libraries = {
&"": SubResource("AnimationLibrary_0tqwp")
}
[node name="CurseHitAnimation" type="AnimationPlayer" parent="VFXAnimations"]
unique_name_in_owner = true
root_node = NodePath("../../Secondary Animation Player")
libraries = {
&"": SubResource("AnimationLibrary_0tqwp")
}
[node name="EarthHitAnimation" type="AnimationPlayer" parent="VFXAnimations"]
unique_name_in_owner = true
root_node = NodePath("../../Secondary Animation Player")
libraries = {
&"": SubResource("AnimationLibrary_0tqwp")
}

View File

@@ -55,6 +55,11 @@ public partial class DemonWallArm : EnemyModelView
}
}
public override void PlayElementalDamageAnimation(ElementType elementType)
{
}
public void OnExitTree()
{
Hitbox.AreaEntered -= Hitbox_AreaEntered;

View File

@@ -879,7 +879,7 @@ public partial class Game : Node3D, IGame
private void RustTimeout()
{
_player.HealthComponent.Damage(3);
_player.HealthComponent.Damage(3, ElementType.Ferrum);
}
private void RustWoreOff() => _player.StatusEffectComponent.Rust.OnNext(false);

View File

@@ -100,7 +100,7 @@ public class EffectService
foreach (var enemy in currentEnemies)
{
var absorbAmount = enemy.HealthComponent.CurrentHP.Value * 0.25;
enemy.HealthComponent.Damage((int)absorbAmount);
enemy.HealthComponent.Damage((int)absorbAmount, ElementType.None);
hpToAbsorb += absorbAmount;
enemy.OnAbsorb();
}
@@ -118,7 +118,7 @@ public class EffectService
foreach (var enemy in currentEnemies)
{
var damageDealt = DamageCalculator.CalculateDamage(new AttackData(20, elementType), 10, enemy.ElementalResistanceSet);
enemy.HealthComponent.Damage(damageDealt);
enemy.HealthComponent.Damage(damageDealt, elementType);
}
}

View File

@@ -38,7 +38,7 @@ public partial class SetItem : RigidBody3D
if (area.GetOwner() is ExplodableWall wall)
wall.Demolish();
if (area.GetOwner() is IEnemy enemy)
enemy.HealthComponent.Damage(10);
enemy.HealthComponent.Damage(10, ElementType.Igneous);
}
public async void Set()

View File

@@ -148,14 +148,14 @@ public partial class ThrownItem : RigidBody3D, IThrownItem
break;
default:
var damageDealt = DamageCalculator.CalculateDamage(new AttackData(usableItem.ThrowDamage, ElementType.None), enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
enemy.HealthComponent.Damage(damageDealt);
enemy.HealthComponent.Damage(damageDealt, ElementType.None);
break;
}
}
else
{
var damageDealt = DamageCalculator.CalculateDamage(new AttackData(ItemThatIsThrown.ThrowDamage, ElementType.None), enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
enemy.HealthComponent.Damage(damageDealt);
enemy.HealthComponent.Damage(damageDealt, ElementType.None);
}
}

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bl4xempufmgr5"
path.bptc="res://.godot/imported/PALM OF HEAVEN.PNG-35554a412a9c4bc09647efa86e6b581e.bptc.ctex"
path.bptc="res://.godot/imported/palm of heaven.png-8afcb54f797720ff29f3c00c68c0f579.bptc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
@@ -11,8 +11,8 @@ metadata={
[deps]
source_file="res://src/items/weapons/textures/PALM OF HEAVEN.PNG"
dest_files=["res://.godot/imported/PALM OF HEAVEN.PNG-35554a412a9c4bc09647efa86e6b581e.bptc.ctex"]
source_file="res://src/items/weapons/textures/palm of heaven.png"
dest_files=["res://.godot/imported/palm of heaven.png-8afcb54f797720ff29f3c00c68c0f579.bptc.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cp0er3xxxjkr5"
path="res://.godot/imported/a2-puer_AREA_2_MAIN_222STONE.png-139f243ac630853348798dfe584da1e0.ctex"
path="res://.godot/imported/A2-Puer_AREA_2_MAIN_222STONE.png-992459ef9849c39922a9b9e0c7774a4a.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_AREA_2_MAIN_222STONE.png"
dest_files=["res://.godot/imported/a2-puer_AREA_2_MAIN_222STONE.png-139f243ac630853348798dfe584da1e0.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_AREA_2_MAIN_222STONE.png"
dest_files=["res://.godot/imported/A2-Puer_AREA_2_MAIN_222STONE.png-992459ef9849c39922a9b9e0c7774a4a.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://5r16swvuqjjg"
path="res://.godot/imported/a2-puer_AREA_2_MAIN_STONE.png-986249227e569ea1e40b4825b7f05c47.ctex"
path="res://.godot/imported/A2-Puer_AREA_2_MAIN_STONE.png-2267bd7e464cdc2e03c8954de01941bf.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_AREA_2_MAIN_STONE.png"
dest_files=["res://.godot/imported/a2-puer_AREA_2_MAIN_STONE.png-986249227e569ea1e40b4825b7f05c47.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_AREA_2_MAIN_STONE.png"
dest_files=["res://.godot/imported/A2-Puer_AREA_2_MAIN_STONE.png-2267bd7e464cdc2e03c8954de01941bf.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cvnpxln2mmtkp"
path="res://.godot/imported/a2-puer_COLUMN_WHITE.png-0b80d510851319464b2ef729d8868892.ctex"
path="res://.godot/imported/A2-Puer_COLUMN_WHITE.png-18037c22b966bb159d05cb7acac1bc53.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_COLUMN_WHITE.png"
dest_files=["res://.godot/imported/a2-puer_COLUMN_WHITE.png-0b80d510851319464b2ef729d8868892.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_COLUMN_WHITE.png"
dest_files=["res://.godot/imported/A2-Puer_COLUMN_WHITE.png-18037c22b966bb159d05cb7acac1bc53.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://tjtjbktl51kd"
path="res://.godot/imported/a2-puer_GREENBIT.png-e1ed395f917a2fe57ed6288185af0729.ctex"
path="res://.godot/imported/A2-Puer_GREENBIT.png-40a9ca6a0efc569a5f329f19b3c3e572.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_GREENBIT.png"
dest_files=["res://.godot/imported/a2-puer_GREENBIT.png-e1ed395f917a2fe57ed6288185af0729.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_GREENBIT.png"
dest_files=["res://.godot/imported/A2-Puer_GREENBIT.png-40a9ca6a0efc569a5f329f19b3c3e572.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dqfdyguq83bhs"
path="res://.godot/imported/a2-puer_M13_14.png-ed8b29b0af1c2b973bfaee62e57cab14.ctex"
path="res://.godot/imported/A2-Puer_M13_14.png-e781478f15895763a566a64ff37db311.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_M13_14.png"
dest_files=["res://.godot/imported/a2-puer_M13_14.png-ed8b29b0af1c2b973bfaee62e57cab14.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_M13_14.png"
dest_files=["res://.godot/imported/A2-Puer_M13_14.png-e781478f15895763a566a64ff37db311.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dorqwrqy03rim"
path="res://.godot/imported/a2-puer_M13_49.png-86429b5a3cd80a9159f32ded99a631bc.ctex"
path="res://.godot/imported/A2-Puer_M13_49.png-44faadb5ae300e9ecea145cfe1949536.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_M13_49.png"
dest_files=["res://.godot/imported/a2-puer_M13_49.png-86429b5a3cd80a9159f32ded99a631bc.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_M13_49.png"
dest_files=["res://.godot/imported/A2-Puer_M13_49.png-44faadb5ae300e9ecea145cfe1949536.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://nl3bwenfa8fi"
path="res://.godot/imported/a2-puer_RUBBLE_1.png-c7185e2aad2613007d1951f1515ef882.ctex"
path="res://.godot/imported/A2-Puer_RUBBLE_1.png-72d7ff861d1df58d800502546da8d607.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_RUBBLE_1.png"
dest_files=["res://.godot/imported/a2-puer_RUBBLE_1.png-c7185e2aad2613007d1951f1515ef882.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_RUBBLE_1.png"
dest_files=["res://.godot/imported/A2-Puer_RUBBLE_1.png-72d7ff861d1df58d800502546da8d607.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://0p6suo7fpxum"
path="res://.godot/imported/a2-puer_STUCCO_DECAL_BIG.png-882b477f490f6ddbf5bffb3a6f8904e1.ctex"
path="res://.godot/imported/A2-Puer_STUCCO_DECAL_BIG.png-015d9f8dd06372231a1f422979d3604e.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_STUCCO_DECAL_BIG.png"
dest_files=["res://.godot/imported/a2-puer_STUCCO_DECAL_BIG.png-882b477f490f6ddbf5bffb3a6f8904e1.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_STUCCO_DECAL_BIG.png"
dest_files=["res://.godot/imported/A2-Puer_STUCCO_DECAL_BIG.png-015d9f8dd06372231a1f422979d3604e.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ct3mkni0v0y3g"
path="res://.godot/imported/a2-puer_Tile 4.png-9d089a32db3fc38a0c5dee6cdb6d3495.ctex"
path="res://.godot/imported/A2-Puer_Tile 4.png-0cfd085ec5fcea35eb2d1373e4717f77.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_Tile 4.png"
dest_files=["res://.godot/imported/a2-puer_Tile 4.png-9d089a32db3fc38a0c5dee6cdb6d3495.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_Tile 4.png"
dest_files=["res://.godot/imported/A2-Puer_Tile 4.png-0cfd085ec5fcea35eb2d1373e4717f77.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b40fbcriycpp5"
path="res://.godot/imported/a2-puer_imag2esnormal.jpg-d6e063b2785344af34fa3bb45d47aa2f.ctex"
path="res://.godot/imported/A2-Puer_imag2esnormal.jpg-be023c8af9ff59eedfb3ede232c75195.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_imag2esnormal.jpg"
dest_files=["res://.godot/imported/a2-puer_imag2esnormal.jpg-d6e063b2785344af34fa3bb45d47aa2f.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_imag2esnormal.jpg"
dest_files=["res://.godot/imported/A2-Puer_imag2esnormal.jpg-be023c8af9ff59eedfb3ede232c75195.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b25r6gysyhu3e"
path="res://.godot/imported/a2-puer_inner_rock2.png-943622742770f7b55d1e40645d07d057.ctex"
path="res://.godot/imported/A2-Puer_inner_rock2.png-7c99975de214e5dddd3507f87212b910.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_inner_rock2.png"
dest_files=["res://.godot/imported/a2-puer_inner_rock2.png-943622742770f7b55d1e40645d07d057.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_inner_rock2.png"
dest_files=["res://.godot/imported/A2-Puer_inner_rock2.png-7c99975de214e5dddd3507f87212b910.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cw4hq3kofjowa"
path="res://.godot/imported/a2-puer_lime_hand_relief.png-85b73e808337e8b8841453cbda0e78cd.ctex"
path="res://.godot/imported/A2-Puer_lime_hand_relief.png-825857ea33249fe0361c829ba37bbfdb.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_lime_hand_relief.png"
dest_files=["res://.godot/imported/a2-puer_lime_hand_relief.png-85b73e808337e8b8841453cbda0e78cd.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_lime_hand_relief.png"
dest_files=["res://.godot/imported/A2-Puer_lime_hand_relief.png-825857ea33249fe0361c829ba37bbfdb.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bqrsde28o867s"
path="res://.godot/imported/a2-puer_mother_GREEN.png-7bb7d8dd57027953ba1e08ed0c256c8b.ctex"
path="res://.godot/imported/A2-Puer_mother_GREEN.png-ba1f3d21981ed19fc5cc87868e04808c.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_mother_GREEN.png"
dest_files=["res://.godot/imported/a2-puer_mother_GREEN.png-7bb7d8dd57027953ba1e08ed0c256c8b.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_mother_GREEN.png"
dest_files=["res://.godot/imported/A2-Puer_mother_GREEN.png-ba1f3d21981ed19fc5cc87868e04808c.ctex"]
[params]

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://4aq3a26dliyg"
path="res://.godot/imported/a2-puer_swirled_column _AREA222.png-6f90c188eae5b7e81110f39984d5d43f.ctex"
path="res://.godot/imported/A2-Puer_swirled_column _AREA222.png-4842b180cffdbc0274ecb9cbbbbc8221.ctex"
metadata={
"vram_texture": false
}
@@ -13,8 +13,8 @@ generator_parameters={
[deps]
source_file="res://src/map/dungeon/models/Area 2/Puer/a2-puer_swirled_column _AREA222.png"
dest_files=["res://.godot/imported/a2-puer_swirled_column _AREA222.png-6f90c188eae5b7e81110f39984d5d43f.ctex"]
source_file="res://src/map/dungeon/models/Area 2/Puer/A2-Puer_swirled_column _AREA222.png"
dest_files=["res://.godot/imported/A2-Puer_swirled_column _AREA222.png-4842b180cffdbc0274ecb9cbbbbc8221.ctex"]
[params]

View File

@@ -53,7 +53,7 @@ public partial class Npc : Node3D
_isInDialogueZone = true;
}
public override void _UnhandledInput(InputEvent @event)
public override void _Input(InputEvent @event)
{
if (@event.IsActionPressed(GameInputs.Interact) && _isInDialogueZone)
{

View File

@@ -269,7 +269,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
_camera3D.AddShake(1.0f);
TakeDamageAnimationPlayer.Play("take_damage");
var damageReceived = DamageCalculator.CalculateDamage(damage, TotalDefense, EquipmentComponent.ElementalResistance);
HealthComponent.Damage(damageReceived);
HealthComponent.Damage(damageReceived, damage.ElementType);
SfxDatabase.Instance.Play(SoundEffect.TakeDamage);
if (EquipmentComponent.EquippedArmor.Value.ArmorTag == ArmorTag.DegradeOnHit)
@@ -851,7 +851,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
VTComponent.Reduce(1);
}
else
HealthComponent.Damage(1);
HealthComponent.Damage(1, ElementType.None);
}
private void Hitbox_AreaEntered(Area3D area)
@@ -875,7 +875,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
var baseAttack = new AttackData(totalDamage, weapon.WeaponElement, weapon.WeaponTag == WeaponTag.IgnoreDefense, weapon.WeaponTag == WeaponTag.IgnoreAffinity);
var damageDealt = DamageCalculator.CalculateDamage(baseAttack, enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
enemy.HealthComponent.Damage(damageDealt);
enemy.HealthComponent.Damage(damageDealt, weapon.WeaponElement);
if (weapon.WeaponTag == WeaponTag.Knockback && enemy is IKnockbackable knockbackable)
knockbackable.Knockback(0.3f, -CurrentBasis.Z.Normalized());

View File

@@ -36,7 +36,7 @@ public partial class PlayerProjectile : RigidBody3D
{
var projectileDamage = new AttackData(AttackData.Damage, AttackData.ElementType, false, false);
var damageDealt = DamageCalculator.CalculateDamage(projectileDamage, enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
enemy.HealthComponent.Damage(damageDealt);
enemy.HealthComponent.Damage(damageDealt, AttackData.ElementType);
CallDeferred(MethodName.QueueFree);
}
}