Part 2 of saycode/language/species port from Bay. Also includes bugfixes.

This commit is contained in:
Markolie
2015-02-20 00:50:28 +01:00
parent 7e635a967e
commit 46c53be6f1
65 changed files with 530 additions and 1132 deletions
+11 -12
View File
@@ -141,7 +141,7 @@
exclaim_verb = "roars"
colour = "soghun"
key = "o"
flags = RESTRICTED | WHITELISTED
flags = RESTRICTED
syllables = list("ss","ss","ss","ss","skak","seeki","resh","las","esi","kor","sh")
/datum/language/unathi/get_random_name()
@@ -159,7 +159,7 @@
exclaim_verb = "yowls"
colour = "tajaran"
key = "j"
flags = RESTRICTED | WHITELISTED
flags = RESTRICTED
syllables = list("rr","rr","tajr","kir","raj","kii","mir","kra","ahk","nal","vah","khaz","jri","ran","darr", \
"mi","jri","dynh","manq","rhe","zar","rrhaz","kal","chur","eech","thaa","dra","jurl","mah","sanu","dra","ii'r", \
"ka","aasi","far","wa","baq","ara","qara","zir","sam","mak","hrar","nja","rir","khan","jun","dar","rik","kah", \
@@ -182,7 +182,7 @@
exclaim_verb = "warbles"
colour = "skrell"
key = "k"
flags = RESTRICTED | WHITELISTED
flags = RESTRICTED
syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!")
/datum/language/vox
@@ -192,7 +192,7 @@
ask_verb = "creels"
exclaim_verb = "SHRIEKS"
colour = "vox"
key = "5"
key = "v"
flags = RESTRICTED | WHITELISTED
syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya","chi","cha","kah", \
"SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA")
@@ -219,13 +219,13 @@
/datum/language/trinary
name = "Trinary"
desc = "A modification of binary to allow fuzzy logic. 0 is no, 1 is maybe, 2 is yes. Credited with giving Machine People the ability to think creatively."
speech_verb = "shrieks"
speech_verb = "states"
ask_verb = "queries"
exclaim_verb = "exclaims"
colour = "trinary"
key = "5"
flags = RESTRICTED
syllables = list("11111","01222","10110","11210","22212","02211","21222","2022","2001","0002","0012","0012","000","120","121","201","220","10","11","0")
flags = RESTRICTED | WHITELISTED
syllables = list("02011","01222","10100","10210","21012","02011","21200","1002","2001","0002","0012","0012","000","120","121","201","220","10","11","0")
/datum/language/kidan
name = "Chittin"
@@ -235,18 +235,18 @@
exclaim_verb = "rubs its antennae together"
colour = "kidan"
key = "4"
flags = RESTRICTED
flags = RESTRICTED | WHITELISTED
syllables = list("click","clack")
/datum/language/slime
name = "Bubblish"
desc = "Language of slimes, a mixture of bubbling noises and pops. Almost impossible to speak without mechanical aid for humans."
desc = "The language of slimes. It's a mixture of bubbling noises and pops. Very difficult to speak without mechanical aid for humans."
speech_verb = "bubbles and pops"
ask_verb = "bubbles and pops"
exclaim_verb = "bubbles and pops"
colour = "slime"
key = "f"
flags = RESTRICTED
flags = RESTRICTED | WHITELISTED
syllables = list("blob","plop","pop","bop","boop")
/datum/language/common
@@ -317,7 +317,7 @@
speech_verb = "hisses"
ask_verb = "hisses"
exclaim_verb = "hisses"
key = "4"
key = "6"
flags = RESTRICTED
syllables = list("sss","sSs","SSS")
@@ -332,7 +332,6 @@
flags = RESTRICTED | HIVEMIND
/datum/language/xenos/check_special_condition(var/mob/other)
var/mob/living/carbon/M = other
if(!istype(M))
return 1
@@ -1,34 +0,0 @@
/mob/living/carbon/alien/diona
name = "diona nymph"
voice_name = "diona nymph"
adult_form = /mob/living/carbon/human
speak_emote = list("chirrups")
icon_state = "nymph"
language = "Rootspeak"
universal_understand = 1
universal_speak = 0 // Dionaea do not need to speak to people other than other dionaea.
holder_type = /obj/item/weapon/holder/diona
/mob/living/carbon/alien/diona/New()
..()
species = all_species["Diona"]
verbs += /mob/living/carbon/alien/diona/proc/merge
/mob/living/carbon/alien/diona/start_pulling(var/atom/movable/AM)
//TODO: Collapse these checks into one proc (see pai and drone)
if(istype(AM,/obj/item))
var/obj/item/O = AM
if(O.w_class > 2)
src << "<span class='warning'>You are too small to pull that.</span>"
return
else
..()
else
src << "<span class='warning'>You are too small to pull that.</span>"
return
/mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands.
W.loc = get_turf(src)
return 1
@@ -1,16 +0,0 @@
/mob/living/carbon/alien/diona/attack_hand(mob/living/carbon/human/M as mob)
if(istype(M))
//Let people pick the little buggers up.
if(M.a_intent == "help")
if(M.species && M.species.name == "Diona")
M << "You feel your being twine with that of [src] as it merges with your biomass."
src << "You feel your being twine with that of [M] as you merge with its biomass."
src.verbs += /mob/living/carbon/alien/diona/proc/split
src.verbs -= /mob/living/carbon/alien/diona/proc/merge
src.loc = M
else
get_scooped(M)
return
..()
@@ -1,66 +0,0 @@
//Verbs after this point.
/mob/living/carbon/alien/diona/proc/merge()
set category = "Abilities"
set name = "Merge with gestalt"
set desc = "Merge with another diona."
if(stat == DEAD || paralysis || weakened || stunned || restrained())
return
if(istype(src.loc,/mob/living/carbon))
src.verbs -= /mob/living/carbon/alien/diona/proc/merge
return
var/list/choices = list()
for(var/mob/living/carbon/C in view(1,src))
if(!(src.Adjacent(C)) || !(C.client)) continue
if(istype(C,/mob/living/carbon/human))
var/mob/living/carbon/human/D = C
if(D.species && D.species.name == "Diona")
choices += C
var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices
if(!M || !src || !(src.Adjacent(M))) return
if(istype(M,/mob/living/carbon/human))
M << "You feel your being twine with that of [src] as it merges with your biomass."
M.status_flags |= PASSEMOTES
src << "You feel your being twine with that of [M] as you merge with its biomass."
src.loc = M
src.verbs += /mob/living/carbon/alien/diona/proc/split
src.verbs -= /mob/living/carbon/alien/diona/proc/merge
else
return
/mob/living/carbon/alien/diona/proc/split()
set category = "Abilities"
set name = "Split from gestalt"
set desc = "Split away from your gestalt as a lone nymph."
if(stat == DEAD || paralysis || weakened || stunned || restrained())
return
if(!(istype(src.loc,/mob/living/carbon)))
src.verbs -= /mob/living/carbon/alien/diona/proc/split
return
src.loc << "You feel a pang of loss as [src] splits away from your biomass."
src << "You wiggle out of the depths of [src.loc]'s biomass and plop to the ground."
var/mob/living/M = src.loc
src.loc = get_turf(src)
src.verbs -= /mob/living/carbon/alien/diona/proc/split
src.verbs += /mob/living/carbon/alien/diona/proc/merge
if(istype(M))
for(var/atom/A in M.contents)
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
return
M.status_flags &= ~PASSEMOTES
@@ -1,20 +0,0 @@
//Dionaea regenerate health and nutrition in light.
/mob/living/carbon/alien/diona/handle_environment(datum/gas_mixture/environment)
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(isturf(loc)) //else, there's considered to be no light
var/turf/T = loc
var/area/A = T.loc
if(A)
if(A.lighting_use_dynamic) light_amount = min(10,T.lighting_lumcount) - 5 //hardcapped so it's not abused by having a ton of flashlights
else light_amount = 5
nutrition += light_amount
if(nutrition > 500)
nutrition = 500
if(light_amount > 2) //if there's enough light, heal
adjustBruteLoss(-1)
adjustFireLoss(-1)
adjustToxLoss(-1)
adjustOxyLoss(-1)
@@ -1,19 +0,0 @@
/mob/living/carbon/alien/diona/confirm_evolution()
if(!is_alien_whitelisted(src, "Diona") && config.usealienwhitelist)
src << alert("You are currently not whitelisted to play as a full diona.")
return null
if(amount_grown < max_grown)
src << "You are not yet ready for your growth..."
return null
src.split()
if(istype(loc,/obj/item/weapon/holder/diona))
var/obj/item/weapon/holder/diona/L = loc
src.loc = L.loc
del(L)
src.visible_message("\red [src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","\red You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.")
return "Diona"
@@ -1,6 +0,0 @@
/mob/living/carbon/alien/diona/say_understands(var/mob/other,var/datum/language/speaking = null)
if (istype(other, /mob/living/carbon/human) && !speaking)
if(languages.len >= 2) // They have sucked down some blood.
return 1
return ..()
@@ -1,8 +0,0 @@
/mob/living/carbon/alien/diona/update_icons()
if(stat == DEAD)
icon_state = "[initial(icon_state)]_dead"
else if(lying || resting || stunned)
icon_state = "[initial(icon_state)]_sleep"
else
icon_state = "[initial(icon_state)]"
@@ -21,6 +21,8 @@
if(name == "alien")
name = text("alien ([rand(1, 1000)])")
real_name = name
add_language("Xenomorph")
add_language("Hivemind")
..()
//This is fine, works the same as a human
@@ -23,6 +23,8 @@
name = "alien larva ([rand(1, 1000)])"
real_name = name
regenerate_icons()
add_language("Xenomorph")
add_language("Hivemind")
..()
//This is fine, works the same as a human
+19 -74
View File
@@ -1,83 +1,28 @@
// To-do - convert to language system
/mob/living/carbon/alien/say(var/message)
var/verb = "says"
var/message_range = world.view
if (silent)
return
if(client)
if(client.prefs.muted & MUTE_IC)
src << "\red You cannot speak in IC (Muted)."
return
if (length(message) >= 2)
if (department_radio_keys[copytext(message, 1, 3)] == "alientalk")
message = copytext(message, 3)
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
if (stat == 2)
return say_dead(message)
else
alien_talk(message)
else
if (copytext(message, 1, 2) != "*" && !stat)
playsound(loc, "hiss", 25, 1, 1)//So aliens can hiss while they hiss yo/N
return ..(message)
else
message = trim_strip_html_properly(message)
/mob/living/proc/alien_talk(var/message)
if(stat == 2)
return say_dead(message)
if(copytext(message,1,2) == "*")
return emote(copytext(message,2))
var/datum/language/speaking = parse_language(message)
if(speaking)
message = copytext(message, 2+length(speaking.key))
log_say("[key_name(src)] : [message]")
message = trim(message)
if (!message)
if(!message || stat)
return
var/message_a = say_quote(message)
var/rendered = "<i><span class='game say'>Hivemind, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
for (var/mob/living/S in player_list)
if(!S.stat)
if(S.alien_talk_understand)
if(S.alien_talk_understand == alien_talk_understand)
S.show_message(rendered, 2)
else if (S.hivecheck())
S.show_message(rendered, 2)
var/list/listening = hearers(1, src)
listening -= src
listening += src
var/list/heard = list()
for (var/mob/M in listening)
if(!istype(M, /mob/living/carbon/alien) && !M.alien_talk_understand)
heard += M
if (length(heard))
var/message_b
message_b = "hsssss"
message_b = say_quote(message_b)
message_b = "<i>[message_b]</i>"
rendered = "<i><span class='game say'><span class='name'>[voice_name]</span> <span class='message'>[message_b]</span></span></i>"
for (var/mob/M in heard)
M.show_message(rendered, 2)
message = say_quote(message)
rendered = "<i><span class='game say'>Hivemind, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
var/rendered2 = null
for (var/mob/M in player_list)
if (istype(M, /mob/new_player))
continue
if (M.stat > 1 && istype(M, /mob/dead/observer))
rendered2 = "<i><span class='game say'>Hivemind, <span class='name'>[name]</span> <a href='byond://?src=\ref[M];follow2=\ref[M];follow=\ref[src]'>(Follow)</a> <span class='message'>[message_a]</span></span></i>"
M.show_message(rendered2, 2)
/mob/living/proc/hivecheck()
if (isalien(src)) return 1
if (!ishuman(src)) return
var/mob/living/carbon/human/H = src
if (H.l_ear || H.r_ear)
var/obj/item/device/radio/headset/dongle
if(istype(H.l_ear,/obj/item/device/radio/headset))
dongle = H.l_ear
else
dongle = H.r_ear
if(!istype(dongle)) return
if(dongle.translate_hive) return 1
..(message, speaking, verb, null, null, message_range, null)
+1 -1
View File
@@ -6,7 +6,7 @@
if (stat == 2) // Dead.
return say_dead(message)
if(!(container && istype(container, /obj/item/device/mmi)))
if(!(container && (istype(container, /obj/item/device/mmi) || istype(container, /obj/item/device/mmi/posibrain))))
return //No MMI, can't speak, bucko./N
else
var/datum/language/speaking = parse_language(message)
@@ -1300,6 +1300,7 @@
/mob/living/carbon/human/proc/set_species(var/new_species, var/force_organs, var/default_colour)
var/datum/species/oldspecies = species
if(!dna)
if(!new_species)
new_species = "Human"
@@ -1317,9 +1318,13 @@
remove_language(species.language)
if(species.default_language)
remove_language(species.default_language)
remove_language(species.default_language)
species = all_species[new_species]
if(oldspecies)
if(oldspecies.default_genes.len)
oldspecies.handle_dna(src,1) // Remove any genes that belong to the old species
if(force_organs || !organs || !organs.len)
species.create_organs(src)
+5 -5
View File
@@ -255,9 +255,9 @@
verb = speaking.get_spoken_verb(ending)
else
if(ending == "!")
verb=pick("exclaims","shouts","yells")
verb = "exclaims"
else if(ending == "?")
verb="asks"
verb = "asks"
return verb
@@ -292,11 +292,11 @@
handled = 1
if(slurring)
message = slur(message)
verb = pick("slobbers","slurs")
verb = "slurs"
handled = 1
if(stuttering)
message = stutter(message)
verb = pick("stammers","stutters")
verb = "stammers"
handled = 1
var/braindam = getBrainLoss()
@@ -304,7 +304,7 @@
handled = 1
if(prob(braindam/4))
message = stutter(message)
verb = pick("gibbers")
verb = "gibbers"
if(prob(braindam))
message = uppertext(message)
verb = "yells loudly"
@@ -290,11 +290,12 @@ proc/get_damage_icon_part(damage_state, body_part)
//Robotic limbs are handled in get_icon() so all we worry about are missing or dead limbs.
//No icon stored, so we need to start with a basic one.
var/datum/organ/external/chest = get_organ("chest")
base_icon = chest.get_icon(g,fat)
if(chest)
base_icon = chest.get_icon(g,fat)
if(chest.status & ORGAN_DEAD)
base_icon.ColorTone(necrosis_color_mod)
base_icon.SetIntensity(0.7)
if(chest.status & ORGAN_DEAD)
base_icon.ColorTone(necrosis_color_mod)
base_icon.SetIntensity(0.7)
for(var/datum/organ/external/part in organs)
@@ -21,3 +21,16 @@
return 1
return ..()
/mob/living/carbon/slime/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
if (speaker in Friends)
speech_buffer = list()
speech_buffer.Add(speaker)
speech_buffer.Add(lowertext(html_decode(message)))
..()
/mob/living/carbon/slime/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="")
if (speaker in Friends)
speech_buffer = list()
speech_buffer.Add(speaker)
speech_buffer.Add(lowertext(html_decode(message)))
..()
+29 -33
View File
@@ -256,7 +256,7 @@
handle_dna(C)
return
/datum/species/proc/handle_dna(var/mob/living/carbon/C) //Handles DNA mutations, as that doesn't work at init.
/datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init.
return
// Used for species-specific names (Vox, etc)
@@ -297,8 +297,8 @@
icobase = 'icons/mob/human_races/r_lizard.dmi'
deform = 'icons/mob/human_races/r_def_lizard.dmi'
path = /mob/living/carbon/human/unathi
default_language = "Sinta'unathi"
language = "Galactic Common"
default_language = "Galactic Common"
language = "Sinta'unathi"
tail = "sogtail"
unarmed_type = /datum/unarmed_attack/claws
primitive = /mob/living/carbon/monkey/unathi
@@ -331,8 +331,8 @@
icobase = 'icons/mob/human_races/r_tajaran.dmi'
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
path = /mob/living/carbon/human/tajaran
default_language = "Siik'tajr"
language = "Galactic Common"
default_language = "Galactic Common"
language = "Siik'tajr"
tail = "tajtail"
unarmed_type = /datum/unarmed_attack/claws
darksight = 8
@@ -364,8 +364,8 @@
icobase = 'icons/mob/human_races/r_skrell.dmi'
deform = 'icons/mob/human_races/r_def_skrell.dmi'
path = /mob/living/carbon/human/skrell
default_language = "Skrellian"
language = "Galactic Common"
default_language = "Galactic Common"
language = "Skrellian"
primitive = /mob/living/carbon/monkey/skrell
unarmed_type = /datum/unarmed_attack/punch
@@ -389,8 +389,8 @@
deform = 'icons/mob/human_races/r_def_vox.dmi'
path = /mob/living/carbon/human/vox
default_language = "Vox-pidgin"
language = "Galactic Common"
default_language = "Galactic Common"
language = "Vox-pidgin"
speech_sounds = list('sound/voice/shriek1.ogg')
speech_chance = 20
@@ -505,13 +505,11 @@
icobase = 'icons/mob/human_races/r_kidan.dmi'
deform = 'icons/mob/human_races/r_def_kidan.dmi'
path = /mob/living/carbon/human/kidan
default_language = "Chittin"
language = "Galactic Common"
default_language = "Galactic Common"
language = "Chittin"
unarmed_type = /datum/unarmed_attack/claws
brute_mod = 0.8
blurb = "Kidan."
flags = IS_WHITELISTED
bloodflags = BLOOD_GREEN
@@ -519,13 +517,11 @@
/datum/species/slime
name = "Slime People"
default_language = "Bubblish"
language = "Galactic Common"
default_language = "Galactic Common"
language = "Bubblish"
path = /mob/living/carbon/human/slime
primitive = /mob/living/carbon/slime
unarmed_type = /datum/unarmed_attack/punch
blurb = "Slime."
flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN
bloodflags = BLOOD_SLIME
@@ -538,12 +534,12 @@
..()
/datum/species/grey // /vg/
/datum/species/grey
name = "Grey"
icobase = 'icons/mob/human_races/r_grey.dmi'
deform = 'icons/mob/human_races/r_def_grey.dmi'
default_language = "Grey"
language = "Galactic Common"
default_language = "Galactic Common"
//language = "Grey" // Perhaps if they ever get a hivemind
unarmed_type = /datum/unarmed_attack/punch
darksight = 5 // BOOSTED from 2
eyes = "grey_eyes_s"
@@ -551,19 +547,21 @@
brute_mod = 1.25 //greys are fragile
default_genes = list(M_REMOTE_TALK)
blurb = "Grey."
primitive = /mob/living/carbon/monkey // TODO
flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
/datum/species/grey/handle_dna(var/mob/living/carbon/C)
C.dna.SetSEState(REMOTETALKBLOCK,1,1)
C.mutations |= M_REMOTE_TALK
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove)
if(!remove)
C.dna.SetSEState(REMOTETALKBLOCK,1,1)
C.mutations |= M_REMOTE_TALK
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
else
C.dna.SetSEState(REMOTETALKBLOCK,0,1)
C.mutations -= M_REMOTE_TALK
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
C.update_mutations()
..()
/datum/species/diona
@@ -571,8 +569,8 @@
icobase = 'icons/mob/human_races/r_diona.dmi'
deform = 'icons/mob/human_races/r_def_plant.dmi'
path = /mob/living/carbon/human/diona
default_language = "Rootspeak"
language = "Galactic Common"
default_language = "Galactic Common"
language = "Rootspeak"
unarmed_type = /datum/unarmed_attack/diona
primitive = /mob/living/carbon/monkey/diona
@@ -638,15 +636,13 @@
icobase = 'icons/mob/human_races/r_machine.dmi'
deform = 'icons/mob/human_races/r_machine.dmi'
path = /mob/living/carbon/human/machine
default_language = "Trinary"
language = "Galactic Common"
default_language = "Galactic Common"
language = "Trinary"
unarmed_type = /datum/unarmed_attack/punch
eyes = "blank_eyes"
brute_mod = 1.5
burn_mod = 1.5
blurb = "Machine."
cold_level_1 = 50
cold_level_2 = -1
+4 -6
View File
@@ -10,9 +10,9 @@ var/list/department_radio_keys = list(
":e" = "Engineering", "#e" = "Engineering", ".e" = "Engineering",
":s" = "Security", "#s" = "Security", ".s" = "Security",
":w" = "whisper", "#w" = "whisper", ".w" = "whisper",
":t" = "Mercenary", "#t" = "Mercenary", ".t" = "Mercenary",
":t" = "Syndicate", "#t" = "Syndicate", ".t" = "Syndicate",
":u" = "Supply", "#u" = "Supply", ".u" = "Supply",
":v" = "Service", "#v" = "Service", ".v" = "Service",
":z" = "Service", "#z" = "Service", ".z" = "Service",
":p" = "AI Private", "#p" = "AI Private", ".p" = "AI Private",
":R" = "right ear", "#R" = "right ear", ".R" = "right ear",
@@ -25,9 +25,9 @@ var/list/department_radio_keys = list(
":E" = "Engineering", "#E" = "Engineering", ".E" = "Engineering",
":S" = "Security", "#S" = "Security", ".S" = "Security",
":W" = "whisper", "#W" = "whisper", ".W" = "whisper",
":T" = "Mercenary", "#T" = "Mercenary", ".T" = "Mercenary",
":T" = "Syndicate", "#T" = "Syndicate", ".T" = "Syndicate",
":U" = "Supply", "#U" = "Supply", ".U" = "Supply",
":V" = "Service", "#V" = "Service", ".V" = "Service",
":Z" = "Service", "#Z" = "Service", ".Z" = "Service",
":P" = "AI Private", "#P" = "AI Private", ".P" = "AI Private"
)
@@ -105,8 +105,6 @@ proc/get_radio_key_from_channel(var/channel)
var/obj/O = I
hearturfs += O.locs[1]
listening_obj |= O
for(var/obj/Ob in O.contents)
listening_obj |= Ob
for(var/mob/M in player_list)
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS))
+7 -3
View File
@@ -114,12 +114,16 @@ var/list/ai_list = list()
//Languages
add_language("Robot Talk", 1)
add_language("Galactic Common", 1)
add_language("Sol Common", 0)
add_language("Sol Common", 1)
add_language("Tradeband", 1)
add_language("Sinta'unathi", 0)
add_language("Siik'tajr", 0)
add_language("Skrellian", 0)
add_language("Tradeband", 1)
add_language("Vox-pidgin", 0)
add_language("Rootspeak", 0)
add_language("Trinary", 1)
add_language("Chittin", 0)
add_language("Bubblish", 0)
add_language("Gutter", 0)
if(!safety)//Only used by AIize() to successfully spawn an AI.
+5 -1
View File
@@ -86,7 +86,8 @@
//Default languages without universal translator software
add_language("Sol Common", 1)
add_language("Tradeband", 1)
add_language("Gutter", 1)
add_language("Gutter", 1)
add_language("Trinary", 1)
//Verbs for pAI mobile form, chassis and Say flavor text
verbs += /mob/living/silicon/pai/proc/choose_chassis
@@ -511,3 +512,6 @@
close_up()
return 2
// No binary for pAIs.
/mob/living/silicon/pai/binarycheck()
return 0
@@ -691,7 +691,7 @@
/mob/living/silicon/pai/proc/translator_toggle()
// Sol Common, Tradeband and Gutter are added with New() and are therefore the current default, always active languages
// Sol Common, Tradeband, Gutter and Trinary are added with New() and are therefore the current default, always active languages
if(translator_on)
translator_on = 0
@@ -699,6 +699,11 @@
remove_language("Sinta'unathi")
remove_language("Siik'tajr")
remove_language("Skrellian")
remove_language("Vox-pidgin")
remove_language("Rootspeak")
remove_language("Trinary")
remove_language("Chittin")
remove_language("Bubblish")
src << "\blue Translator Module toggled OFF."
@@ -708,5 +713,10 @@
add_language("Sinta'unathi")
add_language("Siik'tajr")
add_language("Skrellian")
add_language("Vox-pidgin")
add_language("Rootspeak")
add_language("Trinary")
add_language("Chittin")
add_language("Bubblish")
src << "\blue Translator Module toggled ON."
@@ -30,6 +30,9 @@
/mob/living/silicon/robot/drone/New()
..()
remove_language("Robot Talk")
add_language("Drone Talk", 1)
if(camera && "Robots" in camera.network)
camera.network.Add("Engineering")
@@ -176,6 +176,13 @@
rbPDA.set_name_and_job(custom_name,braintype)
if(hiddenborg)
rbPDA.hidden = 1
/mob/living/silicon/robot/binarycheck()
if(is_component_functioning("comms"))
var/datum/robot_component/RC = get_component("comms")
use_power(RC.energy_consumption)
return 1
return 0
//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
//Improved /N
@@ -1471,6 +1478,16 @@
laws = new /datum/ai_laws/syndicate_override()
Namepick()
/mob/living/silicon/robot/syndicate/canUseTopic(atom/movable/M)
if(stat || lockcharge || stunned || weakened)
return
if(z in config.admin_levels)
return 1
/*if(istype(M, /obj/machinery))
var/obj/machinery/Machine = M
return Machine.emagged*/
return 1
/mob/living/silicon/robot/proc/notify_ai(var/notifytype, var/oldname, var/newname)
if(!connected_ai)
@@ -64,6 +64,11 @@
R.add_language("Sinta'unathi", 0)
R.add_language("Siik'tajr", 0)
R.add_language("Skrellian", 0)
R.add_language("Vox-pidgin", 0)
R.add_language("Rootspeak", 0)
R.add_language("Trinary", 1)
R.add_language("Chittin", 0)
R.add_language("Bubblish", 0)
R.add_language("Gutter", 0)
/obj/item/weapon/robot_module/standard
@@ -262,12 +267,15 @@
/obj/item/weapon/robot_module/butler/add_languages(var/mob/living/silicon/robot/R)
//full set of languages
R.add_language("Sol Common", 1)
R.add_language("Sinta'unathi", 1)
R.add_language("Siik'maas", 1)
R.add_language("Siik'tajr", 0)
R.add_language("Skrellian", 1)
R.add_language("Rootspeak", 1)
R.add_language("Tradeband", 1)
R.add_language("Sinta'unathi", 1)
R.add_language("Siik'tajr", 1)
R.add_language("Skrellian", 1)
R.add_language("Vox-pidgin", 1)
R.add_language("Rootspeak", 1)
R.add_language("Trinary", 1)
R.add_language("Chittin", 1)
R.add_language("Bubblish", 1)
R.add_language("Gutter", 1)
/*
@@ -8,6 +8,7 @@
var/list/alarms_to_clear = list()
immune_to_ssd = 1
var/list/hud_list[10]
var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer
var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
var/list/alarm_types_clear = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0)
var/designation = ""
@@ -206,6 +207,37 @@
show_emergency_shuttle_eta()
show_system_integrity()
show_malf_ai()
//Silicon mob language procs
/mob/living/silicon/can_speak(datum/language/speaking)
return universal_speak || (speaking in src.speech_synthesizer_langs) //need speech synthesizer support to vocalize a language
/mob/living/silicon/add_language(var/language, var/can_speak=1)
if (..(language) && can_speak)
speech_synthesizer_langs.Add(all_languages[language])
return 1
/mob/living/silicon/remove_language(var/rem_language)
..(rem_language)
for (var/datum/language/L in speech_synthesizer_langs)
if (L.name == rem_language)
speech_synthesizer_langs -= L
/mob/living/silicon/check_languages()
set name = "Check Known Languages"
set category = "IC"
set src = usr
var/dat = "<b><font size = 5>Known Languages</font></b><br/><br/>"
for(var/datum/language/L in languages)
if(!(L.flags & NONGLOBAL))
dat += "<b>[L.name] (:[L.key])</b><br/>Speech Synthesizer: <i>[(L in speech_synthesizer_langs)? "YES":"NOT SUPPORTED"]</i><br/>[L.desc]<br/><br/>"
src << browse(dat, "window=checklanguage")
return
// this function displays the stations manifest in a separate window
/mob/living/silicon/proc/show_station_manifest()
@@ -258,6 +290,9 @@
set category = "IC"
flavor_text = copytext(sanitize(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text), 1)
/mob/living/silicon/binarycheck()
return 1
/mob/living/silicon/proc/toggle_sensor_mode()
var/sensor_type = input("Please select sensor type.", "Sensor Integration", null) in list("Security", "Medical","Disable")
@@ -106,50 +106,6 @@
if(!by_gamemode)
request_player()
/mob/living/simple_animal/borer/say(var/message)
message = trim_strip_html_properly(message)
message = capitalize(message)
if(!message)
return
if (stat == 2)
return say_dead(message)
if (stat)
return
if (src.client)
if(client.prefs.muted & MUTE_IC)
src << "\red You cannot speak in IC (muted)."
return
if (src.client.handle_spam_prevention(message,MUTE_IC))
return
if (copytext(message, 1, 2) == "*")
return emote(copytext(message, 2))
var/datum/language/L = parse_language(message)
if(L && L.flags & HIVEMIND)
L.broadcast(src,trim(copytext(message,3)),src.truename)
return
if(!host)
//TODO: have this pick a random mob within 3 tiles to speak for the borer.
src << "You have no host to speak to."
return //No host, no audible speech.
src << "You drop words into [host]'s mind: \"[message]\""
host << "Your own thoughts speak: \"[message]\""
for (var/mob/M in player_list)
if (istype(M, /mob/new_player))
continue
else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS)
M << "[src.truename] whispers to [host], \"[message]\""
/mob/living/simple_animal/borer/Stat()
..()
statpanel("Status")