Moves languages to a holder datum, gives mind its own language holder
This commit is contained in:
@@ -1799,12 +1799,12 @@
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/mob/living/L = locate(href_list["languagemenu"]) in GLOB.mob_list
|
||||
if(!isliving(L))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living.")
|
||||
var/mob/M = locate(href_list["languagemenu"]) in GLOB.mob_list
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob.")
|
||||
return
|
||||
|
||||
L.open_language_menu(usr)
|
||||
var/datum/language_holder/H = M.get_language_holder()
|
||||
H.open_language_menu(usr)
|
||||
|
||||
else if(href_list["traitor"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
var/exclaim_verb = "exclaims" // Used when sentence ends in a !
|
||||
var/whisper_verb = "whispers" // Optional. When not specified speech_verb + quietly/softly is used instead.
|
||||
var/list/signlang_verb = list("signs", "gestures") // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags
|
||||
var/key = "x" // Character used to speak in language
|
||||
var/key // Character used to speak in language
|
||||
// If key is null, then the language isn't real or learnable.
|
||||
var/flags // Various language flags.
|
||||
var/list/syllables // Used when scrambling text for a non-speaker.
|
||||
var/list/sentence_chance = 5 // Likelihood of making a new sentence after each syllable.
|
||||
@@ -108,13 +109,3 @@
|
||||
return speech_verb
|
||||
|
||||
#undef SCRAMBLE_CACHE_LEN
|
||||
|
||||
/proc/get_language_instance(langtype)
|
||||
if(!ispath(langtype, /datum/language))
|
||||
return
|
||||
|
||||
if(!GLOB.language_datums[langtype])
|
||||
var/datum/language/langdatum = new langtype
|
||||
GLOB.language_datums[langtype] = langdatum
|
||||
|
||||
. = GLOB.language_datums[langtype]
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/datum/language_holder
|
||||
var/list/languages = list(/datum/language/common)
|
||||
var/list/shadow_languages = list()
|
||||
var/only_speaks_language = null
|
||||
var/selected_default_language = null
|
||||
var/datum/language_menu/language_menu
|
||||
|
||||
var/omnitongue = FALSE
|
||||
var/owner
|
||||
|
||||
/datum/language_holder/New(owner)
|
||||
src.owner = owner
|
||||
|
||||
languages = typecacheof(languages)
|
||||
shadow_languages = typecacheof(shadow_languages)
|
||||
|
||||
/datum/language_holder/Destroy()
|
||||
owner = null
|
||||
QDEL_NULL(language_menu)
|
||||
|
||||
/datum/language_holder/proc/copy(newowner)
|
||||
var/datum/language_holder/copy = new(newowner)
|
||||
copy.languages = src.languages.Copy()
|
||||
// shadow languages are not copied.
|
||||
copy.only_speaks_language = src.only_speaks_language
|
||||
copy.selected_default_language = src.selected_default_language
|
||||
// language menu is not copied, that's tied to the holder.
|
||||
copy.omnitongue = src.omnitongue
|
||||
return copy
|
||||
|
||||
/datum/language_holder/proc/grant_language(datum/language/dt)
|
||||
languages[dt] = TRUE
|
||||
|
||||
/datum/language_holder/proc/grant_all_languages(omnitongue=FALSE)
|
||||
for(var/la in GLOB.all_languages)
|
||||
grant_language(la)
|
||||
|
||||
if(omnitongue)
|
||||
src.omnitongue = TRUE
|
||||
|
||||
/datum/language_holder/proc/get_random_understood_language()
|
||||
var/list/possible = list()
|
||||
for(var/dt in languages)
|
||||
possible += dt
|
||||
. = safepick(possible)
|
||||
|
||||
/datum/language_holder/proc/remove_language(datum/language/dt)
|
||||
languages -= dt
|
||||
|
||||
/datum/language_holder/proc/remove_all_languages()
|
||||
languages.Cut()
|
||||
|
||||
/datum/language_holder/proc/has_language(datum/language/dt)
|
||||
if(is_type_in_typecache(dt, languages))
|
||||
return LANGUAGE_KNOWN
|
||||
else
|
||||
var/atom/movable/AM = get_atom()
|
||||
var/datum/language_holder/L = AM.get_language_holder(shadow=FALSE)
|
||||
if(L != src)
|
||||
if(is_type_in_typecache(dt, L.shadow_languages))
|
||||
return LANGUAGE_SHADOWED
|
||||
return FALSE
|
||||
|
||||
/datum/language_holder/proc/open_language_menu(mob/user)
|
||||
if(!language_menu)
|
||||
language_menu = new(src)
|
||||
language_menu.ui_interact(user)
|
||||
|
||||
/datum/language_holder/proc/get_atom()
|
||||
if(istype(owner, /atom/movable))
|
||||
. = owner
|
||||
else if(istype(owner, /datum/mind))
|
||||
var/datum/mind/M = owner
|
||||
if(M.current)
|
||||
. = M.current
|
||||
|
||||
/datum/language_holder/alien
|
||||
languages = list(/datum/language/xenocommon)
|
||||
|
||||
/datum/language_holder/monkey
|
||||
languages = list(/datum/language/monkey)
|
||||
|
||||
/datum/language_holder/swarmer
|
||||
languages = list(/datum/language/swarmer)
|
||||
|
||||
/datum/language_holder/clockmob
|
||||
languages = list(/datum/language/common, /datum/language/ratvar)
|
||||
only_speaks_language = /datum/language/ratvar
|
||||
|
||||
/datum/language_holder/drone
|
||||
languages = list(/datum/language/common, /datum/language/drone, /datum/language/machine)
|
||||
only_speaks_language = /datum/language/drone
|
||||
|
||||
/datum/language_holder/drone/syndicate
|
||||
only_speaks_language = null
|
||||
|
||||
/datum/language_holder/slime
|
||||
languages = list(/datum/language/common, /datum/language/slime)
|
||||
|
||||
/datum/language_holder/lightbringer
|
||||
// TODO change to a lightbringer specific sign language
|
||||
languages = list(/datum/language/slime)
|
||||
|
||||
/datum/language_holder/synthetic
|
||||
languages = list(/datum/language/common)
|
||||
shadow_languages = list(/datum/language/machine, /datum/language/draconic)
|
||||
|
||||
/datum/language_holder/universal/New()
|
||||
..()
|
||||
grant_all_languages(omnitongue=TRUE)
|
||||
@@ -1,11 +1,11 @@
|
||||
/datum/language_menu
|
||||
var/mob/living/owner
|
||||
var/datum/language_holder/language_holder
|
||||
|
||||
/datum/language_menu/New(new_owner)
|
||||
owner = new_owner
|
||||
/datum/language_menu/New(language_holder)
|
||||
src.language_holder = language_holder
|
||||
|
||||
/datum/language_menu/Destroy()
|
||||
owner = null
|
||||
language_holder = null
|
||||
. = ..()
|
||||
|
||||
/datum/language_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.language_menu_state)
|
||||
@@ -17,28 +17,38 @@
|
||||
/datum/language_menu/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
var/datum/language/mob_default_language = owner.get_default_language()
|
||||
var/atom/movable/AM = language_holder.get_atom()
|
||||
if(isliving(AM))
|
||||
data["is_living"] = TRUE
|
||||
else
|
||||
data["is_living"] = FALSE
|
||||
|
||||
data["languages"] = list()
|
||||
for(var/ld in owner.languages)
|
||||
for(var/ld in GLOB.all_languages)
|
||||
var/result = language_holder.has_language(ld)
|
||||
if(!result)
|
||||
continue
|
||||
var/shadow = result == LANGUAGE_SHADOWED
|
||||
var/datum/language/LD = ld
|
||||
var/list/L = list()
|
||||
|
||||
L["name"] = initial(LD.name)
|
||||
L["desc"] = initial(LD.desc)
|
||||
L["key"] = initial(LD.key)
|
||||
L["is_default"] = (LD == mob_default_language)
|
||||
L["can_speak"] = owner.can_speak_in_language(LD)
|
||||
L["is_default"] = (LD == language_holder.selected_default_language)
|
||||
L["shadow"] = shadow
|
||||
if(AM)
|
||||
L["can_speak"] = AM.can_speak_in_language(LD)
|
||||
|
||||
data["languages"] += list(L)
|
||||
|
||||
if(check_rights_for(user.client, R_ADMIN))
|
||||
if(check_rights_for(user.client, R_ADMIN) || isobserver(AM))
|
||||
data["admin_mode"] = TRUE
|
||||
data["omnitongue"] = HAS_SECONDARY_FLAG(owner, OMNITONGUE)
|
||||
data["omnitongue"] = language_holder.omnitongue
|
||||
|
||||
data["unknown_languages"] = list()
|
||||
for(var/ld in subtypesof(/datum/language))
|
||||
if(owner.has_language(ld))
|
||||
for(var/ld in GLOB.all_languages)
|
||||
if(language_holder.has_language(ld))
|
||||
continue
|
||||
var/datum/language/LD = ld
|
||||
var/list/L = list()
|
||||
@@ -54,10 +64,11 @@
|
||||
if(..())
|
||||
return
|
||||
var/mob/user = usr
|
||||
var/atom/movable/AM = language_holder.get_atom()
|
||||
|
||||
var/language_name = params["language_name"]
|
||||
var/datum/language/language_datum
|
||||
for(var/ld in subtypesof(/datum/language))
|
||||
for(var/ld in GLOB.all_languages)
|
||||
var/datum/language/LD = ld
|
||||
if(language_name == initial(LD.name))
|
||||
language_datum = LD
|
||||
@@ -66,23 +77,26 @@
|
||||
switch(action)
|
||||
if("select_default")
|
||||
if(language_datum)
|
||||
owner.selected_default_language = language_datum
|
||||
language_holder.selected_default_language = language_datum
|
||||
. = TRUE
|
||||
if("grant_language")
|
||||
if(is_admin && language_datum)
|
||||
owner.grant_language(language_datum)
|
||||
message_admins("[key_name_admin(user)] granted the [language_name] language to [key_name_admin(owner)].")
|
||||
log_admin("[key_name(user)] granted the language [language_name] to [key_name(owner)].")
|
||||
if((is_admin || isobserver(AM)) && language_datum)
|
||||
language_holder.grant_language(language_datum)
|
||||
if(is_admin)
|
||||
message_admins("[key_name_admin(user)] granted the [language_name] language to [key_name_admin(AM)].")
|
||||
log_admin("[key_name(user)] granted the language [language_name] to [key_name(AM)].")
|
||||
. = TRUE
|
||||
if("remove_language")
|
||||
if(is_admin && language_datum)
|
||||
owner.remove_language(language_datum)
|
||||
message_admins("[key_name_admin(user)] removed the [language_name] language to [key_name_admin(owner)].")
|
||||
log_admin("[key_name(user)] removed the language [language_name] to [key_name(owner)].")
|
||||
if((is_admin || isobserver(AM)) && language_datum)
|
||||
language_holder.remove_language(language_datum)
|
||||
if(is_admin)
|
||||
message_admins("[key_name_admin(user)] removed the [language_name] language to [key_name_admin(AM)].")
|
||||
log_admin("[key_name(user)] removed the language [language_name] to [key_name(AM)].")
|
||||
. = TRUE
|
||||
if("toggle_omnitongue")
|
||||
if(is_admin)
|
||||
TOGGLE_SECONDARY_FLAG(owner, OMNITONGUE)
|
||||
message_admins("[key_name_admin(user)] [HAS_SECONDARY_FLAG(owner, OMNITONGUE) ? "enabled" : "disabled"] the ability to speak all languages (that they know) of [key_name_admin(owner)].")
|
||||
log_admin("[key_name(user)] [HAS_SECONDARY_FLAG(owner, OMNITONGUE) ? "enabled" : "disabled"] the ability to speak all languages (that_they know) of [key_name(owner)].")
|
||||
if(is_admin || isobserver(AM))
|
||||
language_holder.omnitongue = !language_holder.omnitongue
|
||||
if(is_admin)
|
||||
message_admins("[key_name_admin(user)] [language_holder.omnitongue ? "enabled" : "disabled"] the ability to speak all languages (that they know) of [key_name_admin(AM)].")
|
||||
log_admin("[key_name(user)] [language_holder.omnitongue ? "enabled" : "disabled"] the ability to speak all languages (that_they know) of [key_name(AM)].")
|
||||
. = TRUE
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
diff a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm (rejected hunks)
|
||||
@@ -117,10 +117,12 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
|
||||
animate(src, pixel_y = 2, time = 10, loop = -1)
|
||||
|
||||
- grant_all_languages()
|
||||
GLOB.dead_mob_list += src
|
||||
+
|
||||
..()
|
||||
|
||||
+ grant_all_languages()
|
||||
+
|
||||
/mob/dead/observer/narsie_act()
|
||||
var/old_color = color
|
||||
color = "#960000"
|
||||
@@ -27,10 +27,9 @@
|
||||
message = capitalize(message)
|
||||
return message
|
||||
|
||||
/mob/living/brain/can_speak_in_language(datum/language/dt)
|
||||
if(HAS_SECONDARY_FLAG(src, OMNITONGUE))
|
||||
. = has_language(dt)
|
||||
else if(istype(container, /obj/item/device/mmi/posibrain/soul_vessel))
|
||||
. = has_language(dt) && ispath(dt, /datum/language/ratvar)
|
||||
/mob/living/brain/could_speak_in_language(datum/language/dt)
|
||||
if(istype(container, /obj/item/device/mmi/posibrain/soul_vessel))
|
||||
// soul vessels can only speak ratvarian.
|
||||
. = ispath(dt, /datum/language/ratvar)
|
||||
else
|
||||
. = ..()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
sight = SEE_MOBS
|
||||
see_in_dark = 4
|
||||
verb_say = "hisses"
|
||||
initial_languages = list(/datum/language/xenocommon)
|
||||
initial_language_holder = /datum/language_holder/alien
|
||||
bubble_icon = "alien"
|
||||
type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
|
||||
var/nightvision = 1
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
icon = 'icons/mob/human.dmi'
|
||||
icon_state = "caucasian_m"
|
||||
|
||||
// ME TARZAN, YOU JANEBOT
|
||||
initial_languages = list(/datum/language/common)
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/dummy
|
||||
real_name = "Test Dummy"
|
||||
status_flags = GODMODE|CANPUSH
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/mob/living/carbon/human
|
||||
initial_languages = list(/datum/language/common)
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD)
|
||||
possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)
|
||||
pressure_resistance = 25
|
||||
@@ -49,4 +48,4 @@
|
||||
var/datum/personal_crafting/handcrafting
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
can_ride_typecache = list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot)
|
||||
can_ride_typecache = list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "monkey"
|
||||
voice_name = "monkey"
|
||||
verb_say = "chimpers"
|
||||
initial_languages = list(/datum/language/monkey)
|
||||
initial_language_holder = /datum/language_holder/monkey
|
||||
icon = 'icons/mob/monkey.dmi'
|
||||
icon_state = ""
|
||||
gender = NEUTER
|
||||
|
||||
@@ -29,14 +29,9 @@
|
||||
if(I)
|
||||
. |= I.get_held_item_speechspans(src)
|
||||
|
||||
/mob/living/carbon/can_speak_in_language(datum/language/dt)
|
||||
if(HAS_SECONDARY_FLAG(src, OMNITONGUE))
|
||||
. = has_language(dt)
|
||||
else if(has_language(dt))
|
||||
var/obj/item/organ/tongue/T = getorganslot("tongue")
|
||||
if(T)
|
||||
. = T.can_speak_in_language(dt)
|
||||
else
|
||||
. = initial(dt.flags) & TONGUELESS_SPEECH
|
||||
/mob/living/carbon/could_speak_in_language(datum/language/dt)
|
||||
var/obj/item/organ/tongue/T = getorganslot("tongue")
|
||||
if(T)
|
||||
. = T.could_speak_in_language(dt)
|
||||
else
|
||||
. = FALSE
|
||||
. = initial(dt.flags) & TONGUELESS_SPEECH
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
medhud.add_to_hud(src)
|
||||
faction += "\ref[src]"
|
||||
|
||||
language_menu = new(src)
|
||||
|
||||
|
||||
/mob/living/prepare_huds()
|
||||
..()
|
||||
@@ -50,8 +48,6 @@
|
||||
staticOverlays.len = 0
|
||||
remove_from_all_data_huds()
|
||||
|
||||
QDEL_NULL(language_menu)
|
||||
|
||||
return ..()
|
||||
|
||||
/mob/living/ghostize(can_reenter_corpse = 1)
|
||||
|
||||
@@ -74,4 +74,3 @@
|
||||
var/datum/riding/riding_datum
|
||||
|
||||
var/datum/language/selected_default_language
|
||||
var/datum/language_menu/language_menu
|
||||
|
||||
@@ -167,11 +167,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
spans += get_spans()
|
||||
|
||||
if(language)
|
||||
var/datum/language/L = GLOB.language_datums[language]
|
||||
if(!istype(L))
|
||||
L = new language
|
||||
GLOB.language_datums[language] = L
|
||||
|
||||
var/datum/language/L = GLOB.language_datum_instances[language]
|
||||
spans |= L.spans
|
||||
|
||||
//Log what we've said with an associated timestamp, using the list's len for safety/to prevent overwriting messages
|
||||
@@ -308,13 +304,9 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
return GLOB.department_radio_keys[key_symbol]
|
||||
|
||||
/mob/living/proc/get_message_language(message)
|
||||
var/static/list/langlist
|
||||
if(!langlist)
|
||||
langlist = subtypesof(/datum/language)
|
||||
|
||||
if(copytext(message, 1, 2) == ",")
|
||||
var/key = copytext(message, 2, 3)
|
||||
for(var/ld in langlist)
|
||||
for(var/ld in GLOB.all_languages)
|
||||
var/datum/language/LD = ld
|
||||
if(initial(LD.key) == key)
|
||||
return LD
|
||||
@@ -435,17 +427,14 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/mob/living/get_default_language()
|
||||
if(selected_default_language)
|
||||
if(has_language(selected_default_language))
|
||||
return selected_default_language
|
||||
else
|
||||
selected_default_language = null
|
||||
|
||||
. = ..()
|
||||
|
||||
/mob/living/proc/open_language_menu(mob/user)
|
||||
language_menu.ui_interact(user)
|
||||
|
||||
/mob/living/whisper(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null)
|
||||
say("#[message]", bubble_type, spans, sanitize, language)
|
||||
|
||||
/mob/living/get_language_holder(shadow=TRUE)
|
||||
if(mind && shadow)
|
||||
// Mind language holders shadow mob holders.
|
||||
. = mind.get_language_holder()
|
||||
if(.)
|
||||
return .
|
||||
|
||||
. = ..()
|
||||
|
||||
@@ -164,11 +164,9 @@
|
||||
|
||||
#endif
|
||||
|
||||
/mob/living/silicon/ai/can_speak_in_language(datum/language/dt)
|
||||
if(HAS_SECONDARY_FLAG(src, OMNITONGUE))
|
||||
. = has_language(dt)
|
||||
else if(is_servant_of_ratvar(src))
|
||||
/mob/living/silicon/ai/could_speak_in_language(datum/language/dt)
|
||||
if(is_servant_of_ratvar(src))
|
||||
// Ratvarian AIs can only speak Ratvarian
|
||||
. = ispath(dt, /datum/language/ratvar) && has_language(dt)
|
||||
. = ispath(dt, /datum/language/ratvar)
|
||||
else
|
||||
. = ..()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
verb_ask = "queries"
|
||||
verb_exclaim = "declares"
|
||||
verb_yell = "alarms"
|
||||
initial_languages = list(/datum/language/common, /datum/language/machine)
|
||||
initial_language_holder = /datum/language_holder/synthetic
|
||||
see_in_dark = 8
|
||||
bubble_icon = "machine"
|
||||
weather_immunities = list("ash")
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
verb_ask = "queries"
|
||||
verb_exclaim = "declares"
|
||||
verb_yell = "alarms"
|
||||
initial_languages = list(/datum/language/common, /datum/language/machine)
|
||||
initial_language_holder = /datum/language_holder/synthetic
|
||||
bubble_icon = "machine"
|
||||
|
||||
faction = list("neutral", "silicon" , "turret")
|
||||
|
||||
@@ -37,8 +37,7 @@
|
||||
voice_name = "synthesized chirp"
|
||||
speak_emote = list("chirps")
|
||||
bubble_icon = "machine"
|
||||
initial_languages = list(/datum/language/common, /datum/language/machine, /datum/language/drone)
|
||||
only_speaks_language = /datum/language/drone
|
||||
initial_language_holder = /datum/language_holder/drone
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
has_unlimited_silicon_privilege = 1
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
picked = TRUE //the appearence of syndrones is static, you don't get to change it.
|
||||
health = 30
|
||||
maxHealth = 120 //If you murder other drones and cannibalize them you can get much stronger
|
||||
initial_language_holder = /datum/language_holder/drone/syndicate
|
||||
faction = list("syndicate")
|
||||
speak_emote = list("hisses")
|
||||
bubble_icon = "syndibot"
|
||||
@@ -110,8 +111,7 @@
|
||||
verb_exclaim = "proclaims"
|
||||
verb_yell = "harangues"
|
||||
bubble_icon = "clock"
|
||||
initial_languages = list(/datum/language/common, /datum/language/ratvar)
|
||||
only_speaks_language = /datum/language/ratvar
|
||||
initial_language_holder = /datum/language_holder/clockmob
|
||||
light_color = "#E42742"
|
||||
heavy_emp_damage = 0
|
||||
laws = "0. Purge all untruths and honor Ratvar."
|
||||
|
||||
@@ -647,8 +647,7 @@ Difficulty: Very Hard
|
||||
verb_ask = "floats inquisitively"
|
||||
verb_exclaim = "zaps"
|
||||
verb_yell = "bangs"
|
||||
initial_languages = list(/datum/language/common, /datum/language/slime)
|
||||
only_speaks_language = /datum/language/slime
|
||||
initial_language_holder = /datum/language_holder/lightbringer
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
light_range = 4
|
||||
faction = list("neutral")
|
||||
|
||||
@@ -7,9 +7,6 @@
|
||||
|
||||
status_flags = CANPUSH
|
||||
|
||||
// goats bray, cows go moo, and the fox says Geckers
|
||||
initial_languages = list(/datum/language/common)
|
||||
|
||||
var/icon_living = ""
|
||||
var/icon_dead = "" //icon when the animal is dead. Don't use animated icons for this.
|
||||
var/icon_gib = null //We only try to show a gibbing animation if this exists.
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
emote_see = list("jiggles", "bounces in place")
|
||||
speak_emote = list("telepathically chirps")
|
||||
bubble_icon = "slime"
|
||||
initial_languages = list(/datum/language/common, /datum/language/slime)
|
||||
initial_language_holder = /datum/language_holder/slime
|
||||
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
|
||||
|
||||
@@ -751,7 +751,6 @@
|
||||
client.move_delay += movement_delay()
|
||||
return 1
|
||||
|
||||
|
||||
/mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check
|
||||
return 0
|
||||
|
||||
@@ -1014,3 +1013,10 @@
|
||||
if("logging")
|
||||
return debug_variable(var_name, logging, 0, src, FALSE)
|
||||
. = ..()
|
||||
|
||||
/mob/verb/open_language_menu()
|
||||
set name = "Open Language Menu"
|
||||
set category = "IC"
|
||||
|
||||
var/datum/language_holder/H = get_language_holder()
|
||||
H.open_language_menu(usr)
|
||||
|
||||
@@ -60,7 +60,6 @@
|
||||
obj_integrity = 1000
|
||||
max_integrity = 1000
|
||||
verb_say = "chants"
|
||||
initial_languages = list(/datum/language/common)
|
||||
var/obj/machinery/power/emitter/energycannon/magical/our_statue
|
||||
var/list/mob/living/sleepers = list()
|
||||
var/never_spoken = TRUE
|
||||
@@ -148,11 +147,11 @@
|
||||
3. Don't get messed up in their affairs."
|
||||
status_flags = GODMODE // Please don't punch the barkeeper
|
||||
unique_name = FALSE // disables the (123) number suffix
|
||||
initial_language_holder = /datum/language_holder/universal
|
||||
|
||||
/mob/living/simple_animal/drone/snowflake/bardrone/Initialize()
|
||||
. = ..()
|
||||
access_card.access |= GLOB.access_cent_bar
|
||||
grant_all_languages(omnitongue=TRUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/maid/barmaid
|
||||
gold_core_spawnable = 0
|
||||
@@ -163,6 +162,7 @@
|
||||
unique_name = FALSE
|
||||
AIStatus = AI_OFF
|
||||
stop_automated_movement = TRUE
|
||||
initial_language_holder = /datum/language_holder/universal
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/maid/barmaid/Initialize()
|
||||
. = ..()
|
||||
@@ -172,8 +172,6 @@
|
||||
access_card.access |= GLOB.access_cent_bar
|
||||
access_card.flags |= NODROP
|
||||
|
||||
grant_all_languages(omnitongue=TRUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy()
|
||||
qdel(access_card)
|
||||
. = ..()
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
if(say_mod && M.dna && M.dna.species)
|
||||
M.dna.species.say_mod = initial(M.dna.species.say_mod)
|
||||
|
||||
/obj/item/organ/tongue/can_speak_in_language(datum/language/dt)
|
||||
/obj/item/organ/tongue/could_speak_in_language(datum/language/dt)
|
||||
. = is_type_in_typecache(dt, languages_possible)
|
||||
|
||||
/obj/item/organ/tongue/lizard
|
||||
|
||||
@@ -10,5 +10,5 @@ GLOBAL_DATUM_INIT(language_menu_state, /datum/ui_state/language_menu, new)
|
||||
. = UI_INTERACTIVE
|
||||
else if(istype(src_object, /datum/language_menu))
|
||||
var/datum/language_menu/LM = src_object
|
||||
if(LM.owner == user)
|
||||
if(LM.language_holder.get_atom() == user)
|
||||
. = UI_INTERACTIVE
|
||||
|
||||
Reference in New Issue
Block a user