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:
CaelAislinn
2012-02-06 21:27:27 +10:00
parent 1593a4923e
commit 32a37c6001
7 changed files with 197 additions and 42 deletions

View File

@@ -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"

View File

@@ -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]\")"

View File

@@ -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("~","*","-")

View 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)

View File

@@ -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

View File

@@ -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

View File

@@ -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)