Speech Components are now Multilingual (#4018)

## About The Pull Request
You can now define a language for speech components to output in. They
are no longer limited to just outputting strings in Galactic Common.
This does not give access to ALL languages, for example Codespeak,
Cultspeak and Ashtongue, so you will still need to earn the privilege to
speak in those languages.
## Why It's Good For The Game
Many people complained that speech components could only output in
Galactic Common. This PR will make them happy.
Speech components are most often used for Universal Translator Circuits,
this PR will actually make them useful for such and allow for two way
communication between individuals if the circuit is made correctly.
## Proof Of Testing
It compiles and the valid languages were able to be observed while using
the speech component.
<details>
<summary>Screenshots/Videos</summary>


![image](https://github.com/user-attachments/assets/d68e0a9f-5dcb-48f4-b804-6753f545d480)


![image](https://github.com/user-attachments/assets/aab4e882-453a-4722-afbe-639cf05cbd0e)


![image](https://github.com/user-attachments/assets/de756797-900d-41b4-9194-cdd42a19dfae)


![image](https://github.com/user-attachments/assets/fe1ef8ab-c8eb-470e-8516-58c27696a9a6)


![image](https://github.com/user-attachments/assets/45e7b7ea-2cce-4b65-9359-177a3bd014ee)


</details>

## Changelog
🆑
add: Language Port to Speech Components
/🆑
## Acknowledgements
Thank you very much to Artur for helping me make the list which was a
pivotal part of this PR. I was tearing my hair out trying to make it.
They saved me much time and hair.
This commit is contained in:
Bombermansam
2025-06-16 16:44:19 -04:00
committed by GitHub
parent 702d7fb1e6
commit 6d4e2327a0
3 changed files with 47 additions and 9 deletions
@@ -9,8 +9,6 @@
category = "Action"
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
/// Spans to apply to the output message.
var/datum/port/input/color_input // BUBBER ADDITION
/// The message to send
var/datum/port/input/message
/// The quiet mode flag
@@ -24,7 +22,6 @@
. += create_ui_notice("Speech Cooldown: [DisplayTimeText(speech_cooldown)]", "orange", "stopwatch")
/obj/item/circuit_component/speech/populate_ports()
color_input = add_input_port("Color", PORT_TYPE_STRING, default = "Default") // BUBBER ADDITION
message = add_input_port("Message", PORT_TYPE_STRING, trigger = null)
quietmode = add_input_port("Quiet Mode", PORT_TYPE_NUMBER, default = 0)
@@ -35,12 +32,7 @@
if(TIMER_COOLDOWN_RUNNING(parent.shell, COOLDOWN_CIRCUIT_SPEECH))
return
// BUBBER ADDITION
if(!(color_input.value in GLOB.component_span_color_list))
color_input.set_value("Default", TRUE)
// BUBBER ADDITION END
if(message.value)
var/atom/movable/shell = parent.shell
shell.say(message.value, forced = "circuit speech | [parent.get_creator()]", message_range = quietmode.value > 0 ? WHISPER_RANGE : MESSAGE_RANGE, spans = list(GLOB.component_span_color_list[color_input.value])) // BUBBER EDIT
shell.say(message.value, forced = "circuit speech | [parent.get_creator()]", message_range = quietmode.value > 0 ? WHISPER_RANGE : MESSAGE_RANGE)
TIMER_COOLDOWN_START(shell, COOLDOWN_CIRCUIT_SPEECH, speech_cooldown)