# Description
Due to some inherent limitations of maintenance, code review, and me
having both severely crippling ADHD and a lifelong adderal dependency,
I've made the executive decision to break apart the Psionic Refactor
into a multitude of smaller, bite sized PRs. I'm keeping the original
Psionic Refactor PR open, because I'm going to need it for code
reference to keep track of the changes I had originally worked on, but I
need to essentially restart the entire refactor from scratch, and
approach it from a new angle that's going to make everything actually
way easier. I also need to be able to work on each available system
individually wherever possible, and this fact is most readily shown by
how the Lightning Refactor and Oracle Refactor were both done
separately.
To start off, this PR is ONLY moving all of the relevant psionics code
to core folders, and nothing more. I'm doing this first so that I can
immediately cut down massively on the "Files Changed" with the simplest,
most basic change necessary to start my work.
No changelog because this isn't player facing, and no media because
there's literally nothing to show.
# Description
Fixes:
- Whisper not undergoing readability obfuscation when out of range
- Handheld translators ignoring language knowledge requirements
- Several animals not having defined languages
- Computers not having languages (this primarily affects the RnD console
and in the future the cargo request console which send radio messages)
- Some languages lacking brightness and thus being hard to read
Also makes language colors from language markers use alpha blending
instead of overriding the original color. The change is subtle, kinda
hard to make it noticable without defeating the original purpose...
<details><summary><h1>Media</h1></summary><p>
Example of the new colors

</p></details>
---
# Changelog
🆑
- fix: Whisper can no longer be heard clearly outside the intended
range.
- fix: Translators can no longer be used without knowing the languages
they require.
- fix: Computers (primarily RnD console) now speak GC by default instead
of Universal.
- tweak: Readjusted colors of all languages to make them easier to read.
# Description
This refactors #510 and #553. #553 specifically was reverted and
re-implemented from scratch. As a consequence to all of this, the chat
system was refactored a bit too, hopefully for the best.
Changes:
- InGameICChatType, InGameOOCChatType, ChatTransmitRange were all moved
to shared and made serializable
- Added a method to wrap whisper messages to reduce code duplication in
chat system
- Both WrapPublicMethod and WrapWhisperMessage call the same generic
WrapMessage method, which allows to add speech verbs to whispers and
more. That method is also fully responsible for adding language markers
and deducing speech verbs now.
- Everything related to speech was moved out of LanguagePrototype and
into SpeechOverrideInfo. LanguagePrototype now holds an instance of
that.
- Added AllowRadio, RequireSpeech, ChatTypeOverride,
SpeechVerbOverrides, MessageWrapOverrides to SpeechOverrideInfo, all of
which are used in implementing the sign language.
- Suffered a lot
# TODO
- [X] Cry
- [X] Fix the sign language not displaying properly over the character.
- [X] Find a way to circumvent being unable to speak??
<details><summary><h1>Media</h1></summary><p>

