Modular weapon crafting WIP (#611)
* data initalizing * modular assembling * grips and blades sprites * first prototypes * jewerly decoration * disassemble modular weapon * grip start stats * blade modifiers * inhand sprites generation * resprites inhand, add sickle, add attempt modify size * auto inhand sprite parsing * icon default parsing * spear blade * mace ball * sword blade * sharedization + autonetwork hotswipe * wielding sprite support! * iron long grip * wielded sickle, fix ERROR sprite if state not added * Update grips.yml * wielded spear + ruby rework * wielding damage bonus modifier * modular size fix * fix storedOffset rotation * parts offset * fix inheriting modifiers * some bugfix and balance tweaks * DPS Meter * fix dividing by zero * rebalance * replace baseknife to modular knife. Delete ice knife spell * sickle and mace modular replace * modular spear & sword replacement. add wielded icons * Update CP14DPSMeterSystem.cs * back to serverization * grip disassemble drop again * clothing sprite generation code * back slot long grips and mace * remove jewerly slot, add more clothing states * finish clothing states * shovel modular * YEEEEE * anvil modular craft * bugfixes * more integration check fixes
@@ -30,7 +30,7 @@ public sealed class ClientClothingSystem : ClothingSystem
|
||||
/// For some context, im currently refactoring inventory. Part of that is slots not being indexed by a massive enum anymore, but by strings.
|
||||
/// Problem here: Every rsi-state is using the old enum-names in their state. I already used the new inventoryslots ALOT. tldr: its this or another week of renaming files.
|
||||
/// </summary>
|
||||
private static readonly Dictionary<string, string> TemporarySlotMap = new()
|
||||
public static readonly Dictionary<string, string> TemporarySlotMap = new() //CP14 Public
|
||||
{
|
||||
{"head", "HELMET"},
|
||||
{"eyes", "EYES"},
|
||||
|
||||
@@ -160,8 +160,9 @@ public sealed class ItemGridPiece : Control, IEntityControl
|
||||
}
|
||||
|
||||
// typically you'd divide by two, but since the textures are half a tile, this is done implicitly
|
||||
var iconPosition = new Vector2((boundingGrid.Width + 1) * size.X + itemComponent.StoredOffset.X * 2,
|
||||
(boundingGrid.Height + 1) * size.Y + itemComponent.StoredOffset.Y * 2);
|
||||
var iconPosition = new Vector2(
|
||||
(boundingGrid.Width + 1) * size.X + Location.Rotation.RotateVec(itemComponent.StoredOffset).X * 2,
|
||||
(boundingGrid.Height + 1) * size.Y + Location.Rotation.RotateVec(itemComponent.StoredOffset).Y * 2);
|
||||
var iconRotation = Location.Rotation + Angle.FromDegrees(itemComponent.StoredRotation);
|
||||
|
||||
if (itemComponent.StoredSprite is { } storageSprite)
|
||||
|
||||
@@ -0,0 +1,213 @@
|
||||
using Content.Client.Clothing;
|
||||
using Content.Shared._CP14.ModularCraft;
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
using Content.Shared.Clothing;
|
||||
using Content.Shared.Hands;
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared.Item;
|
||||
using Content.Shared.Wieldable.Components;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.ResourceManagement;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations;
|
||||
|
||||
namespace Content.Client._CP14.ModularCraft;
|
||||
|
||||
public sealed class CP14ClientModularCraftSystem : CP14SharedModularCraftSystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
[Dependency] private readonly IResourceCache _resCache = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14ModularCraftStartPointComponent, AfterAutoHandleStateEvent>(OnAfterHandleState);
|
||||
SubscribeLocalEvent<CP14ModularCraftStartPointComponent, GetInhandVisualsEvent>(OnGetInhandVisuals);
|
||||
SubscribeLocalEvent<CP14ModularCraftStartPointComponent, GetEquipmentVisualsEvent>(OnGetEquipmentVisuals);
|
||||
}
|
||||
|
||||
private void OnAfterHandleState(Entity<CP14ModularCraftStartPointComponent> start,
|
||||
ref AfterAutoHandleStateEvent args)
|
||||
{
|
||||
if (!TryComp<SpriteComponent>(start, out var sprite))
|
||||
return;
|
||||
|
||||
UpdateIcon(start, sprite);
|
||||
}
|
||||
|
||||
private void UpdateIcon(Entity<CP14ModularCraftStartPointComponent> start, SpriteComponent? sprite = null)
|
||||
{
|
||||
if (!Resolve(start, ref sprite, false))
|
||||
return;
|
||||
|
||||
//Remove old layers
|
||||
foreach (var key in start.Comp.RevealedLayers)
|
||||
{
|
||||
sprite.RemoveLayer(key);
|
||||
}
|
||||
|
||||
start.Comp.RevealedLayers.Clear();
|
||||
|
||||
//Add new layers
|
||||
var counterPart = 0;
|
||||
foreach (var part in start.Comp.InstalledParts)
|
||||
{
|
||||
var indexedPart = _proto.Index(part);
|
||||
|
||||
if (indexedPart.IconSprite is null)
|
||||
{
|
||||
//Try get default sprite
|
||||
if (indexedPart.RsiPath is null)
|
||||
continue;
|
||||
|
||||
var state = $"icon";
|
||||
|
||||
var rsi = _resCache
|
||||
.GetResource<RSIResource>(SpriteSpecifierSerializer.TextureRoot / indexedPart.RsiPath)
|
||||
.RSI;
|
||||
|
||||
if (!rsi.TryGetState(state, out _))
|
||||
continue;
|
||||
|
||||
var defaultLayer = new PrototypeLayerData
|
||||
{
|
||||
RsiPath = indexedPart.RsiPath,
|
||||
State = state,
|
||||
};
|
||||
|
||||
var keyCode = $"cp14-modular-icon-layer-{counterPart}-default";
|
||||
start.Comp.RevealedLayers.Add(keyCode);
|
||||
var index = sprite.AddLayer(defaultLayer);
|
||||
sprite.LayerMapSet(keyCode, index);
|
||||
}
|
||||
else
|
||||
{
|
||||
var counter = 0;
|
||||
foreach (var layer in indexedPart.IconSprite)
|
||||
{
|
||||
var keyCode = $"cp14-modular-icon-layer-{counterPart}-{counter}";
|
||||
start.Comp.RevealedLayers.Add(keyCode);
|
||||
var index = sprite.AddLayer(layer);
|
||||
sprite.LayerMapSet(keyCode, index);
|
||||
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
|
||||
counterPart++;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnGetInhandVisuals(Entity<CP14ModularCraftStartPointComponent> start, ref GetInhandVisualsEvent args)
|
||||
{
|
||||
var defaultKey = $"cp14-modular-inhand-layer-{args.Location.ToString().ToLowerInvariant()}";
|
||||
|
||||
if (!TryComp<ItemComponent>(start, out var item))
|
||||
return;
|
||||
|
||||
var wielded = item.HeldPrefix == "wielded"; //SHITCOOOOOOODE
|
||||
|
||||
var counterPart = 0;
|
||||
foreach (var part in start.Comp.InstalledParts)
|
||||
{
|
||||
var indexedPart = _proto.Index(part);
|
||||
|
||||
var targetLayers =
|
||||
wielded ? indexedPart.WieldedInhandVisuals : indexedPart.InhandVisuals;
|
||||
|
||||
if (targetLayers is not null && targetLayers.TryGetValue(args.Location, out var layers))
|
||||
{
|
||||
var i = 0;
|
||||
foreach (var layer in layers)
|
||||
{
|
||||
var key = $"{defaultKey}-{counterPart}-{i}";
|
||||
args.Layers.Add((key, layer));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Try get default visuals
|
||||
if (indexedPart.RsiPath is null)
|
||||
continue;
|
||||
|
||||
var rsi = _resCache
|
||||
.GetResource<RSIResource>(SpriteSpecifierSerializer.TextureRoot / indexedPart.RsiPath)
|
||||
.RSI;
|
||||
|
||||
var state = $"inhand-{args.Location.ToString().ToLowerInvariant()}";
|
||||
|
||||
if (wielded)
|
||||
state = $"wielded-{state}";
|
||||
|
||||
if (!rsi.TryGetState(state, out _))
|
||||
continue;
|
||||
|
||||
var defaultLayer = new PrototypeLayerData
|
||||
{
|
||||
RsiPath = indexedPart.RsiPath,
|
||||
State = state,
|
||||
};
|
||||
|
||||
var key = $"{defaultKey}-{counterPart}-default";
|
||||
args.Layers.Add((key, defaultLayer));
|
||||
}
|
||||
|
||||
counterPart++;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnGetEquipmentVisuals(Entity<CP14ModularCraftStartPointComponent> start,
|
||||
ref GetEquipmentVisualsEvent args)
|
||||
{
|
||||
if (!TryComp(args.Equipee, out InventoryComponent? inventory))
|
||||
return;
|
||||
|
||||
var defaultKey = $"cp14-modular-clothing-layer-{args.Slot}";
|
||||
|
||||
var counterPart = 0;
|
||||
foreach (var part in start.Comp.InstalledParts)
|
||||
{
|
||||
var indexedPart = _proto.Index(part);
|
||||
|
||||
if (indexedPart.ClothingVisuals is not null && indexedPart.ClothingVisuals.TryGetValue(args.Slot, out var layers))
|
||||
{
|
||||
var i = 0;
|
||||
foreach (var layer in layers)
|
||||
{
|
||||
var key = $"{defaultKey}-{counterPart}-{i}";
|
||||
args.Layers.Add((key, layer));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Try get default sprites
|
||||
if (indexedPart.RsiPath is null)
|
||||
continue;
|
||||
|
||||
var rsi = _resCache
|
||||
.GetResource<RSIResource>(SpriteSpecifierSerializer.TextureRoot / indexedPart.RsiPath)
|
||||
.RSI;
|
||||
|
||||
if (!ClientClothingSystem.TemporarySlotMap.TryGetValue(args.Slot, out var correctedSlot))
|
||||
continue;
|
||||
|
||||
var state = $"equipped-{correctedSlot}";
|
||||
|
||||
if (!rsi.TryGetState(state, out _))
|
||||
continue;
|
||||
|
||||
var defaultLayer = new PrototypeLayerData
|
||||
{
|
||||
RsiPath = indexedPart.RsiPath,
|
||||
State = state,
|
||||
};
|
||||
|
||||
var key = $"{defaultKey}-{counterPart}-default";
|
||||
args.Layers.Add((key, defaultLayer));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
22
Content.Server/_CP14/DPSMeter/CP14DPSMeterComponent.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using Content.Shared.Damage;
|
||||
|
||||
namespace Content.Server._CP14.DPSMeter;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class CP14DPSMeterComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public DamageSpecifier TotalDamage = new DamageSpecifier();
|
||||
|
||||
[DataField]
|
||||
public TimeSpan LastHitTime = TimeSpan.Zero;
|
||||
|
||||
[DataField]
|
||||
public TimeSpan StartTrackTime = TimeSpan.Zero;
|
||||
|
||||
[DataField]
|
||||
public TimeSpan EndTrackTime = TimeSpan.Zero;
|
||||
|
||||
[DataField]
|
||||
public TimeSpan TrackTimeAfterHit = TimeSpan.FromSeconds(5f);
|
||||
}
|
||||
62
Content.Server/_CP14/DPSMeter/CP14DPSMeterSystem.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Server._CP14.DPSMeter;
|
||||
|
||||
public sealed class CP14DPSMeterSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14DPSMeterComponent, DamageChangedEvent>(OnDamageChanged);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
var query = EntityQueryEnumerator<CP14DPSMeterComponent>();
|
||||
while (query.MoveNext(out var uid, out var meter))
|
||||
{
|
||||
if (_timing.CurTime < meter.EndTrackTime || meter.EndTrackTime == TimeSpan.Zero)
|
||||
continue;
|
||||
|
||||
//Clear tracking
|
||||
_popup.PopupEntity($"TOTAL DPS: {GetDPS((uid, meter))}", uid, PopupType.Large);
|
||||
meter.TotalDamage = new DamageSpecifier();
|
||||
meter.EndTrackTime = TimeSpan.Zero;
|
||||
meter.StartTrackTime = TimeSpan.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDamageChanged(Entity<CP14DPSMeterComponent> ent, ref DamageChangedEvent args)
|
||||
{
|
||||
if (args.DamageDelta is null)
|
||||
return;
|
||||
|
||||
ent.Comp.TotalDamage += args.DamageDelta;
|
||||
|
||||
if (ent.Comp.StartTrackTime == TimeSpan.Zero)
|
||||
ent.Comp.StartTrackTime = _timing.CurTime;
|
||||
|
||||
ent.Comp.LastHitTime = _timing.CurTime;
|
||||
ent.Comp.EndTrackTime = _timing.CurTime + ent.Comp.TrackTimeAfterHit;
|
||||
|
||||
_popup.PopupEntity($"DPS: {GetDPS(ent)}", ent);
|
||||
}
|
||||
|
||||
private FixedPoint2 GetDPS(Entity<CP14DPSMeterComponent> ent)
|
||||
{
|
||||
var totalDamage = ent.Comp.TotalDamage.GetTotal();
|
||||
var totalSeconds = (ent.Comp.LastHitTime - ent.Comp.StartTrackTime).TotalSeconds;
|
||||
|
||||
var DPS = totalDamage / Math.Max(totalSeconds, 1f);
|
||||
|
||||
return DPS;
|
||||
}
|
||||
}
|
||||
169
Content.Server/_CP14/ModularCraft/CP14ModularCraftSystem.cs
Normal file
@@ -0,0 +1,169 @@
|
||||
using Content.Server.Item;
|
||||
using Content.Shared._CP14.ModularCraft;
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
using Content.Shared._CP14.ModularCraft.Prototypes;
|
||||
using Content.Shared.Throwing;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server._CP14.ModularCraft;
|
||||
|
||||
public sealed class CP14ModularCraftSystem : CP14SharedModularCraftSystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
[Dependency] private readonly TransformSystem _transform = default!;
|
||||
[Dependency] private readonly ThrowingSystem _throwing = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly ItemSystem _item = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14ModularCraftStartPointComponent, MapInitEvent>(OnStartPointMapInit);
|
||||
SubscribeLocalEvent<CP14ModularCraftStartPointComponent, CP14ModularCraftAddPartDoAfter>(OnAddedPart);
|
||||
}
|
||||
|
||||
private void OnAddedPart(Entity<CP14ModularCraftStartPointComponent> ent, ref CP14ModularCraftAddPartDoAfter args)
|
||||
{
|
||||
if (args.Cancelled || args.Handled)
|
||||
return;
|
||||
|
||||
if (!TryComp<CP14ModularCraftPartComponent>(args.Used, out var partComp))
|
||||
return;
|
||||
|
||||
if (!TryAddPartToFirstSlot(ent, (args.Used.Value, partComp)))
|
||||
return;
|
||||
|
||||
//TODO: Sound
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
private void OnStartPointMapInit(Entity<CP14ModularCraftStartPointComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
foreach (var startSlot in ent.Comp.StartSlots)
|
||||
{
|
||||
ent.Comp.FreeSlots.Add(startSlot);
|
||||
}
|
||||
|
||||
if (TryComp<CP14ModularCraftAutoAssembleComponent>(ent, out var autoAssemble))
|
||||
{
|
||||
foreach (var detail in autoAssemble.Details)
|
||||
{
|
||||
TryAddPartToFirstSlot(ent, detail);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool TryAddPartToFirstSlot(Entity<CP14ModularCraftStartPointComponent> start,
|
||||
Entity<CP14ModularCraftPartComponent> part)
|
||||
{
|
||||
foreach (var partProto in part.Comp.PossibleParts)
|
||||
{
|
||||
if (!_proto.TryIndex(partProto, out var partIndexed))
|
||||
continue;
|
||||
|
||||
if (partIndexed.TargetSlot is null)
|
||||
continue;
|
||||
|
||||
if (!start.Comp.FreeSlots.Contains(partIndexed.TargetSlot.Value))
|
||||
continue;
|
||||
|
||||
if (TryAddPartToSlot(start, part, partProto, partIndexed.TargetSlot.Value))
|
||||
{
|
||||
QueueDel(part);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
private bool TryAddPartToFirstSlot(Entity<CP14ModularCraftStartPointComponent> start,
|
||||
ProtoId<CP14ModularCraftPartPrototype> partProto)
|
||||
{
|
||||
if (!_proto.TryIndex(partProto, out var partIndexed))
|
||||
return false;
|
||||
|
||||
if (partIndexed.TargetSlot is null)
|
||||
return false;
|
||||
|
||||
if (!start.Comp.FreeSlots.Contains(partIndexed.TargetSlot.Value))
|
||||
return false;
|
||||
|
||||
return TryAddPartToSlot(start, null, partProto, partIndexed.TargetSlot.Value);
|
||||
}
|
||||
|
||||
private bool TryAddPartToSlot(Entity<CP14ModularCraftStartPointComponent> start,
|
||||
Entity<CP14ModularCraftPartComponent>? part,
|
||||
ProtoId<CP14ModularCraftPartPrototype> partProto,
|
||||
ProtoId<CP14ModularCraftSlotPrototype> slot)
|
||||
{
|
||||
if (!start.Comp.FreeSlots.Contains(slot))
|
||||
return false;
|
||||
|
||||
var xform = Transform(start);
|
||||
if (xform.GridUid != xform.ParentUid)
|
||||
return false;
|
||||
|
||||
AddPartToSlot(start, part, partProto, slot);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void AddPartToSlot(Entity<CP14ModularCraftStartPointComponent> start,
|
||||
Entity<CP14ModularCraftPartComponent>? part,
|
||||
ProtoId<CP14ModularCraftPartPrototype> partProto,
|
||||
ProtoId<CP14ModularCraftSlotPrototype> slot)
|
||||
{
|
||||
start.Comp.FreeSlots.Remove(slot);
|
||||
start.Comp.InstalledParts.Add(partProto);
|
||||
|
||||
var indexedPart = _proto.Index(partProto);
|
||||
start.Comp.FreeSlots.AddRange(indexedPart.AddSlots);
|
||||
|
||||
foreach (var modifier in indexedPart.Modifiers)
|
||||
{
|
||||
modifier.Effect(EntityManager, start, part);
|
||||
}
|
||||
|
||||
_item.VisualsChanged(start);
|
||||
Dirty(start);
|
||||
}
|
||||
|
||||
public void DisassembleModular(EntityUid target)
|
||||
{
|
||||
if (!TryComp<CP14ModularCraftStartPointComponent>(target, out var modular))
|
||||
return;
|
||||
|
||||
var sourceCoord = _transform.GetMapCoordinates(target);
|
||||
|
||||
//Spawn start part
|
||||
if (modular.StartProtoPart is not null)
|
||||
{
|
||||
if (_random.Prob(0.5f)) //TODO: Dehardcode
|
||||
{
|
||||
var spawned = Spawn(modular.StartProtoPart, sourceCoord);
|
||||
_throwing.TryThrow(spawned, _random.NextAngle().ToWorldVec(), 1f);
|
||||
}
|
||||
}
|
||||
|
||||
//Spawn parts
|
||||
foreach (var part in modular.InstalledParts)
|
||||
{
|
||||
if (!_proto.TryIndex(part, out var indexedPart))
|
||||
continue;
|
||||
|
||||
if (_random.Prob(indexedPart.DestroyProb))
|
||||
continue;
|
||||
|
||||
if (indexedPart.SourcePart is null)
|
||||
continue;
|
||||
|
||||
var spawned = Spawn(indexedPart.SourcePart, sourceCoord);
|
||||
_throwing.TryThrow(spawned, _random.NextAngle().ToWorldVec(), 1f);
|
||||
}
|
||||
|
||||
//Delete
|
||||
QueueDel(target);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using Content.Server.Destructible;
|
||||
using Content.Server.Destructible.Thresholds.Behaviors;
|
||||
|
||||
namespace Content.Server._CP14.ModularCraft;
|
||||
|
||||
[Serializable]
|
||||
[DataDefinition]
|
||||
public sealed partial class CP14ModularDisassembleBehavior : IThresholdBehavior
|
||||
{
|
||||
public void Execute(EntityUid owner, DestructibleSystem system, EntityUid? cause = null)
|
||||
{
|
||||
var modular = system.EntityManager.System<CP14ModularCraftSystem>();
|
||||
modular.DisassembleModular(owner);
|
||||
}
|
||||
}
|
||||
20
Content.Server/_CP14/ModularCraft/Modifiers/AddComponents.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using Content.Shared._CP14.ModularCraft;
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._CP14.ModularCraft.Modifiers;
|
||||
|
||||
public sealed partial class AddComponents : CP14ModularCraftModifier
|
||||
{
|
||||
[DataField]
|
||||
public ComponentRegistry? Components;
|
||||
|
||||
[DataField]
|
||||
public bool Override = false;
|
||||
|
||||
public override void Effect(EntityManager entManager, Entity<CP14ModularCraftStartPointComponent> start, Entity<CP14ModularCraftPartComponent>? part)
|
||||
{
|
||||
if (Components is not null)
|
||||
entManager.AddComponents(start, Components, Override);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using Content.Shared._CP14.Damageable;
|
||||
using Content.Shared._CP14.ModularCraft;
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
|
||||
namespace Content.Server._CP14.ModularCraft.Modifiers;
|
||||
|
||||
public sealed partial class EditDamageableModifier : CP14ModularCraftModifier
|
||||
{
|
||||
[DataField(required: true)]
|
||||
public float Multiplier = 1f;
|
||||
|
||||
public override void Effect(EntityManager entManager, Entity<CP14ModularCraftStartPointComponent> start, Entity<CP14ModularCraftPartComponent>? part)
|
||||
{
|
||||
if (!entManager.TryGetComponent<CP14DamageableModifierComponent>(start, out var damageable))
|
||||
return;
|
||||
|
||||
damageable.Modifier *= Multiplier;
|
||||
entManager.Dirty(start);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using Content.Shared._CP14.ModularCraft;
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Wieldable.Components;
|
||||
|
||||
namespace Content.Server._CP14.ModularCraft.Modifiers;
|
||||
|
||||
public sealed partial class EditIncreaseDamageOnWield : CP14ModularCraftModifier
|
||||
{
|
||||
[DataField]
|
||||
public DamageSpecifier? BonusDamage;
|
||||
|
||||
[DataField]
|
||||
public float? DamageMultiplier;
|
||||
|
||||
public override void Effect(EntityManager entManager, Entity<CP14ModularCraftStartPointComponent> start, Entity<CP14ModularCraftPartComponent>? part)
|
||||
{
|
||||
if (!entManager.TryGetComponent<IncreaseDamageOnWieldComponent>(start, out var wield))
|
||||
return;
|
||||
|
||||
if (BonusDamage is not null)
|
||||
wield.BonusDamage += BonusDamage;
|
||||
|
||||
if (DamageMultiplier is not null)
|
||||
wield.BonusDamage *= DamageMultiplier.Value;
|
||||
}
|
||||
|
||||
}
|
||||
48
Content.Server/_CP14/ModularCraft/Modifiers/EditItem.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using System.Linq;
|
||||
using Content.Shared._CP14.ModularCraft;
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
using Content.Shared.Item;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._CP14.ModularCraft.Modifiers;
|
||||
|
||||
public sealed partial class EditItem : CP14ModularCraftModifier
|
||||
{
|
||||
[DataField]
|
||||
public ProtoId<ItemSizePrototype>? NewSize;
|
||||
|
||||
/// <summary>
|
||||
/// Only works if the item has 1 shape. Increases or decreases it size.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public Vector2i? AdjustShape;
|
||||
|
||||
[DataField]
|
||||
public Vector2i? StoredOffsetBonus;
|
||||
|
||||
public override void Effect(EntityManager entManager, Entity<CP14ModularCraftStartPointComponent> start, Entity<CP14ModularCraftPartComponent>? part)
|
||||
{
|
||||
if (!entManager.TryGetComponent<ItemComponent>(start, out var itemComp) || itemComp.Shape is null)
|
||||
return;
|
||||
|
||||
var itemSystem = entManager.System<SharedItemSystem>();
|
||||
|
||||
if (NewSize is not null)
|
||||
itemSystem.SetSize(start, NewSize.Value);
|
||||
|
||||
var itemShape = itemSystem.GetItemShape((start, itemComp));
|
||||
if (AdjustShape is not null && itemShape.Count == 1)
|
||||
{
|
||||
var box = itemComp.Shape.First();
|
||||
box.Right += AdjustShape.Value.X;
|
||||
box.Top += AdjustShape.Value.Y;
|
||||
itemSystem.SetShape(start, new List<Box2i>{box});
|
||||
}
|
||||
|
||||
if (StoredOffsetBonus is not null)
|
||||
{
|
||||
var newOffset = itemComp.StoredOffset + StoredOffsetBonus.Value;
|
||||
itemSystem.SetStoredOffset(start, newOffset, itemComp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using Content.Shared._CP14.ModularCraft;
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Weapons.Melee;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._CP14.ModularCraft.Modifiers;
|
||||
|
||||
public sealed partial class EditMeleeWeapon : CP14ModularCraftModifier
|
||||
{
|
||||
[DataField]
|
||||
public EntProtoId? NewAnimation;
|
||||
|
||||
[DataField]
|
||||
public EntProtoId? NewWideAnimation;
|
||||
|
||||
[DataField]
|
||||
public float? AngleMultiplier;
|
||||
|
||||
[DataField]
|
||||
public DamageSpecifier? BonusDamage;
|
||||
|
||||
[DataField]
|
||||
public float? DamageMultiplier;
|
||||
|
||||
[DataField]
|
||||
public float? AttackRateMultiplier;
|
||||
|
||||
[DataField]
|
||||
public float? BonusRange;
|
||||
|
||||
[DataField]
|
||||
public bool? ResetOnHandSelected;
|
||||
|
||||
public override void Effect(EntityManager entManager, Entity<CP14ModularCraftStartPointComponent> start, Entity<CP14ModularCraftPartComponent>? part)
|
||||
{
|
||||
if (!entManager.TryGetComponent<MeleeWeaponComponent>(start, out var melee))
|
||||
return;
|
||||
|
||||
if (NewAnimation is not null)
|
||||
melee.Animation = NewAnimation.Value;
|
||||
|
||||
if (NewWideAnimation is not null)
|
||||
melee.WideAnimation = NewWideAnimation.Value;
|
||||
|
||||
if (AngleMultiplier is not null)
|
||||
melee.Angle = Angle.FromDegrees(melee.Angle.Degrees * AngleMultiplier.Value);
|
||||
|
||||
if (BonusDamage is not null)
|
||||
melee.Damage += BonusDamage;
|
||||
|
||||
if (DamageMultiplier is not null)
|
||||
melee.Damage *= DamageMultiplier.Value;
|
||||
|
||||
if (AttackRateMultiplier is not null)
|
||||
melee.AttackRate *= AttackRateMultiplier.Value;
|
||||
|
||||
if (BonusRange is not null)
|
||||
melee.Range += BonusRange.Value;
|
||||
|
||||
if (ResetOnHandSelected is not null)
|
||||
melee.ResetOnHandSelected = ResetOnHandSelected.Value;
|
||||
}
|
||||
}
|
||||
25
Content.Server/_CP14/ModularCraft/Modifiers/Inherit.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using Content.Shared._CP14.ModularCraft;
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
using Content.Shared._CP14.ModularCraft.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._CP14.ModularCraft.Modifiers;
|
||||
|
||||
public sealed partial class Inherit : CP14ModularCraftModifier
|
||||
{
|
||||
[DataField(required: true)]
|
||||
public List<ProtoId<CP14ModularCraftPartPrototype>> CopyFrom = new();
|
||||
|
||||
public override void Effect(EntityManager entManager, Entity<CP14ModularCraftStartPointComponent> start, Entity<CP14ModularCraftPartComponent>? part)
|
||||
{
|
||||
var prototypeManager = IoCManager.Resolve<IPrototypeManager>();
|
||||
|
||||
foreach (var copy in CopyFrom)
|
||||
{
|
||||
foreach (var modifier in prototypeManager.Index(copy).Modifiers)
|
||||
{
|
||||
modifier.Effect(entManager, start, part);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -55,6 +55,15 @@ public abstract class SharedItemSystem : EntitySystem
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
public void SetStoredOffset(EntityUid uid, Vector2i newOffset, ItemComponent? component = null)
|
||||
{
|
||||
if (!Resolve(uid, ref component, false))
|
||||
return;
|
||||
|
||||
component.StoredOffset = newOffset;
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
public void SetHeldPrefix(EntityUid uid, string? heldPrefix, bool force = false, ItemComponent? component = null)
|
||||
{
|
||||
if (!Resolve(uid, ref component, false))
|
||||
|
||||
@@ -76,9 +76,12 @@ namespace Content.Shared.Verbs
|
||||
public static readonly VerbCategory InstrumentStyle =
|
||||
new("verb-categories-instrument-style", null);
|
||||
|
||||
public static readonly VerbCategory Lockpick =
|
||||
public static readonly VerbCategory CP14LockPick =
|
||||
new("verb-categories-lock-pick", "/Textures/Interface/VerbIcons/lock.svg.192dpi.png");
|
||||
|
||||
public static readonly VerbCategory CP14ModularCraft =
|
||||
new("verb-categories-modular-craft", "/Textures/Interface/AdminActions/unbolt.png");
|
||||
|
||||
public static readonly VerbCategory ChannelSelect = new("verb-categories-channel-select", null);
|
||||
|
||||
public static readonly VerbCategory SetSensor = new("verb-categories-set-sensor", null);
|
||||
|
||||
@@ -39,7 +39,7 @@ public sealed partial class MeleeWeaponComponent : Component
|
||||
/// <summary>
|
||||
/// Starts attack cooldown when equipped if true.
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField]
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] //CP14 AutoNetworked
|
||||
public bool ResetOnHandSelected = true;
|
||||
|
||||
/*
|
||||
|
||||
@@ -2,7 +2,7 @@ using Content.Shared.Damage;
|
||||
|
||||
namespace Content.Shared.Wieldable.Components;
|
||||
|
||||
[RegisterComponent, Access(typeof(WieldableSystem))]
|
||||
[RegisterComponent/*, Access(typeof(WieldableSystem))*/] //CP14 Public access
|
||||
public sealed partial class IncreaseDamageOnWieldComponent : Component
|
||||
{
|
||||
[DataField("damage", required: true)]
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared._CP14.Damageable;
|
||||
|
||||
/// <summary>
|
||||
/// Increases or decreases incoming damage, regardless of the damage type.
|
||||
/// Unlike standard Damageable modifiers, this value can be changed during the game.
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class CP14DamageableModifierComponent : Component
|
||||
{
|
||||
[DataField, AutoNetworkedField]
|
||||
public float Modifier = 1f;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using Content.Shared.Damage;
|
||||
|
||||
namespace Content.Shared._CP14.Damageable;
|
||||
|
||||
public sealed class CP14DamageableModifierSystem : EntitySystem
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14DamageableModifierComponent, DamageModifyEvent>(OnDamageModify);
|
||||
}
|
||||
|
||||
private void OnDamageModify(Entity<CP14DamageableModifierComponent> ent, ref DamageModifyEvent args)
|
||||
{
|
||||
args.Damage *= ent.Comp.Modifier;
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@ public sealed partial class CP14DoorInteractionPopupComponent : Component
|
||||
public string InteractString = "cp14-closed-door-interact-popup";
|
||||
|
||||
[DataField("interactSound")]
|
||||
public SoundSpecifier InteractSound;
|
||||
public SoundSpecifier? InteractSound;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public TimeSpan LastInteractTime = TimeSpan.Zero;
|
||||
|
||||
@@ -129,7 +129,7 @@ public sealed class SharedCP14LockKeySystem : EntitySystem
|
||||
},
|
||||
Text = Loc.GetString("cp14-lock-verb-lock-pick-use-text") + $" {height}",
|
||||
Message = Loc.GetString("cp14-lock-verb-lock-pick-use-message"),
|
||||
Category = VerbCategory.Lockpick,
|
||||
Category = VerbCategory.CP14LockPick,
|
||||
Priority = height,
|
||||
CloseMenu = false,
|
||||
};
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
using Content.Shared._CP14.MeleeWeapon.EntitySystems;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared._CP14.MeleeWeapon.Components;
|
||||
|
||||
/// <summary>
|
||||
/// allows the object to become blunt with use
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(CP14SharpeningSystem))]
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(CP14SharpeningSystem))]
|
||||
public sealed partial class CP14SharpenedComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
[DataField, AutoNetworkedField]
|
||||
public float Sharpness = 1f;
|
||||
|
||||
[DataField]
|
||||
public float SharpnessDamageBy1Damage = 0.002f; //500 damage
|
||||
public float SharpnessDamageBy1Damage = 0.001f; //1000 damage
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ using Content.Shared._CP14.MeleeWeapon.Components;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Throwing;
|
||||
using Content.Shared.Weapons.Melee;
|
||||
using Content.Shared.Weapons.Melee.Events;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
using JetBrains.Annotations;
|
||||
|
||||
namespace Content.Shared._CP14.ModularCraft;
|
||||
|
||||
[ImplicitDataDefinitionForInheritors]
|
||||
[MeansImplicitUse]
|
||||
public abstract partial class CP14ModularCraftModifier
|
||||
{
|
||||
public abstract void Effect(EntityManager entManager, Entity<CP14ModularCraftStartPointComponent> start, Entity<CP14ModularCraftPartComponent>? part);
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using Content.Shared._CP14.ModularCraft.Components;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.Interaction;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._CP14.ModularCraft;
|
||||
|
||||
public abstract class CP14SharedModularCraftSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14ModularCraftPartComponent, AfterInteractEvent>(OnAfterInteractPart);
|
||||
}
|
||||
|
||||
private void OnAfterInteractPart(Entity<CP14ModularCraftPartComponent> start, ref AfterInteractEvent args)
|
||||
{
|
||||
if (args.Handled || args.Target is null)
|
||||
return;
|
||||
|
||||
if (!HasComp<CP14ModularCraftStartPointComponent>(args.Target))
|
||||
return;
|
||||
|
||||
var xform = Transform(args.Target.Value);
|
||||
if (xform.GridUid != xform.ParentUid)
|
||||
return;
|
||||
|
||||
_doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager,
|
||||
args.User,
|
||||
start.Comp.DoAfter,
|
||||
new CP14ModularCraftAddPartDoAfter(),
|
||||
args.Target,
|
||||
args.Target,
|
||||
start)
|
||||
{
|
||||
BreakOnDamage = true,
|
||||
BreakOnMove = true,
|
||||
BreakOnDropItem = true,
|
||||
});
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed partial class CP14ModularCraftAddPartDoAfter : SimpleDoAfterEvent
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using Content.Shared._CP14.ModularCraft.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.ModularCraft.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Adds all details to the item when initializing. This is useful for spawning modular items directly when mapping or as loot in demiplanes.
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(CP14SharedModularCraftSystem))]
|
||||
public sealed partial class CP14ModularCraftAutoAssembleComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public List<ProtoId<CP14ModularCraftPartPrototype>> Details = new();
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using Content.Shared._CP14.ModularCraft.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.ModularCraft.Components;
|
||||
|
||||
[RegisterComponent, Access(typeof(CP14SharedModularCraftSystem))]
|
||||
public sealed partial class CP14ModularCraftPartComponent : Component
|
||||
{
|
||||
[DataField(required: true)]
|
||||
public HashSet<ProtoId<CP14ModularCraftPartPrototype>> PossibleParts = new();
|
||||
|
||||
[DataField]
|
||||
public float DoAfter = 1f;
|
||||
|
||||
//TODO: Sound
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using Content.Shared._CP14.ModularCraft.Prototypes;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.ModularCraft.Components;
|
||||
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(CP14SharedModularCraftSystem))]
|
||||
public sealed partial class CP14ModularCraftStartPointComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// Starting free slots
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public List<ProtoId<CP14ModularCraftSlotPrototype>> StartSlots = new();
|
||||
|
||||
/// <summary>
|
||||
/// Current free slots. May vary depending on the modules delivered
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public List<ProtoId<CP14ModularCraftSlotPrototype>> FreeSlots = new();
|
||||
|
||||
/// <summary>
|
||||
/// A list of all installed parts.
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public List<ProtoId<CP14ModularCraftPartPrototype>> InstalledParts = new();
|
||||
|
||||
/// <summary>
|
||||
/// Spawned on disassembling
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public EntProtoId? StartProtoPart;
|
||||
|
||||
/// <summary>
|
||||
/// Clentside visual layers from installedParts
|
||||
/// </summary>
|
||||
public HashSet<string> RevealedLayers = new();
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using Content.Shared.Hands.Components;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.ModularCraft.Prototypes;
|
||||
|
||||
[Prototype("modularPart")]
|
||||
public sealed partial class CP14ModularCraftPartPrototype : IPrototype
|
||||
{
|
||||
[IdDataField]
|
||||
public string ID { get; private set; } = default!;
|
||||
|
||||
[DataField]
|
||||
public ProtoId<CP14ModularCraftSlotPrototype>? TargetSlot;
|
||||
|
||||
/// <summary>
|
||||
/// An entity that can drop out of the final modular item when destroyed.
|
||||
/// By design, the original item with this prototype from which the weapon was assembled.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public EntProtoId? SourcePart;
|
||||
|
||||
[DataField]
|
||||
public float DestroyProb = 0.25f;
|
||||
|
||||
[DataField(serverOnly: true)]
|
||||
public List<CP14ModularCraftModifier> Modifiers = new();
|
||||
|
||||
[DataField]
|
||||
public HashSet<ProtoId<CP14ModularCraftSlotPrototype>> AddSlots = new();
|
||||
|
||||
[DataField]
|
||||
public string? RsiPath;
|
||||
|
||||
[DataField]
|
||||
public List<PrototypeLayerData>? IconSprite;
|
||||
|
||||
[DataField]
|
||||
public Dictionary<HandLocation, List<PrototypeLayerData>>? InhandVisuals;
|
||||
|
||||
[DataField]
|
||||
public Dictionary<HandLocation, List<PrototypeLayerData>>? WieldedInhandVisuals;
|
||||
|
||||
[DataField]
|
||||
public Dictionary<string, List<PrototypeLayerData>>? ClothingVisuals;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.ModularCraft.Prototypes;
|
||||
|
||||
[Prototype("modularSlot")]
|
||||
public sealed partial class CP14ModularCraftSlotPrototype : IPrototype
|
||||
{
|
||||
[IdDataField]
|
||||
public string ID { get; private set; } = default!;
|
||||
|
||||
[DataField(required: true)]
|
||||
public LocId Name = string.Empty;
|
||||
}
|
||||
@@ -68,7 +68,7 @@ public abstract partial class CP14SharedFireSpreadSystem : EntitySystem
|
||||
new CP14IgnitionDoAfter(),
|
||||
args.Target,
|
||||
args.Target,
|
||||
args.Used)
|
||||
ent)
|
||||
{
|
||||
BreakOnDamage = true,
|
||||
BreakOnMove = true,
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
verb-categories-modular-craft = Ковка
|
||||
|
||||
cp14-modular-craft-add-part-verb-text = Прикрепить как {$slot}
|
||||
2
Resources/Locale/ru-RU/_CP14/modularCraft/slots.ftl
Normal file
@@ -0,0 +1,2 @@
|
||||
cp14-modular-slot-blade = лезвие
|
||||
cp14-modular-slot-jewerly1 = украшение (1)
|
||||
@@ -52,10 +52,10 @@
|
||||
- id: CP14Torch
|
||||
- id: CP14Lighter
|
||||
- id: CP14ManaOperationGlove
|
||||
- id: CP14BaseShovel
|
||||
- id: CP14ModularIronShovel
|
||||
- id: CP14BaseMop
|
||||
- id: CP14BaseBroom
|
||||
- id: CP14BasePickaxe
|
||||
- id: CP14ModularIronPickaxe
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14CrystalLampBlueEmpty
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14ActionSpellIceDagger
|
||||
name: Ice dagger
|
||||
description: Materialization of a temporary sharp ice throwing dagger
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Effects/Magic/spells_icons.rsi
|
||||
state: ice_dagger
|
||||
- type: CP14MagicEffect
|
||||
magicType: Water
|
||||
manaCost: 15
|
||||
effects:
|
||||
- !type:CP14SpellSpawnEntityOnTarget
|
||||
spawns:
|
||||
- CP14ImpactEffectIceDagger
|
||||
- !type:CP14SpellSpawnInHandEntity
|
||||
spawns:
|
||||
- CP14DaggerIce
|
||||
- type: CP14MagicEffectSomaticAspect
|
||||
- type: CP14MagicEffectCastingVisual
|
||||
proto: CP14RuneIceDagger
|
||||
- type: InstantAction
|
||||
itemIconStyle: BigAction
|
||||
sound: !type:SoundPathSpecifier
|
||||
path: /Audio/Magic/rumble.ogg
|
||||
icon:
|
||||
sprite: _CP14/Effects/Magic/spells_icons.rsi
|
||||
state: ice_dagger
|
||||
event: !type:CP14DelayedInstantActionEvent
|
||||
cooldown: 10
|
||||
castDelay: 0.5
|
||||
breakOnMove: false
|
||||
|
||||
- type: entity
|
||||
id: CP14RuneIceDagger
|
||||
parent: CP14BaseMagicRune
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: PointLight
|
||||
color: "#5eabeb"
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: medium_line
|
||||
color: "#5eabeb"
|
||||
shader: unshaded
|
||||
|
||||
- type: entity
|
||||
id: CP14ImpactEffectIceDagger
|
||||
parent: CP14BaseMagicImpact
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: particles_up
|
||||
color: "#5eabeb"
|
||||
shader: unshaded
|
||||
|
||||
- type: entity
|
||||
id: CP14DaggerIce
|
||||
parent:
|
||||
- CP14BaseDagger
|
||||
name: ice dagger
|
||||
description: A piece of sharp magical ice. In a little while, the spell will wear off, and he will disappear.
|
||||
components:
|
||||
- type: TimedDespawn
|
||||
lifetime: 60 # 1 min
|
||||
- type: Clothing
|
||||
sprite: _CP14/Objects/Weapons/Melee/Dagger/ice_dagger.rsi
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/Dagger/ice_dagger.rsi
|
||||
- type: CP14Currency
|
||||
currency: 0
|
||||
- type: MeleeWeapon
|
||||
damage:
|
||||
types:
|
||||
Slash: 5
|
||||
Piercing: 2
|
||||
Cold: 3
|
||||
- type: DamageOtherOnHit
|
||||
damage:
|
||||
types:
|
||||
Piercing: 5
|
||||
Cold: 5
|
||||
- type: CP14MeleeSelfDamage
|
||||
damageToSelf:
|
||||
types:
|
||||
Blunt: 2 # 5 hits
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 10
|
||||
behaviors:
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: GlassBreak
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
|
||||
- type: entity
|
||||
parent: CP14BaseSpellScrollWater
|
||||
id: CP14SpellScrollIceDagger
|
||||
name: ice dagger spell scroll
|
||||
components:
|
||||
- type: CP14SpellStorage
|
||||
spells:
|
||||
- CP14ActionSpellIceDagger
|
||||
@@ -35,7 +35,6 @@
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14SpellScrollIceShards
|
||||
- id: CP14SpellScrollIceDagger
|
||||
- id: CP14SpellScrollShadowGrab
|
||||
- id: CP14SpellScrollSphereOfLight
|
||||
- id: CP14SpellScrollCureWounds
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
- type: entity
|
||||
id: SpawnPointGhostDemiplaneSkeleton
|
||||
name: ghost role spawn point
|
||||
suffix: rat king
|
||||
suffix: skeleton
|
||||
categories: [ ForkFiltered ]
|
||||
parent: MarkerBase
|
||||
components:
|
||||
|
||||
@@ -0,0 +1,147 @@
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14ModularBladeIronDagger
|
||||
categories: [ ForkFiltered ]
|
||||
name: iron dagger blade
|
||||
description: A dagger 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,0
|
||||
storedOffset: 0, 5
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/iron_dagger.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftPart
|
||||
possibleParts:
|
||||
- BladeIronDagger
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14ModularBladeIronSpear
|
||||
categories: [ ForkFiltered ]
|
||||
name: iron spearhead
|
||||
description: Hiltless spearhead. A blacksmith can use it as a spare part to create a weapon.
|
||||
components:
|
||||
- type: Item
|
||||
storedRotation: 45
|
||||
shape:
|
||||
- 0,0,0,0
|
||||
storedOffset: 0, 5
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/iron_spear.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftPart
|
||||
possibleParts:
|
||||
- BladeIronSpear
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14ModularBladeIronMace
|
||||
categories: [ ForkFiltered ]
|
||||
name: iron mace ball
|
||||
description: A mace ball 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,0
|
||||
storedOffset: 0, 5
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/iron_mace.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftPart
|
||||
possibleParts:
|
||||
- BladeIronMace
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14ModularBladeIronSword
|
||||
categories: [ ForkFiltered ]
|
||||
name: iron sword blade
|
||||
description: A sword 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: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/iron_sword.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftPart
|
||||
possibleParts:
|
||||
- BladeIronSword
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14ModularBladeIronSickle
|
||||
categories: [ ForkFiltered ]
|
||||
name: iron sickle blade
|
||||
description: A sickle 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,0
|
||||
storedOffset: 0, 5
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/iron_sickle.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftPart
|
||||
possibleParts:
|
||||
- BladeIronSickle
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14ModularBladeIronShovel
|
||||
categories: [ ForkFiltered ]
|
||||
name: iron shovel blade
|
||||
description: A shovel blade without a hilt. A blacksmith can use it as a spare part to create a tool.
|
||||
components:
|
||||
- type: Item
|
||||
storedRotation: 45
|
||||
shape:
|
||||
- 0,0,0,0
|
||||
storedOffset: 0, 5
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/iron_shovel.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftPart
|
||||
possibleParts:
|
||||
- BladeIronShovel
|
||||
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14ModularBladeIronPickaxe
|
||||
categories: [ ForkFiltered ]
|
||||
name: iron pickaxe head
|
||||
description: A pickaxe head without a hilt. A blacksmith can use it as a spare part to create a tool.
|
||||
components:
|
||||
- type: Item
|
||||
storedRotation: 45
|
||||
shape:
|
||||
- 0,0,1,0
|
||||
storedOffset: 0, 5
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/iron_pickaxe.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftPart
|
||||
possibleParts:
|
||||
- BladeIronPickaxe
|
||||
|
||||
#- type: entity
|
||||
# parent: BaseItem
|
||||
# id: CP14ModularBladeIronSwordTwoHanded
|
||||
# categories: [ ForkFiltered ]
|
||||
# name: iron two-handed sword blade
|
||||
# description: A two-handed sword blade without a hilt. A blacksmith can use it as a spare part to create a weapon.
|
||||
# components:
|
||||
# - type: Sprite
|
||||
# sprite: _CP14/Objects/ModularTools/blade48.rsi
|
||||
# layers:
|
||||
# - state: iron_sword_twohanded
|
||||
# - type: CP14ModularCraftPart
|
||||
# possibleParts:
|
||||
# - BladeIronSwordTwoHanded
|
||||
@@ -0,0 +1,160 @@
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14ModularGripBase
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Item
|
||||
storedRotation: 45
|
||||
- type: ExaminableDamage
|
||||
messages: CP14WeaponMessages
|
||||
- type: Damageable
|
||||
damageContainer: Inorganic
|
||||
- type: CP14MeleeSelfDamage
|
||||
damageToSelf:
|
||||
types:
|
||||
Blunt: 0.5 # 100 hits
|
||||
- type: MeleeWeapon
|
||||
angle: 45
|
||||
attackRate: 1
|
||||
wideAnimationRotation: 135
|
||||
wideAnimation: CP14WeaponArcSlash
|
||||
damage:
|
||||
types:
|
||||
Blunt: 0
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
cPAnimationLength: 0.25
|
||||
- type: Clothing
|
||||
equipDelay: 0.25
|
||||
unequipDelay: 0.25
|
||||
quickEquip: false
|
||||
breakOnMove: false
|
||||
- type: CP14MeleeParriable
|
||||
|
||||
- type: entity
|
||||
parent: CP14ModularGripBase
|
||||
id: CP14ModularGripWooden
|
||||
name: wooden grip
|
||||
description: A short wooden handle for a weapon or tool. The cheapest and most unstable material.
|
||||
components:
|
||||
- type: Item
|
||||
shape:
|
||||
- 0,0,0,0
|
||||
storedOffset: 0, -5
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/wooden_grip.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftStartPoint
|
||||
startProtoPart: CP14ModularGripWooden
|
||||
startSlots:
|
||||
- Blade
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 50
|
||||
behaviors:
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: MetalBreak
|
||||
- !type:CP14ModularDisassembleBehavior
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- type: MeleeWeapon
|
||||
resetOnHandSelected: false #Fast swap
|
||||
range: 1.0 # 1.5 standart
|
||||
cPAnimationOffset: -0.75 #-1 standart
|
||||
attackRate: 1 # 1 standart
|
||||
- type: Clothing
|
||||
slots:
|
||||
- belt
|
||||
|
||||
- type: entity
|
||||
parent: CP14ModularGripBase
|
||||
id: CP14ModularGripWoodenLong
|
||||
name: long wooden grip
|
||||
description: long, two-handed wooden handle for heavy weapons or large tools.
|
||||
components:
|
||||
- type: Item
|
||||
shape:
|
||||
- 0,0,0,1
|
||||
storedOffset: 0, -15
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/wooden_grip_long.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftStartPoint
|
||||
startProtoPart: CP14ModularGripWoodenLong
|
||||
startSlots:
|
||||
- Blade
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 50
|
||||
behaviors:
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: MetalBreak
|
||||
- !type:CP14ModularDisassembleBehavior
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- type: MeleeWeapon
|
||||
resetOnHandSelected: true
|
||||
range: 1.5 # 1.5 standart
|
||||
attackRate: 0.7 # 1 standart
|
||||
cPAnimationOffset: -1
|
||||
- type: Wieldable
|
||||
- type: IncreaseDamageOnWield
|
||||
damage:
|
||||
types:
|
||||
Blunt: 0
|
||||
- type: Clothing
|
||||
slots:
|
||||
- neck
|
||||
|
||||
- type: entity
|
||||
parent: CP14ModularGripWooden
|
||||
id: CP14ModularGripIron
|
||||
name: iron grip
|
||||
description: A short iron handle for a weapon or tool.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/iron_grip.rsi
|
||||
- type: CP14ModularCraftStartPoint
|
||||
startProtoPart: CP14ModularGripIron
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 100 #x2 durability
|
||||
behaviors:
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: MetalBreak
|
||||
- !type:CP14ModularDisassembleBehavior
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
|
||||
- type: entity
|
||||
parent: CP14ModularGripWoodenLong
|
||||
id: CP14ModularGripIronLong
|
||||
name: long iron grip
|
||||
description: long, two-handed iron handle for heavy weapons or large tools.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/ModularTools/iron_grip_long.rsi
|
||||
- type: CP14ModularCraftStartPoint
|
||||
startProtoPart: CP14ModularGripIronLong
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 100 #x2 durability
|
||||
behaviors:
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: MetalBreak
|
||||
- !type:CP14ModularDisassembleBehavior
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
@@ -1,44 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14BasePickaxe
|
||||
parent:
|
||||
- BaseItem
|
||||
- CP14BaseWeaponDestructible
|
||||
- CP14BaseWeaponSelfDamage
|
||||
- CP14BaseWeaponChemical
|
||||
name: pickaxe
|
||||
description: Notched to perfection, for jamming it into rocks
|
||||
components:
|
||||
- type: Item
|
||||
size: Normal
|
||||
storedRotation: 45
|
||||
shape:
|
||||
- 0,0,2,0
|
||||
- 1,1,1,1
|
||||
sprite: _CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/Pickaxe/pickaxe.rsi
|
||||
state: icon
|
||||
- type: MeleeWeapon
|
||||
wideAnimationRotation: 135
|
||||
damage:
|
||||
types:
|
||||
Piercing: 8
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
- type: IncreaseDamageOnWield
|
||||
damage:
|
||||
groups:
|
||||
Brute: 8
|
||||
types:
|
||||
Structural: 10
|
||||
- type: Wieldable
|
||||
- type: ToolTileCompatible
|
||||
- type: Tool
|
||||
qualities:
|
||||
- CP14Digging
|
||||
useSound:
|
||||
collection: CP14Digging
|
||||
params:
|
||||
variation: 0.03
|
||||
volume: 2
|
||||
- type: UseDelay
|
||||
@@ -1,35 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14BaseShovel
|
||||
parent:
|
||||
- BaseItem
|
||||
- CP14BaseWeaponDestructible
|
||||
- CP14BaseWeaponSelfDamage
|
||||
name: shovel
|
||||
description: An implement for digging up earth, digging beds or graves.
|
||||
components:
|
||||
- type: Item
|
||||
size: Normal
|
||||
storedRotation: 45
|
||||
shape:
|
||||
- 0,0,0,2
|
||||
sprite: _CP14/Objects/Weapons/Melee/Shovel/shovel.rsi
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/Shovel/shovel.rsi
|
||||
state: icon
|
||||
- type: MeleeWeapon
|
||||
wideAnimationRotation: 65
|
||||
damage:
|
||||
types:
|
||||
Blunt: 6
|
||||
Slash: 2
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
- type: ToolTileCompatible
|
||||
- type: Tool
|
||||
qualities:
|
||||
- CP14Digging
|
||||
useSound:
|
||||
collection: CP14Digging
|
||||
params:
|
||||
variation: 0.03
|
||||
volume: 2
|
||||
@@ -1,7 +1,7 @@
|
||||
- type: entity
|
||||
id: CP14BaseWeaponChemical
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
id: CP14BaseWeaponChemical
|
||||
categories: [ HideSpawnMenu, ForkFiltered ]
|
||||
components:
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
@@ -20,9 +20,9 @@
|
||||
maxTransferAmount: 2
|
||||
|
||||
- type: entity
|
||||
id: CP14BaseWeaponThrowable
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
id: CP14BaseWeaponThrowable
|
||||
categories: [ HideSpawnMenu, ForkFiltered ]
|
||||
components:
|
||||
- type: LandAtCursor
|
||||
- type: DamageOtherOnHit
|
||||
@@ -49,26 +49,26 @@
|
||||
friction: 0.2
|
||||
|
||||
- type: entity
|
||||
id: CP14BaseWeaponLight
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
id: CP14BaseWeaponLight
|
||||
categories: [ HideSpawnMenu, ForkFiltered ]
|
||||
components:
|
||||
- type: MeleeWeapon
|
||||
resetOnHandSelected: false
|
||||
|
||||
- type: entity
|
||||
id: CP14BaseWeaponShort
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
id: CP14BaseWeaponShort
|
||||
categories: [ HideSpawnMenu, ForkFiltered ]
|
||||
components:
|
||||
- type: MeleeWeapon
|
||||
range: 1.0 # 1.5 standart
|
||||
cPAnimationOffset: -0.75
|
||||
|
||||
- type: entity
|
||||
id: CP14BaseWeaponSharp
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
id: CP14BaseWeaponSharp
|
||||
categories: [ HideSpawnMenu, ForkFiltered ]
|
||||
components:
|
||||
- type: Sharp
|
||||
- type: CP14Sharpened
|
||||
@@ -85,9 +85,9 @@
|
||||
- type: CP14WallpaperRemover
|
||||
|
||||
- type: entity
|
||||
id: CP14BaseWeaponDestructible
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
id: CP14BaseWeaponDestructible
|
||||
categories: [ HideSpawnMenu, ForkFiltered ]
|
||||
components:
|
||||
- type: ExaminableDamage
|
||||
messages: CP14WeaponMessages
|
||||
@@ -107,9 +107,9 @@
|
||||
- type: CP14MeleeParriable
|
||||
|
||||
- type: entity
|
||||
id: CP14BaseWeaponSelfDamage
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
id: CP14BaseWeaponSelfDamage
|
||||
categories: [ HideSpawnMenu, ForkFiltered ]
|
||||
components:
|
||||
- type: CP14MeleeSelfDamage
|
||||
damageToSelf:
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14BaseDagger
|
||||
parent:
|
||||
- BaseItem
|
||||
- CP14BaseWeaponDestructible
|
||||
- CP14BaseWeaponSharp
|
||||
- CP14BaseWeaponChemical
|
||||
- CP14BaseWeaponThrowable
|
||||
- CP14BaseWeaponLight
|
||||
- CP14BaseWeaponShort
|
||||
name: dagger
|
||||
description: A small, multi-purpose, sharp blade. You can cut meat or throw it at a goblin.
|
||||
components:
|
||||
- type: Item
|
||||
size: Normal
|
||||
shape:
|
||||
- 0,0,0,1
|
||||
storedRotation: 45
|
||||
- type: Clothing
|
||||
equipDelay: 0.25
|
||||
unequipDelay: 0.25
|
||||
sprite: _CP14/Objects/Weapons/Melee/Dagger/dagger.rsi
|
||||
quickEquip: false
|
||||
breakOnMove: false
|
||||
slots:
|
||||
- belt
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/Dagger/dagger.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: MeleeWeapon
|
||||
angle: 60
|
||||
attackRate: 1.8
|
||||
wideAnimationRotation: 135
|
||||
wideAnimation: CP14WeaponArcSlash
|
||||
damage:
|
||||
types:
|
||||
Slash: 5
|
||||
Piercing: 5
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
cPAnimationLength: 0.15
|
||||
- type: EmbeddableProjectile
|
||||
offset: 0.15,0.15
|
||||
removalTime: 1
|
||||
- type: ThrowingAngle
|
||||
angle: 135
|
||||
@@ -1,40 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14BaseMace
|
||||
parent:
|
||||
- BaseItem
|
||||
- CP14BaseWeaponDestructible
|
||||
- CP14BaseWeaponThrowable
|
||||
- CP14BaseWeaponSelfDamage
|
||||
name: mace
|
||||
description: A heavy piece of metal on a long stick. What could be simpler than that?
|
||||
components:
|
||||
- type: Item
|
||||
size: Normal
|
||||
- type: Clothing
|
||||
equipDelay: 0.35
|
||||
unequipDelay: 0.35
|
||||
sprite: _CP14/Objects/Weapons/Melee/Mace/mace.rsi
|
||||
quickEquip: false
|
||||
breakOnMove: false
|
||||
slots:
|
||||
- belt
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/Mace/mace.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: Sharp
|
||||
- type: MeleeWeapon
|
||||
angle: 100
|
||||
attackRate: 0.9
|
||||
range: 1.5
|
||||
wideAnimationRotation: 135
|
||||
wideAnimation: CP14WeaponArcSlash
|
||||
damage:
|
||||
types:
|
||||
Blunt: 15
|
||||
Piercing: 4
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
cPAnimationLength: 0.25
|
||||
- type: StaminaDamageOnHit
|
||||
damage: 6
|
||||
@@ -1,42 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14BaseSickle
|
||||
parent:
|
||||
- BaseItem
|
||||
- CP14BaseWeaponDestructible
|
||||
- CP14BaseWeaponSharp
|
||||
- CP14BaseWeaponChemical
|
||||
- CP14BaseWeaponLight
|
||||
- CP14BaseWeaponShort
|
||||
name: sickle
|
||||
description: Originally developed as a weapon against grass, the sickle suddenly proved itself good at the bloodier harvest as well.
|
||||
components:
|
||||
- type: Item
|
||||
size: Normal
|
||||
- type: Clothing
|
||||
equipDelay: 0.45
|
||||
unequipDelay: 0.45
|
||||
sprite: _CP14/Objects/Weapons/Melee/Sickle/sickle.rsi
|
||||
quickEquip: false
|
||||
breakOnMove: false
|
||||
slots:
|
||||
- belt
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/Sickle/sickle.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: MeleeWeapon
|
||||
angle: 80
|
||||
range: 1.1
|
||||
attackRate: 1.5
|
||||
wideAnimationRotation: 135
|
||||
wideAnimation: CP14WeaponArcSlash
|
||||
cPAnimationLength: 0.18
|
||||
damage:
|
||||
types:
|
||||
Slash: 7
|
||||
Piercing: 3
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
- type: Tag
|
||||
tags:
|
||||
- CP14HerbalGathering
|
||||
@@ -1,46 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14BaseThrowableSpear
|
||||
parent:
|
||||
- BaseItem
|
||||
- CP14BaseWeaponDestructible
|
||||
- CP14BaseWeaponSharp
|
||||
- CP14BaseWeaponChemical
|
||||
- CP14BaseWeaponThrowable
|
||||
name: throwing javelin
|
||||
description: A weapon that has done its duty since the age of the giants.
|
||||
components:
|
||||
- type: Item
|
||||
size: Normal
|
||||
storedRotation: 45
|
||||
shape:
|
||||
- 0,0,0,3
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/ThrowableSpear/throwableSpear.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: MeleeWeapon
|
||||
angle: 0
|
||||
attackRate: 1.2
|
||||
range: 1.2
|
||||
wideAnimationRotation: 135
|
||||
wideAnimation: CP14WeaponArcThrust
|
||||
damage:
|
||||
types:
|
||||
Piercing: 15
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
cPAnimationLength: 0.25
|
||||
cPAnimationOffset: -1.3
|
||||
- type: EmbeddableProjectile
|
||||
offset: 0.15,0.15
|
||||
removalTime: 1
|
||||
- type: ThrowingAngle
|
||||
angle: 135
|
||||
- type: DamageOtherOnHit
|
||||
damage:
|
||||
types:
|
||||
Piercing: 18
|
||||
#- type: DamageOnLand
|
||||
# damage:
|
||||
# types:
|
||||
# Piercing: 18
|
||||
@@ -1,39 +0,0 @@
|
||||
- type: entity
|
||||
id: CP14BaseSword
|
||||
parent:
|
||||
- BaseItem
|
||||
- CP14BaseWeaponDestructible
|
||||
- CP14BaseWeaponSharp
|
||||
- CP14BaseWeaponChemical
|
||||
name: sword
|
||||
description: the gold standard of edged weapons. Medium length, comfortable grip. No frills.
|
||||
components:
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
- type: Clothing
|
||||
equipDelay: 0.45
|
||||
unequipDelay: 0.45
|
||||
sprite: _CP14/Objects/Weapons/Melee/Sword/sword.rsi
|
||||
quickEquip: false
|
||||
breakOnMove: false
|
||||
slots:
|
||||
- neck
|
||||
- type: Sprite
|
||||
sprite: _CP14/Objects/Weapons/Melee/Sword/sword.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: MeleeWeapon
|
||||
angle: 100
|
||||
attackRate: 1.4
|
||||
wideAnimationRotation: 135
|
||||
wideAnimation: CP14WeaponArcSlash
|
||||
cPAnimationLength: 0.18
|
||||
damage:
|
||||
types:
|
||||
Slash: 17
|
||||
soundHit:
|
||||
collection: MetalThud
|
||||
- type: CP14SkillRequirement
|
||||
fuckupChance: 0.5
|
||||
requiredSkills:
|
||||
- Warcraft
|
||||
@@ -0,0 +1,14 @@
|
||||
- type: entity
|
||||
id: CP14ModularIronDagger
|
||||
parent: CP14ModularGripWooden
|
||||
name: iron dagger
|
||||
description: A small, multi-purpose, sharp blade. You can cut meat or throw it at a goblin.
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
- sprite: _CP14/Objects/ModularTools/iron_dagger.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftAutoAssemble
|
||||
details:
|
||||
- BladeIronDagger
|
||||
@@ -0,0 +1,14 @@
|
||||
- type: entity
|
||||
id: CP14ModularIronMace
|
||||
parent: CP14ModularGripWooden
|
||||
name: iron mace
|
||||
description: A heavy piece of metal on a long stick. What could be simpler than that?
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
- sprite: _CP14/Objects/ModularTools/iron_mace.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftAutoAssemble
|
||||
details:
|
||||
- BladeIronMace
|
||||
@@ -0,0 +1,14 @@
|
||||
- type: entity
|
||||
id: CP14ModularIronPickaxe
|
||||
parent: CP14ModularGripWoodenLong
|
||||
name: iron pickaxe
|
||||
description: Notched to perfection, for jamming it into rocks
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
- sprite: _CP14/Objects/ModularTools/iron_pickaxe.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftAutoAssemble
|
||||
details:
|
||||
- BladeIronPickaxe
|
||||
@@ -0,0 +1,14 @@
|
||||
- type: entity
|
||||
id: CP14ModularIronShovel
|
||||
parent: CP14ModularGripWoodenLong
|
||||
name: iron shovel
|
||||
description: An implement for digging up earth, digging beds or graves.
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
- sprite: _CP14/Objects/ModularTools/iron_shovel.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftAutoAssemble
|
||||
details:
|
||||
- BladeIronShovel
|
||||
@@ -0,0 +1,14 @@
|
||||
- type: entity
|
||||
id: CP14ModularIronSickle
|
||||
parent: CP14ModularGripWooden
|
||||
name: iron sickle
|
||||
description: Originally developed as a weapon against grass, the sickle suddenly proved itself good at the bloodier harvest as well.
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
- sprite: _CP14/Objects/ModularTools/iron_sickle.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftAutoAssemble
|
||||
details:
|
||||
- BladeIronSickle
|
||||
@@ -0,0 +1,29 @@
|
||||
- type: entity
|
||||
id: CP14ModularIronSpear
|
||||
parent: CP14ModularGripWoodenLong
|
||||
name: iron spear
|
||||
description: A weapon that has done its duty since the age of the giants.
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
- sprite: _CP14/Objects/ModularTools/iron_spear.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftAutoAssemble
|
||||
details:
|
||||
- BladeIronSpear
|
||||
|
||||
- type: entity
|
||||
id: CP14ModularIronKunai
|
||||
parent: CP14ModularGripWooden
|
||||
name: iron kunai
|
||||
description: An effective throwing weapon. Throw it at a wall, or no, better yet, at a goblin!
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
- sprite: _CP14/Objects/ModularTools/iron_spear.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftAutoAssemble
|
||||
details:
|
||||
- BladeIronSpear
|
||||
@@ -0,0 +1,14 @@
|
||||
- type: entity
|
||||
id: CP14ModularIronSword
|
||||
parent: CP14ModularGripWooden
|
||||
name: iron sword
|
||||
description: the gold standard of edged weapons. Medium length, comfortable grip. No frills.
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
- sprite: _CP14/Objects/ModularTools/iron_sword.rsi
|
||||
state: icon
|
||||
- type: CP14ModularCraftAutoAssemble
|
||||
details:
|
||||
- BladeIronSword
|
||||
@@ -21,3 +21,30 @@
|
||||
interfaces:
|
||||
enum.CP14StoreUiKey.Key:
|
||||
type: CP14StoreBoundUserInterface
|
||||
|
||||
- type: entity
|
||||
id: CP14DPSMeter
|
||||
parent: BaseStructureDynamic
|
||||
categories: [ ForkFiltered ]
|
||||
name: DPS Meter
|
||||
suffix: Debug, DO NOT MAP
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Specific/Security/target.rsi
|
||||
state: target_stake
|
||||
noRot: true
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeCircle
|
||||
radius: 0.35
|
||||
density: 200
|
||||
mask:
|
||||
- FullTileMask
|
||||
layer:
|
||||
- WallLayer
|
||||
- type: InteractionOutline
|
||||
- type: Physics
|
||||
- type: Damageable
|
||||
- type: CP14DPSMeter
|
||||
@@ -289,9 +289,9 @@
|
||||
- CP14PenFeather
|
||||
- CP14PaperFolderBlue
|
||||
- CP14SilverCoin5
|
||||
- CP14BaseDagger
|
||||
- CP14BaseSickle
|
||||
- CP14BasePickaxe
|
||||
- CP14ModularIronDagger
|
||||
- CP14ModularIronSickle
|
||||
- CP14ModularIronPickaxe
|
||||
- CP14Lighter
|
||||
- CP14Torch
|
||||
|
||||
@@ -361,22 +361,22 @@
|
||||
- CP14SilverCoin5
|
||||
|
||||
- type: loadout
|
||||
id: CP14BaseDagger
|
||||
id: CP14ModularIronDagger
|
||||
storage:
|
||||
back:
|
||||
- CP14BaseDagger
|
||||
- CP14ModularIronDagger
|
||||
|
||||
- type: loadout
|
||||
id: CP14BaseSickle
|
||||
id: CP14ModularIronSickle
|
||||
storage:
|
||||
back:
|
||||
- CP14BaseSickle
|
||||
- CP14ModularIronSickle
|
||||
|
||||
- type: loadout
|
||||
id: CP14BasePickaxe
|
||||
id: CP14ModularIronPickaxe
|
||||
storage:
|
||||
back:
|
||||
- CP14BasePickaxe
|
||||
- CP14ModularIronPickaxe
|
||||
|
||||
- type: loadout
|
||||
id: CP14Lighter
|
||||
@@ -406,7 +406,6 @@
|
||||
- CP14ActionSpellManaConsume
|
||||
- CP14ActionSpellManaGift
|
||||
- CP14ActionSpellShadowGrab
|
||||
- CP14ActionSpellIceDagger
|
||||
- CP14ActionSpellWaterCreation
|
||||
- CP14ActionSpellBeerCreation
|
||||
|
||||
@@ -458,12 +457,6 @@
|
||||
actions:
|
||||
- CP14ActionSpellShadowGrab
|
||||
|
||||
- type: loadout
|
||||
id: CP14ActionSpellIceDagger
|
||||
dummyEntity: CP14ActionSpellIceDagger
|
||||
actions:
|
||||
- CP14ActionSpellIceDagger
|
||||
|
||||
- type: loadout
|
||||
id: CP14ActionSpellWaterCreation
|
||||
dummyEntity: CP14ActionSpellWaterCreation
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
id: CP14MobSkeleton
|
||||
equipment:
|
||||
pants: CP14ClothingPantsLoincloth
|
||||
neck: CP14BaseSword
|
||||
belt1: CP14BaseDagger
|
||||
neck: CP14ModularIronSword
|
||||
belt1: CP14ModularIronDagger
|
||||
inhand:
|
||||
- CP14TorchIgnited
|
||||
217
Resources/Prototypes/_CP14/ModularCraft/Blade/blade.yml
Normal file
@@ -0,0 +1,217 @@
|
||||
#Concept:
|
||||
# + Fast attackRate
|
||||
# fast swing
|
||||
# - Low damage
|
||||
- type: modularPart
|
||||
id: BladeIronDagger
|
||||
targetSlot: Blade
|
||||
sourcePart: CP14ModularBladeIronDagger
|
||||
rsiPath: _CP14/Objects/ModularTools/iron_dagger.rsi
|
||||
modifiers:
|
||||
- !type:Inherit
|
||||
copyFrom:
|
||||
- BaseWeaponThrowable
|
||||
- BaseWeaponChemical
|
||||
- BaseWeaponSharp
|
||||
- !type:AddComponents
|
||||
components:
|
||||
- type: ThrowingAngle
|
||||
angle: 135
|
||||
- type: EmbeddableProjectile
|
||||
offset: -0.15,-0.15
|
||||
removalTime: 0.5
|
||||
- !type:EditMeleeWeapon
|
||||
attackRateMultiplier: 1.4
|
||||
bonusDamage:
|
||||
types:
|
||||
Slash: 3
|
||||
Piercing: 3
|
||||
- !type:EditItem
|
||||
newSize: Normal
|
||||
adjustShape: 0, 1
|
||||
storedOffsetBonus: 0, 5
|
||||
|
||||
#Concept:
|
||||
# Copy of dagger with lesser damage
|
||||
# But can gather grass from world
|
||||
- type: modularPart
|
||||
id: BladeIronSickle
|
||||
targetSlot: Blade
|
||||
sourcePart: CP14ModularBladeIronSickle
|
||||
rsiPath: _CP14/Objects/ModularTools/iron_sickle.rsi
|
||||
modifiers:
|
||||
- !type:Inherit
|
||||
copyFrom:
|
||||
- BaseWeaponChemical
|
||||
- BaseWeaponSharp
|
||||
#components: TODO Add gathering tag
|
||||
- !type:EditMeleeWeapon
|
||||
attackRateMultiplier: 1.4
|
||||
bonusDamage:
|
||||
types:
|
||||
Slash: 4
|
||||
Piercing: 1
|
||||
- !type:EditItem
|
||||
newSize: Normal
|
||||
adjustShape: 0, 1
|
||||
storedOffsetBonus: 0, 5
|
||||
|
||||
#Concept:
|
||||
# + High Throwable damage
|
||||
# Piercing animation
|
||||
# - Low Melee Damage
|
||||
- type: modularPart
|
||||
id: BladeIronSpear
|
||||
targetSlot: Blade
|
||||
sourcePart: CP14ModularBladeIronSpear
|
||||
rsiPath: _CP14/Objects/ModularTools/iron_spear.rsi
|
||||
modifiers:
|
||||
- !type:Inherit
|
||||
copyFrom:
|
||||
- BaseWeaponThrowable
|
||||
- BaseWeaponChemical
|
||||
- BaseWeaponSharp
|
||||
- !type:AddComponents
|
||||
override: true
|
||||
components:
|
||||
- type: DamageOtherOnHit
|
||||
damage:
|
||||
types:
|
||||
Piercing: 15
|
||||
- type: ThrowingAngle
|
||||
angle: 135
|
||||
- type: EmbeddableProjectile
|
||||
offset: -0.15,-0.15
|
||||
removalTime: 1.5
|
||||
- !type:EditMeleeWeapon
|
||||
newWideAnimation: CP14WeaponArcThrust
|
||||
angleMultiplier: 0
|
||||
bonusDamage:
|
||||
types:
|
||||
Piercing: 7
|
||||
- !type:EditItem
|
||||
newSize: Normal
|
||||
adjustShape: 0, 1
|
||||
storedOffsetBonus: 0, 5
|
||||
|
||||
#Concept:
|
||||
# + High Wielded damage
|
||||
# - Low AttackRate
|
||||
- type: modularPart
|
||||
id: BladeIronMace
|
||||
targetSlot: Blade
|
||||
sourcePart: CP14ModularBladeIronMace
|
||||
rsiPath: _CP14/Objects/ModularTools/iron_mace.rsi
|
||||
modifiers:
|
||||
- !type:Inherit
|
||||
copyFrom:
|
||||
- BaseWeaponChemical
|
||||
- !type:EditMeleeWeapon
|
||||
resetOnHandSelected: true # Disable fast swap
|
||||
attackRateMultiplier: 0.85
|
||||
bonusDamage:
|
||||
types:
|
||||
Blunt: 4
|
||||
Piercing: 1
|
||||
- !type:EditIncreaseDamageOnWield
|
||||
bonusDamage:
|
||||
types:
|
||||
Blunt: 8
|
||||
Piercing: 4
|
||||
- !type:EditItem
|
||||
newSize: Large
|
||||
adjustShape: 0, 1
|
||||
storedOffsetBonus: 0, 5
|
||||
|
||||
#Concept:
|
||||
# + Additional range
|
||||
# + High Damage! + Wielded buff
|
||||
# - Required Warcraft skill
|
||||
- type: modularPart
|
||||
id: BladeIronSword
|
||||
targetSlot: Blade
|
||||
sourcePart: CP14ModularBladeIronSword
|
||||
rsiPath: _CP14/Objects/ModularTools/iron_sword.rsi
|
||||
modifiers:
|
||||
- !type:Inherit
|
||||
copyFrom:
|
||||
- BaseWeaponChemical
|
||||
- BaseWeaponSharp
|
||||
- !type:AddComponents
|
||||
components:
|
||||
- type: CP14SkillRequirement
|
||||
fuckupChance: 0.5
|
||||
requiredSkills:
|
||||
- Warcraft
|
||||
- !type:EditMeleeWeapon
|
||||
resetOnHandSelected: true # Disable fast swap
|
||||
bonusRange: 0.2
|
||||
angleMultiplier: 1.2
|
||||
bonusDamage:
|
||||
types:
|
||||
Slash: 8
|
||||
Piercing: 5
|
||||
- !type:EditIncreaseDamageOnWield
|
||||
bonusDamage:
|
||||
types:
|
||||
Slash: 5
|
||||
Piercing: 2
|
||||
- !type:EditItem
|
||||
newSize: Large
|
||||
adjustShape: 0, 2
|
||||
storedOffsetBonus: 0, 10
|
||||
|
||||
- type: modularPart
|
||||
id: BladeIronShovel
|
||||
targetSlot: Blade
|
||||
sourcePart: CP14ModularBladeIronShovel
|
||||
rsiPath: _CP14/Objects/ModularTools/iron_shovel.rsi
|
||||
modifiers:
|
||||
- !type:AddComponents
|
||||
components:
|
||||
- type: ToolTileCompatible
|
||||
- type: Tool
|
||||
qualities:
|
||||
- CP14Digging
|
||||
useSound:
|
||||
collection: CP14Digging
|
||||
params:
|
||||
variation: 0.03
|
||||
volume: 2
|
||||
- !type:EditMeleeWeapon
|
||||
angleMultiplier: 1.2
|
||||
bonusDamage:
|
||||
types:
|
||||
Slash: 3
|
||||
Blunt: 3
|
||||
- !type:EditIncreaseDamageOnWield
|
||||
bonusDamage:
|
||||
types:
|
||||
Slash: 3
|
||||
Blunt: 3
|
||||
- !type:EditItem
|
||||
newSize: Normal
|
||||
adjustShape: 0, 1
|
||||
storedOffsetBonus: 0, 5
|
||||
|
||||
- type: modularPart
|
||||
id: BladeIronPickaxe
|
||||
targetSlot: Blade
|
||||
sourcePart: CP14ModularBladeIronPickaxe
|
||||
rsiPath: _CP14/Objects/ModularTools/iron_pickaxe.rsi
|
||||
modifiers:
|
||||
- !type:EditMeleeWeapon
|
||||
attackRateMultiplier: 0.75
|
||||
angleMultiplier: 1.2
|
||||
bonusDamage:
|
||||
types:
|
||||
Piercing: 9
|
||||
- !type:EditIncreaseDamageOnWield
|
||||
bonusDamage:
|
||||
types:
|
||||
Piercing: 4
|
||||
Structural: 10
|
||||
- !type:EditItem
|
||||
newSize: Normal
|
||||
adjustShape: 1, 1
|
||||
storedOffsetBonus: 0, 5
|
||||
@@ -0,0 +1,68 @@
|
||||
- type: modularPart
|
||||
id: BaseWeaponChemical
|
||||
modifiers:
|
||||
- !type:AddComponents
|
||||
components:
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
melee:
|
||||
maxVol: 4
|
||||
- type: MeleeChemicalInjector
|
||||
solution: melee
|
||||
- type: RefillableSolution
|
||||
solution: melee
|
||||
- type: InjectableSolution
|
||||
solution: melee
|
||||
- type: SolutionInjectOnEmbed
|
||||
transferAmount: 2
|
||||
solution: melee
|
||||
- type: SolutionTransfer
|
||||
maxTransferAmount: 2
|
||||
|
||||
- type: modularPart
|
||||
id: BaseWeaponThrowable
|
||||
modifiers:
|
||||
- !type:AddComponents
|
||||
components:
|
||||
- type: LandAtCursor
|
||||
- type: DamageOtherOnHit
|
||||
damage:
|
||||
types:
|
||||
Piercing: 10
|
||||
- type: DamageOnLand
|
||||
damage:
|
||||
types:
|
||||
Piercing: 3
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape: !type:PolygonShape
|
||||
vertices:
|
||||
- -0.40,-0.30
|
||||
- -0.30,-0.40
|
||||
- 0.40,0.30
|
||||
- 0.30,0.40
|
||||
density: 10
|
||||
mask:
|
||||
- ItemMask
|
||||
restitution: 0.3
|
||||
friction: 0.2
|
||||
|
||||
- type: modularPart
|
||||
id: BaseWeaponSharp
|
||||
modifiers:
|
||||
- !type:AddComponents
|
||||
components:
|
||||
- type: Sharp
|
||||
- type: CP14Sharpened
|
||||
- type: CP14SharpeningStone
|
||||
- type: UseDelay
|
||||
- type: Tool
|
||||
qualities:
|
||||
- Slicing
|
||||
useSound:
|
||||
path: /Audio/Items/Culinary/chop.ogg
|
||||
- type: Utensil
|
||||
types:
|
||||
- Knife
|
||||
- type: CP14WallpaperRemover
|
||||
3
Resources/Prototypes/_CP14/ModularCraft/slots.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
- type: modularSlot
|
||||
id: Blade
|
||||
name: cp14-modular-slot-blade
|
||||
@@ -1,9 +0,0 @@
|
||||
- type: salvageLoot
|
||||
id: CP14DungeonLoot
|
||||
loots:
|
||||
- !type:RandomSpawnsLoot
|
||||
entries:
|
||||
- proto: CP14BaseThrowableSpear
|
||||
prob: 0.5
|
||||
- proto: CP14BaseDagger
|
||||
prob: 0.5
|
||||
@@ -1,48 +1,3 @@
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseBattleHammer
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 3
|
||||
result: CP14BaseBattleHammer
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseDagger
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 1
|
||||
result: CP14BaseDagger
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseHandheldAxe
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 1
|
||||
result: CP14BaseHandheldAxe
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseLightHammer
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 1
|
||||
result: CP14BaseLightHammer
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseMace
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 2
|
||||
result: CP14BaseMace
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseShield
|
||||
tag: CP14RecipeAnvil
|
||||
@@ -52,33 +7,6 @@
|
||||
CP14IronBar: 2
|
||||
result: CP14BaseShield
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseSickle
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 2
|
||||
result: CP14BaseSickle
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseThrowableSpear
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 2
|
||||
CP14IronBar: 1
|
||||
result: CP14BaseThrowableSpear
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseSword
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 3
|
||||
result: CP14BaseSword
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseCrowbar
|
||||
tag: CP14RecipeAnvil
|
||||
@@ -95,42 +23,6 @@
|
||||
CP14IronBar: 2
|
||||
result: CP14BaseWrench
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseTwoHandedSword
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 4
|
||||
result: CP14BaseTwoHandedSword
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseHoe
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 2
|
||||
result: CP14BaseHoe
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BasePickaxe
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 2
|
||||
result: CP14BasePickaxe
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14BaseShovel
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
CP14IronBar: 2
|
||||
result: CP14BaseShovel
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ClothingCloakCuirass
|
||||
tag: CP14RecipeAnvil
|
||||
@@ -211,4 +103,76 @@
|
||||
craftTime: 1
|
||||
stacks:
|
||||
CP14CopperBar: 1
|
||||
result: CP14Crossbolt
|
||||
result: CP14Crossbolt
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularBladeIronDagger
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 2
|
||||
stacks:
|
||||
CP14IronBar: 1
|
||||
result: CP14ModularBladeIronDagger
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularBladeIronSpear
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 2
|
||||
stacks:
|
||||
CP14IronBar: 1
|
||||
result: CP14ModularBladeIronSpear
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularBladeIronMace
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 2
|
||||
stacks:
|
||||
CP14IronBar: 1
|
||||
result: CP14ModularBladeIronMace
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularBladeIronSword
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14IronBar: 2
|
||||
result: CP14ModularBladeIronSword
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularBladeIronSickle
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 2
|
||||
stacks:
|
||||
CP14IronBar: 1
|
||||
result: CP14ModularBladeIronSickle
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularBladeIronShovel
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 2
|
||||
stacks:
|
||||
CP14IronBar: 1
|
||||
result: CP14ModularBladeIronShovel
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularBladeIronPickaxe
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 2
|
||||
stacks:
|
||||
CP14IronBar: 1
|
||||
result: CP14ModularBladeIronPickaxe
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularGripIron
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 2
|
||||
stacks:
|
||||
CP14IronBar: 1
|
||||
result: CP14ModularGripIron
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularGripIronLong
|
||||
tag: CP14RecipeAnvil
|
||||
craftTime: 4
|
||||
stacks:
|
||||
CP14IronBar: 2
|
||||
result: CP14ModularGripIronLong
|
||||
@@ -69,3 +69,19 @@
|
||||
CP14Stone: 1
|
||||
CP14IronBar: 1
|
||||
result: CP14Lighter
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularGripWooden
|
||||
tag: CP14RecipeWorkbench
|
||||
craftTime: 2
|
||||
stacks:
|
||||
CP14WoodenPlanks: 1
|
||||
result: CP14ModularGripWooden
|
||||
|
||||
- type: CP14Recipe
|
||||
id: CP14ModularGripWoodenLong
|
||||
tag: CP14RecipeWorkbench
|
||||
craftTime: 2
|
||||
stacks:
|
||||
CP14WoodenPlanks: 2
|
||||
result: CP14ModularGripWoodenLong
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
pants: CP14ClothingPantsLoincloth
|
||||
shoes: CP14ClothingShoesSandals
|
||||
inhand:
|
||||
- CP14BaseDagger
|
||||
- CP14BaseDagger
|
||||
- CP14ModularIronDagger
|
||||
- CP14ModularIronDagger
|
||||
@@ -2,8 +2,8 @@
|
||||
id: CP14Digging
|
||||
name: cp14-tool-quality-digging-name
|
||||
toolName: cp14-tool-quality-digging-tool-name
|
||||
spawn: CP14BaseShovel
|
||||
icon: { sprite: _CP14/Objects/Weapons/Melee/Shovel/shovel.rsi, state: icon}
|
||||
spawn: CP14ModularIronShovel
|
||||
icon: { sprite: _CP14/Objects/ModularTools/iron_shovel.rsi, state: icon}
|
||||
|
||||
- type: tool
|
||||
id: CP14Hammering
|
||||
|
||||
@@ -31,8 +31,8 @@ When you decide to leave the demiplane after finding the portal, you must touch
|
||||
|
||||
<Box>
|
||||
<GuideEntityEmbed Entity="CP14BaseShield"/>
|
||||
<GuideEntityEmbed Entity="CP14BaseSword"/>
|
||||
<GuideEntityEmbed Entity="CP14BasePickaxe"/>
|
||||
<GuideEntityEmbed Entity="CP14ModularIronSword"/>
|
||||
<GuideEntityEmbed Entity="CP14ModularIronPickaxe"/>
|
||||
<GuideEntityEmbed Entity="CP14CrystalLampBlueEmpty"/>
|
||||
<GuideEntityEmbed Entity="CP14BaseSharpeningStone"/>
|
||||
</Box>
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
|
||||
<Box>
|
||||
<GuideEntityEmbed Entity="CP14BaseShield"/>
|
||||
<GuideEntityEmbed Entity="CP14BaseSword"/>
|
||||
<GuideEntityEmbed Entity="CP14BasePickaxe"/>
|
||||
<GuideEntityEmbed Entity="CP14ModularIronSword"/>
|
||||
<GuideEntityEmbed Entity="CP14ModularIronPickaxe"/>
|
||||
<GuideEntityEmbed Entity="CP14CrystalLampBlueEmpty"/>
|
||||
<GuideEntityEmbed Entity="CP14BaseSharpeningStone"/>
|
||||
</Box>
|
||||
|
||||
|
After Width: | Height: | Size: 518 B |
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 48,
|
||||
"y": 48
|
||||
},
|
||||
"license": "CLA",
|
||||
"copyright": "Created by Jaraten (Github) ",
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 253 B |
|
After Width: | Height: | Size: 255 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 322 B |
|
After Width: | Height: | Size: 424 B |
|
After Width: | Height: | Size: 433 B |
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"license": "CLA",
|
||||
"copyright": "Created by TheShuEd (Github) ",
|
||||
"states": [
|
||||
{
|
||||
"name": "equipped-BELT1",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-BELT2",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-NECK",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wielded-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wielded-inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 390 B |
|
After Width: | Height: | Size: 395 B |
|
After Width: | Height: | Size: 182 B |
|
After Width: | Height: | Size: 177 B |
|
After Width: | Height: | Size: 238 B |
|
After Width: | Height: | Size: 226 B |
|
After Width: | Height: | Size: 227 B |
|
After Width: | Height: | Size: 358 B |
|
After Width: | Height: | Size: 354 B |
|
After Width: | Height: | Size: 442 B |
|
After Width: | Height: | Size: 420 B |
@@ -1,12 +1,16 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CLA",
|
||||
"copyright": "Created by TheShuEd (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
"x": 48,
|
||||
"y": 48
|
||||
},
|
||||
"license": "CLA",
|
||||
"copyright": "Created by TheShuEd (Github) ",
|
||||
"states": [
|
||||
{
|
||||
"name": "equipped-NECK",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
@@ -27,4 +31,4 @@
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 385 B |
|
After Width: | Height: | Size: 380 B |
|
After Width: | Height: | Size: 403 B |
|
After Width: | Height: | Size: 462 B |
|
After Width: | Height: | Size: 387 B |
|
After Width: | Height: | Size: 337 B |
|
After Width: | Height: | Size: 521 B |
|
After Width: | Height: | Size: 492 B |
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"license": "CLA",
|
||||
"copyright": "Created by TheShuEd (Github) ",
|
||||
"states": [
|
||||
{
|
||||
"name": "equipped-BELT1",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-BELT2",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-NECK",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wielded-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wielded-inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 518 B |
|
After Width: | Height: | Size: 523 B |