Merge branch 'master' into master

This commit is contained in:
Thalpy
2019-07-13 19:33:46 +01:00
committed by GitHub
126 changed files with 901 additions and 582 deletions
+1
View File
@@ -14,6 +14,7 @@
var/verb_exclaim = "exclaims"
var/verb_whisper = "whispers"
var/verb_yell = "yells"
var/speech_span
var/inertia_dir = 0
var/atom/inertia_last_loc
var/inertia_moving = 0
+5 -1
View File
@@ -275,7 +275,7 @@ Credit where due:
gloves = /obj/item/clothing/gloves/color/yellow
belt = /obj/item/storage/belt/utility/servant
backpack_contents = list(/obj/item/storage/box/engineer = 1, \
/obj/item/clockwork/replica_fabricator = 1, /obj/item/stack/tile/brass/fifty = 1, /obj/item/paper/servant_primer = 1)
/obj/item/clockwork/replica_fabricator = 1, /obj/item/stack/tile/brass/fifty = 1, /obj/item/paper/servant_primer = 1, /obj/item/reagent_containers/food/drinks/holyoil = 1)
id = /obj/item/pda
var/plasmaman //We use this to determine if we should activate internals in post_equip()
@@ -338,6 +338,10 @@ Credit where due:
CLOCKCULTCHANGELOG\
</ul>\
<hr>\
<li><b>Zelus oil:</b> A new reagent. It can be used to heal the faithful to Ratvar, or kill heretics and moreso stun blood cultists,\
or splashed onto metal sheets to make brass. This chemical can be found in minimal quantities by grinding brass sheets.\
<li><b>Brass Flasks:</b>Intended to store Zelus Oil in, but can also be used as fragile single use throwing weapons in a pinch! \
These are crafted with a single sheet of brass and fit in the Clockwork Cuirass' suit storage.\
<b>Good luck!</b>"
/obj/item/paper/servant_primer/Initialize()
+2 -2
View File
@@ -96,10 +96,10 @@ GLOBAL_LIST_EMPTY(announcement_systems)
message = "The arrivals shuttle has been damaged. Docking for repairs..."
if(channels.len == 0)
radio.talk_into(src, message, null, list(SPAN_ROBOT), get_default_language())
radio.talk_into(src, message, null)
else
for(var/channel in channels)
radio.talk_into(src, message, channel, list(SPAN_ROBOT), get_default_language())
radio.talk_into(src, message, channel)
//config stuff
+1 -4
View File
@@ -49,12 +49,9 @@
if(next_warning < world.time && prob(15))
var/area/A = get_area(loc)
var/message = "Unauthorized credit withdrawal underway in [A.map_name]!!"
radio.talk_into(src, message, radio_channel, get_spans())
radio.talk_into(src, message, radio_channel)
next_warning = world.time + minimum_time_between_warnings
/obj/machinery/computer/bank_machine/get_spans()
. = ..() | SPAN_ROBOT
/obj/machinery/computer/bank_machine/ui_interact(mob/user)
. = ..()
var/dat = "[station_name()] secure vault. Authorized personnel only.<br>"
+1 -1
View File
@@ -6,7 +6,7 @@
#define CLONE_INITIAL_DAMAGE 150 //Clones in clonepods start with 150 cloneloss damage and 150 brainloss damage, thats just logical
#define MINIMUM_HEAL_LEVEL 40
#define SPEAK(message) radio.talk_into(src, message, radio_channel, get_spans(), get_default_language())
#define SPEAK(message) radio.talk_into(src, message, radio_channel)
/obj/machinery/clonepod
name = "cloning pod"
@@ -250,11 +250,11 @@
itemname = "a syndicate bomb beacon"
new /obj/item/sbeacondrop/bomb(loc)
if(2)
itemname = "a grenade launcher"
new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(loc)
new /obj/item/ammo_casing/a40mm(loc)
new /obj/item/ammo_casing/a40mm(loc)
new /obj/item/ammo_casing/a40mm(loc)
itemname = "a rocket launcher"
new /obj/item/gun/ballistic/rocketlauncher/unrestricted(loc)
new /obj/item/ammo_casing/caseless/rocket(loc)
new /obj/item/ammo_casing/caseless/rocket(loc)
new /obj/item/ammo_casing/caseless/rocket(loc)
if(3)
itemname = "two bags of c4"
new /obj/item/storage/backpack/duffelbag/syndie/c4(loc)
+2 -2
View File
@@ -323,7 +323,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
emergency = "Medical"
if(radio_freq)
Radio.set_frequency(radio_freq)
Radio.talk_into(src,"[emergency] emergency in [department]!!",radio_freq,get_spans(),get_default_language())
Radio.talk_into(src,"[emergency] emergency in [department]!!",radio_freq)
update_icon()
addtimer(CALLBACK(src, .proc/clear_emergency), 3000)
@@ -382,7 +382,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
screen = 6
if(radio_freq)
Radio.talk_into(src,"[alert]: <i>[message]</i>",radio_freq,get_spans(),get_default_language())
Radio.talk_into(src, "[alert]: <i>[message]</i>", radio_freq)
switch(priority)
if(2)
@@ -120,6 +120,33 @@
loot = GLOB.maintenance_loot
. = ..()
/obj/effect/spawner/lootdrop/glowstick
name = "random colored glowstick"
icon = 'icons/obj/lighting.dmi'
icon_state = "random_glowstick"
/obj/effect/spawner/lootdrop/glowstick/Initialize()
loot = typesof(/obj/item/flashlight/glowstick)
. = ..()
/obj/effect/spawner/lootdrop/gloves
name = "random gloves"
desc = "These gloves are supposed to be a random color..."
icon = 'icons/obj/clothing/gloves.dmi'
icon_state = "random_gloves"
loot = list(
/obj/item/clothing/gloves/color/orange = 1,
/obj/item/clothing/gloves/color/red = 1,
/obj/item/clothing/gloves/color/blue = 1,
/obj/item/clothing/gloves/color/purple = 1,
/obj/item/clothing/gloves/color/green = 1,
/obj/item/clothing/gloves/color/grey = 1,
/obj/item/clothing/gloves/color/light_brown = 1,
/obj/item/clothing/gloves/color/brown = 1,
/obj/item/clothing/gloves/color/white = 1,
/obj/item/clothing/gloves/color/rainbow = 1)
/obj/effect/spawner/lootdrop/crate_spawner
name = "lootcrate spawner" //USE PROMO CODE "SELLOUT" FOR 20% OFF!
lootdoubles = FALSE
-8
View File
@@ -230,9 +230,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
research_msg += "."
to_chat(user, research_msg.Join())
/obj/item/proc/speechModification(message) //for message modding by mask slot.
return message
/obj/item/interact(mob/user)
add_fingerprint(user)
ui_interact(user)
@@ -647,11 +644,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
else
. = ""
//when an item modify our speech spans when in our active hand. Override this to modify speech spans.
/obj/item/proc/get_held_item_speechspans(mob/living/carbon/user)
return
/obj/item/hitby(atom/movable/AM)
return
@@ -512,17 +512,6 @@
name = "pink glowstick"
color = LIGHT_COLOR_PINK
/obj/item/flashlight/glowstick/random
name = "random colored glowstick"
icon_state = "random_glowstick"
color = null
/obj/item/flashlight/glowstick/random/Initialize()
..()
var/T = pick(typesof(/obj/item/flashlight/glowstick) - /obj/item/flashlight/glowstick/random)
new T(loc)
return INITIALIZE_HINT_QDEL
/obj/item/flashlight/spotlight //invisible lighting source
name = "disco light"
desc = "Groovy..."
@@ -234,11 +234,18 @@
w_class = WEIGHT_CLASS_SMALL
actions_types = list(/datum/action/item_action/instrument)
/obj/item/instrument/harmonica/speechModification(message)
/obj/item/instrument/harmonica/proc/handle_speech(datum/source, list/speech_args)
if(song.playing && ismob(loc))
to_chat(loc, "<span class='warning'>You stop playing the harmonica to talk...</span>")
song.playing = FALSE
return message
/obj/item/instrument/harmonica/equipped(mob/M, slot)
. = ..()
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
/obj/item/instrument/harmonica/dropped(mob/M)
. = ..()
UnregisterSignal(M, COMSIG_MOB_SAY)
/obj/item/instrument/bikehorn
name = "gilded bike horn"
+18 -6
View File
@@ -17,13 +17,25 @@
user.say("AAAAAAAAAAAARGHHHHH", forced="megaphone suicide")//he must have died while coding this
return OXYLOSS
/obj/item/megaphone/get_held_item_speechspans(mob/living/carbon/user)
if(spamcheck > world.time)
to_chat(user, "<span class='warning'>\The [src] needs to recharge!</span>")
/obj/item/megaphone/equipped(mob/M, slot)
. = ..()
if (slot == SLOT_HANDS)
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
else
playsound(loc, 'sound/items/megaphone.ogg', 100, 0, 1)
spamcheck = world.time + 50
return voicespan
UnregisterSignal(M, COMSIG_MOB_SAY)
/obj/item/megaphone/dropped(mob/M)
. = ..()
UnregisterSignal(M, COMSIG_MOB_SAY)
/obj/item/megaphone/proc/handle_speech(mob/living/carbon/user, list/speech_args)
if (user.get_active_held_item() == src)
if(spamcheck > world.time)
to_chat(user, "<span class='warning'>\The [src] needs to recharge!</span>")
else
playsound(loc, 'sound/items/megaphone.ogg', 100, 0, 1)
spamcheck = world.time + 50
speech_args[SPEECH_SPANS] |= voicespan
/obj/item/megaphone/emag_act(mob/user)
if(obj_flags & EMAGGED)
@@ -189,7 +189,7 @@
/obj/item/radio/talk_into(atom/movable/M, message, channel, list/spans, datum/language/language)
if(!spans)
spans = M.get_spans()
spans = list(M.speech_span)
if(!language)
language = M.get_default_language()
INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans.Copy(), language)
+1 -3
View File
@@ -282,9 +282,7 @@
var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead
magichead.item_flags |= NODROP //curses!
magichead.flags_inv &= ~HIDEFACE //so you can still see their face
magichead.voicechange = TRUE //NEEEEIIGHH
if(!user.dropItemToGround(user.wear_mask))
qdel(user.wear_mask)
user.dropItemToGround(user.wear_mask, TRUE)
user.equip_to_slot_if_possible(magichead, SLOT_WEAR_MASK, TRUE, TRUE)
qdel(src)
else
+1 -1
View File
@@ -8,7 +8,7 @@
name = "artistic toolbox"
desc = "A toolbox painted bright green. Looking at it makes you feel uneasy."
icon_state = "his_grace"
item_state = "artistic_toolbox"
item_state = "toolbox_green"
lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
icon = 'icons/obj/items_and_weapons.dmi'
+2 -2
View File
@@ -15,7 +15,7 @@
var/mopping = 0
var/mopcount = 0
var/mopcap = 5
var/stamusage = 5
var/stamusage = 2
force_string = "robust... against germs"
var/insertable = TRUE
@@ -94,7 +94,7 @@
force = 6
throwforce = 8
throw_range = 4
stamusage = 2
stamusage = 1
var/refill_enabled = TRUE //Self-refill toggle for when a janitor decides to mop with something other than water.
var/refill_rate = 1 //Rate per process() tick mop refills itself
var/refill_reagent = "water" //Determins what reagent to use for refilling, just in case someone wanted to make a HOLY MOP OF PURGING
+1 -9
View File
@@ -578,10 +578,6 @@
icon_state = "vulken"
item_state = "vulken"
/obj/item/toy/plush/snakeplushie/jecca
icon_state = "jecca"
item_state = "jecca"
/obj/item/toy/plush/nukeplushie
name = "operative plushie"
desc = "A stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious."
@@ -634,13 +630,9 @@
/obj/item/toy/plush/mothplushie
name = "insect plushie"
desc = "An adorable stuffed toy that resembles some kind of insect"
icon_state = "cydia"
item_state = "cydia"
squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1)
/obj/item/toy/plush/mothplushie/bumble
icon_state = "bumble"
item_state = "bumble"
squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1)
/obj/item/toy/plush/mothplushie/nameko
icon_state = "nameko"
+9 -4
View File
@@ -159,11 +159,13 @@
armor = list("melee" = 25, "bullet" = 25, "laser" = 5, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 80)
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
item_state = "makeshift_shield"
icon = 'icons/obj/items_and_weapons.dmi'
item_state = "metal"
icon_state = "makeshift_shield"
materials = list(MAT_METAL = 18000)
slot_flags = null
block_chance = 25
force = 5
block_chance = 35
force = 10
throwforce = 7
/obj/item/shield/riot/tower
@@ -171,8 +173,11 @@
desc = "A massive shield that can block a lot of attacks, can take a lot of abuse before braking."
armor = list("melee" = 95, "bullet" = 95, "laser" = 75, "energy" = 60, "bomb" = 90, "bio" = 90, "rad" = 0, "fire" = 90, "acid" = 10) //Armor for the item, dosnt transfer to user
item_state = "metal"
icon_state = "metal"
icon = 'icons/obj/items_and_weapons.dmi'
block_chance = 75 //1/4 shots will hit*
force = 10
force = 16
slowdown = 2
throwforce = 15 //Massive pice of metal
w_class = WEIGHT_CLASS_HUGE
item_flags = SLOWS_WHILE_IN_HAND
@@ -424,6 +424,8 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
new/datum/stack_recipe("receiver - brass skewer", /obj/structure/destructible/clockwork/trap/brass_skewer, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_ADJACENT), \
new/datum/stack_recipe("receiver - steam vent", /obj/structure/destructible/clockwork/trap/steam_vent, 3, time = 30, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \
new/datum/stack_recipe("receiver - power nullifier", /obj/structure/destructible/clockwork/trap/power_nullifier, 5, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \
null,
new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/holyoil/null), \
))
@@ -441,7 +443,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
throw_range = 3
turf_type = /turf/open/floor/clockwork
novariants = FALSE
grind_results = list("iron" = 5, "teslium" = 15)
grind_results = list("iron" = 5, "teslium" = 15, "holyoil" = 1)
merge_type = /obj/item/stack/tile/brass
/obj/item/stack/tile/brass/narsie_act()
+60 -6
View File
@@ -1,3 +1,5 @@
GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
/obj/item/storage/toolbox
name = "toolbox"
desc = "Danger. Very robust."
@@ -16,21 +18,25 @@
hitsound = 'sound/weapons/smash.ogg'
var/latches = "single_latch"
var/has_latches = TRUE
var/can_rubberify = TRUE
/obj/item/storage/toolbox/Initialize()
/obj/item/storage/toolbox/Initialize(mapload)
. = ..()
if(has_latches)
if(prob(10))
latches = "double_latch"
if(prob(1))
latches = "triple_latch"
if(mapload && can_rubberify && prob(5))
rubberify()
update_icon()
/obj/item/storage/toolbox/update_icon()
..()
cut_overlays()
if(has_latches)
add_overlay(latches)
var/icon/I = icon('icons/obj/storage.dmi', latches)
add_overlay(I)
/obj/item/storage/toolbox/suicide_act(mob/user)
@@ -39,8 +45,6 @@
/obj/item/storage/toolbox/emergency
name = "emergency toolbox"
icon_state = "red"
item_state = "toolbox_red"
/obj/item/storage/toolbox/emergency/PopulateContents()
new /obj/item/crowbar/red(src)
@@ -59,6 +63,7 @@
name = "rusty red toolbox"
icon_state = "toolbox_red_old"
has_latches = FALSE
can_rubberify = FALSE
/obj/item/storage/toolbox/mechanical
name = "mechanical toolbox"
@@ -77,6 +82,7 @@
name = "rusty blue toolbox"
icon_state = "toolbox_blue_old"
has_latches = FALSE
can_rubberify = FALSE
/obj/item/storage/toolbox/mechanical/old/heirloom
name = "old, robust toolbox" //this will be named "X family toolbox"
@@ -151,6 +157,7 @@
resistance_flags = FIRE_PROOF | ACID_PROOF
w_class = WEIGHT_CLASS_HUGE
attack_verb = list("robusted", "crushed", "smashed")
can_rubberify = FALSE
var/fabricator_type = /obj/item/clockwork/replica_fabricator/scarab
/obj/item/storage/toolbox/brass/ComponentInitialize()
@@ -191,6 +198,7 @@
item_state = "toolbox_blue"
w_class = WEIGHT_CLASS_HUGE //heyo no bohing this!
force = 18 //spear damage
can_rubberify = FALSE
/obj/item/storage/toolbox/plastitanium/afterattack(atom/A, mob/user, proximity)
. = ..()
@@ -204,7 +212,7 @@
name = "artistic toolbox"
desc = "A toolbox painted bright green. Why anyone would store art supplies in a toolbox is beyond you, but it has plenty of extra space."
icon_state = "green"
item_state = "artistic_toolbox"
item_state = "toolbox_green"
w_class = WEIGHT_CLASS_GIGANTIC //Holds more than a regular toolbox!
/obj/item/storage/toolbox/artistic/ComponentInitialize()
@@ -253,9 +261,55 @@
/obj/item/storage/toolbox/gold_fake // used in crafting
name = "golden toolbox"
desc = "A gold plated toolbox, fancy and harmless do to the gold plating being on cardboard!"
desc = "A gold plated toolbox, fancy and harmless due to the gold plating being on cardboard!"
icon_state = "gold"
item_state = "gold"
has_latches = FALSE
force = 0
throwforce = 0
can_rubberify = FALSE
/obj/item/storage/toolbox/proc/rubberify()
name = "rubber [name]"
desc = replacetext(desc, "Danger", "Bouncy")
desc = replacetext(desc, "robust", "safe")
desc = replacetext(desc, "heavier", "bouncier")
DISABLE_BITFIELD(flags_1, CONDUCT_1)
materials = null
damtype = STAMINA
force += 3 //to compensate the higher stamina K.O. threshold compared to actual health.
throwforce += 3
attack_verb += "bounced"
hitsound = 'sound/effects/clownstep1.ogg'
if(!GLOB.rubber_toolbox_icons[icon_state])
generate_rubber_toolbox_icon()
icon = GLOB.rubber_toolbox_icons[icon_state]
AddComponent(/datum/component/bouncy)
. = ..()
/obj/item/storage/toolbox/proc/generate_rubber_toolbox_icon()
var/icon/new_icon = icon(icon, icon_state)
var/icon/smooth = icon('icons/obj/storage.dmi', "rubber_toolbox_blend")
new_icon.Blend(smooth, ICON_MULTIPLY)
new_icon = fcopy_rsc(new_icon)
GLOB.rubber_toolbox_icons[icon_state] = new_icon
/obj/item/storage/toolbox/rubber
name = "rubber toolbox"
desc = "Bouncy. Very safe."
flags_1 = null
materials = null
damtype = STAMINA
force = 17
throwforce = 17
attack_verb = list("robusted", "bounced")
can_rubberify = FALSE //we are already the future.
/obj/item/storage/toolbox/rubber/Initialize()
icon_state = pick("blue", "red", "yellow", "green")
item_state = "toolbox_[icon_state]"
if(!GLOB.rubber_toolbox_icons[icon_state])
generate_rubber_toolbox_icon()
icon = GLOB.rubber_toolbox_icons[icon_state]
. = ..()
AddComponent(/datum/component/bouncy)
+2 -3
View File
@@ -6,10 +6,9 @@
w_class = WEIGHT_CLASS_TINY
var/taste_sensitivity = 15
speech_span = null
/obj/item/taster/get_spans()
return list()
var/taste_sensitivity = 15
/obj/item/taster/afterattack(atom/O, mob/user, proximity)
. = ..()
+1 -1
View File
@@ -294,7 +294,7 @@
name = "windup toolbox"
desc = "A replica toolbox that rumbles when you turn the key."
icon_state = "his_grace"
item_state = "artistic_toolbox"
item_state = "toolbox_green"
lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
var/active = FALSE
+6 -1
View File
@@ -48,7 +48,12 @@
/obj/hitby(atom/movable/AM)
..()
take_damage(AM.throwforce, BRUTE, "melee", 1, get_dir(src, AM))
var/throwdamage = AM.throwforce
if(isobj(AM))
var/obj/O = AM
if(O.damtype == STAMINA)
throwdamage = 0
take_damage(throwdamage, BRUTE, "melee", 1, get_dir(src, AM))
/obj/ex_act(severity, target)
if(resistance_flags & INDESTRUCTIBLE)
+1 -3
View File
@@ -2,6 +2,7 @@
/obj
var/crit_fail = FALSE
animate_movement = 2
speech_span = SPAN_ROBOT
var/obj_flags = CAN_BE_HIT
var/set_obj_flags // ONLY FOR MAPPING: Sets flags from a string list, handled in Initialize. Usage: set_obj_flags = "EMAGGED;!CAN_BE_HIT" to set EMAGGED and clear CAN_BE_HIT.
@@ -204,9 +205,6 @@
if(!anchored || current_size >= STAGE_FIVE)
step_towards(src,S)
/obj/get_spans()
return ..() | SPAN_ROBOT
/obj/get_dumping_location(datum/component/storage/source,mob/user)
return get_turf(src)
+10
View File
@@ -294,6 +294,16 @@
icon = "the_lightbulb"
desc = "A cafe popular among moths and moffs. Once shut down for a week after the bartender used mothballs to protect her spare uniforms."
/datum/barsign/cybersylph
name = "Cyber Sylph's"
icon = "cybersylph"
desc = "A cafe renowed for its out-of-boundaries futuristic insignia."
/datum/barsign/meow_mix
name = "Meow Mix"
icon = "meow_mix"
desc = "No, we don't serve catnip, officer!"
/datum/barsign/hiddensigns
hidden = TRUE
+1 -1
View File
@@ -262,7 +262,7 @@
if(isobj(AM))
if(prob(50) && anchored && !broken)
var/obj/O = AM
if(O.throwforce != 0)//don't want to let people spam tesla bolts, this way it will break after time
if(O.throwforce != 0 && O.damtype != STAMINA)//don't want to let people spam tesla bolts, this way it will break after time
var/turf/T = get_turf(src)
var/obj/structure/cable/C = T.get_cable_node()
if(C)
+2 -6
View File
@@ -23,7 +23,7 @@ GLOBAL_LIST_INIT(freqtospan, list(
return
if(message == "" || !message)
return
spans |= get_spans()
spans |= speech_span
if(!language)
language = get_default_language()
send_speech(message, 7, src, , spans, message_language=language)
@@ -40,10 +40,6 @@ GLOBAL_LIST_INIT(freqtospan, list(
var/atom/movable/AM = _AM
AM.Hear(rendered, src, message_language, message, , spans, message_mode)
//To get robot span classes, stuff like that.
/atom/movable/proc/get_spans()
return list()
/atom/movable/proc/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, face_name = FALSE)
//This proc uses text() because it is faster than appending strings. Thanks BYOND.
//Basic span
@@ -87,7 +83,7 @@ GLOBAL_LIST_INIT(freqtospan, list(
else
return verb_say
/atom/movable/proc/say_quote(input, list/spans=list(), message_mode)
/atom/movable/proc/say_quote(input, list/spans=list(speech_span), message_mode)
if(!input)
input = "..."