See below
</p></details>
# Changelog
No cl no fun
---------
Signed-off-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>
Co-authored-by: Danger Revolution! <142105406+DangerRevolution@users.noreply.github.com>
# Description
https://github.com/Simple-Station/Einstein-Engines/pull/574 introduced a
bug whereby people who are each on separate grids, but the grids were
attached, could not talk to each other. I have corrected this by making
it so that when the Cross-Grid check is handled, it also checks to see
if the two different grids are JOINTed to each other. Therefore allowing
sound to travel across the connection. This should also work from
Shuttle To Planet, since it's also handled via the same system. This
means that docked shuttles allow sound to travel across to the docked
station(or other shuttle), as well as shuttles docked to a planet's
surface will permit sound to travel to the planet.
# Changelog
🆑
- fix: Fixed a bug where sound was not traveling over a Shuttle-Docking
connection. Attached grids now permit sound to travel through.
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
# Description
This fixes a bug that has been present in the game for ages, that people
can talk to each other in the cold vacuum of space without the aid of a
radio. I figured out that this doesn't actually need me to make my
"SpaceAudioSystem" just yet, and can be handled with an extremely easy
check of the voice source's Transform. Simply put, if they're not
touching any grid, their voice can't be heard. Additionally, if a
speaker is standing on a different grid from a potential receiver, their
voice cannot be heard since the two are on different grids. Effectively,
all verbal communication MUST be done through a radio if anyone involved
is in space, or on a different grid. Voice can no longer travel between
grids.
Sound should not travel through the vacuum of space. Use a radio to
communicate, or physically grab them, and hug them to within 3/10th of a
tile. This extremely small distance allotment is there to simulate
characters "Grabbing" each other in space to enable direct speaking
communication.
This also means that in space, you can have a completely private
conversation with someone by hugging them. Nukies would be able to
discuss their attack plans while in the shadow of a station, without
fear of being overheard by crew in defiance of really basic physics.
**I am coming for general audio next. We will restore the rule of
physics and sanity to this game**
# Media
https://github.com/user-attachments/assets/16f107f5-86ab-480b-85df-92b79632e3c1
# Changelog
🆑
- add: Voice will no longer travel through space. If you are in space,
you must either have a radio to communicate with others, or get within
hugging distance of someone to talk.
<!--
This is a semi-strict format, you can add/remove sections as needed but
the order/format should be kept the same
Remove these comments before submitting
-->
# Description
<!--
Explain this PR in as much detail as applicable
Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->
Gives a new way to speak, Sign Languages using the Language system by
only adding a nullable variable.
Sign Language uses the default Emote system, meaning its will not get
picked up by Radio or others devices or get blocked by accents.
When a Sign Language is on, "Say/Whisper" will talk in Sign Language,
Emote will still act like normal emotes.
The Glorious Sign Language has arrived... and there can be more then
one!
---
<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very large at times, so this is a good way
to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->
<details><summary><h1>Media</h1></summary>
<p>


