Add buff/debuff/heal/rust shaders for enemies and throwing glue jar immobilization

This commit is contained in:
2026-06-06 13:54:47 -07:00
parent 7b4fe37dd5
commit 543a967fd5
19 changed files with 358 additions and 114 deletions
@@ -116,35 +116,40 @@ public partial class ThrownItem : RigidBody3D, IThrownItem
{
case UsableItemTag.LowerTargetTo1HP:
enemy.HealthComponent.SetCurrentHealth(1);
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
enemy.OnDebuff();
break;
case UsableItemTag.DecreaseAllStats:
enemy.AttackComponent.Reduce(usableItem.Stats.BonusAttack);
enemy.DefenseComponent.Reduce(usableItem.Stats.BonusDefense);
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
enemy.OnDebuff();
break;
case UsableItemTag.DecreaseAttack:
enemy.AttackComponent.LowerMaximumAttack(usableItem.Stats.BonusAttack);
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
enemy.OnDebuff();
break;
case UsableItemTag.DecreaseDefense:
enemy.DefenseComponent.LowerMaximumDefense(usableItem.Stats.BonusDefense);
SfxDatabase.Instance.Play(SoundEffect.DecreaseStat);
enemy.OnDebuff();
break;
case UsableItemTag.IncreaseAttack:
enemy.AttackComponent.RaiseMaximumAttack(usableItem.Stats.BonusAttack);
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
enemy.OnBuff();
break;
case UsableItemTag.IncreaseDefense:
enemy.DefenseComponent.RaiseMaximumDefense(usableItem.Stats.BonusDefense);
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
enemy.OnBuff();
break;
case UsableItemTag.TeleportToRandomLocation:
_effectService.TeleportToRandomRoom(enemy);
SfxDatabase.Instance.Play(SoundEffect.TeleportToRandomRoom);
break;
case UsableItemTag.GlueAllEquipment:
_effectService.DisableEnemyMovement(enemy);
enemy.OnDebuff();
break;
case UsableItemTag.Clone:
_effectService.CloneEnemy(enemy);
enemy.OnBuff();
break;
default:
var damageDealt = DamageCalculator.CalculateDamage(new AttackData(usableItem.ThrowDamage, ElementType.None), enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
@@ -152,6 +157,20 @@ public partial class ThrownItem : RigidBody3D, IThrownItem
break;
}
}
else if (ItemThatIsThrown is BoxItem boxItem)
{
switch (boxItem.Stats.ItemTag)
{
case ItemTag.RestrictUnequip:
_effectService.DisableEnemyMovement(enemy);
enemy.OnDebuff();
break;
default:
var damageDealt = DamageCalculator.CalculateDamage(new AttackData(boxItem.ThrowDamage, ElementType.None), enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
enemy.HealthComponent.Damage(damageDealt, ElementType.None);
break;
}
}
else
{
var damageDealt = DamageCalculator.CalculateDamage(new AttackData(ItemThatIsThrown.ThrowDamage, ElementType.None), enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);