Add knife butchering and blood gibbing (#6770)

This commit is contained in:
mirrorcult
2022-02-18 15:57:42 -07:00
committed by GitHub
parent 67661ddbdb
commit 676ca21b5f
28 changed files with 223 additions and 45 deletions

View File

@@ -71,6 +71,7 @@ namespace Content.Client.Entry
"Stomach", "Stomach",
"SpeedLoader", "SpeedLoader",
"Hitscan", "Hitscan",
"Sharp",
"StunOnCollide", "StunOnCollide",
"ExaminableDamage", "ExaminableDamage",
"RandomPottedPlant", "RandomPottedPlant",

View File

@@ -102,7 +102,12 @@ namespace Content.Server.Body.Components
} }
} }
_entMan.EventBus.RaiseLocalEvent(Owner, new BeingGibbedEvent(), false);
_entMan.QueueDeleteEntity(Owner); _entMan.QueueDeleteEntity(Owner);
} }
} }
public sealed class BeingGibbedEvent : EntityEventArgs
{
}
} }

View File

@@ -34,6 +34,7 @@ public sealed class BloodstreamSystem : EntitySystem
SubscribeLocalEvent<BloodstreamComponent, ComponentInit>(OnComponentInit); SubscribeLocalEvent<BloodstreamComponent, ComponentInit>(OnComponentInit);
SubscribeLocalEvent<BloodstreamComponent, DamageChangedEvent>(OnDamageChanged); SubscribeLocalEvent<BloodstreamComponent, DamageChangedEvent>(OnDamageChanged);
SubscribeLocalEvent<BloodstreamComponent, ExaminedEvent>(OnExamined); SubscribeLocalEvent<BloodstreamComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<BloodstreamComponent, BeingGibbedEvent>(OnBeingGibbed);
} }
public override void Update(float frameTime) public override void Update(float frameTime)
@@ -132,6 +133,11 @@ public sealed class BloodstreamSystem : EntitySystem
} }
} }
private void OnBeingGibbed(EntityUid uid, BloodstreamComponent component, BeingGibbedEvent args)
{
SpillAllSolutions(uid, component);
}
/// <summary> /// <summary>
/// Attempt to transfer provided solution to internal solution. /// Attempt to transfer provided solution to internal solution.
/// </summary> /// </summary>
@@ -193,4 +199,22 @@ public sealed class BloodstreamSystem : EntitySystem
return true; return true;
} }
/// <summary>
/// BLOOD FOR THE BLOOD GOD
/// </summary>
public void SpillAllSolutions(EntityUid uid, BloodstreamComponent? component = null)
{
if (!Resolve(uid, ref component))
return;
var max = component.BloodSolution.MaxVolume + component.BloodTemporarySolution.MaxVolume +
component.ChemicalSolution.MaxVolume;
var tempSol = new Solution() { MaxVolume = max };
tempSol.AddSolution(component.BloodSolution);
tempSol.AddSolution(component.BloodTemporarySolution);
tempSol.AddSolution(component.ChemicalSolution);
_spillableSystem.SpillAt(uid, tempSol, "PuddleBlood", true);
}
} }

View File

@@ -7,6 +7,7 @@ using Content.Server.Chemistry.EntitySystems;
using Content.Server.Chemistry.Components; using Content.Server.Chemistry.Components;
using Content.Server.Fluids.Components; using Content.Server.Fluids.Components;
using Content.Server.Hands.Components; using Content.Server.Hands.Components;
using Content.Server.Kitchen.Components;
using Content.Server.Plants; using Content.Server.Plants;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Shared.ActionBlocker; using Content.Shared.ActionBlocker;
@@ -802,9 +803,10 @@ namespace Content.Server.Botany.Components
return true; return true;
} }
if (tagSystem.HasTag(usingItem, "BotanySharp")) if (_entMan.HasComponent<SharpComponent>(usingItem))
{ {
return DoHarvest(user); return DoHarvest(user);
} }
if (_entMan.TryGetComponent<ProduceComponent?>(usingItem, out var produce)) if (_entMan.TryGetComponent<ProduceComponent?>(usingItem, out var produce))

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Content.Server.Botany.Components; using Content.Server.Botany.Components;
using Content.Server.Kitchen.Components;
using Content.Shared.Examine; using Content.Shared.Examine;
using Content.Shared.Random.Helpers; using Content.Shared.Random.Helpers;
using Content.Shared.Tag; using Content.Shared.Tag;
@@ -136,7 +137,7 @@ public sealed partial class BotanySystem
public bool CanHarvest(SeedPrototype proto, EntityUid? held = null) public bool CanHarvest(SeedPrototype proto, EntityUid? held = null)
{ {
return !proto.Ligneous || proto.Ligneous && held != null && _tags.HasTag(held.Value, "BotanySharp"); return !proto.Ligneous || proto.Ligneous && held != null && HasComp<SharpComponent>(held);
} }
#endregion #endregion

