mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
fixed taj speak and taj whisper (not working over radio chat). use :j after the radio/headset commands to speak or whisper in tajaran (only taj mobs can speak / understand it)
Signed-off-by: CaelAislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
@@ -1028,6 +1028,7 @@
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Tajara\examine.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Tajara\say.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"
|
||||
#include "code\WorkInProgress\Cael_Aislinn\Tajara\whisper.dm"
|
||||
#include "code\WorkInProgress\mapload\dmm_suite.dm"
|
||||
#include "code\WorkInProgress\mapload\reader.dm"
|
||||
#include "code\WorkInProgress\Mini\atmos_control.dm"
|
||||
|
||||
@@ -1,18 +1,8 @@
|
||||
//their language needs to hook into radios as well
|
||||
|
||||
/mob/living/carbon/human/tajaran/say_quote(var/text)
|
||||
/mob/living/carbon/human/tajaran/say_quote(var/text,var/is_speaking_taj)
|
||||
//work out if the listener can understand or not
|
||||
|
||||
var/is_decipherable = 0
|
||||
var/n = length(text)
|
||||
var/p = 0
|
||||
while(p < n)
|
||||
if (copytext(text, p, p + 1) in tajspeak_letters)
|
||||
p++
|
||||
continue
|
||||
is_decipherable = 1
|
||||
break
|
||||
|
||||
var/ending = copytext(text, length(text))
|
||||
if (src.disease_symptoms & DISEASE_HOARSE)
|
||||
return "rasps, \"[text]\"";
|
||||
@@ -23,7 +13,7 @@
|
||||
if (src.brainloss >= 60)
|
||||
return "gibbers, \"[text]\"";
|
||||
|
||||
if(!is_decipherable)
|
||||
if(is_speaking_taj)
|
||||
return "mewls, \"[text]\""//pick("yowls, \"[text]\"", "growls, \"[text]\"","mewls, \"[text]\"", "mrowls, \"[text]\"", "meows, \"[text]\"", "purrs, \"[text]\"");
|
||||
|
||||
if (ending == "?")
|
||||
@@ -35,6 +25,7 @@
|
||||
|
||||
//convert message to an indecipherable series of sounds for anyone who isnt tajaran
|
||||
/mob/living/carbon/human/tajaran/proc/tajspeak(var/message)
|
||||
return stars(message)
|
||||
var/te = html_decode(message)
|
||||
var/t = ""
|
||||
var/n = length(message)
|
||||
@@ -65,7 +56,6 @@
|
||||
return html_encode(t)*/
|
||||
|
||||
/mob/living/carbon/human/tajaran/say(var/message)
|
||||
world << "\blue check1:\"[message]\")"
|
||||
var/message_old = message
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
|
||||
@@ -170,11 +160,16 @@
|
||||
if (!ishuman(src) && (message_mode=="department" || (message_mode in radiochannels)))
|
||||
message_mode = null //only humans can use headsets
|
||||
|
||||
world << "\blue check2:\"[message]\")"
|
||||
|
||||
if (!message)
|
||||
return
|
||||
|
||||
//work out if we're speaking tajaran or not
|
||||
var/is_speaking_taj = 0
|
||||
if(copytext(message, 1, 4) == ":j ")
|
||||
message = copytext(message, 4)
|
||||
if(taj_talk_understand)
|
||||
is_speaking_taj = 1
|
||||
|
||||
if( !message_mode && (disease_symptoms & DISEASE_WHISPER))
|
||||
message_mode = "whisper"
|
||||
|
||||
@@ -217,15 +212,13 @@
|
||||
*/
|
||||
var/list/obj/item/used_radios = new
|
||||
|
||||
world << "\blue check3:\"[message]\")"
|
||||
|
||||
switch (message_mode)
|
||||
if ("headset")
|
||||
if (src:l_ear && istype(src:l_ear,/obj/item/device/radio))
|
||||
src:l_ear.talk_into(src, message)
|
||||
src:l_ear.talk_into(src, message, 0, "[is_speaking_taj ? "tajaran" : "universal"]")
|
||||
used_radios += src:l_ear
|
||||
else if (src:r_ear)
|
||||
src:r_ear.talk_into(src, message)
|
||||
src:r_ear.talk_into(src, message, 0, "[is_speaking_taj ? "tajaran" : "universal"]")
|
||||
used_radios += src:r_ear
|
||||
|
||||
message_range = 1
|
||||
@@ -234,10 +227,10 @@
|
||||
|
||||
if ("secure headset")
|
||||
if (src:l_ear && istype(src:l_ear,/obj/item/device/radio))
|
||||
src:l_ear.talk_into(src, message, 1)
|
||||
src:l_ear.talk_into(src, message, 1, "[is_speaking_taj ? "tajaran" : "universal"]")
|
||||
used_radios += src:l_ear
|
||||
else if (src:r_ear)
|
||||
src:r_ear.talk_into(src, message, 1)
|
||||
src:r_ear.talk_into(src, message, 1, "[is_speaking_taj ? "tajaran" : "universal"]")
|
||||
used_radios += src:r_ear
|
||||
|
||||
message_range = 1
|
||||
@@ -245,7 +238,7 @@
|
||||
|
||||
if ("right ear")
|
||||
if (src:r_ear)
|
||||
src:r_ear.talk_into(src, message)
|
||||
src:r_ear.talk_into(src, message, 0, "[is_speaking_taj ? "tajaran" : "universal"]")
|
||||
used_radios += src:r_ear
|
||||
|
||||
message_range = 1
|
||||
@@ -253,7 +246,7 @@
|
||||
|
||||
if ("left ear")
|
||||
if (src:l_ear)
|
||||
src:l_ear.talk_into(src, message)
|
||||
src:l_ear.talk_into(src, message, 0, "[is_speaking_taj ? "tajaran" : "universal"]")
|
||||
used_radios += src:l_ear
|
||||
|
||||
message_range = 1
|
||||
@@ -261,7 +254,7 @@
|
||||
|
||||
if ("intercom")
|
||||
for (var/obj/item/device/radio/intercom/I in view(1, null))
|
||||
I.talk_into(src, message)
|
||||
I.talk_into(src, message, 0, "[is_speaking_taj ? "tajaran" : "universal"]")
|
||||
used_radios += I
|
||||
|
||||
message_range = 1
|
||||
@@ -313,16 +306,6 @@
|
||||
italics = 1
|
||||
/////SPECIAL HEADSETS END
|
||||
|
||||
world << "\blue check4:\"[message]\")"
|
||||
|
||||
//work out if we're speaking tajaran or not
|
||||
var/is_speaking_taj = 0
|
||||
if(copytext(message, 1, 3) == ":j")
|
||||
is_speaking_taj = 1
|
||||
message = trim(copytext(message, 1, 3))
|
||||
|
||||
world << "\blue check5:\"[message]\")"
|
||||
|
||||
var/list/listening
|
||||
/*
|
||||
if(istype(loc, /obj/item/device/aicard)) // -- TLE
|
||||
@@ -405,7 +388,7 @@
|
||||
|
||||
var/rendered = null
|
||||
if (length(heard_a))
|
||||
var/message_a = say_quote(message)
|
||||
var/message_a = say_quote(message,0)
|
||||
if (italics)
|
||||
message_a = "<i>[message_a]</i>"
|
||||
if (!istype(src, /mob/living/carbon/human))
|
||||
@@ -437,7 +420,6 @@
|
||||
if(istype(src, /mob/living/carbon/metroid))
|
||||
presay = "metroid"
|
||||
*/
|
||||
world << "\blue check6:\"[message]\")"
|
||||
for (var/mob/M in heard_a)
|
||||
|
||||
M.show_message(rendered, 2)
|
||||
@@ -454,8 +436,6 @@
|
||||
M << I
|
||||
*/
|
||||
|
||||
world << "\blue check7:\"[message]\")"
|
||||
|
||||
/*
|
||||
// find the suffix, if bot, human or monkey
|
||||
var/punctuation = ""
|
||||
@@ -488,7 +468,7 @@
|
||||
message_b = voice_message
|
||||
else
|
||||
message_b = tajspeak(message)
|
||||
message_b = say_quote(message_b)
|
||||
message_b = say_quote(message_b,1)
|
||||
|
||||
if (italics)
|
||||
message_b = "<i>[message_b]</i>"
|
||||
@@ -540,5 +520,3 @@
|
||||
sleep(11)
|
||||
del(B)
|
||||
*/
|
||||
|
||||
world << "\blue check8:\"[message]\")"
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
voice_name = "tajaran"
|
||||
icon = 'tajaran.dmi'
|
||||
var/list/tajspeak_letters
|
||||
//
|
||||
universal_speak = 1
|
||||
taj_talk_understand = 1
|
||||
voice_message = "mrowls"
|
||||
|
||||
/mob/living/carbon/human/tajaran/New()
|
||||
tajspeak_letters = new/list("~","*","-")
|
||||
|
||||
171
code/WorkInProgress/Cael_Aislinn/Tajara/whisper.dm
Normal file
171
code/WorkInProgress/Cael_Aislinn/Tajara/whisper.dm
Normal file
@@ -0,0 +1,171 @@
|
||||
/mob/living/carbon/human/tajaran/whisper(message as text)
|
||||
//Figured it out. If you use say :w (message) it HTML encodes it, THEN passes it to the whisper code, which does so again. Jeez. --SkyMarshal
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
|
||||
if (!message)
|
||||
return
|
||||
|
||||
log_whisper("[src.name]/[src.key] : [message]")
|
||||
|
||||
if (src.client && (src.client.muted || src.client.muted_complete))
|
||||
src << "You are muted."
|
||||
return
|
||||
|
||||
if (src.stat == 2)
|
||||
return src.say_dead(message)
|
||||
|
||||
if (src.stat)
|
||||
return
|
||||
|
||||
var/alt_name = ""
|
||||
if (istype(src, /mob/living/carbon/human) && src.name != src.real_name)
|
||||
var/mob/living/carbon/human/H = src
|
||||
alt_name = " (as [H.get_visible_name()])"
|
||||
// Mute disability
|
||||
if (src.sdisabilities & 2)
|
||||
return
|
||||
|
||||
if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
return
|
||||
|
||||
var/italics = 1
|
||||
var/message_range = 1
|
||||
|
||||
//work out if we're speaking tajaran or not
|
||||
var/is_speaking_taj = 0
|
||||
if(copytext(message, 1, 4) == ":j ")
|
||||
message = copytext(message, 4)
|
||||
if(taj_talk_understand)
|
||||
is_speaking_taj = 1
|
||||
|
||||
if(istype(src.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja)&&src.wear_mask:voice=="Unknown")
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
var/list/temp_message = dd_text2list(message, " ")
|
||||
var/list/pick_list = list()
|
||||
for(var/i = 1, i <= temp_message.len, i++)
|
||||
pick_list += i
|
||||
for(var/i=1, i <= abs(temp_message.len/3), i++)
|
||||
var/H = pick(pick_list)
|
||||
if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue
|
||||
temp_message[H] = ninjaspeak(temp_message[H])
|
||||
pick_list -= H
|
||||
message = dd_list2text(temp_message, " ")
|
||||
message = dd_replaceText(message, "o", "<22>")
|
||||
message = dd_replaceText(message, "p", "<22>")
|
||||
message = dd_replaceText(message, "l", "<22>")
|
||||
message = dd_replaceText(message, "s", "<22>")
|
||||
message = dd_replaceText(message, "u", "<22>")
|
||||
message = dd_replaceText(message, "b", "<22>")
|
||||
|
||||
message = capitalize(message)
|
||||
|
||||
if (src.stuttering)
|
||||
message = stutter(message)
|
||||
if (src.slurring)
|
||||
message = slur(message)
|
||||
|
||||
for (var/obj/O in view(message_range, src))
|
||||
spawn (0)
|
||||
if (O)
|
||||
O.hear_talk(src, message)
|
||||
|
||||
var/list/listening = hearers(message_range, src)
|
||||
listening -= src
|
||||
listening += src
|
||||
var/list/eavesdropping = hearers(2, src)
|
||||
eavesdropping -= src
|
||||
eavesdropping -= listening
|
||||
var/list/watching = hearers(5, src)
|
||||
watching -= src
|
||||
watching -= listening
|
||||
watching -= eavesdropping
|
||||
|
||||
var/list/heard_a = list() // understood us
|
||||
var/list/heard_b = list() // didn't understand us
|
||||
|
||||
for (var/mob/M in listening)
|
||||
if (M.say_understands(src))
|
||||
heard_a += M
|
||||
else
|
||||
heard_b += M
|
||||
|
||||
var/rendered = null
|
||||
|
||||
for (var/mob/M in watching)
|
||||
if ( (M.say_understands(src) && !is_speaking_taj) || istype(M,/mob/living/carbon/human/tajaran) )
|
||||
rendered = "<span class='game say'><span class='name'>[src.name]</span> whispers something.</span>"
|
||||
else
|
||||
rendered = "<span class='game say'><span class='name'>[src.voice_name]</span> whispers something.</span>"
|
||||
M.show_message(rendered, 2)
|
||||
|
||||
if (length(heard_a))
|
||||
var/message_a = message
|
||||
|
||||
if (italics)
|
||||
message_a = "<i>[message_a]</i>"
|
||||
//This appears copied from carbon/living say.dm so the istype check for mob is probably not needed. Appending for src is also not needed as the game will check that automatically.
|
||||
if (!istype(src, /mob/living/carbon/human))
|
||||
rendered = "<span class='game say'><span class='name'>[name]</span> whispers, <span class='message'>\"[message_a]\"</span></span>"
|
||||
else if (istype(wear_mask, /obj/item/clothing/mask/gas/voice))
|
||||
if (wear_mask:vchange)
|
||||
rendered = "<span class='game say'><span class='name'>[wear_mask:voice]</span> whispers, <span class='message'>\"[message_a]\"</span></span>"
|
||||
else
|
||||
rendered = "<span class='game say'><span class='name'>[name]</span> whispers, <span class='message'>\"[message_a]\"</span></span>"
|
||||
else
|
||||
rendered = "<span class='game say'><span class='name'>[real_name]</span>[alt_name] whispers, <span class='message'>\"[message_a]\"</span></span>"
|
||||
|
||||
for (var/mob/M in heard_a)
|
||||
M.show_message(rendered, 2)
|
||||
|
||||
if (length(heard_b))
|
||||
var/message_b
|
||||
|
||||
if (src.voice_message)
|
||||
message_b = src.voice_message
|
||||
else
|
||||
message_b = stars(message)
|
||||
|
||||
if (italics)
|
||||
message_b = "<i>[message_b]</i>"
|
||||
|
||||
rendered = "<span class='game say'><span class='name'>[src.voice_name]</span> whispers, <span class='message'>\"[message_b]\"</span></span>"
|
||||
|
||||
for (var/mob/M in heard_b)
|
||||
M.show_message(rendered, 2)
|
||||
|
||||
for (var/mob/M in eavesdropping)
|
||||
if (M.say_understands(src))
|
||||
var/message_c
|
||||
message_c = stars(message)
|
||||
if (!istype(src, /mob/living/carbon/human))
|
||||
rendered = "<span class='game say'><span class='name'>[name]</span> whispers, <span class='message'>\"[message_c]\"</span></span>"
|
||||
else if(istype(wear_mask, /obj/item/clothing/mask/gas/voice))
|
||||
if(wear_mask:vchange)
|
||||
rendered = "<span class='game say'><span class='name'>[wear_mask:voice]</span> whispers, <span class='message'>\"[message_c]\"</span></span>"
|
||||
else
|
||||
rendered = "<span class='game say'><span class='name'>[name]</span> whispers, <span class='message'>\"[message_c]\"</span></span>"
|
||||
else
|
||||
rendered = "<span class='game say'><span class='name'>[real_name]</span>[alt_name] whispers, <span class='message'>\"[message_c]\"</span></span>"
|
||||
M.show_message(rendered, 2)
|
||||
else
|
||||
rendered = "<span class='game say'><span class='name'>[src.voice_name]</span> whispers something.</span>"
|
||||
M.show_message(rendered, 2)
|
||||
|
||||
if (italics)
|
||||
message = "<i>[message]</i>"
|
||||
|
||||
if (!istype(src, /mob/living/carbon/human))
|
||||
rendered = "<span class='game say'><span class='name'>[name]</span> whispers, <span class='message'>\"[message]\"</span></span>"
|
||||
else if (istype(src.wear_mask, /obj/item/clothing/mask/gas/voice))
|
||||
if(wear_mask:vchange)
|
||||
rendered = "<span class='game say'><span class='name'>[wear_mask:voice]</span> whispers, <span class='message'>\"[message]\"</span></span>"
|
||||
else
|
||||
rendered = "<span class='game say'><span class='name'>[name]</span> whispers, <span class='message'>\"[message]\"</span></span>"
|
||||
else
|
||||
rendered = "<span class='game say'><span class='name'>[real_name]</span>[alt_name] whispers, <span class='message'>\"[message]\"</span></span>"
|
||||
|
||||
for (var/mob/M in world)
|
||||
if (istype(M, /mob/new_player))
|
||||
continue
|
||||
if (M.stat > 1 && !(M in heard_a))
|
||||
M.show_message(rendered, 2)
|
||||
@@ -265,6 +265,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
|
||||
var/brainloss = 0//Carbon
|
||||
var/robot_talk_understand = 0
|
||||
var/alien_talk_understand = 0
|
||||
var/taj_talk_understand = 0
|
||||
var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE
|
||||
var/ear_deaf = null//Carbon
|
||||
var/eye_blind = null//Carbon
|
||||
|
||||
@@ -231,6 +231,7 @@
|
||||
|
||||
var/robot_talk_understand = 0
|
||||
var/alien_talk_understand = 0
|
||||
var/taj_talk_understand = 0
|
||||
|
||||
/*For ninjas and others. This variable is checked when a mob moves and I guess it was supposed to allow the mob to move
|
||||
through dense areas, such as walls. Setting density to 0 does the same thing. The difference here is that
|
||||
|
||||
@@ -387,7 +387,6 @@
|
||||
if(istype(src, /mob/living/carbon/metroid))
|
||||
presay = "metroid"
|
||||
*/
|
||||
world << "\blue rendered: \"[rendered]\""
|
||||
for (var/mob/M in heard_a)
|
||||
|
||||
M.show_message(rendered, 2)
|
||||
|
||||
Reference in New Issue
Block a user