Test masks and finish implementing armor

This commit is contained in:
2026-02-17 00:50:19 -08:00
parent 0ec0ff2e23
commit 02e6ee2f70
28 changed files with 175 additions and 18 deletions

View File

@@ -4,5 +4,6 @@ public enum AccessoryTag
{
None,
HalfVTConsumption,
StatusEffectImmunity
StatusEffectImmunity,
BoostEXPGainRate
}

View File

@@ -0,0 +1,7 @@
namespace Zennysoft.Ma.Adapter;
public enum ArmorTag
{
None,
DegradeOnHit
}

View File

@@ -5,4 +5,6 @@ public interface IArmor : IEquipableItem, IAugmentableItem
public void IncreaseArmorDefense(int bonus);
public void DecreaseArmorDefense(int lowerAmount);
public ArmorTag ArmorTag { get; }
}

View File

@@ -11,7 +11,7 @@ Description = "Raises Luck"
SpawnRate = 0.1
BonusAttack = 0
BonusDefense = 0
BonusLuck = 0.3
BonusLuck = 15
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -11,7 +11,7 @@ Description = "Raises ATK."
SpawnRate = 0.1
BonusAttack = 3
BonusDefense = 0
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -11,7 +11,7 @@ Description = "Raises MAX HP, MAX VT, ATK, DEF"
SpawnRate = 0.1
BonusAttack = 2
BonusDefense = 2
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 25
BonusVT = 25
AeolicResistance = 0

View File

@@ -11,7 +11,7 @@ Description = "Raises DEF."
SpawnRate = 0.1
BonusAttack = 0
BonusDefense = 3
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="AccessoryStats" load_steps=3 format=3 uid="uid://crxh6vr26s6g1"]
[ext_resource type="Texture2D" uid="uid://cy7qvpjahblv3" path="res://src/items/accessory/textures/Mask of Zeal.png" id="1_b0dvh"]
[ext_resource type="Script" uid="uid://b8arlmivk68b" path="res://src/items/accessory/AccessoryStats.cs" id="2_dw5c8"]
[resource]
script = ExtResource("2_dw5c8")
AccessoryTag = 0
Name = "Mask of the Goddess of Malice"
Description = "Raises Attack, Defense, and Luck."
SpawnRate = 0.1
BonusAttack = 3
BonusDefense = 3
BonusLuck = 15
BonusHP = 0
BonusVT = 0
AeolicResistance = 0
TelluricResistance = 0
HydricResistance = 0
IgneousResistance = 0
FerrumResistance = 0
HolyResistance = 0
CurseResistance = 0
ThrowSpeed = 12.0
ThrowDamage = 5
ItemTag = 0
Texture = ExtResource("1_b0dvh")

View File

@@ -11,7 +11,7 @@ Description = "Status Effect Immunity"
SpawnRate = 0.1
BonusAttack = 0
BonusDefense = 0
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -11,7 +11,7 @@ Description = "Halves VT Depletion Rate"
SpawnRate = 0.1
BonusAttack = 0
BonusDefense = 0
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -11,7 +11,7 @@ Description = "Raises MAX VT"
SpawnRate = 0.1
BonusAttack = 0
BonusDefense = 0
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 50
AeolicResistance = 0

View File

@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="AccessoryStats" load_steps=3 format=3 uid="uid://b81h3vxtmvq8y"]
[ext_resource type="Texture2D" uid="uid://m0f8xmp8l2fe" path="res://src/items/accessory/textures/mask placeholder.png" id="1_iu13c"]
[ext_resource type="Script" uid="uid://b8arlmivk68b" path="res://src/items/accessory/AccessoryStats.cs" id="2_73i6n"]
[resource]
script = ExtResource("2_73i6n")
AccessoryTag = 3
Name = "Mask of the Goddess of Wisdom"
Description = "Increases EXP gained."
SpawnRate = 0.1
BonusAttack = 0
BonusDefense = 0
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0
TelluricResistance = 0
HydricResistance = 0
IgneousResistance = 0
FerrumResistance = 0
HolyResistance = 0
CurseResistance = 0
ThrowSpeed = 12.0
ThrowDamage = 5
ItemTag = 0
Texture = ExtResource("1_iu13c")

