diff --git a/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml b/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml
index 6f2dfc8ad6..74ccf7bd28 100644
--- a/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml
+++ b/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml
@@ -8,7 +8,7 @@
StyleClasses="OpenRight"
Margin="0 0 -1 0">
-
+
diff --git a/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml.cs b/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml.cs
index 2a8fd97983..52fbbad8ce 100644
--- a/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml.cs
+++ b/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml.cs
@@ -10,13 +10,14 @@ public sealed partial class CP14SkillTreeButtonControl : Control
{
public event Action? OnPressed;
- public CP14SkillTreeButtonControl(Color color, string label, float skillpoints)
+ public CP14SkillTreeButtonControl(Color color, string label, float skillpoints, Texture? icon)
{
RobustXamlLoader.Load(this);
ColorPanel.PanelOverride = new StyleBoxFlat { BackgroundColor = color };
if (skillpoints > 0)
{
+ SkillPointImage.Texture = icon;
SkillPointImage.Visible = true;
SkillTreeLabel.Text = $"{skillpoints} {label}";
}
diff --git a/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs b/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs
index 27c0992964..4ab0706c4e 100644
--- a/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs
+++ b/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs
@@ -155,27 +155,36 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered(_targetPlayer, out var storage))
return;
+ if (!_proto.TryIndex(_selectedSkillTree.SkillType, out var indexedSkillType))
+ return;
+
+ var skillPointsMap = storage.SkillPoints;
+
+ if (skillPointsMap.TryGetValue(_selectedSkillTree.SkillType, out var skillContainer))
+ _window.LevelLabel.Text =
+ $"{Loc.GetString(indexedSkillType.Name)}: {skillContainer.Sum}/{skillContainer.Max}";
+ else
+ _window.LevelLabel.Text = $"{Loc.GetString(indexedSkillType.Name)}: 0/0";
+
+ _window.LevelTexture.Texture = indexedSkillType.Icon?.Frame0();
+
HashSet nodeTreeElements = new();
HashSet<(string, string)> nodeTreeEdges = new();
@@ -303,14 +325,15 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered
{
diff --git a/Content.Client/_CP14/UserInterface/Systems/Skill/Window/CP14SkillWindow.xaml b/Content.Client/_CP14/UserInterface/Systems/Skill/Window/CP14SkillWindow.xaml
index 795030eeb7..8d2a448861 100644
--- a/Content.Client/_CP14/UserInterface/Systems/Skill/Window/CP14SkillWindow.xaml
+++ b/Content.Client/_CP14/UserInterface/Systems/Skill/Window/CP14SkillWindow.xaml
@@ -37,8 +37,8 @@
-
-
+
+
@@ -78,9 +78,8 @@
-
-
+
diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellAddMemoryPoint.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellAddMemoryPoint.cs
index 590a699fd0..6be3d10e94 100644
--- a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellAddMemoryPoint.cs
+++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellAddMemoryPoint.cs
@@ -1,4 +1,6 @@
using Content.Shared._CP14.Skill;
+using Content.Shared._CP14.Skill.Prototypes;
+using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.MagicSpell.Spells;
@@ -10,6 +12,9 @@ public sealed partial class CP14SpellAddMemoryPoint : CP14SpellEffect
[DataField]
public float Limit = 6.5f;
+ [DataField]
+ public ProtoId SkillPointType = "Memory";
+
public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args)
{
if (args.Target is null)
@@ -17,6 +22,6 @@ public sealed partial class CP14SpellAddMemoryPoint : CP14SpellEffect
var skillSys = entManager.System();
- skillSys.AddMemoryPoints(args.Target.Value, AddedPoints, Limit);
+ skillSys.AddSkillPoints(args.Target.Value, SkillPointType, AddedPoints, Limit);
}
}
diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellRemoveMemoryPoint.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellRemoveMemoryPoint.cs
index 393628d7d4..36e8feed3a 100644
--- a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellRemoveMemoryPoint.cs
+++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellRemoveMemoryPoint.cs
@@ -1,4 +1,6 @@
using Content.Shared._CP14.Skill;
+using Content.Shared._CP14.Skill.Prototypes;
+using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.MagicSpell.Spells;
@@ -7,6 +9,9 @@ public sealed partial class CP14SpellRemoveMemoryPoint : CP14SpellEffect
[DataField]
public float RemovedPoints = 0.5f;
+ [DataField]
+ public ProtoId SkillPointType = "Memory";
+
public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args)
{
if (args.Target is null)
@@ -14,6 +19,6 @@ public sealed partial class CP14SpellRemoveMemoryPoint : CP14SpellEffect
var skillSys = entManager.System();
- skillSys.RemoveMemoryPoints(args.Target.Value, RemovedPoints);
+ skillSys.RemoveMemoryPoints(args.Target.Value, SkillPointType, RemovedPoints);
}
}
diff --git a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs
index 04f3046b33..1515e13525 100644
--- a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs
+++ b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs
@@ -11,7 +11,7 @@ namespace Content.Shared._CP14.Skill;
public abstract partial class CP14SharedSkillSystem : EntitySystem
{
- private EntityQuery _skillStorageQuery = default!;
+ private EntityQuery _skillStorageQuery;
public override void Initialize()
{
@@ -64,6 +64,9 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!_proto.TryIndex(skill, out var indexedSkill))
return false;
+ if (!_proto.TryIndex(indexedSkill.Tree, out var indexedTree))
+ return false;
+
foreach (var effect in indexedSkill.Effects)
{
effect.AddSkill(EntityManager, target);
@@ -72,7 +75,12 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (free)
component.FreeLearnedSkills.Add(skill);
else
- component.SkillsSumExperience += indexedSkill.LearnCost;
+ {
+ if (component.SkillPoints.TryGetValue(indexedTree.SkillType, out var skillContainer))
+ {
+ skillContainer.Sum += indexedSkill.LearnCost;
+ }
+ }
component.LearnedSkills.Add(skill);
Dirty(target, component);
@@ -99,13 +107,21 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!_proto.TryIndex(skill, out var indexedSkill))
return false;
+ if (!_proto.TryIndex(indexedSkill.Tree, out var indexedTree))
+ return false;
+
foreach (var effect in indexedSkill.Effects)
{
effect.RemoveSkill(EntityManager, target);
}
if (!component.FreeLearnedSkills.Remove(skill))
- component.SkillsSumExperience -= indexedSkill.LearnCost;
+ {
+ if (component.SkillPoints.TryGetValue(indexedTree.SkillType, out var skillContainer))
+ {
+ skillContainer.Sum -= indexedSkill.LearnCost;
+ }
+ }
Dirty(target, component);
return true;
@@ -157,20 +173,7 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!Resolve(target, ref component, false))
return false;
- if (!AllowedToLearn(target, skill, component))
- return false;
-
- return true;
- }
-
- ///
- /// Is it allowed to learn this skill? The player may not have enough points to learn it, but has already met all the requirements to learn it.
- ///
- public bool AllowedToLearn(EntityUid target,
- CP14SkillPrototype skill,
- CP14SkillStorageComponent? component = null)
- {
- if (!Resolve(target, ref component, false))
+ if (!_proto.TryIndex(skill.Tree, out var indexedTree))
return false;
//Already learned
@@ -181,8 +184,11 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!component.AvailableSkillTrees.Contains(skill.Tree))
return false;
- //Check max cap
- if (component.SkillsSumExperience + skill.LearnCost > component.ExperienceMaxCap)
+ //Check skill points
+ if (!component.SkillPoints.TryGetValue(indexedTree.SkillType, out var skillContainer))
+ return false;
+
+ if (skillContainer.Sum + skill.LearnCost > skillContainer.Max)
return false;
//Restrictions check
@@ -294,26 +300,35 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
{
return false;
}
- for(var i = component.LearnedSkills.Count - 1; i >= 0; i--)
+
+ for (var i = component.LearnedSkills.Count - 1; i >= 0; i--)
{
- if(HaveFreeSkill(target, component.LearnedSkills[i], component))
+ if (HaveFreeSkill(target, component.LearnedSkills[i], component))
{
continue;
}
+
TryRemoveSkill(target, component.LearnedSkills[i], component);
}
+
return true;
}
///
/// Increases the number of memory points for a character, limited to a certain amount.
///
- public void AddMemoryPoints(EntityUid target, FixedPoint2 points, FixedPoint2 limit, CP14SkillStorageComponent? component = null)
+ public void AddSkillPoints(EntityUid target,
+ ProtoId type,
+ FixedPoint2 points,
+ FixedPoint2 limit,
+ CP14SkillStorageComponent? component = null)
{
if (!Resolve(target, ref component, false))
return;
- component.ExperienceMaxCap = FixedPoint2.Min(component.ExperienceMaxCap + points, limit);
+ if (component.SkillPoints.TryGetValue(type, out var skillContainer))
+ skillContainer.Max = FixedPoint2.Min(skillContainer.Max + points, limit);
+
Dirty(target, component);
_popup.PopupEntity(Loc.GetString("cp14-skill-popup-added-points", ("count", points)), target, target);
@@ -322,17 +337,23 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
///
/// Removes memory points. If a character has accumulated skills exceeding the new memory limit, random skills will be removed.
///
- public void RemoveMemoryPoints(EntityUid target, FixedPoint2 points, CP14SkillStorageComponent? component = null)
+ public void RemoveMemoryPoints(EntityUid target,
+ ProtoId type,
+ FixedPoint2 points,
+ CP14SkillStorageComponent? component = null)
{
if (!Resolve(target, ref component, false))
return;
- component.ExperienceMaxCap = FixedPoint2.Max(component.ExperienceMaxCap - points, 0);
+ if (!component.SkillPoints.TryGetValue(type, out var skillContainer))
+ return;
+
+ skillContainer.Max = FixedPoint2.Max(skillContainer.Max - points, 0);
Dirty(target, component);
_popup.PopupEntity(Loc.GetString("cp14-skill-popup-removed-points", ("count", points)), target, target);
- while (component.SkillsSumExperience > component.ExperienceMaxCap)
+ while (skillContainer.Sum > skillContainer.Max)
{
var frontier = GetFrontierSkills(target, component);
if (frontier.Count == 0)
diff --git a/Content.Shared/_CP14/Skill/CP14SkillSystem.Scanning.cs b/Content.Shared/_CP14/Skill/CP14SkillSystem.Scanning.cs
index 7191253a95..4d957bee35 100644
--- a/Content.Shared/_CP14/Skill/CP14SkillSystem.Scanning.cs
+++ b/Content.Shared/_CP14/Skill/CP14SkillSystem.Scanning.cs
@@ -57,7 +57,7 @@ public abstract partial class CP14SharedSkillSystem
sb.Append($"• [color={indexedTree.Color.ToHex()}]{skillName}[/color]\n");
}
- sb.Append($"\n{Loc.GetString("cp14-skill-menu-level")} {ent.Comp.SkillsSumExperience}/{ent.Comp.ExperienceMaxCap}\n");
+ //sb.Append($"\n{Loc.GetString("cp14-skill-menu-level")} {ent.Comp.SkillsSumExperience}/{ent.Comp.ExperienceMaxCap}\n");
msg.AddMarkupOrThrow(sb.ToString());
return msg;
}
diff --git a/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs b/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs
index 3b12fea1f6..b182e92e23 100644
--- a/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs
+++ b/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs
@@ -29,23 +29,24 @@ public sealed partial class CP14SkillStorageComponent : Component
[DataField, AutoNetworkedField]
public List> LearnedSkills = new();
- ///
- /// skills that the player has learned on the research table, but has not yet learned in the skill tree.
- ///
[DataField, AutoNetworkedField]
- public List> ResearchedSkills = new();
+ public Dictionary, CP14SkillPointContainerEntry> SkillPoints = new();
+}
+
+[DataDefinition, Serializable, NetSerializable]
+public sealed partial class CP14SkillPointContainerEntry
+{
+ ///
+ /// The number of experience points spent on skills.
+ ///
+ [DataField]
+ public FixedPoint2 Sum = 0;
///
- /// The number of experience points spent on skills. Technically this could be calculated via LearnedSkills, but this is a cached value for optimization.
+ /// The maximum of experience points that can be spent on learning skills.
///
- [DataField, AutoNetworkedField]
- public FixedPoint2 SkillsSumExperience = 0;
-
- ///
- /// The maximum ceiling of experience points that can be spent on learning skills. Not tied to a category.
- ///
- [DataField, AutoNetworkedField]
- public FixedPoint2 ExperienceMaxCap = 5;
+ [DataField]
+ public FixedPoint2 Max = 0;
}
///
diff --git a/Content.Shared/_CP14/Skill/Prototypes/CP14SkillPointPrototype.cs b/Content.Shared/_CP14/Skill/Prototypes/CP14SkillPointPrototype.cs
new file mode 100644
index 0000000000..144adba497
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/Prototypes/CP14SkillPointPrototype.cs
@@ -0,0 +1,19 @@
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+
+namespace Content.Shared._CP14.Skill.Prototypes;
+
+///
+/// A group of skills combined into one “branch”
+///
+[Prototype("cp14SkillPoint")]
+public sealed partial class CP14SkillPointPrototype : IPrototype
+{
+ [IdDataField] public string ID { get; } = default!;
+
+ [DataField(required: true)]
+ public LocId Name;
+
+ [DataField]
+ public SpriteSpecifier? Icon;
+}
diff --git a/Content.Shared/_CP14/Skill/Prototypes/CP14SkillTreePrototype.cs b/Content.Shared/_CP14/Skill/Prototypes/CP14SkillTreePrototype.cs
index 6057dc0e67..a872060b95 100644
--- a/Content.Shared/_CP14/Skill/Prototypes/CP14SkillTreePrototype.cs
+++ b/Content.Shared/_CP14/Skill/Prototypes/CP14SkillTreePrototype.cs
@@ -15,6 +15,9 @@ public sealed partial class CP14SkillTreePrototype : IPrototype
[DataField(required: true)]
public LocId Name;
+ [DataField(required: true)]
+ public ProtoId SkillType;
+
[DataField]
public SpriteSpecifier? FrameIcon;
diff --git a/Content.Shared/_CP14/Skill/Restrictions/Researched.cs b/Content.Shared/_CP14/Skill/Restrictions/Researched.cs
deleted file mode 100644
index db1ee222bc..0000000000
--- a/Content.Shared/_CP14/Skill/Restrictions/Researched.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using Content.Shared._CP14.Skill.Components;
-using Content.Shared._CP14.Skill.Prototypes;
-using Content.Shared._CP14.Workbench;
-using Robust.Shared.Prototypes;
-
-namespace Content.Shared._CP14.Skill.Restrictions;
-
-public sealed partial class Researched : CP14SkillRestriction
-{
- [DataField(required: true)]
- public List Requirements = new();
-
- public override bool Check(IEntityManager entManager, EntityUid target, CP14SkillPrototype skill)
- {
- if (!entManager.TryGetComponent(target, out var skillStorage))
- return false;
-
- var learned = skillStorage.ResearchedSkills;
- return learned.Contains(skill);
- }
-
- public override string GetDescription(IEntityManager entManager, IPrototypeManager protoManager)
- {
- return Loc.GetString("cp14-skill-req-researched");
- }
-}
diff --git a/Resources/Locale/en-US/_CP14/skill/skill_points.ftl b/Resources/Locale/en-US/_CP14/skill/skill_points.ftl
new file mode 100644
index 0000000000..0e24e6f8fd
--- /dev/null
+++ b/Resources/Locale/en-US/_CP14/skill/skill_points.ftl
@@ -0,0 +1,2 @@
+cp14-skill-point-memory = Memory
+cp14-skill-point-vampire-blood = Vampiric powers
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_CP14/skill/ui.ftl b/Resources/Locale/en-US/_CP14/skill/ui.ftl
index 0202c95cd8..1c7b32cc3b 100644
--- a/Resources/Locale/en-US/_CP14/skill/ui.ftl
+++ b/Resources/Locale/en-US/_CP14/skill/ui.ftl
@@ -5,13 +5,8 @@ cp14-skill-info-title = Skills
cp14-game-hud-open-skill-menu-button-tooltip = Skill tree
cp14-skill-menu-learn-button = Learn skill
-cp14-skill-menu-learncost = [color=yellow]Memory required:[/color]
-cp14-skill-menu-level = Memory:
-cp14-skill-menu-free = [color=green]This skill is innate to your character, and wastes no memory points![/color]
-
-cp14-research-table-title = Research table
-cp14-research-recipe-list = Research costs:
-cp14-research-craft = Research
+cp14-skill-menu-learncost = [color=yellow]{$type} required:[/color]
+cp14-skill-menu-free = [color=green]This skill is innate to your character, and wastes no skill points![/color]
cp14-skill-desc-add-mana = Increases your character's mana amount by {$mana}.
cp14-skill-desc-add-stamina = Increases your character's stamina amount by {$stamina}.
diff --git a/Resources/Locale/ru-RU/_CP14/skill/skill_points.ftl b/Resources/Locale/ru-RU/_CP14/skill/skill_points.ftl
new file mode 100644
index 0000000000..13cf949146
--- /dev/null
+++ b/Resources/Locale/ru-RU/_CP14/skill/skill_points.ftl
@@ -0,0 +1,2 @@
+cp14-skill-point-memory = Память
+cp14-skill-point-vampire-blood = Вампирские силы
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_CP14/skill/ui.ftl b/Resources/Locale/ru-RU/_CP14/skill/ui.ftl
index 46fb57227d..54decbf093 100644
--- a/Resources/Locale/ru-RU/_CP14/skill/ui.ftl
+++ b/Resources/Locale/ru-RU/_CP14/skill/ui.ftl
@@ -5,13 +5,8 @@ cp14-skill-info-title = Навыки
cp14-game-hud-open-skill-menu-button-tooltip = Деревья навыков
cp14-skill-menu-learn-button = Изучить навык
-cp14-skill-menu-learncost = [color=yellow]Требуется памяти:[/color]
-cp14-skill-menu-level = Память:
-cp14-skill-menu-free = [color=green]Этот навык врожденный для вашего персонажа, и не тратит очков памяти![/color]
-
-cp14-research-table-title = Стол исследований
-cp14-research-recipe-list = Затраты на исследование:
-cp14-research-craft = Исследовать
+cp14-skill-menu-learncost = [color=yellow]Требуется {$type}:[/color]
+cp14-skill-menu-free = [color=green]Этот навык врожденный для вашего персонажа, и не тратит очков навыков![/color]
cp14-skill-desc-add-mana = Увеличивает объем маны вашего персонажа на {$mana}.
cp14-skill-desc-add-stamina = Увеличивает выносливость вашего персонажа на {$stamina}.
diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Player/DemiplaneAntag/Skeletons/T1.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Player/DemiplaneAntag/Skeletons/T1.yml
index 577a28c475..fc4bac541e 100644
--- a/Resources/Prototypes/_CP14/Entities/Mobs/Player/DemiplaneAntag/Skeletons/T1.yml
+++ b/Resources/Prototypes/_CP14/Entities/Mobs/Player/DemiplaneAntag/Skeletons/T1.yml
@@ -9,7 +9,9 @@
factions:
- CP14Monster
- type: CP14SkillStorage
- experienceMaxCap: 0
+ skillPoints:
+ Memory:
+ max: 0
freeLearnedSkills:
- SwordMastery
- RapierMastery
diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Player/DemiplaneAntag/Skeletons/T2.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Player/DemiplaneAntag/Skeletons/T2.yml
index 767633cd42..ac85843d87 100644
--- a/Resources/Prototypes/_CP14/Entities/Mobs/Player/DemiplaneAntag/Skeletons/T2.yml
+++ b/Resources/Prototypes/_CP14/Entities/Mobs/Player/DemiplaneAntag/Skeletons/T2.yml
@@ -89,7 +89,9 @@
types:
CP14ManaDepletion: -0.1
- type: CP14SkillStorage
- experienceMaxCap: 0
+ skillPoints:
+ Memory:
+ max: 0
freeLearnedSkills:
- SwordMastery
- RapierMastery
diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Player/TownRaids/undead.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Player/TownRaids/undead.yml
index 88f3346ec7..6efc0aed0f 100644
--- a/Resources/Prototypes/_CP14/Entities/Mobs/Player/TownRaids/undead.yml
+++ b/Resources/Prototypes/_CP14/Entities/Mobs/Player/TownRaids/undead.yml
@@ -51,7 +51,9 @@
- FootstepSound
- CP14RaidLeader
- type: CP14SkillStorage
- experienceMaxCap: 0
+ skillPoints:
+ Memory:
+ max: 0
freeLearnedSkills:
- SwordMastery
- RapierMastery
diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Species/human.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Species/human.yml
index 1f1e6e9b48..64a7ee1898 100644
--- a/Resources/Prototypes/_CP14/Entities/Mobs/Species/human.yml
+++ b/Resources/Prototypes/_CP14/Entities/Mobs/Species/human.yml
@@ -23,8 +23,10 @@
- type: Body
prototype: CP14Human
requiredLegs: 2
- - type: CP14SkillStorage # +0.5 memory point
- experienceMaxCap: 5.5
+ - type: CP14SkillStorage
+ skillPoints:
+ Memory:
+ max: 5.5 # +0.5 memory point
- type: Inventory
templateId: CP14Human
femaleDisplacements:
diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/base.yml b/Resources/Prototypes/_CP14/Entities/Mobs/base.yml
index 53837b1df3..223475ee12 100644
--- a/Resources/Prototypes/_CP14/Entities/Mobs/base.yml
+++ b/Resources/Prototypes/_CP14/Entities/Mobs/base.yml
@@ -58,6 +58,9 @@
- type: CP14MagicUnsafeDamage
- type: CP14MagicUnsafeSleep
- type: CP14SkillStorage
+ skillPoints:
+ Memory:
+ max: 5
availableSkillTrees:
- Pyrokinetic
- Hydrosophistry
diff --git a/Resources/Prototypes/_CP14/Skill/Basic/trees.yml b/Resources/Prototypes/_CP14/Skill/Basic/trees.yml
index 4edfcf70b5..7c2b14adaf 100644
--- a/Resources/Prototypes/_CP14/Skill/Basic/trees.yml
+++ b/Resources/Prototypes/_CP14/Skill/Basic/trees.yml
@@ -2,54 +2,63 @@
id: Pyrokinetic
name: cp14-skill-tree-pyrokinetic-name
desc: cp14-skill-tree-pyrokinetic-desc
+ skillType: Memory
color: "#d6933c"
- type: cp14SkillTree
id: Hydrosophistry
name: cp14-skill-tree-hydrosophistry-name
desc: cp14-skill-tree-hydrosophistry-desc
+ skillType: Memory
color: "#1554a1"
- type: cp14SkillTree
id: Illusion
name: cp14-skill-tree-illusion-name
desc: cp14-skill-tree-illusion-desc
+ skillType: Memory
color: "#f55faf"
- type: cp14SkillTree
id: Metamagic
name: cp14-skill-tree-metamagic-name
desc: cp14-skill-tree-metamagic-desc
+ skillType: Memory
color: "#56e5f5"
- type: cp14SkillTree
id: Healing
name: cp14-skill-tree-healing-name
desc: cp14-skill-tree-healing-desc
+ skillType: Memory
color: "#51cf72"
- type: cp14SkillTree
id: Athletic
name: cp14-skill-tree-athletic-name
desc: cp14-skill-tree-athletic-desc
+ skillType: Memory
color: "#b32e37"
#- type: cp14SkillTree
# id: Dimension
# name: cp14-skill-tree-dimension-name
# desc: cp14-skill-tree-dimension-desc
+# skillType: Memory
# color: "#ac66be"
- type: cp14SkillTree
id: Electromancy
name: cp14-skill-tree-electric-name
desc: cp14-skill-tree-electric-desc
+ skillType: Memory
color: "#e8ff4c"
- type: cp14SkillTree
id: MartialArts
name: cp14-skill-tree-martial-name
desc: cp14-skill-tree-martial-desc
+ skillType: Memory
color: "#f54242"
#
@@ -58,22 +67,26 @@
# id: Thaumaturgy
# name: cp14-skill-tree-thaumaturgy-name
# desc: cp14-skill-tree-thaumaturgy-desc
+# skillType: Memory
# color: "#7c52bf"
#- type: cp14SkillTree
# id: Blacksmithing
# name: cp14-skill-tree-blacksmithing-name
# desc: cp14-skill-tree-blacksmithing-desc
+# skillType: Memory
# color: "#6b3200"
#- type: cp14SkillTree
# id: Trading
# name: cp14-skill-tree-trading-name
# desc: cp14-skill-tree-trading-desc
+# skillType: Memory
# color: "#f5edaa"
- type: cp14SkillTree
id: Craftsmanship
name: cp14-skill-tree-craftsman-name
desc: cp14-skill-tree-craftsman-desc
+ skillType: Memory
color: "#a04b00"
diff --git a/Resources/Prototypes/_CP14/Skill/Demigods/trees.yml b/Resources/Prototypes/_CP14/Skill/Demigods/trees.yml
index 45f51c7847..fc7b46839d 100644
--- a/Resources/Prototypes/_CP14/Skill/Demigods/trees.yml
+++ b/Resources/Prototypes/_CP14/Skill/Demigods/trees.yml
@@ -2,11 +2,13 @@
id: GodMerkas
name: cp14-job-name-god-merkas
desc: cp14-job-desc-god-merkas
+ skillType: Memory
color: "#51cf72"
- type: cp14SkillTree
id: GodLumera
name: cp14-job-name-god-lumera
desc: cp14-job-desc-god-lumera
+ skillType: Memory
color: "#5632a8"
parallax: Default
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Skill/points.yml b/Resources/Prototypes/_CP14/Skill/points.yml
new file mode 100644
index 0000000000..c54995ea4f
--- /dev/null
+++ b/Resources/Prototypes/_CP14/Skill/points.yml
@@ -0,0 +1,13 @@
+- type: cp14SkillPoint
+ id: Memory
+ name: cp14-skill-point-memory
+ icon:
+ sprite: _CP14/Interface/Misc/skill_point.rsi
+ state: exp
+
+- type: cp14SkillPoint
+ id: Blood
+ name: cp14-skill-point-vampire-blood
+ icon:
+ sprite: _CP14/Interface/Misc/skill_point.rsi
+ state: blood
\ No newline at end of file
diff --git a/Resources/Textures/_CP14/Interface/Misc/skill_point.rsi/blood.png b/Resources/Textures/_CP14/Interface/Misc/skill_point.rsi/blood.png
new file mode 100644
index 0000000000..ae5039d000
Binary files /dev/null and b/Resources/Textures/_CP14/Interface/Misc/skill_point.rsi/blood.png differ
diff --git a/Resources/Textures/_CP14/Interface/Misc/skillpoint.png b/Resources/Textures/_CP14/Interface/Misc/skill_point.rsi/exp.png
similarity index 100%
rename from Resources/Textures/_CP14/Interface/Misc/skillpoint.png
rename to Resources/Textures/_CP14/Interface/Misc/skill_point.rsi/exp.png
diff --git a/Resources/Textures/_CP14/Interface/Misc/skill_point.rsi/meta.json b/Resources/Textures/_CP14/Interface/Misc/skill_point.rsi/meta.json
new file mode 100644
index 0000000000..b0a36ca412
--- /dev/null
+++ b/Resources/Textures/_CP14/Interface/Misc/skill_point.rsi/meta.json
@@ -0,0 +1,17 @@
+{
+ "version": 1,
+ "size": {
+ "x": 8,
+ "y": 8
+ },
+ "license": "CC-BY-SA-4.0",
+ "copyright": "Created by TheShuEd (Github)",
+ "states": [
+ {
+ "name": "exp"
+ },
+ {
+ "name": "blood"
+ }
+ ]
+}