From e858379cceb74e23c33a9e7a0efaef4382a81a19 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 23 Apr 2017 13:18:30 +0100 Subject: [PATCH 1/6] Language icons --- code/__DEFINES/language.dm | 2 ++ code/game/atoms_movable.dm | 4 ++-- code/game/say.dm | 9 +++++++-- code/modules/language/common.dm | 5 ++++- code/modules/language/drone.dm | 3 +++ code/modules/language/language.dm | 26 ++++++++++++++++++++++++++ code/modules/language/machine.dm | 3 +++ code/modules/language/monkey.dm | 3 +++ code/modules/language/ratvar.dm | 3 +++ code/modules/language/slime.dm | 3 +++ code/modules/language/swarmer.dm | 4 ++++ code/modules/language/xenocommon.dm | 3 +++ 12 files changed, 63 insertions(+), 5 deletions(-) diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm index 3f09f46817d..e7818d7bf32 100644 --- a/code/__DEFINES/language.dm +++ b/code/__DEFINES/language.dm @@ -1,2 +1,4 @@ #define NO_STUTTER 1 #define TONGUELESS_SPEECH 2 +#define LANGUAGE_HIDE_ICON_IF_UNDERSTOOD 4 +#define LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD 8 diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f96d6eb8a23..d66c4e3d1b2 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -121,7 +121,7 @@ if(flags & CLEAN_ON_MOVE) clean_on_move() - + var/datum/proximity_monitor/proximity_monitor = src.proximity_monitor if(proximity_monitor) proximity_monitor.HandleMove() @@ -628,4 +628,4 @@ /atom/movable/proc/ConveyorMove(movedir) set waitfor = FALSE if(!anchored && has_gravity()) - step(src, movedir) + step(src, movedir) diff --git a/code/game/say.dm b/code/game/say.dm index efad2f105fc..e99c1d96b05 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -59,7 +59,12 @@ GLOBAL_LIST_INIT(freqtospan, list( //Message var/messagepart = " [lang_treat(speaker, message_language, raw_message, spans, message_mode)]" - return "[spanpart1][spanpart2][freqpart][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][messagepart]" + var/languageicon = "" + var/datum/language/D = get_language_instance(message_language) + if(D.display_icon(src)) + languageicon = D.get_icon() + + return "[spanpart1][spanpart2][freqpart][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][languageicon][messagepart]" /atom/movable/proc/compose_track_href(atom/movable/speaker, message_langs, raw_message, radio_freq) return "" @@ -93,7 +98,7 @@ GLOBAL_LIST_INIT(freqtospan, list( return speaker.say_quote(raw_message, spans, message_mode) else if(language) var/atom/movable/AM = speaker.GetSource() - var/datum/language/D = new language + var/datum/language/D = get_language_instance(language) raw_message = D.scramble(raw_message) if(AM) return AM.say_quote(raw_message, spans, message_mode) diff --git a/code/modules/language/common.dm b/code/modules/language/common.dm index b6fb555729a..a54bab618dd 100644 --- a/code/modules/language/common.dm +++ b/code/modules/language/common.dm @@ -5,9 +5,12 @@ speech_verb = "says" whisper_verb = "whispers" key = "0" - flags = TONGUELESS_SPEECH + flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_UNDERSTOOD default_priority = 100 + icon = 'icons/obj/cardboard_cutout.dmi' + icon_state = "cutout_greytide" + //Syllable Lists /* This list really long, mainly because I can't make up my mind about which mandarin syllables should be removed, diff --git a/code/modules/language/drone.dm b/code/modules/language/drone.dm index 18f0ed3842c..841307489c4 100644 --- a/code/modules/language/drone.dm +++ b/code/modules/language/drone.dm @@ -12,3 +12,6 @@ space_chance = 0 sentence_chance = 0 default_priority = 20 + + icon = 'icons/mob/drone.dmi' + icon_state = "drone_repair" diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index 08d45a4a6a2..cf56a85b7ff 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -21,6 +21,22 @@ var/static/list/scramble_cache = list() var/default_priority = 0 // the language that an atom knows with the highest "default_priority" is selected by default. + var/icon + var/icon_state + +/datum/language/proc/display_icon(atom/movable/hearer) + if(isobserver(hearer)) + return TRUE + var/understands = hearer.has_language(src.type) + if(flags & LANGUAGE_HIDE_ICON_IF_UNDERSTOOD && understands) + return FALSE + if(flags & LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD && !understands) + return FALSE + return TRUE + +/datum/language/proc/get_icon() + return "" + /datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4, syllable_divisor=2) if(!syllables || !syllables.len) if(gender==FEMALE) @@ -93,3 +109,13 @@ return speech_verb #undef SCRAMBLE_CACHE_LEN + +/proc/get_language_instance(langtype) + if(!ispath(langtype, /datum/language)) + return + + if(!GLOB.language_datums[langtype]) + var/datum/language/langdatum = new langtype + GLOB.language_datums[langtype] = langdatum + + . = GLOB.language_datums[langtype] diff --git a/code/modules/language/machine.dm b/code/modules/language/machine.dm index 620e70d012b..bfbbe6bb8e9 100644 --- a/code/modules/language/machine.dm +++ b/code/modules/language/machine.dm @@ -11,6 +11,9 @@ space_chance = 10 default_priority = 90 + icon = 'icons/mob/robots.dmi' + icon_state = "robot_old" + /datum/language/machine/get_random_name() if(prob(70)) return "[pick(GLOB.posibrain_names)]-[rand(100, 999)]" diff --git a/code/modules/language/monkey.dm b/code/modules/language/monkey.dm index 3b6ee332f1d..0817689074c 100644 --- a/code/modules/language/monkey.dm +++ b/code/modules/language/monkey.dm @@ -9,3 +9,6 @@ space_chance = 100 syllables = list("oop", "aak", "chee", "eek") default_priority = 80 + + icon = 'icons/obj/hydroponics/harvest.dmi' + icon_state = "banana" diff --git a/code/modules/language/ratvar.dm b/code/modules/language/ratvar.dm index 2319b408892..bd0280d1bb0 100644 --- a/code/modules/language/ratvar.dm +++ b/code/modules/language/ratvar.dm @@ -8,5 +8,8 @@ default_priority = 10 spans = list(SPAN_ROBOT, "brass") + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "wall_gear" + /datum/language/ratvar/scramble(var/input) . = text2ratvar(input) diff --git a/code/modules/language/slime.dm b/code/modules/language/slime.dm index cc4c36e2ef7..c70902c14c8 100644 --- a/code/modules/language/slime.dm +++ b/code/modules/language/slime.dm @@ -8,3 +8,6 @@ key = "k" syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") default_priority = 70 + + icon = 'icons/mob/slimes.dmi' + icon_state = "grey adult slime" diff --git a/code/modules/language/swarmer.dm b/code/modules/language/swarmer.dm index b17cb88bf2a..a1145a123d6 100644 --- a/code/modules/language/swarmer.dm +++ b/code/modules/language/swarmer.dm @@ -10,6 +10,10 @@ space_chance = 100 sentence_chance = 0 default_priority = 60 + + icon = 'icons/mob/swarmer.dmi' + icon_state = "swarmer" + // since various flats and sharps are the same, // all non-accidental notes are doubled in the list /* The list with unicode symbols for the accents. diff --git a/code/modules/language/xenocommon.dm b/code/modules/language/xenocommon.dm index 263c3d0a9e0..fd53405d477 100644 --- a/code/modules/language/xenocommon.dm +++ b/code/modules/language/xenocommon.dm @@ -8,3 +8,6 @@ key = "4" syllables = list("sss","sSs","SSS") default_priority = 50 + + icon = 'icons/mob/alien.dmi' + icon_state = "alienq" From 2cc290e31ca14db79fc62835e63fca2fa53b06a6 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Tue, 25 Apr 2017 21:07:41 +0100 Subject: [PATCH 2/6] Uses WJohnston's new fantastic icons --- code/modules/language/common.dm | 3 +-- code/modules/language/drone.dm | 3 +-- code/modules/language/language.dm | 5 +++-- code/modules/language/machine.dm | 3 +-- code/modules/language/monkey.dm | 3 +-- code/modules/language/ratvar.dm | 3 +-- code/modules/language/slime.dm | 3 +-- code/modules/language/swarmer.dm | 1 - code/modules/language/xenocommon.dm | 3 +-- icons/misc/language.dmi | Bin 0 -> 1366 bytes 10 files changed, 10 insertions(+), 17 deletions(-) create mode 100644 icons/misc/language.dmi diff --git a/code/modules/language/common.dm b/code/modules/language/common.dm index a54bab618dd..c00ab328ec1 100644 --- a/code/modules/language/common.dm +++ b/code/modules/language/common.dm @@ -8,8 +8,7 @@ flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_UNDERSTOOD default_priority = 100 - icon = 'icons/obj/cardboard_cutout.dmi' - icon_state = "cutout_greytide" + icon_state = "galcom" //Syllable Lists /* diff --git a/code/modules/language/drone.dm b/code/modules/language/drone.dm index 841307489c4..253682d7e49 100644 --- a/code/modules/language/drone.dm +++ b/code/modules/language/drone.dm @@ -13,5 +13,4 @@ sentence_chance = 0 default_priority = 20 - icon = 'icons/mob/drone.dmi' - icon_state = "drone_repair" + icon_state = "drone" \ No newline at end of file diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index cf56a85b7ff..01bf268e01e 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -21,8 +21,9 @@ var/static/list/scramble_cache = list() var/default_priority = 0 // the language that an atom knows with the highest "default_priority" is selected by default. - var/icon - var/icon_state + // if you are seeing someone speak popcorn language, then something is wrong. + var/icon = 'icons/misc/language.dmi' + var/icon_state = "popcorn" /datum/language/proc/display_icon(atom/movable/hearer) if(isobserver(hearer)) diff --git a/code/modules/language/machine.dm b/code/modules/language/machine.dm index bfbbe6bb8e9..1241ce02510 100644 --- a/code/modules/language/machine.dm +++ b/code/modules/language/machine.dm @@ -11,8 +11,7 @@ space_chance = 10 default_priority = 90 - icon = 'icons/mob/robots.dmi' - icon_state = "robot_old" + icon_state = "eal" /datum/language/machine/get_random_name() if(prob(70)) diff --git a/code/modules/language/monkey.dm b/code/modules/language/monkey.dm index 0817689074c..bc1ff6a8e7b 100644 --- a/code/modules/language/monkey.dm +++ b/code/modules/language/monkey.dm @@ -10,5 +10,4 @@ syllables = list("oop", "aak", "chee", "eek") default_priority = 80 - icon = 'icons/obj/hydroponics/harvest.dmi' - icon_state = "banana" + icon_state = "animal" diff --git a/code/modules/language/ratvar.dm b/code/modules/language/ratvar.dm index bd0280d1bb0..51fc57f045e 100644 --- a/code/modules/language/ratvar.dm +++ b/code/modules/language/ratvar.dm @@ -8,8 +8,7 @@ default_priority = 10 spans = list(SPAN_ROBOT, "brass") - icon = 'icons/obj/clockwork_objects.dmi' - icon_state = "wall_gear" + icon_state = "ratvar" /datum/language/ratvar/scramble(var/input) . = text2ratvar(input) diff --git a/code/modules/language/slime.dm b/code/modules/language/slime.dm index c70902c14c8..f1398ef1ba2 100644 --- a/code/modules/language/slime.dm +++ b/code/modules/language/slime.dm @@ -9,5 +9,4 @@ syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") default_priority = 70 - icon = 'icons/mob/slimes.dmi' - icon_state = "grey adult slime" + icon_state = "slime" diff --git a/code/modules/language/swarmer.dm b/code/modules/language/swarmer.dm index a1145a123d6..318c3f48f75 100644 --- a/code/modules/language/swarmer.dm +++ b/code/modules/language/swarmer.dm @@ -11,7 +11,6 @@ sentence_chance = 0 default_priority = 60 - icon = 'icons/mob/swarmer.dmi' icon_state = "swarmer" // since various flats and sharps are the same, diff --git a/code/modules/language/xenocommon.dm b/code/modules/language/xenocommon.dm index fd53405d477..790c56fd4e6 100644 --- a/code/modules/language/xenocommon.dm +++ b/code/modules/language/xenocommon.dm @@ -9,5 +9,4 @@ syllables = list("sss","sSs","SSS") default_priority = 50 - icon = 'icons/mob/alien.dmi' - icon_state = "alienq" + icon_state = "xeno" diff --git a/icons/misc/language.dmi b/icons/misc/language.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e3ad574d676bb7387788df1744c52f5cf4f8b26d GIT binary patch literal 1366 zcmV-c1*!UpP);OQk06Camm-z-hn*chQM~U?XJeX&l`v5nS zHFVoekNZi9^;?qiTa)unkNZP|?LdI(07kk1M797ztpGlz06d=-<^{$80004WQchC< zK<3zH0001{dQ@0+L}hbha%pgMX>V=-0C=2@(Xk4`Fc1ddIeCiE?xG-WF47_$>^mII z*#?tbxP;cnw_0$MbNhep<6o{em-gEArnz-`M$V3+Ih*5duhrsgnbvYRX*Ho6r?Qn? zpx_#-5&S@*(#kr{@0(V4hJaiCG6XN0Cq@zxL>K@MNS_h!DCjb;6xsKDS+g}I^aW?{qN z`YP3J$eo4b&`U(ER>P?!;M%T8K?oH9#B~QQO^>1Up51`)CjeD9Asmfh6#=&E+rDda z3#gPk0Gg<$2rX&NMWy040MKwN=t3_b1GJjWmgCUPQ69t!@`msG6&SwX0EAvZv_N0q zau~?bN}ycW5I&fIu!{aAfW6tly;f5MCU3Z|3mL%L0L1TrdcA%yz>*n&f1B39<~5K7 z#3pP8n>xVKG7ycREdUR)jZ$1iog?%ut%$|5q@4r3fYqva03b>)8=y{t4Q(tPBvA_v zz)o5vfEMaoI2a&(NJ3Fx_?T1ytIES)BMglnJwOasyB*?>f6{v)1JEBlA_#MR+k=S< zCqz*P;!s4a6OuOQfzVF4zSB93h8%61KB+C*6jbZ3}&$93_2D2r>H*Ytg2qjHDa_0Pya?P8y^;1IU9B z`o{>2e#~p=DS+pNQKzT$kV2M%fdOOydW#WaavX4wH`0UXapCX z@}IFa9tVdg%K8#vJPCqHFf~PtMw}o3lj+InBmm0flqtZ{0h80yGiQTy!FW18zYYL@ z(e=W`OP8-)y*8s^Y(c-je&gn?+j*YfxqI)v5r7pz-9C7j=W`hOY+;sxEF+Ici`~7w z-Nj<@_=zc?h?v34A?8nKYXEc~vpiqs%OzOIpBYLOf&rFGNMbpk<o=x=QPBcsFyCLjT^R#LS{r8X-hcSG|LOCWm6={6@cXadzW?~STAAs8 Y0sks&qdBeTF#rGn07*qoM6N<$f(e^{*#H0l literal 0 HcmV?d00001 From 3148ffa3a8718de653ef25450a40068075dd3dc8 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Tue, 25 Apr 2017 22:01:54 +0100 Subject: [PATCH 3/6] Removes language colours --- code/modules/language/drone.dm | 4 ++-- code/modules/language/machine.dm | 2 +- code/modules/language/monkey.dm | 1 - code/modules/language/ratvar.dm | 2 +- code/modules/language/slime.dm | 1 - code/modules/language/swarmer.dm | 2 +- code/modules/language/xenocommon.dm | 1 - 7 files changed, 5 insertions(+), 8 deletions(-) diff --git a/code/modules/language/drone.dm b/code/modules/language/drone.dm index 253682d7e49..390e0027cf8 100644 --- a/code/modules/language/drone.dm +++ b/code/modules/language/drone.dm @@ -4,7 +4,7 @@ speech_verb = "chitters" ask_verb = "chitters inquisitively" exclaim_verb = "chitters loudly" - spans = list(SPAN_ROBOT, "drone") + spans = list(SPAN_ROBOT) key = "d" flags = NO_STUTTER syllables = list(".", "|") @@ -13,4 +13,4 @@ sentence_chance = 0 default_priority = 20 - icon_state = "drone" \ No newline at end of file + icon_state = "drone" diff --git a/code/modules/language/machine.dm b/code/modules/language/machine.dm index 1241ce02510..4d88bcb4160 100644 --- a/code/modules/language/machine.dm +++ b/code/modules/language/machine.dm @@ -4,7 +4,7 @@ speech_verb = "whistles" ask_verb = "chirps" exclaim_verb = "whistles loudly" - spans = list(SPAN_ROBOT, "changeling") + spans = list(SPAN_ROBOT) key = "6" flags = NO_STUTTER syllables = list("beep","beep","beep","beep","beep","boop","boop","boop","bop","bop","dee","dee","doo","doo","hiss","hss","buzz","buzz","bzz","ksssh","keey","wurr","wahh","tzzz") diff --git a/code/modules/language/monkey.dm b/code/modules/language/monkey.dm index bc1ff6a8e7b..3f19008754b 100644 --- a/code/modules/language/monkey.dm +++ b/code/modules/language/monkey.dm @@ -4,7 +4,6 @@ speech_verb = "chimpers" ask_verb = "chimpers" exclaim_verb = "screeches" - spans = list("monkey") key = "1" space_chance = 100 syllables = list("oop", "aak", "chee", "eek") diff --git a/code/modules/language/ratvar.dm b/code/modules/language/ratvar.dm index 51fc57f045e..cef4a3164ec 100644 --- a/code/modules/language/ratvar.dm +++ b/code/modules/language/ratvar.dm @@ -6,7 +6,7 @@ exclaim_verb = "clanks" key = "r" default_priority = 10 - spans = list(SPAN_ROBOT, "brass") + spans = list(SPAN_ROBOT) icon_state = "ratvar" diff --git a/code/modules/language/slime.dm b/code/modules/language/slime.dm index f1398ef1ba2..7171c07b391 100644 --- a/code/modules/language/slime.dm +++ b/code/modules/language/slime.dm @@ -4,7 +4,6 @@ speech_verb = "warbles" ask_verb = "warbles" exclaim_verb = "warbles" - spans = list("slime") key = "k" syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") default_priority = 70 diff --git a/code/modules/language/swarmer.dm b/code/modules/language/swarmer.dm index 318c3f48f75..e3b78267060 100644 --- a/code/modules/language/swarmer.dm +++ b/code/modules/language/swarmer.dm @@ -4,7 +4,7 @@ speech_verb = "tones" ask_verb = "tones inquisitively" exclaim_verb = "tones loudly" - spans = list(SPAN_ROBOT, "swarmer") + spans = list(SPAN_ROBOT) key = "s" flags = NO_STUTTER space_chance = 100 diff --git a/code/modules/language/xenocommon.dm b/code/modules/language/xenocommon.dm index 790c56fd4e6..6684ab31f85 100644 --- a/code/modules/language/xenocommon.dm +++ b/code/modules/language/xenocommon.dm @@ -4,7 +4,6 @@ speech_verb = "hisses" ask_verb = "hisses" exclaim_verb = "hisses" - spans = list("alien") key = "4" syllables = list("sss","sSs","SSS") default_priority = 50 From 509a02816430c1b98eea12b366e4088d7645dda5 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 27 Apr 2017 09:51:59 +0100 Subject: [PATCH 4/6] Say_mod proc, language icons working --- code/game/machinery/requests_console.dm | 8 ++-- code/game/say.dm | 41 ++++++++++++------- code/modules/mob/living/carbon/human/say.dm | 11 +++-- code/modules/mob/living/say.dm | 21 +++++----- .../mob/living/simple_animal/simple_animal.dm | 4 +- 5 files changed, 48 insertions(+), 37 deletions(-) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 0ab08814a0c..02cdbc88c48 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -439,12 +439,12 @@ GLOBAL_LIST_EMPTY(allConsoles) updateUsrDialog() return -/obj/machinery/requests_console/say_quote(input, list/spans, message_mode) +/obj/machinery/requests_console/say_mod(input, message_mode) var/ending = copytext(input, length(input) - 2) if (ending == "!!!") - return "blares, \"[attach_spans(input, spans)]\"" - - return ..() + . = "blares" + else + . = ..() /obj/machinery/requests_console/proc/clear_emergency() emergency = null diff --git a/code/game/say.dm b/code/game/say.dm index e99c1d96b05..577eddd293f 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -56,15 +56,24 @@ GLOBAL_LIST_INIT(freqtospan, list( var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]" //End name span. var/endspanpart = "" + // Saymod + var/atom/movable/AM = speaker.GetSource() + + var/saymod + if(AM) + saymod = AM.say_mod(raw_message, message_mode) + else + saymod = speaker.say_mod(raw_message, message_mode) + //Message - var/messagepart = " [lang_treat(speaker, message_language, raw_message, spans, message_mode)]" + var/messagepart = " \"[lang_treat(speaker, message_language, raw_message, spans, message_mode)]\"" var/languageicon = "" var/datum/language/D = get_language_instance(message_language) if(D.display_icon(src)) - languageicon = D.get_icon() + languageicon = " [D.get_icon()]" - return "[spanpart1][spanpart2][freqpart][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][languageicon][messagepart]" + return "[spanpart1][spanpart2][freqpart][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart] [saymod][languageicon],[messagepart]" /atom/movable/proc/compose_track_href(atom/movable/speaker, message_langs, raw_message, radio_freq) return "" @@ -72,20 +81,24 @@ GLOBAL_LIST_INIT(freqtospan, list( /atom/movable/proc/compose_job(atom/movable/speaker, message_langs, raw_message, radio_freq) return "" -/atom/movable/proc/say_quote(input, list/spans=list(), message_mode) - if(!input) - return "says, \"...\"" //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code +/atom/movable/proc/say_mod(input, message_mode) var/ending = copytext(input, length(input)) if(copytext(input, length(input) - 1) == "!!") - spans |= SPAN_YELL - return "[verb_yell], \"[attach_spans(input, spans)]\"" - input = attach_spans(input, spans) - if(ending == "?") - return "[verb_ask], \"[input]\"" - if(ending == "!") - return "[verb_exclaim], \"[input]\"" + return verb_yell + else if(ending == "?") + return verb_ask + else if(ending == "!") + return verb_exclaim + else + return verb_say - return "[verb_say], \"[input]\"" +/atom/movable/proc/say_quote(input, list/spans=list(), message_mode) + if(!input) + return "..." + + if(copytext(input, length(input) - 1) == "!!") + spans |= SPAN_YELL + return attach_spans(input, spans) /atom/movable/proc/lang_treat(atom/movable/speaker, datum/language/language, raw_message, list/spans, message_mode) if(has_language(language)) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index cb564e1b307..a4e733d5b25 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -1,10 +1,9 @@ -/mob/living/carbon/human/say_quote(input, spans, message_mode) +/mob/living/carbon/human/say_mod(input, message_mode) verb_say = dna.species.say_mod - . = ..() - if(src.slurring) - input = attach_spans(input, spans) - return "slurs, \"[input]\"" - + if(slurring) + return "slurs" + else + . = ..() /mob/living/carbon/human/treat_message(message) message = dna.species.handle_speech(message,src) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4818a58dad4..dd089d3ce9c 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -423,18 +423,17 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return 3 return 0 -/mob/living/say_quote(input, list/spans, message_mode) - var/tempinput = attach_spans(input, spans) +/mob/living/say_mod(input, message_mode) if(message_mode == MODE_WHISPER) - return "[verb_whisper], \"[tempinput]\"" - if(message_mode == MODE_WHISPER_CRIT) - return "[verb_whisper] in [p_their()] last breath, \"[tempinput]\"" - if (stuttering) - return "stammers, \"[tempinput]\"" - if (getBrainLoss() >= 60) - return "gibbers, \"[tempinput]\"" - - return ..() + . = verb_whisper + else if(message_mode == MODE_WHISPER_CRIT) + . = "[verb_whisper] in [p_their()] last breath" + else if(stuttering) + . = "stammers" + else if(getBrainLoss() >= 60) + . = "gibbers" + else + . = ..() /mob/living/get_default_language() if(selected_default_language) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index d87573edd3f..99781ec69dd 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -251,10 +251,10 @@ if(icon_gib) new /obj/effect/overlay/temp/gib_animation/animal(loc, icon_gib) -/mob/living/simple_animal/say_quote(input, list/spans) +/mob/living/simple_animal/say_mod(input, message_mode) if(speak_emote && speak_emote.len) verb_say = pick(speak_emote) - return ..() + . = ..() /mob/living/simple_animal/emote(act, m_type=1, message = null) if(stat) From 99abdf50880b75be3cad35e9b1ef29d1c9d15de6 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 27 Apr 2017 19:11:43 +0100 Subject: [PATCH 5/6] Fixes a number of bugs --- code/game/say.dm | 22 +++++++--------------- code/modules/language/language.dm | 2 -- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/code/game/say.dm b/code/game/say.dm index 577eddd293f..deab83ad101 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -56,24 +56,16 @@ GLOBAL_LIST_INIT(freqtospan, list( var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]" //End name span. var/endspanpart = "" - // Saymod - var/atom/movable/AM = speaker.GetSource() - - var/saymod - if(AM) - saymod = AM.say_mod(raw_message, message_mode) - else - saymod = speaker.say_mod(raw_message, message_mode) //Message - var/messagepart = " \"[lang_treat(speaker, message_language, raw_message, spans, message_mode)]\"" + var/messagepart = " [lang_treat(speaker, message_language, raw_message, spans)]" var/languageicon = "" var/datum/language/D = get_language_instance(message_language) if(D.display_icon(src)) - languageicon = " [D.get_icon()]" + languageicon = "[D.get_icon()] " - return "[spanpart1][spanpart2][freqpart][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart] [saymod][languageicon],[messagepart]" + return "[spanpart1][spanpart2][freqpart][languageicon][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][messagepart]" /atom/movable/proc/compose_track_href(atom/movable/speaker, message_langs, raw_message, radio_freq) return "" @@ -94,18 +86,18 @@ GLOBAL_LIST_INIT(freqtospan, list( /atom/movable/proc/say_quote(input, list/spans=list(), message_mode) if(!input) - return "..." + input = "..." if(copytext(input, length(input) - 1) == "!!") spans |= SPAN_YELL - return attach_spans(input, spans) + + var/spanned = attach_spans(input, spans) + return "[say_mod(input, message_mode)], \"[spanned]\"" /atom/movable/proc/lang_treat(atom/movable/speaker, datum/language/language, raw_message, list/spans, message_mode) if(has_language(language)) var/atom/movable/AM = speaker.GetSource() if(AM) //Basically means "if the speaker is virtual" - if(AM.verb_say != speaker.verb_say || AM.verb_ask != speaker.verb_ask || AM.verb_exclaim != speaker.verb_exclaim || AM.verb_yell != speaker.verb_yell) //If the saymod was changed - return speaker.say_quote(raw_message, spans, message_mode) return AM.say_quote(raw_message, spans, message_mode) else return speaker.say_quote(raw_message, spans, message_mode) diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index 01bf268e01e..f01eb2c7006 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -26,8 +26,6 @@ var/icon_state = "popcorn" /datum/language/proc/display_icon(atom/movable/hearer) - if(isobserver(hearer)) - return TRUE var/understands = hearer.has_language(src.type) if(flags & LANGUAGE_HIDE_ICON_IF_UNDERSTOOD && understands) return FALSE From 13d7b017c088c5a789db972c3fd03a60a61f6c0c Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 27 Apr 2017 19:44:49 +0100 Subject: [PATCH 6/6] Updates language icons --- icons/misc/language.dmi | Bin 1366 -> 1455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/misc/language.dmi b/icons/misc/language.dmi index e3ad574d676bb7387788df1744c52f5cf4f8b26d..e961c351912a5b8dcf5d2f12ab5a08b5fdd0c5b5 100644 GIT binary patch delta 1206 zcmV;n1WEhW3a<;0EHgYN07SI_ELtV0e;W`72LJ#7dshI#Jw1gfDPu$cNEjI3-{1fL z|6l6?=zkIsgCw0d!JMQvg8b*k%9#0IZX30Vsdk zcQ~4}4JNsA39b0_Rts)&ZvW4H{L7W*QeT_SRBfYY|FRwKG$ z%v(trGOn>e@P$^^ae5!Lx-kUY^4B~tl87L>@W&QIo`FS{ybCC+1vsF*W|^YA)|16F zA>2hd(bN-1(GB2x3L^9F32c9{($s%l_4(}!vpb0e+>(Qg000AaNklUDge2nd{=B;rhHT2*=s~DEq!-@v9e^d$bA*<-mIVloZ976=ET8}^FD)%w7T+wD zgIrO6t~X60n8gB83jFoUmH=5=2{M35?oFyiotIM2KL?06TeLSCia<5A6~MO30E>%@ ziNyle#37RUWvz$`!1bby;uvW5Yc<(4 zK$JdjfYdw4f)@QC$y#Ip>ZCCTkOxT~Wk)~CML?d1Iz}p}1-AN_Q~_%$hr>eqoKFzV zCN4fttlv-Y5XaFAbq?^nRm6daRsmoX0g#_sB}D#^@B0OHtKG^O%6xwY@G`k1bhy65 z37t&eZmqF3&QK-LBG-4jT_UV^{0)B{v$HPsJ$9P)3WTN(ka7e7c=zUp@A?~?@F57j zGYq4b*P*E+yw$GK!$QYL0-JCEy&(uKc9ur5kj=aTT|GQXJgb2y0&9Eh9ER6s#vGyy z(DAh{kORirEw;v5ZN`5Lt@g5*UO~U*89tRxEJR^F#v4hy4ltwzO}<54aIw%7U4R7v zUA z_|<5a9E6AzNg#j75D_BMm!~jFl4&xXB8B8Nm&Z{Q!2#BoBOnh#aaE)+f*K~K<5BWP zI6(d(uY)LK9EWg`24P&T*BrckCw}2AfM@jxrBJRWz!+*cc>m#}6co+@2LuNK$iaAT z_Gy+2!h&EPI0yLr~OdW=c``7Vt5I)t`c4{Q4sO=kLGSOw-Q;(90_Qe;k~8 Uf1e{{YybcN07*qoM6N<$f=w+pm;e9( delta 1162 zcmV;51aY@y!fdAhSjOv-^h0BT%h0@ zs}cM_q0-7a&hML6cZPsl{xSqFnkPmQ5kwdM*kUL%u*kA^0cEuS2b9+=QRvX~RX zLzIcqKpcO$+O&Q1dD;tUe_DOv=cVY`0009cNkl{hz47;8BISq3vd2!{GWV z)osX~h2zjmM6FiCsU_gru1G-$6#&F_2QE#Iq4b{Jfbk~)RW~6Ve~n-j0k-SgzH4&} zsFXVZny9A;Eosd~rQ$XK&~Pj0LN6c#w3^M9farhVT0o7{1>CgkC_jKwsZ- z7|78|pj_AxKA3>8ivA^lz1hLNR#OBfZ@8`t8Nk{A#P5K5y?!vjk{N)1o7TbRHIN0w zCTs?qI>6F05RITMe*h1%jZ$1iog?%ut%$|5q@4r3fYqva03b>)8=y{t4Q(tPBvA_v zz)o5vfEMaoI2a&(NJ3Fx_?T1ytIES)BMglnJwOasyB*?>f6{v)1JEBlA_#MR+k=S< zCqz*P;!s4a6OuOQfzVF4zSB9w(Ljl`Yn6L5h` zi7*^u7XnytvMxXh3?LmO;wZC&0H=6}A&zsv9~8Sqv=s^13;kn?qIEt7-ix&!FU4pC z7oGB-u{9nChbYSW5@9?Ef=MtnMT|zAAOMr;$>}5jf6C;PDZtVJlhe~PXM=OWcsf46 z4gi1A^}@wVm#o=x=QPBcsFyCLjT^R#LS{r8X-hcSG|LOCWm6={6@cXadzW?~S cTAAs80sks&qdBeTF#rGn07*qoM6N<$f<`+fRsaA1