View File

@@ -7,7 +7,7 @@
script = ExtResource("1_0u4rq")
AccessoryTag = 0
Name = "Mask of the Goddess of Zeal"
Description = "Raises MAX HP"
Description = "Raises MAX HP."
SpawnRate = 0.1
BonusAttack = 0
BonusDefense = 0

View File

@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="AccessoryStats" load_steps=3 format=3 uid="uid://c77yinw37htrx"]
[ext_resource type="Texture2D" uid="uid://m0f8xmp8l2fe" path="res://src/items/accessory/textures/mask placeholder.png" id="1_ri4uv"]
[ext_resource type="Script" uid="uid://b8arlmivk68b" path="res://src/items/accessory/AccessoryStats.cs" id="2_fpys5"]
[resource]
script = ExtResource("2_fpys5")
AccessoryTag = 0
Name = "Stone Prison"
Description = "Cannot be unequipped."
SpawnRate = 0.1
BonusAttack = 0
BonusDefense = 0
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0
TelluricResistance = 0
HydricResistance = 0
IgneousResistance = 0
FerrumResistance = 0
HolyResistance = 0
CurseResistance = 0
ThrowSpeed = 12.0
ThrowDamage = 5
ItemTag = 19
Texture = ExtResource("1_ri4uv")

View File

@@ -88,5 +88,7 @@ public partial class Armor : Node3D, IArmor
public bool Glued { get; set; }
public ArmorTag ArmorTag => Stats.ArmorTag;
public Texture2D GetTexture() => Stats.Texture;
}

View File

@@ -1,6 +1,7 @@
using Chickensoft.Introspection;
using Chickensoft.Serialization;
using Godot;
using Zennysoft.Ma.Adapter;
using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Game.Ma;
@@ -37,5 +38,9 @@ public partial class ArmorStats : InventoryItemStats
[Save("armor_curse_resistance")]
private double _curseResistance { get; set; } = 0;
[Export]
[Save("armor_tag")]
public ArmorTag ArmorTag { get; set; } = ArmorTag.None;
public ElementalResistanceSet ElementalResistanceSet => new ElementalResistanceSet(_aeolicResistance, _hydricResistance, _igneousResistance, _ferrumResistance, _telluricResistance, _holyResistance, _curseResistance);
}

View File

@@ -12,12 +12,13 @@ _igneousResistance = 0.0
_ferrumResistance = 0.0
_holyResistance = 0.0
_curseResistance = 0.0
ArmorTag = 0
Name = "Atoner's Adornments"
Description = ""
SpawnRate = 0.25
BonusAttack = 0
BonusDefense = 0
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -12,12 +12,13 @@ _igneousResistance = 0.0
_ferrumResistance = 0.0
_holyResistance = 0.0
_curseResistance = 0.0
ArmorTag = 0
Name = "Ceremonial Vestments"
Description = "+1 DEF"
SpawnRate = 0.2
BonusAttack = 0
BonusDefense = 1
BonusLuck = 5
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -12,12 +12,13 @@ _igneousResistance = 0.0
_ferrumResistance = 0.0
_holyResistance = 0.0
_curseResistance = 0.0
ArmorTag = 0
Name = "Commitment"
Description = "Armor cannot pass beyond current floor once equipped."
SpawnRate = 0.25
BonusAttack = 0
BonusDefense = 8
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -12,12 +12,13 @@ _igneousResistance = 0.0
_ferrumResistance = 0.0
_holyResistance = 0.0
_curseResistance = 0.0
ArmorTag = 0
Name = "Devic Layers"
Description = "+7 DEF"
SpawnRate = 0.05
BonusAttack = 0
BonusDefense = 7
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -12,12 +12,13 @@ _igneousResistance = 0.0
_ferrumResistance = 0.0
_holyResistance = 0.0
_curseResistance = 0.0
ArmorTag = 0
Name = "Goddess' Robe"
Description = "+8 DEF"
SpawnRate = 0.03
BonusAttack = 0
BonusDefense = 8
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -0,0 +1,34 @@
[gd_resource type="Resource" script_class="ArmorStats" load_steps=3 format=3 uid="uid://dfyv783nh5wyj"]
[ext_resource type="Texture2D" uid="uid://bhhxd7cphx0q2" path="res://src/items/armor/textures/Atoner's Adornments.png" id="1_yq22p"]
[ext_resource type="Script" uid="uid://dqtp6ewvttoyu" path="res://src/items/armor/ArmorStats.cs" id="2_0uq6f"]
[resource]
script = ExtResource("2_0uq6f")
_telluricResistance = 0.0
_aeolicResistance = 0.0
_hydricResistance = 0.0
_igneousResistance = 0.0
_ferrumResistance = 0.0
_holyResistance = 0.0
_curseResistance = 0.0
ArmorTag = 1
Name = "Holy Barrier"
Description = "Defense decreases on hit."
SpawnRate = 0.05
BonusAttack = 0
BonusDefense = 20
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0
TelluricResistance = 0
HydricResistance = 0
IgneousResistance = 0
FerrumResistance = 0
HolyResistance = 0
CurseResistance = 0
ThrowSpeed = 12.0
ThrowDamage = 5
ItemTag = 0
Texture = ExtResource("1_yq22p")

