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
@@ -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);
@@ -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)
@@ -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]
+4 -3
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()
@@ -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);
}
@@ -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,
@@ -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)
{
}
}
@@ -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; }
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -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")
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -55,6 +55,11 @@ public partial class DemonWallArm : EnemyModelView
}
}
public override void PlayElementalDamageAnimation(ElementType elementType)
{
}
public void OnExitTree()
{
Hitbox.AreaEntered -= Hitbox_AreaEntered;
File diff suppressed because it is too large Load Diff
+1 -1
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);
+2 -2
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);
}
}
+1 -1
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()
@@ -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);
}
}
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
@@ -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]
+1 -1
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)
{
+3 -3
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());
@@ -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);
}
}