Add curse element, increase throw speed/damage of Ciello

This commit is contained in:
2026-02-10 15:37:12 -08:00
parent 363ee1cd33
commit 2f377d2d7a
13 changed files with 193 additions and 176 deletions

View File

@@ -9,5 +9,6 @@ public enum ElementType
Igneous, Igneous,
Ferrum, Ferrum,
Holy, Holy,
Curse,
All All
} }

View File

@@ -7,9 +7,9 @@ namespace Zennysoft.Ma.Adapter.Entity
[Save("elemental_resist_set")] [Save("elemental_resist_set")]
public Dictionary<ElementType, double> ElementalResistance { get; } public Dictionary<ElementType, double> ElementalResistance { get; }
public static ElementalResistanceSet None => new ElementalResistanceSet(0, 0, 0, 0, 0, 0); public static ElementalResistanceSet None => new ElementalResistanceSet(0, 0, 0, 0, 0, 0, 0);
public ElementalResistanceSet(double aeolicResistance, double hydricResistance, double igneousResistance, double ferrumResistance, double telluricResistance, double holyResistance) public ElementalResistanceSet(double aeolicResistance, double hydricResistance, double igneousResistance, double ferrumResistance, double telluricResistance, double holyResistance, double curseResistance)
{ {
ElementalResistance = new Dictionary<ElementType, double> ElementalResistance = new Dictionary<ElementType, double>
{ {
@@ -20,7 +20,8 @@ namespace Zennysoft.Ma.Adapter.Entity
{ ElementType.Ferrum, ferrumResistance }, { ElementType.Ferrum, ferrumResistance },
{ ElementType.Telluric, telluricResistance }, { ElementType.Telluric, telluricResistance },
{ ElementType.Holy, holyResistance }, { ElementType.Holy, holyResistance },
{ ElementType.All, aeolicResistance + hydricResistance + igneousResistance + ferrumResistance + telluricResistance + holyResistance }, { ElementType.Curse, curseResistance },
{ ElementType.All, aeolicResistance + hydricResistance + igneousResistance + ferrumResistance + telluricResistance + holyResistance + curseResistance },
}; };
} }
@@ -32,7 +33,8 @@ namespace Zennysoft.Ma.Adapter.Entity
left.ElementalResistance[ElementType.Igneous] + right.ElementalResistance[ElementType.Igneous], left.ElementalResistance[ElementType.Igneous] + right.ElementalResistance[ElementType.Igneous],
left.ElementalResistance[ElementType.Ferrum] + right.ElementalResistance[ElementType.Ferrum], left.ElementalResistance[ElementType.Ferrum] + right.ElementalResistance[ElementType.Ferrum],
left.ElementalResistance[ElementType.Telluric] + right.ElementalResistance[ElementType.Telluric], left.ElementalResistance[ElementType.Telluric] + right.ElementalResistance[ElementType.Telluric],
left.ElementalResistance[ElementType.Holy] + right.ElementalResistance[ElementType.Holy]); left.ElementalResistance[ElementType.Holy] + right.ElementalResistance[ElementType.Holy],
left.ElementalResistance[ElementType.Curse] + right.ElementalResistance[ElementType.Curse]);
} }
} }
} }

View File

@@ -18,5 +18,5 @@ public abstract partial class EquipableItem : InventoryItem
[Save("bonus_luck_stats")] [Save("bonus_luck_stats")]
public virtual int BonusLuck { get; } public virtual int BonusLuck { get; }
[Save("bonus_elemental_resist_stats")] [Save("bonus_elemental_resist_stats")]
public virtual ElementalResistanceSet ElementalResistance { get; } = new ElementalResistanceSet(0, 0, 0, 0, 0, 0); public virtual ElementalResistanceSet ElementalResistance { get; } = new ElementalResistanceSet(0, 0, 0, 0, 0, 0, 0);
} }

View File

@@ -9,7 +9,7 @@ custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter=""
export_path="../Export/Ma.exe" export_path="Export/Ma.exe"
patches=PackedStringArray() patches=PackedStringArray()
encryption_include_filters="" encryption_include_filters=""
encryption_exclude_filters="" encryption_exclude_filters=""

View File

@@ -57,7 +57,9 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
[Export] public double HolyResistance { get; set; } [Export] public double HolyResistance { get; set; }
public ElementalResistanceSet ElementalResistanceSet => new ElementalResistanceSet(AeolicResistance, HydricResistance, IgenousResistance, FerrumResistance, TelluricResistance, HolyResistance); [Export] public double CurseResistance { get; set; }
public ElementalResistanceSet ElementalResistanceSet => new ElementalResistanceSet(AeolicResistance, HydricResistance, IgenousResistance, FerrumResistance, TelluricResistance, HolyResistance, CurseResistance);
[Node] private AudioStreamPlayer3D _absorbSFX { get; set; } = default!; [Node] private AudioStreamPlayer3D _absorbSFX { get; set; } = default!;
[Node] private AudioStreamPlayer3D _hitSFX { get; set; } = default!; [Node] private AudioStreamPlayer3D _hitSFX { get; set; } = default!;

