Skip to content

Commit

Permalink
Some Language Fixes (#1223)
Browse files Browse the repository at this point in the history
# Description
1. Adds languages to... penguins, cockroaches, snakes, mmis, pdas, mail
packages. Positronic brains now only speak/understand the borg language.
2. Adds an explicitly defined universal language to revenants and wisps
3. Makes polymorphs copy over a list of components defined in the
polymorph proto, thus copying languages and grammar of the original
entity to its polymorphed version.

<details><summary><h1>Media</h1></summary>
<p>


![image](https://github.com/user-attachments/assets/111c3f91-f077-431f-bcd9-f60fa7a1ba26)


![image](https://github.com/user-attachments/assets/80f939d3-b615-4235-a511-82238758788e)


![image](https://github.com/user-attachments/assets/dce99b55-c8b1-4cbe-8769-b82151b3d404)


![image](https://github.com/user-attachments/assets/6b9b962d-c73c-42b9-b240-aa07601de879)



</p>
</details>

# Changelog
:cl:
- tweak: Added languages to certain entities that lacked them, including
MMIs and positronic brains.
- add: Polymorphing into another entity now preserves your languages and
grammar.
  • Loading branch information
Mnemotechnician authored Nov 14, 2024
1 parent 3c31771 commit 387a362
Show file tree
Hide file tree
Showing 10 changed files with 70 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Content.Server/Chat/Systems/ChatSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ namespace Content.Server.Chat.Systems;

// Dear contributor. When I was introducing changes to this system only god and I knew what I was doing.
// Now only god knows. Please don't touch this code ever again. If you do have to, increment this counter as a warning for others:
// TOTAL_HOURS_WASTED_HERE_EE = 17
// TOTAL_HOURS_WASTED_HERE_EE = 18

// TODO refactor whatever active warzone this class and chatmanager have become
/// <summary>
Expand Down
15 changes: 15 additions & 0 deletions Content.Server/Polymorph/Systems/PolymorphSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
using Robust.Server.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Timing;
using Robust.Shared.Utility;

Expand All @@ -31,6 +32,7 @@ public sealed partial class PolymorphSystem : EntitySystem
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly ISerializationManager _serialization = default!;
[Dependency] private readonly ActionsSystem _actions = default!;
[Dependency] private readonly AudioSystem _audio = default!;
[Dependency] private readonly SharedBuckleSystem _buckle = default!;
Expand Down Expand Up @@ -201,6 +203,19 @@ private void OnDestruction(Entity<PolymorphedEntityComponent> ent, ref Destructi

var child = Spawn(configuration.Entity, _transform.GetMapCoordinates(uid, targetTransformComp), rotation: _transform.GetWorldRotation(uid));

// Copy specified components over
foreach (var compName in configuration.CopiedComponents)
{
if (!_compFact.TryGetRegistration(compName, out var reg)
|| !EntityManager.TryGetComponent(uid, reg.Idx, out var comp))
continue;

var copy = _serialization.CreateCopy(comp, notNullableOverride: true);
copy.Owner = child;
AddComp(child, copy, true);
}

// Ensure the resulting entity is sentient (why? this sucks)
MakeSentientCommand.MakeSentient(child, EntityManager);

var polymorphedComp = _compFact.GetComponent<PolymorphedEntityComponent>();
Expand Down
11 changes: 11 additions & 0 deletions Content.Shared/Polymorph/PolymorphPrototype.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,17 @@ public sealed partial record PolymorphConfiguration
[DataField(serverOnly: true)]
[ViewVariables(VVAccess.ReadWrite)]
public TimeSpan Cooldown = TimeSpan.Zero;

/// <summary>
/// The exact names of components to copy over when this polymorph is applied.
/// </summary>
[DataField(serverOnly: true)]
public HashSet<string> CopiedComponents = new()
{
"LanguageKnowledge",
"LanguageSpeaker",
"Grammar"
};
}

public enum PolymorphInventoryChange : byte
Expand Down
9 changes: 9 additions & 0 deletions Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,9 @@
behaviors:
- !type:GibBehavior { }
- type: NonSpreaderZombie
- type: LanguageKnowledge
speaks: [Hissing]
understands: [Hissing]

- type: entity
name: glockroach
Expand Down Expand Up @@ -2104,6 +2107,9 @@
- type: RandomBark
barkType: penguin
barkMultiplier: 0.6
- type: LanguageKnowledge
speaks: [Penguin]
understands: [Penguin]

- type: entity
name: grenade penguin
Expand Down Expand Up @@ -2224,6 +2230,9 @@
minTime: 10
maxTime: 50 # It's a sssnake...
barkType: hissing
- type: LanguageKnowledge
speaks: [Hissing]
understands: [Hissing]

# Code unique spider prototypes or combine them all into one spider and get a
# random sprite state when you spawn it.
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,6 @@
- type: NPCRetaliation
attackMemoryLength: 10
- type: NPCRangedCombat
# other
- type: LanguageSpeaker
- type: UniversalLanguageSpeaker # Should it speak unversal or some other language?
2 changes: 2 additions & 0 deletions Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,5 @@
powersToAdd:
- XenoglossyPower
- TelepathyPower
- type: LanguageSpeaker
- type: UniversalLanguageSpeaker
4 changes: 4 additions & 0 deletions Resources/Prototypes/Entities/Objects/Devices/pda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@
- DoorBumpOpener
- type: Input
context: "human"
- type: LanguageSpeaker
- type: LanguageKnowledge
speaks: [TauCetiBasic, RobotTalk]
understands: [TauCetiBasic, RobotTalk]

- type: entity
parent: BasePDA
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@
- type: GuideHelp
guides:
- Cyborgs
- type: LanguageSpeaker
- type: LanguageKnowledge
speaks: [TauCetiBasic, RobotTalk]
understands: [TauCetiBasic, RobotTalk]

- type: entity
parent: MMI
Expand Down Expand Up @@ -124,3 +128,7 @@
guides:
- Cyborgs
- type: Organ # Estacao Pirata - IPCs
- type: LanguageSpeaker
- type: LanguageKnowledge
speaks: [RobotTalk]
understands: [RobotTalk]
13 changes: 13 additions & 0 deletions Resources/Prototypes/Language/animal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -184,3 +184,16 @@
- iss
- ss
- is

- type: language
id: Penguin
obfuscation:
!type:SyllableObfuscation
minSyllables: 2
maxSyllables: 3
replacement: # I'm out of ideas
- pen
- peng
- won
- wonk
- wong
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@
reagents:
- ReagentId: Nothing
Quantity: 1
- type: LanguageSpeaker
- type: LanguageKnowledge
speaks: [TauCetiBasic] # So that them foreigners can't understand what the broken mail is saying
understands: []

# This empty parcel is allowed to exist and evade the tests for the admin
# mailto command.
Expand Down

0 comments on commit 387a362

Please sign in to comment.