mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-21 12:02:31 +01:00
Runtime map now has a bunch of new areas / items with often-tested stuffs, and some hard-to-put-at-runtime stuffs. Runtime map jobs now are positioned to make it faster to reach the aforementioned often-tested stuffs. Runtime map doesn't generate an overmap anymore by default, which speeds up the process. Runtime map now loads in ~11 seconds instead of ~40 seconds as it was before. Updated the maploader to be faster in parsing maps. Bapi is not engaged anymore if we're only measuring the map size, which speeds up the process. In fastboot we do not generate the codexes anymore, which speeds up the process. In fastboot and if exoplanets and away sites are not enabled, we do not parse the map templates anymore, which speeds up the process. Updated the icon smoothing to be faster. Optimized cargo area code. Other optimizations.
166 lines
5.8 KiB
Plaintext
166 lines
5.8 KiB
Plaintext
/mob/living/silicon/robot/handle_speech_problems(message, say_verb, message_mode, message_range)
|
|
if(!message_range)
|
|
message_range = world.view
|
|
//Handle gibberish when components are damaged
|
|
if(message_mode)
|
|
//If we have a radio message, just look at the damage of the radio
|
|
var/datum/robot_component/C = get_component("radio")
|
|
if(C.get_damage())
|
|
. = TRUE
|
|
message = Gibberish(message, C.max_damage / C.get_damage())
|
|
else
|
|
var/damaged = 100 - (clamp(health, 0, maxHealth) / maxHealth) * 100
|
|
if(damaged > 40)
|
|
. = TRUE
|
|
message = Gibberish(message, damaged - 10)
|
|
|
|
/mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, whisper)
|
|
if(message_mode == "whisper" && !whisper)
|
|
whisper(message, speaking, say_verb = TRUE)
|
|
return TRUE
|
|
if(message_mode)
|
|
if(!is_component_functioning("radio"))
|
|
to_chat(src, SPAN_WARNING("Your radio isn't functional at this time."))
|
|
return 0
|
|
if(message_mode == "general")
|
|
message_mode = null
|
|
log_say("[key_name(src)] : [message]")
|
|
return common_radio.talk_into(src, message, message_mode, verb, speaking)
|
|
|
|
/mob/living/silicon/robot/drone/handle_message_mode()
|
|
return null
|
|
|
|
/mob/living/silicon/ai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, whisper)
|
|
if(message_mode == "whisper" && !whisper)
|
|
whisper(message, speaking, say_verb = TRUE)
|
|
return TRUE
|
|
if(message_mode == "department")
|
|
log_say("[key_name(src)] : [message]")
|
|
return holopad_talk(message, verb, speaking)
|
|
else if(message_mode)
|
|
if(ai_radio.disabledAi || ai_restore_power_routine || stat)
|
|
to_chat(src, SPAN_DANGER("System Error - Transceiver Disabled."))
|
|
return FALSE
|
|
if(message_mode == "general")
|
|
message_mode = null
|
|
log_say("[key_name(src)] : [message]")
|
|
return ai_radio.talk_into(src, message, message_mode, verb, speaking)
|
|
|
|
/mob/living/silicon/pai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, whisper)
|
|
if(message_mode)
|
|
if(message_mode == "whisper" && !whisper)
|
|
whisper(message, speaking, say_verb = TRUE)
|
|
return TRUE
|
|
if(message_mode == "general")
|
|
message_mode = null
|
|
log_say("[key_name(src)] : [message]")
|
|
return radio.talk_into(src, message, message_mode, verb, speaking)
|
|
|
|
/mob/living/silicon/say_quote(var/text, var/datum/language/speaking = null, var/singing = FALSE, var/whisper = FALSE)
|
|
if(singing)
|
|
return "sings"
|
|
if(whisper)
|
|
return "whispers"
|
|
var/ending = copytext(text, length(text))
|
|
if(ending == "?")
|
|
return speak_query
|
|
else if(ending == "!")
|
|
return speak_exclamation
|
|
return speak_statement
|
|
|
|
/mob/living/silicon/robot/drone/say_quote(var/message, var/datum/language/speaking = null, var/singing = FALSE)
|
|
if(speaking)
|
|
var/ending = copytext(message, length(message))
|
|
var/pre_ending = copytext(message, length(message) - 1, length(message))
|
|
return speaking.get_spoken_verb(ending, pre_ending, singing)
|
|
return ..()
|
|
|
|
#define IS_AI 1
|
|
#define IS_ROBOT 2
|
|
#define IS_PAI 3
|
|
|
|
/mob/living/silicon/say_understands(var/other, var/datum/language/speaking = null)
|
|
//These only pertain to common. Languages are handled by mob/say_understands()
|
|
if(!speaking)
|
|
if(istype(other, /mob/living/carbon))
|
|
return TRUE
|
|
if(istype(other, /mob/living/silicon))
|
|
return TRUE
|
|
if (istype(other, /mob/living/announcer))
|
|
return TRUE
|
|
if(istype(other, /mob/living/carbon/brain))
|
|
return TRUE
|
|
return ..()
|
|
|
|
//For holopads only. Usable by AI.
|
|
/mob/living/silicon/ai/proc/holopad_talk(var/message, verb, datum/language/speaking)
|
|
log_say("[key_name(src)] : [message]")
|
|
message = trim(message)
|
|
if(!message)
|
|
return
|
|
|
|
var/obj/machinery/hologram/holopad/H = src.holo
|
|
if(H?.active_holograms[src])//If there is a hologram and its master is the user.
|
|
// AI can hear their own message, this formats it for them.
|
|
if(speaking)
|
|
to_chat(src, "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> [speaking.format_message(message, verb)]</span></i>")
|
|
else
|
|
to_chat(src, "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> [verb], <span class='message'><span class='body'>\"[message]\"</span></span></span></i>")
|
|
|
|
//This is so pAI's and people inside lockers/boxes,etc can hear the AI Holopad, the alternative being recursion through contents.
|
|
//This is much faster.
|
|
var/list/listening = list()
|
|
var/list/listening_obj = list()
|
|
var/turf/T = get_turf(H)
|
|
|
|
if(T)
|
|
var/list/hear = get_hear(7, T)
|
|
var/list/hearturfs = list()
|
|
|
|
for(var/I in hear)
|
|
if(istype(I, /mob))
|
|
var/mob/M = I
|
|
listening += M
|
|
hearturfs += get_turf(M)
|
|
for(var/obj/O in M.contents)
|
|
listening_obj |= O
|
|
else if(istype(I, /obj))
|
|
var/obj/O = I
|
|
hearturfs += get_turf(O)
|
|
listening_obj |= O
|
|
|
|
|
|
for(var/mob/M in GLOB.player_list)
|
|
if(M.stat == DEAD && M.client?.prefs.toggles & CHAT_GHOSTEARS)
|
|
M.hear_say(message, verb, speaking, null, null, src)
|
|
continue
|
|
if(M.loc && (get_turf(M) in hearturfs))
|
|
M.hear_say(message, verb, speaking, null, null, src)
|
|
else
|
|
to_chat(src, SPAN_WARNING("No holopad connected."))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/mob/living/silicon/ai/proc/holopad_emote(var/message) //This is called when the AI uses the 'me' verb while using a holopad.
|
|
log_emote("[key_name(src)] : [message]")
|
|
|
|
message = trim(message)
|
|
if(!message)
|
|
return
|
|
|
|
var/obj/machinery/hologram/holopad/T = src.holo
|
|
if(T?.active_holograms[src])
|
|
var/rendered = "<span class='game say'><span class='name'>[name]</span> <span class='message'>[message]</span></span>"
|
|
to_chat(src, "<i><span class='game say'>Holopad action relayed, <span class='name'>[real_name]</span> <span class='message'>[message]</span></span></i>")
|
|
|
|
for(var/mob/M in viewers(get_turf(T)))
|
|
to_chat(M, rendered)
|
|
else //This shouldn't occur, but better safe then sorry.
|
|
to_chat(src, SPAN_WARNING("No holopad connected."))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
#undef IS_AI
|
|
#undef IS_ROBOT
|
|
#undef IS_PAI
|