Unicode support in drunken speech and whispers (#18616)

* fix(slur): use functions that support Unicode

Replaces Dreammaker's standard functions
with Unicode-enabled anlogs.

Fixes a problem with displaying Cyrillic
characters in drunk characters' words.

* refactor(mob_helpers): use switch in `slur` proc

* feature: unicode support in `whisper`

Allows you to use the Cyrillic alphabet
while whispering

* chore: add changelog for #18616

* style(whisper): add spaces to `capytext_char` call

Requested-by: FluffyGhoster
This commit is contained in:
SidVeld
2024-03-13 21:27:38 +00:00
committed by GitHub
parent 29f616a5b1
commit 9d032e1c9c
3 changed files with 71 additions and 23 deletions
+2 -2
View File
@@ -28,11 +28,11 @@
if(!had_speaking)
if(speaking)
message = copytext(message,2+length(speaking.key))
message = copytext_char(message, 2 + length(speaking.key))
else
speaking = get_default_language()
if(length(message) >= 1 && copytext(message, 1, 2) == "%")
if(length_char(message) >= 1 && copytext_char(message, 1, 2) == "%")
if(speaking?.sing_verb)
is_singing = TRUE
+28 -21
View File
@@ -368,7 +368,7 @@ var/list/global/organ_rel_size = list(
p = 1
var/intag = 0
while(p <= n)
var/char = copytext(te, p, p + 1)
var/char = copytext_char(te, p, p + 1)
if (char == "<") //let's try to not break tags
intag = !intag
if (intag || char == " " || prob(pr))
@@ -382,28 +382,35 @@ var/list/global/organ_rel_size = list(
/proc/slur(phrase, strength = 100)
phrase = html_decode(phrase)
var/leng=length(phrase)
var/counter=length(phrase)
var/newphrase=""
var/newletter=""
while(counter>=1)
newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
if(prob(strength))
if(rand(1,3)==3)
if(lowertext(newletter)=="o") newletter="u"
if(lowertext(newletter)=="s") newletter="ch"
if(lowertext(newletter)=="a") newletter="ah"
if(lowertext(newletter)=="c") newletter="k"
switch(rand(1,15))
if(1,3,5,8)
newletter="[lowertext(newletter)]"
if(2,4,6,15)
newletter="[uppertext(newletter)]"
if(7)
newletter+="'"
var/leng = length_char(phrase)
var/counter = length_char(phrase)
var/newphrase = ""
var/newletter = ""
while (counter >= 1)
newletter = copytext_char(phrase, (leng - counter) + 1, (leng - counter) + 2)
if (prob(strength))
if (rand(1, 3) == 3)
switch (lowertext(newletter))
if ("o")
newletter = "u"
if ("s")
newletter = "ch"
if ("a")
newletter = "ah"
if ("c")
newletter = "k"
switch (rand(1, 15))
if (1, 3, 5, 8)
newletter = "[lowertext(newletter)]"
if (2, 4, 6, 15)
newletter = "[uppertext(newletter)]"
if (7)
newletter += "'"
else
. = null // For dreamchecker, does nothing
newphrase+="[newletter]";counter-=1
newphrase += "[newletter]"
counter -= 1
return newphrase
/proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 for p will cause letters to be replaced instead of added