Files
Bombermansam 6d4e2327a0 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.
2025-06-16 13:44:19 -07:00

39 lines
1.3 KiB
Plaintext

/**
* # Speech Component
*
* Sends a message. Requires a shell.
*/
/obj/item/circuit_component/speech
display_name = "Speech"
desc = "A component that sends a message. Requires a shell."
category = "Action"
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
/// The message to send
var/datum/port/input/message
/// The quiet mode flag
var/datum/port/input/quietmode
/// The cooldown for this component of how often it can send speech messages.
var/speech_cooldown = 1 SECONDS
/obj/item/circuit_component/speech/get_ui_notices()
. = ..()
. += create_ui_notice("Speech Cooldown: [DisplayTimeText(speech_cooldown)]", "orange", "stopwatch")
/obj/item/circuit_component/speech/populate_ports()
message = add_input_port("Message", PORT_TYPE_STRING, trigger = null)
quietmode = add_input_port("Quiet Mode", PORT_TYPE_NUMBER, default = 0)
/obj/item/circuit_component/speech/input_received(datum/port/input/port)
if(!parent.shell)
return
if(TIMER_COOLDOWN_RUNNING(parent.shell, COOLDOWN_CIRCUIT_SPEECH))
return
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)
TIMER_COOLDOWN_START(shell, COOLDOWN_CIRCUIT_SPEECH, speech_cooldown)