diff --git a/.gitignore b/.gitignore
index c301ca8..bb88804 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,37 +1,37 @@
-# Godot 4.x
-.godot/
-.idea/
-sdk/
-bin/
-obj/
-
-#ai
-.omo/
-.opencode/
-
-gen/
-obj/
-bin/
-
-*.tres~
-*.tscn~
-
-# GDScript LSP
-.godot/
-
-# Export
-*.exe
-*.dmg
-*.apk
-*.aab
-*.pck
-*.zip
-*.log
-
-# OS
-.DS_Store
-Thumbs.db
-
-# Editor
-*.import
-*.godot.uid
+# Godot 4.x
+.godot/
+.idea/
+sdk/
+bin/
+obj/
+
+#ai
+.omo/
+.opencode/
+
+gen/
+obj/
+bin/
+
+*.tres~
+*.tscn~
+
+# GDScript LSP
+.godot/
+
+# Export
+*.exe
+*.dmg
+*.apk
+*.aab
+*.pck
+*.zip
+*.log
+
+# OS
+.DS_Store
+Thumbs.db
+
+# Editor
+*.import
+*.godot.uid
diff --git a/src/RareType.cs b/src/RareType.cs
index d40f060..6dba333 100644
--- a/src/RareType.cs
+++ b/src/RareType.cs
@@ -1,21 +1,21 @@
-namespace Cthangover.Mods.Skills
-{
- ///
- /// Represents the rarity tier of a skill card, determining its drop probability,
- /// visual frame treatment, and relative power budget. Higher tiers correspond to
- /// more potent effects and rarer acquisition chances.
- ///
- public enum RareType
- {
- /// Standard skill with the highest drop rate and baseline power.
- Common,
- /// Slightly improved stats and a lower drop rate than Common.
- Uncommon,
- /// Notably stronger, appearing infrequently in loot pools.
- Rare,
- /// Powerful skill with significant gameplay impact; very low drop chance.
- Epic,
- /// The highest tier — game-changing abilities with extremely rare availability.
- Legendary
- }
-}
+namespace Cthangover.Mods.Skills
+{
+ ///
+ /// Represents the rarity tier of a skill card, determining its drop probability,
+ /// visual frame treatment, and relative power budget. Higher tiers correspond to
+ /// more potent effects and rarer acquisition chances.
+ ///
+ public enum RareType
+ {
+ /// Standard skill with the highest drop rate and baseline power.
+ Common,
+ /// Slightly improved stats and a lower drop rate than Common.
+ Uncommon,
+ /// Notably stronger, appearing infrequently in loot pools.
+ Rare,
+ /// Powerful skill with significant gameplay impact; very low drop chance.
+ Epic,
+ /// The highest tier — game-changing abilities with extremely rare availability.
+ Legendary
+ }
+}
diff --git a/src/SkillInfo.cs b/src/SkillInfo.cs
index a69f3ad..6cc2da7 100644
--- a/src/SkillInfo.cs
+++ b/src/SkillInfo.cs
@@ -1,112 +1,112 @@
-using System;
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-using Cthangover.Core.Factories;
-using Cthangover.Core.Utils;
-using Godot;
-
-namespace Cthangover.Mods.Skills
-{
-
- ///
- /// Immutable data model for a single skill definition, populated by
- /// from JSON assets. Each instance carries the
- /// metadata required to render a skill card in the UI (,
- /// , ) and to resolve its gameplay
- /// behaviour through and .
- /// Instances are shared across the runtime and should not be mutated after
- /// construction.
- ///
- [Serializable]
- [EntityKind("skill")]
- public class SkillInfo : IIdentifiable
- {
- ///
- /// The unique string key of this skill, used as the primary lookup in
- /// and as the identity token in
- /// .
- ///
- [JsonPropertyName("Id")]
- public string ID { get; set; }
-
- ///
- /// The display name shown on the skill card. This value is passed through
- /// before rendering, allowing
- /// localisation via Godot's translation system.
- ///
- public string Name { get; set; }
-
- ///
- /// A longer textual description explaining what the skill does in gameplay
- /// terms. Displayed in tooltip and detail views alongside the card artwork.
- ///
- public string Description { get; set; }
-
- ///
- /// The relative path to the skill's artwork texture, resolved inside the
- /// mod-group "characters/skills" by
- /// when the property is first accessed.
- ///
- public string Image { get; set; }
-
- ///
- /// Optional ID of the action card this skill gifts to the player when
- /// acquired (e.g. an active skill that hands over a battle card).
- /// Resolved against
- /// when the skills panel renders the detail view, and pushed into
- /// by
- /// so the card becomes assignable to a
- /// character. Empty for skills that only act as passive gates and
- /// never produce a card.
- ///
- public string GrantsAction { get; set; }
-
- ///
- /// Numeric bonuses this skill grants while owned. They are the card's
- /// actual payload: the skills panel shows the first effect on the grid
- /// card, lists all of them in the study plate, and sums every owned
- /// skill's effects into the global "collection effect" plate via
- /// . Empty for skills that only gate
- /// content (e.g. unlock an action) without touching stats.
- ///
- [JsonPropertyName("Effects")]
- public List Effects { get; set; }
-
- ///
- /// The gameplay classification of this skill (Active, Passive,
- /// or ForCharacter), serialised as a string in JSON and converted
- /// via .
- ///
- [JsonConverter(typeof(JsonStringEnumConverter))]
- [JsonPropertyName("Type")]
- public SkillType SkillType { get; set; }
-
- ///
- /// The rarity tier of this skill, serialised as a string in JSON and
- /// converted via . Drives the colour
- /// of the card frame, study plate and rarity badge through
- /// .
- ///
- [JsonConverter(typeof(JsonStringEnumConverter))]
- [JsonPropertyName("Rare")]
- public RareType RareType { get; set; }
-
- private Texture2D cacheSprite;
-
- ///
- /// Lazily loads and caches the for this skill's
- /// card artwork. On first access the texture is resolved from the mod-group
- /// "characters/skills" using the path; subsequent
- /// accesses return the cached reference.
- ///
- public Texture2D Sprite
- {
- get
- {
- if (cacheSprite == null)
- cacheSprite = TextureUtils.LoadFromModGroup("characters/skills", Image);
- return cacheSprite;
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+using Cthangover.Core.Factories;
+using Cthangover.Core.Utils;
+using Godot;
+
+namespace Cthangover.Mods.Skills
+{
+
+ ///
+ /// Immutable data model for a single skill definition, populated by
+ /// from JSON assets. Each instance carries the
+ /// metadata required to render a skill card in the UI (,
+ /// , ) and to resolve its gameplay
+ /// behaviour through and .
+ /// Instances are shared across the runtime and should not be mutated after
+ /// construction.
+ ///
+ [Serializable]
+ [EntityKind("skill")]
+ public class SkillInfo : IIdentifiable
+ {
+ ///
+ /// The unique string key of this skill, used as the primary lookup in
+ /// and as the identity token in
+ /// .
+ ///
+ [JsonPropertyName("Id")]
+ public string ID { get; set; }
+
+ ///
+ /// The display name shown on the skill card. This value is passed through
+ /// before rendering, allowing
+ /// localisation via Godot's translation system.
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// A longer textual description explaining what the skill does in gameplay
+ /// terms. Displayed in tooltip and detail views alongside the card artwork.
+ ///
+ public string Description { get; set; }
+
+ ///
+ /// The relative path to the skill's artwork texture, resolved inside the
+ /// mod-group "characters/skills" by
+ /// when the property is first accessed.
+ ///
+ public string Image { get; set; }
+
+ ///
+ /// Optional ID of the action card this skill gifts to the player when
+ /// acquired (e.g. an active skill that hands over a battle card).
+ /// Resolved against
+ /// when the skills panel renders the detail view, and pushed into
+ /// by
+ /// so the card becomes assignable to a
+ /// character. Empty for skills that only act as passive gates and
+ /// never produce a card.
+ ///
+ public string GrantsAction { get; set; }
+
+ ///
+ /// Numeric bonuses this skill grants while owned. They are the card's
+ /// actual payload: the skills panel shows the first effect on the grid
+ /// card, lists all of them in the study plate, and sums every owned
+ /// skill's effects into the global "collection effect" plate via
+ /// . Empty for skills that only gate
+ /// content (e.g. unlock an action) without touching stats.
+ ///
+ [JsonPropertyName("Effects")]
+ public List Effects { get; set; }
+
+ ///
+ /// The gameplay classification of this skill (Active, Passive,
+ /// or ForCharacter), serialised as a string in JSON and converted
+ /// via .
+ ///
+ [JsonConverter(typeof(JsonStringEnumConverter))]
+ [JsonPropertyName("Type")]
+ public SkillType SkillType { get; set; }
+
+ ///
+ /// The rarity tier of this skill, serialised as a string in JSON and
+ /// converted via . Drives the colour
+ /// of the card frame, study plate and rarity badge through
+ /// .
+ ///
+ [JsonConverter(typeof(JsonStringEnumConverter))]
+ [JsonPropertyName("Rare")]
+ public RareType RareType { get; set; }
+
+ private Texture2D cacheSprite;
+
+ ///
+ /// Lazily loads and caches the for this skill's
+ /// card artwork. On first access the texture is resolved from the mod-group
+ /// "characters/skills" using the path; subsequent
+ /// accesses return the cached reference.
+ ///
+ public Texture2D Sprite
+ {
+ get
+ {
+ if (cacheSprite == null)
+ cacheSprite = TextureUtils.LoadFromModGroup("characters/skills", Image);
+ return cacheSprite;
+ }
+ }
+ }
+}
diff --git a/src/SkillName.cs b/src/SkillName.cs
index ef74142..26909b1 100644
--- a/src/SkillName.cs
+++ b/src/SkillName.cs
@@ -1,38 +1,38 @@
-namespace Cthangover.Mods.Skills
-{
- ///
- /// Enumerates every skill available in the game by its canonical identifier.
- /// Each member corresponds to a JSON-definition entry loaded by
- /// and used to construct instances.
- /// The underlying int values are not manually assigned; the enum serves
- /// purely as a compile-time-safe skill reference.
- ///
- public enum SkillName : int
- {
- ///
- /// A domination-type skill that allows the player to command enslaved units,
- /// overriding enemy AI and redirecting attacks under the player's control.
- ///
- SLAVE_MASTER
- }
-
- ///
- /// Provides conversion helpers for values, used when
- /// bridging the enum-based API with string-based lookups in
- /// and factory registries.
- ///
- public static class SkillNameExtensions
- {
- ///
- /// Converts a enum value to its lowercase string
- /// identifier, matching the format expected by
- /// and serialization layers.
- ///
- /// The skill enum value to convert.
- /// The lowercase name of the enum constant (e.g. "slave_master").
- public static string ID(this SkillName skill)
- {
- return skill.ToString().ToLower();
- }
- }
-}
+namespace Cthangover.Mods.Skills
+{
+ ///
+ /// Enumerates every skill available in the game by its canonical identifier.
+ /// Each member corresponds to a JSON-definition entry loaded by
+ /// and used to construct instances.
+ /// The underlying int values are not manually assigned; the enum serves
+ /// purely as a compile-time-safe skill reference.
+ ///
+ public enum SkillName : int
+ {
+ ///
+ /// A domination-type skill that allows the player to command enslaved units,
+ /// overriding enemy AI and redirecting attacks under the player's control.
+ ///
+ SLAVE_MASTER
+ }
+
+ ///
+ /// Provides conversion helpers for values, used when
+ /// bridging the enum-based API with string-based lookups in
+ /// and factory registries.
+ ///
+ public static class SkillNameExtensions
+ {
+ ///
+ /// Converts a enum value to its lowercase string
+ /// identifier, matching the format expected by
+ /// and serialization layers.
+ ///
+ /// The skill enum value to convert.
+ /// The lowercase name of the enum constant (e.g. "slave_master").
+ public static string ID(this SkillName skill)
+ {
+ return skill.ToString().ToLower();
+ }
+ }
+}
diff --git a/src/SkillType.cs b/src/SkillType.cs
index ee1eaef..8fd8520 100644
--- a/src/SkillType.cs
+++ b/src/SkillType.cs
@@ -1,26 +1,26 @@
-namespace Cthangover.Mods.Skills
-{
- ///
- /// Classifies how a skill behaves during gameplay. This distinction drives
- /// which battle-phase the skill can be used in and how its effects are resolved
- /// by the combat engine.
- ///
- public enum SkillType
- {
- ///
- /// Must be intentionally triggered during the player's turn, consuming an action
- /// resource and targeting a specific ally or enemy.
- ///
- Active,
- ///
- /// Remains in effect continuously once acquired, providing a persistent buff
- /// or aura without requiring any player input.
- ///
- Passive,
- ///
- /// Applies directly to the owning character as a stat modifier or intrinsic trait,
- /// rather than being a card the player selects each turn.
- ///
- ForCharacter,
- }
-}
+namespace Cthangover.Mods.Skills
+{
+ ///
+ /// Classifies how a skill behaves during gameplay. This distinction drives
+ /// which battle-phase the skill can be used in and how its effects are resolved
+ /// by the combat engine.
+ ///
+ public enum SkillType
+ {
+ ///
+ /// Must be intentionally triggered during the player's turn, consuming an action
+ /// resource and targeting a specific ally or enemy.
+ ///
+ Active,
+ ///
+ /// Remains in effect continuously once acquired, providing a persistent buff
+ /// or aura without requiring any player input.
+ ///
+ Passive,
+ ///
+ /// Applies directly to the owning character as a stat modifier or intrinsic trait,
+ /// rather than being a card the player selects each turn.
+ ///
+ ForCharacter,
+ }
+}
diff --git a/src/SkillWidget.cs b/src/SkillWidget.cs
index f0b6b2d..58a96e5 100644
--- a/src/SkillWidget.cs
+++ b/src/SkillWidget.cs
@@ -1,38 +1,38 @@
-using System.Collections.Generic;
-using System.Linq;
-using Cthangover.Core.Factories.Impls;
-using Cthangover.Core.Settings;
-using Cthangover.Mods.Interface.Base.Lists.Impls;
-
-namespace Cthangover.Mods.Skills
-{
- ///
- /// UI widget that displays all skills currently owned by the player in a
- /// column-based card grid. Extends
- /// to reuse the generic
- /// list-rendering pipeline. When the widget is populated it reads the set
- /// of owned skill IDs from in the current
- /// runtime, resolves each ID to a
- /// via , and
- /// hands the resulting models to the list for rendering as
- /// items.
- ///
- public partial class SkillWidget : ColumnCellListWidget
- {
- ///
- /// Produces the collection of models that the
- /// list widget will render. Each ownedskill ID from
- /// is resolved through
- /// and collected into a
- /// .
- ///
- ///
- /// A snapshot of all currently owned skills, each as a fully-populated
- /// instance.
- ///
- public override ICollection CreateModels()
- {
- return GameData.Instance.Runtime.SkillData.Skills.Select(x => SkillFactory.Instance.Get(x)).ToList();
- }
- }
-}
+using System.Collections.Generic;
+using System.Linq;
+using Cthangover.Core.Factories.Impls;
+using Cthangover.Core.Settings;
+using Cthangover.Mods.Interface.Base.Lists.Impls;
+
+namespace Cthangover.Mods.Skills
+{
+ ///
+ /// UI widget that displays all skills currently owned by the player in a
+ /// column-based card grid. Extends
+ /// to reuse the generic
+ /// list-rendering pipeline. When the widget is populated it reads the set
+ /// of owned skill IDs from in the current
+ /// runtime, resolves each ID to a
+ /// via , and
+ /// hands the resulting models to the list for rendering as
+ /// items.
+ ///
+ public partial class SkillWidget : ColumnCellListWidget
+ {
+ ///
+ /// Produces the collection of models that the
+ /// list widget will render. Each ownedskill ID from
+ /// is resolved through
+ /// and collected into a
+ /// .
+ ///
+ ///
+ /// A snapshot of all currently owned skills, each as a fully-populated
+ /// instance.
+ ///
+ public override ICollection CreateModels()
+ {
+ return GameData.Instance.Runtime.SkillData.Skills.Select(x => SkillFactory.Instance.Get(x)).ToList();
+ }
+ }
+}