Cleans up auto-hiss, makes declaring new auto-hiss strings a simple list declaration

This commit is contained in:
GinjaNinja32
2015-09-02 19:07:20 +01:00
parent a6cdeee95c
commit f0b02d8035

View File

@@ -1,7 +1,7 @@
#define AUTOHISS_OFF 0
#define AUTOHISS_SR 1
#define AUTOHISS_SRX 2
#define AUTOHISS_BASIC 1
#define AUTOHISS_FULL 2
#define AUTOHISS_NUM 3
@@ -26,64 +26,73 @@
switch(autohiss_mode)
if(AUTOHISS_OFF)
src << "Auto-hiss is now OFF."
if(AUTOHISS_SR)
src << "Auto-hiss is now ON for 's' (Unathi) and 'r' (Tajara)."
if(AUTOHISS_SRX)
src << "Auto-hiss is now ON for 's', 'x' (Unathi) and 'r' (Tajara)."
if(AUTOHISS_BASIC)
src << "Auto-hiss is now BASIC."
if(AUTOHISS_FULL)
src << "Auto-hiss is now FULL."
else
soft_assert(0, "invalid autohiss value [autohiss_mode]")
autohiss_mode = AUTOHISS_OFF
src << "Auto-hiss is now OFF."
/datum/species
var/autohiss_basic_map = null
var/autohiss_extra_map = null
var/autohiss_exempt = null
/datum/species/unathi
autohiss_basic_map = list(
"s" = list("ss", "sss", "ssss")
)
autohiss_extra_map = list(
"x" = list("ks", "kss", "ksss")
)
autohiss_exempt = list("Sinta'unathi")
/datum/species/tajaran
autohiss_basic_map = list(
"r" = list("rr", "rrr", "rrrr")
)
autohiss_exempt = list("Siik'tajr")
/datum/species/proc/handle_autohiss(message, datum/language/lang, mode)
return message
/datum/species/unathi/handle_autohiss(message, datum/language/lang, mode)
if(lang.name == "Sinta'unathi") // Sinta'unathi has no autohiss
if(!autohiss_basic_map)
return message
if(autohiss_exempt && (lang.name in autohiss_exempt))
return message
. = list()
while(length(message))
var/i = findtext(message, "s")
var/j = findtext(message, "x")
if(!i && !j)
. += message
break
if(!j || (i && j && i<j)) // s only, or s first
. += copytext(message, 1, i+1)
for(var/a = 1 to rand(1,3))
. += "s"
message = copytext(message, i+1)
else // x first
if(mode == AUTOHISS_SRX)
. += copytext(message, 1, j)
switch(copytext(message, j, j+1))
if("x")
. += pick("ks", "kss", "ksss")
if("X")
. += pick("Ks", "Kss", "Ksss")
else
. += copytext(message, 1, j+1)
message = copytext(message, j+1)
return list2text(.)
/datum/species/tajaran/handle_autohiss(message, datum/language/lang, mode)
if(lang.name == "Siik'tajr") // Siik'tajr has no autopurr
return message
var/map = autohiss_basic_map.Copy()
if(mode == AUTOHISS_FULL && autohiss_extra_map)
map |= autohiss_extra_map
. = list()
while(length(message))
var/i = findtext(message, "r")
if(!i)
var/min_index = 10000 // if the message is longer than this, the autohiss is the least of your problems
var/min_char = null
for(var/char in map)
var/i = findtext(message, char)
if(!i) // no more of this character anywhere in the string, don't even bother searching next time
map -= char
else if(i < min_index)
min_index = i
min_char = char
if(!min_char) // we didn't find any of the mapping characters
. += message
break
. += copytext(message, 1, i+1)
for(var/a = 1 to rand(1,3))
. += "r"
message = copytext(message, i+1)
. += copytext(message, 1, min_index)
if(copytext(message, min_index, min_index+1) == uppertext(min_char))
. += capitalize(pick(map[min_char]))
else
. += pick(map[min_char])
message = copytext(message, min_index + 1)
for(var/x = 1 to length(.))
world.log << "[x]: [.[x]]"
return list2text(.)
#undef AUTOHISS_OFF
#undef AUTOHISS_SR
#undef AUTOHISS_SRX
#undef AUTOHISS_BASIC
#undef AUTOHISS_FULL
#undef AUTOHISS_NUM