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 c59080bf51..1bbc425b76 100644
Binary files a/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal.png and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal.png differ
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal2.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal2.png
new file mode 100644
index 0000000000..c421d61781
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal2.png differ
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 0000000000..febc988935
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/heal3.png differ
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/light.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/light.png
index 9c8625db69..90dadf56e4 100644
Binary files a/Resources/Textures/_CP14/Actions/skill_tree.rsi/light.png and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/light.png differ
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/light2.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/light2.png
new file mode 100644
index 0000000000..753d660c22
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/light2.png differ
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/light3.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/light3.png
new file mode 100644
index 0000000000..23710fed22
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/light3.png differ
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 0000000000..a04674adfa
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/martial.png differ
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta.json b/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta.json
index 34934b3a38..606e456397 100644
--- a/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta.json
+++ b/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta.json
@@ -16,17 +16,50 @@
{
"name": "heal"
},
+ {
+ "name": "heal2"
+ },
+ {
+ "name": "heal3"
+ },
{
"name": "light"
},
+ {
+ "name": "light2"
+ },
+ {
+ "name": "light3"
+ },
+ {
+ "name": "martial"
+ },
{
"name": "meta"
},
+ {
+ "name": "meta2"
+ },
+ {
+ "name": "meta3"
+ },
{
"name": "pyro"
},
+ {
+ "name": "pyro2"
+ },
+ {
+ "name": "pyro3"
+ },
{
"name": "water"
+ },
+ {
+ "name": "water2"
+ },
+ {
+ "name": "water3"
}
]
}
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta.png
index 6cc20d9668..9611ec35ee 100644
Binary files a/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta.png and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta.png differ
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta2.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta2.png
new file mode 100644
index 0000000000..6cc20d9668
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta2.png differ
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 0000000000..a5dfa07c4b
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/meta3.png differ
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/pyro2.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/pyro2.png
new file mode 100644
index 0000000000..ab29eb43a4
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/pyro2.png differ
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 0000000000..37ac5e1aa9
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/pyro3.png differ
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/water.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/water.png
index af5f50fad1..a6b7d2f7d8 100644
Binary files a/Resources/Textures/_CP14/Actions/skill_tree.rsi/water.png and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/water.png differ
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 0000000000..af5f50fad1
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/water2.png differ
diff --git a/Resources/Textures/_CP14/Actions/skill_tree.rsi/water3.png b/Resources/Textures/_CP14/Actions/skill_tree.rsi/water3.png
new file mode 100644
index 0000000000..f485ec04d3
Binary files /dev/null and b/Resources/Textures/_CP14/Actions/skill_tree.rsi/water3.png differ
diff --git a/Resources/Textures/_CP14/Objects/Bureaucracy/inkwell.rsi/icon.png b/Resources/Textures/_CP14/Objects/Bureaucracy/inkwell.rsi/icon.png
index 317c759725..f673bcc730 100644
Binary files a/Resources/Textures/_CP14/Objects/Bureaucracy/inkwell.rsi/icon.png and b/Resources/Textures/_CP14/Objects/Bureaucracy/inkwell.rsi/icon.png differ
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 0000000000..b51cba529e
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi/preview.png differ
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 0000000000..a5a44c2f67
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-BELT1.png differ
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-BELT2.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-BELT2.png
new file mode 100644
index 0000000000..976edd8c25
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-BELT2.png differ
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-NECK.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-NECK.png
new file mode 100644
index 0000000000..aa515db0d5
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/equipped-NECK.png differ
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 0000000000..bd25ad4a35
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/icon.png differ
diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/inhand-left.png
new file mode 100644
index 0000000000..7fdf1b11ca
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/inhand-left.png differ
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 0000000000..3c55843bd1
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/inhand-right.png differ
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 0000000000..ada7e2858d
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/preview.png differ
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 0000000000..15f6491603
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/wielded-inhand-left.png differ
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 0000000000..730b1e8bc2
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi/wielded-inhand-right.png differ
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 0000000000..1c2d968844
Binary files /dev/null and b/Resources/Textures/_CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi/preview.png differ
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 c05d9e84fe..0000000000
Binary files a/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/furnace.png and /dev/null differ
diff --git a/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/meta.json b/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/meta.json
index c615c6282e..26e2b611df 100644
--- a/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/meta.json
+++ b/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "All right reserved",
- "copyright": "Created by jaraten(discord) , modified by vladimir.s. Cooking table by Max Gab",
+ "copyright": "Created by jaraten(discord), modified by vladimir.s. Cooking table by Max Gab, research_table by TheShuEd(github)",
"size": {
"x": 48,
"y": 48
@@ -20,7 +20,7 @@
"name": "sewing_table"
},
{
- "name": "furnace"
+ "name": "research_table"
}
]
}
diff --git a/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/research_table.png b/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/research_table.png
new file mode 100644
index 0000000000..3f7725e01f
Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Furniture/workbench.rsi/research_table.png differ