From be495f274c78241802081d94aeff0d05fd1078b9 Mon Sep 17 00:00:00 2001
From: Ed <96445749+TheShuEd@users.noreply.github.com>
Date: Wed, 14 May 2025 12:43:43 +0300
Subject: [PATCH] Skill progression system (#1263)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* delete skill trees
* Revert "delete skill trees"
This reverts commit 9d7fae73c4c0cc46df5a82dfecb385fd86509638.
* learning refactor
* UI tweaks
* sword mastery skill
* telegraphy
* rapier mastery
* research table ui
* finish studing
* polish UI researching
* pyrokinetic
* more skill tree working
* heat adapt
* alchemist and metamagic update
* skill multiple effects support + metamagic bugg manapool
* impossible 😢
* skimitar gaming
* skimidi
* blacksmithing branch
* remove research restrictions
* remove species magic buff
* fix loc
* Update thaumaturgy.yml
* pip
* Delete skill_tree.yml
---
.../CP14ResearchRecipeControl.xaml | 14 ++
.../CP14ResearchRecipeControl.xaml.cs | 60 +++++
.../CP14ResearchTableBoundUserInterface.cs | 34 +++
.../CP14ResearchTableWindow.xaml | 72 ++++++
.../CP14ResearchTableWindow.xaml.cs | 235 ++++++++++++++++++
.../Skill/Ui/CP14SkillTreeButtonControl.xaml | 10 +-
.../Ui/CP14SkillTreeButtonControl.xaml.cs | 13 +-
.../Systems/Skill/CP14SkillUIController.cs | 43 ++--
.../Systems/Skill/Window/CP14SkillWindow.xaml | 5 -
.../CP14WorkbenchRecipeControl.xaml.cs | 50 ++--
.../CP14WorkbenchRequirementControl.cs | 49 ++++
.../CP14WorkbenchRequirementControl.xaml.cs | 65 -----
.../_CP14/Workbench/CP14WorkbenchWindow.xaml | 6 +-
.../_CP14/ResearchTable/CP14ResearchSystem.cs | 199 +++++++++++++++
.../_CP14/Workbench/CP14WorkbenchSystem.UI.cs | 5 +-
.../_CP14/Workbench/CP14WorkbenchSystem.cs | 4 +-
.../Preferences/Loadouts/LoadoutPrototype.cs | 2 +-
.../Station/SharedStationSpawningSystem.cs | 4 +-
.../SharedCP14MagicEnergySystem.cs | 24 +-
.../CP14MagicManacostModifyComponent.cs | 3 +
.../CP14MagicManacostModifySystem.cs | 15 +-
.../CP14ResearchTableComponent.cs | 17 ++
.../ResearchTable/CP14SharedResearchSystem.cs | 19 ++
.../_CP14/Skill/CP14LearnSkillsSpecial.cs | 22 ++
.../_CP14/Skill/CP14ResearchTableUI.cs | 61 +++++
.../_CP14/Skill/CP14SharedSkillSystem.cs | 104 +++-----
.../_CP14/Skill/CP14SkillSystem.Admin.cs | 45 ----
.../_CP14/Skill/CP14SkillSystem.Checks.cs | 75 ++++++
.../_CP14/Skill/CP14SkillSystem.Learning.cs | 48 ----
.../CP14MeleeWeaponSkillRequiredComponent.cs | 31 +++
.../Components/CP14SkillStorageComponent.cs | 17 +-
.../_CP14/Skill/Effects/AddAction.cs | 3 +-
.../_CP14/Skill/Effects/AddComponents.cs | 31 +++
.../_CP14/Skill/Effects/AddMaxMana.cs | 33 +++
.../_CP14/Skill/Effects/CP14SkillEffect.cs | 3 +-
.../_CP14/Skill/Effects/ModifyManacost.cs | 78 ++++++
.../_CP14/Skill/Effects/ReplaceAction.cs | 3 +-
.../_CP14/Skill/Effects/UnlockRecipes.cs | 65 +++++
.../Skill/Prototypes/CP14SkillPrototype.cs | 6 +-
.../Restrictions/CP14SkillRestriction.cs | 3 +-
.../_CP14/Skill/Restrictions/Impossible.cs | 18 ++
.../Skill/Restrictions/NeedPrerequisite.cs | 2 +-
.../_CP14/Skill/Restrictions/Researched.cs | 26 ++
.../Skill/Restrictions/SpeciesWhitelist.cs | 3 +-
...System.cs => CP14SharedWorkbenchSystem.cs} | 2 +-
.../Requirements/MaterialResource.cs | 3 +-
.../Workbench/Requirements/ProtoIdResource.cs | 3 +-
...{KnowledgeRequired.cs => SkillRequired.cs} | 3 +-
.../Requirements/StackGroupResource.cs | 3 +-
.../Workbench/Requirements/StackResource.cs | 3 +-
.../Workbench/Requirements/TagResource.cs | 3 +-
.../Workbench/WorkbenchCraftRequirement.cs | 3 +-
Resources/Locale/en-US/_CP14/recipe/title.ftl | 1 +
.../Locale/en-US/_CP14/skill/requirements.ftl | 6 +-
.../Locale/en-US/_CP14/skill/skill_issue.ftl | 3 +
.../Locale/en-US/_CP14/skill/skill_meta.ftl | 34 +++
.../Locale/en-US/_CP14/skill/skill_tree.ftl | 23 +-
Resources/Locale/en-US/_CP14/skill/ui.ftl | 12 +-
Resources/Locale/ru-RU/_CP14/recipe/title.ftl | 1 +
.../Locale/ru-RU/_CP14/skill/requirements.ftl | 6 +-
.../Locale/ru-RU/_CP14/skill/skill_issue.ftl | 3 +
.../Locale/ru-RU/_CP14/skill/skill_meta.ftl | 34 +++
.../Locale/ru-RU/_CP14/skill/skill_tree.ftl | 11 +
Resources/Locale/ru-RU/_CP14/skill/ui.ftl | 12 +-
Resources/Maps/_CP14/Frigid_Coast.yml | 7 -
.../_CP14/Catalog/Fills/closets.yml | 1 -
.../_CP14/Catalog/Fills/dresser.yml | 4 -
.../Actions/Spells/Fire/fire_rune.yml | 98 --------
.../Entities/Actions/Spells/Fire/fireball.yml | 3 +-
.../Actions/Spells/Fire/flame_creation.yml | 1 +
.../Actions/Spells/Fire/hell_ballade.yml | 1 +
.../Spells/Fire/tiefling_inner_fire.yml | 1 +
.../Life/{T0_cure_heat.yml => cure_heat.yml} | 1 +
.../{T0_cure_poison.yml => cure_poison.yml} | 1 +
.../{T0_cure_wounds.yml => cure_wounds.yml} | 1 +
.../{T0_heal_ballade.yml => heal_ballade.yml} | 1 +
.../Spells/Life/magical_acceleration.yml | 1 +
...T0_peace_ballade.yml => peace_ballade.yml} | 1 +
.../{T0_plant_growth.yml => plant_growth.yml} | 1 +
.../resurrection.yml} | 1 +
.../Actions/Spells/Life/sheep_polymorph.yml | 1 +
...T0_speed_ballade.yml => speed_ballade.yml} | 1 +
.../{T1_flash_light.yml => flash_light.yml} | 1 +
.../{T1_signal_light.yml => signal_light.yml} | 1 +
...phere_of_light.yml => sphere_of_light.yml} | 1 +
.../Actions/Spells/Water/beer_creation.yml | 1 +
.../Entities/Actions/Spells/Water/freeze.yml | 1 +
.../Actions/Spells/Water/ice_arrow.yml | 9 +-
.../Actions/Spells/Water/ice_dagger.yml | 5 +-
.../Actions/Spells/Water/ice_shards.yml | 1 +
.../Actions/Spells/Water/water_creation.yml | 1 +
.../_CP14/Entities/Mobs/Species/carcat.yml | 3 -
.../_CP14/Entities/Mobs/Species/elf.yml | 3 -
.../_CP14/Entities/Mobs/Species/silva.yml | 3 -
.../_CP14/Entities/Mobs/Species/tiefling.yml | 3 -
.../Objects/ModularTools/Blade/skimitar.yml | 78 ++++++
.../Objects/Specific/Thaumaturgy/crystal.yml | 3 +
.../Structures/Furniture/research_table.yml | 57 +++++
.../_CP14/Loadouts/role_loadouts.yml | 10 -
.../Prototypes/_CP14/Loadouts/skill_tree.yml | 119 ---------
.../_CP14/ModularCraft/Blade/rapier.yml | 5 +-
.../_CP14/ModularCraft/Blade/sickle.yml | 2 +-
.../_CP14/ModularCraft/Blade/skimitar.yml | 87 +++++++
.../_CP14/ModularCraft/Blade/spear.yml | 1 +
.../_CP14/ModularCraft/Blade/sword.yml | 3 +
.../_CP14/Recipes/Workbench/Anvil/misc.yml | 77 ++++++
.../Workbench/Anvil/modular_aventail.yml | 24 ++
.../Recipes/Workbench/Anvil/modular_blade.yml | 216 +++++++++++++++-
.../Workbench/Anvil/modular_breastplate.yml | 36 +++
.../Workbench/Anvil/modular_cuisses.yml | 24 ++
.../Recipes/Workbench/Anvil/modular_garde.yml | 24 ++
.../Workbench/Anvil/modular_greave.yml | 24 ++
.../Workbench/Anvil/modular_helmet.yml | 24 ++
.../Recipes/Workbench/Anvil/modular_tip.yml | 12 +
.../Recipes/Workbench/Anvil/modular_visor.yml | 24 ++
.../_CP14/Recipes/Workbench/furnace.yml | 39 +++
.../_CP14/Roles/Jobs/Artisan/alchemist.yml | 7 +
.../_CP14/Roles/Jobs/Artisan/apprentice.yml | 5 +
.../_CP14/Roles/Jobs/Artisan/blacksmith.yml | 8 +
Resources/Prototypes/_CP14/Skill/atlethic.yml | 9 +-
.../Prototypes/_CP14/Skill/blacksmithing.yml | 69 +++++
.../Prototypes/_CP14/Skill/dimension.yml | 63 ++---
Resources/Prototypes/_CP14/Skill/healing.yml | 166 +++++++++----
.../Prototypes/_CP14/Skill/hydrosophistry.yml | 113 +++++++--
Resources/Prototypes/_CP14/Skill/illusion.yml | 118 +++++++--
.../Prototypes/_CP14/Skill/martial_arts.yml | 29 +++
.../Prototypes/_CP14/Skill/metamagic.yml | 101 ++++++--
.../Prototypes/_CP14/Skill/pyrokinetic.yml | 94 ++++++-
.../Prototypes/_CP14/Skill/skill_tree.yml | 35 ++-
.../Prototypes/_CP14/Skill/thaumaturgy.yml | 15 ++
Resources/Prototypes/_CP14/tags.yml | 3 +
.../_CP14/Actions/skill_tree.rsi/heal.png | Bin 299 -> 285 bytes
.../_CP14/Actions/skill_tree.rsi/heal2.png | Bin 0 -> 323 bytes
.../_CP14/Actions/skill_tree.rsi/heal3.png | Bin 0 -> 497 bytes
.../_CP14/Actions/skill_tree.rsi/light.png | Bin 248 -> 265 bytes
.../_CP14/Actions/skill_tree.rsi/light2.png | Bin 0 -> 272 bytes
.../_CP14/Actions/skill_tree.rsi/light3.png | Bin 0 -> 363 bytes
.../_CP14/Actions/skill_tree.rsi/martial.png | Bin 0 -> 490 bytes
.../_CP14/Actions/skill_tree.rsi/meta.json | 33 +++
.../_CP14/Actions/skill_tree.rsi/meta.png | Bin 503 -> 392 bytes
.../_CP14/Actions/skill_tree.rsi/meta2.png | Bin 0 -> 503 bytes
.../_CP14/Actions/skill_tree.rsi/meta3.png | Bin 0 -> 704 bytes
.../_CP14/Actions/skill_tree.rsi/pyro2.png | Bin 0 -> 453 bytes
.../_CP14/Actions/skill_tree.rsi/pyro3.png | Bin 0 -> 604 bytes
.../_CP14/Actions/skill_tree.rsi/water.png | Bin 332 -> 274 bytes
.../_CP14/Actions/skill_tree.rsi/water2.png | Bin 0 -> 332 bytes
.../_CP14/Actions/skill_tree.rsi/water3.png | Bin 0 -> 477 bytes
.../Objects/Bureaucracy/inkwell.rsi/icon.png | Bin 296 -> 286 bytes
.../Blade/Rapier/metall_rapier.rsi/meta.json | 3 +
.../Rapier/metall_rapier.rsi/preview.png | Bin 0 -> 426 bytes
.../metall_skimitar.rsi/equipped-BELT1.png | Bin 0 -> 377 bytes
.../metall_skimitar.rsi/equipped-BELT2.png | Bin 0 -> 356 bytes
.../metall_skimitar.rsi/equipped-NECK.png | Bin 0 -> 316 bytes
.../Skimitar/metall_skimitar.rsi/icon.png | Bin 0 -> 443 bytes
.../metall_skimitar.rsi/inhand-left.png | Bin 0 -> 655 bytes
.../metall_skimitar.rsi/inhand-right.png | Bin 0 -> 657 bytes
.../Skimitar/metall_skimitar.rsi/meta.json | 45 ++++
.../Skimitar/metall_skimitar.rsi/preview.png | Bin 0 -> 527 bytes
.../wielded-inhand-left.png | Bin 0 -> 682 bytes
.../wielded-inhand-right.png | Bin 0 -> 674 bytes
.../Blade/Sword/metall_sword.rsi/meta.json | 3 +
.../Blade/Sword/metall_sword.rsi/preview.png | Bin 0 -> 581 bytes
.../Furniture/workbench.rsi/furnace.png | Bin 412 -> 0 bytes
.../Furniture/workbench.rsi/meta.json | 4 +-
.../workbench.rsi/research_table.png | Bin 0 -> 1516 bytes
165 files changed, 2987 insertions(+), 778 deletions(-)
create mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml
create mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs
create mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs
create mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml
create mode 100644 Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml.cs
create mode 100644 Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.cs
delete mode 100644 Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.xaml.cs
create mode 100644 Content.Server/_CP14/ResearchTable/CP14ResearchSystem.cs
create mode 100644 Content.Shared/_CP14/ResearchTable/CP14ResearchTableComponent.cs
create mode 100644 Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs
create mode 100644 Content.Shared/_CP14/Skill/CP14LearnSkillsSpecial.cs
create mode 100644 Content.Shared/_CP14/Skill/CP14ResearchTableUI.cs
create mode 100644 Content.Shared/_CP14/Skill/CP14SkillSystem.Checks.cs
delete mode 100644 Content.Shared/_CP14/Skill/CP14SkillSystem.Learning.cs
create mode 100644 Content.Shared/_CP14/Skill/Components/CP14MeleeWeaponSkillRequiredComponent.cs
create mode 100644 Content.Shared/_CP14/Skill/Effects/AddComponents.cs
create mode 100644 Content.Shared/_CP14/Skill/Effects/AddMaxMana.cs
create mode 100644 Content.Shared/_CP14/Skill/Effects/ModifyManacost.cs
create mode 100644 Content.Shared/_CP14/Skill/Effects/UnlockRecipes.cs
create mode 100644 Content.Shared/_CP14/Skill/Restrictions/Impossible.cs
create mode 100644 Content.Shared/_CP14/Skill/Restrictions/Researched.cs
rename Content.Shared/_CP14/Workbench/{SharedCP14WorkbenchSystem.cs => CP14SharedWorkbenchSystem.cs} (90%)
rename Content.Shared/_CP14/Workbench/Requirements/{KnowledgeRequired.cs => SkillRequired.cs} (95%)
create mode 100644 Resources/Locale/en-US/_CP14/skill/skill_issue.ftl
create mode 100644 Resources/Locale/en-US/_CP14/skill/skill_meta.ftl
create mode 100644 Resources/Locale/ru-RU/_CP14/skill/skill_issue.ftl
create mode 100644 Resources/Locale/ru-RU/_CP14/skill/skill_meta.ftl
delete mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/fire_rune.yml
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/{T0_cure_heat.yml => cure_heat.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/{T0_cure_poison.yml => cure_poison.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/{T0_cure_wounds.yml => cure_wounds.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/{T0_heal_ballade.yml => heal_ballade.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/{T0_peace_ballade.yml => peace_ballade.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/{T0_plant_growth.yml => plant_growth.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/{Death/T1_resurrection.yml => Life/resurrection.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/{T0_speed_ballade.yml => speed_ballade.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/{T1_flash_light.yml => flash_light.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/{T1_signal_light.yml => signal_light.yml} (99%)
rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/{T0_sphere_of_light.yml => sphere_of_light.yml} (99%)
create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Blade/skimitar.yml
create mode 100644 Resources/Prototypes/_CP14/Entities/Structures/Furniture/research_table.yml
delete mode 100644 Resources/Prototypes/_CP14/Loadouts/skill_tree.yml
create mode 100644 Resources/Prototypes/_CP14/ModularCraft/Blade/skimitar.yml
create mode 100644 Resources/Prototypes/_CP14/Skill/blacksmithing.yml
create mode 100644 Resources/Prototypes/_CP14/Skill/martial_arts.yml
create mode 100644 Resources/Prototypes/_CP14/Skill/thaumaturgy.yml
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/heal2.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/heal3.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/light2.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/light3.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/martial.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/meta2.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/meta3.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/pyro2.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/pyro3.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/water2.png
create mode 100644 Resources/Textures/_CP14/Actions/skill_tree.rsi/water3.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi/preview.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-BELT1.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-BELT2.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-NECK.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/icon.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/inhand-left.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/inhand-right.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/meta.json
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/preview.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/wielded-inhand-left.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/wielded-inhand-right.png
create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi/preview.png
delete mode 100644 Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/furnace.png
create mode 100644 Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/research_table.png
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml
new file mode 100644
index 0000000000..de13384bfd
--- /dev/null
+++ b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml
@@ -0,0 +1,14 @@
+
+
+
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs
new file mode 100644
index 0000000000..99b9de4a7d
--- /dev/null
+++ b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs
@@ -0,0 +1,60 @@
+using Content.Shared._CP14.Skill;
+using Content.Shared._CP14.Skill.Prototypes;
+using Robust.Client.AutoGenerated;
+using Robust.Client.GameObjects;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client._CP14.ResearchTable;
+
+[GenerateTypedNameReferences]
+public sealed partial class CP14ResearchRecipeControl : Control
+{
+ [Dependency] private readonly IEntityManager _entity = default!;
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+
+ public event Action? OnResearch;
+
+ private readonly SpriteSystem _sprite;
+ private readonly CP14SharedSkillSystem _skillSystem;
+
+ private readonly CP14SkillPrototype _skillPrototype;
+ private readonly bool _craftable;
+
+ public CP14ResearchRecipeControl(CP14ResearchUiEntry entry)
+ {
+ RobustXamlLoader.Load(this);
+ IoCManager.InjectDependencies(this);
+
+ _sprite = _entity.System();
+ _skillSystem = _entity.System();
+
+ _skillPrototype = _prototype.Index(entry.ProtoId);
+ _craftable = entry.Craftable;
+
+ Button.OnPressed += _ => OnResearch?.Invoke(entry, _skillPrototype);
+
+ UpdateColor();
+ UpdateName();
+ UpdateView();
+ }
+
+ private void UpdateColor()
+ {
+ if (_craftable)
+ return;
+
+ Button.ModulateSelfOverride = Color.FromHex("#302622");
+ }
+
+ private void UpdateName()
+ {
+ Name.Text = $"{Loc.GetString(_skillSystem.GetSkillName(_skillPrototype))}" ;
+ }
+
+ private void UpdateView()
+ {
+ View.Texture =_sprite.Frame0(_skillPrototype.Icon);
+ }
+}
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs b/Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs
new file mode 100644
index 0000000000..119e5d6063
--- /dev/null
+++ b/Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs
@@ -0,0 +1,34 @@
+using Content.Shared._CP14.Skill;
+using Robust.Client.UserInterface;
+
+namespace Content.Client._CP14.ResearchTable;
+
+public sealed class CP14ResearchTableBoundUserInterface : BoundUserInterface
+{
+ private CP14ResearchTableWindow? _window;
+
+ public CP14ResearchTableBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
+ {
+ }
+
+ protected override void Open()
+ {
+ base.Open();
+
+ _window = this.CreateWindow();
+
+ _window.OnResearch += entry => SendMessage(new CP14ResearchMessage(entry.ProtoId));
+ }
+
+ protected override void UpdateState(BoundUserInterfaceState state)
+ {
+ base.UpdateState(state);
+
+ switch (state)
+ {
+ case CP14ResearchTableUiState recipesState:
+ _window?.UpdateState(recipesState);
+ break;
+ }
+ }
+}
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml b/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml
new file mode 100644
index 0000000000..59a2e789bb
--- /dev/null
+++ b/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml.cs b/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml.cs
new file mode 100644
index 0000000000..0e606753ea
--- /dev/null
+++ b/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml.cs
@@ -0,0 +1,235 @@
+using Content.Client._CP14.Workbench;
+using Content.Shared._CP14.Skill;
+using Content.Shared._CP14.Skill.Prototypes;
+using Content.Shared._CP14.Skill.Restrictions;
+using Robust.Client.AutoGenerated;
+using Robust.Client.GameObjects;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.CustomControls;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client._CP14.ResearchTable;
+
+[GenerateTypedNameReferences]
+public sealed partial class CP14ResearchTableWindow : DefaultWindow
+{
+ private const int AllCategoryId = -1;
+
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+ [Dependency] private readonly ILogManager _log = default!;
+ [Dependency] private readonly IEntityManager _entity = default!;
+
+ private readonly SpriteSystem _sprite;
+ private readonly CP14SharedSkillSystem _skillSystem;
+
+ public event Action? OnResearch;
+
+ private readonly Dictionary _categories = new();
+
+ private CP14ResearchTableUiState? _cachedState;
+ private CP14ResearchUiEntry? _selectedEntry;
+ private string _searchFilter = string.Empty;
+
+ private ISawmill Sawmill { get; init; }
+
+ public CP14ResearchTableWindow()
+ {
+ RobustXamlLoader.Load(this);
+ IoCManager.InjectDependencies(this);
+
+ _sprite = _entity.System();
+ _skillSystem = _entity.System();
+
+ Sawmill = _log.GetSawmill("cp14_research_table_window");
+
+ SearchBar.OnTextChanged += OnSearchChanged;
+ CraftButton.OnPressed += OnCraftPressed;
+ OptionCategories.OnItemSelected += OnCategoryItemSelected;
+ }
+
+ public void UpdateRecipesVisibility()
+ {
+ if (_cachedState is null)
+ return;
+
+ CraftsContainer.RemoveAllChildren();
+
+ var recipes = new List();
+ foreach (var entry in _cachedState.Skills)
+ {
+ if (!_prototype.TryIndex(entry.ProtoId, out var indexedEntry))
+ {
+ Sawmill.Error($"No recipe prototype {entry.ProtoId} retrieved from cache found");
+ continue;
+ }
+
+ if (!ProcessSearchFilter(indexedEntry))
+ continue;
+
+ if (!ProcessSearchCategoryFilter(indexedEntry))
+ continue;
+
+ recipes.Add(entry);
+ }
+
+ recipes.Sort(CP14ResearchUiEntry.CompareTo);
+
+ foreach (var recipe in recipes)
+ {
+ var control = new CP14ResearchRecipeControl(recipe);
+ control.OnResearch += RecipeSelect;
+
+ CraftsContainer.AddChild(control);
+ }
+
+ if (_selectedEntry is not null && !recipes.Contains(_selectedEntry.Value))
+ RecipeSelectNull();
+ }
+
+ public void UpdateState(CP14ResearchTableUiState recipesState)
+ {
+ _cachedState = recipesState;
+
+ _categories.Clear();
+ OptionCategories.Clear();
+ OptionCategories.AddItem(Loc.GetString("cp14-recipe-category-all"), AllCategoryId);
+
+ var categories = new List();
+ var count = 0;
+
+ foreach (var skill in recipesState.Skills)
+ {
+ if (!_prototype.TryIndex(skill.ProtoId, out var indexedSkill))
+ continue;
+
+ if (!_prototype.TryIndex(indexedSkill.Tree, out var indexedTree))
+ continue;
+
+ if (categories.Contains(indexedTree.Name))
+ continue;
+
+ categories.Add(indexedTree.Name);
+ }
+
+ categories.Sort((a, b) => string.Compare(Loc.GetString(a), Loc.GetString(b), StringComparison.Ordinal));
+
+ foreach (var category in categories)
+ {
+ OptionCategories.AddItem(Loc.GetString(category), count);
+ _categories.Add(count, category);
+ count++;
+ }
+
+ UpdateRecipesVisibility();
+ }
+
+ private void OnSearchChanged(LineEdit.LineEditEventArgs _)
+ {
+ _searchFilter = SearchBar.Text.Trim().ToLowerInvariant();
+ UpdateRecipesVisibility();
+ }
+
+ private void OnCraftPressed(BaseButton.ButtonEventArgs _)
+ {
+ if (_selectedEntry is null)
+ return;
+
+ OnResearch?.Invoke(_selectedEntry.Value);
+ }
+
+ private void OnCategoryItemSelected(OptionButton.ItemSelectedEventArgs obj)
+ {
+ OptionCategories.SelectId(obj.Id);
+ UpdateRecipesVisibility();
+ }
+
+ private bool ProcessSearchFilter(CP14SkillPrototype indexedEntry)
+ {
+ if (_searchFilter == string.Empty)
+ return true;
+
+ return Loc.GetString(_skillSystem.GetSkillName(indexedEntry)).Contains(_searchFilter);
+ }
+
+ private bool ProcessSearchCategoryFilter(CP14SkillPrototype indexedEntry)
+ {
+ // If we are searching through all categories, we simply skip the current filter
+ if (OptionCategories.SelectedId == AllCategoryId)
+ return true;
+
+ if (!_categories.TryGetValue(OptionCategories.SelectedId, out var selectedCategory))
+ {
+ Sawmill.Error($"Non-existent {OptionCategories.SelectedId} category id selected. Filter skipped");
+ return true;
+ }
+
+ if (!_prototype.TryIndex(indexedEntry.Tree, out var indexedTree))
+ {
+ Sawmill.Error($"Non-existent {indexedEntry.Tree} category prototype id. Filter skipped");
+ return true;
+ }
+
+ return indexedTree.Name == selectedCategory;
+ }
+
+ private void RecipeSelect(CP14ResearchTableUiState recipesState)
+ {
+ foreach (var skill in recipesState.Skills)
+ {
+ RecipeSelect(skill, _prototype.Index(skill.ProtoId));
+ break;
+ }
+ }
+
+ private void RecipeSelect(CP14ResearchUiEntry cachedEntry)
+ {
+ if (_cachedState is null)
+ return;
+
+ if (_cachedState.Skills.Contains(cachedEntry))
+ {
+ Sawmill.Warning($"The selected cache option {cachedEntry} isn't found in recipes");
+ return;
+ }
+
+ RecipeSelect(cachedEntry, _prototype.Index(cachedEntry.ProtoId));
+ }
+
+ private void RecipeSelect(CP14ResearchUiEntry entry, CP14SkillPrototype skill)
+ {
+ _selectedEntry = entry;
+
+ ItemView.Texture = _sprite.Frame0(skill.Icon);
+ ItemName.Text = _skillSystem.GetSkillName(skill);
+ ItemDescription.Text = _skillSystem.GetSkillDescription(skill);
+ ItemRequirements.RemoveAllChildren();
+
+ foreach (var restriction in skill.Restrictions)
+ {
+ switch (restriction)
+ {
+ case Researched researched:
+ foreach (var requirement in researched.Requirements)
+ {
+ ItemRequirements.AddChild(new CP14WorkbenchRequirementControl(requirement));
+ }
+
+ break;
+ }
+ }
+
+ CraftButton.Disabled = !entry.Craftable;
+ }
+
+ private void RecipeSelectNull()
+ {
+ _selectedEntry = null;
+
+ ItemView.Texture = null;
+ ItemName.Text = string.Empty;
+ ItemDescription.Text = string.Empty;
+ ItemRequirements.RemoveAllChildren();
+ CraftButton.Disabled = true;
+ }
+}
diff --git a/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml b/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml
index 5cb6f98560..6f2dfc8ad6 100644
--- a/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml
+++ b/Content.Client/_CP14/Skill/Ui/CP14SkillTreeButtonControl.xaml
@@ -7,13 +7,9 @@
VerticalExpand="True"
StyleClasses="OpenRight"
Margin="0 0 -1 0">
-
-
-
-
+
+
+
0)
+ {
+ SkillPointImage.Visible = true;
+ SkillTreeLabel.Text = $"{skillpoints} {label}";
+ }
+ else
+ {
+ SkillPointImage.Visible = false;
+ SkillTreeLabel.Text = $"{label}";
+ }
MainButton.OnPressed += args => OnPressed?.Invoke();
}
diff --git a/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs b/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs
index 40c68935f7..ce9bac4656 100644
--- a/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs
+++ b/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs
@@ -36,6 +36,7 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered _allSkills = [];
+ private IEnumerable _allTrees = [];
private CP14SkillPrototype? _selectedSkill;
private CP14SkillTreePrototype? _selectedSkillTree;
@@ -70,9 +71,9 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered();
+ _allTrees = _proto.EnumeratePrototypes().OrderBy(tree => Loc.GetString(tree.Name));
}
-
public void OnStateExited(GameplayState state)
{
if (_window != null)
@@ -205,7 +206,7 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered 0)
+ if (_selectedSkillTree == null)
{
- var firstTree = storage.Progress.First().Key;
+ var firstTree = _allTrees.First();
- if (_proto.TryIndex(firstTree, out var indexedTree))
- {
- SelectTree(indexedTree, storage); // Set the first tree from the player's progress
- }
+ SelectTree(firstTree, storage); // Set the first tree from the player's progress
}
if (_selectedSkillTree == null)
@@ -301,26 +299,26 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered
{
- SelectTree(indexedTree, storage);
+ SelectTree(tree, storage);
};
_window.TreeTabsContainer.AddChild(treeButton2);
@@ -336,9 +334,6 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered
-
-
-
-
diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml.cs b/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml.cs
index 8adf468ace..ec35e29b35 100644
--- a/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml.cs
+++ b/Content.Client/_CP14/Workbench/CP14WorkbenchRecipeControl.xaml.cs
@@ -4,6 +4,7 @@
*/
using Content.Shared._CP14.Workbench;
+using Content.Shared._CP14.Workbench.Prototypes;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface;
@@ -13,37 +14,52 @@ using Robust.Shared.Prototypes;
namespace Content.Client._CP14.Workbench;
[GenerateTypedNameReferences]
-public sealed partial class CP14WorkbenchRequirementControl : Control
+public sealed partial class CP14WorkbenchRecipeControl : Control
{
[Dependency] private readonly IEntityManager _entity = default!;
- [Dependency] private readonly IPrototypeManager _proto = default!;
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+
+ public event Action? OnSelect;
private readonly SpriteSystem _sprite;
- public CP14WorkbenchRequirementControl()
+ private readonly CP14WorkbenchRecipePrototype _recipePrototype;
+ private readonly bool _craftable;
+
+ public CP14WorkbenchRecipeControl(CP14WorkbenchUiRecipesEntry entry)
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_sprite = _entity.System();
+
+ _recipePrototype = _prototype.Index(entry.ProtoId);
+ _craftable = entry.Craftable;
+
+ Button.OnPressed += _ => OnSelect?.Invoke(entry, _recipePrototype);
+
+ UpdateColor();
+ UpdateName();
+ UpdateView();
}
- public CP14WorkbenchRequirementControl(CP14WorkbenchCraftRequirement requirement) : this()
+ private void UpdateColor()
{
- Name.Text = requirement.GetRequirementTitle(_proto);
+ if (_craftable)
+ return;
- var texture = requirement.GetRequirementTexture(_proto);
- if (texture is not null)
- {
- View.Visible = true;
- View.Texture = _sprite.Frame0(texture);
- }
+ Button.ModulateSelfOverride = Color.FromHex("#302622");
+ }
- var entityView = requirement.GetRequirementEntityView(_proto);
- if (entityView is not null)
- {
- EntityView.Visible = true;
- EntityView.SetPrototype(entityView);
- }
+ private void UpdateName()
+ {
+ var result = _prototype.Index(_recipePrototype.Result);
+ var counter = _recipePrototype.ResultCount > 1 ? $" x{_recipePrototype.ResultCount}" : "";
+ Name.Text = $"{Loc.GetString(result.Name)} {counter}" ;
+ }
+
+ private void UpdateView()
+ {
+ View.SetPrototype(_recipePrototype.Result);
}
}
diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.cs b/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.cs
new file mode 100644
index 0000000000..8adf468ace
--- /dev/null
+++ b/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.cs
@@ -0,0 +1,49 @@
+/*
+ * This file is sublicensed under MIT License
+ * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
+ */
+
+using Content.Shared._CP14.Workbench;
+using Robust.Client.AutoGenerated;
+using Robust.Client.GameObjects;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client._CP14.Workbench;
+
+[GenerateTypedNameReferences]
+public sealed partial class CP14WorkbenchRequirementControl : Control
+{
+ [Dependency] private readonly IEntityManager _entity = default!;
+ [Dependency] private readonly IPrototypeManager _proto = default!;
+
+ private readonly SpriteSystem _sprite;
+
+ public CP14WorkbenchRequirementControl()
+ {
+ RobustXamlLoader.Load(this);
+ IoCManager.InjectDependencies(this);
+
+ _sprite = _entity.System();
+ }
+
+ public CP14WorkbenchRequirementControl(CP14WorkbenchCraftRequirement requirement) : this()
+ {
+ Name.Text = requirement.GetRequirementTitle(_proto);
+
+ var texture = requirement.GetRequirementTexture(_proto);
+ if (texture is not null)
+ {
+ View.Visible = true;
+ View.Texture = _sprite.Frame0(texture);
+ }
+
+ var entityView = requirement.GetRequirementEntityView(_proto);
+ if (entityView is not null)
+ {
+ EntityView.Visible = true;
+ EntityView.SetPrototype(entityView);
+ }
+ }
+}
diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.xaml.cs b/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.xaml.cs
deleted file mode 100644
index ec35e29b35..0000000000
--- a/Content.Client/_CP14/Workbench/CP14WorkbenchRequirementControl.xaml.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * This file is sublicensed under MIT License
- * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT
- */
-
-using Content.Shared._CP14.Workbench;
-using Content.Shared._CP14.Workbench.Prototypes;
-using Robust.Client.AutoGenerated;
-using Robust.Client.GameObjects;
-using Robust.Client.UserInterface;
-using Robust.Client.UserInterface.XAML;
-using Robust.Shared.Prototypes;
-
-namespace Content.Client._CP14.Workbench;
-
-[GenerateTypedNameReferences]
-public sealed partial class CP14WorkbenchRecipeControl : Control
-{
- [Dependency] private readonly IEntityManager _entity = default!;
- [Dependency] private readonly IPrototypeManager _prototype = default!;
-
- public event Action? OnSelect;
-
- private readonly SpriteSystem _sprite;
-
- private readonly CP14WorkbenchRecipePrototype _recipePrototype;
- private readonly bool _craftable;
-
- public CP14WorkbenchRecipeControl(CP14WorkbenchUiRecipesEntry entry)
- {
- RobustXamlLoader.Load(this);
- IoCManager.InjectDependencies(this);
-
- _sprite = _entity.System();
-
- _recipePrototype = _prototype.Index(entry.ProtoId);
- _craftable = entry.Craftable;
-
- Button.OnPressed += _ => OnSelect?.Invoke(entry, _recipePrototype);
-
- UpdateColor();
- UpdateName();
- UpdateView();
- }
-
- private void UpdateColor()
- {
- if (_craftable)
- return;
-
- Button.ModulateSelfOverride = Color.FromHex("#302622");
- }
-
- private void UpdateName()
- {
- var result = _prototype.Index(_recipePrototype.Result);
- var counter = _recipePrototype.ResultCount > 1 ? $" x{_recipePrototype.ResultCount}" : "";
- Name.Text = $"{Loc.GetString(result.Name)} {counter}" ;
- }
-
- private void UpdateView()
- {
- View.SetPrototype(_recipePrototype.Result);
- }
-}
diff --git a/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml b/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml
index 619d3c8436..edaffe0a33 100644
--- a/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml
+++ b/Content.Client/_CP14/Workbench/CP14WorkbenchWindow.xaml
@@ -35,9 +35,9 @@
diff --git a/Content.Server/_CP14/ResearchTable/CP14ResearchSystem.cs b/Content.Server/_CP14/ResearchTable/CP14ResearchSystem.cs
new file mode 100644
index 0000000000..3646a2c0d3
--- /dev/null
+++ b/Content.Server/_CP14/ResearchTable/CP14ResearchSystem.cs
@@ -0,0 +1,199 @@
+using Content.Server.DoAfter;
+using Content.Shared._CP14.ResearchTable;
+using Content.Shared._CP14.Skill;
+using Content.Shared._CP14.Skill.Components;
+using Content.Shared._CP14.Skill.Prototypes;
+using Content.Shared._CP14.Skill.Restrictions;
+using Content.Shared.DoAfter;
+using Content.Shared.UserInterface;
+using Robust.Server.Audio;
+using Robust.Server.GameObjects;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server._CP14.ResearchTable;
+
+public sealed class CP14ResearchSystem : CP14SharedResearchSystem
+{
+ [Dependency] private readonly EntityLookupSystem _lookup = default!;
+ [Dependency] private readonly IPrototypeManager _proto = default!;
+ [Dependency] private readonly UserInterfaceSystem _userInterface = default!;
+ [Dependency] private readonly DoAfterSystem _doAfter = default!;
+ [Dependency] private readonly AudioSystem _audio = default!;
+
+ private IEnumerable _allSkills = [];
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ _allSkills = _proto.EnumeratePrototypes();
+
+ SubscribeLocalEvent(OnBeforeUIOpen);
+ SubscribeLocalEvent(OnResearch);
+ SubscribeLocalEvent(OnResearchEnd);
+
+ SubscribeLocalEvent(OnReloadPrototypes);
+ }
+
+ private void OnReloadPrototypes(PrototypesReloadedEventArgs ev)
+ {
+ _allSkills = _proto.EnumeratePrototypes();
+ }
+
+ private void OnResearchEnd(Entity table, ref CP14ResearchDoAfterEvent args)
+ {
+ if (args.Cancelled || args.Handled)
+ return;
+
+ if (!_proto.TryIndex(args.Skill, out var indexedSkill))
+ return;
+
+ var placedEntities = _lookup.GetEntitiesInRange(Transform(table).Coordinates,
+ table.Comp.ResearchRadius,
+ LookupFlags.Uncontained);
+
+ if (!CanResearch(indexedSkill, placedEntities, args.User))
+ return;
+
+ if (!TryComp(args.User, out var storage))
+ return;
+ if (storage.ResearchedSkills.Contains(args.Skill) || storage.LearnedSkills.Contains(args.Skill))
+ return;
+ storage.ResearchedSkills.Add(args.Skill);
+ Dirty(args.User, storage);
+
+ foreach (var restriction in indexedSkill.Restrictions)
+ {
+ switch (restriction)
+ {
+ case Researched researched:
+ foreach (var req in researched.Requirements)
+ {
+ req.PostCraft(EntityManager, _proto, placedEntities, args.User);
+ }
+ break;
+ }
+ }
+
+ _audio.PlayPvs(table.Comp.ResearchSound, table);
+ UpdateUI(table, args.User);
+ args.Handled = true;
+ }
+
+ private void OnResearch(Entity ent, ref CP14ResearchMessage args)
+ {
+ if (!TryComp(args.Actor, out var storage))
+ return;
+
+ if (storage.ResearchedSkills.Contains(args.Skill) || storage.LearnedSkills.Contains(args.Skill))
+ return;
+
+ if (!_proto.TryIndex(args.Skill, out var indexedSkill))
+ return;
+
+ StartResearch(ent, args.Actor, indexedSkill);
+ }
+
+ private void OnBeforeUIOpen(Entity ent, ref BeforeActivatableUIOpenEvent args)
+ {
+ UpdateUI(ent, args.User);
+ }
+
+ private void UpdateUI(Entity entity, EntityUid user)
+ {
+ var placedEntities = _lookup.GetEntitiesInRange(Transform(entity).Coordinates, entity.Comp.ResearchRadius);
+
+ if (!TryComp(user, out var storage))
+ return;
+
+ var researches = new List();
+ foreach (var skill in _allSkills)
+ {
+ var researchable = false;
+ var canCraft = true;
+ var hidden = false;
+
+ foreach (var restriction in skill.Restrictions)
+ {
+ if (storage.ResearchedSkills.Contains(skill) || storage.LearnedSkills.Contains(skill))
+ continue;
+
+ switch (restriction)
+ {
+ case SpeciesWhitelist speciesWhitelist: //We cant change species of our character, so hide it
+ if (!speciesWhitelist.Check(EntityManager, user, skill))
+ hidden = true;
+ break;
+
+ case NeedPrerequisite prerequisite:
+ if (!storage.ResearchedSkills.Contains(prerequisite.Prerequisite))
+ hidden = true;
+ break;
+
+ case Researched researched:
+ researchable = true;
+
+ foreach (var req in researched.Requirements)
+ {
+ if (!req.CheckRequirement(EntityManager, _proto, placedEntities, user))
+ {
+ canCraft = false;
+ }
+ }
+ break;
+ }
+ }
+
+ if (!researchable || hidden)
+ continue;
+
+ var entry = new CP14ResearchUiEntry(skill, canCraft);
+
+ researches.Add(entry);
+ }
+
+ _userInterface.SetUiState(entity.Owner, CP14ResearchTableUiKey.Key, new CP14ResearchTableUiState(researches));
+ }
+
+ private void StartResearch(Entity table, EntityUid user, CP14SkillPrototype skill)
+ {
+ var researchDoAfter = new CP14ResearchDoAfterEvent()
+ {
+ Skill = skill
+ };
+
+ var doAfterArgs = new DoAfterArgs(EntityManager,
+ user,
+ TimeSpan.FromSeconds(table.Comp.ResearchSpeed),
+ researchDoAfter,
+ table,
+ table)
+ {
+ BreakOnMove = true,
+ BreakOnDamage = true,
+ NeedHand = true,
+ };
+
+ _doAfter.TryStartDoAfter(doAfterArgs);
+ _audio.PlayPvs(table.Comp.ResearchSound, table);
+ }
+
+ private bool CanResearch(CP14SkillPrototype skill, HashSet entities, EntityUid user)
+ {
+ foreach (var restriction in skill.Restrictions)
+ {
+ switch (restriction)
+ {
+ case Researched researched:
+ foreach (var req in researched.Requirements)
+ {
+ if (!req.CheckRequirement(EntityManager, _proto, entities, user))
+ return false;
+ }
+ break;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.UI.cs b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.UI.cs
index d8d88d22f9..f1511805b9 100644
--- a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.UI.cs
+++ b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.UI.cs
@@ -35,10 +35,11 @@ public sealed partial class CP14WorkbenchSystem
foreach (var requirement in indexedRecipe.Requirements)
{
- if (!requirement.CheckRequirement(EntityManager, _proto, placedEntities, user, indexedRecipe))
+ if (!requirement.CheckRequirement(EntityManager, _proto, placedEntities, user))
{
canCraft = false;
- hidden = requirement.HideRecipe;
+ if (requirement.HideRecipe)
+ hidden = true;
}
}
diff --git a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs
index fb84c2d091..4ccc6dc517 100644
--- a/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs
+++ b/Content.Server/_CP14/Workbench/CP14WorkbenchSystem.cs
@@ -20,7 +20,7 @@ using Robust.Shared.Random;
namespace Content.Server._CP14.Workbench;
-public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
+public sealed partial class CP14WorkbenchSystem : CP14SharedWorkbenchSystem
{
[Dependency] private readonly AudioSystem _audio = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!;
@@ -139,7 +139,7 @@ public sealed partial class CP14WorkbenchSystem : SharedCP14WorkbenchSystem
{
foreach (var req in recipe.Requirements)
{
- if (!req.CheckRequirement(EntityManager, _proto, entities, user, recipe))
+ if (!req.CheckRequirement(EntityManager, _proto, entities, user))
return false;
}
diff --git a/Content.Shared/Preferences/Loadouts/LoadoutPrototype.cs b/Content.Shared/Preferences/Loadouts/LoadoutPrototype.cs
index 9aaef487b1..9379fd176e 100644
--- a/Content.Shared/Preferences/Loadouts/LoadoutPrototype.cs
+++ b/Content.Shared/Preferences/Loadouts/LoadoutPrototype.cs
@@ -57,5 +57,5 @@ public sealed partial class LoadoutPrototype : IPrototype, IEquipmentLoadout
/// CP14 - it is possible to give skill trees to players who have taken this loadout
///
[DataField]
- public Dictionary, FixedPoint2> SkillTree = new();
+ public HashSet> Skills = new();
}
diff --git a/Content.Shared/Station/SharedStationSpawningSystem.cs b/Content.Shared/Station/SharedStationSpawningSystem.cs
index c57e727018..133416a589 100644
--- a/Content.Shared/Station/SharedStationSpawningSystem.cs
+++ b/Content.Shared/Station/SharedStationSpawningSystem.cs
@@ -102,9 +102,9 @@ public abstract class SharedStationSpawningSystem : EntitySystem
_action.AddAction(entity, action);
}
- foreach (var tree in loadout.SkillTree)
+ foreach (var skill in loadout.Skills)
{
- _skill.TryAddExperience(entity, tree.Key, tree.Value);
+ _skill.TryAddSkill(entity, skill);
}
}
diff --git a/Content.Shared/_CP14/MagicEnergy/SharedCP14MagicEnergySystem.cs b/Content.Shared/_CP14/MagicEnergy/SharedCP14MagicEnergySystem.cs
index b9ae60492d..fd2c4717d2 100644
--- a/Content.Shared/_CP14/MagicEnergy/SharedCP14MagicEnergySystem.cs
+++ b/Content.Shared/_CP14/MagicEnergy/SharedCP14MagicEnergySystem.cs
@@ -58,6 +58,19 @@ public abstract class SharedCP14MagicEnergySystem : EntitySystem
_ambient.SetAmbience(ent, args.Powered);
}
+ private void UpdateMagicAlert(Entity ent)
+ {
+ if (ent.Comp.MagicAlert is null)
+ return;
+
+ var level = ContentHelpers.RoundToLevels(
+ MathF.Max(0f, (float) ent.Comp.Energy),
+ (float) ent.Comp.MaxEnergy,
+ _alerts.GetMaxSeverity(ent.Comp.MagicAlert.Value));
+
+ _alerts.ShowAlert(ent, ent.Comp.MagicAlert.Value, (short) level);
+ }
+
public void ChangeEnergy(Entity ent,
FixedPoint2 energy,
out FixedPoint2 deltaEnergy,
@@ -154,17 +167,14 @@ public abstract class SharedCP14MagicEnergySystem : EntitySystem
("color", color));
}
- private void UpdateMagicAlert(Entity ent)
+ public void ChangeMaximumEnergy(Entity ent, FixedPoint2 energy)
{
- if (ent.Comp.MagicAlert is null)
+ if (!Resolve(ent, ref ent.Comp, false))
return;
- var level = ContentHelpers.RoundToLevels(
- MathF.Max(0f, (float) ent.Comp.Energy),
- (float) ent.Comp.MaxEnergy,
- _alerts.GetMaxSeverity(ent.Comp.MagicAlert.Value));
+ ent.Comp.MaxEnergy += energy;
- _alerts.ShowAlert(ent, ent.Comp.MagicAlert.Value, (short) level);
+ ChangeEnergy(ent, energy, out _, out _);
}
}
diff --git a/Content.Shared/_CP14/MagicManacostModify/CP14MagicManacostModifyComponent.cs b/Content.Shared/_CP14/MagicManacostModify/CP14MagicManacostModifyComponent.cs
index 26c325c8bb..565e98a347 100644
--- a/Content.Shared/_CP14/MagicManacostModify/CP14MagicManacostModifyComponent.cs
+++ b/Content.Shared/_CP14/MagicManacostModify/CP14MagicManacostModifyComponent.cs
@@ -15,4 +15,7 @@ public sealed partial class CP14MagicManacostModifyComponent : Component
[DataField]
public FixedPoint2 GlobalModifier = 1f;
+
+ [DataField]
+ public bool Examinable = false;
}
diff --git a/Content.Shared/_CP14/MagicManacostModify/CP14MagicManacostModifySystem.cs b/Content.Shared/_CP14/MagicManacostModify/CP14MagicManacostModifySystem.cs
index 7bd66fb5b7..648e359dfa 100644
--- a/Content.Shared/_CP14/MagicManacostModify/CP14MagicManacostModifySystem.cs
+++ b/Content.Shared/_CP14/MagicManacostModify/CP14MagicManacostModifySystem.cs
@@ -2,6 +2,7 @@
using Content.Shared._CP14.MagicRitual.Prototypes;
using Content.Shared._CP14.MagicSpell.Events;
using Content.Shared.Examine;
+using Content.Shared.FixedPoint;
using Content.Shared.Inventory;
using Content.Shared.Verbs;
using Robust.Shared.Prototypes;
@@ -24,10 +25,10 @@ public sealed partial class CP14MagicManacostModifySystem : EntitySystem
private void OnVerbExamine(Entity ent, ref GetVerbsEvent args)
{
- if (!args.CanInteract || !args.CanAccess)
+ if (!args.CanInteract || !args.CanAccess || !ent.Comp.Examinable)
return;
- var markup = GetMagicClothingExamine(ent.Comp);
+ var markup = GetManacostModifyMessage(ent.Comp.GlobalModifier, ent.Comp.Modifiers);
_examine.AddDetailedExamineVerb(
args,
ent.Comp,
@@ -37,21 +38,21 @@ public sealed partial class CP14MagicManacostModifySystem : EntitySystem
Loc.GetString("cp14-magic-examinable-verb-message"));
}
- private FormattedMessage GetMagicClothingExamine(CP14MagicManacostModifyComponent comp)
+ public FormattedMessage GetManacostModifyMessage(FixedPoint2 global, Dictionary, FixedPoint2> modifiers)
{
var msg = new FormattedMessage();
msg.AddMarkupOrThrow(Loc.GetString("cp14-clothing-magic-examine"));
- if (comp.GlobalModifier != 1)
+ if (global != 1)
{
msg.PushNewline();
- var plus = (float)comp.GlobalModifier > 1 ? "+" : "";
+ var plus = (float)global > 1 ? "+" : "";
msg.AddMarkupOrThrow(
- $"{Loc.GetString("cp14-clothing-magic-global")}: {plus}{MathF.Round((float)(comp.GlobalModifier - 1) * 100, MidpointRounding.AwayFromZero)}%");
+ $"{Loc.GetString("cp14-clothing-magic-global")}: {plus}{MathF.Round((float)(global - 1) * 100, MidpointRounding.AwayFromZero)}%");
}
- foreach (var modifier in comp.Modifiers)
+ foreach (var modifier in modifiers)
{
if (modifier.Value == 1)
continue;
diff --git a/Content.Shared/_CP14/ResearchTable/CP14ResearchTableComponent.cs b/Content.Shared/_CP14/ResearchTable/CP14ResearchTableComponent.cs
new file mode 100644
index 0000000000..6cb4016a13
--- /dev/null
+++ b/Content.Shared/_CP14/ResearchTable/CP14ResearchTableComponent.cs
@@ -0,0 +1,17 @@
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared._CP14.ResearchTable;
+
+[RegisterComponent, NetworkedComponent]
+public sealed partial class CP14ResearchTableComponent : Component
+{
+ [DataField]
+ public float ResearchSpeed = 3f;
+
+ [DataField]
+ public float ResearchRadius = 0.5f;
+
+ [DataField]
+ public SoundSpecifier ResearchSound = new SoundCollectionSpecifier("PaperScribbles");
+}
diff --git a/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs b/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs
new file mode 100644
index 0000000000..04c032a6ea
--- /dev/null
+++ b/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs
@@ -0,0 +1,19 @@
+using Content.Shared._CP14.Skill.Prototypes;
+using Content.Shared.DoAfter;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._CP14.ResearchTable;
+
+public abstract class CP14SharedResearchSystem : EntitySystem
+{
+}
+
+[Serializable, NetSerializable]
+public sealed partial class CP14ResearchDoAfterEvent : DoAfterEvent
+{
+ [DataField(required: true)]
+ public ProtoId Skill = default!;
+
+ public override DoAfterEvent Clone() => this;
+}
diff --git a/Content.Shared/_CP14/Skill/CP14LearnSkillsSpecial.cs b/Content.Shared/_CP14/Skill/CP14LearnSkillsSpecial.cs
new file mode 100644
index 0000000000..43d938ea4a
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/CP14LearnSkillsSpecial.cs
@@ -0,0 +1,22 @@
+using Content.Shared._CP14.Skill.Prototypes;
+using Content.Shared.Roles;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._CP14.Skill;
+
+public sealed partial class CP14LearnSkillsSpecial : JobSpecial
+{
+ [DataField]
+ public HashSet> Skills { get; private set; } = new();
+
+ public override void AfterEquip(EntityUid mob)
+ {
+ var entMan = IoCManager.Resolve();
+ var skillSys = entMan.System();
+
+ foreach (var skill in Skills)
+ {
+ skillSys.TryAddSkill(mob, skill);
+ }
+ }
+}
diff --git a/Content.Shared/_CP14/Skill/CP14ResearchTableUI.cs b/Content.Shared/_CP14/Skill/CP14ResearchTableUI.cs
new file mode 100644
index 0000000000..e3f41a59bc
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/CP14ResearchTableUI.cs
@@ -0,0 +1,61 @@
+using Content.Shared._CP14.Skill.Prototypes;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._CP14.Skill;
+
+[Serializable, NetSerializable]
+public enum CP14ResearchTableUiKey
+{
+ Key,
+}
+
+[Serializable, NetSerializable]
+public sealed class CP14ResearchMessage(ProtoId skill) : BoundUserInterfaceMessage
+{
+ public readonly ProtoId Skill = skill;
+}
+
+
+[Serializable, NetSerializable]
+public sealed class CP14ResearchTableUiState(List skills) : BoundUserInterfaceState
+{
+ public readonly List Skills = skills;
+}
+
+[Serializable, NetSerializable]
+public readonly struct CP14ResearchUiEntry(ProtoId protoId, bool craftable) : IEquatable
+{
+ public readonly ProtoId ProtoId = protoId;
+ public readonly bool Craftable = craftable;
+
+ public int CompareTo(CP14ResearchUiEntry other)
+ {
+ return Craftable.CompareTo(other.Craftable);
+ }
+
+ public override bool Equals(object? obj)
+ {
+ return obj is CP14ResearchUiEntry other && Equals(other);
+ }
+
+ public bool Equals(CP14ResearchUiEntry other)
+ {
+ return ProtoId.Id == other.ProtoId.Id;
+ }
+
+ public override int GetHashCode()
+ {
+ return HashCode.Combine(ProtoId, Craftable);
+ }
+
+ public override string ToString()
+ {
+ return $"{ProtoId} ({Craftable})";
+ }
+
+ public static int CompareTo(CP14ResearchUiEntry left, CP14ResearchUiEntry right)
+ {
+ return right.CompareTo(left);
+ }
+}
diff --git a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs
index 6f5af04582..96d7a78130 100644
--- a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs
+++ b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs
@@ -1,3 +1,5 @@
+using System.Linq;
+using System.Text;
using Content.Shared._CP14.Skill.Components;
using Content.Shared._CP14.Skill.Prototypes;
using Content.Shared.FixedPoint;
@@ -7,12 +9,16 @@ namespace Content.Shared._CP14.Skill;
public abstract partial class CP14SharedSkillSystem : EntitySystem
{
+ private EntityQuery _skillStorageQuery = default!;
public override void Initialize()
{
base.Initialize();
+ _skillStorageQuery = GetEntityQuery();
+
InitializeAdmin();
+ InitializeChecks();
}
///
@@ -31,15 +37,19 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!_proto.TryIndex(skill, out var indexedSkill))
return false;
- if (indexedSkill.Effect is not null)
+ foreach (var effect in indexedSkill.Effects)
{
- indexedSkill.Effect.AddSkill(EntityManager, target);
+ effect.AddSkill(EntityManager, target);
}
component.SkillsSumExperience += indexedSkill.LearnCost;
component.LearnedSkills.Add(skill);
Dirty(target, component);
+
+ var learnEv = new CP14SkillLearnedEvent(skill, target);
+ RaiseLocalEvent(target, ref learnEv);
+
return true;
}
@@ -59,9 +69,9 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!_proto.TryIndex(skill, out var indexedSkill))
return false;
- if (indexedSkill.Effect is not null)
+ foreach (var effect in indexedSkill.Effects)
{
- indexedSkill.Effect.RemoveSkill(EntityManager, target);
+ effect.RemoveSkill(EntityManager, target);
}
component.SkillsSumExperience -= indexedSkill.LearnCost;
@@ -83,55 +93,6 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
return component.LearnedSkills.Contains(skill);
}
- ///
- /// Adds experience to the specified skill tree for the player.
- ///
- public bool TryAddExperience(EntityUid target,
- ProtoId tree,
- FixedPoint2 exp,
- CP14SkillStorageComponent? component = null)
- {
- if (!Resolve(target, ref component, false))
- return false;
-
- if (component.Progress.TryGetValue(tree, out var currentExp))
- {
- // If the tree already exists, add experience to it
- component.Progress[tree] = currentExp + exp;
- }
- else
- {
- // If the tree doesn't exist, initialize it with the experience
- component.Progress[tree] = exp;
- }
-
- Dirty(target, component);
- return true;
- }
-
- ///
- /// Removes experience from the specified skill tree for the player.
- ///
- public bool TryRemoveExperience(EntityUid target,
- ProtoId tree,
- FixedPoint2 exp,
- CP14SkillStorageComponent? component = null)
- {
- if (!Resolve(target, ref component, false))
- return false;
-
- if (!component.Progress.TryGetValue(tree, out var currentExp))
- return false;
-
- if (currentExp < exp)
- return false;
-
- component.Progress[tree] = FixedPoint2.Max(0, component.Progress[tree] - exp);
-
- Dirty(target, component);
- return true;
- }
-
///
/// Checks if the player can learn the specified skill.
///
@@ -158,12 +119,6 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!AllowedToLearn(target, skill, component))
return false;
- //Experience check
- if (!component.Progress.TryGetValue(skill.Tree, out var currentExp))
- return false;
- if (currentExp < skill.LearnCost)
- return false;
-
return true;
}
@@ -182,13 +137,13 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
return false;
//Check max cap
- if (component.SkillsSumExperience + skill.LearnCost >= component.ExperienceMaxCap)
+ if (component.SkillsSumExperience + skill.LearnCost > component.ExperienceMaxCap)
return false;
//Restrictions check
foreach (var req in skill.Restrictions)
{
- if (!req.Check(EntityManager, target))
+ if (!req.Check(EntityManager, target, skill))
return false;
}
@@ -205,15 +160,9 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!Resolve(target, ref component, false))
return false;
- if (!_proto.TryIndex(skill, out var indexedSkill))
- return false;
-
if (!CanLearnSkill(target, skill, component))
return false;
- if (!TryRemoveExperience(target, indexedSkill.Tree, indexedSkill.LearnCost, component))
- return false;
-
if (!TryAddSkill(target, skill, component))
return false;
@@ -228,11 +177,11 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!_proto.TryIndex(skill, out var indexedSkill))
return string.Empty;
- if (indexedSkill.Name != null)
+ if (indexedSkill.Name is not null)
return Loc.GetString(indexedSkill.Name);
- if (indexedSkill.Effect != null)
- return indexedSkill.Effect.GetName(EntityManager, _proto) ?? string.Empty;
+ if (indexedSkill.Effects.Count > 0)
+ return indexedSkill.Effects.First().GetName(EntityManager, _proto) ?? string.Empty;
return string.Empty;
}
@@ -245,12 +194,19 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem
if (!_proto.TryIndex(skill, out var indexedSkill))
return string.Empty;
- if (indexedSkill.Desc != null)
+ if (indexedSkill.Desc is not null)
return Loc.GetString(indexedSkill.Desc);
- if (indexedSkill.Effect != null)
- return indexedSkill.Effect.GetDescription(EntityManager, _proto) ?? string.Empty;
+ var sb = new StringBuilder();
- return string.Empty;
+ foreach (var effect in indexedSkill.Effects)
+ {
+ sb.Append(effect.GetDescription(EntityManager, _proto, skill) + "\n");
+ }
+
+ return sb.ToString();
}
}
+
+[ByRefEvent]
+public record struct CP14SkillLearnedEvent(ProtoId Skill, EntityUid User);
diff --git a/Content.Shared/_CP14/Skill/CP14SkillSystem.Admin.cs b/Content.Shared/_CP14/Skill/CP14SkillSystem.Admin.cs
index 3b0813371d..dd49da8b2b 100644
--- a/Content.Shared/_CP14/Skill/CP14SkillSystem.Admin.cs
+++ b/Content.Shared/_CP14/Skill/CP14SkillSystem.Admin.cs
@@ -50,27 +50,6 @@ public abstract partial class CP14SharedSkillSystem
var target = args.Target;
- //Add skill points
- foreach (var tree in _allTrees)
- {
- FixedPoint2 current = 0;
- ent.Comp.Progress.TryGetValue(tree, out current);
-
- var name = Loc.GetString(tree.Name);
- args.Verbs.Add(new Verb
- {
- Text = name,
- Message = $"{name} EXP {current} -> {current + 1}",
- Category = VerbCategory.CP14AdminSkillAdd,
- Icon = tree.Icon,
- Act = () =>
- {
- TryAddExperience(target, tree.ID, 1);
- },
- Priority = 2,
- });
- }
-
//Add Skill
foreach (var skill in _allSkills)
{
@@ -91,30 +70,6 @@ public abstract partial class CP14SharedSkillSystem
});
}
- //Remove skill points
- foreach (var tree in _allTrees)
- {
- FixedPoint2 current = 0;
- ent.Comp.Progress.TryGetValue(tree, out current);
-
- if (current < 1)
- continue;
-
- var name = Loc.GetString(tree.Name);
- args.Verbs.Add(new Verb
- {
- Text = name,
- Message = $"{name} EXP {current} -> {current - 1}",
- Category = VerbCategory.CP14AdminSkillRemove,
- Icon = tree.Icon,
- Act = () =>
- {
- TryRemoveExperience(target, tree.ID, 1);
- },
- Priority = 2,
- });
- }
-
//Remove Skill
foreach (var skill in ent.Comp.LearnedSkills)
{
diff --git a/Content.Shared/_CP14/Skill/CP14SkillSystem.Checks.cs b/Content.Shared/_CP14/Skill/CP14SkillSystem.Checks.cs
new file mode 100644
index 0000000000..dbfa66e89e
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/CP14SkillSystem.Checks.cs
@@ -0,0 +1,75 @@
+using System.Text;
+using Content.Shared._CP14.Skill.Components;
+using Content.Shared.Damage;
+using Content.Shared.Examine;
+using Content.Shared.Hands.EntitySystems;
+using Content.Shared.Popups;
+using Content.Shared.Throwing;
+using Content.Shared.Weapons.Melee.Events;
+using Robust.Shared.Network;
+using Robust.Shared.Random;
+
+namespace Content.Shared._CP14.Skill;
+
+public abstract partial class CP14SharedSkillSystem
+{
+ [Dependency] private readonly ThrowingSystem _throwing = default!;
+ [Dependency] private readonly INetManager _net = default!;
+ [Dependency] private readonly IRobustRandom _random = default!;
+ [Dependency] private readonly SharedHandsSystem _hands = default!;
+ [Dependency] private readonly DamageableSystem _damageable = default!;
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
+ private void InitializeChecks()
+ {
+ SubscribeLocalEvent(OnMeleeAttack);
+ SubscribeLocalEvent(OnExamined);
+ }
+
+ private void OnExamined(Entity ent, ref ExaminedEvent args)
+ {
+ var sb = new StringBuilder();
+ sb.Append(Loc.GetString("cp14-skill-issue-title") + "\n");
+
+ foreach (var skill in ent.Comp.Skills)
+ {
+ if (!_proto.TryIndex(skill, out var indexedSkill))
+ continue;
+
+ if (indexedSkill.Name is null)
+ continue;
+
+ var color = HaveSkill(args.Examiner, skill) ? Color.LimeGreen.ToHex() : Color.Red.ToHex();
+ sb.Append($"[color={color}] - {Loc.GetString(indexedSkill.Name)} [/color]\n");
+ }
+ args.PushMarkup(sb.ToString());
+ }
+
+ private void OnMeleeAttack(Entity ent, ref MeleeHitEvent args)
+ {
+ if (!_skillStorageQuery.TryComp(args.User, out var skillStorage))
+ return;
+
+ var passed = true;
+ foreach (var reqSkill in ent.Comp.Skills)
+ {
+ if (!skillStorage.LearnedSkills.Contains(reqSkill))
+ {
+ passed = false;
+ break;
+ }
+ }
+
+ args.BonusDamage *= ent.Comp.DamageMultiplier;
+
+ if (_net.IsClient)
+ return;
+
+ if (passed || !_random.Prob(ent.Comp.DropProbability))
+ return;
+
+ _hands.TryDrop(args.User, ent);
+ _throwing.TryThrow(ent, _random.NextAngle().ToWorldVec() * 2, 2f, args.User);
+ _damageable.TryChangeDamage(args.User, args.BaseDamage);
+ _popup.PopupEntity(Loc.GetString("cp14-skill-issue"), args.User, args.User, PopupType.Medium);
+ }
+}
diff --git a/Content.Shared/_CP14/Skill/CP14SkillSystem.Learning.cs b/Content.Shared/_CP14/Skill/CP14SkillSystem.Learning.cs
deleted file mode 100644
index 68bf7d4970..0000000000
--- a/Content.Shared/_CP14/Skill/CP14SkillSystem.Learning.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using Content.Shared._CP14.Skill.Components;
-using Content.Shared._CP14.Skill.Prototypes;
-using Content.Shared.Bed.Sleep;
-using Content.Shared.Examine;
-using Content.Shared.FixedPoint;
-using Content.Shared.Mobs.Components;
-using Content.Shared.Mobs.Systems;
-using Robust.Shared.Map;
-using Robust.Shared.Prototypes;
-
-namespace Content.Shared._CP14.Skill;
-
-public abstract partial class CP14SharedSkillSystem
-{
- [Dependency] private readonly EntityLookupSystem _lookup = default!;
- [Dependency] private readonly ExamineSystemShared _examine = default!;
- [Dependency] private readonly MobStateSystem _mobState = default!;
-
- public void GiveExperienceInRadius(EntityCoordinates position, ProtoId tree, FixedPoint2 points, float radius = 5)
- {
- var entities = _lookup.GetEntitiesInRange(position, radius, LookupFlags.Uncontained);
-
- foreach (var ent in entities)
- {
- //Cant learn if the position is not in range or obstructed
- if (!_examine.InRangeUnOccluded(ent, position, radius))
- continue;
-
- //Cant learn when dead
- if (TryComp(ent, out var mobState) && !_mobState.IsAlive(ent, mobState))
- continue;
-
- //Cant learn if the entity is sleeping
- if (HasComp(ent))
- continue;
-
- TryAddExperience(ent, tree, points);
- }
- }
-
- public void GiveExperienceInRadius(EntityUid uid,
- ProtoId tree,
- FixedPoint2 points,
- float radius = 5)
- {
- GiveExperienceInRadius(Transform(uid).Coordinates, tree, points, radius);
- }
-}
diff --git a/Content.Shared/_CP14/Skill/Components/CP14MeleeWeaponSkillRequiredComponent.cs b/Content.Shared/_CP14/Skill/Components/CP14MeleeWeaponSkillRequiredComponent.cs
new file mode 100644
index 0000000000..3f4557dc79
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/Components/CP14MeleeWeaponSkillRequiredComponent.cs
@@ -0,0 +1,31 @@
+using Content.Shared._CP14.Skill.Prototypes;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._CP14.Skill.Components;
+
+///
+/// Component that stores the skills learned by a player and their progress in the skill trees.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)]
+[Access(typeof(CP14SharedSkillSystem))]
+public sealed partial class CP14MeleeWeaponSkillRequiredComponent : Component
+{
+ ///
+ /// What skills does a character have to have to use this weapon?
+ ///
+ [DataField, AutoNetworkedField]
+ public HashSet> Skills = new();
+
+ ///
+ /// The chances of dropping a weapon from your hands if the required skills are not learned by the character.
+ ///
+ [DataField, AutoNetworkedField]
+ public float DropProbability = 0.5f;
+
+ ///
+ /// Reduces outgoing damage if the required skills are not learned by the character
+ ///
+ [DataField, AutoNetworkedField]
+ public float DamageMultiplier = 0.5f;
+}
diff --git a/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs b/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs
index cd0f783885..84386b4a98 100644
--- a/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs
+++ b/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs
@@ -1,3 +1,4 @@
+using Content.Shared._CP14.ResearchTable;
using Content.Shared._CP14.Skill.Prototypes;
using Content.Shared.FixedPoint;
using Robust.Shared.GameStates;
@@ -10,29 +11,29 @@ namespace Content.Shared._CP14.Skill.Components;
/// Component that stores the skills learned by a player and their progress in the skill trees.
///
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)]
-[Access(typeof(CP14SharedSkillSystem))]
+[Access(typeof(CP14SharedSkillSystem), typeof(CP14SharedResearchSystem))]
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();
+
///
/// The number of experience points spent on skills. Technically this could be calculated via LearnedSkills, but this is a cached value for optimization.
///
[DataField, AutoNetworkedField]
public FixedPoint2 SkillsSumExperience = 0;
- ///
- /// Keeps track of progress points in the knowledge areas available to the player. Important: The absence of a specific area means that the player CANNOT progress in that area.
- ///
- [DataField, AutoNetworkedField]
- public Dictionary, FixedPoint2> Progress = new();
-
///
/// The maximum ceiling of experience points that can be spent on learning skills. Not tied to a category.
///
[DataField, AutoNetworkedField]
- public FixedPoint2 ExperienceMaxCap = 10;
+ public FixedPoint2 ExperienceMaxCap = 5;
}
///
diff --git a/Content.Shared/_CP14/Skill/Effects/AddAction.cs b/Content.Shared/_CP14/Skill/Effects/AddAction.cs
index 1272ff51a4..76aaec59cb 100644
--- a/Content.Shared/_CP14/Skill/Effects/AddAction.cs
+++ b/Content.Shared/_CP14/Skill/Effects/AddAction.cs
@@ -1,3 +1,4 @@
+using Content.Shared._CP14.Skill.Prototypes;
using Content.Shared.Actions;
using Robust.Shared.Prototypes;
@@ -39,7 +40,7 @@ public sealed partial class AddAction : CP14SkillEffect
return !protoManager.TryIndex(Action, out var indexedAction) ? string.Empty : indexedAction.Name;
}
- public override string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager)
+ public override string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager, ProtoId skill)
{
return !protoManager.TryIndex(Action, out var indexedAction) ? string.Empty : indexedAction.Description;
}
diff --git a/Content.Shared/_CP14/Skill/Effects/AddComponents.cs b/Content.Shared/_CP14/Skill/Effects/AddComponents.cs
new file mode 100644
index 0000000000..851a5dda7d
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/Effects/AddComponents.cs
@@ -0,0 +1,31 @@
+
+using Content.Shared._CP14.Skill.Prototypes;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._CP14.Skill.Effects;
+
+public sealed partial class AddComponents : CP14SkillEffect
+{
+ [DataField(required: true)]
+ public ComponentRegistry Components = new();
+
+ public override void AddSkill(IEntityManager entManager, EntityUid target)
+ {
+ entManager.AddComponents(target, Components);
+ }
+
+ public override void RemoveSkill(IEntityManager entManager, EntityUid target)
+ {
+ entManager.RemoveComponents(target, Components);
+ }
+
+ public override string? GetName(IEntityManager entMagager, IPrototypeManager protoManager)
+ {
+ return null;
+ }
+
+ public override string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager, ProtoId skill)
+ {
+ return null;
+ }
+}
diff --git a/Content.Shared/_CP14/Skill/Effects/AddMaxMana.cs b/Content.Shared/_CP14/Skill/Effects/AddMaxMana.cs
new file mode 100644
index 0000000000..7fc05e438c
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/Effects/AddMaxMana.cs
@@ -0,0 +1,33 @@
+using Content.Shared._CP14.MagicEnergy;
+using Content.Shared._CP14.Skill.Prototypes;
+using Content.Shared.FixedPoint;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._CP14.Skill.Effects;
+
+public sealed partial class AddManaMax : CP14SkillEffect
+{
+ [DataField]
+ public FixedPoint2 AdditionalMana = 0;
+ public override void AddSkill(IEntityManager entManager, EntityUid target)
+ {
+ var magicSystem = entManager.System();
+ magicSystem.ChangeMaximumEnergy(target, AdditionalMana);
+ }
+
+ public override void RemoveSkill(IEntityManager entManager, EntityUid target)
+ {
+ var magicSystem = entManager.System();
+ magicSystem.ChangeMaximumEnergy(target, -AdditionalMana);
+ }
+
+ public override string? GetName(IEntityManager entMagager, IPrototypeManager protoManager)
+ {
+ return null;
+ }
+
+ public override string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager, ProtoId skill)
+ {
+ return Loc.GetString("cp14-skill-desc-add-mana", ("mana", AdditionalMana.ToString()));
+ }
+}
diff --git a/Content.Shared/_CP14/Skill/Effects/CP14SkillEffect.cs b/Content.Shared/_CP14/Skill/Effects/CP14SkillEffect.cs
index 63e4a617c6..0bcf0719ff 100644
--- a/Content.Shared/_CP14/Skill/Effects/CP14SkillEffect.cs
+++ b/Content.Shared/_CP14/Skill/Effects/CP14SkillEffect.cs
@@ -1,3 +1,4 @@
+using Content.Shared._CP14.Skill.Prototypes;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
@@ -13,5 +14,5 @@ public abstract partial class CP14SkillEffect
public abstract string? GetName(IEntityManager entMagager, IPrototypeManager protoManager);
- public abstract string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager);
+ public abstract string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager, ProtoId skill);
}
diff --git a/Content.Shared/_CP14/Skill/Effects/ModifyManacost.cs b/Content.Shared/_CP14/Skill/Effects/ModifyManacost.cs
new file mode 100644
index 0000000000..dc684d1ae0
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/Effects/ModifyManacost.cs
@@ -0,0 +1,78 @@
+using System.Text;
+using Content.Shared._CP14.MagicManacostModify;
+using Content.Shared._CP14.MagicRitual.Prototypes;
+using Content.Shared._CP14.Skill.Prototypes;
+using Content.Shared.FixedPoint;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._CP14.Skill.Effects;
+
+public sealed partial class ModifyManacost : CP14SkillEffect
+{
+ [DataField]
+ public FixedPoint2 Global = 0f;
+
+ [DataField]
+ public Dictionary, FixedPoint2> Modifiers = new();
+
+ public override void AddSkill(IEntityManager entManager, EntityUid target)
+ {
+ entManager.EnsureComponent(target, out var magicEffectManaCost);
+
+ foreach (var (magicType, modifier) in Modifiers)
+ {
+ if (!magicEffectManaCost.Modifiers.ContainsKey(magicType))
+ magicEffectManaCost.Modifiers.Add(magicType, 1 + modifier);
+ else
+ magicEffectManaCost.Modifiers[magicType] += modifier;
+ }
+ magicEffectManaCost.GlobalModifier += Global;
+ }
+
+ public override void RemoveSkill(IEntityManager entManager, EntityUid target)
+ {
+ entManager.EnsureComponent(target, out var magicEffectManaCost);
+
+ foreach (var (magicType, modifier) in Modifiers)
+ {
+ if (!magicEffectManaCost.Modifiers.ContainsKey(magicType))
+ continue;
+
+ magicEffectManaCost.Modifiers[magicType] -= modifier;
+ if (magicEffectManaCost.Modifiers[magicType] <= 0)
+ magicEffectManaCost.Modifiers.Remove(magicType);
+ }
+ magicEffectManaCost.GlobalModifier -= Global;
+ }
+
+ public override string? GetName(IEntityManager entMagager, IPrototypeManager protoManager)
+ {
+ return null;
+ }
+
+ public override string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager, ProtoId skill)
+ {
+ var sb = new StringBuilder();
+ sb.Append(Loc.GetString("cp14-clothing-magic-examine")+"\n");
+
+ if (Global != 0)
+ {
+
+ var plus = (float)Global > 0 ? "+" : "";
+ sb.Append(
+ $"{Loc.GetString("cp14-clothing-magic-global")}: {plus}{MathF.Round((float)Global * 100, MidpointRounding.AwayFromZero)}%\n");
+ }
+
+ foreach (var modifier in Modifiers)
+ {
+ if (modifier.Value == 0)
+ continue;
+
+ var plus = modifier.Value > 1 ? "+" : "";
+ var indexedType = protoManager.Index(modifier.Key);
+ sb.Append($"- [color={indexedType.Color.ToHex()}]{Loc.GetString(indexedType.Name)}[/color]: {plus}{modifier.Value*100}%");
+ }
+
+ return sb.ToString();
+ }
+}
diff --git a/Content.Shared/_CP14/Skill/Effects/ReplaceAction.cs b/Content.Shared/_CP14/Skill/Effects/ReplaceAction.cs
index 75cc01192b..5b6b1253e6 100644
--- a/Content.Shared/_CP14/Skill/Effects/ReplaceAction.cs
+++ b/Content.Shared/_CP14/Skill/Effects/ReplaceAction.cs
@@ -1,3 +1,4 @@
+using Content.Shared._CP14.Skill.Prototypes;
using Content.Shared.Actions;
using Robust.Shared.Prototypes;
@@ -62,7 +63,7 @@ public sealed partial class ReplaceAction : CP14SkillEffect
return !protoManager.TryIndex(NewAction, out var indexedAction) ? string.Empty : indexedAction.Name;
}
- public override string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager)
+ public override string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager, ProtoId skill)
{
return !protoManager.TryIndex(NewAction, out var indexedAction) ? string.Empty : indexedAction.Description;
}
diff --git a/Content.Shared/_CP14/Skill/Effects/UnlockRecipes.cs b/Content.Shared/_CP14/Skill/Effects/UnlockRecipes.cs
new file mode 100644
index 0000000000..0d77836b49
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/Effects/UnlockRecipes.cs
@@ -0,0 +1,65 @@
+using System.Text;
+using Content.Shared._CP14.Skill.Prototypes;
+using Content.Shared._CP14.Workbench.Prototypes;
+using Content.Shared._CP14.Workbench.Requirements;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._CP14.Skill.Effects;
+
+///
+/// This effect only exists for parsing the description.
+///
+public sealed partial class UnlockRecipes : CP14SkillEffect
+{
+ public override void AddSkill(IEntityManager entManager, EntityUid target)
+ {
+ //
+ }
+
+ public override void RemoveSkill(IEntityManager entManager, EntityUid target)
+ {
+ //
+ }
+
+ public override string? GetName(IEntityManager entMagager, IPrototypeManager protoManager)
+ {
+ return null;
+ }
+
+ public override string? GetDescription(IEntityManager entMagager, IPrototypeManager protoManager, ProtoId skill)
+ {
+ var allRecipes = protoManager.EnumeratePrototypes();
+
+ var sb = new StringBuilder();
+ sb.Append(Loc.GetString("cp14-skill-desc-unlock-recipes") + "\n");
+
+ var affectedRecipes = new List();
+ foreach (var recipe in allRecipes)
+ {
+ foreach (var req in recipe.Requirements)
+ {
+ switch (req)
+ {
+ case SkillRequired skillReq:
+ foreach (var skillReqSkill in skillReq.Skills)
+ {
+ if (skillReqSkill == skill)
+ {
+ affectedRecipes.Add(recipe);
+ break;
+ }
+ }
+ break;
+ }
+ }
+ }
+ foreach (var recipe in affectedRecipes)
+ {
+ if (!protoManager.TryIndex(recipe.Result, out var indexedResult))
+ continue;
+ sb.Append("- " + indexedResult.Name + "\n");
+ }
+
+ return sb.ToString();
+ }
+}
diff --git a/Content.Shared/_CP14/Skill/Prototypes/CP14SkillPrototype.cs b/Content.Shared/_CP14/Skill/Prototypes/CP14SkillPrototype.cs
index e7903889f3..19290a36c0 100644
--- a/Content.Shared/_CP14/Skill/Prototypes/CP14SkillPrototype.cs
+++ b/Content.Shared/_CP14/Skill/Prototypes/CP14SkillPrototype.cs
@@ -18,13 +18,13 @@ public sealed partial class CP14SkillPrototype : IPrototype
/// Skill Title. If you leave null, the name will try to generate from Effect.GetName()
///
[DataField]
- public LocId? Name;
+ public LocId? Name = null;
///
/// Skill Description. If you leave null, the description will try to generate from Effect.GetDescription()
///
[DataField]
- public LocId? Desc;
+ public LocId? Desc = null;
///
/// The tree this skill belongs to. This is used to group skills together in the UI.
@@ -55,7 +55,7 @@ public sealed partial class CP14SkillPrototype : IPrototype
/// But the presence of the skill itself can affect some systems that check for the presence of certain skills.
///
[DataField]
- public CP14SkillEffect? Effect;
+ public List Effects = new();
///
/// Skill restriction. Limiters on learning. Any reason why a player cannot learn this skill.
diff --git a/Content.Shared/_CP14/Skill/Restrictions/CP14SkillRestriction.cs b/Content.Shared/_CP14/Skill/Restrictions/CP14SkillRestriction.cs
index 01dda44d74..17907343aa 100644
--- a/Content.Shared/_CP14/Skill/Restrictions/CP14SkillRestriction.cs
+++ b/Content.Shared/_CP14/Skill/Restrictions/CP14SkillRestriction.cs
@@ -1,3 +1,4 @@
+using Content.Shared._CP14.Skill.Prototypes;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
@@ -7,7 +8,7 @@ namespace Content.Shared._CP14.Skill.Restrictions;
[MeansImplicitUse]
public abstract partial class CP14SkillRestriction
{
- public abstract bool Check(IEntityManager entManager, EntityUid target);
+ public abstract bool Check(IEntityManager entManager, EntityUid target, CP14SkillPrototype skill);
public abstract string GetDescription(IEntityManager entManager, IPrototypeManager protoManager);
}
diff --git a/Content.Shared/_CP14/Skill/Restrictions/Impossible.cs b/Content.Shared/_CP14/Skill/Restrictions/Impossible.cs
new file mode 100644
index 0000000000..38707056c4
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/Restrictions/Impossible.cs
@@ -0,0 +1,18 @@
+using Content.Shared._CP14.Skill.Components;
+using Content.Shared._CP14.Skill.Prototypes;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared._CP14.Skill.Restrictions;
+
+public sealed partial class Impossible : CP14SkillRestriction
+{
+ public override bool Check(IEntityManager entManager, EntityUid target, CP14SkillPrototype skill)
+ {
+ return false;
+ }
+
+ public override string GetDescription(IEntityManager entManager, IPrototypeManager protoManager)
+ {
+ return Loc.GetString("cp14-skill-req-impossible");
+ }
+}
diff --git a/Content.Shared/_CP14/Skill/Restrictions/NeedPrerequisite.cs b/Content.Shared/_CP14/Skill/Restrictions/NeedPrerequisite.cs
index 629706b8f1..3f68e78899 100644
--- a/Content.Shared/_CP14/Skill/Restrictions/NeedPrerequisite.cs
+++ b/Content.Shared/_CP14/Skill/Restrictions/NeedPrerequisite.cs
@@ -9,7 +9,7 @@ public sealed partial class NeedPrerequisite : CP14SkillRestriction
[DataField(required: true)]
public ProtoId Prerequisite = new();
- public override bool Check(IEntityManager entManager, EntityUid target)
+ public override bool Check(IEntityManager entManager, EntityUid target, CP14SkillPrototype skill)
{
if (!entManager.TryGetComponent(target, out var skillStorage))
return false;
diff --git a/Content.Shared/_CP14/Skill/Restrictions/Researched.cs b/Content.Shared/_CP14/Skill/Restrictions/Researched.cs
new file mode 100644
index 0000000000..db1ee222bc
--- /dev/null
+++ b/Content.Shared/_CP14/Skill/Restrictions/Researched.cs
@@ -0,0 +1,26 @@
+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/Content.Shared/_CP14/Skill/Restrictions/SpeciesWhitelist.cs b/Content.Shared/_CP14/Skill/Restrictions/SpeciesWhitelist.cs
index cc8b21a404..d46b8c2b36 100644
--- a/Content.Shared/_CP14/Skill/Restrictions/SpeciesWhitelist.cs
+++ b/Content.Shared/_CP14/Skill/Restrictions/SpeciesWhitelist.cs
@@ -1,3 +1,4 @@
+using Content.Shared._CP14.Skill.Prototypes;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Prototypes;
using Robust.Shared.Prototypes;
@@ -9,7 +10,7 @@ public sealed partial class SpeciesWhitelist : CP14SkillRestriction
[DataField(required: true)]
public ProtoId Species = new();
- public override bool Check(IEntityManager entManager, EntityUid target)
+ public override bool Check(IEntityManager entManager, EntityUid target, CP14SkillPrototype skill)
{
if (!entManager.TryGetComponent(target, out var appearance))
return false;
diff --git a/Content.Shared/_CP14/Workbench/SharedCP14WorkbenchSystem.cs b/Content.Shared/_CP14/Workbench/CP14SharedWorkbenchSystem.cs
similarity index 90%
rename from Content.Shared/_CP14/Workbench/SharedCP14WorkbenchSystem.cs
rename to Content.Shared/_CP14/Workbench/CP14SharedWorkbenchSystem.cs
index 639d42cc10..cc9e7d2ec5 100644
--- a/Content.Shared/_CP14/Workbench/SharedCP14WorkbenchSystem.cs
+++ b/Content.Shared/_CP14/Workbench/CP14SharedWorkbenchSystem.cs
@@ -10,7 +10,7 @@ using Robust.Shared.Serialization;
namespace Content.Shared._CP14.Workbench;
-public abstract class SharedCP14WorkbenchSystem : EntitySystem
+public abstract class CP14SharedWorkbenchSystem : EntitySystem
{
}
diff --git a/Content.Shared/_CP14/Workbench/Requirements/MaterialResource.cs b/Content.Shared/_CP14/Workbench/Requirements/MaterialResource.cs
index d0b96a0c14..374eaff14e 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/MaterialResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/MaterialResource.cs
@@ -26,8 +26,7 @@ public sealed partial class MaterialResource : CP14WorkbenchCraftRequirement
EntityManager entManager,
IPrototypeManager protoManager,
HashSet placedEntities,
- EntityUid user,
- CP14WorkbenchRecipePrototype recipe)
+ EntityUid user)
{
var count = 0;
foreach (var ent in placedEntities)
diff --git a/Content.Shared/_CP14/Workbench/Requirements/ProtoIdResource.cs b/Content.Shared/_CP14/Workbench/Requirements/ProtoIdResource.cs
index 6c714ace0a..02bf018204 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/ProtoIdResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/ProtoIdResource.cs
@@ -22,8 +22,7 @@ public sealed partial class ProtoIdResource : CP14WorkbenchCraftRequirement
public override bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
HashSet placedEntities,
- EntityUid user,
- CP14WorkbenchRecipePrototype recipe)
+ EntityUid user)
{
var indexedIngredients = IndexIngredients(entManager, placedEntities);
diff --git a/Content.Shared/_CP14/Workbench/Requirements/KnowledgeRequired.cs b/Content.Shared/_CP14/Workbench/Requirements/SkillRequired.cs
similarity index 95%
rename from Content.Shared/_CP14/Workbench/Requirements/KnowledgeRequired.cs
rename to Content.Shared/_CP14/Workbench/Requirements/SkillRequired.cs
index c814e6535d..4da4b2c9ca 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/KnowledgeRequired.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/SkillRequired.cs
@@ -16,8 +16,7 @@ public sealed partial class SkillRequired : CP14WorkbenchCraftRequirement
public override bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
HashSet placedEntities,
- EntityUid user,
- CP14WorkbenchRecipePrototype recipe)
+ EntityUid user)
{
var knowledgeSystem = entManager.System();
diff --git a/Content.Shared/_CP14/Workbench/Requirements/StackGroupResource.cs b/Content.Shared/_CP14/Workbench/Requirements/StackGroupResource.cs
index a6ed0e43b8..1f1b52d7fa 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/StackGroupResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/StackGroupResource.cs
@@ -23,8 +23,7 @@ public sealed partial class StackGroupResource : CP14WorkbenchCraftRequirement
public override bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
HashSet placedEntities,
- EntityUid user,
- CP14WorkbenchRecipePrototype recipe)
+ EntityUid user)
{
if (!protoManager.TryIndex(Group, out var indexedGroup))
return false;
diff --git a/Content.Shared/_CP14/Workbench/Requirements/StackResource.cs b/Content.Shared/_CP14/Workbench/Requirements/StackResource.cs
index ce67cff95a..80ead44718 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/StackResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/StackResource.cs
@@ -23,8 +23,7 @@ public sealed partial class StackResource : CP14WorkbenchCraftRequirement
public override bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
HashSet placedEntities,
- EntityUid user,
- CP14WorkbenchRecipePrototype recipe)
+ EntityUid user)
{
var count = 0;
foreach (var ent in placedEntities)
diff --git a/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs b/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs
index 549a2e7756..e8849a9253 100644
--- a/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs
+++ b/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs
@@ -30,8 +30,7 @@ public sealed partial class TagResource : CP14WorkbenchCraftRequirement
EntityManager entManager,
IPrototypeManager protoManager,
HashSet placedEntities,
- EntityUid user,
- CP14WorkbenchRecipePrototype recipe)
+ EntityUid user)
{
var tagSystem = entManager.System();
diff --git a/Content.Shared/_CP14/Workbench/WorkbenchCraftRequirement.cs b/Content.Shared/_CP14/Workbench/WorkbenchCraftRequirement.cs
index f17d610071..6fe852e7c1 100644
--- a/Content.Shared/_CP14/Workbench/WorkbenchCraftRequirement.cs
+++ b/Content.Shared/_CP14/Workbench/WorkbenchCraftRequirement.cs
@@ -26,8 +26,7 @@ public abstract partial class CP14WorkbenchCraftRequirement
public abstract bool CheckRequirement(EntityManager entManager,
IPrototypeManager protoManager,
HashSet placedEntities,
- EntityUid user,
- CP14WorkbenchRecipePrototype recipe);
+ EntityUid user);
///
/// An event that is triggered after crafting. This is the place to put important things like removing items, spending stacks or other things.
diff --git a/Resources/Locale/en-US/_CP14/recipe/title.ftl b/Resources/Locale/en-US/_CP14/recipe/title.ftl
index 521dc40e6d..c68c080969 100644
--- a/Resources/Locale/en-US/_CP14/recipe/title.ftl
+++ b/Resources/Locale/en-US/_CP14/recipe/title.ftl
@@ -1 +1,2 @@
cp14-recipe-title-meat = various pieces of raw meat
+cp14-recipe-title-energy-crystal = energycrystals
diff --git a/Resources/Locale/en-US/_CP14/skill/requirements.ftl b/Resources/Locale/en-US/_CP14/skill/requirements.ftl
index c627b45b0e..e9756629bf 100644
--- a/Resources/Locale/en-US/_CP14/skill/requirements.ftl
+++ b/Resources/Locale/en-US/_CP14/skill/requirements.ftl
@@ -1,2 +1,4 @@
-cp14-skill-req-prerequisite = Skill "{$name}" must be learned.
-cp14-skill-req-species = Available only to species "{$name}"
\ No newline at end of file
+cp14-skill-req-prerequisite = Skill "{$name}" must be learned
+cp14-skill-req-species = You must be the race of “{$name}”
+cp14-skill-req-researched = A study needs to be done on the research table
+cp14-skill-req-impossible = Unable to explore during a round at the current moment
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_CP14/skill/skill_issue.ftl b/Resources/Locale/en-US/_CP14/skill/skill_issue.ftl
new file mode 100644
index 0000000000..b9c6cb1c8c
--- /dev/null
+++ b/Resources/Locale/en-US/_CP14/skill/skill_issue.ftl
@@ -0,0 +1,3 @@
+cp14-skill-issue-title = In order to use these weapons effectively, you need to have skill:
+
+cp14-skill-issue = Skill issue!
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_CP14/skill/skill_meta.ftl b/Resources/Locale/en-US/_CP14/skill/skill_meta.ftl
new file mode 100644
index 0000000000..50644b7e6e
--- /dev/null
+++ b/Resources/Locale/en-US/_CP14/skill/skill_meta.ftl
@@ -0,0 +1,34 @@
+cp14-skill-mastery-desc = Mastering the art of this weapon, you will no longer clumsily drop it or cut yourself.
+
+cp14-skill-sword-mastery-name = Sword mastery
+cp14-skill-parier-mastery-name = Rapier mastery
+cp14-skill-skimitar-mastery-name = Skimitar mastery
+
+cp14-skill-pyro-t1-name = Basic pyrokinetics
+cp14-skill-pyro-t2-name = Advanced pyrokinetics
+cp14-skill-pyro-t3-name = Expert pyrokinetics
+
+cp14-skill-illusion-t1-name = Basic illusion
+cp14-skill-illusion-t2-name = Advanced illusion
+cp14-skill-illusion-t3-name = Expert illusion
+
+cp14-skill-water-t1-name = Basic hydrosophistry
+cp14-skill-water-t2-name = Advanced hydrosophistry
+cp14-skill-water-t3-name = Expert hydrosophistry
+
+cp14-skill-life-t1-name = Basic lifecation
+cp14-skill-life-t2-name = Advanced lifecation
+cp14-skill-life-t3-name = Expert lifecation
+
+cp14-skill-meta-t1-name = Basic metamagic
+cp14-skill-meta-t2-name = Advanced metamagic
+cp14-skill-meta-t3-name = Expert metamagic
+
+cp14-skill-alchemy-vision-name = Alchemist's Vision
+cp14-skill-alchemy-vision-desc = You are able to understand what liquids are in containers by visually analyzing them.
+
+cp14-skill-copper-melt-name = Copper melting
+cp14-skill-iron-melt-name = Iron melting
+cp14-skill-gold-melt-name = Gold melting
+cp14-skill-mithril-melt-name = Mithril melting
+cp14-skill-glass-melt-name = Glasswork
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_CP14/skill/skill_tree.ftl b/Resources/Locale/en-US/_CP14/skill/skill_tree.ftl
index 77a958a554..a29e6edd76 100644
--- a/Resources/Locale/en-US/_CP14/skill/skill_tree.ftl
+++ b/Resources/Locale/en-US/_CP14/skill/skill_tree.ftl
@@ -1,25 +1,36 @@
cp14-skill-tree-blaksmithing-name = Blacksmithing
cp14-skill-tree-blaksmithing-desc = Explore and create new items from metal.
-cp14-skill-tree-pyrokinetic-name = Pyrokinetic
+cp14-skill-tree-pyrokinetic-name = Pyrokinesis
cp14-skill-tree-pyrokinetic-desc = Master the magic of fire, allowing you to warm, illuminate, and destroy.
-cp14-skill-tree-hydrosophistry-name = Hydrosophistry
+cp14-skill-tree-hydrosophistry-name = Hydrosophy
cp14-skill-tree-hydrosophistry-desc = Master the magic of water and frost to create items from water and ice, and freeze enemies.
cp14-skill-tree-metamagic-name = Metamagic
cp14-skill-tree-metamagic-desc = Explore ways to subtly manipulate magic to affect spells and items.
-cp14-skill-tree-illusion-name = Illusoriness
+cp14-skill-tree-illusion-name = Illusion
cp14-skill-tree-illusion-desc = Explore the nature of light to create illusions, light sources and shadows.
-cp14-skill-tree-healing-name = Lifecation
+cp14-skill-tree-healing-name = Vivification
cp14-skill-tree-healing-desc = Explore the ways in which magic affects living creatures.
-cp14-skill-tree-dimension-name = Dimensium
+cp14-skill-tree-dimension-name = Dimensionomy
cp14-skill-tree-dimension-desc = Immerse yourself in the nature of space and void.
# Body
-cp14-skill-tree-atlethic-name = Atlethic
+cp14-skill-tree-atlethic-name = Athletic
cp14-skill-tree-atlethic-desc = Develop your body by pushing the boundaries of what is available.
+
+cp14-skill-tree-martial-name = Martial arts
+cp14-skill-tree-martial-desc = Master the secrets of deadly weapons, or make your own body a weapon.
+
+# Job
+
+cp14-skill-tree-thaumaturgy-name = Alchemy
+cp14-skill-tree-thaumaturgy-desc = The art of creating magical potions that can kill, raise from the dead, or turn creatures into sheep.
+
+cp14-skill-tree-blacksmithing-name = Blacksmithing
+cp14-skill-tree-blacksmithing-desc = The art of turning metal into various useful things.
\ 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 2ab599bc22..5f2567a3c3 100644
--- a/Resources/Locale/en-US/_CP14/skill/ui.ftl
+++ b/Resources/Locale/en-US/_CP14/skill/ui.ftl
@@ -5,6 +5,12 @@ 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]Points required:[/color]
-cp14-skill-menu-skillpoints = Experience points:
-cp14-skill-menu-level = Level:
\ No newline at end of file
+cp14-skill-menu-learncost = [color=yellow]Memory required:[/color]
+cp14-skill-menu-level = Memory:
+
+cp14-research-table-title = Research table
+cp14-research-recipe-list = Research costs:
+cp14-research-craft = Research
+
+cp14-skill-desc-add-mana = Increases your character's mana amount by {$mana}.
+cp14-skill-desc-unlock-recipes = Opens up the possibility of crafting:
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_CP14/recipe/title.ftl b/Resources/Locale/ru-RU/_CP14/recipe/title.ftl
index cb97c4fa1b..1b7e47053c 100644
--- a/Resources/Locale/ru-RU/_CP14/recipe/title.ftl
+++ b/Resources/Locale/ru-RU/_CP14/recipe/title.ftl
@@ -1 +1,2 @@
cp14-recipe-title-meat = разные кусочки сырого мяса
+cp14-recipe-title-energy-crystal = энергокристаллы
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_CP14/skill/requirements.ftl b/Resources/Locale/ru-RU/_CP14/skill/requirements.ftl
index 777930e29b..6f4de7f440 100644
--- a/Resources/Locale/ru-RU/_CP14/skill/requirements.ftl
+++ b/Resources/Locale/ru-RU/_CP14/skill/requirements.ftl
@@ -1,2 +1,4 @@
-cp14-skill-req-prerequisite = Навык "{$name}" должен быть изучен.
-cp14-skill-req-species = Доступно только расе "{$name}"
\ No newline at end of file
+cp14-skill-req-prerequisite = Навык "{$name}" должен быть изучен
+cp14-skill-req-species = Вы должны быть расы "{$name}"
+cp14-skill-req-researched = Необходимо провести исследование на исследовательском столе
+cp14-skill-req-impossible = Невозможно изучить во время раунда на текузий момент
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_CP14/skill/skill_issue.ftl b/Resources/Locale/ru-RU/_CP14/skill/skill_issue.ftl
new file mode 100644
index 0000000000..c95ad8bf01
--- /dev/null
+++ b/Resources/Locale/ru-RU/_CP14/skill/skill_issue.ftl
@@ -0,0 +1,3 @@
+cp14-skill-issue-title = Чтобы эффективно пользовать этим оружием, необходимо владеть навыками:
+
+cp14-skill-issue = Проблемы с навыком!
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_CP14/skill/skill_meta.ftl b/Resources/Locale/ru-RU/_CP14/skill/skill_meta.ftl
new file mode 100644
index 0000000000..c62c84b2e0
--- /dev/null
+++ b/Resources/Locale/ru-RU/_CP14/skill/skill_meta.ftl
@@ -0,0 +1,34 @@
+cp14-skill-mastery-desc = Овладев искусством этого оружия, вы больше не будете неуклюже ронять его, или резать сами себя.
+
+cp14-skill-sword-mastery-name = Владение мечом
+cp14-skill-parier-mastery-name = Владение рапирой
+cp14-skill-skimitar-mastery-name = Владение скимитаром
+
+cp14-skill-pyro-t1-name = Базовая пирокинетика
+cp14-skill-pyro-t2-name = Продвинутая пирокинетика
+cp14-skill-pyro-t3-name = Экспертная пирокинетика
+
+cp14-skill-illusion-t1-name = Базовая иллюзия
+cp14-skill-illusion-t2-name = Продвинутая иллюзия
+cp14-skill-illusion-t3-name = Экспертная иллюзия
+
+cp14-skill-water-t1-name = Базовая гидрософистика
+cp14-skill-water-t2-name = Продвинутая гидрософистика
+cp14-skill-water-t3-name = Экспертная гидрософистика
+
+cp14-skill-life-t1-name = Базовое животворение
+cp14-skill-life-t2-name = Продвинутое животворение
+cp14-skill-life-t3-name = Экспертное животворение
+
+cp14-skill-meta-t1-name = Базовая метамагия
+cp14-skill-meta-t2-name = Продвинутая метамагия
+cp14-skill-meta-t3-name = Экспертная метамагия
+
+cp14-skill-alchemy-vision-name = Взор алхимика
+cp14-skill-alchemy-vision-desc = Вы способны понимать какие именно жидкости находятся в емкостях, при помощи визуального анализа.
+
+cp14-skill-copper-melt-name = Плавка меди
+cp14-skill-iron-melt-name = Плавка железа
+cp14-skill-gold-melt-name = Плавка золота
+cp14-skill-mithril-melt-name = Плавка мифрила
+cp14-skill-glass-melt-name = Работа со стеклом
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_CP14/skill/skill_tree.ftl b/Resources/Locale/ru-RU/_CP14/skill/skill_tree.ftl
index cb8c66c017..fc6e87d21d 100644
--- a/Resources/Locale/ru-RU/_CP14/skill/skill_tree.ftl
+++ b/Resources/Locale/ru-RU/_CP14/skill/skill_tree.ftl
@@ -25,3 +25,14 @@ cp14-skill-tree-dimension-desc = Погрузитесь в природу про
cp14-skill-tree-atlethic-name = Атлетика
cp14-skill-tree-atlethic-desc = Развивайте свое тело, расширяя границы доступного.
+
+cp14-skill-tree-martial-name = Боевые исскуства
+cp14-skill-tree-martial-desc = Овладейте секретами смертельного оружия, или сделайте оружием свое собственное тело.
+
+# Job
+
+cp14-skill-tree-thaumaturgy-name = Алхимия
+cp14-skill-tree-thaumaturgy-desc = Исскуство создания волшебных зелий, способных убивать, воскрешать из мертвых или превращать существ в овечек.
+
+cp14-skill-tree-blacksmithing-name = Кузнечное дело
+cp14-skill-tree-blacksmithing-desc = Исскуство превращения металла в различные полезные вещи.
\ 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 0720145d88..d5c7ee9158 100644
--- a/Resources/Locale/ru-RU/_CP14/skill/ui.ftl
+++ b/Resources/Locale/ru-RU/_CP14/skill/ui.ftl
@@ -5,6 +5,12 @@ 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-skillpoints = Очков опыта:
-cp14-skill-menu-level = Уровень:
+cp14-skill-menu-learncost = [color=yellow]Требуется памяти:[/color]
+cp14-skill-menu-level = Память:
+
+cp14-research-table-title = Стол исследований
+cp14-research-recipe-list = Затраты на исследование:
+cp14-research-craft = Исследовать
+
+cp14-skill-desc-add-mana = Увеличивает объем маны вашего персонажа на {$mana}.
+cp14-skill-desc-unlock-recipes = Открывает возможность создания:
\ No newline at end of file
diff --git a/Resources/Maps/_CP14/Frigid_Coast.yml b/Resources/Maps/_CP14/Frigid_Coast.yml
index 8ab24d4a91..ad9f3d733b 100644
--- a/Resources/Maps/_CP14/Frigid_Coast.yml
+++ b/Resources/Maps/_CP14/Frigid_Coast.yml
@@ -51511,13 +51511,6 @@ entities:
rot: 1.5707963267948966 rad
pos: 102.332535,53.33797
parent: 1
-- proto: CP14SpellScrollFireRune
- entities:
- - uid: 8072
- components:
- - type: Transform
- pos: -100.13099,21.66595
- parent: 1
- proto: CP14SpellScrollFlameCreation
entities:
- uid: 8073
diff --git a/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml b/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml
index 59c554de93..90303bf7bd 100644
--- a/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml
+++ b/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml
@@ -6,7 +6,6 @@
- type: StorageFill
contents:
- id: CP14Lighter
- - id: CP14ManaOperationGlove
- id: CP14Syringe
amount: 2
- id: CP14Cauldron
diff --git a/Resources/Prototypes/_CP14/Catalog/Fills/dresser.yml b/Resources/Prototypes/_CP14/Catalog/Fills/dresser.yml
index 9784a8a61f..29d58fbd72 100644
--- a/Resources/Prototypes/_CP14/Catalog/Fills/dresser.yml
+++ b/Resources/Prototypes/_CP14/Catalog/Fills/dresser.yml
@@ -6,10 +6,6 @@
- type: StorageFill
contents:
- id: CP14GuidebookAlchemy
- - id: CP14ClothingEyesAlchemyGlasses
- prob: 0.5
- - id: CP14ClothingEyesAlchemyMonocle
- prob: 0.2
- id: CP14ClothingCloakAlchemist
prob: 0.6
- id: CP14ClothingHeadAlchemistBeret
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/fire_rune.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/fire_rune.yml
deleted file mode 100644
index 94727de9bf..0000000000
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/fire_rune.yml
+++ /dev/null
@@ -1,98 +0,0 @@
-- type: entity
- id: CP14ActionSpellFireRune
- name: Fire rune
- description: You create an area where a scalding stream of fire occurs with little delay.
- components:
- - type: Sprite
- sprite: _CP14/Actions/Spells/fire.rsi
- state: tiefling_revenge
- - type: CP14MagicEffectCastSlowdown
- speedMultiplier: 0.5
- - type: CP14MagicEffectManaCost
- manaCost: 15
- - type: CP14MagicEffect
- telegraphyEffects:
- - !type:CP14SpellSpawnEntityOnTarget
- spawns:
- - CP14TelegraphyFireRune
- effects:
- - !type:CP14SpellSpawnEntityOnTarget
- spawns:
- - CP14AreaEntityEffectFireRune
- - type: CP14MagicEffectCastingVisual
- proto: CP14RuneEarthWall
- - type: CP14MagicEffectPacifiedBlock
- - type: EntityWorldTargetAction
- range: 10
- itemIconStyle: BigAction
- sound: !type:SoundPathSpecifier
- path: /Audio/Magic/rumble.ogg
- icon:
- sprite: _CP14/Actions/Spells/fire.rsi
- state: tiefling_revenge
- event: !type:CP14DelayedEntityWorldTargetActionEvent
- cooldown: 10
-
-- type: entity
- id: CP14TelegraphyFireRune
- parent: CP14BaseMagicImpact
- categories: [ HideSpawnMenu ]
- save: false
- components:
- - type: PointLight
- color: "#eea911"
- - type: TimedDespawn
- lifetime: 0.8
- - type: Sprite
- noRot: true
- drawdepth: BelowFloor
- sprite: _CP14/Effects/Magic/area_impact.rsi
- layers:
- - state: area_impact_in
- color: "#eea911"
- scale: 2, 2
- shader: unshaded
-
-- type: entity
- id: CP14AreaEntityEffectFireRune
- parent: CP14BaseMagicImpact
- categories: [ HideSpawnMenu ]
- save: false
- components:
- - type: PointLight
- color: "#eea911"
- - type: Sprite
- noRot: true
- drawdepth: BelowFloor
- sprite: _CP14/Effects/Magic/area_impact.rsi
- layers:
- - state: area_impact_out
- color: "#eea911"
- scale: 2, 2
- shader: unshaded
- - type: TimedDespawn
- lifetime: 0.8
- - type: CP14AreaEntityEffect
- range: 1
- whitelist:
- components:
- - Damageable
- effects:
- - !type:CP14SpellSpawnEntityOnTarget
- spawns:
- - CP14ImpactEffectTieflingRevenge
- - !type:CP14SpellApplyEntityEffect
- effects:
- - !type:HealthChange
- damage:
- types:
- Heat: 10
-
-- type: entity
- parent: CP14BaseSpellScrollFire
- id: CP14SpellScrollFireRune
- name: fire rune spell scroll
- components:
- - type: CP14SpellStorage
- spells:
- - CP14ActionSpellFireRune
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/fireball.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/fireball.yml
index 6293d727fb..3aab714392 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/fireball.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/fireball.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 20
- type: CP14MagicEffect
+ magicType: Fire
effects:
- !type:CP14SpellSpawnEntityOnUser
spawns:
@@ -36,7 +37,7 @@
state: fireball
event: !type:CP14DelayedEntityWorldTargetActionEvent
cooldown: 25
- castDelay: 1.5
+ castDelay: 2.5
breakOnMove: false
- type: entity
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/flame_creation.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/flame_creation.yml
index 0274879d97..a2ac6d4879 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/flame_creation.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/flame_creation.yml
@@ -9,6 +9,7 @@
- type: CP14MagicEffectManaCost
manaCost: 5
- type: CP14MagicEffect
+ magicType: Fire
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/hell_ballade.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/hell_ballade.yml
index 53c5af43d5..ddaff00d81 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/hell_ballade.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/hell_ballade.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 1
- type: CP14MagicEffect
+ magicType: Fire
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/tiefling_inner_fire.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/tiefling_inner_fire.yml
index 91846c528b..c4f36538f6 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/tiefling_inner_fire.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/tiefling_inner_fire.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectCastingVisual
proto: CP14RuneTieflingRevenge
- type: CP14MagicEffect
+ magicType: Fire
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_cure_heat.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/cure_heat.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_cure_heat.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/cure_heat.yml
index c7ceac34d0..d43079d6d6 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_cure_heat.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/cure_heat.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 10
- type: CP14MagicEffect
+ magicType: Life
telegraphyEffects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_cure_poison.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/cure_poison.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_cure_poison.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/cure_poison.yml
index ae6890d9f6..8f1c2cab3b 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_cure_poison.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/cure_poison.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 10
- type: CP14MagicEffect
+ magicType: Life
telegraphyEffects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_cure_wounds.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/cure_wounds.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_cure_wounds.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/cure_wounds.yml
index b23d54e603..e339b649d3 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_cure_wounds.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/cure_wounds.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 10
- type: CP14MagicEffect
+ magicType: Life
telegraphyEffects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_heal_ballade.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/heal_ballade.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_heal_ballade.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/heal_ballade.yml
index 04c8af2971..c3b753ab2c 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_heal_ballade.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/heal_ballade.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 1
- type: CP14MagicEffect
+ magicType: Life
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/magical_acceleration.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/magical_acceleration.yml
index cd4d32d350..bb34144809 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/magical_acceleration.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/magical_acceleration.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 3
- type: CP14MagicEffect
+ magicType: Life
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_peace_ballade.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/peace_ballade.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_peace_ballade.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/peace_ballade.yml
index 842215ec8f..6daec90aac 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_peace_ballade.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/peace_ballade.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 2
- type: CP14MagicEffect
+ magicType: Life
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_plant_growth.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/plant_growth.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_plant_growth.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/plant_growth.yml
index c75bc4f919..ea4885c658 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_plant_growth.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/plant_growth.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 5
- type: CP14MagicEffect
+ magicType: Life
telegraphyEffects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Death/T1_resurrection.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/resurrection.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Death/T1_resurrection.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/resurrection.yml
index 3fb0bbb5e1..f7d393c6f7 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Death/T1_resurrection.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/resurrection.yml
@@ -13,6 +13,7 @@
- type: CP14MagicEffectAliveTargetRequired
inverted: true
- type: CP14MagicEffect
+ magicType: Life
telegraphyEffects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/sheep_polymorph.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/sheep_polymorph.yml
index 6ad1a98a63..e7b49985c5 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/sheep_polymorph.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/sheep_polymorph.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 30
- type: CP14MagicEffect
+ magicType: Life
telegraphyEffects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_speed_ballade.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/speed_ballade.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_speed_ballade.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/speed_ballade.yml
index c34e023b6c..9bd96ad1a5 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/T0_speed_ballade.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Life/speed_ballade.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 1
- type: CP14MagicEffect
+ magicType: Life
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_flash_light.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/flash_light.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_flash_light.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/flash_light.yml
index 045703a10d..116c520085 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_flash_light.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/flash_light.yml
@@ -9,6 +9,7 @@
- type: CP14MagicEffectManaCost
manaCost: 10
- type: CP14MagicEffect
+ magicType: Light
telegraphyEffects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_signal_light.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/signal_light.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_signal_light.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/signal_light.yml
index 06ac3898eb..61332ba244 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_signal_light.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/signal_light.yml
@@ -7,6 +7,7 @@
- type: CP14MagicEffectManaCost
manaCost: 5
- type: CP14MagicEffect
+ magicType: Light
- type: CP14MagicEffectSomaticAspect
- type: InstantAction
itemIconStyle: BigAction
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T0_sphere_of_light.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/sphere_of_light.yml
similarity index 99%
rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T0_sphere_of_light.yml
rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/sphere_of_light.yml
index fbb004dd1c..78943ce80e 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T0_sphere_of_light.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/sphere_of_light.yml
@@ -9,6 +9,7 @@
- type: CP14MagicEffectManaCost
manaCost: 10
- type: CP14MagicEffect
+ magicType: Light
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/beer_creation.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/beer_creation.yml
index 963b326cbe..0914fade75 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/beer_creation.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/beer_creation.yml
@@ -9,6 +9,7 @@
- type: CP14MagicEffectManaCost
manaCost: 20
- type: CP14MagicEffect
+ magicType: Water
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/freeze.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/freeze.yml
index 52b1fb8cbe..c0093a92ee 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/freeze.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/freeze.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 7
- type: CP14MagicEffect
+ magicType: Water
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_arrow.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_arrow.yml
index 269ebd8a55..259fc0a750 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_arrow.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_arrow.yml
@@ -7,8 +7,9 @@
sprite: _CP14/Actions/Spells/water.rsi
state: ice_arrow
- type: CP14MagicEffectManaCost
- manaCost: 15
+ manaCost: 7
- type: CP14MagicEffect
+ magicType: Water
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
@@ -30,7 +31,7 @@
sprite: _CP14/Actions/Spells/water.rsi
state: ice_arrow
event: !type:CP14DelayedInstantActionEvent
- cooldown: 5
+ cooldown: 10
breakOnMove: false
- type: entity
@@ -78,7 +79,7 @@
onlyCollideWhenShot: true
damage:
types:
- Piercing: 17
+ Piercing: 15
Cold: 5
- type: Damageable
- type: Destructible
@@ -93,7 +94,7 @@
- !type:DoActsBehavior
acts: ["Destruction"]
- type: TimedDespawn
- lifetime: 60
+ lifetime: 240
- type: DamageOnLand
damage:
types:
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_dagger.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_dagger.yml
index a9d650917c..78116b72d1 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_dagger.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_dagger.yml
@@ -7,8 +7,9 @@
sprite: _CP14/Actions/Spells/water.rsi
state: ice_dagger
- type: CP14MagicEffectManaCost
- manaCost: 15
+ manaCost: 25
- type: CP14MagicEffect
+ magicType: Water
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
@@ -30,7 +31,7 @@
sprite: _CP14/Actions/Spells/water.rsi
state: ice_dagger
event: !type:CP14DelayedInstantActionEvent
- cooldown: 20
+ cooldown: 10
breakOnMove: false
- type: entity
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_shards.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_shards.yml
index b816e58139..9b490b2723 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_shards.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/ice_shards.yml
@@ -11,6 +11,7 @@
- type: CP14MagicEffectManaCost
manaCost: 5
- type: CP14MagicEffect
+ magicType: Water
effects:
- !type:CP14SpellProjectile
prototype: CP14IceShard
diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/water_creation.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/water_creation.yml
index fa575db584..9a8fbae68a 100644
--- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/water_creation.yml
+++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Water/water_creation.yml
@@ -9,6 +9,7 @@
- type: CP14MagicEffectManaCost
manaCost: 10
- type: CP14MagicEffect
+ magicType: Water
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Species/carcat.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Species/carcat.yml
index 31d92c1ac2..ef397519ab 100644
--- a/Resources/Prototypes/_CP14/Entities/Mobs/Species/carcat.yml
+++ b/Resources/Prototypes/_CP14/Entities/Mobs/Species/carcat.yml
@@ -42,9 +42,6 @@
- type: CP14NightVision #Night vision
- type: FootstepModifier
footstepSoundCollection: null # Silent footstep
- - type: CP14SkillStorage
- progress:
- Atlethic: 1
- type: Inventory
templateId: CP14Carcat # Cant wear shoes
speciesId: carcat
diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Species/elf.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Species/elf.yml
index 1a6abf8601..697b10b425 100644
--- a/Resources/Prototypes/_CP14/Entities/Mobs/Species/elf.yml
+++ b/Resources/Prototypes/_CP14/Entities/Mobs/Species/elf.yml
@@ -35,9 +35,6 @@
requiredLegs: 2
- type: Bloodstream
bloodReagent: CP14BloodElf
- - type: CP14SkillStorage
- progress:
- Metamagic: 1
- type: CP14MagicEnergyContainer #Increased mana container
maxEnergy: 200
energy: 200
diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Species/silva.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Species/silva.yml
index 12c11e506c..8f1b9a0dad 100644
--- a/Resources/Prototypes/_CP14/Entities/Mobs/Species/silva.yml
+++ b/Resources/Prototypes/_CP14/Entities/Mobs/Species/silva.yml
@@ -76,9 +76,6 @@
#- type: CP14MagicEnergyPhotosynthesis # Silva special feature #Disabled until sunlight fixed
#- type: CP14MagicEnergyDraw #Enabled default mana regen until sunlight fixed
# enable: false
- - type: CP14SkillStorage
- progress:
- Healing: 1
- type: Body
prototype: CP14Silva
requiredLegs: 2
diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Species/tiefling.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Species/tiefling.yml
index 968f71eb9a..c7246c5f3d 100644
--- a/Resources/Prototypes/_CP14/Entities/Mobs/Species/tiefling.yml
+++ b/Resources/Prototypes/_CP14/Entities/Mobs/Species/tiefling.yml
@@ -48,9 +48,6 @@
globalModifier: 1.2
modifiers:
Fire: 0.5
- - type: CP14SkillStorage
- progress:
- Pyrokinetic: 1
- type: CP14SpellStorage
#grantAccessToSelf: true
#spells:
diff --git a/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Blade/skimitar.yml b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Blade/skimitar.yml
new file mode 100644
index 0000000000..be991e9a7e
--- /dev/null
+++ b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Blade/skimitar.yml
@@ -0,0 +1,78 @@
+- type: entity
+ parent: BaseItem
+ id: CP14ModularBladeSkimitarBase
+ categories: [ ForkFiltered ]
+ abstract: true
+ description: A skimitar blade without a hilt. A blacksmith can use it as a spare part to create a weapon.
+ components:
+ - type: Item
+ storedRotation: 45
+ shape:
+ - 0,0,0,1
+ storedOffset: 0, 10
+
+- type: entity
+ parent: CP14ModularBladeSkimitarBase
+ id: CP14ModularBladeIronSkimitar
+ name: iron skimitar blade
+ components:
+ - type: Sprite
+ sprite: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi
+ state: icon
+ - type: CP14ModularCraftPart
+ possibleParts:
+ - BladeIronSkimitar
+ - type: CP14Material
+ materials:
+ CP14Iron: 10
+
+- type: entity
+ parent: CP14ModularBladeSkimitarBase
+ id: CP14ModularBladeGoldSkimitar
+ name: golden skimitar blade
+ components:
+ - type: Sprite
+ sprite: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi
+ layers:
+ - state: icon
+ color: "#ffe269"
+ - type: CP14ModularCraftPart
+ possibleParts:
+ - BladeGoldSkimitar
+ - type: CP14Material
+ materials:
+ CP14Gold: 10
+
+- type: entity
+ parent: CP14ModularBladeSkimitarBase
+ id: CP14ModularBladeCopperSkimitar
+ name: copper skimitar blade
+ components:
+ - type: Sprite
+ sprite: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi
+ layers:
+ - state: icon
+ color: "#e28f08"
+ - type: CP14ModularCraftPart
+ possibleParts:
+ - BladeCopperSkimitar
+ - type: CP14Material
+ materials:
+ CP14Copper: 10
+
+- type: entity
+ parent: CP14ModularBladeSkimitarBase
+ id: CP14ModularBladeMithrilSkimitar
+ name: mithril skimitar blade
+ components:
+ - type: Sprite
+ sprite: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi
+ layers:
+ - state: icon
+ color: "#38f0b3"
+ - type: CP14ModularCraftPart
+ possibleParts:
+ - BladeMithrilSkimitar
+ - type: CP14Material
+ materials:
+ CP14Mithril: 10
diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Specific/Thaumaturgy/crystal.yml b/Resources/Prototypes/_CP14/Entities/Objects/Specific/Thaumaturgy/crystal.yml
index 2225795c23..d85876af4e 100644
--- a/Resources/Prototypes/_CP14/Entities/Objects/Specific/Thaumaturgy/crystal.yml
+++ b/Resources/Prototypes/_CP14/Entities/Objects/Specific/Thaumaturgy/crystal.yml
@@ -12,6 +12,9 @@
sprite: _CP14/Objects/Specific/Thaumaturgy/crystal.rsi
- type: CP14MagicEnergyContainer
- type: CP14MagicEnergyExaminable
+ - type: Tag
+ tags:
+ - CP14EnergyCrystal
- type: entity
id: CP14EnergyCrystalMedium
diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Furniture/research_table.yml b/Resources/Prototypes/_CP14/Entities/Structures/Furniture/research_table.yml
new file mode 100644
index 0000000000..348d448bd7
--- /dev/null
+++ b/Resources/Prototypes/_CP14/Entities/Structures/Furniture/research_table.yml
@@ -0,0 +1,57 @@
+- type: entity
+ parent:
+ - BaseStructure
+ id: CP14ResearchTable
+ categories: [ ForkFiltered ]
+ name: research table
+ description: A place of research, experimentation and discovery that allows you to be smarter.
+ components:
+ - type: Sprite
+ snapCardinals: true
+ sprite: _CP14/Structures/Furniture/workbench.rsi
+ state: research_table
+ - type: Icon
+ sprite: _CP14/Structures/Furniture/workbench.rsi
+ state: research_table
+ - type: ActivatableUI
+ key: enum.CP14ResearchTableUiKey.Key
+ requiresComplex: true
+ singleUser: true
+ - type: Climbable
+ - type: Clickable
+ - type: CP14ResearchTable
+ - type: InteractionOutline
+ - type: PlaceableSurface
+ - type: UserInterface
+ interfaces:
+ enum.CP14ResearchTableUiKey.Key:
+ type: CP14ResearchTableBoundUserInterface
+ - type: Damageable
+ damageContainer: Inorganic
+ damageModifierSet: Wood
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTypeTrigger
+ damageType: Heat
+ damage: 40
+ behaviors:
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - !type:PlaySoundBehavior
+ sound:
+ collection: WoodDestroy
+ - trigger:
+ !type:DamageTrigger
+ damage: 60
+ behaviors:
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - !type:PlaySoundBehavior
+ sound:
+ collection: WoodDestroy
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ CP14WoodenPlanks1:
+ min: 1
+ max: 2
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Loadouts/role_loadouts.yml b/Resources/Prototypes/_CP14/Loadouts/role_loadouts.yml
index 1ecbd232af..67397fd3fd 100644
--- a/Resources/Prototypes/_CP14/Loadouts/role_loadouts.yml
+++ b/Resources/Prototypes/_CP14/Loadouts/role_loadouts.yml
@@ -1,7 +1,6 @@
- type: roleLoadout
id: JobCP14Adventurer
groups:
- - CP14SkillTree
- CP14GeneralHead
- CP14GeneralOuterClothing
- CP14GeneralEyes
@@ -18,7 +17,6 @@
- type: roleLoadout
id: JobCP14Apprentice
groups:
- - CP14SkillTree
- CP14GeneralHead
- CP14GeneralOuterClothing
- CP14GeneralEyes
@@ -33,7 +31,6 @@
- type: roleLoadout
id: JobCP14Alchemist
groups:
- - CP14SkillTree
- CP14AlchemistHead #
- CP14GeneralOuterClothing
- CP14AlchemistEyes #
@@ -49,7 +46,6 @@
- type: roleLoadout
id: JobCP14Innkeeper
groups:
- - CP14SkillTree
- CP14GeneralHead
- CP14GeneralOuterClothing
- CP14GeneralEyes
@@ -64,7 +60,6 @@
- type: roleLoadout
id: JobCP14Blacksmith
groups:
- - CP14SkillTree
- CP14GeneralHead
- CP14GeneralOuterClothing
- CP14GeneralEyes
@@ -79,7 +74,6 @@
- type: roleLoadout
id: JobCP14GuardCommander
groups:
- - CP14SkillTree
- CP14GuardHead
- CP14GeneralOuterClothing
- CP14GeneralEyes
@@ -95,7 +89,6 @@
- type: roleLoadout
id: JobCP14Guard
groups:
- - CP14SkillTree
- CP14GuardHead
- CP14GeneralOuterClothing
- CP14GeneralEyes
@@ -111,7 +104,6 @@
- type: roleLoadout
id: JobCP14Commandant
groups:
- - CP14SkillTree
- CP14MerchantOuterClothing
- CP14GeneralEyes
- CP14MerchantShirt
@@ -123,7 +115,6 @@
- type: roleLoadout
id: JobCP14Guildmaster
groups:
- - CP14SkillTree
- CP14GuildmasterOuterClothing
- CP14GeneralEyes
- CP14GuildmasterHead
@@ -138,7 +129,6 @@
- type: roleLoadout
id: JobCP14Merchant
groups:
- - CP14SkillTree
- CP14MerchantHead
- CP14MerchantOuterClothing
- CP14GeneralEyes
diff --git a/Resources/Prototypes/_CP14/Loadouts/skill_tree.yml b/Resources/Prototypes/_CP14/Loadouts/skill_tree.yml
deleted file mode 100644
index 7759e40d56..0000000000
--- a/Resources/Prototypes/_CP14/Loadouts/skill_tree.yml
+++ /dev/null
@@ -1,119 +0,0 @@
-- type: loadoutGroup
- id: CP14SkillTree
- name: cp14-loadout-skill-tree
- minLimit: 2
- maxLimit: 2
- loadouts:
- - CP14SkillTreeMetamagic
- - CP14SkillTreeHydrosophistry
- - CP14SkillTreePyrokinetic
- - CP14SkillTreeIllusion
- - CP14SkillTreeHealing
- - CP14SkillTreeAtlethic
- #- CP14SkillTreeDimension Disabled until teleport & grab collider fix
-
-- type: entity
- id: CP14SkillTreePyrokineticLoadoutDummy
- name: Pyrokinetic
- categories: [ HideSpawnMenu ]
- components:
- - type: Sprite
- sprite: _CP14/Actions/skill_tree.rsi
- state: pyro
-
-- type: loadout
- id: CP14SkillTreePyrokinetic
- dummyEntity: CP14SkillTreePyrokineticLoadoutDummy
- skillTree:
- Pyrokinetic: 2
-
-- type: entity
- id: CP14SkillTreeHydrosophistryLoadoutDummy
- name: Hydrosophistry
- categories: [ HideSpawnMenu ]
- components:
- - type: Sprite
- sprite: _CP14/Actions/skill_tree.rsi
- state: water
-
-- type: loadout
- id: CP14SkillTreeHydrosophistry
- dummyEntity: CP14SkillTreeHydrosophistryLoadoutDummy
- skillTree:
- Hydrosophistry: 2
-
-- type: entity
- id: CP14SkillTreeIllusionLoadoutDummy
- name: Illusion
- categories: [ HideSpawnMenu ]
- components:
- - type: Sprite
- sprite: _CP14/Actions/skill_tree.rsi
- state: light
-
-- type: loadout
- id: CP14SkillTreeIllusion
- dummyEntity: CP14SkillTreeIllusionLoadoutDummy
- skillTree:
- Illusion: 2
-
-- type: entity
- id: CP14SkillTreeMetamagicLoadoutDummy
- name: Metamagic
- categories: [ HideSpawnMenu ]
- components:
- - type: Sprite
- sprite: _CP14/Actions/skill_tree.rsi
- state: meta
-
-- type: loadout
- id: CP14SkillTreeMetamagic
- dummyEntity: CP14SkillTreeMetamagicLoadoutDummy
- skillTree:
- Metamagic: 2
-
-- type: entity
- id: CP14SkillTreeHealingLoadoutDummy
- name: Healing
- categories: [ HideSpawnMenu ]
- components:
- - type: Sprite
- sprite: _CP14/Actions/skill_tree.rsi
- state: heal
-
-- type: loadout
- id: CP14SkillTreeHealing
- dummyEntity: CP14SkillTreeHealingLoadoutDummy
- skillTree:
- Healing: 2
-
-- type: entity
- id: CP14SkillTreeAtlethicLoadoutDummy
- name: Atlethic
- categories: [ HideSpawnMenu ]
- components:
- - type: Sprite
- sprite: _CP14/Actions/skill_tree.rsi
- state: atlethic
-
-- type: loadout
- id: CP14SkillTreeAtlethic
- dummyEntity: CP14SkillTreeAtlethicLoadoutDummy
- skillTree:
- Atlethic: 2
-
-- type: entity
- id: CP14SkillTreeDimensionLoadoutDummy
- name: Dimension
- categories: [ HideSpawnMenu ]
- components:
- - type: Sprite
- sprite: _CP14/Actions/skill_tree.rsi
- state: dimension
-
-- type: loadout
- id: CP14SkillTreeDimension
- dummyEntity: CP14SkillTreeDimensionLoadoutDummy
- skillTree:
- Dimension: 2
-
diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/rapier.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/rapier.yml
index 30cde7ac47..acb71501e2 100644
--- a/Resources/Prototypes/_CP14/ModularCraft/Blade/rapier.yml
+++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/rapier.yml
@@ -12,6 +12,9 @@
- BaseWeaponSharp
- !type:AddComponents
components:
+ - type: CP14MeleeWeaponSkillRequired
+ skills:
+ - RapierMastery
- !type:EditMeleeWeapon
newWideAnimation: CP14WeaponArcThrust
resetOnHandSelected: true # Disable fast swap
@@ -29,7 +32,7 @@
addSlots:
- Garde
- BladeInlay
- - !type:EditDamageableModifier # Only 1 ingot t craft, so less health
+ - !type:EditDamageableModifier # Only 1 ingot craft, so less health
multiplier: 2
- type: modularPart
diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/sickle.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/sickle.yml
index 5102f9f845..74549018fd 100644
--- a/Resources/Prototypes/_CP14/ModularCraft/Blade/sickle.yml
+++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/sickle.yml
@@ -12,7 +12,7 @@
attackRateMultiplier: 1.5
bonusDamage:
types:
- Slash: 8
+ Slash: 5
- !type:EditIncreaseDamageOnWield
bonusDamage:
types:
diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/skimitar.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/skimitar.yml
new file mode 100644
index 0000000000..3bd6df47bb
--- /dev/null
+++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/skimitar.yml
@@ -0,0 +1,87 @@
+#Concept:
+# + Additional range
+# + High Damage! + Wielded buff
+# - Required Warcraft skill
+
+- type: modularPart
+ id: BaseBladeSkimitar
+ modifiers:
+ - !type:Inherit
+ copyFrom:
+ - BaseWeaponChemical
+ - BaseWeaponSharp
+ - !type:AddComponents
+ components:
+ - type: CP14MeleeWeaponSkillRequired
+ skills:
+ - SkimitarMastery
+ - !type:EditMeleeWeapon
+ resetOnHandSelected: false # We can fast swing!
+ bonusRange: 0.2
+ angleMultiplier: 1.5
+ bonusDamage:
+ types:
+ Slash: 8
+ - !type:EditIncreaseDamageOnWield
+ bonusDamage:
+ types:
+ Slash: 5
+ - !type:EditItem
+ newSize: Large
+ adjustShape: 0, 2
+ storedOffsetBonus: 0, 10
+ - !type:EditModularSlots
+ addSlots:
+ - Garde
+ - BladeInlay
+
+- type: modularPart
+ id: BladeIronSkimitar
+ slots:
+ - Blade
+ sourcePart: CP14ScrapIron
+ rsiPath: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi
+ modifiers:
+ - !type:Inherit
+ copyFrom:
+ - BaseBladeSkimitar
+ - BaseBladeIron
+
+- type: modularPart
+ id: BladeGoldSkimitar
+ slots:
+ - Blade
+ sourcePart: CP14ScrapGold
+ rsiPath: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi
+ color: "#ffe269"
+ modifiers:
+ - !type:Inherit
+ copyFrom:
+ - BaseBladeSkimitar
+ - BaseBladeGold
+
+- type: modularPart
+ id: BladeCopperSkimitar
+ slots:
+ - Blade
+ sourcePart: CP14ScrapCopper
+ rsiPath: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi
+ color: "#e28f08"
+ modifiers:
+ - !type:Inherit
+ copyFrom:
+ - BaseBladeSkimitar
+ - BaseBladeCopper
+
+- type: modularPart
+ id: BladeMithrilSkimitar
+ slots:
+ - Blade
+ sourcePart: CP14ScrapMithril
+ rsiPath: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi
+ color: "#38f0b3"
+ modifiers:
+ - !type:Inherit
+ copyFrom:
+ - BaseBladeSkimitar
+ - BaseBladeMithril
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/spear.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/spear.yml
index df61c8f7a4..2ad6b8d72f 100644
--- a/Resources/Prototypes/_CP14/ModularCraft/Blade/spear.yml
+++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/spear.yml
@@ -26,6 +26,7 @@
- !type:EditMeleeWeapon
newWideAnimation: CP14WeaponArcThrust
angleMultiplier: 0
+ bonusRange: 0.2
bonusDamage:
types:
Piercing: 8
diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/sword.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/sword.yml
index d84fb55711..3a546ca31e 100644
--- a/Resources/Prototypes/_CP14/ModularCraft/Blade/sword.yml
+++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/sword.yml
@@ -12,6 +12,9 @@
- BaseWeaponSharp
- !type:AddComponents
components:
+ - type: CP14MeleeWeaponSkillRequired
+ skills:
+ - SwordMastery
- !type:EditMeleeWeapon
resetOnHandSelected: true # Disable fast swap
bonusRange: 0.2
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml
index b08cb0b022..727eebc8e5 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml
@@ -4,6 +4,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14WoodenPlanks
count: 2
@@ -18,6 +21,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -28,6 +34,9 @@
tag: CP14RecipeAnvil
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -39,6 +48,10 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
+ - IronMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -53,6 +66,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -64,6 +80,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 4
@@ -75,6 +94,9 @@
category: Armor
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -86,6 +108,9 @@
category: Weapon
craftTime: 1
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -98,6 +123,9 @@
category: Weapon
craftTime: 1
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -110,6 +138,9 @@
category: Weapon
craftTime: 1
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -122,6 +153,9 @@
category: Weapon
craftTime: 1
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -134,6 +168,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -145,6 +182,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -156,6 +196,10 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
+ - IronMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -173,6 +217,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -184,6 +231,9 @@
category: Tools
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -195,6 +245,9 @@
category: Tools
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -206,6 +259,9 @@
category: Tools
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -217,6 +273,9 @@
category: Tools
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -228,6 +287,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -239,6 +301,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -250,6 +315,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -261,6 +329,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -272,6 +343,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -283,6 +357,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:ProtoIdResource
protoId: CP14CrystalShardQuartz
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_aventail.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_aventail.yml
index 21cf2c6e60..3da5f78f39 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_aventail.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_aventail.yml
@@ -7,6 +7,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -18,6 +21,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -29,6 +35,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -40,6 +49,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -53,6 +65,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -64,6 +79,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -75,6 +93,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -86,6 +107,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_blade.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_blade.yml
index 8dc4d6d3c4..35ef96680e 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_blade.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_blade.yml
@@ -7,6 +7,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -18,6 +21,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -29,6 +35,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -40,6 +49,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -53,6 +65,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -64,6 +79,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -75,6 +93,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -86,6 +107,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -99,6 +123,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -110,6 +137,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -121,6 +151,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -132,6 +165,9 @@
category: Weapon
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -145,6 +181,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -156,6 +195,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -167,6 +209,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -178,6 +223,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -191,6 +239,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -202,6 +253,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -213,6 +267,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -224,6 +281,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -237,6 +297,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -248,6 +311,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -260,6 +326,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -271,6 +340,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -284,6 +356,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -295,6 +370,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -306,6 +384,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -317,6 +398,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -330,6 +414,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -341,6 +428,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -352,6 +442,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -363,6 +456,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -376,6 +472,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -387,6 +486,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -398,6 +500,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -409,6 +514,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -422,6 +530,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -433,6 +544,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -444,6 +558,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -455,6 +572,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -468,6 +588,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -479,6 +602,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -490,6 +616,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -501,6 +630,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -514,6 +646,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -525,6 +660,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -536,6 +674,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -547,6 +688,9 @@
category: Tools
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -560,6 +704,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -571,6 +718,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -582,6 +732,9 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -593,7 +746,68 @@
category: Tools
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
- result: CP14ModularBladeMithrilHoe
\ No newline at end of file
+ result: CP14ModularBladeMithrilHoe
+
+# Skimitar
+
+- type: CP14Recipe
+ id: CP14ModularBladeIronSkimitar
+ tag: CP14RecipeAnvil
+ category: Weapon
+ craftTime: 4
+ requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
+ - !type:StackResource
+ stack: CP14IronBar
+ count: 2
+ result: CP14ModularBladeIronSkimitar
+
+- type: CP14Recipe
+ id: CP14ModularBladeGoldSkimitar
+ tag: CP14RecipeAnvil
+ category: Weapon
+ craftTime: 4
+ requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
+ - !type:StackResource
+ stack: CP14GoldBar
+ count: 2
+ result: CP14ModularBladeGoldSkimitar
+
+- type: CP14Recipe
+ id: CP14ModularBladeCopperSkimitar
+ tag: CP14RecipeAnvil
+ category: Weapon
+ craftTime: 4
+ requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
+ - !type:StackResource
+ stack: CP14CopperBar
+ count: 2
+ result: CP14ModularBladeCopperSkimitar
+
+- type: CP14Recipe
+ id: CP14ModularBladeMithrilSkimitar
+ tag: CP14RecipeAnvil
+ category: Weapon
+ craftTime: 4
+ requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
+ - !type:StackResource
+ stack: CP14MithrilBar
+ count: 2
+ result: CP14ModularBladeMithrilSkimitar
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_breastplate.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_breastplate.yml
index 9755c5d70a..228c4e4170 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_breastplate.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_breastplate.yml
@@ -7,6 +7,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 5
@@ -18,6 +21,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 5
@@ -29,6 +35,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 5
@@ -40,6 +49,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 5
@@ -53,6 +65,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 6
@@ -64,6 +79,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 6
@@ -75,6 +93,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 6
@@ -86,6 +107,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 6
@@ -99,6 +123,9 @@
category: Armor
craftTime: 8
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 4
@@ -110,6 +137,9 @@
category: Armor
craftTime: 8
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 4
@@ -121,6 +151,9 @@
category: Armor
craftTime: 8
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 4
@@ -132,6 +165,9 @@
category: Armor
craftTime: 8
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 4
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_cuisses.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_cuisses.yml
index 684f4df6e4..3586ba0390 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_cuisses.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_cuisses.yml
@@ -7,6 +7,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -18,6 +21,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -29,6 +35,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -40,6 +49,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -53,6 +65,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -64,6 +79,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -75,6 +93,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -86,6 +107,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml
index 44a7e5cbac..b213187f06 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml
@@ -6,6 +6,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -17,6 +20,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -28,6 +34,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -39,6 +48,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -52,6 +64,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -63,6 +78,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -74,6 +92,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -85,6 +106,9 @@
category: Weapon
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_greave.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_greave.yml
index 12d519118c..b68cbf1771 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_greave.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_greave.yml
@@ -7,6 +7,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -18,6 +21,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -29,6 +35,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -40,6 +49,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -53,6 +65,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -64,6 +79,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -75,6 +93,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -86,6 +107,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_helmet.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_helmet.yml
index 6cf72fefa5..8dd4d3f084 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_helmet.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_helmet.yml
@@ -7,6 +7,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -18,6 +21,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -29,6 +35,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -40,6 +49,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
@@ -53,6 +65,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 2
@@ -64,6 +79,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 2
@@ -75,6 +93,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 2
@@ -86,6 +107,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 2
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_tip.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_tip.yml
index 1299f9c0ac..ebdf4506c0 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_tip.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_tip.yml
@@ -7,6 +7,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -19,6 +22,9 @@
category: Armor
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -31,6 +37,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -43,6 +52,9 @@
category: Armor
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_visor.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_visor.yml
index 2906734c8d..825845fdc4 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_visor.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_visor.yml
@@ -7,6 +7,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -18,6 +21,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -29,6 +35,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -40,6 +49,9 @@
category: Armor
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
@@ -53,6 +65,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:StackResource
stack: CP14IronBar
count: 1
@@ -64,6 +79,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:StackResource
stack: CP14GoldBar
count: 1
@@ -75,6 +93,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -86,6 +107,9 @@
category: Armor
craftTime: 6
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:StackResource
stack: CP14MithrilBar
count: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml
index 50b51f8f31..15b422b43a 100644
--- a/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Workbench/furnace.yml
@@ -3,6 +3,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - CopperMelting
- !type:MaterialResource
material: CP14Copper
count: 10
@@ -13,6 +16,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - IronMelting
- !type:MaterialResource
material: CP14Iron
count: 10
@@ -23,6 +29,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GoldMelting
- !type:MaterialResource
material: CP14Gold
count: 10
@@ -33,6 +42,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - MithrilMelting
- !type:MaterialResource
material: CP14Mithril
count: 10
@@ -43,6 +55,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - GlassMelting
- !type:ProtoIdResource
protoId: CP14CrystalShardQuartz
count: 1
@@ -53,6 +68,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 2
requirements:
+ - !type:SkillRequired
+ skills:
+ - GlassMelting
- !type:ProtoIdResource
protoId: CP14GlassShard
count: 2
@@ -63,6 +81,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - GlassMelting
- !type:StackResource
stack: CP14GlassSheet
count: 1
@@ -73,6 +94,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - GlassMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -86,6 +110,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - GlassMelting
- !type:StackResource
stack: CP14GlassSheet
count: 2
@@ -96,6 +123,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - GlassMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -109,6 +139,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - GlassMelting
- !type:StackResource
stack: CP14GlassSheet
count: 6
@@ -119,6 +152,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 3
requirements:
+ - !type:SkillRequired
+ skills:
+ - GlassMelting
- !type:StackResource
stack: CP14CopperBar
count: 1
@@ -132,6 +168,9 @@
tag: CP14RecipeMeltingFurnace
craftTime: 4
requirements:
+ - !type:SkillRequired
+ skills:
+ - GlassMelting
- !type:StackResource
stack: CP14GlassSheet
count: 9
diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/alchemist.yml b/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/alchemist.yml
index 865f259a98..4b4223b4a9 100644
--- a/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/alchemist.yml
+++ b/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/alchemist.yml
@@ -6,6 +6,13 @@
startingGear: CP14AlchemistGear
icon: "CP14JobIconAlchemist"
supervisors: cp14-job-supervisors-command
+ special:
+ - !type:CP14LearnSkillsSpecial
+ skills:
+ - AlchemyVision
+ - MetamagicT1
+ - MetamagicT2
+ - CP14ActionSpellMagicSplitting
requirements:
- !type:RoleTimeRequirement
role: CP14JobApprentice
diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/apprentice.yml b/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/apprentice.yml
index 8fb12ea307..7e5f625a24 100644
--- a/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/apprentice.yml
+++ b/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/apprentice.yml
@@ -6,6 +6,11 @@
startingGear: CP14ApprenticeGear
icon: "CP14JobIconApprentice"
supervisors: cp14-job-supervisors-command
+ special:
+ - !type:CP14LearnSkillsSpecial
+ skills:
+ - CopperMelting
+ - AlchemyVision
- type: startingGear
id: CP14ApprenticeGear
diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/blacksmith.yml b/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/blacksmith.yml
index 8126c96418..eb87047691 100644
--- a/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/blacksmith.yml
+++ b/Resources/Prototypes/_CP14/Roles/Jobs/Artisan/blacksmith.yml
@@ -6,6 +6,14 @@
startingGear: CP14BlacksmithGear
icon: "CP14JobIconBlacksmith"
supervisors: cp14-job-supervisors-command
+ special:
+ - !type:CP14LearnSkillsSpecial
+ skills:
+ - CopperMelting
+ - IronMelting
+ - GoldMelting
+ - GlassMelting
+ - MithrilMelting
requirements:
- !type:RoleTimeRequirement
role: CP14JobApprentice
diff --git a/Resources/Prototypes/_CP14/Skill/atlethic.yml b/Resources/Prototypes/_CP14/Skill/atlethic.yml
index 780da468c4..3c78264db7 100644
--- a/Resources/Prototypes/_CP14/Skill/atlethic.yml
+++ b/Resources/Prototypes/_CP14/Skill/atlethic.yml
@@ -5,7 +5,8 @@
icon:
sprite: _CP14/Actions/Spells/physical.rsi
state: kick
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellKick
- type: cp14Skill
@@ -15,7 +16,8 @@
icon:
sprite: _CP14/Actions/Spells/physical.rsi
state: sprint
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellSprint
- type: cp14Skill
@@ -26,7 +28,8 @@
icon:
sprite: _CP14/Actions/Spells/physical.rsi
state: sprint
- effect: !type:ReplaceAction
+ effects:
+ - !type:ReplaceAction
oldAction: CP14ActionSpellSprint
newAction: CP14ActionSpellSprintGoblin
restrictions:
diff --git a/Resources/Prototypes/_CP14/Skill/blacksmithing.yml b/Resources/Prototypes/_CP14/Skill/blacksmithing.yml
new file mode 100644
index 0000000000..e2583653e4
--- /dev/null
+++ b/Resources/Prototypes/_CP14/Skill/blacksmithing.yml
@@ -0,0 +1,69 @@
+- type: cp14Skill
+ id: CopperMelting
+ skillUiPosition: 0, 0
+ tree: Blacksmithing
+ name: cp14-skill-copper-melt-name
+ learnCost: 0.5
+ icon:
+ sprite: _CP14/Objects/Materials/copper_ore.rsi
+ state: ore3
+ restrictions:
+ - !type:Impossible
+ effects:
+ - !type:UnlockRecipes
+
+- type: cp14Skill
+ id: IronMelting
+ skillUiPosition: 0, 2
+ tree: Blacksmithing
+ name: cp14-skill-iron-melt-name
+ learnCost: 0.5
+ icon:
+ sprite: _CP14/Objects/Materials/iron_ore.rsi
+ state: ore3
+ restrictions:
+ - !type:Impossible
+ effects:
+ - !type:UnlockRecipes
+
+- type: cp14Skill
+ id: GoldMelting
+ skillUiPosition: 0, 4
+ tree: Blacksmithing
+ name: cp14-skill-gold-melt-name
+ learnCost: 0.5
+ icon:
+ sprite: _CP14/Objects/Materials/gold_ore.rsi
+ state: ore3
+ restrictions:
+ - !type:Impossible
+ effects:
+ - !type:UnlockRecipes
+
+- type: cp14Skill
+ id: MithrilMelting
+ skillUiPosition: 0, 6
+ tree: Blacksmithing
+ name: cp14-skill-mithril-melt-name
+ learnCost: 0.5
+ icon:
+ sprite: _CP14/Objects/Materials/mithril_ore.rsi
+ state: ore3
+ restrictions:
+ - !type:Impossible
+ effects:
+ - !type:UnlockRecipes
+
+- type: cp14Skill
+ id: GlassMelting
+ skillUiPosition: 2, 0
+ tree: Blacksmithing
+ name: cp14-skill-glass-melt-name
+ learnCost: 0.5
+ icon:
+ sprite: _CP14/Objects/Materials/glass.rsi
+ state: glass_3
+ restrictions:
+ - !type:Impossible
+ effects:
+ - !type:UnlockRecipes
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Skill/dimension.yml b/Resources/Prototypes/_CP14/Skill/dimension.yml
index b32bafa99f..1f78e7c87d 100644
--- a/Resources/Prototypes/_CP14/Skill/dimension.yml
+++ b/Resources/Prototypes/_CP14/Skill/dimension.yml
@@ -1,31 +1,34 @@
-- type: cp14Skill
- id: CP14ActionSpellShadowGrab
- skillUiPosition: 0, 0
- tree: Dimension
- icon:
- sprite: _CP14/Actions/Spells/dimension.rsi
- state: shadow_grab
- effect: !type:AddAction
- action: CP14ActionSpellShadowGrab
-
-- type: cp14Skill
- id: CP14ActionSpellShadowSwap
- skillUiPosition: 0, 2
- tree: Dimension
- icon:
- sprite: _CP14/Actions/Spells/dimension.rsi
- state: shadow_swap
- effect: !type:AddAction
- action: CP14ActionSpellShadowSwap
-
-- type: cp14Skill
- id: CP14ActionSpellShadowStep
- skillUiPosition: 0, 4
- learnCost: 2
- tree: Dimension
- icon:
- sprite: _CP14/Actions/Spells/dimension.rsi
- state: shadow_step
- effect: !type:AddAction
- action: CP14ActionSpellShadowStep
+#- type: cp14Skill
+# id: CP14ActionSpellShadowGrab
+# skillUiPosition: 0, 0
+# tree: Dimension
+# icon:
+# sprite: _CP14/Actions/Spells/dimension.rsi
+# state: shadow_grab
+# effects:
+#- !type:AddAction
+# action: CP14ActionSpellShadowGrab
+#
+#- type: cp14Skill
+# id: CP14ActionSpellShadowSwap
+# skillUiPosition: 0, 2
+# tree: Dimension
+# icon:
+# sprite: _CP14/Actions/Spells/dimension.rsi
+# state: shadow_swap
+# effects:
+#- !type:AddAction
+# action: CP14ActionSpellShadowSwap
+#
+#- type: cp14Skill
+# id: CP14ActionSpellShadowStep
+# skillUiPosition: 0, 4
+# learnCost: 2
+# tree: Dimension
+# icon:
+# sprite: _CP14/Actions/Spells/dimension.rsi
+# state: shadow_step
+# effects:
+#- !type:AddAction
+# action: CP14ActionSpellShadowStep
diff --git a/Resources/Prototypes/_CP14/Skill/healing.yml b/Resources/Prototypes/_CP14/Skill/healing.yml
index 79d876019d..76077fcec5 100644
--- a/Resources/Prototypes/_CP14/Skill/healing.yml
+++ b/Resources/Prototypes/_CP14/Skill/healing.yml
@@ -1,83 +1,145 @@
+# T1
+
- type: cp14Skill
- id: CP14ActionSpellCureBurn
- skillUiPosition: 0, 0
+ id: HealingT1
+ skillUiPosition: 1, 0
tree: Healing
- learnCost: 1
+ name: cp14-skill-life-t1-name
+ learnCost: 0.5
icon:
- sprite: _CP14/Actions/Spells/healing.rsi
- state: cure_burn
- effect: !type:AddAction
- action: CP14ActionSpellCureBurn
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: heal
- type: cp14Skill
id: CP14ActionSpellBloodPurification
- skillUiPosition: 2, 0
- learnCost: 1
+ skillUiPosition: 2, 6
tree: Healing
icon:
sprite: _CP14/Actions/Spells/healing.rsi
state: cure_poison
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellBloodPurification
-
-- type: cp14Skill
- id: CP14ActionSpellCureWounds
- skillUiPosition: 4, 0
- learnCost: 1
- tree: Healing
- icon:
- sprite: _CP14/Actions/Spells/healing.rsi
- state: cure_wounds
- effect: !type:AddAction
- action: CP14ActionSpellCureWounds
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HealingT1
- type: cp14Skill
id: CP14ActionSpellPlantGrowth
- skillUiPosition: 0, 2
+ skillUiPosition: 2, 4
tree: Healing
icon:
sprite: _CP14/Actions/Spells/healing.rsi
state: plant_growth
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellPlantGrowth
-
-- type: cp14Skill
- id: CP14ActionSpellHealBallade
- skillUiPosition: 0, 6
- learnCost: 1
- tree: Healing
- icon:
- sprite: _CP14/Actions/Spells/healing.rsi
- state: heal_music
- effect: !type:AddAction
- action: CP14ActionSpellHealBallade
-
-- type: cp14Skill
- id: CP14ActionSpellPeaceBallade
- skillUiPosition: 0, 8
- tree: Healing
- icon:
- sprite: _CP14/Actions/Spells/healing.rsi
- state: peace_music
- effect: !type:AddAction
- action: CP14ActionSpellPeaceBallade
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HealingT1
- type: cp14Skill
id: CP14ActionSpellSpeedBallade
- skillUiPosition: 0, 10
+ skillUiPosition: 0, 6
tree: Healing
icon:
sprite: _CP14/Actions/Spells/healing.rsi
state: speed_music
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellSpeedBallade
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HealingT1
+
+# T2
- type: cp14Skill
- id: CP14ActionSpellSheepPolymorph
- skillUiPosition: 4, 10
+ id: HealingT2
+ skillUiPosition: 7, 0
+ tree: Healing
+ name: cp14-skill-life-t2-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: heal2
+ effects:
+ - !type:ModifyManacost
+ modifiers:
+ Life: -0.25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HealingT1
+
+- type: cp14Skill
+ id: CP14ActionSpellCureBurn
+ skillUiPosition: 6, 4
tree: Healing
icon:
- sprite: _CP14/Actions/Spells/misc.rsi
- state: polymorph
- effect: !type:AddAction
- action: CP14ActionSpellSheepPolymorph
\ No newline at end of file
+ sprite: _CP14/Actions/Spells/healing.rsi
+ state: cure_burn
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellCureBurn
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HealingT2
+
+- type: cp14Skill
+ id: CP14ActionSpellCureWounds
+ skillUiPosition: 6, 6
+ tree: Healing
+ icon:
+ sprite: _CP14/Actions/Spells/healing.rsi
+ state: cure_wounds
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellCureWounds
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HealingT2
+
+- type: cp14Skill
+ id: CP14ActionSpellHealBallade
+ skillUiPosition: 8, 6
+ tree: Healing
+ icon:
+ sprite: _CP14/Actions/Spells/healing.rsi
+ state: heal_music
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellHealBallade
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HealingT2
+
+# T3
+
+- type: cp14Skill
+ id: HealingT3
+ skillUiPosition: 13, 0
+ tree: Healing
+ name: cp14-skill-life-t3-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: heal3
+ effects:
+ - !type:ModifyManacost
+ modifiers:
+ Life: -0.25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HealingT2
+
+- type: cp14Skill
+ id: CP14ActionSpellResurrection
+ skillUiPosition: 12, 4
+ tree: Healing
+ icon:
+ sprite: _CP14/Actions/Spells/necromancy.rsi
+ state: resurrection
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellResurrection
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HealingT3
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Skill/hydrosophistry.yml b/Resources/Prototypes/_CP14/Skill/hydrosophistry.yml
index af95644d63..279e60ed87 100644
--- a/Resources/Prototypes/_CP14/Skill/hydrosophistry.yml
+++ b/Resources/Prototypes/_CP14/Skill/hydrosophistry.yml
@@ -1,62 +1,133 @@
+# T1
+
- type: cp14Skill
- id: CP14ActionSpellFreeze
+ id: HydrosophistryT1
+ skillUiPosition: 1, 0
+ tree: Hydrosophistry
+ name: cp14-skill-water-t1-name
+ learnCost: 0.5
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: water
+
+- type: cp14Skill
+ id: CP14ActionSpellWaterCreation
skillUiPosition: 0, 4
tree: Hydrosophistry
- icon:
- sprite: _CP14/Actions/Spells/water.rsi
- state: freeze
- effect: !type:AddAction
- action: CP14ActionSpellFreeze
-
-- type: cp14Skill
- id: CP14ActionSpellWaterCreation
- skillUiPosition: 0, 0
- tree: Hydrosophistry
icon:
sprite: _CP14/Actions/Spells/water.rsi
state: water_creation
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellWaterCreation
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HydrosophistryT1
- type: cp14Skill
id: CP14ActionSpellBeerCreation
- skillUiPosition: 2, 0
+ skillUiPosition: 2, 4
tree: Hydrosophistry
icon:
sprite: _CP14/Actions/Spells/water.rsi
state: beer_creation
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellBeerCreation
restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HydrosophistryT1
- !type:SpeciesWhitelist
species: CP14Dwarf
- type: cp14Skill
id: CP14ActionSpellIceShards
- skillUiPosition: 0, 6
+ skillUiPosition: 2, 6
tree: Hydrosophistry
icon:
sprite: _CP14/Actions/Spells/water.rsi
state: ice_shards
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellIceShards
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HydrosophistryT1
- type: cp14Skill
id: CP14ActionSpellIceDagger
- skillUiPosition: 0, 8
+ skillUiPosition: 0, 6
tree: Hydrosophistry
icon:
sprite: _CP14/Actions/Spells/water.rsi
state: ice_dagger
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellIceDagger
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HydrosophistryT1
- type: cp14Skill
id: CP14ActionSpellIceArrow
- skillUiPosition: 0, 10
+ skillUiPosition: 0, 8
tree: Hydrosophistry
icon:
sprite: _CP14/Actions/Spells/water.rsi
state: ice_arrow
- effect: !type:AddAction
- action: CP14ActionSpellIceArrow
\ No newline at end of file
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellIceArrow
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HydrosophistryT1
+
+# T2
+
+- type: cp14Skill
+ id: HydrosophistryT2
+ skillUiPosition: 7, 0
+ tree: Hydrosophistry
+ name: cp14-skill-water-t2-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: water2
+ effects:
+ - !type:ModifyManacost
+ modifiers:
+ Water: -0.25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HydrosophistryT1
+
+- type: cp14Skill
+ id: CP14ActionSpellFreeze
+ skillUiPosition: 6, 4
+ tree: Hydrosophistry
+ icon:
+ sprite: _CP14/Actions/Spells/water.rsi
+ state: freeze
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellFreeze
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HydrosophistryT2
+
+# T3
+
+- type: cp14Skill
+ id: HydrosophistryT3
+ skillUiPosition: 13, 0
+ tree: Hydrosophistry
+ name: cp14-skill-water-t3-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: water3
+ effects:
+ - !type:ModifyManacost
+ modifiers:
+ Water: -0.25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: HydrosophistryT2
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Skill/illusion.yml b/Resources/Prototypes/_CP14/Skill/illusion.yml
index 33f3548d33..4f050c32c9 100644
--- a/Resources/Prototypes/_CP14/Skill/illusion.yml
+++ b/Resources/Prototypes/_CP14/Skill/illusion.yml
@@ -1,33 +1,43 @@
+# T1
+
+- type: cp14Skill
+ id: IllusionT1
+ skillUiPosition: 1, 0
+ tree: Illusion
+ name: cp14-skill-illusion-t1-name
+ learnCost: 0.5
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: light
+
- type: cp14Skill
id: CP14ActionSpellSphereOfLight
- skillUiPosition: 0, 0
+ skillUiPosition: 0, 4
tree: Illusion
icon:
sprite: _CP14/Actions/Spells/light.rsi
state: sphere_of_light
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellSphereOfLight
-
-- type: cp14Skill
- id: CP14ActionSpellFlashLight
- skillUiPosition: 2, 0
- tree: Illusion
- icon:
- sprite: _CP14/Actions/Spells/light.rsi
- state: flash_light
- effect: !type:AddAction
- action: CP14ActionSpellFlashLight
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: IllusionT1
- type: cp14Skill
id: CP14ActionSpellSignalLightRed
- skillUiPosition: 0, 4
+ skillUiPosition: 2, 6
learnCost: 0.5
tree: Illusion
icon:
sprite: _CP14/Actions/Spells/light.rsi
state: signal_light_red
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellSignalLightRed
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: IllusionT1
- type: cp14Skill
id: CP14ActionSpellSignalLightYellow
@@ -37,16 +47,88 @@
icon:
sprite: _CP14/Actions/Spells/light.rsi
state: signal_light_yellow
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellSignalLightYellow
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: IllusionT1
- type: cp14Skill
id: CP14ActionSpellSignalLightBlue
- skillUiPosition: 0, 8
+ skillUiPosition: 2, 4
learnCost: 0.5
tree: Illusion
icon:
sprite: _CP14/Actions/Spells/light.rsi
state: signal_light_blue
- effect: !type:AddAction
- action: CP14ActionSpellSignalLightBlue
\ No newline at end of file
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellSignalLightBlue
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: IllusionT1
+
+# T2
+
+- type: cp14Skill
+ id: IllusionT2
+ skillUiPosition: 7, 0
+ tree: Illusion
+ name: cp14-skill-illusion-t2-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: light2
+ effects:
+ - !type:ModifyManacost
+ modifiers:
+ Light: -0.25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: IllusionT1
+
+- type: cp14Skill
+ id: CP14ActionSpellFlashLight
+ skillUiPosition: 6, 4
+ tree: Illusion
+ icon:
+ sprite: _CP14/Actions/Spells/light.rsi
+ state: flash_light
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellFlashLight
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: IllusionT2
+
+- type: cp14Skill
+ id: CP14ActionSpellPeaceBallade
+ skillUiPosition: 8, 4
+ tree: Illusion
+ icon:
+ sprite: _CP14/Actions/Spells/healing.rsi
+ state: peace_music
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellPeaceBallade
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: IllusionT2
+
+# T3
+
+- type: cp14Skill
+ id: IllusionT3
+ skillUiPosition: 13, 0
+ tree: Illusion
+ name: cp14-skill-illusion-t3-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: light3
+ effects:
+ - !type:ModifyManacost
+ modifiers:
+ Light: -0.25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: IllusionT2
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Skill/martial_arts.yml b/Resources/Prototypes/_CP14/Skill/martial_arts.yml
new file mode 100644
index 0000000000..2a54ec4ab9
--- /dev/null
+++ b/Resources/Prototypes/_CP14/Skill/martial_arts.yml
@@ -0,0 +1,29 @@
+- type: cp14Skill
+ id: SwordMastery
+ skillUiPosition: 0, 0
+ name: cp14-skill-sword-mastery-name
+ desc: cp14-skill-mastery-desc
+ tree: MartialArts
+ icon:
+ sprite: _CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi
+ state: preview
+
+- type: cp14Skill
+ id: RapierMastery
+ skillUiPosition: 2, 0
+ name: cp14-skill-parier-mastery-name
+ desc: cp14-skill-mastery-desc
+ tree: MartialArts
+ icon:
+ sprite: _CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi
+ state: preview
+
+- type: cp14Skill
+ id: SkimitarMastery
+ skillUiPosition: 4, 0
+ name: cp14-skill-skimitar-mastery-name
+ desc: cp14-skill-mastery-desc
+ tree: MartialArts
+ icon:
+ sprite: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi
+ state: preview
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Skill/metamagic.yml b/Resources/Prototypes/_CP14/Skill/metamagic.yml
index 74552479fa..e4ec21ef60 100644
--- a/Resources/Prototypes/_CP14/Skill/metamagic.yml
+++ b/Resources/Prototypes/_CP14/Skill/metamagic.yml
@@ -1,13 +1,18 @@
+# T1
+
- type: cp14Skill
- id: CP14ActionSpellMagicSplitting
- skillUiPosition: 0, 0
+ id: MetamagicT1
+ skillUiPosition: 1, 0
tree: Metamagic
+ name: cp14-skill-meta-t1-name
+ learnCost: 0.5
icon:
- sprite: _CP14/Actions/Spells/meta.rsi
- state: counter_spell
- effect: !type:AddAction
- action: CP14ActionSpellMagicSplitting
-
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: meta
+ effects:
+ - !type:AddManaMax
+ additionalMana: 25
+
- type: cp14Skill
id: CP14ActionSpellManaGift
skillUiPosition: 0, 2
@@ -16,18 +21,23 @@
icon:
sprite: _CP14/Actions/Spells/meta.rsi
state: mana_gift
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellManaGift
-
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: MetamagicT1
+
- type: cp14Skill
id: CP14ActionSpellManaGiftElf
- skillUiPosition: 2, 2
+ skillUiPosition: 0, 4
learnCost: 0.5
tree: Metamagic
icon:
sprite: _CP14/Actions/Spells/meta.rsi
state: mana_gift
- effect: !type:ReplaceAction
+ effects:
+ - !type:ReplaceAction
oldAction: CP14ActionSpellManaGift
newAction: CP14ActionSpellManaGiftElf
restrictions:
@@ -38,14 +48,18 @@
- type: cp14Skill
id: CP14ActionSpellManaConsume
- skillUiPosition: 0, 4
+ skillUiPosition: 2, 2
learnCost: 0.5
tree: Metamagic
icon:
sprite: _CP14/Actions/Spells/meta.rsi
state: mana_consume
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellManaConsume
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: MetamagicT1
- type: cp14Skill
id: CP14ActionSpellManaConsumeElf
@@ -55,7 +69,8 @@
icon:
sprite: _CP14/Actions/Spells/meta.rsi
state: mana_consume
- effect: !type:ReplaceAction
+ effects:
+ - !type:ReplaceAction
oldAction: CP14ActionSpellManaConsume
newAction: CP14ActionSpellManaConsumeElf
restrictions:
@@ -66,10 +81,62 @@
- type: cp14Skill
id: CP14ActionSpellMagicBallade
- skillUiPosition: 0, 6
+ skillUiPosition: 1, 6
tree: Metamagic
icon:
sprite: _CP14/Actions/Spells/meta.rsi
state: magic_music
- effect: !type:AddAction
- action: CP14ActionSpellMagicBallade
\ No newline at end of file
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellMagicBallade
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: MetamagicT1
+
+# T2
+
+- type: cp14Skill
+ id: MetamagicT2
+ skillUiPosition: 7, 0
+ tree: Metamagic
+ name: cp14-skill-meta-t2-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: meta2
+ effects:
+ - !type:AddManaMax
+ additionalMana: 25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: MetamagicT1
+
+- type: cp14Skill
+ id: CP14ActionSpellMagicSplitting
+ skillUiPosition: 6, 2
+ tree: Metamagic
+ icon:
+ sprite: _CP14/Actions/Spells/meta.rsi
+ state: counter_spell
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellMagicSplitting
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: MetamagicT2
+
+# T3
+
+- type: cp14Skill
+ id: MetamagicT3
+ skillUiPosition: 13, 0
+ tree: Metamagic
+ name: cp14-skill-meta-t3-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: meta3
+ effects:
+ - !type:AddManaMax
+ additionalMana: 25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: MetamagicT2
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Skill/pyrokinetic.yml b/Resources/Prototypes/_CP14/Skill/pyrokinetic.yml
index 0b5bde0be1..54c3b1359a 100644
--- a/Resources/Prototypes/_CP14/Skill/pyrokinetic.yml
+++ b/Resources/Prototypes/_CP14/Skill/pyrokinetic.yml
@@ -1,45 +1,121 @@
+# T1
+
+- type: cp14Skill
+ id: PyrokineticT1
+ skillUiPosition: 1, 0
+ tree: Pyrokinetic
+ name: cp14-skill-pyro-t1-name
+ learnCost: 0.5
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: pyro
+
- type: cp14Skill
id: CP14ActionSpellFlameCreation
- skillUiPosition: 0, 0
+ skillUiPosition: 0, 4
tree: Pyrokinetic
icon:
sprite: _CP14/Actions/Spells/fire.rsi
state: flame_creation
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellFlameCreation
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: PyrokineticT1
- type: cp14Skill
id: CP14ActionSpellHeat
- skillUiPosition: 4, 0
+ skillUiPosition: 0, 6
tree: Pyrokinetic
icon:
sprite: _CP14/Actions/Spells/fire.rsi
state: heat
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellHeat
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: PyrokineticT1
- type: cp14Skill
id: CP14ActionSpellHellBallade
- skillUiPosition: 0, 2
+ skillUiPosition: 2, 4
tree: Pyrokinetic
icon:
sprite: _CP14/Actions/Spells/fire.rsi
state: fire_music
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellHellBallade
restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: PyrokineticT1
- !type:SpeciesWhitelist
species: CP14Tiefling
- type: cp14Skill
id: CP14ActionSpellTieflingInnerFire
- skillUiPosition: 0, 4
+ skillUiPosition: 2, 6
tree: Pyrokinetic
icon:
sprite: _CP14/Actions/Spells/fire.rsi
state: tiefling_revenge
- effect: !type:AddAction
+ effects:
+ - !type:AddAction
action: CP14ActionSpellTieflingInnerFire
restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: PyrokineticT1
- !type:SpeciesWhitelist
- species: CP14Tiefling
\ No newline at end of file
+ species: CP14Tiefling
+
+# T2
+
+- type: cp14Skill
+ id: PyrokineticT2
+ skillUiPosition: 7, 0
+ tree: Pyrokinetic
+ name: cp14-skill-pyro-t2-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: pyro2
+ effects:
+ - !type:ModifyManacost
+ modifiers:
+ Fire: -0.25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: PyrokineticT1
+
+- type: cp14Skill
+ id: CP14ActionSpellFireball
+ skillUiPosition: 6, 4
+ tree: Pyrokinetic
+ icon:
+ sprite: _CP14/Actions/Spells/fire.rsi
+ state: fireball
+ effects:
+ - !type:AddAction
+ action: CP14ActionSpellFireball
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: PyrokineticT2
+
+# T3
+
+- type: cp14Skill
+ id: PyrokineticT3
+ skillUiPosition: 13, 0
+ tree: Pyrokinetic
+ name: cp14-skill-pyro-t3-name
+ icon:
+ sprite: _CP14/Actions/skill_tree.rsi
+ state: pyro3
+ effects:
+ - !type:ModifyManacost
+ modifiers:
+ Fire: -0.25
+ restrictions:
+ - !type:NeedPrerequisite
+ prerequisite: PyrokineticT2
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Skill/skill_tree.yml b/Resources/Prototypes/_CP14/Skill/skill_tree.yml
index 52f276c83a..8011fb254d 100644
--- a/Resources/Prototypes/_CP14/Skill/skill_tree.yml
+++ b/Resources/Prototypes/_CP14/Skill/skill_tree.yml
@@ -2,7 +2,7 @@
id: Pyrokinetic
name: cp14-skill-tree-pyrokinetic-name
desc: cp14-skill-tree-pyrokinetic-desc
- color: "#b52400"
+ color: "#d6933c"
icon:
sprite: _CP14/Actions/skill_tree.rsi
state: pyro
@@ -52,11 +52,34 @@
sprite: _CP14/Actions/skill_tree.rsi
state: atlethic
+#- type: cp14SkillTree
+# id: Dimension
+# name: cp14-skill-tree-dimension-name
+# desc: cp14-skill-tree-dimension-desc
+# color: "#ac66be"
+# icon:
+# sprite: _CP14/Actions/skill_tree.rsi
+# state: dimension
+
- type: cp14SkillTree
- id: Dimension
- name: cp14-skill-tree-dimension-name
- desc: cp14-skill-tree-dimension-desc
- color: "#ac66be"
+ id: MartialArts
+ name: cp14-skill-tree-martial-name
+ desc: cp14-skill-tree-martial-desc
+ color: "#f54242"
icon:
sprite: _CP14/Actions/skill_tree.rsi
- state: dimension
+ state: martial
+
+#
+
+- type: cp14SkillTree
+ id: Thaumaturgy
+ name: cp14-skill-tree-thaumaturgy-name
+ desc: cp14-skill-tree-thaumaturgy-desc
+ color: "#7c52bf"
+
+- type: cp14SkillTree
+ id: Blacksmithing
+ name: cp14-skill-tree-blacksmithing-name
+ desc: cp14-skill-tree-blacksmithing-desc
+ color: "#6b3200"
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Skill/thaumaturgy.yml b/Resources/Prototypes/_CP14/Skill/thaumaturgy.yml
new file mode 100644
index 0000000000..89a3961eec
--- /dev/null
+++ b/Resources/Prototypes/_CP14/Skill/thaumaturgy.yml
@@ -0,0 +1,15 @@
+- type: cp14Skill
+ id: AlchemyVision
+ skillUiPosition: 0, 0
+ tree: Thaumaturgy
+ name: cp14-skill-alchemy-vision-name
+ desc: cp14-skill-alchemy-vision-desc
+ icon:
+ sprite: _CP14/Clothing/Eyes/alchemy_glasses.rsi
+ state: icon
+ effects:
+ - !type:AddComponents
+ components:
+ - type: SolutionScanner
+ restrictions:
+ - !type:Impossible
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/tags.yml b/Resources/Prototypes/_CP14/tags.yml
index 30948e227f..382354c162 100644
--- a/Resources/Prototypes/_CP14/tags.yml
+++ b/Resources/Prototypes/_CP14/tags.yml
@@ -141,3 +141,6 @@
- type: Tag
id: CP14RaidLeader
+
+- type: Tag
+ id: CP14EnergyCrystal
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal.png
index c59080bf51f063511c8745b2098c3736789979c7..1bbc425b763f857e526b07f2ede14ff6d0bd6afe 100644
GIT binary patch
delta 244
zcmVhCRUm__P)$$OC3_Y-6bOCl8u7xXn@nzHWFL|scprUY(Ocz2Dly%yYMz2F_XkVwln0Ca+=%`|TIA4b
uN?_ZR%Z1habi#3>xkep_oqq0000X$F@NPrL_t(oh3!_c5yK!56O<{kL>d~V$plOiGKnYfG&D3`B1KxK
z$dThN9DV~2F09%{LjU3)7z_ab^P*M&c)js7+FMS-$tioi-~j;ln-_=$^hDs4!1w08
z1&rW4!Gp;uJ2_=b|Cdw}uA~SGdB`mgWw$4WI*>xBc?)MqJ$n#HYnrWE02i_X;u{<7
zZEjGNxPx#{YgYYR9J=WmOT=}AP|LL7%K}eVMCMCc!HcnJP9YrY0}W-5*D_x(9NL3kOf(=
z$TyQN?At$<1sc-yaf
z+So~(-1CYn(&DCkh|`yAqlgo!XE?$KjPj;EQrcHTOSO6G{?w
zz^~!ZI}?j4x6xR23)OrJZcqGo32KmabwVY{U1o}9ASBKiU}7ckSFe~8Vvo_#J40Jf
z>_%+%fFH@0F)>my@bk;Z5hy7V>;ds8cD`wma?(^l+ACKI(p;Nxob^&86HPbl5KpME
ViID^tnWz8&002ovPDHLkV1mmDhQa^<
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal3.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal3.png
new file mode 100644
index 0000000000000000000000000000000000000000..febc9889352429591cb3bcfc427ce9d294628f17
GIT binary patch
literal 497
zcmVPx$t4TybR9J<@S1WGAKop!zsAXC(ag_9Qol6VGZA@)c
z0hP2|Z5BEa>WG<&=oLU@%hP$^6w}0ZU2<}FJ>x^+CsEu+>L*b=#`m2~m8)$b$%GF0z{x1jESRMp3eK1$HRBiptf*|Vlo?*
zd91zg4<@&qOfZ=VCjBIeT}5asU^CN07L!x&bmnsLg7pi1t(p3d%`~{iJ)bx|0NU*~
nC5W@0f=nTF@M8JL_t(oh22-t4uBvCgw}`Cm)DCbQmHeo5BDFxdyx@9Yb&)40XZ99do!ehP?*uictVqo;TK
zdat*;)QVZgC>W3;=__pO{W`V}_*j=jUDcGfkE;hPZ(nR3b8k%FXK7eynJ5yIL-R
z3(!Jt3gIMDe>oPqP5|JXyA&uJATg_wJP5H#GGUspfQp)Xph#8-wft0wO41sARB+YN
zS~X2b-vy8Flkd^>5^BEPx#%1J~)R9J=Wm%$Q)APht|PXF8Z<@N$C2$Vno(;4@KPRLsz0s|v3C
z+2D+k696{%d=!FMkf<6{P?q_B($>vZ4|!x*?we*!j-&=gByH*cQbKmu1`)A;@7rAl
zS~};X?JrWepKH$%YJs}uUI{$_`Aj4R!Zpl{ss@itd?1(l2pPA}K$k|=z$g>l@TS9P
z`6w^&HFi1h}3
W=HYjf`Gar(0000Px$B}qgrfo{;E
zB32n#Ei4#G003LQKa`iqKs0JrZ_;2CxH&|`FfzwC!^$$PKq2v%
z2#>c!m}~m{u`vmx@ra~WQv+ke5WFlxnm7RL`5F+B$~e2;XZcMAq!!N0ZCPtq;!HCw
z-CUb&Hlt-d0N@OX8_ja^EdMCkEoMCXhFWeu_PiA^7*KN{RIq12FflFe*^KrTvm7=e
zY37JXh)AXC{)u;GponGiLduiw?0gJw$)F_Gd)9>~*4{96%P`e_J++65=J`c9v=mpZ
zfM+*6dNZ1>knl5Mcn7=%D`M;7o7u+$3{-#3%vl~FJauqchA$8Z)BwZW0iyr_002ov
JPDHLkV1o1PmHz+$
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/martial.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/martial.png
new file mode 100644
index 0000000000000000000000000000000000000000..a04674adfaf1a2b19f3dbacbedd376bc7b090e89
GIT binary patch
literal 490
zcmVPx$q)9|UR9J=Gm&LM4K)v?)sm>T4&d!@`-jgygRvmDQAv}(lam2(HRE}B87&K0&<
zj)P87zP}0{Dq>f-PXt|?!YP3Uoz5na5AHLHn%us75>oZ+l`
zL@s!T36Os-;>h7tK0y}%m{fxXe7b)AD4*ou0w=?txk@dEbN|-+t`JhPNvNwk%I?Qk
z=-VQCb^!Qp9MU>W?)SY?h6Guw`I=AP{-9Ijb%6We=3`nbl6f%bbTUC*h??~83*lC9&Iq2cCH!%1DlBVH#X)0#`D*Gt0v^GXVFVU%8;OPq
zn8ziePO2BZAcG$t;it$|$Y9_3-r2^$8K58jsUQAnw6|Mx8SO3ceF)f^cnspa0zlfL
z+*`mAoZDlM44sP@SRdfOwF1%>B^N>As-3DN{V!_;5U31&j(>ZRC1|<nIbQ;L|k`{#Tjrnb)j`XMJTl&5Uhfb3p9As4U_$(8$BgPB8Gqma^$BV}R00000WbcD1NQ@vF@Ld1L_t(oh3%KIZi6rohJT`{OT@^7^a+?cvP8=27w{v%NVcwd
z0ahebi6`K7>JibY5*_HJm&-v++K@`^FJ-_4-)H+j`waXBnbP&9biFk$y>%>WTuSjy
z0B#*viejz+Agqxs4RDW`|56pm25Vf}CdlbItdSjxXulW$xqovTZvX&Q(;eUWz?jnY
z#V$JQ*9*WJmp(mjavqdGILsJ`DP2Ez##XYSYC429GD;H(vyC_4OT^&;VD56Q`0m#x
z$hG|B5Co#>n%rJ%#MEZt)X@UNi21kI8a3dZX$IokwDf~EVgmN{!kXyGKt9w}(+x23
z5R72>Y_$n;3x5adf2^;g35#76_z)k1Gm$Z6``GfS0Gj0SEX}A%LR=cuBmi*k?65{A
zL8_+1%bSmU0;nMYR7G0AE8gr*@FF2}yD-O#x36N===5vYwE~`kbSB
zRKDdqFTsDL?6=0HOWYm)pzblPCo%7SHKT?lFQ>PTO%;0000Px$u}MThR9J=Wm$7bxFc5}+qNq#6$b<9=m^!jV%IX*JBfv;aH7>n%ENfg!@lF749axHDt^gpc
zku42ykC^{b703o_T-qkc={c;C9g1kb7y!9*8*cyrRnr~c`M{Xc^~Eka>(>jw8kasj
zZ*m@#Ksd}8h$&q^cg9w-p=vsWH8M&Q3A2qi;7i2e0buTOt@!TOCdjq?6+YL
zYsA!M;ndLr!-)B}*BUk8ooNQ*+qCq9Hev$y^}?Fy$v{5TRnrYH@eqt)_-wTaatjCQ
zf2^;g35#76_z)k1Gm$Z6``GfS0Gj0SEX}A%LR=cuBmi*k?65{AL8_+1%bSmU0;nMYR7G0AE8gr*@FF334q>0Z$W3O`UqOo{-1-oTGYFzU4bF!GEOex5lMQ
t+#UX)?lG+=G4FmgqlP6fr?-ydtq)YBFva^>;0^!)002ovPDHLkV1n}s>aG9)
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta3.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta3.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5dfa07c4b686adab6f8a904157ca0b6a25bb691
GIT binary patch
literal 704
zcmV;x0zdtUP)Px%dPzhpm&5?^&KT`F2j
zG^F%N=Pz)T%7s5*OGM*4g%rNw#>=vc!FiHpvCHgxJ2TAe0yjn&i0EpgU?ZwvBdT7;
zR}zPTh=}h(Kwsj%_GDuLfSY4AM1Y%P#YND1N$Rb2HUKahLM(&AQ22=FGY8qOgqvff
z6LM1lvIrVW7hWsR_|^hA<}=6mjwKI-frz;JHW$)P`J8Oq1r66wGLiahSJrb}jESsQ
z4upY-9-f_;lX5rGxSL~J`1q+Kr}uU72NWS7)xbHCvRzp(STBrHN!}&qGRC}u6+U8C
z6TWj%9QW_`1u6a7Hlh`viqFT`t8M`|$Cl#U23_oH0l;M)CnMQdCZZfriTK$4)9DD@?JfR)#Qz_>WrwCCmV+1o0000Px$e@R3^R9J=0S22!*Fc2J~d(yQ?sjj8t4;1$X;0+Y{1KqW$PNGa+ai2)(D`1Hi
z)@B#s%Z-E-nXoe+&)NX|2e=N-b#SgklbowWLwrm?3Zm$JCg8xCYilKOdykWEhbkD*
zG7$q>0Lc3E*1Xzz
z5a}d7p%!)-vyyO$9_9a9gLV}cXK6aii6*dJdldPE8_jDZt@w}%qK61_{$6tQT
vq=)5W;;0!@oiT*5x0+P&IbZ&9`bzu)yiV Aw0~00000NkvXXu0mjfS_Hxc
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/pyro3.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/pyro3.png
new file mode 100644
index 0000000000000000000000000000000000000000..37ac5e1aa9647b1c9a4f36d43000e88c37ddf3fa
GIT binary patch
literal 604
zcmV-i0;BzjP)Px%7D+@wR9J=0S37RQFbsVPdZeyiyJpKBJmd_P_ih<_2X9@odQ47{OJrn+m?}k)
zvegu52?R(a@uSB_QUU&h&k}`Y;X!80KyX)RaKxVE<9T5g>=
zmx1ql^Gq2)<#4mp4#S!)I{;~*!=O`Or6rNdLrWkkr65Hj&c1&rc_Ii&Cy+-lnRn}q
zuf))82tu>Hg*){W01rNRdDJB~W5kRR9R|GjL#+=aJ!>&bgCznL4Qp%vFcDaVP6Sr%
zj?1~4y)1wXt{G!B|Ar*wJR-KP-
zJz43hjz`@U!x15au-507^MHa~m1MOMS>>~7rY|=wO4R5FFEu-f1J)ohAeX^$)zBU$
z^ejFJ^=oEQJwl7jw=UU=_$g4$WbHjDC*#_gZ2_FO7czgG9RKw7ykli+vxr=k+B1^*Tw}QR
qrhh5`{oioQ^XXR{TYpafQoaDVw`J@)nuEXq0000VyMXa4^$-uu3R)^-)|ecu4H55)nr
zwiq42>||nKU|^utBF6#9fS9yFGY3#=IRnE`O#{e|fU(KV1*3p!U?AF+qhJ(J5747ahS$yk
k@0!5`=-D}?wLL@w0G)q;mqVv!u>b%707*qoM6N<$f{(go6aWAK
delta 293
zcmV+=0owkO0?Y!CFn<9CNklST5JeA^9w@U%Hb|Q(Siu8e2FMB-Ayry$
zz#36X!vs!&PO`zl#+(5~yb2q{|GG2Z7+?>SjZ$T!6cdui)?z|()H4jk79N6{DF8sx
zwe{Ktw$MC?2NRNqenBaf37O>;)w}k`k`j}MKi_6jQkpsWJb(21nB)7k7#YF2vQg@B
zNfIJ|J+>C;nQq%h@V@KaK~9;FTxNN7JNIL(P|>xuUI_pIS2es^FvYMvh;JJf<-jlT
zIRq~jYy*z<@~>h5P2jaIj`JagoPw?lu;s=Sv)8~d^KBv&Yhw|l(d`>3p*UOc-`niL
rZrI{)$I#sTXdZ?WYaUKx>v;181R1${K9eS?00000NkvXXu0mjfO(=wY
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/water2.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/water2.png
new file mode 100644
index 0000000000000000000000000000000000000000..af5f50fad195bb15f1e8de7f8d63daa41220179b
GIT binary patch
literal 332
zcmV-S0ki&zP)Px$21!IgR9J=Wm$40lFc3u#lpZLvM>a^CDOkY+Un#1VhzApr
zhkijRl?j>U71g`;$C470h(F(EQc{{Z`8@RcnB)7k7#YF2vQg@BNfIJ|J+>C;nQq%h
z@V@KaK~9;FTxNN7JNIL(P|>xuUI_pIS2es^FvYMvh;JJf<-jlTIRq~jYy*z<@~>h5
zP2jaIj`JagoPw?lu;s=Sv)8~d^KBv&Yhw|l(d`>3p*UOc-`niLZrI{)$I#sTXoeGO
e9!_KHc=H7W8M%5slP0ME0000Px$mq|oHR9J=0S3zpSFc91X8+@~k!H^&H0loQ{9P@=<`~^S2>I3qHKB1>v3ihqJ
z`5Pr*FltW~B%mI`f}=|E%8i}QE%Kt7XlGX|fd7EJkuq&IHaDaP^cQ8Jw)aHcxgJO@+Elyk$R#!b>e`({UpeE7?q}!
zP`u;h+^4ticRvX-EXh8J?le%8t$8^K$QvnjpxHrjrM#J89PgHHEUmr6oI14~Bb#1mm
zh0@>eN;-BjvTpeLL4P;=n)wGn@_+qenDQEHS*
za6F#+o=sx0+MupV<6^?=3Wzj@3E1d|doij3YvNVA3tOgs;@<`BYjDA93F9a=K`1_i
v+fF+#q4!4=M``~NwNC@C;tazu%wO;Tm)%ia$J&ag00000NkvXXu0mjf9fNFO
delta 255
zcmVKO*0Y`j4o68ZZ@S7=~f~f(PaoQu142dK~}&002ovPDHLk
FV1gb0a6SM4
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi/meta.json
index 2239e3ce26..0103caf9e3 100644
--- a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi/meta.json
+++ b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi/meta.json
@@ -22,6 +22,9 @@
{
"name": "icon"
},
+ {
+ "name": "preview"
+ },
{
"name": "inhand-left",
"directions": 4
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi/preview.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi/preview.png
new file mode 100644
index 0000000000000000000000000000000000000000..b51cba529ef4002e2028c6a69d5aa6bd1790fd6b
GIT binary patch
literal 426
zcmV;b0agBqP)Px$WJyFpRA_I2jf4GNZQt>A6aU85<(VOG>`}iRlV(y$ceDinMu$ig%Vg$CH0ZXK
zbVXZhhh?&P0stqqiC*&--un~2UYk%AA`o+hLo#zEQZ+h~))A5t#WHzs_xP+=ur_NT
zowAgL2qb_Un?bj2xV=6AC=H>N9GT(Kv4xej?f?J)
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-BELT1.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-BELT1.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5a44c2f67ac274c41875021af3ebe3bd3dba486
GIT binary patch
literal 377
zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zjXhl)Ln`LH
zy<_Xe94NweVfBut5HYhwt@cZoc;0cUYF)DRyjM)iI)y_A)+BPdURV;~BI08jT@hv`
zl-wmLto~f*!Q+qj_OAb<1T+{5659N>PiOm^81>EaTG%x4mk&0~wYodcJz|=U{-xKq
z+ub8BJln+Yz?*aMQP%B-_T%3*PG`n`?A;hzngCS%BSZb%dA(JAc}s4YEznthF)R1F
z=zR(4(6-ddiSOR$C7bN(+%)G{N=(SC`z}*!93$hFbabpg-QSThA1o?(KVz!ziv{*R
z=k@&s1vhTrEgyb;`Z9T#)4=qP^K`PLf8U(I6Sw_RTGGXX?qRkaCt@3+Dlzxp2}T0lW%Yzdd6~6u}Fx2p?ZLTP4m_;PDc@+t>F^0JCYK&
zNE|=%-ul4p#IpO->REusLcyN{6(*j49VdIue;ogcf7X?^S6@E+c8>c;E>KKveq78y
z@onDn4L&u0?@!KUzEvjpo&WsKW1GFUhpR_#h}y=xVwK;Pw@TN4^lqG5T(LcT`Knh(
z3T_-Z_%LwJ+-s5ZxA&D5@vZOoPcoZ-?CRB07nePMyY_UH-_%dCnYH9*jg+8Z_3qz=
zg_Z9#BK>-p>Ut_cgNh
nGwx1#A$_yK|4T1WpV=MlLiJY3N#}yPu*o3E;4g8ncuKI@=eio!-Z4#!u$mkCm81lZoGI%;E2=en8YwF{^i*iQefY!w3v^bQ#P8X%xA$&{Sg4hq
z<@u^#%6A&J%E_lizUE$#$`p}ov#C4@tU(RJP+ww~@TF?H`&z1j5
r|Fe8xUcG(c?U$xz+Av3<&I8
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd25ad4a3598643f66d68934cb0bfb68311b5db8
GIT binary patch
literal 443
zcmV;s0Yv_ZP)Px$bxA})RA_0yumdtL6M;A(Tusp7^ZaGf~xB
z0NDTJog#>`3C0tj0YKC2005oN6`E#;ug%AwhG=yoJNEvT8o+Piy!f*VDj{IaSW-L
z^Y+fhyjuYx$3E(Z&Oab5yGqN8En<<&)a~!4YMB;mADpEaeB#nMF=n02Wjt%%3QKTy
z?tPmSsxU2uLGg%#THM1jhiy4ht^r5wH2&1jp1AY-54roVU&?R-Ekgn}jYUVxuNiuL
zE8MeT&YfQm*FK-#BmAIJwX}NTNu`qNiJ$jOI(kJijq}6(eVb=l9k$}TEW07%&T2uH
zS?8X$zH54!^G?cf!O=(iPGoNPUmI2awCjDBUE8j`C#GueTOIoP+5HCF*9?#NA71_1
ztCDH);`Qt4n^o3XSjyk~oqhb*h5A`*w^>`+O;m}Eo8vv{U7qsi=jQwi!q)D7asK?1
zU$1_-9d@+e$#=Mq?;HQuzsI+4OFh#Y8LnB%Z$e-HH@dJ$i9*Hx)i3fZ;L8t$6B>V_2TxnaaB5*)nal;
zp#Wt%D6Y|Z*&S4|ux#g}^|8`6bI-=^O8R73m1(&0`P3^MP43wZv)69>{pY2Q=DO;2
zT>b~{=57%W*N=;v^Z)V&<+{g*Hw2etsGadLyPV5(sr6RSwq@r1n=a+)7tId2_x$7&
zj!B!o?&817zW(0lDQ(UBmTlfy{rT6`#gEIYC!XHD_F&i^R#)%sMjqdnb{ut2Qsz+6
z)&Bn3tKlZ!4YtG^ft#)R0WXFEI0V{ex2-}dv%=bsYG_Jf2xUHx3vIVCg!0OgW3%K!iX
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/inhand-right.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c55843bd1363ad0c409dff1606b89f0a5544066
GIT binary patch
literal 657
zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>VDk2KaSW-L
z^Y+fh?As0^$3M>Z{?Fte>1=ev+e72lE^)52cbfL5oe)XSY@c+nV#9QmV7B#~Z}plT
zs&BiBNKb#n!+EfxKO`i5$1!x-*5D3(=R(oxk
zk{I~?uM+>{h|umG|JBtGd}a>T$y3?;&r4g({K-$pMJg&$jFX=1shV5TF?Gv|-*rJu
zZHqT%UU@ys=bgAwXQ=7SJF5fNXIn_=mur9fb70D;zLjBF*?;*~gk>!YDf5|>yF#G+
z65o$+y~6+QXv$
z6PESt+dH@4zuzA!w%%Qx_+aV&>IYA+-n^y0AZq2z2hX>E0BQOgXKqt=w{M%-_Vi;}
zX$-kSZ|w5-R{*)Hoe$h^to;ErVUpaDHya;#_p2P>%VAgj@Yz>ADeeO!QW!v)Pogeq
zeM|L-(VUzn8+WSQEaTob=gaZ$=PqeW6$d-L{Mk4&)OViCmMdkuw!3b5=oa>L$;!12
z8Jz$39N=?L{`}QjeQIS)++5LR)lpAYKC|4)Ipvh!4gVLPPj)W(QO9{U?DiS$=k@1;
zq8YC@FG!gF|Kr7n_Gf!@>{+k-K0g^Ry3)Sz;#2wDEJfQl_8a^B_iuSJy&y)PRa3s&
e5au<9sDBK8CU2#!KXwFy#5`U7T-G@yGywoD8#0{$
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/meta.json
new file mode 100644
index 0000000000..8a6dedae1a
--- /dev/null
+++ b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/meta.json
@@ -0,0 +1,45 @@
+{
+ "version": 1,
+ "size": {
+ "x": 48,
+ "y": 48
+ },
+ "license": "CC-BY-SA-4.0",
+ "copyright": "Created by iwordoloni (Discord) ",
+ "states": [
+ {
+ "name": "equipped-BELT1",
+ "directions": 4
+ },
+ {
+ "name": "equipped-BELT2",
+ "directions": 4
+ },
+ {
+ "name": "equipped-NECK",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "preview"
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "wielded-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "wielded-inhand-right",
+ "directions": 4
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/preview.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/preview.png
new file mode 100644
index 0000000000000000000000000000000000000000..ada7e2858debb2d497f50677a391caad78cedb97
GIT binary patch
literal 527
zcmV+q0`UEbP)Px$$w@>(RA_NFY$q=mJbkUQ^b
z(gfH|LFABW=8M^?m2BZj33a-G(kr#ms8g;~xj3(h>Hmf31KI?vXXEzfI#meKC
zGTlyATPTUX7sZm#bP~~j?Cn&G)fP&UT&?=({W}VNO-apy!{Kl^91h10d;v!voMvTJ
RV!8kT002ovPDHLkV1mEw;`9Ij
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/wielded-inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/wielded-inhand-left.png
new file mode 100644
index 0000000000000000000000000000000000000000..15f6491603d7c36b41061472c22b7f2635b2f460
GIT binary patch
literal 682
zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>U`p|HaSW-L
z^Y+fhY^g+v;~(R_|2NH!aW;CP)K<`)rZ1vb-TjYwZr1jO6b{)*Jh{vHPAWxAvR|OE
zV|i@f0*+iG4JENhCI1iIR@`Iu%qPhy>b~{<`DcUsj(^|z{awxZ=M#bU!GX%kn_Op|
zx9xuSa}jgJioE4(y>?oe-k4f+wZ!_ZYwH%9w#DATI;?85KQ9-WaQ5f22(B{)B{O$K
zPM9HiA*XfOw%P?6Qs-;zyN<2Ol~;Ke@+IjaA?X|87@{kGQ^i`oGPtM{V`hna(_`d0Z)ZwXCe^Qk&qdh!mWDfj=!zqgwo>r87}nSJopsaYy#r@FxX4rMrGsjR*7
zV&j~(g0IVNZT$aZ`NYkf6@S%ch=eYgxta6F&)3_3HOH+{v&fy}+aR)D)LS`SIAOJP
z{)+`sCbP)>GowRAX(gZ|Lsc
zJT1cGfbhZ#HxZ&r_9xWz*kcg+N
KpUXO@geCx0#WuzO
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/wielded-inhand-right.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/wielded-inhand-right.png
new file mode 100644
index 0000000000000000000000000000000000000000..730b1e8bc2a497ca925da2ea1af6f0f5e703e2ba
GIT binary patch
literal 674
zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>V2bf{aSW-L
z^Y+gEtlI%1$3Mn9&p$9ZJemJnQcjon%Ibv+*fTaNdQbN&-QI9gz)D5(mY?h;)d!Q_
za7yf19_zBfaLdVrWGAkVOTu@^UeZ?jpUH7$qE5a2WL=$NOZQ7t*IBqT0d0hV(^p^q
zQhR5(run5szDLmFdnV0w`tt}cKl;6Rgt8A;+U98af|Ho(2mfhtEr>3ro+qc5D
z^3TF$-pgOl1{(YL+r&SgjZ=*xpBA&m#{HPI#Na@0)#aXJhdtWt>i#X-UF^Iw=xY01
zS=NIt)5Yyh{#+fgYNn6c>TBP=`Ruv3zgoI(`@#JB-y+BI)H*&3C6-Tf`5?Z*bApL^
z+2zLVVr-WR_nwHEa9&g;^WFRh)AsI`>}{X;)_&i7A!C@2VRS^Tr{3;cJN~P$K3llg
zCA?vo9pld!$Mtd5h5X42L(~sUi~jrPtM$8uI#XV;cx?U}6J8GBwz7<}!YhPiEe$K_#|0li)
z+`Vf(V|I(*b@Oj0{BP|#r8Vof#=9N!IGZ}n%)z1BfpuyZ~7gsaMvaiB;x7n=d#Wzp$Pz-
CB{Iwa
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi/meta.json b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi/meta.json
index 2239e3ce26..0103caf9e3 100644
--- a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi/meta.json
+++ b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi/meta.json
@@ -22,6 +22,9 @@
{
"name": "icon"
},
+ {
+ "name": "preview"
+ },
{
"name": "inhand-left",
"directions": 4
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi/preview.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi/preview.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c2d9688445bd90926883a0274d67bcd92158f04
GIT binary patch
literal 581
zcmV-L0=oT)P)Px$|4BqaRA_#r?1Mqk2`sPczCc6fLC`IU0jwXky~Imh*@9T%GPCdBDcWl
z`3V5s&Jx3;1Sm%$w*aJFfOMR^x&z$4L~eoIuUi$}1%TmEf>(DqJlMZgiORGa1YxAQ
zyP~hx78hPlz5h)ZDWD~EGPT+f-OdsKE35Acl`yt>5JsxmjIypl4o>
z&Fbgx+`ZQTCSx`Yg$n4X)CYF&OmduDRb1gK|H)HM&rgg#o4B4(*I&*5DO};JAdE`=FkrD*EEbE!VkwE=rXA8*
T2eeti00000NkvXXu0mjftXu|y
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/furnace.png b/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/furnace.png
deleted file mode 100644
index c05d9e84fe1636b31ef78fa090b41bc3330a2ff9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 412
zcmV;N0b~A&P)Px$R!KxbRA_1Ot~AZ=sl&4dRIJx+fS@mIW#o
z)&%P@>VgsO#zIEE#p@vx-XAH|r-=6f8G$;%?m(qKabNF9h3f4lCZ*85+Ju+^NZ8?W|M`?c!~nLs(&CLF7zoXOs_J488=*DC
z8?(?&Ou2EXPdfBJaak6qtE3iUN%Px)rb$FWRA_Fkn?5vYO&VXcO~2AKnrhNS8X<~^ps1?+j#-MHVj{w28jd^$RCc;@_#<+aM
zCs16lK{|IT>7O2@u7ZqqP9@ImP=c*)hwM||c38IG^^Y<(&`Vw2E{2D10&qV#!k)eR
zsh$rIQj42hLPqe6HNfJGMewv#++zA9JUY8D7
zPhc)OMXWGa`hPkCvkCl**Fs7FhmLp1>%0C@274|ovyEv{!+lR*dZbowBLM9kM;Pkq
zXK&~d-TzDhFcY1ky`jP&A8(x}WtIoFa=`7%H3Y4f!XN&J)Vd4#w(}M(dv*ZOP`YIA
zJAa1yw!<_xdB}G->Fn+Ypt;Gzz61M-j{0yaVpXf8o!gabD-TSM624$C$CbB4zNn;7
z%0bNNrW_4`mOVQNL~^)z;}%2Vr9ml}5=QfV1VLv
zDgcjTamEH7$UZghrE)tSisH)4F`a#|NMdz<=_C=;l3e`dCuXLjG7p@|80{TL$agrU
zwndvBVKvUk4w*(-jz-REfkLfN>uXQrLH3KXZwg%m?v&
zW;(iJE(lC$4h90Zd98LUTa+Z@p{U{fWM>nzBp~3a$OqC(td|17J0HC-^Fids3{is|
zp2ScX1_HOJtlr6_2Cn=(8cLyNaYG&tMRB`w@jsY*dIB}Yc`|r_knb7*uhiDl(7aR<
zzd3P=6JLKJD~#9+^qZRgd3!?zHSWw35eZ#WoJaT55byaC`4EXeGJPkoeHMCB)6r31`ZT#H
zDgR(Vl5r}z>`?SCH0JLRq9Vn#q|T4A46m6$)AmwI3O8B~R6>e{yXg{ITUBn$xwOqN
zzIZkro#pJ+m2E8v^o@pbyP{~?!m>6+S-*-fjnK3OgT4M<@5?F=ED4C08bw*Zj6^0<
zU`|ZfWC}LZcvky?HG$a#S7s9wZ*<6eGl+gxV_LzkKkEZG@Yd_~DOX+&in5+7foaS0
z$y!lgU7dQPwggREK%Gx<_Nvd)&kOf$bhWTWK(9kP5?L$sW7|Co{XbR!(pAIitK5Hq
zkeXaodA27ZT_vznLDq`3__6&7>`GvI^%1QBW0NXllh4Fe7FlGGMHX2+fBXvxzq7p3
S2SgnJ0000