Skip to content

Commit

Permalink
feat(traits): add Sign Language trait
Browse files Browse the repository at this point in the history
  • Loading branch information
angelofallars committed Aug 5, 2024
1 parent 4a6ad8c commit 11e25e5
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using Content.Shared.Language;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;

namespace Content.Server.Traits.Assorted;

/// <summary>
/// Used for traits that modify entities' language knowledge.
/// </summary>
[RegisterComponent]
public sealed partial class LanguageKnowledgeModifierComponent : Component
{
/// <summary>
/// List of languages this entity will learn to speak.
/// </summary>
[DataField("speaks")]
public List<string> NewSpokenLanguages = new();

/// <summary>
/// List of languages this entity will learn to understand.
/// </summary>
[DataField("understands")]
public List<string> NewUnderstoodLanguages = new();
}
35 changes: 35 additions & 0 deletions Content.Server/Traits/Assorted/LanguageKnowledgeModifierSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System.Linq;
using Content.Shared.Language;
using Content.Shared.Language.Components;

namespace Content.Server.Traits.Assorted;

public sealed class LanguageKnowledgeModifierSystem : EntitySystem
{
[Dependency] private readonly LanguageSystem _languages = default!;

public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<LanguageKnowledgeModifierComponent, ComponentInit>(OnStartup);
}

private void OnStartup(Entity<LanguageKnowledgeModifierComponent> entity, ref ComponentInit args)
{
if (!TryComp<LanguageKnowledgeComponent>(entity, out var knowledge))
{
Log.Warning($"Entity {entity.Owner} does not have a LanguageKnowledge but has a LanguageKnowledgeModifier!");
return;
}

for (var spokenLanguage in entity.Comp.NewSpokenLanguages)
{
_languages.AddLanguage(entity, spokenLanguage, true, false, knowledge);
}

for (var understoodLanguage in entity.Comp.NewUnderstoodLanguages)
{
_languages.AddLanguage(entity, understoodLanguage, false, true, knowledge);
}
}
}
5 changes: 5 additions & 0 deletions Resources/Locale/en-US/traits/traits.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,8 @@ trait-name-Voracious = Voracious
trait-description-Voracious =
Nothing gets between you and your food.
Your endless consumption of food and drinks is twice as fast.
trait-name-SignLanguage = Sign Language
trait-description-SignLanguage =
You can understand and use sign language, allowing for visual communication.
Being mute for any reason still allows you to communicate with sign language.
11 changes: 11 additions & 0 deletions Resources/Prototypes/Traits/skills.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,14 @@
- type: ConsumeDelayModifier
foodDelayMultiplier: 0.5
drinkDelayMultiplier: 0.5

- type: trait
id: SignLanguage
category: Visual
points: -1
components:
- type: LanguageKnowledgeModifier
speaks:
- Sign
understands:
- Sign

0 comments on commit 11e25e5

Please sign in to comment.