View File

@@ -63,6 +63,10 @@ public abstract partial class InventoryItemStats : Resource
[Save("equipment_holy_resist")] [Save("equipment_holy_resist")]
public int HolyResistance { get; set; } = 0; public int HolyResistance { get; set; } = 0;
[Export]
[Save("equipment_curse_resist")]
public int CurseResistance { get; set; } = 0;
[Export(PropertyHint.Range, "0, 25, 0.1")] [Export(PropertyHint.Range, "0, 25, 0.1")]
[Save("equipment_throw_speed")] [Save("equipment_throw_speed")]
public float ThrowSpeed { get; set; } = 12.0f; public float ThrowSpeed { get; set; } = 12.0f;

View File

@@ -38,7 +38,7 @@ public partial class Accessory : EquipableItem
public override int BonusLuck { get => Stats.BonusLuck + _bonusLuck; } public override int BonusLuck { get => Stats.BonusLuck + _bonusLuck; }
public override ElementalResistanceSet ElementalResistance => new ElementalResistanceSet(Stats.AeolicResistance, Stats.HydricResistance, Stats.IgneousResistance, Stats.FerrumResistance, Stats.TelluricResistance, Stats.HolyResistance); public override ElementalResistanceSet ElementalResistance => new ElementalResistanceSet(Stats.AeolicResistance, Stats.HydricResistance, Stats.IgneousResistance, Stats.FerrumResistance, Stats.TelluricResistance, Stats.HolyResistance, Stats.CurseResistance);
[Save("accessory_tag")] [Save("accessory_tag")]
public AccessoryTag AccessoryTag => Stats.AccessoryTag; public AccessoryTag AccessoryTag => Stats.AccessoryTag;

View File

@@ -39,7 +39,7 @@ public partial class Armor : EquipableItem
[Save("armor_bonus_luck")] [Save("armor_bonus_luck")]
private int _bonusLuck { get; set; } = 0; private int _bonusLuck { get; set; } = 0;
public override ElementalResistanceSet ElementalResistance => new ElementalResistanceSet(Stats.AeolicResistance, Stats.HydricResistance, Stats.IgneousResistance, Stats.FerrumResistance, Stats.TelluricResistance, Stats.HolyResistance); public override ElementalResistanceSet ElementalResistance => new ElementalResistanceSet(Stats.AeolicResistance, Stats.HydricResistance, Stats.IgneousResistance, Stats.FerrumResistance, Stats.TelluricResistance, Stats.HolyResistance, Stats.CurseResistance);
public void IncreaseArmorDefense(int bonus) => _bonusDefense += bonus; public void IncreaseArmorDefense(int bonus) => _bonusDefense += bonus;

View File

@@ -33,5 +33,9 @@ public partial class ArmorStats : InventoryItemStats
[Save("armor_holy_resistance")] [Save("armor_holy_resistance")]
private double _holyResistance { get; set; } = 0; private double _holyResistance { get; set; } = 0;
public ElementalResistanceSet ElementalResistanceSet => new ElementalResistanceSet(_aeolicResistance, _hydricResistance, _igneousResistance, _ferrumResistance, _telluricResistance, _holyResistance); [Export]
[Save("armor_curse_resistance")]
private double _curseResistance { get; set; } = 0;
public ElementalResistanceSet ElementalResistanceSet => new ElementalResistanceSet(_aeolicResistance, _hydricResistance, _igneousResistance, _ferrumResistance, _telluricResistance, _holyResistance, _curseResistance);
} }

View File

@@ -44,7 +44,7 @@ public partial class Weapon : EquipableItem
[Save("weapon_element")] [Save("weapon_element")]
public ElementType WeaponElement => Stats.WeaponElement; public ElementType WeaponElement => Stats.WeaponElement;
public override ElementalResistanceSet ElementalResistance => new ElementalResistanceSet(Stats.AeolicResistance, Stats.HydricResistance, Stats.IgneousResistance, Stats.FerrumResistance, Stats.TelluricResistance, Stats.HolyResistance); public override ElementalResistanceSet ElementalResistance => new ElementalResistanceSet(Stats.AeolicResistance, Stats.HydricResistance, Stats.IgneousResistance, Stats.FerrumResistance, Stats.TelluricResistance, Stats.HolyResistance, Stats.CurseResistance);
public void IncreaseWeaponAttack(int bonus) => _bonusDamage += bonus; public void IncreaseWeaponAttack(int bonus) => _bonusDamage += bonus;

View File

