From e72db8006087027995b7da5f30609d8b86ae8b39 Mon Sep 17 00:00:00 2001
From: forkeyboards <91704530+forkeyboards@users.noreply.github.com>
Date: Fri, 12 May 2023 23:11:35 -0400
Subject: [PATCH] White Cane for Blind People (#16318)
---
Content.Server/Traits/TraitSystem.cs | 15 +++++++++
Content.Shared/Traits/TraitPrototype.cs | 7 ++++
.../Objects/Weapons/Melee/white_cane.yml | 24 ++++++++++++++
Resources/Prototypes/Traits/disabilities.yml | 1 +
.../Weapons/Melee/white_cane.rsi/icon.png | Bin 0 -> 665 bytes
.../Melee/white_cane.rsi/inhand-left.png | Bin 0 -> 8409 bytes
.../Melee/white_cane.rsi/inhand-right.png | Bin 0 -> 7937 bytes
.../Weapons/Melee/white_cane.rsi/meta.json | 30 ++++++++++++++++++
.../white_cane.rsi/wielded-inhand-left.png | Bin 0 -> 3558 bytes
.../white_cane.rsi/wielded-inhand-right.png | Bin 0 -> 3255 bytes
10 files changed, 77 insertions(+)
create mode 100644 Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml
create mode 100644 Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/icon.png
create mode 100644 Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-left.png
create mode 100644 Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-right.png
create mode 100644 Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/meta.json
create mode 100644 Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-left.png
create mode 100644 Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-right.png
diff --git a/Content.Server/Traits/TraitSystem.cs b/Content.Server/Traits/TraitSystem.cs
index a153990afa..114c0ea914 100644
--- a/Content.Server/Traits/TraitSystem.cs
+++ b/Content.Server/Traits/TraitSystem.cs
@@ -1,4 +1,6 @@
using Content.Server.GameTicking;
+using Content.Shared.Hands.Components;
+using Content.Shared.Hands.EntitySystems;
using Content.Shared.Traits;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.Manager;
@@ -9,6 +11,7 @@ public sealed class TraitSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly ISerializationManager _serializationManager = default!;
+ [Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!;
public override void Initialize()
{
@@ -41,6 +44,18 @@ public sealed class TraitSystem : EntitySystem
comp.Owner = args.Mob;
EntityManager.AddComponent(args.Mob, comp);
}
+
+ // Add item required by the trait
+ if (traitPrototype.TraitGear != null)
+ {
+ if (!TryComp(args.Mob, out HandsComponent? handsComponent))
+ continue;
+
+ var coords = Transform(args.Mob).Coordinates;
+ var inhandEntity = EntityManager.SpawnEntity(traitPrototype.TraitGear, coords);
+ _sharedHandsSystem.TryPickup(args.Mob, inhandEntity, checkActionBlocker: false,
+ handsComp: handsComponent);
+ }
}
}
}
diff --git a/Content.Shared/Traits/TraitPrototype.cs b/Content.Shared/Traits/TraitPrototype.cs
index 74f7d5aaaa..10645d0eda 100644
--- a/Content.Shared/Traits/TraitPrototype.cs
+++ b/Content.Shared/Traits/TraitPrototype.cs
@@ -1,5 +1,6 @@
using Content.Shared.Whitelist;
using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using static Robust.Shared.Prototypes.EntityPrototype; // don't worry about it
namespace Content.Shared.Traits
@@ -43,5 +44,11 @@ namespace Content.Shared.Traits
///
[DataField("components")]
public ComponentRegistry Components { get; } = default!;
+
+ ///
+ /// Gear that is given to the player, when they pick this trait.
+ ///
+ [DataField("traitGear", required: false, customTypeSerializer:typeof(PrototypeIdSerializer))]
+ public string TraitGear = string.Empty;
}
}
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml
new file mode 100644
index 0000000000..f38c714c65
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml
@@ -0,0 +1,24 @@
+- type: entity
+ parent: BaseItem
+ id: WhiteCane
+ name: white cane
+ description: This isn't for you. It's for the people who can't figure out you're blind when you ask if cargo is the bar.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Melee/white_cane.rsi
+ state: icon
+ - type: Item
+ size: 15
+ sprite: Objects/Weapons/Melee/white_cane.rsi
+ - type: MeleeWeapon
+ damage:
+ types:
+ Blunt: 5
+ - type: StaminaDamageOnHit
+ damage: 5
+ - type: Wieldable
+ - type: IncreaseDamageOnWield
+ damage:
+ types:
+ Blunt: 3
+
\ No newline at end of file
diff --git a/Resources/Prototypes/Traits/disabilities.yml b/Resources/Prototypes/Traits/disabilities.yml
index c6deeff61f..d6de5161a2 100644
--- a/Resources/Prototypes/Traits/disabilities.yml
+++ b/Resources/Prototypes/Traits/disabilities.yml
@@ -2,6 +2,7 @@
id: Blindness
name: trait-blindness-name
description: trait-blindness-desc
+ traitGear: WhiteCane
whitelist:
components:
- Blindable
diff --git a/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb82a60e0aa12f397da4e2835bf50c34bf32f1c0
GIT binary patch
literal 665
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
z
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
gf9pRT003Z*ZvyWG3ry_BF8}}l07*qoM6N<$f
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