</p>
</details>
---
# Changelog
<!--
You can add an author after the `🆑` to change the name that appears
in the changelog (ex: `🆑 Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->
🆑 FoxxoTrystan
- add: Added the ability to speak with Sign Language.
<!--
This is a semi-strict format, you can add/remove sections as needed but
the order/format should be kept the same
Remove these comments before submitting
-->
# Description
<!--
Explain this PR in as much detail as applicable
Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->
Require #459
Add 3 optional settings for LanguagePrototypes to play with richtext
tags to they could be reconized as Makings
color - Set a specefic color to the text.
fontId - Set a font to the text by using the Id.
fontSize - Set the size of the text
All 3 are optional if not set message will be handeled like normal.
This should be mostly used to know what language your currently speaking
and assist with markings.
Take note those changes happent only in the TextBox chat, bubblechat is
left unchanged.
---
# TODO
<!--
A list of everything you have to do before this PR is "complete"
You probably won't have to complete everything before merging but it's
good to leave future references
-->
- [x] Add Markings
- [x] Add Fonts
---
<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very large at times, so this is a good way
to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->
<details><summary><h1>Media</h1></summary>
<p>


</p>
</details>
---
# Changelog
<!--
You can add an author after the `🆑` to change the name that appears
in the changelog (ex: `🆑 Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->
🆑 FoxxoTrystan
- add: Languages are now marked in the chat!
---------
Signed-off-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>
Signed-off-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com>
Co-authored-by: fox <daytimer253@gmail.com>
Co-authored-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>
# Description
The language PR was merged early and OH GOD I ALREADY REGRET IT
This PR is intended to provide the missing refactors and address the
issues that were missed due to the early merge.
---
# TODO
- [X] Introduced a polymorphic obfuscation property to the
LanguagePrototype - now it supports more than just 2 hardcoded methods,
and each method can be configured per-language. Currently there are 3
obfuscation methods: replacement (same as replacement accent),
obuscation by syllables and obfuscation by phrases.
- [X] Refactored the existing obfuscation methods to not be a big
hardcoded mess.
- [X] Updated the existing languages accordingly: animalistic languages
are now less of an unreadable mess and include less syllables. Certain
languages like binary and snake seriously benefit from that.
- [X] Refactored the existing commands in response to the
never-addressed review (it got lost among hundreds of others)
- [X] Refactored the commands to be more user-friendly (you can now use
the number of the language in saylang and languageselect which can allow
using keybinds to switch between languages)
- [X] Moved a lot of obfuscation-related stuff from server to shared.
The actual obfuscation process, however, is still done on the server.
That may or may not be subject to change, too.
- [X] Refactored the entire process of resolution of entities'
languages. Instead of raising an event every time it's required to learn
what languages an entity knows, the lists of ALL languages available to
the entity (including via translators) is stored in
LanguageSpeakerComponent and only updated when necessary (e.g. when a
translator gets toggled). The list of languages the entity knows on its
own is now stored in LanguageKnowledgeComponent.
- [X] Made handheld translators automatically change your current
language when activated.
- [X] Rewrote the translator implanter system, now using the real
implants and implanters
- [ ] Rebalance science stuff (translators are incredibly expensive for
what they're worth)
- [ ] Uhhh stuff
---
<details><summary><h1>Media</h1></summary>
<p>
N/A for now
</p>
</details>
---
# Changelog
🆑
- tweak: Translator implants are now proper implants that can be
removed.
- tweak: Animalistic languages should now look less messy.
- fix: Hopefully fixed language menu desync and other issues.
---------
Signed-off-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>
* Use new Subs.CVar helper
Removes manual config OnValueChanged calls, removes need to remember to manually unsubscribe.
This both reduces boilerplate and fixes many issues where subscriptions weren't removed on entity system shutdown.
* Fix a bunch of warnings
* More warning fixes
* Use new DateTime serializer to get rid of ISerializationHooks in changelog code.
* Get rid of some more ISerializationHooks for enums
* And a little more
* Apply suggestions from code review
Co-authored-by: 0x6273 <0x40@keemail.me>
---------
Co-authored-by: 0x6273 <0x40@keemail.me>
(cherry picked from commit 68ce53ae17985876d6d112b764b2144964a9f42e)
* Adds option to disable character names in chat/speechbubbles
* Moved the coloring of names to clientside
* Move string functions to SharedChatSystem to avoid duplicate code in SpeechBubble.cs
* Changed to be put under Accessibility section
* Cache CVar
(cherry picked from commit 247be5b5c770261544f4e468ea09422efb0f7028)
* Ports colored chat names
* Update name color on every message
---------
Co-authored-by: ike709 <ike709@github.com>
(cherry picked from commit 6cbe4a8fb6d39745141e71233d386206c36a1e19)
* Implemented electricity speech verb masking
* Handle speech verb override elsewhere in the system, even though we're not using it
* Fix that protoId business
* No nullable component fields
* Use ProtoId, and try going back to a nullable.
Specifiy DataFields on VoiceMaskComponent.
(cherry picked from commit b4046bc2bb498bd525b8a40c7839a543c92ca18c)
A few bugs have popped up where (legal) string formatting tags
have been duplicated out into whisper and local.
Using the RemoveMarkup static we can sanitize attempted
speech to remove markup.
(cherry picked from commit 84f544ff103d038c33309494c4bbc4cd9698839a)
* Borgs can speak while crit, also radio bug fix
* Revert "Borgs can speak while crit, also radio bug fix"
This reverts commit e1136ad781229cf5fc3cadcf70742168fc73d961.
* Borgs can speak in crit + radio bug fix
* Tied to a new generic component on SpeechComponent
* Ignoring Speech Block via Component uses an event!
* Remove debug logs and bypass if already true
* added more slang to the sanitization manager
* idk why this file is here
* Added new sanitization accent
* No longer is an acccent, instead is a dictionary
* Reverted back to a system similar to before, added the new netspeak from the dictionary
* Added some new words to the chat san
* Added (wdym --> what do you mean) to the chatsan
* merge conflict
* removed boolvalue
* remove space
* Upcoming
* Added MF and ETC to chatsan :))
* upcoming
* added FYI and WYD to speech-chatsan.ftl
* Made the chatsan accent string a const string with [ValidatePrototypeId<AccentPrototype>]
* forgot the ';' :(((
* fixed error throw [AccentPrototype] --> [ReplacementAccentPrototype]
* Psionics
It's a ton of stuff relating to the basic Psionics system and all the powers.
I'm saving this as a bit of a sanity check before moving forward.
Left to do:
1. Implementing the Psionic faction so that the chat works as intended.
2. Adding the start-state cooldown timers to the actions.
* Cleaned up everything with the word 'Psionic' on it.
Got the psionic chat working. Got some other stuff working
* Some final psionic cleanup.
The last batch of content.
* Update RobustToolbox
* rebased
* Revert "Update RobustToolbox"
This reverts commit c0cf35d03f828f6ccfeb05fcffd91cf074818fc9.
* Update RobustToolbox
* Revert "Update RobustToolbox"
This reverts commit c4dc828df7912e063ea856b2a83a790bc88d1e09.
* Update RobustToolbox
* Psionics
It's a ton of stuff relating to the basic Psionics system and all the powers.
I'm saving this as a bit of a sanity check before moving forward.
Left to do:
1. Implementing the Psionic faction so that the chat works as intended.
2. Adding the start-state cooldown timers to the actions.
* Cleaned up everything with the word 'Psionic' on it.
Got the psionic chat working. Got some other stuff working
* Some final psionic cleanup.
The last batch of content.
* rebased
* Cleaned up everything with the word 'Psionic' on it.
Got the psionic chat working. Got some other stuff working
* Broken Commit
With these changes in place, the unit does not work. Recording them so i don't lose my work.
* Brings it All Together.
Dawn of the final Commit. Rebase completed.
* Update RobustToolbox
* Changed 'Station Events' to 'StationEvents' and cleaned up the Delta-V Events.yml file of duplicate events.
* Delete ghost_roles.yml
Duplicate.
* Update familiars.yml
* Update familiars.yml
* Update GlimmerReactiveSystem.cs
* Makes tinfoil hats craftable.
* Decided I'm not dealing with adding fugitives or Glimmer Wisps right now.
* Psionic invisibility won't work now that Eye component exists. Or at least, the integrator test won't psas.
* Update special.yml
* Added #nyanotrasen code or //Nyanotrasen code to many, many files.
* Properly fixes comments.
---------
Signed-off-by: Colin-Tel <113523727+Colin-Tel@users.noreply.github.com>
Signed-off-by: PHCodes <47927305+PHCodes@users.noreply.github.com>
Co-authored-by: Debug <sidneymaatman@gmail.com>
Co-authored-by: Colin-Tel <113523727+Colin-Tel@users.noreply.github.com>
* Added Gloves of North Star, no sprite or talking yet...
* Added sprites for the gloves of the north star...
* Replaced more placeholder sprites for northstar gloves...
* Added gloves of the north star to uplink...
* Added speech on hit, not yet configureable
* Not functional yet, but a step in the right direction I hope...
* IT WORKS!!
* Licensing and cleanup
* Reduced attack speed, changed from chat to popup, added some admin logging. It was causing too much adminlog spam otherwise
* Reorganized some files, final build??
* Changed the adminlog type from Verb to new type ItemConfigure
* More cleanup, fix sprite reference maybe
* Keronshb's suggestions, fixed some stuff, made hit sound use the meaty punch sfx
* Adds support for hiding speak/whisper/emote from adminlogs, makes northstar speak again!
* Some file shuffling, some of Keronshb's requests. Might appear a bit funky in github because vscode kept duplicating files for some reason and I had to delete them
* Made it work with the latest changes on Master
* Final? cleanup, upped dmg to 8, made ui not activate on activateinhand, instead you need to right click
* Set value to 0 credits, that's all
* Well that was much easier than I made it out to be. Now you can only activate the gloves with right click, no more mispredicts.
* Update MeleeWeaponSystem.cs
Iunno why this got changed in the first place, but I'm changin it back
* emptycommit
* emptycommit
* The tiny fixening
* MOTD
* Message of the Day
* Pretty sure the tests aren't me. Let's check.
* Update Content.Shared/CCVar/CCVars.cs
Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>
* command dependencies and moving MOTD to its own system
* Some doc comments
* Let's try those tests again
* More doc comments, most of the github reviews, and aliases for get-motd and set-motd
* Clear test MOTD
* Localized motd commands and completion hints
* Makes set-motd only show up in the alias command if the player has access to it.
---------
Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>