View File

@@ -16,7 +16,7 @@ Name = "Rusted Plate"
Description = ""
SpawnRate = 0.5
BonusAttack = 0
BonusDefense = 4
BonusDefense = 3
BonusLuck = 0
BonusHP = 0
BonusVT = 0

View File

@@ -12,12 +12,13 @@ _igneousResistance = 0.0
_ferrumResistance = 0.0
_holyResistance = 0.0
_curseResistance = 0.0
ArmorTag = 0
Name = "Stoic"
Description = "+6 DEF"
SpawnRate = 0.05
BonusAttack = 0
BonusDefense = 6
BonusLuck = 0.05
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -12,12 +12,13 @@ _igneousResistance = 0.0
_ferrumResistance = 0.0
_holyResistance = 0.0
_curseResistance = 0.0
ArmorTag = 0
Name = "Wooden Armament"
Description = "+3 DEF"
SpawnRate = 0.3
BonusAttack = 0
BonusDefense = 3
BonusLuck = 5
BonusLuck = 0
BonusHP = 0
BonusVT = 0
AeolicResistance = 0

View File

@@ -248,6 +248,12 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
var damageReceived = DamageCalculator.CalculateDamage(damage, TotalDefense, EquipmentComponent.ElementalResistance);
HealthComponent.Damage(damageReceived);
SfxDatabase.Instance.Play(SoundEffect.TakeDamage);
if (EquipmentComponent.EquippedArmor.Value.ArmorTag == ArmorTag.DegradeOnHit)
{
EquipmentComponent.EquippedArmor.Value.DecreaseArmorDefense(1);
EquipmentComponent.UpdateEquipment(EquipmentComponent.EquippedArmor.Value);
}
}
public void Knockback(float impulse)
@@ -337,6 +343,12 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
if (weapon.WeaponTag == WeaponTag.InverseHPAttackPower)
InverseHPToAttackPowerSync(HealthComponent.CurrentHP.Value);
}
if (equipable is Accessory accessory)
{
if (accessory.AccessoryTag == AccessoryTag.BoostEXPGainRate)
ExperiencePointsComponent.ModifyExpGainRate(ExperiencePointsComponent.ExpGainRate.Value + 0.2f);
}
}
public void Unequip(IEquipableItem equipable)
@@ -352,6 +364,11 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
if (equipable is Weapon weapon && weapon.WeaponTag == WeaponTag.KineticProjectile)
PersuaderCrosshair.Hide();
if (equipable is Accessory accessory)
{
if (accessory.AccessoryTag == AccessoryTag.BoostEXPGainRate)
ExperiencePointsComponent.ModifyExpGainRate(ExperiencePointsComponent.ExpGainRate.Value - 0.2f);
}
}
public void ApplyNewAugment(IAugmentItem jewel, IAugmentableItem augmentableItem)

View File

@@ -10637,6 +10637,7 @@ animations = [{
collision_layer = 802
collision_mask = 775
script = ExtResource("1_xcol5")
HealthTimerIsActive = true
[node name="MainCollision" type="CollisionShape3D" parent="."]
unique_name_in_owner = true