mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
158 lines
5.9 KiB
Plaintext
158 lines
5.9 KiB
Plaintext
var/list/department_radio_keys = list(
|
|
":r" = "right ear", "#r" = "right ear", ".r" = "right ear",
|
|
":l" = "left ear", "#l" = "left ear", ".l" = "left ear",
|
|
":i" = "intercom", "#i" = "intercom", ".i" = "intercom",
|
|
":h" = "department", "#h" = "department", ".h" = "department",
|
|
":+" = "special", "#+" = "special", ".+" = "special", //activate radio-specific special functions
|
|
":c" = "Command", "#c" = "Command", ".c" = "Command",
|
|
":n" = "Science", "#n" = "Science", ".n" = "Science",
|
|
":m" = "Medical", "#m" = "Medical", ".m" = "Medical",
|
|
":e" = "Engineering", "#e" = "Engineering", ".e" = "Engineering",
|
|
":s" = "Security", "#s" = "Security", ".s" = "Security",
|
|
":w" = "whisper", "#w" = "whisper", ".w" = "whisper",
|
|
":t" = "Mercenary", "#t" = "Mercenary", ".t" = "Mercenary",
|
|
":u" = "Supply", "#u" = "Supply", ".u" = "Supply",
|
|
":v" = "Service", "#v" = "Service", ".v" = "Service",
|
|
":p" = "AI Private", "#p" = "AI Private", ".p" = "AI Private",
|
|
|
|
":R" = "right ear", "#R" = "right ear", ".R" = "right ear",
|
|
":L" = "left ear", "#L" = "left ear", ".L" = "left ear",
|
|
":I" = "intercom", "#I" = "intercom", ".I" = "intercom",
|
|
":H" = "department", "#H" = "department", ".H" = "department",
|
|
":C" = "Command", "#C" = "Command", ".C" = "Command",
|
|
":N" = "Science", "#N" = "Science", ".N" = "Science",
|
|
":M" = "Medical", "#M" = "Medical", ".M" = "Medical",
|
|
":E" = "Engineering", "#E" = "Engineering", ".E" = "Engineering",
|
|
":S" = "Security", "#S" = "Security", ".S" = "Security",
|
|
":W" = "whisper", "#W" = "whisper", ".W" = "whisper",
|
|
":T" = "Mercenary", "#T" = "Mercenary", ".T" = "Mercenary",
|
|
":U" = "Supply", "#U" = "Supply", ".U" = "Supply",
|
|
":V" = "Service", "#V" = "Service", ".V" = "Service",
|
|
":P" = "AI Private", "#P" = "AI Private", ".P" = "AI Private",
|
|
|
|
//kinda localization -- rastaf0
|
|
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
|
":ê" = "right ear", "#ê" = "right ear", ".ê" = "right ear",
|
|
":ä" = "left ear", "#ä" = "left ear", ".ä" = "left ear",
|
|
":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom",
|
|
":ð" = "department", "#ð" = "department", ".ð" = "department",
|
|
":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command",
|
|
":ò" = "Science", "#ò" = "Science", ".ò" = "Science",
|
|
":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical",
|
|
":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering",
|
|
":û" = "Security", "#û" = "Security", ".û" = "Security",
|
|
":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper",
|
|
":å" = "Mercenary", "#å" = "Mercenary", ".å" = "Mercenary",
|
|
":é" = "Supply", "#é" = "Supply", ".é" = "Supply",
|
|
)
|
|
|
|
|
|
var/list/channel_to_radio_key = new
|
|
proc/get_radio_key_from_channel(var/channel)
|
|
var/key = channel_to_radio_key[channel]
|
|
if(!key)
|
|
for(var/radio_key in department_radio_keys)
|
|
if(department_radio_keys[radio_key] == channel)
|
|
key = radio_key
|
|
break
|
|
if(!key)
|
|
key = ""
|
|
channel_to_radio_key[channel] = key
|
|
|
|
return key
|
|
|
|
/mob/living/proc/binarycheck()
|
|
|
|
if (istype(src, /mob/living/silicon/pai))
|
|
return
|
|
|
|
if (!ishuman(src))
|
|
return
|
|
|
|
var/mob/living/carbon/human/H = src
|
|
if (H.l_ear || H.r_ear)
|
|
var/obj/item/device/radio/headset/dongle
|
|
if(istype(H.l_ear,/obj/item/device/radio/headset))
|
|
dongle = H.l_ear
|
|
else
|
|
dongle = H.r_ear
|
|
if(!istype(dongle)) return
|
|
if(dongle.translate_binary) return 1
|
|
|
|
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/italics=0, var/message_range = world.view, var/sound/speech_sound, var/sound_vol)
|
|
|
|
var/turf/T = get_turf(src)
|
|
|
|
//handle nonverbal and sign languages here
|
|
if (speaking)
|
|
if (speaking.flags & NONVERBAL)
|
|
if (prob(30))
|
|
src.custom_emote(1, "[pick(speaking.signlang_verb)].")
|
|
|
|
if (speaking.flags & SIGNLANG)
|
|
return say_signlang(message, pick(speaking.signlang_verb), speaking)
|
|
|
|
var/list/listening = list()
|
|
var/list/listening_obj = list()
|
|
|
|
if(T)
|
|
//make sure the air can transmit speech - speaker's side
|
|
var/datum/gas_mixture/environment = T.return_air()
|
|
var/pressure = (environment)? environment.return_pressure() : 0
|
|
if(pressure < SOUND_MINIMUM_PRESSURE)
|
|
message_range = 1
|
|
|
|
if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet
|
|
italics = 1
|
|
sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact
|
|
|
|
var/list/hear = hear(message_range, T)
|
|
var/list/hearturfs = list()
|
|
|
|
for(var/I in hear)
|
|
if(istype(I, /mob/))
|
|
var/mob/M = I
|
|
listening += M
|
|
hearturfs += M.locs[1]
|
|
for(var/obj/O in M.contents)
|
|
listening_obj |= O
|
|
else if(istype(I, /obj/))
|
|
var/obj/O = I
|
|
hearturfs += O.locs[1]
|
|
listening_obj |= O
|
|
|
|
|
|
for(var/mob/M in player_list)
|
|
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS))
|
|
listening |= M
|
|
continue
|
|
if(M.loc && M.locs[1] in hearturfs)
|
|
listening |= M
|
|
|
|
var/speech_bubble_test = say_test(message)
|
|
var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
|
|
spawn(30) del(speech_bubble)
|
|
|
|
for(var/mob/M in listening)
|
|
M << speech_bubble
|
|
M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol)
|
|
|
|
for(var/obj/O in listening_obj)
|
|
spawn(0)
|
|
if(O) //It's possible that it could be deleted in the meantime.
|
|
O.hear_talk(src, message, verb, speaking)
|
|
|
|
log_say("[name]/[key] : [message]")
|
|
return 1
|
|
|
|
/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language)
|
|
for (var/mob/O in viewers(src, null))
|
|
O.hear_signlang(message, verb, language, src)
|
|
return 1
|
|
|
|
/obj/effect/speech_bubble
|
|
var/mob/parent
|
|
|
|
/mob/living/proc/GetVoice()
|
|
return name
|