Dullahan fixes (#93365)

## About The Pull Request
Fixes up some of the blaring problems with the woefully unloved
dullahans, making them at least playable in time for halloween. List of
individual fixes in the changelog, but notable code changes include that
visible/audible messages can (currently exists for dullahan heads and
holopad projections) now be proxied, so that detached cameras can
optionally relay TTS, emotes, and other messages to the proper client.
## Why It's Good For The Game
Its spooky month!
## Changelog
🆑
fix: Dullahans spawn with their intended organs
fix: Dullahans can hear/see emotes
fix: Dullahan heads properly have preferences applied to them
fix: Dullahan heads no longer appear eyeless
fix: Dullahans can hear things from their head regardless of if their
body is nearby
fix: Dullahans can hear TTS messages
fix: Dullahans have a TTS voice
qol: Dullahans have a head in the character preview, for the sake of
easier customization
/🆑
This commit is contained in:
FlufflesTheDog
2025-10-29 00:20:58 +01:00
committed by GitHub
parent 6c247ffb57
commit 0f3d4596f3
10 changed files with 159 additions and 71 deletions
+6 -3
View File
@@ -105,7 +105,10 @@ SUBSYSTEM_DEF(tts)
return
var/channel = SSsounds.random_available_channel()
for(var/mob/listening_mob in listeners | SSmobs.dead_players_by_zlevel[turf_source.z])//observers always hear through walls
for(var/atom/movable/hearer in listeners | SSmobs.dead_players_by_zlevel[turf_source.z])//observers always hear through walls
var/mob/listening_mob = hearer.get_listening_mob()
if(isnull(listening_mob))
continue
if(QDELING(listening_mob))
stack_trace("TTS tried to play a sound to a deleted mob.")
continue
@@ -115,13 +118,13 @@ SUBSYSTEM_DEF(tts)
if(volume_modifier == 0 || (tts_pref == TTS_SOUND_OFF))
continue
var/sound_volume = ((listening_mob == target)? 60 : 85) + volume_offset
var/sound_volume = ((hearer == target)? 60 : 85) + volume_offset
sound_volume = sound_volume*volume_modifier
var/datum/language_holder/holder = listening_mob.get_language_holder()
var/audio_to_use = (tts_pref == TTS_SOUND_BLIPS) ? audio_blips : audio
if(!holder.has_language(language))
continue
if(get_dist(listening_mob, turf_source) <= range)
if(get_dist(hearer, turf_source) <= range)
listening_mob.playsound_local(
turf_source,
vol = sound_volume,