View File

@@ -1,4 +1,5 @@
using Content.Server.Botany.Components; using Content.Server.Botany.Components;
using Content.Server.Kitchen.Components;
using Content.Shared.ActionBlocker; using Content.Shared.ActionBlocker;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Random.Helpers; using Content.Shared.Random.Helpers;
@@ -9,8 +10,6 @@ namespace Content.Server.Botany.Systems;
public sealed class LogSystem : EntitySystem public sealed class LogSystem : EntitySystem
{ {
[Dependency] private readonly TagSystem _tags = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
@@ -20,7 +19,7 @@ public sealed class LogSystem : EntitySystem
private void OnInteractUsing(EntityUid uid, LogComponent component, InteractUsingEvent args) private void OnInteractUsing(EntityUid uid, LogComponent component, InteractUsingEvent args)
{ {
if (_tags.HasTag(args.Used, "BotanySharp")) if (HasComp<SharpComponent>(args.Used))
{ {
for (var i = 0; i < component.SpawnCount; i++) for (var i = 0; i < component.SpawnCount; i++)
{ {

View File

@@ -0,0 +1,14 @@
namespace Content.Server.Kitchen.Components;
/// <summary>
/// Applies to items that are capable of butchering entities, or
/// are otherwise sharp for some purpose.
/// </summary>
[RegisterComponent]
public sealed class SharpComponent : Component
{
public HashSet<EntityUid> Butchering = new();
[DataField("butcherDelayModifier")]
public float ButcherDelayModifier = 1.0f;
}

View File

@@ -92,7 +92,7 @@ namespace Content.Server.Kitchen.EntitySystems
if (!Resolve(uid, ref component) || !Resolve(victimUid, ref butcherable)) if (!Resolve(uid, ref component) || !Resolve(victimUid, ref butcherable))
return; return;
component.MeatPrototype = butcherable.MeatPrototype; component.MeatPrototype = butcherable.SpawnedPrototype;
component.MeatParts = butcherable.Pieces; component.MeatParts = butcherable.Pieces;
// This feels not okay, but entity is getting deleted on "Spike", for now... // This feels not okay, but entity is getting deleted on "Spike", for now...
@@ -164,7 +164,7 @@ namespace Content.Server.Kitchen.EntitySystems
return false; return false;
} }
if (!Resolve(victimUid, ref butcherable, false) || butcherable.MeatPrototype == null) if (!Resolve(victimUid, ref butcherable, false) || butcherable.SpawnedPrototype == null)
{ {
_popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-deny-butcher", ("victim", victimUid), ("this", uid)), victimUid, Filter.Entities(userUid)); _popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-deny-butcher", ("victim", victimUid), ("this", uid)), victimUid, Filter.Entities(userUid));
return false; return false;
@@ -180,6 +180,9 @@ namespace Content.Server.Kitchen.EntitySystems
!Resolve(victimUid, ref butcherable) || butcherable.BeingButchered) !Resolve(victimUid, ref butcherable) || butcherable.BeingButchered)
return false; return false;
if (butcherable.Type != ButcheringType.Spike)
return false;
// THE WHAT? (again) // THE WHAT? (again)
// Prevent dead from being spiked TODO: Maybe remove when rounds can be played and DOT is implemented // Prevent dead from being spiked TODO: Maybe remove when rounds can be played and DOT is implemented
if (Resolve(victimUid, ref mobState, false) && if (Resolve(victimUid, ref mobState, false) &&
@@ -201,7 +204,7 @@ namespace Content.Server.Kitchen.EntitySystems
butcherable.BeingButchered = true; butcherable.BeingButchered = true;
component.InUse = true; component.InUse = true;
var doAfterArgs = new DoAfterEventArgs(userUid, component.SpikeDelay, default, uid) var doAfterArgs = new DoAfterEventArgs(userUid, component.SpikeDelay + butcherable.ButcherDelay, default, uid)
{ {
BreakOnTargetMove = true, BreakOnTargetMove = true,
BreakOnUserMove = true, BreakOnUserMove = true,

View File

@@ -0,0 +1,105 @@
using Content.Server.DoAfter;
using Content.Server.Kitchen.Components;
using Content.Server.Popups;
using Content.Shared.Body.Components;
using Content.Shared.Interaction;
using Content.Shared.MobState.Components;
using Content.Shared.Nutrition.Components;
using Content.Shared.Popups;
using Robust.Shared.Player;
namespace Content.Server.Kitchen.EntitySystems;
public sealed class SharpSystem : EntitySystem
{
[Dependency] private readonly DoAfterSystem _doAfterSystem = default!;
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SharpComponent, AfterInteractEvent>(OnAfterInteract);
SubscribeLocalEvent<SharpButcherDoafterComplete>(OnDoafterComplete);
SubscribeLocalEvent<SharpButcherDoafterCancelled>(OnDoafterCancelled);
}
private void OnAfterInteract(EntityUid uid, SharpComponent component, AfterInteractEvent args)
{
if (args.Target is null || !TryComp<SharedButcherableComponent>(args.Target, out var butcher))
return;
if (butcher.Type != ButcheringType.Knife)
return;
if (TryComp<MobStateComponent>(args.Target, out var mobState) && !mobState.IsDead())
return;
if (!component.Butchering.Add(args.Target.Value))
return;
var doAfter =
new DoAfterEventArgs(args.User, component.ButcherDelayModifier * butcher.ButcherDelay, default, args.Target)
{
BreakOnTargetMove = true,
BreakOnUserMove = true,
BreakOnDamage = true,
BreakOnStun = true,
NeedHand = true,
BroadcastFinishedEvent = new SharpButcherDoafterComplete { User = args.User, Entity = args.Target.Value, Sharp = uid },
BroadcastCancelledEvent = new SharpButcherDoafterCancelled { Entity = args.Target.Value, Sharp = uid }
};
_doAfterSystem.DoAfter(doAfter);
}
private void OnDoafterComplete(SharpButcherDoafterComplete ev)
{
if (!TryComp<SharedButcherableComponent>(ev.Entity, out var butcher))
return;
if (!TryComp<SharpComponent>(ev.Sharp, out var sharp))
return;
sharp.Butchering.Remove(ev.Entity);
EntityUid popupEnt = default;
for (int i = 0; i < butcher.Pieces; i++)
{
popupEnt = Spawn(butcher.SpawnedPrototype, Transform(ev.Entity).Coordinates);
}
_popupSystem.PopupEntity(Loc.GetString("butcherable-knife-butchered-success", ("target", ev.Entity), ("knife", ev.Sharp)),
popupEnt, Filter.Entities(ev.User));
if (TryComp<SharedBodyComponent>(ev.Entity, out var body))
{
body.Gib();
}
else
{
QueueDel(ev.Entity);
}
}
private void OnDoafterCancelled(SharpButcherDoafterCancelled ev)
{
if (!TryComp<SharpComponent>(ev.Sharp, out var sharp))
return;
sharp.Butchering.Remove(ev.Entity);
}
}
public sealed class SharpButcherDoafterComplete : EntityEventArgs
{
public EntityUid Entity;
public EntityUid Sharp;
public EntityUid User;
}
public sealed class SharpButcherDoafterCancelled : EntityEventArgs
{
public EntityUid Entity;
public EntityUid Sharp;
}

View File

@@ -14,7 +14,7 @@ namespace Content.Shared.Kitchen.Components
{ {
[ViewVariables] [ViewVariables]
[DataField("delay")] [DataField("delay")]
public float SpikeDelay = 12.0f; public float SpikeDelay = 7.0f;
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("sound")] [DataField("sound")]

View File

@@ -15,13 +15,19 @@ namespace Content.Shared.Nutrition.Components
{ {
//TODO: List for sub-products like animal-hides, organs and etc? //TODO: List for sub-products like animal-hides, organs and etc?
[ViewVariables] [ViewVariables]
[DataField("meat", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))] [DataField("spawned", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
public string MeatPrototype = "FoodMeat"; public string SpawnedPrototype = "FoodMeat";
[ViewVariables] [ViewVariables]
[DataField("pieces")] [DataField("pieces")]
public int Pieces = 5; public int Pieces = 5;
[DataField("butcherDelay")]
public float ButcherDelay = 8.0f;
[DataField("butcheringType")]
public ButcheringType Type = ButcheringType.Knife;
/// <summary> /// <summary>
/// Prevents butchering same entity on two and more spikes simultaneously and multiple doAfters on the same Spike /// Prevents butchering same entity on two and more spikes simultaneously and multiple doAfters on the same Spike
/// </summary> /// </summary>
@@ -32,7 +38,14 @@ namespace Content.Shared.Nutrition.Components
// CanDropOn behaviors as well (IDragDropOn) // CanDropOn behaviors as well (IDragDropOn)
bool IDraggable.CanDrop(CanDropEvent args) bool IDraggable.CanDrop(CanDropEvent args)
{ {
return true; return Type != ButcheringType.Knife;
} }
} }
public enum ButcheringType
{
Knife, // e.g. goliaths
Spike, // e.g. monkeys
Gibber // e.g. humans. TODO
}
} }

View File

@@ -0,0 +1 @@
butcherable-knife-butchered-success = You butcher { THE($target) } with { THE($knife) }.

View File

@@ -100,6 +100,7 @@
netsync: false netsync: false
- type: Puddle - type: Puddle
slipThreshold: 20 slipThreshold: 20
overflowVolume: 50
- type: Evaporation - type: Evaporation
evaporateTime: 400 # very slow evaporateTime: 400 # very slow
- type: Appearance - type: Appearance

View File

@@ -37,7 +37,7 @@
crit: dead crit: dead
dead: dead dead: dead
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 1 pieces: 1
- type: InteractionPopup - type: InteractionPopup
successChance: 0.2 successChance: 0.2
@@ -132,7 +132,7 @@
crit: dead-0 crit: dead-0
dead: dead-0 dead: dead-0
- type: Butcherable - type: Butcherable
meat: FoodMeatChicken spawned: FoodMeatChicken
pieces: 1 pieces: 1
- type: InteractionPopup - type: InteractionPopup
successChance: 0.8 successChance: 0.8
@@ -160,7 +160,7 @@
crit: dead-0 crit: dead-0
dead: dead-0 dead: dead-0
- type: Butcherable - type: Butcherable
meat: FoodMeatDuck spawned: FoodMeatDuck
pieces: 1 pieces: 1
- type: InteractionPopup - type: InteractionPopup
successChance: 0.9 successChance: 0.9
@@ -188,7 +188,7 @@
crit: dead-1 crit: dead-1
dead: dead-1 dead: dead-1
- type: Butcherable - type: Butcherable
meat: FoodMeatDuck spawned: FoodMeatDuck
pieces: 1 pieces: 1
- type: InteractionPopup - type: InteractionPopup
successChance: 0.9 successChance: 0.9
@@ -216,7 +216,7 @@
crit: dead-2 crit: dead-2
dead: dead-2 dead: dead-2
- type: Butcherable - type: Butcherable
meat: FoodMeatDuck spawned: FoodMeatDuck
pieces: 1 pieces: 1
- type: InteractionPopup - type: InteractionPopup
successChance: 0.9 successChance: 0.9
@@ -321,7 +321,7 @@
quantity: 25 quantity: 25
updateRate: 30 updateRate: 30
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 5 pieces: 5
- type: Grammar - type: Grammar
attributes: attributes:
@@ -365,7 +365,7 @@
dead: dead dead: dead
- type: AsteroidRockVisualizer - type: AsteroidRockVisualizer
- type: Butcherable - type: Butcherable
meat: FoodMeatCrab spawned: FoodMeatCrab
pieces: 2 pieces: 2
- type: InteractionPopup - type: InteractionPopup
successChance: 0.5 successChance: 0.5
@@ -403,7 +403,7 @@
quantity: 25 quantity: 25
updateRate: 20 updateRate: 20
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 4 pieces: 4
- type: Grammar - type: Grammar
attributes: attributes:
@@ -433,7 +433,7 @@
crit: dead crit: dead
dead: dead dead: dead
- type: Butcherable - type: Butcherable
meat: FoodMeatChicken spawned: FoodMeatChicken
pieces: 2 pieces: 2
- type: InteractionPopup # TODO: Make it so there's a separate chance to make certain animals outright hostile towards you. - type: InteractionPopup # TODO: Make it so there's a separate chance to make certain animals outright hostile towards you.
successChance: 0.1 # Yeah, good luck with that. successChance: 0.1 # Yeah, good luck with that.
@@ -473,7 +473,7 @@
crit: dead crit: dead
dead: dead dead: dead
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 4 pieces: 4
- type: entity - type: entity
@@ -581,7 +581,8 @@
sprite: Mobs/Effects/onfire.rsi sprite: Mobs/Effects/onfire.rsi
normalState: Monkey_burning normalState: Monkey_burning
- type: Butcherable - type: Butcherable
meat: FoodMeat butcheringType: Spike
spawned: FoodMeat
pieces: 3 pieces: 3
- type: MonkeyAccent - type: MonkeyAccent
@@ -645,7 +646,7 @@
- ReagentId: Nutriment - ReagentId: Nutriment
Quantity: 5 Quantity: 5
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 1 pieces: 1
- type: ReplacementAccent - type: ReplacementAccent
accent: mouse accent: mouse
@@ -730,7 +731,7 @@
crit: dead crit: dead
dead: dead dead: dead
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 1 pieces: 1
- type: InteractionPopup - type: InteractionPopup
successChance: 0.3 successChance: 0.3
@@ -773,7 +774,7 @@
crit: dead crit: dead
dead: dead dead: dead
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 1 pieces: 1
- type: InteractionPopup - type: InteractionPopup
successChance: 0.6 successChance: 0.6
@@ -817,7 +818,7 @@
crit: dead crit: dead
dead: dead dead: dead
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 1 pieces: 1
- type: InteractionPopup - type: InteractionPopup
successChance: 0.6 successChance: 0.6
@@ -857,7 +858,7 @@
crit: penguin_dead crit: penguin_dead
dead: penguin_dead dead: penguin_dead
- type: Butcherable - type: Butcherable
meat: FoodMeatPenguin spawned: FoodMeatPenguin
pieces: 3 pieces: 3
- type: InteractionPopup - type: InteractionPopup
successChance: 0.5 successChance: 0.5
@@ -900,7 +901,7 @@
# dead: dead # dead: dead
# crit: dead # crit: dead
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 1 pieces: 1
- type: InteractionPopup - type: InteractionPopup
successChance: 0.6 successChance: 0.6
@@ -942,7 +943,7 @@
crit: tarantula_dead crit: tarantula_dead
dead: tarantula_dead dead: tarantula_dead
- type: Butcherable - type: Butcherable
meat: FoodMeatSpider spawned: FoodMeatSpider
pieces: 2 pieces: 2
- type: InteractionPopup - type: InteractionPopup
successChance: 0.5 successChance: 0.5

View File

@@ -43,7 +43,7 @@
crit: crit crit: crit
dead: dead dead: dead
- type: Butcherable - type: Butcherable
meat: FoodMeat # TODO: CrapMeat or FishMeat spawned: FoodMeat # TODO: CrapMeat or FishMeat # - 2022-02-17 LMAO crap meat
pieces: 2 pieces: 2
- type: entity - type: entity

View File

@@ -34,7 +34,7 @@
crit: corgi_dead crit: corgi_dead
dead: corgi_dead dead: corgi_dead
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 3 pieces: 3
- type: ReplacementAccent - type: ReplacementAccent
accent: dog accent: dog
@@ -211,7 +211,7 @@
crit: cat_dead crit: cat_dead
dead: cat_dead dead: cat_dead
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 2 pieces: 2
- type: ReplacementAccent - type: ReplacementAccent
accent: cat accent: cat
@@ -333,7 +333,7 @@
crit: sloth_dead crit: sloth_dead
dead: sloth_dead dead: sloth_dead
- type: Butcherable - type: Butcherable
meat: FoodMeat spawned: FoodMeat
pieces: 3 pieces: 3
- type: InteractionPopup - type: InteractionPopup
successChance: 0.9 successChance: 0.9

View File

@@ -76,5 +76,6 @@
dead: dead dead: dead
- type: Puller - type: Puller
- type: Butcherable - type: Butcherable
meat: FoodMeatXeno spawned: FoodMeatXeno
butcheringType: Spike
pieces: 5 pieces: 5

View File

@@ -283,7 +283,8 @@
type: StrippableBoundUserInterface type: StrippableBoundUserInterface
- type: Puller - type: Puller
- type: Butcherable - type: Butcherable
meat: FoodMeat butcheringType: Spike # TODO human.
spawned: FoodMeat
- type: Recyclable - type: Recyclable
safe: false safe: false
- type: Speech - type: Speech

View File

@@ -135,7 +135,8 @@
messages: [ "slime-hurt-by-water-popup" ] messages: [ "slime-hurt-by-water-popup" ]
probability: 0.25 probability: 0.25
- type: Butcherable - type: Butcherable
meat: FoodMeatSlime butcheringType: Spike
spawned: FoodMeatSlime
- type: entity - type: entity
save: false save: false

View File

@@ -110,4 +110,5 @@
- type: Inventory - type: Inventory
speciesId: vox speciesId: vox
- type: Butcherable - type: Butcherable
meat: FoodMeatChicken butcheringType: Spike
spawned: FoodMeatChicken

View File

@@ -45,9 +45,7 @@
id: HydroponicsToolScythe id: HydroponicsToolScythe
description: A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow. description: A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow.
components: components:
- type: Tag - type: Sharp
tags:
- BotanySharp
- type: Sprite - type: Sprite
sprite: Objects/Tools/Hydroponics/scythe.rsi sprite: Objects/Tools/Hydroponics/scythe.rsi
state: icon state: icon
@@ -72,7 +70,7 @@
- type: Tag - type: Tag
tags: tags:
- BotanyHatchet - BotanyHatchet
- BotanySharp - type: Sharp
- type: Sprite - type: Sprite
sprite: Objects/Tools/Hydroponics/hatchet.rsi sprite: Objects/Tools/Hydroponics/hatchet.rsi
state: icon state: icon

View File

@@ -141,6 +141,7 @@
parent: BaseToolSurgery parent: BaseToolSurgery
description: For cutting wood and other objects to pieces. Or sawing bones, in case of emergency. description: For cutting wood and other objects to pieces. Or sawing bones, in case of emergency.
components: components:
- type: Sharp
- type: Utensil - type: Utensil
types: types:
- Knife - Knife

View File

@@ -10,6 +10,7 @@
Slash: 12.5 Slash: 12.5
Heat: 12.5 Heat: 12.5
Blunt: -7 Blunt: -7
- type: Sharp
- type: Sprite - type: Sprite
sprite: Objects/Weapons/Melee/e_sword.rsi sprite: Objects/Weapons/Melee/e_sword.rsi
layers: layers:

View File

@@ -7,6 +7,7 @@
- type: Tag - type: Tag
tags: tags:
- FireAxe - FireAxe
- type: Sharp
- type: Sprite - type: Sprite
sprite: Objects/Weapons/Melee/fireaxe.rsi sprite: Objects/Weapons/Melee/fireaxe.rsi
state: icon state: icon

View File

@@ -6,6 +6,7 @@
- type: Tag - type: Tag
tags: tags:
- Knife - Knife
- type: Sharp
- type: Utensil - type: Utensil
types: types:
- Knife - Knife

View File

@@ -7,6 +7,7 @@
- type: Tag - type: Tag
tags: tags:
- Spear - Spear
- type: Sharp
- type: Sprite - type: Sprite
sprite: Objects/Weapons/Melee/spear.rsi sprite: Objects/Weapons/Melee/spear.rsi
state: spear state: spear

View File

@@ -4,6 +4,7 @@
id: CaptainSabre id: CaptainSabre
description: A ceremonial weapon belonging to the captain of the station. description: A ceremonial weapon belonging to the captain of the station.
components: components:
- type: Sharp
- type: Sprite - type: Sprite
sprite: Objects/Weapons/Melee/captain_sabre.rsi sprite: Objects/Weapons/Melee/captain_sabre.rsi
state: icon state: icon
@@ -24,6 +25,7 @@
id: Katana id: Katana
description: Ancient craftwork made with not so ancient plasteel. description: Ancient craftwork made with not so ancient plasteel.
components: components:
- type: Sharp
- type: Tag - type: Tag
tags: tags:
- Katana - Katana
@@ -44,6 +46,7 @@
id: Machete id: Machete
description: A large, vicious looking blade. description: A large, vicious looking blade.
components: components:
- type: Sharp
- type: Tag - type: Tag
tags: tags:
- Machete - Machete
@@ -64,6 +67,7 @@
id: Claymore id: Claymore
description: An ancient war blade. description: An ancient war blade.
components: components:
- type: Sharp
- type: Sprite - type: Sprite
sprite: Objects/Weapons/Melee/claymore.rsi sprite: Objects/Weapons/Melee/claymore.rsi
state: icon state: icon

View File

@@ -24,9 +24,6 @@
- type: Tag - type: Tag
id: BotanyHoe id: BotanyHoe
- type: Tag
id: BotanySharp
- type: Tag - type: Tag
id: BotanyShovel id: BotanyShovel