Conversion of sign language

- Added visual languages
- Sign Language is now a visual language
- New visual languages can be added by adding 'vocal = 0' to the
language datum
- Visual languages can be used in a vacuum
- Visual languages can't be used on the radio
This commit is contained in:
SoundScopes
2014-07-10 23:42:56 +01:00
parent 6d39ce0ab5
commit ce1ca0b542
5 changed files with 105 additions and 7 deletions
+46
View File
@@ -160,3 +160,49 @@
heard = "<span class = 'game_say'>...<i>You almost hear someone talking</i>...</span>"
src << heard
/mob/proc/see_say(var/message, var/verb = "signs", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/signer = null)
if(!client)
return
if(sleeping || stat == 1)
return
var/style = "body"
if(!say_understands(signer,language))
if(istype(signer,/mob/living/simple_animal))
var/mob/living/simple_animal/S = signer
message = pick(S.speak)
else
message = stars(message)
if(language)
verb = language.speech_verb
style = language.colour
var/signer_name = signer.name
if(istype(signer, /mob/living/carbon/human))
var/mob/living/carbon/human/H = signer
signer_name = H.GetVoice()
if(italics)
message = "<i>[message]</i>"
var/track = null
if(istype(src, /mob/dead/observer))
if(italics && client.prefs.toggles & CHAT_GHOSTRADIO)
return
if(signer_name != signer.real_name && signer.real_name)
signer_name = "[signer.real_name] ([signer_name])"
track = "(<a href='byond://?src=\ref[src];track=\ref[signer]'>follow</a>) "
if(client.prefs.toggles & CHAT_GHOSTEARS && signer in view(src))
message = "<b>[message]</b>"
world << "[signer.name] / [signer_name] / [signer.real_name]"
if(sdisabilities & BLIND)
if(signer == src)
src << "<span class='warning'>You cannot see yourself sign!</span>"
else
if((signer_name != signer.name) || (istype(src.wear_mask, /obj/item/clothing/mask/gas)))
src << "<span class='game say'><span class='name'>[signer.name]</span>[track] [verb], <span class='message'><span class='[style]'>\"[message]\"</span></span></span>"
else
src << "<span class='game say'><span class='name'>[signer_name]</span>[alt_name]</span>[track] [verb], <span class='message'><span class='[style]'>\"[message]\"</span></span></span>"
+2
View File
@@ -10,6 +10,7 @@
var/key = "x" // Character used to speak in language eg. :o for Unathi.
var/flags = 0 // Various language flags.
var/native // If set, non-native speakers will have trouble speaking.
var/vocal = 1 // Is a spoken language
/datum/language/unathi
name = "Sinta'unathi"
@@ -87,6 +88,7 @@
speech_verb = "signs"
colour = "say_quote"
key = "4"
vocal = 0
// Language handling.
/mob/proc/add_language(var/language)
+9 -6
View File
@@ -22,7 +22,7 @@
if(name != GetVoice())
alt_name = "(as [get_id_name("Unknown")])"
//parse the radio code and consume it
var/message_mode = parse_message_mode(message)
if (message_mode)
@@ -30,13 +30,12 @@
message = copytext(message,2)
else
message = copytext(message,3)
//parse the language code and consume it
var/datum/language/speaking = parse_language(message)
if (speaking)
verb = speaking.speech_verb
message = copytext(message,3)
message = capitalize(trim(message))
if(speech_problem_flag)
@@ -54,8 +53,12 @@
if(ending=="?")
verb="asks"
var/list/obj/item/used_radios = new
if(speaking) //speaking = null if used through say without a language
if(!speaking.vocal)
sign(message, verb, speaking, alt_name, italics, message_range)
return
var/list/obj/item/used_radios = new
switch (message_mode)
if("headset")
if(l_ear && istype(l_ear,/obj/item/device/radio))
@@ -185,7 +188,7 @@
return special_voice
/*
/*
***Deprecated***
let this be handled at the hear_say or hear_radio proc
This is left in for robot speaking when humans gain binary channel access until I get around to rewriting
@@ -204,7 +207,7 @@
return verb
/mob/living/carbon/human/proc/handle_speech_problems(var/message)
+44
View File
@@ -138,3 +138,47 @@ var/list/department_radio_keys = list(
/mob/living/proc/GetVoice()
return name
/mob/living/sign(var/message, var/verb="signs", var/datum/language/speaking = null, var/alt_name="", var/italics=0, var/message_range = world.view)
var/turf/T = get_turf(src)
var/list/listening = list()
if(T)
var/list/objects = list()
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)
objects |= O
else if(istype(I, /obj/))
var/obj/O = I
hearturfs += O.locs[1]
objects |= 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
// Can object see signing?
// Only if they have cameras.
// Do any objects currently have cameras? -- SoundScopes
// for(var/obj/O in objects)
// spawn(0)
// if(O) //It's possible that it could be deleted in the meantime.
// O.hear_talk(src, message, verb, speaking)
for(var/mob/M in listening)
M.see_say(message,verb,speaking,alt_name, italics, src)
log_say("[name]/[key] : [message]")
+4 -1
View File
@@ -1,6 +1,9 @@
/mob/proc/say()
return
/mob/proc/sign()
return
/mob/verb/whisper()
set name = "Whisper"
set category = "IC"
@@ -157,7 +160,7 @@
if(length(message) >= 2)
var/channel_prefix = copytext(message, 1 ,3)
return department_radio_keys[channel_prefix]
return null
//parses the language code (e.g. :j) from text, such as that supplied to say.