@@ -6,15 +6,16 @@
[resource] [resource]
script = ExtResource("2_yrbai") script = ExtResource("2_yrbai")
AttackSpeed = 1.0 AttackSpeed = 1.0
WeaponElement = 0 WeaponElement = 7
WeaponTag = 0 WeaponTag = 0
SelfDamage = 0
SoundEffect = 22 SoundEffect = 22
Name = "Black Plume Sword" Name = "Black Plume Sword"
Description = "Curse Element" Description = "Deals curse damage."
SpawnRate = 0.1 SpawnRate = 0.1
BonusAttack = 8 BonusAttack = 8
BonusDefense = 0 BonusDefense = 0
BonusLuck = 0.05 BonusLuck = 5
BonusHP = 0 BonusHP = 0
BonusVT = 0 BonusVT = 0
AeolicResistance = 0 AeolicResistance = 0
@@ -23,6 +24,7 @@ HydricResistance = 0
IgneousResistance = 0 IgneousResistance = 0
FerrumResistance = 0 FerrumResistance = 0
HolyResistance = 0 HolyResistance = 0
CurseResistance = 0
ThrowSpeed = 12.0 ThrowSpeed = 12.0
ThrowDamage = 5 ThrowDamage = 5
ItemTag = 0 ItemTag = 0

View File

@@ -8,6 +8,7 @@ script = ExtResource("2_tps6s")
AttackSpeed = 1.0 AttackSpeed = 1.0
WeaponElement = 0 WeaponElement = 0
WeaponTag = 0 WeaponTag = 0
SelfDamage = 0
SoundEffect = 22 SoundEffect = 22
Name = "Ciello" Name = "Ciello"
Description = "Triple Strike. Description = "Triple Strike.
@@ -24,7 +25,8 @@ HydricResistance = 0
IgneousResistance = 0 IgneousResistance = 0
FerrumResistance = 0 FerrumResistance = 0
HolyResistance = 0 HolyResistance = 0
ThrowSpeed = 12.0 CurseResistance = 0
ThrowDamage = 5 ThrowSpeed = 20.0
ThrowDamage = 25
ItemTag = 0 ItemTag = 0
Texture = ExtResource("1_jiewn") Texture = ExtResource("1_jiewn")

View File

@@ -1017,6 +1017,46 @@ tracks/2/keys = {
"values": [true, false, true] "values": [true, false, true]
} }
[sub_resource type="Animation" id="Animation_ymsks"]
resource_name = "FireSlash"
length = 1.23334
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"Fire Slash"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.23333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 37]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("%Hitbox/HitboxCollision:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.233333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_cssau"] [sub_resource type="Animation" id="Animation_cssau"]
resource_name = "HitWall" resource_name = "HitWall"
length = 0.625002 length = 0.625002
@@ -1070,9 +1110,129 @@ tracks/3/keys = {
"values": [0, 5, 0] "values": [0, 5, 0]
} }
[sub_resource type="Animation" id="Animation_vc6qm"]
resource_name = "LoveJudgement"
length = 1.23334
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"Love Judgement"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.23333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 37]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("%Hitbox/HitboxCollision:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.233333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_lysy5"]
resource_name = "NormalSlash"
length = 1.23334
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"Normal Slash 1"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.23333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 37]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("%Hitbox/HitboxCollision:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.233333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_v3vjx"] [sub_resource type="Animation" id="Animation_v3vjx"]
resource_name = "Persuader" resource_name = "Persuader"
[sub_resource type="Animation" id="Animation_na483"]
resource_name = "PlasmaSword"
length = 1.23334
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"Plasma Sword"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.23333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 37]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("%Hitbox/HitboxCollision:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.233333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_flmxu"] [sub_resource type="Animation" id="Animation_flmxu"]
length = 0.001 length = 0.001
tracks/0/type = "value" tracks/0/type = "value"
@@ -1164,86 +1324,6 @@ tracks/2/keys = {
"values": [true, false, true] "values": [true, false, true]
} }
[sub_resource type="Animation" id="Animation_na483"]
resource_name = "PlasmaSword"
length = 1.23334
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"Plasma Sword"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.23333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 37]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("%Hitbox/HitboxCollision:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.233333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_vc6qm"]
resource_name = "LoveJudgement"
length = 1.23334
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"Love Judgement"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.23333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 37]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("%Hitbox/HitboxCollision:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.233333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_ejbn4"] [sub_resource type="Animation" id="Animation_ejbn4"]
resource_name = "Unarmed" resource_name = "Unarmed"
length = 1.23334 length = 1.23334
@@ -1284,86 +1364,6 @@ tracks/2/keys = {
"values": [true, false, true] "values": [true, false, true]
} }
[sub_resource type="Animation" id="Animation_lysy5"]
resource_name = "NormalSlash"
length = 1.23334
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"Normal Slash 1"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.23333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 37]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("%Hitbox/HitboxCollision:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.233333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_ymsks"]
resource_name = "FireSlash"
length = 1.23334
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"Fire Slash"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer/SubViewport/WeaponAttack:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.23333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 37]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("%Hitbox/HitboxCollision:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.233333),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_f0ff4"] [sub_resource type="Animation" id="Animation_f0ff4"]
resource_name = "WaterSlash" resource_name = "WaterSlash"
length = 1.23334 length = 1.23334