This commit is contained in:
Ghommie
2019-10-29 13:38:16 +01:00
1118 changed files with 9437 additions and 5695 deletions
@@ -1,49 +0,0 @@
//This component applies a customizable drop_shadow filter to its wearer when they toggle combat mode on or off. This can stack.
/datum/component/phantomthief
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
var/filter_x
var/filter_y
var/filter_size
var/filter_border
var/filter_color
var/datum/component/redirect/combattoggle_redir
/datum/component/phantomthief/Initialize(_x = -2, _y = 0, _size = 0, _border = 0, _color = "#E62111")
filter_x = _x
filter_y = _y
filter_size = _size
filter_border = _border
filter_color = _color
RegisterSignal(parent, COMSIG_COMBAT_TOGGLED, .proc/handlefilterstuff)
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/OnEquipped)
RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/OnDropped)
/datum/component/phantomthief/proc/handlefilterstuff(mob/user, combatmodestate)
if(istype(user))
var/thefilter = filter(type = "drop_shadow", x = filter_x, y = filter_y, size = filter_size, border = filter_border, color = filter_color)
if(!combatmodestate)
user.filters -= thefilter
else
user.filters += thefilter
/datum/component/phantomthief/proc/stripdesiredfilter(mob/user)
if(istype(user))
var/thefilter = filter(type = "drop_shadow", x = filter_x, y = filter_y, size = filter_size, border = filter_border, color = filter_color)
user.filters -= thefilter
/datum/component/phantomthief/proc/OnEquipped(mob/user, slot)
if(!istype(user))
return
if(!combattoggle_redir)
combattoggle_redir = user.AddComponent(/datum/component/redirect, list(COMSIG_COMBAT_TOGGLED = CALLBACK(src, .proc/handlefilterstuff)))
/datum/component/phantomthief/proc/OnDropped(mob/user)
if(!istype(user))
return
if(combattoggle_redir)
QDEL_NULL(combattoggle_redir)
stripdesiredfilter(user)
@@ -198,7 +198,6 @@
var/enthrallGender //Use master or mistress
var/mental_capacity //Higher it is, lower the cooldown on commands, capacity reduces with resistance.
var/datum/weakref/redirect_component //resistance
var/distancelist = list(2,1.5,1,0.8,0.6,0.5,0.4,0.3,0.2) //Distance multipliers
@@ -228,7 +227,7 @@
master = get_mob_by_key(enthrallID)
//if(M.ckey == enthrallID)
// owner.remove_status_effect(src)//At the moment, a user can enthrall themselves, toggle this back in if that should be removed.
redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) //Do resistance calc if resist is pressed#
RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/owner_resist) //Do resistance calc if resist is pressed#
RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/owner_hear)
mental_capacity = 500 - M.getOrganLoss(ORGAN_SLOT_BRAIN)//It's their brain!
var/mob/living/carbon/human/H = owner
@@ -566,8 +565,7 @@
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2")
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3")
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing4")
qdel(redirect_component.resolve())
redirect_component = null
UnregisterSignal(M, COMSIG_LIVING_RESIST)
UnregisterSignal(owner, COMSIG_MOVABLE_HEAR)
REMOVE_TRAIT(owner, TRAIT_PACIFISM, "MKUltra")
to_chat(owner, "<span class='big redtext'><i>You're now free of [master]'s influence, and fully independent!'</i></span>")
@@ -53,19 +53,17 @@
/obj/machinery/dominator/update_icon()
cut_overlays()
if(!(stat & BROKEN))
icon_state = "dominator-active"
if(operating)
var/mutable_appearance/dominator_overlay = mutable_appearance('icons/obj/machines/dominator.dmi', "dominator-overlay")
if(gang)
dominator_overlay.color = gang.color
add_overlay(dominator_overlay)
else
icon_state = "dominator"
if(obj_integrity/max_integrity < 0.66)
add_overlay("damage")
else
if(stat & BROKEN)
icon_state = "dominator-broken"
return
icon_state = "dominator"
if(operating)
var/mutable_appearance/dominator_overlay = mutable_appearance('icons/obj/machines/dominator.dmi', "dominator-overlay")
if(gang)
dominator_overlay.color = gang.color
add_overlay(dominator_overlay)
if(obj_integrity/max_integrity < 0.66)
add_overlay("damage")
/obj/machinery/dominator/examine(mob/user)
..()
@@ -168,7 +166,7 @@
examine(user)
return
if(tempgang.domination_time != NOT_DOMINATING)
if(tempgang.domination_time != NOT_DOMINATING)
to_chat(user, "<span class='warning'>Error: Hostile Takeover is already in progress.</span>")
return
@@ -80,7 +80,7 @@
popup.open()
/obj/machinery/autoylathe/on_deconstruction()
GET_COMPONENT(materials, /datum/component/material_container)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
materials.retrieve_all()
/obj/machinery/autoylathe/attackby(obj/item/O, mob/user, params)
@@ -166,7 +166,7 @@
var/plastic_cost = being_built.materials[MAT_PLASTIC]
var/power = max(2000, (metal_cost+glass_cost+plastic_cost)*multiplier/5)
GET_COMPONENT(materials, /datum/component/material_container)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
if((materials.amount(MAT_METAL) >= metal_cost*multiplier*coeff) && (materials.amount(MAT_GLASS) >= glass_cost*multiplier*coeff) && (materials.amount(MAT_PLASTIC) >= plastic_cost*multiplier*coeff))
busy = TRUE
use_power(power)
@@ -190,7 +190,7 @@
return
/obj/machinery/autoylathe/proc/make_item(power, metal_cost, glass_cost, plastic_cost, multiplier, coeff, is_stack)
GET_COMPONENT(materials, /datum/component/material_container)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/atom/A = drop_location()
use_power(power)
var/list/materials_used = list(MAT_METAL=metal_cost*coeff*multiplier, MAT_GLASS=glass_cost*coeff*multiplier, MAT_PLASTIC=plastic_cost*coeff*multiplier)
@@ -215,7 +215,7 @@
var/T = 0
for(var/obj/item/stock_parts/matter_bin/MB in component_parts)
T += MB.rating*75000
GET_COMPONENT(materials, /datum/component/material_container)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
materials.max_amount = T
T=1.2
for(var/obj/item/stock_parts/manipulator/M in component_parts)
@@ -264,7 +264,7 @@
dat += "<a href='?src=[REF(src)];make=[D.id];multiplier=1'>[D.name]</a>"
if(ispath(D.build_path, /obj/item/stack))
GET_COMPONENT(materials, /datum/component/material_container)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS] ?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY,D.materials[MAT_PLASTIC] ?round(materials.amount(MAT_PLASTIC)/D.materials[MAT_PLASTIC]):INFINITY)
if (max_multiplier>10 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
@@ -296,7 +296,7 @@
dat += "<a href='?src=[REF(src)];make=[D.id];multiplier=1'>[D.name]</a>"
if(ispath(D.build_path, /obj/item/stack))
GET_COMPONENT(materials, /datum/component/material_container)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS] ?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY,D.materials[MAT_PLASTIC] ?round(materials.amount(MAT_PLASTIC)/D.materials[MAT_PLASTIC]):INFINITY)
if (max_multiplier>10 && !disabled)
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
@@ -311,7 +311,7 @@
return dat
/obj/machinery/autoylathe/proc/materials_printout()
GET_COMPONENT(materials, /datum/component/material_container)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/dat = "<b>Total amount:</b> [materials.total_amount] / [materials.max_amount] cm<sup>3</sup><br>"
for(var/mat_id in materials.materials)
var/datum/material/M = materials.materials[mat_id]
@@ -324,7 +324,7 @@
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff)
GET_COMPONENT(materials, /datum/component/material_container)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
if(D.materials[MAT_METAL] && (materials.amount(MAT_METAL) < (D.materials[MAT_METAL] * coeff * amount)))
return FALSE
if(D.materials[MAT_GLASS] && (materials.amount(MAT_GLASS) < (D.materials[MAT_GLASS] * coeff * amount)))
-83
View File
@@ -1,83 +0,0 @@
//Polychromatic Knight Badge
/obj/item/card/id/knight
var/id_color = "#00FF00" //defaults to green
name = "knight badge"
icon = 'modular_citadel/icons/obj/id.dmi'
icon_state = "knight"
desc = "A badge denoting the owner as a knight! It has a strip for swiping like an ID"
/obj/item/card/id/knight/update_label(newname, newjob)
. = ..()
if(newname || newjob)
name = "[(!newname) ? "identification card" : "[newname]'s Knight Badge"][(!newjob) ? "" : " ([newjob])"]"
return
name = "[(!registered_name) ? "identification card" : "[registered_name]'s Knight Badge"][(!assignment) ? "" : " ([assignment])"]"
/obj/item/card/id/knight/update_icon()
var/mutable_appearance/id_overlay = mutable_appearance('modular_citadel/icons/obj/id.dmi', "knight_overlay")
if(id_color)
id_overlay.color = id_color
cut_overlays()
add_overlay(id_overlay)
/obj/item/card/id/knight/AltClick(mob/living/user)
if(!in_range(src, user)) //Basic checks to prevent abuse
return
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(alert("Are you sure you want to recolor your id?", "Confirm Repaint", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"","Choose Energy Color",id_color) as color|null
if(energy_color_input)
id_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
/obj/item/card/id/knight/Initialize()
. = ..()
update_icon()
/obj/item/card/id/knight/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
//=================================================
/obj/item/emagrecharge
name = "electromagnet charging device"
desc = "A small cell with two prongs lazily jabbed into it. It looks like it's made for charging the small batteries found in electromagnetic devices, sadly this can't be recharged like a normal cell."
icon = 'icons/obj/module.dmi'
icon_state = "cell_mini"
item_flags = NOBLUDGEON
var/uses = 5 //Dictates how many charges the device adds to compatible items
/obj/item/emagrecharge/examine(mob/user)
. = ..()
if(uses)
to_chat(user, "<span class='notice'>It can add up to [uses] charges to compatible devices</span>")
else
to_chat(user, "<span class='warning'>It has a small, red, blinking light coming from inside of it. It's spent.</span>")
/obj/item/card/emag
var/uses = 15
/obj/item/card/emag/examine(mob/user)
. = ..()
to_chat(user, "<span class='notice'>It has <b>[uses ? uses : "no"]</b> charges left.</span>")
/obj/item/card/emag/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/emagrecharge))
var/obj/item/emagrecharge/ER = W
if(ER.uses)
uses += ER.uses
to_chat(user, "<span class='notice'>You have added [ER.uses] charges to [src]. It now has [uses] charges.</span>")
playsound(src, "sparks", 100, 1)
ER.uses = 0
else
to_chat(user, "<span class='warning'>[ER] has no charges left.</span>")
return
. = ..()
@@ -1,392 +0,0 @@
/*/////////////////////////////////////////////////////////////////////////
///////////// The TRUE Energy Sword ///////////////////////////
*//////////////////////////////////////////////////////////////////////////
/obj/item/melee/transforming/energy/sword/cx
name = "non-eutactic blade"
desc = "The Non-Eutactic Blade utilizes a hardlight blade that is dynamically 'forged' on demand to create a deadly sharp edge that is unbreakable."
icon_state = "cxsword_hilt"
icon = 'modular_citadel/icons/eutactic/item/noneutactic.dmi'
item_state = "cxsword"
lefthand_file = 'modular_citadel/icons/eutactic/mob/noneutactic_left.dmi'
righthand_file = 'modular_citadel/icons/eutactic/mob/noneutactic_right.dmi'
force = 3
force_on = 21
throwforce = 5
throwforce_on = 20
hitsound = "swing_hit" //it starts deactivated
hitsound_on = 'sound/weapons/nebhit.ogg'
attack_verb_off = list("tapped", "poked")
throw_speed = 3
throw_range = 5
sharpness = IS_SHARP
embedding = list("embedded_pain_multiplier" = 6, "embed_chance" = 20, "embedded_fall_chance" = 60)
armour_penetration = 10
block_chance = 35
light_color = "#37FFF7"
actions_types = list()
/obj/item/melee/transforming/energy/sword/cx/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes
altafterattack(A, user, TRUE, params)
return TRUE
/obj/item/melee/transforming/energy/sword/cx/altafterattack(atom/target, mob/living/carbon/user, proximity_flag, click_parameters) //does right click memes
if(istype(user))
user.visible_message("<span class='notice'>[user] points the tip of [src] at [target].</span>", "<span class='notice'>You point the tip of [src] at [target].</span>")
return TRUE
/obj/item/melee/transforming/energy/sword/cx/transform_weapon(mob/living/user, supress_message_text)
active = !active //I'd use a ..() here but it'd inherit from the regular esword's proc instead, so SPAGHETTI CODE
if(active) //also I'd need to rip out the iconstate changing bits
force = force_on
throwforce = throwforce_on
hitsound = hitsound_on
throw_speed = 4
if(attack_verb_on.len)
attack_verb = attack_verb_on
w_class = w_class_on
START_PROCESSING(SSobj, src)
set_light(brightness_on)
update_icon()
else
force = initial(force)
throwforce = initial(throwforce)
hitsound = initial(hitsound)
throw_speed = initial(throw_speed)
if(attack_verb_off.len)
attack_verb = attack_verb_off
w_class = initial(w_class)
STOP_PROCESSING(SSobj, src)
set_light(0)
update_icon()
transform_messages(user, supress_message_text)
add_fingerprint(user)
return TRUE
/obj/item/melee/transforming/energy/sword/cx/transform_messages(mob/living/user, supress_message_text)
playsound(user, active ? 'sound/weapons/nebon.ogg' : 'sound/weapons/neboff.ogg', 65, 1)
if(!supress_message_text)
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
/obj/item/melee/transforming/energy/sword/cx/update_icon()
var/mutable_appearance/blade_overlay = mutable_appearance('modular_citadel/icons/eutactic/item/noneutactic.dmi', "cxsword_blade")
var/mutable_appearance/gem_overlay = mutable_appearance('modular_citadel/icons/eutactic/item/noneutactic.dmi', "cxsword_gem")
if(light_color)
blade_overlay.color = light_color
gem_overlay.color = light_color
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
add_overlay(gem_overlay)
if(active)
add_overlay(blade_overlay)
if(ismob(loc))
var/mob/M = loc
M.update_inv_hands()
/obj/item/melee/transforming/energy/sword/cx/AltClick(mob/living/user)
if(!in_range(src, user)) //Basic checks to prevent abuse
return
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null
if(energy_color_input)
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
update_light()
/obj/item/melee/transforming/energy/sword/cx/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
/obj/item/melee/transforming/energy/sword/cx/worn_overlays(isinhands, icon_file)
. = ..()
if(active)
if(isinhands)
var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "cxsword_blade")
blade_inhand.color = light_color
. += blade_inhand
//Broken version. Not a toy, but not as strong.
/obj/item/melee/transforming/energy/sword/cx/broken
name = "misaligned non-eutactic blade"
desc = "The Non-Eutactic Blade utilizes a hardlight blade that is dynamically 'forged' on demand to create a deadly sharp edge that is unbreakable. This one seems to have a damaged handle and misaligned components, causing the blade to be unstable at best"
force_on = 15 //As strong a survival knife/bone dagger
/obj/item/melee/transforming/energy/sword/cx/attackby(obj/item/W, mob/living/user, params)
if(istype(W, /obj/item/melee/transforming/energy/sword/cx))
if(HAS_TRAIT(W, TRAIT_NODROP) || HAS_TRAIT(src, TRAIT_NODROP))
to_chat(user, "<span class='warning'>\the [HAS_TRAIT(src, TRAIT_NODROP) ? src : W] is stuck to your hand, you can't attach it to \the [HAS_TRAIT(src, TRAIT_NODROP) ? W : src]!</span>")
return
else
to_chat(user, "<span class='notice'>You combine the two light swords, making a single supermassive blade! You're cool.</span>")
new /obj/item/twohanded/dualsaber/hypereutactic(user.drop_location())
qdel(W)
qdel(src)
else
return ..()
//OBLIGATORY TOY MEMES /////////////////////////////////////
/obj/item/toy/sword/cx
name = "\improper DX Non-Euplastic LightSword"
desc = "A deluxe toy replica of an energy sword. Realistic visuals and sounds! Ages 8 and up."
icon = 'modular_citadel/icons/eutactic/item/noneutactic.dmi'
icon_state = "cxsword_hilt"
item_state = "cxsword"
lefthand_file = 'modular_citadel/icons/eutactic/mob/noneutactic_left.dmi'
righthand_file = 'modular_citadel/icons/eutactic/mob/noneutactic_right.dmi'
active = FALSE
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("poked", "jabbed", "hit")
light_color = "#37FFF7"
var/light_brightness = 3
actions_types = list()
/obj/item/toy/sword/cx/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes
altafterattack(A, user, TRUE, params)
return TRUE
/obj/item/toy/sword/cx/altafterattack(atom/target, mob/living/carbon/user, proximity_flag, click_parameters) //does right click memes
if(istype(user))
user.visible_message("<span class='notice'>[user] points the tip of [src] at [target].</span>", "<span class='notice'>You point the tip of [src] at [target].</span>")
return TRUE
/obj/item/toy/sword/cx/attack_self(mob/user)
active = !( active )
if (active)
to_chat(user, "<span class='notice'>You activate the holographic blade with a press of a button.</span>")
playsound(user, 'sound/weapons/nebon.ogg', 50, 1)
w_class = WEIGHT_CLASS_BULKY
attack_verb = list("slashed", "stabbed", "ravaged")
set_light(light_brightness)
update_icon()
else
to_chat(user, "<span class='notice'>You deactivate the holographic blade with a press of a button.</span>")
playsound(user, 'sound/weapons/neboff.ogg', 50, 1)
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("poked", "jabbed", "hit")
set_light(0)
update_icon()
add_fingerprint(user)
/obj/item/toy/sword/cx/update_icon()
var/mutable_appearance/blade_overlay = mutable_appearance('modular_citadel/icons/eutactic/item/noneutactic.dmi', "cxsword_blade")
var/mutable_appearance/gem_overlay = mutable_appearance('modular_citadel/icons/eutactic/item/noneutactic.dmi', "cxsword_gem")
if(light_color)
blade_overlay.color = light_color
gem_overlay.color = light_color
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
add_overlay(gem_overlay)
if(active)
add_overlay(blade_overlay)
if(ismob(loc))
var/mob/M = loc
M.update_inv_hands()
/obj/item/toy/sword/cx/AltClick(mob/living/user)
if(!in_range(src, user)) //Basic checks to prevent abuse
return
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null
if(energy_color_input)
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
update_light()
/obj/item/toy/sword/cx/worn_overlays(isinhands, icon_file)
. = ..()
if(active)
if(isinhands)
var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "cxsword_blade")
blade_inhand.color = light_color
. += blade_inhand
/obj/item/toy/sword/cx/attackby(obj/item/W, mob/living/user, params)
if(istype(W, /obj/item/toy/sword/cx))
if(HAS_TRAIT(W, TRAIT_NODROP) || HAS_TRAIT(src, TRAIT_NODROP))
to_chat(user, "<span class='warning'>\the [HAS_TRAIT(src, TRAIT_NODROP) ? src : W] is stuck to your hand, you can't attach it to \the [HAS_TRAIT(src, TRAIT_NODROP) ? W : src]!</span>")
return
else
to_chat(user, "<span class='notice'>You combine the two plastic swords, making a single supermassive toy! You're fake-cool.</span>")
new /obj/item/twohanded/dualsaber/hypereutactic/toy(user.loc)
qdel(W)
qdel(src)
else
return ..()
/obj/item/toy/sword/cx/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
/////////////////////////////////////////////////////
// HYPEREUTACTIC Blades /////////////////////////
/////////////////////////////////////////////////////
/obj/item/twohanded/dualsaber/hypereutactic
icon = 'modular_citadel/icons/eutactic/item/hypereutactic.dmi'
icon_state = "hypereutactic"
lefthand_file = 'modular_citadel/icons/eutactic/mob/hypereutactic_left.dmi'
righthand_file = 'modular_citadel/icons/eutactic/mob/hypereutactic_right.dmi'
item_state = "hypereutactic"
inhand_x_dimension = 64
inhand_y_dimension = 64
name = "hypereutactic blade"
desc = "A supermassive weapon envisioned to cleave the very fabric of space and time itself in twain, the hypereutactic blade dynamically flash-forges a hypereutactic crystaline nanostructure capable of passing through most known forms of matter like a hot knife through butter."
force = 7
force_unwielded = 7
force_wielded = 40
wieldsound = 'sound/weapons/nebon.ogg'
unwieldsound = 'sound/weapons/neboff.ogg'
hitsound_on = 'sound/weapons/nebhit.ogg'
slowdown_wielded = 1
armour_penetration = 60
light_color = "#37FFF7"
rainbow_colors = list("#FF0000", "#FFFF00", "#00FF00", "#00FFFF", "#0000FF","#FF00FF", "#3399ff", "#ff9900", "#fb008b", "#9800ff", "#00ffa3", "#ccff00")
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "destroyed", "ripped", "devastated", "shredded")
spinnable = FALSE
total_mass_on = 4
/obj/item/twohanded/dualsaber/hypereutactic/chaplain
name = "\improper divine lightblade"
desc = "A giant blade of bright and holy light, said to cut down the wicked with ease."
force = 5
force_unwielded = 5
force_wielded = 20
block_chance = 50
armour_penetration = 0
var/chaplain_spawnable = TRUE
obj_flags = UNIQUE_RENAME
/obj/item/twohanded/dualsaber/hypereutactic/chaplain/Initialize()
. = ..()
AddComponent(/datum/component/anti_magic, TRUE, TRUE)
/obj/item/twohanded/dualsaber/hypereutactic/chaplain/IsReflect()
return FALSE
/obj/item/twohanded/dualsaber/hypereutactic/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes
altafterattack(A, user, TRUE, params)
return TRUE
/obj/item/twohanded/dualsaber/hypereutactic/altafterattack(atom/target, mob/living/user, proximity_flag, click_parameters) //does right click memes
if(istype(user))
user.visible_message("<span class='notice'>[user] points the tip of [src] at [target].</span>", "<span class='notice'>You point the tip of [src] at [target].</span>")
return TRUE
/obj/item/twohanded/dualsaber/hypereutactic/update_icon()
var/mutable_appearance/blade_overlay = mutable_appearance('modular_citadel/icons/eutactic/item/hypereutactic.dmi', "hypereutactic_blade")
var/mutable_appearance/gem_overlay = mutable_appearance('modular_citadel/icons/eutactic/item/hypereutactic.dmi', "hypereutactic_gem")
if(light_color)
blade_overlay.color = light_color
gem_overlay.color = light_color
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
add_overlay(gem_overlay)
if(wielded)
add_overlay(blade_overlay)
if(ismob(loc))
var/mob/M = loc
M.update_inv_hands()
SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is)
/obj/item/twohanded/dualsaber/hypereutactic/AltClick(mob/living/user)
if(!user.canUseTopic(src, BE_CLOSE, FALSE) || hacked)
return
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null
if(!energy_color_input || !user.canUseTopic(src, BE_CLOSE, FALSE) || hacked)
return
light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
update_light()
/obj/item/twohanded/dualsaber/hypereutactic/worn_overlays(isinhands, icon_file)
. = ..()
if(isinhands)
var/mutable_appearance/gem_inhand = mutable_appearance(icon_file, "hypereutactic_gem")
gem_inhand.color = light_color
. += gem_inhand
if(wielded)
var/mutable_appearance/blade_inhand = mutable_appearance(icon_file, "hypereutactic_blade")
blade_inhand.color = light_color
. += blade_inhand
/obj/item/twohanded/dualsaber/hypereutactic/examine(mob/user)
..()
if(!hacked)
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
/obj/item/twohanded/dualsaber/hypereutactic/rainbow_process()
. = ..()
update_icon()
update_light()
////////////////// TOY VERSION /////////////////////////////
/obj/item/twohanded/dualsaber/hypereutactic/toy
name = "\improper DX Hyper-Euplastic LightSword"
desc = "A supermassive toy envisioned to cleave the very fabric of space and time itself in twain. Realistic visuals and sounds! Ages 8 and up."
force = 0
throwforce = 0
throw_speed = 3
throw_range = 5
force_unwielded = 0
force_wielded = 0
attack_verb = list("attacked", "struck", "hit")
total_mass_on = TOTAL_MASS_TOY_SWORD
slowdown_wielded = 0
/obj/item/twohanded/dualsaber/hypereutactic/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return FALSE
/obj/item/twohanded/dualsaber/hypereutactic/toy/IsReflect()//Stops it from reflecting energy projectiles
return FALSE
//////// Tatortot NEB /////////////// (same stats as regular esword)
/obj/item/melee/transforming/energy/sword/cx/traitor
name = "\improper Dragon's Tooth Sword"
desc = "The Dragon's Tooth sword is a blackmarket modification of a Non-Eutactic Blade, \
which utilizes a hardlight blade that is dynamically 'forged' on demand to create a deadly sharp edge that is unbreakable. \
It appears to have a wooden grip and a shaved down guard."
icon_state = "cxsword_hilt_traitor"
force_on = 30
armour_penetration = 50
embedding = list("embedded_pain_multiplier" = 10, "embed_chance" = 75, "embedded_fall_chance" = 0, "embedded_impact_pain_multiplier" = 10)
block_chance = 50
hitsound_on = 'sound/weapons/blade1.ogg'
light_color = "#37F0FF"
/obj/item/melee/transforming/energy/sword/cx/traitor/transform_messages(mob/living/user, supress_message_text)
playsound(user, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 35, 1)
if(!supress_message_text)
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
//RAINBOW MEMES
/obj/item/twohanded/dualsaber/hypereutactic/toy/rainbow
name = "\improper Hyper-Euclidean Reciprocating Trigonometric Zweihander"
desc = "A custom-built toy with fancy rainbow lights built-in."
hacked = TRUE
@@ -49,7 +49,7 @@
/obj/item/storage/hypospraykit/ComponentInitialize()
. = ..()
GET_COMPONENT(STR, /datum/component/storage)
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 12
STR.can_hold = typecacheof(list(
/obj/item/hypospray/mkii,
@@ -151,7 +151,7 @@
/obj/item/storage/hypospraykit/cmo/ComponentInitialize()
. = ..()
GET_COMPONENT(STR, /datum/component/storage)
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 6
STR.can_hold = typecacheof(list(
/obj/item/hypospray/mkii,
@@ -1,73 +0,0 @@
/obj/effect/mob_spawn/human/lavaknight
name = "odd cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a displaced knight from another dimension"
icon = 'icons/obj/machines/sleeper.dmi'
icon_state = "sleeper"
roundstart = FALSE
job_description = "Cydonian Knight"
death = FALSE
random = TRUE
outfit = /datum/outfit/lavaknight
mob_species = /datum/species/human
flavour_text = "<font size=3><b>Y</b></font><b>ou are a knight who conveniently has some form of retrograde amnesia. \
You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
Remember: hostile creatures and such are fair game for attacking, but <span class='danger'>under no circumstances are you to attack anything capable of thought and/or speech</span> unless it has made it its life's calling to chase you to the ends of the earth."
assignedrole = "Cydonian Knight"
/obj/effect/mob_spawn/human/lavaknight/special(mob/living/new_spawn)
if(ishuman(new_spawn))
var/mob/living/carbon/human/H = new_spawn
H.dna.features["mam_ears"] = "Cat, Big" //cat people
H.dna.features["mcolor"] = H.hair_color
H.update_body()
/obj/effect/mob_spawn/human/lavaknight/Destroy()
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/datum/outfit/lavaknight
name = "Cydonian Knight"
uniform = /obj/item/clothing/under/assistantformal
mask = /obj/item/clothing/mask/breath
shoes = /obj/item/clothing/shoes/sneakers/black
r_pocket = /obj/item/melee/transforming/energy/sword/cx
suit = /obj/item/clothing/suit/space/hardsuit/lavaknight
suit_store = /obj/item/tank/internals/oxygen
id = /obj/item/card/id/knight
/datum/outfit/lavaknight/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/obj/item/card/id/knight/W = H.wear_id
W.assignment = "Knight"
W.registered_name = H.real_name
W.id_color = "#0000FF" //Regular knights get simple blue. Doesn't matter much because it's variable anyway
W.update_label(H.real_name)
W.update_icon()
/datum/outfit/lavaknight/captain
name ="Cydonian Knight Captain"
l_pocket = /obj/item/twohanded/dualsaber/hypereutactic
/datum/outfit/lavaknight/captain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/obj/item/card/id/knight/W = H.wear_id
W.assignment = "Knight Captain"
W.registered_name = H.real_name
W.id_color = "#FFD700" //Captains get gold, duh. Doesn't matter because it's variable anyway
W.update_label(H.real_name)
W.update_icon()
/obj/effect/mob_spawn/human/lavaknight/captain
name = "odd gilded cryogenics pod"
desc = "A humming cryo pod that appears to be gilded. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
flavour_text = "<font size=3><b>Y</b></font><b>ou are a knight who conveniently has some form of retrograde amnesia. \
You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
Remember: hostile creatures and such are fair game for attacking, but <span class='danger'>under no circumstances are you to attack anything capable of thought and/or speech</span> unless it has made it its life's calling to chase you to the ends of the earth. \
You feel a natural instict to lead, and as such, you should strive to lead your comrades to safety, and hopefully home. You also feel a burning determination to uphold your vow, as well as your fellow comrade's."
outfit = /datum/outfit/lavaknight/captain
@@ -452,3 +452,9 @@ datum/gear/darksabresheath
category = SLOT_HEAD
path = /obj/item/clothing/head/flight
ckeywhitelist = list("maxlynchy")
/datum/gear/onionneck
name = "Onion Necklace"
category = SLOT_NECK
path = /obj/item/clothing/neck/necklace/onion
ckeywhitelist = list("cdrcross")
@@ -6,30 +6,28 @@
icon_state = "s-ninja"
item_state = "s-ninja"
/obj/item/clothing/glasses/phantomthief/Initialize()
/obj/item/clothing/glasses/phantomthief/ComponentInitialize()
. = ..()
AddComponent(/datum/component/phantomthief)
AddComponent(/datum/component/wearertargeting/phantomthief)
/obj/item/clothing/glasses/phantomthief/syndicate
name = "suspicious plastic mask"
desc = "A cheap, bulky, Syndicate-branded plastic face mask. You have to break in to break out."
var/nextadrenalinepop
var/datum/component/redirect/combattoggle_redir
/obj/item/clothing/glasses/phantomthief/syndicate/examine(user)
/obj/item/clothing/glasses/phantomthief/syndicate/examine(mob/user)
. = ..()
if(combattoggle_redir)
if(user.get_item_by_slot(SLOT_GLASSES) == src)
if(world.time >= nextadrenalinepop)
to_chat(user, "<span class='notice'>The built-in adrenaline injector is ready for use.</span>")
else
to_chat(user, "<span class='notice'>[DisplayTimeText(nextadrenalinepop - world.time)] left before the adrenaline injector can be used again.")
/obj/item/clothing/glasses/phantomthief/syndicate/proc/injectadrenaline(mob/user, combatmodestate)
if(istype(user))
if(combatmodestate && world.time >= nextadrenalinepop)
nextadrenalinepop = world.time + 5 MINUTES
user.reagents.add_reagent("syndicateadrenals", 5)
user.playsound_local(user, 'modular_citadel/sound/misc/adrenalinject.ogg', 100, 0, pressure_affected = FALSE)
if(istype(user) && combatmodestate && world.time >= nextadrenalinepop)
nextadrenalinepop = world.time + 5 MINUTES
user.reagents.add_reagent("syndicateadrenals", 5)
user.playsound_local(user, 'modular_citadel/sound/misc/adrenalinject.ogg', 100, 0, pressure_affected = FALSE)
/obj/item/clothing/glasses/phantomthief/syndicate/equipped(mob/user, slot)
. = ..()
@@ -37,12 +35,10 @@
return
if(slot != SLOT_GLASSES)
return
if(!combattoggle_redir)
combattoggle_redir = user.AddComponent(/datum/component/redirect, list(COMSIG_COMBAT_TOGGLED = CALLBACK(src, .proc/injectadrenaline)))
RegisterSignal(user, COMSIG_COMBAT_TOGGLED, .proc/injectadrenaline)
/obj/item/clothing/glasses/phantomthief/syndicate/dropped(mob/user)
. = ..()
if(!istype(user))
return
if(combattoggle_redir)
QDEL_NULL(combattoggle_redir)
UnregisterSignal(user, COMSIG_COMBAT_TOGGLED)
@@ -1,176 +0,0 @@
/*
CYDONIAN ARMOR THAT IS RGB AND STUFF WOOOOOOOOOO
*/
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight
name = "cydonian helmet"
desc = "A helmet designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
icon = 'modular_citadel/icons/lavaknight/item/head.dmi'
icon_state = "knight_cydonia"
item_state = "knight_yellow"
item_color = null
alternate_worn_icon = 'modular_citadel/icons/lavaknight/mob/head.dmi'
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | LAVA_PROOF
heat_protection = HEAD
armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100)
brightness_on = 7
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
var/energy_color = "#35FFF0"
var/obj/item/clothing/suit/space/hardsuit/lavaknight/linkedsuit = null
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/New()
..()
if(istype(loc, /obj/item/clothing/suit/space/hardsuit/lavaknight))
linkedsuit = loc
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/attack_self(mob/user)
on = !on
if(on)
set_light(brightness_on)
else
set_light(0)
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/update_icon()
var/mutable_appearance/helm_overlay = mutable_appearance('modular_citadel/icons/lavaknight/item/head.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
if(energy_color)
helm_overlay.color = energy_color
helm_overlay.plane = LIGHTING_PLANE + 1 //Magic number is used here because we have no ABOVE_LIGHTING_PLANE plane defined. Lighting plane is 15, HUD is 18
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
add_overlay(helm_overlay)
emissivelights()
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/equipped(mob/user, slot)
..()
if(slot == SLOT_HEAD)
emissivelights()
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/dropped(mob/user)
..()
emissivelightsoff()
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/proc/emissivelights(mob/user = usr)
var/mutable_appearance/energy_overlay = mutable_appearance('modular_citadel/icons/lavaknight/mob/head.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
energy_overlay.color = energy_color
energy_overlay.plane = LIGHTING_PLANE + 1
user.cut_overlay(energy_overlay) //honk
user.add_overlay(energy_overlay) //honk
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/proc/emissivelightsoff(mob/user = usr)
user.cut_overlay()
linkedsuit.emissivelights() //HONK HONK HONK MAXIMUM SPAGHETTI
user.regenerate_icons() //honk
/obj/item/clothing/suit/space/hardsuit/lavaknight
icon = 'modular_citadel/icons/lavaknight/item/suit.dmi'
icon_state = "knight_cydonia"
name = "cydonian armor"
desc = "A suit designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
item_state = "swat_suit"
alternate_worn_icon = 'modular_citadel/icons/lavaknight/mob/suit.dmi'
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | LAVA_PROOF
armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/lavaknight
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
actions_types = list(/datum/action/item_action/toggle_helmet)
var/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/linkedhelm
tauric = TRUE //Citadel Add for tauric hardsuits
var/energy_color = "#35FFF0"
/obj/item/clothing/suit/space/hardsuit/lavaknight/New()
..()
if(helmet)
linkedhelm = helmet
light_color = energy_color
set_light(1)
/obj/item/clothing/suit/space/hardsuit/lavaknight/Initialize()
..()
update_icon()
/obj/item/clothing/suit/space/hardsuit/lavaknight/update_icon()
var/mutable_appearance/suit_overlay
if(taurmode == SNEK_TAURIC)
suit_overlay = mutable_appearance('modular_citadel/icons/mob/taur_naga.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
else if(taurmode == PAW_TAURIC)
suit_overlay = mutable_appearance('modular_citadel/icons/mob/taur_canine.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
else
suit_overlay = mutable_appearance('modular_citadel/icons/lavaknight/item/suit.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
if(energy_color)
suit_overlay.color = energy_color
suit_overlay.plane = LIGHTING_PLANE + 1 //Magic number is used here because we have no ABOVE_LIGHTING_PLANE plane defined. Lighting plane is 15.
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
add_overlay(suit_overlay)
/obj/item/clothing/suit/space/hardsuit/lavaknight/equipped(mob/user, slot)
..()
if(slot == SLOT_WEAR_SUIT)
emissivelights()
/obj/item/clothing/suit/space/hardsuit/lavaknight/dropped(mob/user)
..()
emissivelightsoff()
/obj/item/clothing/suit/space/hardsuit/lavaknight/proc/emissivelights(mob/user = usr)
var/mutable_appearance/energy_overlay
if(taurmode == SNEK_TAURIC)
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_naga.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
else if(taurmode == PAW_TAURIC)
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_canine.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
else
energy_overlay = mutable_appearance('modular_citadel/icons/lavaknight/mob/suit.dmi', "knight_cydonia_overlay", LIGHTING_LAYER + 1)
energy_overlay.color = energy_color
energy_overlay.plane = LIGHTING_PLANE + 1
user.cut_overlay(energy_overlay) //honk
user.add_overlay(energy_overlay) //honk
/obj/item/clothing/suit/space/hardsuit/lavaknight/proc/emissivelightsoff(mob/user = usr)
user.cut_overlays()
user.regenerate_icons() //honk
/obj/item/clothing/suit/space/hardsuit/lavaknight/AltClick(mob/living/user)
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!in_range(src, user))
return
if(user.incapacitated() || !istype(user) || !in_range(src, user))
return
if(alert("Are you sure you want to recolor your armor stripes?", "Confirm Repaint", "Yes", "No") == "Yes")
var/energy_color_input = input(usr,"","Choose Energy Color",energy_color) as color|null
if(energy_color_input)
energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
user.update_inv_wear_suit()
if(linkedhelm)
linkedhelm.energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
user.update_inv_head()
linkedhelm.update_icon()
update_icon()
user.update_inv_wear_suit()
light_color = energy_color
emissivelights()
update_light()
/obj/item/clothing/suit/space/hardsuit/lavaknight/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
@@ -501,3 +501,11 @@
item_state = "flight-g"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
/obj/item/clothing/neck/necklace/onion
name = "Onion Necklace"
desc = "A string of onions sequenced together to form a necklace."
icon = 'icons/obj/custom.dmi'
icon_state = "onion"
item_state = "onion"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
@@ -1,2 +0,0 @@
/datum/round_event_control/blob
earliest_start = 60 MINUTES
@@ -1,2 +0,0 @@
/mob/living/simple_animal/hostile/carp/ranged
gold_core_spawnable = NO_SPAWN
@@ -1,8 +0,0 @@
//This file controls whether or not a job complies with dresscodes.
//If a job complies with dresscodes, loadout items will not be equipped instead of the job's outfit, instead placing the items into the player's backpack.
/datum/job
var/dresscodecompliant = TRUE
/datum/job/assistant
dresscodecompliant = FALSE
@@ -1,21 +0,0 @@
/datum/job/captain
minimal_player_age = 20
exp_type = EXP_TYPE_COMMAND
/datum/job/hop
minimal_player_age = 20
exp_type_department = EXP_TYPE_SERVICE
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
@@ -1,31 +0,0 @@
/datum/job/bartender
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
/datum/job/qm
department_head = list("Captain")
supervisors = "the captain"
req_admin_notify = 1
minimal_player_age = 10
exp_requirements = 180
exp_type_department = EXP_TYPE_SUPPLY
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_KEYCARD_AUTH, ACCESS_RC_ANNOUNCE, ACCESS_SEC_DOORS, ACCESS_HEADS)
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_KEYCARD_AUTH, ACCESS_RC_ANNOUNCE, ACCESS_SEC_DOORS, ACCESS_HEADS)
/datum/outfit/job/quartermaster
id = /obj/item/card/id/silver
ears = /obj/item/radio/headset/heads/qm
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
/datum/job/cargo_tech
department_head = list("Quartermaster")
supervisors = "the quartermaster"
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
/datum/job/mining
department_head = list("Quartermaster")
supervisors = "the quartermaster"
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
@@ -1,14 +0,0 @@
/datum/job/chief_engineer
minimal_player_age = 10
/datum/job/engineer
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
/datum/job/atmos
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ENGINE,
ACCESS_ENGINE_EQUIP, ACCESS_EMERGENCY_STORAGE, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM)
@@ -1,8 +0,0 @@
/datum/job/cmo
minimal_player_age = 10
/datum/outfit/job/doctor
backpack_contents = list(/obj/item/storage/hypospraykit/regular)
/datum/outfit/job/chemist
backpack_contents = list(/obj/item/storage/hypospraykit/regular)
@@ -1,2 +0,0 @@
/datum/job/rd
minimal_player_age = 10
@@ -1,5 +0,0 @@
/datum/job/hos
minimal_player_age = 10
/datum/outfit/job/warden
suit_store = /obj/item/gun/energy/pumpaction/defender
@@ -1,12 +1,3 @@
/mob/living/carbon/human/species/mammal
race = /datum/species/mammal
/mob/living/carbon/human/species/insect
race = /datum/species/insect
/mob/living/carbon/human/species/xeno
race = /datum/species/xeno
/mob/living/proc/resist_embedded()
return
@@ -13,7 +13,7 @@
var/sprint_buffer_max = 42
var/sprint_buffer_regen_ds = 0.3 //Tiles per world.time decisecond
var/sprint_buffer_regen_last = 0 //last world.time this was regen'd for math.
var/sprint_stamina_cost = 0.55 //stamina loss per tile while insufficient sprint buffer.
var/sprint_stamina_cost = 0.70 //stamina loss per tile while insufficient sprint buffer.
//---End
/mob/living/movement_delay(ignorewalk = 0)
@@ -1,633 +0,0 @@
// List is required to compile the resources into the game when it loads.
// Dynamically loading it has bad results with sounds overtaking each other, even with the wait variable.
#ifdef AI_VOX
GLOBAL_LIST_INIT(vox_sounds_male, list("," = 'modular_citadel/sound/vox/_comma.ogg',
"." = 'modular_citadel/sound/vox/_period.ogg',
"a" = 'modular_citadel/sound/vox/a.ogg',
"accelerating" = 'modular_citadel/sound/vox/accelerating.ogg',
"accelerator" = 'modular_citadel/sound/vox/accelerator.ogg',
"accepted" = 'modular_citadel/sound/vox/accepted.ogg',
"access" = 'modular_citadel/sound/vox/access.ogg',
"acknowledge" = 'modular_citadel/sound/vox/acknowledge.ogg',
"acknowledged" = 'modular_citadel/sound/vox/acknowledged.ogg',
"acquired" = 'modular_citadel/sound/vox/acquired.ogg',
"acquisition" = 'modular_citadel/sound/vox/acquisition.ogg',
"across" = 'modular_citadel/sound/vox/across.ogg',
"activate" = 'modular_citadel/sound/vox/activate.ogg',
"activated" = 'modular_citadel/sound/vox/activated.ogg',
"activity" = 'modular_citadel/sound/vox/activity.ogg',
"adios" = 'modular_citadel/sound/vox/adios.ogg',
"administration" = 'modular_citadel/sound/vox/administration.ogg',
"advanced" = 'modular_citadel/sound/vox/advanced.ogg',
"after" = 'modular_citadel/sound/vox/after.ogg',
"agent" = 'modular_citadel/sound/vox/agent.ogg',
"alarm" = 'modular_citadel/sound/vox/alarm.ogg',
"alert" = 'modular_citadel/sound/vox/alert.ogg',
"alien" = 'modular_citadel/sound/vox/alien.ogg',
"aligned" = 'modular_citadel/sound/vox/aligned.ogg',
"all" = 'modular_citadel/sound/vox/all.ogg',
"alpha" = 'modular_citadel/sound/vox/alpha.ogg',
"am" = 'modular_citadel/sound/vox/am.ogg',
"amigo" = 'modular_citadel/sound/vox/amigo.ogg',
"ammunition" = 'modular_citadel/sound/vox/ammunition.ogg',
"an" = 'modular_citadel/sound/vox/an.ogg',
"and" = 'modular_citadel/sound/vox/and.ogg',
"announcement" = 'modular_citadel/sound/vox/announcement.ogg',
"anomalous" = 'modular_citadel/sound/vox/anomalous.ogg',
"antenna" = 'modular_citadel/sound/vox/antenna.ogg',
"any" = 'modular_citadel/sound/vox/any.ogg',
"apprehend" = 'modular_citadel/sound/vox/apprehend.ogg',
"approach" = 'modular_citadel/sound/vox/approach.ogg',
"are" = 'modular_citadel/sound/vox/are.ogg',
"area" = 'modular_citadel/sound/vox/area.ogg',
"arm" = 'modular_citadel/sound/vox/arm.ogg',
"armed" = 'modular_citadel/sound/vox/armed.ogg',
"armor" = 'modular_citadel/sound/vox/armor.ogg',
"armory" = 'modular_citadel/sound/vox/armory.ogg',
"arrest" = 'modular_citadel/sound/vox/arrest.ogg',
"ass" = 'modular_citadel/sound/vox/ass.ogg',
"at" = 'modular_citadel/sound/vox/at.ogg',
"atomic" = 'modular_citadel/sound/vox/atomic.ogg',
"attention" = 'modular_citadel/sound/vox/attention.ogg',
"authorize" = 'modular_citadel/sound/vox/authorize.ogg',
"authorized" = 'modular_citadel/sound/vox/authorized.ogg',
"automatic" = 'modular_citadel/sound/vox/automatic.ogg',
"away" = 'modular_citadel/sound/vox/away.ogg',
"b" = 'modular_citadel/sound/vox/b.ogg',
"back" = 'modular_citadel/sound/vox/back.ogg',
"backman" = 'modular_citadel/sound/vox/backman.ogg',
"bad" = 'modular_citadel/sound/vox/bad.ogg',
"bag" = 'modular_citadel/sound/vox/bag.ogg',
"bailey" = 'modular_citadel/sound/vox/bailey.ogg',
"barracks" = 'modular_citadel/sound/vox/barracks.ogg',
"base" = 'modular_citadel/sound/vox/base.ogg',
"bay" = 'modular_citadel/sound/vox/bay.ogg',
"be" = 'modular_citadel/sound/vox/be.ogg',
"been" = 'modular_citadel/sound/vox/been.ogg',
"before" = 'modular_citadel/sound/vox/before.ogg',
"beyond" = 'modular_citadel/sound/vox/beyond.ogg',
"biohazard" = 'modular_citadel/sound/vox/biohazard.ogg',
"biological" = 'modular_citadel/sound/vox/biological.ogg',
"birdwell" = 'modular_citadel/sound/vox/birdwell.ogg',
"bizwarn" = 'modular_citadel/sound/vox/bizwarn.ogg',
"black" = 'modular_citadel/sound/vox/black.ogg',
"blast" = 'modular_citadel/sound/vox/blast.ogg',
"blocked" = 'modular_citadel/sound/vox/blocked.ogg',
"bloop" = 'modular_citadel/sound/vox/bloop.ogg',
"blue" = 'modular_citadel/sound/vox/blue.ogg',
"bottom" = 'modular_citadel/sound/vox/bottom.ogg',
"bravo" = 'modular_citadel/sound/vox/bravo.ogg',
"breach" = 'modular_citadel/sound/vox/breach.ogg',
"breached" = 'modular_citadel/sound/vox/breached.ogg',
"break" = 'modular_citadel/sound/vox/break.ogg',
"bridge" = 'modular_citadel/sound/vox/bridge.ogg',
"bust" = 'modular_citadel/sound/vox/bust.ogg',
"but" = 'modular_citadel/sound/vox/but.ogg',
"button" = 'modular_citadel/sound/vox/button.ogg',
"buzwarn" = 'modular_citadel/sound/vox/buzwarn.ogg',
"bypass" = 'modular_citadel/sound/vox/bypass.ogg',
"c" = 'modular_citadel/sound/vox/c.ogg',
"cable" = 'modular_citadel/sound/vox/cable.ogg',
"call" = 'modular_citadel/sound/vox/call.ogg',
"called" = 'modular_citadel/sound/vox/called.ogg',
"canal" = 'modular_citadel/sound/vox/canal.ogg',
"cap" = 'modular_citadel/sound/vox/cap.ogg',
"captain" = 'modular_citadel/sound/vox/captain.ogg',
"capture" = 'modular_citadel/sound/vox/capture.ogg',
"captured" = 'modular_citadel/sound/vox/captured.ogg',
"ceiling" = 'modular_citadel/sound/vox/ceiling.ogg',
"celsius" = 'modular_citadel/sound/vox/celsius.ogg',
"center" = 'modular_citadel/sound/vox/center.ogg',
"centi" = 'modular_citadel/sound/vox/centi.ogg',
"central" = 'modular_citadel/sound/vox/central.ogg',
"chamber" = 'modular_citadel/sound/vox/chamber.ogg',
"charlie" = 'modular_citadel/sound/vox/charlie.ogg',
"check" = 'modular_citadel/sound/vox/check.ogg',
"checkpoint" = 'modular_citadel/sound/vox/checkpoint.ogg',
"chemical" = 'modular_citadel/sound/vox/chemical.ogg',
"cleanup" = 'modular_citadel/sound/vox/cleanup.ogg',
"clear" = 'modular_citadel/sound/vox/clear.ogg',
"clearance" = 'modular_citadel/sound/vox/clearance.ogg',
"close" = 'modular_citadel/sound/vox/close.ogg',
"clown" = 'modular_citadel/sound/vox/clown.ogg',
"code" = 'modular_citadel/sound/vox/code.ogg',
"coded" = 'modular_citadel/sound/vox/coded.ogg',
"collider" = 'modular_citadel/sound/vox/collider.ogg',
"command" = 'modular_citadel/sound/vox/command.ogg',
"communication" = 'modular_citadel/sound/vox/communication.ogg',
"complex" = 'modular_citadel/sound/vox/complex.ogg',
"computer" = 'modular_citadel/sound/vox/computer.ogg',
"condition" = 'modular_citadel/sound/vox/condition.ogg',
"containment" = 'modular_citadel/sound/vox/containment.ogg',
"contamination" = 'modular_citadel/sound/vox/contamination.ogg',
"control" = 'modular_citadel/sound/vox/control.ogg',
"coolant" = 'modular_citadel/sound/vox/coolant.ogg',
"coomer" = 'modular_citadel/sound/vox/coomer.ogg',
"core" = 'modular_citadel/sound/vox/core.ogg',
"correct" = 'modular_citadel/sound/vox/correct.ogg',
"corridor" = 'modular_citadel/sound/vox/corridor.ogg',
"crew" = 'modular_citadel/sound/vox/crew.ogg',
"cross" = 'modular_citadel/sound/vox/cross.ogg',
"cryogenic" = 'modular_citadel/sound/vox/cryogenic.ogg',
"d" = 'modular_citadel/sound/vox/d.ogg',
"dadeda" = 'modular_citadel/sound/vox/dadeda.ogg',
"damage" = 'modular_citadel/sound/vox/damage.ogg',
"damaged" = 'modular_citadel/sound/vox/damaged.ogg',
"danger" = 'modular_citadel/sound/vox/danger.ogg',
"day" = 'modular_citadel/sound/vox/day.ogg',
"deactivated" = 'modular_citadel/sound/vox/deactivated.ogg',
"decompression" = 'modular_citadel/sound/vox/decompression.ogg',
"decontamination" = 'modular_citadel/sound/vox/decontamination.ogg',
"deeoo" = 'modular_citadel/sound/vox/deeoo.ogg',
"defense" = 'modular_citadel/sound/vox/defense.ogg',
"degrees" = 'modular_citadel/sound/vox/degrees.ogg',
"delta" = 'modular_citadel/sound/vox/delta.ogg',
"denied" = 'modular_citadel/sound/vox/denied.ogg',
"deploy" = 'modular_citadel/sound/vox/deploy.ogg',
"deployed" = 'modular_citadel/sound/vox/deployed.ogg',
"destroy" = 'modular_citadel/sound/vox/destroy.ogg',
"destroyed" = 'modular_citadel/sound/vox/destroyed.ogg',
"detain" = 'modular_citadel/sound/vox/detain.ogg',
"detected" = 'modular_citadel/sound/vox/detected.ogg',
"detonation" = 'modular_citadel/sound/vox/detonation.ogg',
"device" = 'modular_citadel/sound/vox/device.ogg',
"did" = 'modular_citadel/sound/vox/did.ogg',
"die" = 'modular_citadel/sound/vox/die.ogg',
"dimensional" = 'modular_citadel/sound/vox/dimensional.ogg',
"dirt" = 'modular_citadel/sound/vox/dirt.ogg',
"disengaged" = 'modular_citadel/sound/vox/disengaged.ogg',
"dish" = 'modular_citadel/sound/vox/dish.ogg',
"disposal" = 'modular_citadel/sound/vox/disposal.ogg',
"distance" = 'modular_citadel/sound/vox/distance.ogg',
"distortion" = 'modular_citadel/sound/vox/distortion.ogg',
"do" = 'modular_citadel/sound/vox/do.ogg',
"doctor" = 'modular_citadel/sound/vox/doctor.ogg',
"doop" = 'modular_citadel/sound/vox/doop.ogg',
"door" = 'modular_citadel/sound/vox/door.ogg',
"down" = 'modular_citadel/sound/vox/down.ogg',
"dual" = 'modular_citadel/sound/vox/dual.ogg',
"duct" = 'modular_citadel/sound/vox/duct.ogg',
"e" = 'modular_citadel/sound/vox/e.ogg',
"east" = 'modular_citadel/sound/vox/east.ogg',
"echo" = 'modular_citadel/sound/vox/echo.ogg',
"ed" = 'modular_citadel/sound/vox/ed.ogg',
"effect" = 'modular_citadel/sound/vox/effect.ogg',
"egress" = 'modular_citadel/sound/vox/egress.ogg',
"eight" = 'modular_citadel/sound/vox/eight.ogg',
"eighteen" = 'modular_citadel/sound/vox/eighteen.ogg',
"eighty" = 'modular_citadel/sound/vox/eighty.ogg',
"electric" = 'modular_citadel/sound/vox/electric.ogg',
"electromagnetic" = 'modular_citadel/sound/vox/electromagnetic.ogg',
"elevator" = 'modular_citadel/sound/vox/elevator.ogg',
"eleven" = 'modular_citadel/sound/vox/eleven.ogg',
"eliminate" = 'modular_citadel/sound/vox/eliminate.ogg',
"emergency" = 'modular_citadel/sound/vox/emergency.ogg',
"enemy" = 'modular_citadel/sound/vox/enemy.ogg',
"energy" = 'modular_citadel/sound/vox/energy.ogg',
"engage" = 'modular_citadel/sound/vox/engage.ogg',
"engaged" = 'modular_citadel/sound/vox/engaged.ogg',
"engine" = 'modular_citadel/sound/vox/engine.ogg',
"enter" = 'modular_citadel/sound/vox/enter.ogg',
"entry" = 'modular_citadel/sound/vox/entry.ogg',
"environment" = 'modular_citadel/sound/vox/environment.ogg',
"error" = 'modular_citadel/sound/vox/error.ogg',
"escape" = 'modular_citadel/sound/vox/escape.ogg',
"evacuate" = 'modular_citadel/sound/vox/evacuate.ogg',
"exchange" = 'modular_citadel/sound/vox/exchange.ogg',
"exit" = 'modular_citadel/sound/vox/exit.ogg',
"expect" = 'modular_citadel/sound/vox/expect.ogg',
"experiment" = 'modular_citadel/sound/vox/experiment.ogg',
"experimental" = 'modular_citadel/sound/vox/experimental.ogg',
"explode" = 'modular_citadel/sound/vox/explode.ogg',
"explosion" = 'modular_citadel/sound/vox/explosion.ogg',
"exposure" = 'modular_citadel/sound/vox/exposure.ogg',
"exterminate" = 'modular_citadel/sound/vox/exterminate.ogg',
"extinguish" = 'modular_citadel/sound/vox/extinguish.ogg',
"extinguisher" = 'modular_citadel/sound/vox/extinguisher.ogg',
"extreme" = 'modular_citadel/sound/vox/extreme.ogg',
"f" = 'modular_citadel/sound/vox/f.ogg',
"face" = 'modular_citadel/sound/vox/face.ogg',
"facility" = 'modular_citadel/sound/vox/facility.ogg',
"fahrenheit" = 'modular_citadel/sound/vox/fahrenheit.ogg',
"failed" = 'modular_citadel/sound/vox/failed.ogg',
"failure" = 'modular_citadel/sound/vox/failure.ogg',
"farthest" = 'modular_citadel/sound/vox/farthest.ogg',
"fast" = 'modular_citadel/sound/vox/fast.ogg',
"feet" = 'modular_citadel/sound/vox/feet.ogg',
"field" = 'modular_citadel/sound/vox/field.ogg',
"fifteen" = 'modular_citadel/sound/vox/fifteen.ogg',
"fifth" = 'modular_citadel/sound/vox/fifth.ogg',
"fifty" = 'modular_citadel/sound/vox/fifty.ogg',
"final" = 'modular_citadel/sound/vox/final.ogg',
"fine" = 'modular_citadel/sound/vox/fine.ogg',
"fire" = 'modular_citadel/sound/vox/fire.ogg',
"first" = 'modular_citadel/sound/vox/first.ogg',
"five" = 'modular_citadel/sound/vox/five.ogg',
"flag" = 'modular_citadel/sound/vox/flag.ogg',
"flooding" = 'modular_citadel/sound/vox/flooding.ogg',
"floor" = 'modular_citadel/sound/vox/floor.ogg',
"fool" = 'modular_citadel/sound/vox/fool.ogg',
"for" = 'modular_citadel/sound/vox/for.ogg',
"forbidden" = 'modular_citadel/sound/vox/forbidden.ogg',
"force" = 'modular_citadel/sound/vox/force.ogg',
"forms" = 'modular_citadel/sound/vox/forms.ogg',
"found" = 'modular_citadel/sound/vox/found.ogg',
"four" = 'modular_citadel/sound/vox/four.ogg',
"fourteen" = 'modular_citadel/sound/vox/fourteen.ogg',
"fourth" = 'modular_citadel/sound/vox/fourth.ogg',
"fourty" = 'modular_citadel/sound/vox/fourty.ogg',
"foxtrot" = 'modular_citadel/sound/vox/foxtrot.ogg',
"freeman" = 'modular_citadel/sound/vox/freeman.ogg',
"freezer" = 'modular_citadel/sound/vox/freezer.ogg',
"from" = 'modular_citadel/sound/vox/from.ogg',
"front" = 'modular_citadel/sound/vox/front.ogg',
"fuel" = 'modular_citadel/sound/vox/fuel.ogg',
"g" = 'modular_citadel/sound/vox/g.ogg',
"gay" = 'modular_citadel/sound/vox/gay.ogg',
"get" = 'modular_citadel/sound/vox/get.ogg',
"go" = 'modular_citadel/sound/vox/go.ogg',
"going" = 'modular_citadel/sound/vox/going.ogg',
"good" = 'modular_citadel/sound/vox/good.ogg',
"goodbye" = 'modular_citadel/sound/vox/goodbye.ogg',
"gordon" = 'modular_citadel/sound/vox/gordon.ogg',
"got" = 'modular_citadel/sound/vox/got.ogg',
"government" = 'modular_citadel/sound/vox/government.ogg',
"granted" = 'modular_citadel/sound/vox/granted.ogg',
"great" = 'modular_citadel/sound/vox/great.ogg',
"green" = 'modular_citadel/sound/vox/green.ogg',
"grenade" = 'modular_citadel/sound/vox/grenade.ogg',
"guard" = 'modular_citadel/sound/vox/guard.ogg',
"gulf" = 'modular_citadel/sound/vox/gulf.ogg',
"gun" = 'modular_citadel/sound/vox/gun.ogg',
"guthrie" = 'modular_citadel/sound/vox/guthrie.ogg',
"handling" = 'modular_citadel/sound/vox/handling.ogg',
"hangar" = 'modular_citadel/sound/vox/hangar.ogg',
"has" = 'modular_citadel/sound/vox/has.ogg',
"have" = 'modular_citadel/sound/vox/have.ogg',
"hazard" = 'modular_citadel/sound/vox/hazard.ogg',
"head" = 'modular_citadel/sound/vox/head.ogg',
"health" = 'modular_citadel/sound/vox/health.ogg',
"heat" = 'modular_citadel/sound/vox/heat.ogg',
"helicopter" = 'modular_citadel/sound/vox/helicopter.ogg',
"helium" = 'modular_citadel/sound/vox/helium.ogg',
"hello" = 'modular_citadel/sound/vox/hello.ogg',
"help" = 'modular_citadel/sound/vox/help.ogg',
"here" = 'modular_citadel/sound/vox/here.ogg',
"hide" = 'modular_citadel/sound/vox/hide.ogg',
"high" = 'modular_citadel/sound/vox/high.ogg',
"highest" = 'modular_citadel/sound/vox/highest.ogg',
"hit" = 'modular_citadel/sound/vox/hit.ogg',
"holds" = 'modular_citadel/sound/vox/holds.ogg',
"hole" = 'modular_citadel/sound/vox/hole.ogg',
"hostile" = 'modular_citadel/sound/vox/hostile.ogg',
"hot" = 'modular_citadel/sound/vox/hot.ogg',
"hotel" = 'modular_citadel/sound/vox/hotel.ogg',
"hour" = 'modular_citadel/sound/vox/hour.ogg',
"hours" = 'modular_citadel/sound/vox/hours.ogg',
"hundred" = 'modular_citadel/sound/vox/hundred.ogg',
"hydro" = 'modular_citadel/sound/vox/hydro.ogg',
"i" = 'modular_citadel/sound/vox/i.ogg',
"idiot" = 'modular_citadel/sound/vox/idiot.ogg',
"illegal" = 'modular_citadel/sound/vox/illegal.ogg',
"immediate" = 'modular_citadel/sound/vox/immediate.ogg',
"immediately" = 'modular_citadel/sound/vox/immediately.ogg',
"in" = 'modular_citadel/sound/vox/in.ogg',
"inches" = 'modular_citadel/sound/vox/inches.ogg',
"india" = 'modular_citadel/sound/vox/india.ogg',
"ing" = 'modular_citadel/sound/vox/ing.ogg',
"inoperative" = 'modular_citadel/sound/vox/inoperative.ogg',
"inside" = 'modular_citadel/sound/vox/inside.ogg',
"inspection" = 'modular_citadel/sound/vox/inspection.ogg',
"inspector" = 'modular_citadel/sound/vox/inspector.ogg',
"interchange" = 'modular_citadel/sound/vox/interchange.ogg',
"intruder" = 'modular_citadel/sound/vox/intruder.ogg',
"invallid" = 'modular_citadel/sound/vox/invallid.ogg',
"invasion" = 'modular_citadel/sound/vox/invasion.ogg',
"is" = 'modular_citadel/sound/vox/is.ogg',
"it" = 'modular_citadel/sound/vox/it.ogg',
"johnson" = 'modular_citadel/sound/vox/johnson.ogg',
"juliet" = 'modular_citadel/sound/vox/juliet.ogg',
"key" = 'modular_citadel/sound/vox/key.ogg',
"kill" = 'modular_citadel/sound/vox/kill.ogg',
"kilo" = 'modular_citadel/sound/vox/kilo.ogg',
"kit" = 'modular_citadel/sound/vox/kit.ogg',
"lab" = 'modular_citadel/sound/vox/lab.ogg',
"lambda" = 'modular_citadel/sound/vox/lambda.ogg',
"laser" = 'modular_citadel/sound/vox/laser.ogg',
"last" = 'modular_citadel/sound/vox/last.ogg',
"launch" = 'modular_citadel/sound/vox/launch.ogg',
"leak" = 'modular_citadel/sound/vox/leak.ogg',
"leave" = 'modular_citadel/sound/vox/leave.ogg',
"left" = 'modular_citadel/sound/vox/left.ogg',
"legal" = 'modular_citadel/sound/vox/legal.ogg',
"level" = 'modular_citadel/sound/vox/level.ogg',
"lever" = 'modular_citadel/sound/vox/lever.ogg',
"lie" = 'modular_citadel/sound/vox/lie.ogg',
"lieutenant" = 'modular_citadel/sound/vox/lieutenant.ogg',
"life" = 'modular_citadel/sound/vox/life.ogg',
"light" = 'modular_citadel/sound/vox/light.ogg',
"lima" = 'modular_citadel/sound/vox/lima.ogg',
"liquid" = 'modular_citadel/sound/vox/liquid.ogg',
"loading" = 'modular_citadel/sound/vox/loading.ogg',
"locate" = 'modular_citadel/sound/vox/locate.ogg',
"located" = 'modular_citadel/sound/vox/located.ogg',
"location" = 'modular_citadel/sound/vox/location.ogg',
"lock" = 'modular_citadel/sound/vox/lock.ogg',
"locked" = 'modular_citadel/sound/vox/locked.ogg',
"locker" = 'modular_citadel/sound/vox/locker.ogg',
"lockout" = 'modular_citadel/sound/vox/lockout.ogg',
"lower" = 'modular_citadel/sound/vox/lower.ogg',
"lowest" = 'modular_citadel/sound/vox/lowest.ogg',
"magnetic" = 'modular_citadel/sound/vox/magnetic.ogg',
"main" = 'modular_citadel/sound/vox/main.ogg',
"maintenance" = 'modular_citadel/sound/vox/maintenance.ogg',
"malfunction" = 'modular_citadel/sound/vox/malfunction.ogg',
"man" = 'modular_citadel/sound/vox/man.ogg',
"mass" = 'modular_citadel/sound/vox/mass.ogg',
"materials" = 'modular_citadel/sound/vox/materials.ogg',
"maximum" = 'modular_citadel/sound/vox/maximum.ogg',
"may" = 'modular_citadel/sound/vox/may.ogg',
"med" = 'modular_citadel/sound/vox/med.ogg',
"medical" = 'modular_citadel/sound/vox/medical.ogg',
"men" = 'modular_citadel/sound/vox/men.ogg',
"mercy" = 'modular_citadel/sound/vox/mercy.ogg',
"mesa" = 'modular_citadel/sound/vox/mesa.ogg',
"message" = 'modular_citadel/sound/vox/message.ogg',
"meter" = 'modular_citadel/sound/vox/meter.ogg',
"micro" = 'modular_citadel/sound/vox/micro.ogg',
"middle" = 'modular_citadel/sound/vox/middle.ogg',
"mike" = 'modular_citadel/sound/vox/mike.ogg',
"miles" = 'modular_citadel/sound/vox/miles.ogg',
"military" = 'modular_citadel/sound/vox/military.ogg',
"milli" = 'modular_citadel/sound/vox/milli.ogg',
"million" = 'modular_citadel/sound/vox/million.ogg',
"minefield" = 'modular_citadel/sound/vox/minefield.ogg',
"minimum" = 'modular_citadel/sound/vox/minimum.ogg',
"minutes" = 'modular_citadel/sound/vox/minutes.ogg',
"mister" = 'modular_citadel/sound/vox/mister.ogg',
"mode" = 'modular_citadel/sound/vox/mode.ogg',
"motor" = 'modular_citadel/sound/vox/motor.ogg',
"motorpool" = 'modular_citadel/sound/vox/motorpool.ogg',
"move" = 'modular_citadel/sound/vox/move.ogg',
"must" = 'modular_citadel/sound/vox/must.ogg',
"nearest" = 'modular_citadel/sound/vox/nearest.ogg',
"nice" = 'modular_citadel/sound/vox/nice.ogg',
"nine" = 'modular_citadel/sound/vox/nine.ogg',
"nineteen" = 'modular_citadel/sound/vox/nineteen.ogg',
"ninety" = 'modular_citadel/sound/vox/ninety.ogg',
"no" = 'modular_citadel/sound/vox/no.ogg',
"nominal" = 'modular_citadel/sound/vox/nominal.ogg',
"north" = 'modular_citadel/sound/vox/north.ogg',
"not" = 'modular_citadel/sound/vox/not.ogg',
"november" = 'modular_citadel/sound/vox/november.ogg',
"now" = 'modular_citadel/sound/vox/now.ogg',
"number" = 'modular_citadel/sound/vox/number.ogg',
"objective" = 'modular_citadel/sound/vox/objective.ogg',
"observation" = 'modular_citadel/sound/vox/observation.ogg',
"of" = 'modular_citadel/sound/vox/of.ogg',
"officer" = 'modular_citadel/sound/vox/officer.ogg',
"ok" = 'modular_citadel/sound/vox/ok.ogg',
"on" = 'modular_citadel/sound/vox/on.ogg',
"one" = 'modular_citadel/sound/vox/one.ogg',
"open" = 'modular_citadel/sound/vox/open.ogg',
"operating" = 'modular_citadel/sound/vox/operating.ogg',
"operations" = 'modular_citadel/sound/vox/operations.ogg',
"operative" = 'modular_citadel/sound/vox/operative.ogg',
"option" = 'modular_citadel/sound/vox/option.ogg',
"order" = 'modular_citadel/sound/vox/order.ogg',
"organic" = 'modular_citadel/sound/vox/organic.ogg',
"oscar" = 'modular_citadel/sound/vox/oscar.ogg',
"out" = 'modular_citadel/sound/vox/out.ogg',
"outside" = 'modular_citadel/sound/vox/outside.ogg',
"over" = 'modular_citadel/sound/vox/over.ogg',
"overload" = 'modular_citadel/sound/vox/overload.ogg',
"override" = 'modular_citadel/sound/vox/override.ogg',
"pacify" = 'modular_citadel/sound/vox/pacify.ogg',
"pain" = 'modular_citadel/sound/vox/pain.ogg',
"pal" = 'modular_citadel/sound/vox/pal.ogg',
"panel" = 'modular_citadel/sound/vox/panel.ogg',
"percent" = 'modular_citadel/sound/vox/percent.ogg',
"perimeter" = 'modular_citadel/sound/vox/perimeter.ogg',
"permitted" = 'modular_citadel/sound/vox/permitted.ogg',
"personnel" = 'modular_citadel/sound/vox/personnel.ogg',
"pipe" = 'modular_citadel/sound/vox/pipe.ogg',
"plant" = 'modular_citadel/sound/vox/plant.ogg',
"platform" = 'modular_citadel/sound/vox/platform.ogg',
"please" = 'modular_citadel/sound/vox/please.ogg',
"point" = 'modular_citadel/sound/vox/point.ogg',
"portal" = 'modular_citadel/sound/vox/portal.ogg',
"power" = 'modular_citadel/sound/vox/power.ogg',
"presence" = 'modular_citadel/sound/vox/presence.ogg',
"press" = 'modular_citadel/sound/vox/press.ogg',
"primary" = 'modular_citadel/sound/vox/primary.ogg',
"proceed" = 'modular_citadel/sound/vox/proceed.ogg',
"processing" = 'modular_citadel/sound/vox/processing.ogg',
"progress" = 'modular_citadel/sound/vox/progress.ogg',
"proper" = 'modular_citadel/sound/vox/proper.ogg',
"propulsion" = 'modular_citadel/sound/vox/propulsion.ogg',
"prosecute" = 'modular_citadel/sound/vox/prosecute.ogg',
"protective" = 'modular_citadel/sound/vox/protective.ogg',
"push" = 'modular_citadel/sound/vox/push.ogg',
"quantum" = 'modular_citadel/sound/vox/quantum.ogg',
"quebec" = 'modular_citadel/sound/vox/quebec.ogg',
"question" = 'modular_citadel/sound/vox/question.ogg',
"questioning" = 'modular_citadel/sound/vox/questioning.ogg',
"quick" = 'modular_citadel/sound/vox/quick.ogg',
"quit" = 'modular_citadel/sound/vox/quit.ogg',
"radiation" = 'modular_citadel/sound/vox/radiation.ogg',
"radioactive" = 'modular_citadel/sound/vox/radioactive.ogg',
"rads" = 'modular_citadel/sound/vox/rads.ogg',
"rapid" = 'modular_citadel/sound/vox/rapid.ogg',
"reach" = 'modular_citadel/sound/vox/reach.ogg',
"reached" = 'modular_citadel/sound/vox/reached.ogg',
"reactor" = 'modular_citadel/sound/vox/reactor.ogg',
"red" = 'modular_citadel/sound/vox/red.ogg',
"relay" = 'modular_citadel/sound/vox/relay.ogg',
"released" = 'modular_citadel/sound/vox/released.ogg',
"remaining" = 'modular_citadel/sound/vox/remaining.ogg',
"renegade" = 'modular_citadel/sound/vox/renegade.ogg',
"repair" = 'modular_citadel/sound/vox/repair.ogg',
"report" = 'modular_citadel/sound/vox/report.ogg',
"reports" = 'modular_citadel/sound/vox/reports.ogg',
"required" = 'modular_citadel/sound/vox/required.ogg',
"research" = 'modular_citadel/sound/vox/research.ogg',
"reset" = 'modular_citadel/sound/vox/reset.ogg',
"resevoir" = 'modular_citadel/sound/vox/resevoir.ogg',
"resistance" = 'modular_citadel/sound/vox/resistance.ogg',
"returned" = 'modular_citadel/sound/vox/returned.ogg',
"right" = 'modular_citadel/sound/vox/right.ogg',
"rocket" = 'modular_citadel/sound/vox/rocket.ogg',
"roger" = 'modular_citadel/sound/vox/roger.ogg',
"romeo" = 'modular_citadel/sound/vox/romeo.ogg',
"room" = 'modular_citadel/sound/vox/room.ogg',
"round" = 'modular_citadel/sound/vox/round.ogg',
"run" = 'modular_citadel/sound/vox/run.ogg',
"safe" = 'modular_citadel/sound/vox/safe.ogg',
"safety" = 'modular_citadel/sound/vox/safety.ogg',
"sargeant" = 'modular_citadel/sound/vox/sargeant.ogg',
"satellite" = 'modular_citadel/sound/vox/satellite.ogg',
"save" = 'modular_citadel/sound/vox/save.ogg',
"science" = 'modular_citadel/sound/vox/science.ogg',
"scores" = 'modular_citadel/sound/vox/scores.ogg',
"scream" = 'modular_citadel/sound/vox/scream.ogg',
"screen" = 'modular_citadel/sound/vox/screen.ogg',
"search" = 'modular_citadel/sound/vox/search.ogg',
"second" = 'modular_citadel/sound/vox/second.ogg',
"secondary" = 'modular_citadel/sound/vox/secondary.ogg',
"seconds" = 'modular_citadel/sound/vox/seconds.ogg',
"sector" = 'modular_citadel/sound/vox/sector.ogg',
"secure" = 'modular_citadel/sound/vox/secure.ogg',
"secured" = 'modular_citadel/sound/vox/secured.ogg',
"security" = 'modular_citadel/sound/vox/security.ogg',
"select" = 'modular_citadel/sound/vox/select.ogg',
"selected" = 'modular_citadel/sound/vox/selected.ogg',
"service" = 'modular_citadel/sound/vox/service.ogg',
"seven" = 'modular_citadel/sound/vox/seven.ogg',
"seventeen" = 'modular_citadel/sound/vox/seventeen.ogg',
"seventy" = 'modular_citadel/sound/vox/seventy.ogg',
"severe" = 'modular_citadel/sound/vox/severe.ogg',
"sewage" = 'modular_citadel/sound/vox/sewage.ogg',
"sewer" = 'modular_citadel/sound/vox/sewer.ogg',
"shield" = 'modular_citadel/sound/vox/shield.ogg',
"shipment" = 'modular_citadel/sound/vox/shipment.ogg',
"shock" = 'modular_citadel/sound/vox/shock.ogg',
"shoot" = 'modular_citadel/sound/vox/shoot.ogg',
"shower" = 'modular_citadel/sound/vox/shower.ogg',
"shut" = 'modular_citadel/sound/vox/shut.ogg',
"side" = 'modular_citadel/sound/vox/side.ogg',
"sierra" = 'modular_citadel/sound/vox/sierra.ogg',
"sight" = 'modular_citadel/sound/vox/sight.ogg',
"silo" = 'modular_citadel/sound/vox/silo.ogg',
"six" = 'modular_citadel/sound/vox/six.ogg',
"sixteen" = 'modular_citadel/sound/vox/sixteen.ogg',
"sixty" = 'modular_citadel/sound/vox/sixty.ogg',
"slime" = 'modular_citadel/sound/vox/slime.ogg',
"slow" = 'modular_citadel/sound/vox/slow.ogg',
"soldier" = 'modular_citadel/sound/vox/soldier.ogg',
"some" = 'modular_citadel/sound/vox/some.ogg',
"someone" = 'modular_citadel/sound/vox/someone.ogg',
"something" = 'modular_citadel/sound/vox/something.ogg',
"son" = 'modular_citadel/sound/vox/son.ogg',
"sorry" = 'modular_citadel/sound/vox/sorry.ogg',
"south" = 'modular_citadel/sound/vox/south.ogg',
"squad" = 'modular_citadel/sound/vox/squad.ogg',
"square" = 'modular_citadel/sound/vox/square.ogg',
"stairway" = 'modular_citadel/sound/vox/stairway.ogg',
"status" = 'modular_citadel/sound/vox/status.ogg',
"sterile" = 'modular_citadel/sound/vox/sterile.ogg',
"sterilization" = 'modular_citadel/sound/vox/sterilization.ogg',
"stolen" = 'modular_citadel/sound/vox/stolen.ogg',
"storage" = 'modular_citadel/sound/vox/storage.ogg',
"sub" = 'modular_citadel/sound/vox/sub.ogg',
"subsurface" = 'modular_citadel/sound/vox/subsurface.ogg',
"sudden" = 'modular_citadel/sound/vox/sudden.ogg',
"suit" = 'modular_citadel/sound/vox/suit.ogg',
"superconducting" = 'modular_citadel/sound/vox/superconducting.ogg',
"supercooled" = 'modular_citadel/sound/vox/supercooled.ogg',
"supply" = 'modular_citadel/sound/vox/supply.ogg',
"surface" = 'modular_citadel/sound/vox/surface.ogg',
"surrender" = 'modular_citadel/sound/vox/surrender.ogg',
"surround" = 'modular_citadel/sound/vox/surround.ogg',
"surrounded" = 'modular_citadel/sound/vox/surrounded.ogg',
"switch" = 'modular_citadel/sound/vox/switch.ogg',
"system" = 'modular_citadel/sound/vox/system.ogg',
"systems" = 'modular_citadel/sound/vox/systems.ogg',
"tactical" = 'modular_citadel/sound/vox/tactical.ogg',
"take" = 'modular_citadel/sound/vox/take.ogg',
"talk" = 'modular_citadel/sound/vox/talk.ogg',
"tango" = 'modular_citadel/sound/vox/tango.ogg',
"tank" = 'modular_citadel/sound/vox/tank.ogg',
"target" = 'modular_citadel/sound/vox/target.ogg',
"team" = 'modular_citadel/sound/vox/team.ogg',
"temperature" = 'modular_citadel/sound/vox/temperature.ogg',
"temporal" = 'modular_citadel/sound/vox/temporal.ogg',
"ten" = 'modular_citadel/sound/vox/ten.ogg',
"terminal" = 'modular_citadel/sound/vox/terminal.ogg',
"terminated" = 'modular_citadel/sound/vox/terminated.ogg',
"termination" = 'modular_citadel/sound/vox/termination.ogg',
"test" = 'modular_citadel/sound/vox/test.ogg',
"that" = 'modular_citadel/sound/vox/that.ogg',
"the" = 'modular_citadel/sound/vox/the.ogg',
"then" = 'modular_citadel/sound/vox/then.ogg',
"there" = 'modular_citadel/sound/vox/there.ogg',
"third" = 'modular_citadel/sound/vox/third.ogg',
"thirteen" = 'modular_citadel/sound/vox/thirteen.ogg',
"thirty" = 'modular_citadel/sound/vox/thirty.ogg',
"this" = 'modular_citadel/sound/vox/this.ogg',
"those" = 'modular_citadel/sound/vox/those.ogg',
"thousand" = 'modular_citadel/sound/vox/thousand.ogg',
"threat" = 'modular_citadel/sound/vox/threat.ogg',
"three" = 'modular_citadel/sound/vox/three.ogg',
"through" = 'modular_citadel/sound/vox/through.ogg',
"time" = 'modular_citadel/sound/vox/time.ogg',
"to" = 'modular_citadel/sound/vox/to.ogg',
"top" = 'modular_citadel/sound/vox/top.ogg',
"topside" = 'modular_citadel/sound/vox/topside.ogg',
"touch" = 'modular_citadel/sound/vox/touch.ogg',
"towards" = 'modular_citadel/sound/vox/towards.ogg',
"track" = 'modular_citadel/sound/vox/track.ogg',
"train" = 'modular_citadel/sound/vox/train.ogg',
"transportation" = 'modular_citadel/sound/vox/transportation.ogg',
"truck" = 'modular_citadel/sound/vox/truck.ogg',
"tunnel" = 'modular_citadel/sound/vox/tunnel.ogg',
"turn" = 'modular_citadel/sound/vox/turn.ogg',
"turret" = 'modular_citadel/sound/vox/turret.ogg',
"twelve" = 'modular_citadel/sound/vox/twelve.ogg',
"twenty" = 'modular_citadel/sound/vox/twenty.ogg',
"two" = 'modular_citadel/sound/vox/two.ogg',
"unauthorized" = 'modular_citadel/sound/vox/unauthorized.ogg',
"under" = 'modular_citadel/sound/vox/under.ogg',
"uniform" = 'modular_citadel/sound/vox/uniform.ogg',
"unlocked" = 'modular_citadel/sound/vox/unlocked.ogg',
"until" = 'modular_citadel/sound/vox/until.ogg',
"up" = 'modular_citadel/sound/vox/up.ogg',
"upper" = 'modular_citadel/sound/vox/upper.ogg',
"uranium" = 'modular_citadel/sound/vox/uranium.ogg',
"us" = 'modular_citadel/sound/vox/us.ogg',
"usa" = 'modular_citadel/sound/vox/usa.ogg',
"use" = 'modular_citadel/sound/vox/use.ogg',
"used" = 'modular_citadel/sound/vox/used.ogg',
"user" = 'modular_citadel/sound/vox/user.ogg',
"vacate" = 'modular_citadel/sound/vox/vacate.ogg',
"valid" = 'modular_citadel/sound/vox/valid.ogg',
"vapor" = 'modular_citadel/sound/vox/vapor.ogg',
"vent" = 'modular_citadel/sound/vox/vent.ogg',
"ventillation" = 'modular_citadel/sound/vox/ventillation.ogg',
"victor" = 'modular_citadel/sound/vox/victor.ogg',
"violated" = 'modular_citadel/sound/vox/violated.ogg',
"violation" = 'modular_citadel/sound/vox/violation.ogg',
"voltage" = 'modular_citadel/sound/vox/voltage.ogg',
"vox_login" = 'modular_citadel/sound/vox/vox_login.ogg',
"walk" = 'modular_citadel/sound/vox/walk.ogg',
"wall" = 'modular_citadel/sound/vox/wall.ogg',
"want" = 'modular_citadel/sound/vox/want.ogg',
"wanted" = 'modular_citadel/sound/vox/wanted.ogg',
"warm" = 'modular_citadel/sound/vox/warm.ogg',
"warn" = 'modular_citadel/sound/vox/warn.ogg',
"warning" = 'modular_citadel/sound/vox/warning.ogg',
"waste" = 'modular_citadel/sound/vox/waste.ogg',
"water" = 'modular_citadel/sound/vox/water.ogg',
"we" = 'modular_citadel/sound/vox/we.ogg',
"weapon" = 'modular_citadel/sound/vox/weapon.ogg',
"west" = 'modular_citadel/sound/vox/west.ogg',
"whiskey" = 'modular_citadel/sound/vox/whiskey.ogg',
"white" = 'modular_citadel/sound/vox/white.ogg',
"wilco" = 'modular_citadel/sound/vox/wilco.ogg',
"will" = 'modular_citadel/sound/vox/will.ogg',
"with" = 'modular_citadel/sound/vox/with.ogg',
"without" = 'modular_citadel/sound/vox/without.ogg',
"woop" = 'modular_citadel/sound/vox/woop.ogg',
"xeno" = 'modular_citadel/sound/vox/xeno.ogg',
"yankee" = 'modular_citadel/sound/vox/yankee.ogg',
"yards" = 'modular_citadel/sound/vox/yards.ogg',
"year" = 'modular_citadel/sound/vox/year.ogg',
"yellow" = 'modular_citadel/sound/vox/yellow.ogg',
"yes" = 'modular_citadel/sound/vox/yes.ogg',
"you" = 'modular_citadel/sound/vox/you.ogg',
"your" = 'modular_citadel/sound/vox/your.ogg',
"yourself" = 'modular_citadel/sound/vox/yourself.ogg',
"zero" = 'modular_citadel/sound/vox/zero.ogg',
"zone" = 'modular_citadel/sound/vox/zone.ogg',
"zulu" = 'modular_citadel/sound/vox/zulu.ogg',))
#endif
@@ -143,7 +143,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
/obj/item/storage/bag/borgdelivery/ComponentInitialize()
. = ..()
GET_COMPONENT(STR, /datum/component/storage)
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_w_class = WEIGHT_CLASS_BULKY
STR.max_combined_w_class = 5
STR.max_items = 1
+4 -2
View File
@@ -3,9 +3,11 @@
/mob/say_mod(input, message_mode)
var/customsayverb = findtext(input, "*")
if(customsayverb)
if(customsayverb && message_mode != MODE_WHISPER_CRIT)
message_mode = MODE_CUSTOM_SAY
return lowertext(copytext(input, 1, customsayverb))
. = ..()
else
return ..()
/atom/movable/proc/attach_spans(input, list/spans)
var/customsayverb = findtext(input, "*")
@@ -1,4 +1,4 @@
/obj/item/projectile/bullet/c46x30mm_tx
name = "toxin tipped 4.6x30mm bullet"
damage = 15
damage = 10
damage_type = TOX
@@ -57,10 +57,9 @@
icon_state = "magjectile-nl"
damage = 2
knockdown = 0
stamina = 25
armour_penetration = -10
stamina = 20
light_range = 2
speed = 0.7
speed = 0.6
range = 25
light_color = LIGHT_COLOR_BLUE
@@ -109,9 +108,10 @@
fire_sound = 'sound/weapons/magpistol.ogg'
mag_type = /obj/item/ammo_box/magazine/mmag/small
can_suppress = 0
casing_ejector = 0
casing_ejector = FALSE
fire_delay = 2
recoil = 0.2
recoil = 0.1
inaccuracy_modifier = 0.25
/obj/item/gun/ballistic/automatic/pistol/mag/update_icon()
..()
@@ -123,7 +123,6 @@
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
///research memes///
/*
/obj/item/gun/ballistic/automatic/pistol/mag/nopin
pin = null
spawnwithmagazine = FALSE
@@ -155,7 +154,7 @@
materials = list(MAT_METAL = 3000, MAT_SILVER = 250, MAT_TITANIUM = 250)
build_path = /obj/item/ammo_box/magazine/mmag/small
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
*/
//////toy memes/////
/obj/item/projectile/bullet/reusable/foam_dart/mag
@@ -201,9 +200,9 @@
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "magjectile-large"
damage = 20
armour_penetration = 25
armour_penetration = 20
light_range = 3
speed = 0.7
speed = 0.6
range = 35
light_color = LIGHT_COLOR_RED
@@ -212,10 +211,10 @@
icon_state = "magjectile-large-nl"
damage = 2
knockdown = 0
stamina = 25
armour_penetration = -10
stamina = 20
armour_penetration = 10
light_range = 3
speed = 0.65
speed = 0.6
range = 35
light_color = LIGHT_COLOR_BLUE
@@ -227,6 +226,8 @@
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "mag-casing-live"
projectile_type = /obj/item/projectile/bullet/magrifle
click_cooldown_override = 2.5
delay = 3
/obj/item/ammo_casing/caseless/anlmagm
desc = "A large, specialized ferromagnetic slug designed with a less-than-lethal payload."
@@ -234,10 +235,12 @@
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "mag-casing-live"
projectile_type = /obj/item/projectile/bullet/nlmagrifle
click_cooldown_override = 2.5
delay = 3
///magazines///
/obj/item/ammo_box/magazine/mmag/
/obj/item/ammo_box/magazine/mmag
name = "magrifle magazine (non-lethal disabler)"
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "mediummagmag"
@@ -261,17 +264,20 @@
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "magrifle"
item_state = "arg"
slot_flags = 0
slot_flags = NONE
mag_type = /obj/item/ammo_box/magazine/mmag
fire_sound = 'sound/weapons/magrifle.ogg'
can_suppress = 0
burst_size = 3
fire_delay = 2
spread = 5
recoil = 0.15
casing_ejector = 0
burst_size = 1
actions_types = null
fire_delay = 3
spread = 0
recoil = 0.1
casing_ejector = FALSE
inaccuracy_modifier = 0.5
weapon_weight = WEAPON_MEDIUM
dualwield_spread_mult = 1.4
/*
//research///
/obj/item/gun/ballistic/automatic/magrifle/nopin
@@ -305,7 +311,7 @@
materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500)
build_path = /obj/item/ammo_box/magazine/mmag
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
*/
///foamagrifle///
/obj/item/ammo_box/magazine/toy/foamag
@@ -327,7 +333,6 @@
spread = 60
w_class = WEIGHT_CLASS_BULKY
weapon_weight = WEAPON_HEAVY
/*
// TECHWEBS IMPLEMENTATION
//
@@ -339,7 +344,6 @@
design_ids = list("magrifle", "magpisol", "mag_magrifle", "mag_magrifle_nl", "mag_magpistol", "mag_magpistol_nl")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
*/
//////Hyper-Burst Rifle//////
@@ -143,6 +143,7 @@
// TECHWEBS IMPLEMENTATION
*/
/*
/datum/techweb_node/magnetic_weapons
id = "magnetic_weapons"
display_name = "Magnetic Weapons"
@@ -151,6 +152,7 @@
design_ids = list("magrifle_e", "magpistol_e", "mag_magrifle_e", "mag_magrifle_e_nl", "mag_magpistol_e", "mag_magpistol_e_nl")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
*/
///magrifle///
@@ -1,13 +1,6 @@
/obj/item/gun/energy/e_gun
name = "blaster carbine"
desc = "A high powered particle blaster carbine with varitable setting for stunning or lethal applications."
icon = 'modular_citadel/icons/obj/guns/OVERRIDE_energy.dmi'
lefthand_file = 'modular_citadel/icons/mob/inhands/OVERRIDE_guns_lefthand.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/OVERRIDE_guns_righthand.dmi'
ammo_x_offset = 2
flight_x_offset = 17
flight_y_offset = 11
/*/////////////////////////////////////////////////////////////////////////////////////////////
The Recolourable Energy Gun
@@ -1,19 +1,11 @@
/obj/item/gun/energy/laser
name = "blaster rifle"
desc = "a high energy particle blaster, efficient and deadly."
icon = 'modular_citadel/icons/obj/guns/OVERRIDE_energy.dmi'
ammo_x_offset = 1
shaded_charge = 1
lefthand_file = 'modular_citadel/icons/mob/inhands/OVERRIDE_guns_lefthand.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/OVERRIDE_guns_righthand.dmi'
/obj/item/gun/energy/laser/practice
icon = 'modular_citadel/icons/obj/guns/energy.dmi'
icon_state = "laser-p"
/obj/item/gun/energy/laser/bluetag
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
/obj/item/gun/energy/laser/redtag
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
lefthand_file = 'modular_citadel/icons/mob/inhands/OVERRIDE_guns_lefthand.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/OVERRIDE_guns_righthand.dmi'
ammo_x_offset = 1
shaded_charge = 1
@@ -182,7 +182,7 @@
/datum/reagent/fermi/nanite_b_gone/on_mob_life(mob/living/carbon/C)
//var/component/nanites/N = M.GetComponent(/datum/component/nanites)
GET_COMPONENT_FROM(N, /datum/component/nanites, C)
var/datum/component/nanites/N = C.GetComponent(/datum/component/nanites)
if(isnull(N))
return ..()
N.nanite_volume = -purity//0.5 seems to be the default to me, so it'll neuter them.
@@ -190,7 +190,7 @@
/datum/reagent/fermi/nanite_b_gone/overdose_process(mob/living/carbon/C)
//var/component/nanites/N = M.GetComponent(/datum/component/nanites)
GET_COMPONENT_FROM(N, /datum/component/nanites, C)
var/datum/component/nanites/N = C.GetComponent(/datum/component/nanites)
if(prob(5))
to_chat(C, "<span class='warning'>The residual voltage from the nanites causes you to seize up!</b></span>")
C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE)
@@ -1,11 +1,3 @@
/datum/reagent/space_cleaner/reaction_obj(obj/O, reac_volume)
if(istype(O, /obj/effect/decal/cleanable) || istype(O, /obj/item/projectile/bullet/reusable/foam_dart) || istype(O, /obj/item/ammo_casing/caseless/foam_dart))
qdel(O)
else
if(O)
O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
/datum/reagent/syndicateadrenals
name = "Syndicate Adrenaline"
id = "syndicateadrenals"
@@ -327,10 +327,10 @@
//So slimes can play too.
/datum/chemical_reaction/fermi/enthrall/slime
required_catalysts = list("slimejelly" = 1)
required_catalysts = list("jellyblood" = 1)
/datum/chemical_reaction/fermi/enthrall/slime/FermiFinish(datum/reagents/holder, var/atom/my_atom)
var/datum/reagent/toxin/slimejelly/B = locate(/datum/reagent/toxin/slimejelly) in my_atom.reagents.reagent_list//The one line change.
var/datum/reagent/blood/jellyblood/B = locate(/datum/reagent/blood/jellyblood) in my_atom.reagents.reagent_list//The one line change.
var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in my_atom.reagents.reagent_list
if(!B.data)
var/list/seen = viewers(5, get_turf(my_atom))
@@ -1,12 +1,12 @@
/obj/item/fermichem/pHbooklet
name = "pH indicator booklet"
desc = "A booklet containing paper soaked in universal indicator."
icon_state = "pHbooklet"
icon = 'modular_citadel/icons/obj/FermiChem.dmi'
item_flags = NOBLUDGEON
var/numberOfPages = 50
resistance_flags = FLAMMABLE
w_class = WEIGHT_CLASS_TINY
name = "pH indicator booklet"
desc = "A booklet containing paper soaked in universal indicator."
icon_state = "pHbooklet"
icon = 'icons/obj/chemical.dmi'
item_flags = NOBLUDGEON
var/numberOfPages = 50
resistance_flags = FLAMMABLE
w_class = WEIGHT_CLASS_TINY
//A little janky with pockets
/obj/item/fermichem/pHbooklet/attack_hand(mob/user)
@@ -29,7 +29,7 @@
to_chat(user, "<span class='warning'>[src] is empty!</span>")
add_fingerprint(user)
return
. = ..()
. = ..()
if(. & COMPONENT_NO_INTERACT)
return
var/I = user.get_active_held_item()
@@ -37,86 +37,86 @@
user.put_in_active_hand(src)
/obj/item/fermichem/pHbooklet/MouseDrop()
var/mob/living/user = usr
if(numberOfPages >= 1)
var/obj/item/fermichem/pHpaper/P = new /obj/item/fermichem/pHpaper
P.add_fingerprint(user)
P.forceMove(user)
user.put_in_active_hand(P)
to_chat(user, "<span class='notice'>You take [P] out of \the [src].</span>")
numberOfPages--
playsound(user.loc, 'sound/items/poster_ripped.ogg', 50, 1)
add_fingerprint(user)
if(numberOfPages == 0)
icon_state = "pHbookletEmpty"
return
else
to_chat(user, "<span class='warning'>[src] is empty!</span>")
add_fingerprint(user)
return
..()
var/mob/living/user = usr
if(numberOfPages >= 1)
var/obj/item/fermichem/pHpaper/P = new /obj/item/fermichem/pHpaper
P.add_fingerprint(user)
P.forceMove(user)
user.put_in_active_hand(P)
to_chat(user, "<span class='notice'>You take [P] out of \the [src].</span>")
numberOfPages--
playsound(user.loc, 'sound/items/poster_ripped.ogg', 50, 1)
add_fingerprint(user)
if(numberOfPages == 0)
icon_state = "pHbookletEmpty"
return
else
to_chat(user, "<span class='warning'>[src] is empty!</span>")
add_fingerprint(user)
return
..()
/obj/item/fermichem/pHpaper
name = "pH indicator strip"
desc = "A piece of paper that will change colour depending on the pH of a solution."
icon_state = "pHpaper"
icon = 'modular_citadel/icons/obj/FermiChem.dmi'
item_flags = NOBLUDGEON
color = "#f5c352"
var/used = FALSE
resistance_flags = FLAMMABLE
w_class = WEIGHT_CLASS_TINY
name = "pH indicator strip"
desc = "A piece of paper that will change colour depending on the pH of a solution."
icon_state = "pHpaper"
icon = 'icons/obj/chemical.dmi'
item_flags = NOBLUDGEON
color = "#f5c352"
var/used = FALSE
resistance_flags = FLAMMABLE
w_class = WEIGHT_CLASS_TINY
/obj/item/fermichem/pHpaper/afterattack(obj/item/reagent_containers/cont, mob/user, proximity)
if(!istype(cont))
return
if(used == TRUE)
to_chat(user, "<span class='warning'>[user] has already been used!</span>")
return
if(!LAZYLEN(cont.reagents.reagent_list))
return
switch(round(cont.reagents.pH, 1))
if(14 to INFINITY)
color = "#462c83"
if(13 to 14)
color = "#63459b"
if(12 to 13)
color = "#5a51a2"
if(11 to 12)
color = "#3853a4"
if(10 to 11)
color = "#3f93cf"
if(9 to 10)
color = "#0bb9b7"
if(8 to 9)
color = "#23b36e"
if(7 to 8)
color = "#3aa651"
if(6 to 7)
color = "#4cb849"
if(5 to 6)
color = "#b5d335"
if(4 to 5)
color = "#f7ec1e"
if(3 to 4)
color = "#fbc314"
if(2 to 3)
color = "#f26724"
if(1 to 2)
color = "#ef1d26"
if(-INFINITY to 1)
color = "#c6040c"
desc += " The paper looks to be around a pH of [round(cont.reagents.pH, 1)]"
used = TRUE
if(!istype(cont))
return
if(used == TRUE)
to_chat(user, "<span class='warning'>[user] has already been used!</span>")
return
if(!LAZYLEN(cont.reagents.reagent_list))
return
switch(round(cont.reagents.pH, 1))
if(14 to INFINITY)
color = "#462c83"
if(13 to 14)
color = "#63459b"
if(12 to 13)
color = "#5a51a2"
if(11 to 12)
color = "#3853a4"
if(10 to 11)
color = "#3f93cf"
if(9 to 10)
color = "#0bb9b7"
if(8 to 9)
color = "#23b36e"
if(7 to 8)
color = "#3aa651"
if(6 to 7)
color = "#4cb849"
if(5 to 6)
color = "#b5d335"
if(4 to 5)
color = "#f7ec1e"
if(3 to 4)
color = "#fbc314"
if(2 to 3)
color = "#f26724"
if(1 to 2)
color = "#ef1d26"
if(-INFINITY to 1)
color = "#c6040c"
desc += " The paper looks to be around a pH of [round(cont.reagents.pH, 1)]"
used = TRUE
/obj/item/fermichem/pHmeter
name = "Chemistry Analyser"
desc = "A a electrode attached to a small circuit box that will tell you the pH of a solution. The screen currently displays nothing."
icon_state = "pHmeter"
icon = 'modular_citadel/icons/obj/FermiChem.dmi'
resistance_flags = FLAMMABLE
w_class = WEIGHT_CLASS_TINY
var/scanmode = 1
name = "Chemistry Analyser"
desc = "A a electrode attached to a small circuit box that will tell you the pH of a solution. The screen currently displays nothing."
icon_state = "pHmeter"
icon = 'icons/obj/chemical.dmi'
resistance_flags = FLAMMABLE
w_class = WEIGHT_CLASS_TINY
var/scanmode = 1
/obj/item/fermichem/pHmeter/attack_self(mob/user)
if(!scanmode)
@@ -127,21 +127,21 @@
scanmode = 0
/obj/item/fermichem/pHmeter/afterattack(atom/A, mob/user, proximity)
. = ..()
if(!istype(A, /obj/item/reagent_containers))
return
var/obj/item/reagent_containers/cont = A
if(LAZYLEN(cont.reagents.reagent_list) == null)
return
var/out_message
to_chat(user, "<i>The chemistry meter beeps and displays:</i>")
out_message += "<span class='notice'><b>Total volume: [round(cont.volume, 0.01)] Total pH: [round(cont.reagents.pH, 0.1)]\n"
if(cont.reagents.fermiIsReacting)
out_message += "<span class='warning'>A reaction appears to be occuring currently.<span class='notice'>\n"
out_message += "Chemicals found in the beaker:</b>\n"
for(var/datum/reagent/R in cont.reagents.reagent_list)
out_message += "<b>[R.volume]u of [R.name]</b>, <b>Purity:</b> [R.purity], [(scanmode?"[(R.overdose_threshold?"<b>Overdose:</b> [R.overdose_threshold]u, ":"")][(R.addiction_threshold?"<b>Addiction:</b> [R.addiction_threshold]u, ":"")]<b>Base pH:</b> [R.pH].":".")]\n"
if(scanmode)
out_message += "<b>Analysis:</b> [R.description]\n"
to_chat(user, "[out_message]</span>")
desc = "An electrode attached to a small circuit box that will analyse a beaker. It can be toggled to give a reduced or extended report. The screen currently displays [round(cont.reagents.pH, 0.1)]."
. = ..()
if(!istype(A, /obj/item/reagent_containers))
return
var/obj/item/reagent_containers/cont = A
if(LAZYLEN(cont.reagents.reagent_list) == null)
return
var/out_message
to_chat(user, "<i>The chemistry meter beeps and displays:</i>")
out_message += "<span class='notice'><b>Total volume: [round(cont.volume, 0.01)] Total pH: [round(cont.reagents.pH, 0.1)]\n"
if(cont.reagents.fermiIsReacting)
out_message += "<span class='warning'>A reaction appears to be occuring currently.<span class='notice'>\n"
out_message += "Chemicals found in the beaker:</b>\n"
for(var/datum/reagent/R in cont.reagents.reagent_list)
out_message += "<b>[R.volume]u of [R.name]</b>, <b>Purity:</b> [R.purity], [(scanmode?"[(R.overdose_threshold?"<b>Overdose:</b> [R.overdose_threshold]u, ":"")][(R.addiction_threshold?"<b>Addiction:</b> [R.addiction_threshold]u, ":"")]<b>Base pH:</b> [R.pH].":".")]\n"
if(scanmode)
out_message += "<b>Analysis:</b> [R.description]\n"
to_chat(user, "[out_message]</span>")
desc = "An electrode attached to a small circuit box that will analyse a beaker. It can be toggled to give a reduced or extended report. The screen currently displays [round(cont.reagents.pH, 0.1)]."
@@ -1,41 +0,0 @@
/obj/structure/reagent_dispensers/keg
name = "keg"
desc = "A keg."
icon = 'modular_citadel/icons/obj/objects.dmi'
icon_state = "keg"
reagent_id = "water"
/obj/structure/reagent_dispensers/keg/mead
name = "keg of mead"
desc = "A keg of mead."
icon_state = "orangekeg"
reagent_id = "mead"
/obj/structure/reagent_dispensers/keg/aphro
name = "keg of aphrodisiac"
desc = "A keg of aphrodisiac."
icon_state = "pinkkeg"
reagent_id = "aphro"
/obj/structure/reagent_dispensers/keg/aphro/strong
name = "keg of strong aphrodisiac"
desc = "A keg of strong and addictive aphrodisiac."
reagent_id = "aphro+"
/obj/structure/reagent_dispensers/keg/milk
name = "keg of milk"
desc = "It's not quite what you were hoping for."
icon_state = "whitekeg"
reagent_id = "milk"
/obj/structure/reagent_dispensers/keg/semen
name = "keg of semen"
desc = "Dear lord, where did this even come from?"
icon_state = "whitekeg"
reagent_id = "semen"
/obj/structure/reagent_dispensers/keg/gargle
name = "keg of pan galactic gargleblaster"
desc = "A keg of... wow that's a long name."
icon_state = "bluekeg"
reagent_id = "gargleblaster"
@@ -1,299 +0,0 @@
#define HYPO_SPRAY 0
#define HYPO_INJECT 1
#define WAIT_SPRAY 25
#define WAIT_INJECT 25
#define SELF_SPRAY 15
#define SELF_INJECT 15
#define DELUXE_WAIT_SPRAY 20
#define DELUXE_WAIT_INJECT 20
#define DELUXE_SELF_SPRAY 10
#define DELUXE_SELF_INJECT 10
#define COMBAT_WAIT_SPRAY 0
#define COMBAT_WAIT_INJECT 0
#define COMBAT_SELF_SPRAY 0
#define COMBAT_SELF_INJECT 0
//A vial-loaded hypospray. Cartridge-based!
/obj/item/hypospray/mkii
name = "hypospray mk.II"
icon = 'modular_citadel/icons/obj/hypospraymkii.dmi'
icon_state = "hypo2"
desc = "A new development from DeForest Medical, this hypospray takes 30-unit vials as the drug supply for easy swapping."
w_class = WEIGHT_CLASS_TINY
var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/tiny, /obj/item/reagent_containers/glass/bottle/vial/small)
var/mode = HYPO_INJECT
var/obj/item/reagent_containers/glass/bottle/vial/vial
var/start_vial = /obj/item/reagent_containers/glass/bottle/vial/small
var/spawnwithvial = TRUE
var/inject_wait = WAIT_INJECT
var/spray_wait = WAIT_SPRAY
var/spray_self = SELF_SPRAY
var/inject_self = SELF_INJECT
var/quickload = FALSE
var/penetrates = FALSE
/obj/item/hypospray/mkii/brute
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine
/obj/item/hypospray/mkii/toxin
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin
/obj/item/hypospray/mkii/oxygen
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin
/obj/item/hypospray/mkii/burn
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane
/obj/item/hypospray/mkii/tricord
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord
/obj/item/hypospray/mkii/enlarge
spawnwithvial = FALSE
/obj/item/hypospray/mkii/CMO
name = "hypospray mk.II deluxe"
allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/tiny, /obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large)
icon_state = "cmo2"
desc = "The Deluxe Hypospray can take larger-size vials. It also acts faster and delivers more reagents per spray."
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
start_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO
inject_wait = DELUXE_WAIT_INJECT
spray_wait = DELUXE_WAIT_SPRAY
spray_self = DELUXE_SELF_SPRAY
inject_self = DELUXE_SELF_INJECT
/obj/item/hypospray/mkii/CMO/combat
name = "combat hypospray mk.II"
desc = "A combat-ready deluxe hypospray that acts almost instantly. It can be tactically reloaded by using a vial on it."
icon_state = "combat2"
start_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat
inject_wait = COMBAT_WAIT_INJECT
spray_wait = COMBAT_WAIT_SPRAY
spray_self = COMBAT_SELF_SPRAY
inject_self = COMBAT_SELF_INJECT
quickload = TRUE
penetrates = TRUE
/obj/item/hypospray/mkii/Initialize()
. = ..()
if(!spawnwithvial)
update_icon()
return
if(start_vial)
vial = new start_vial
update_icon()
/obj/item/hypospray/mkii/update_icon()
..()
icon_state = "[initial(icon_state)][vial ? "" : "-e"]"
if(ismob(loc))
var/mob/M = loc
M.update_inv_hands()
return
/obj/item/hypospray/mkii/examine(mob/user)
. = ..()
if(vial)
to_chat(user, "[vial] has [vial.reagents.total_volume]u remaining.")
else
to_chat(user, "It has no vial loaded in.")
to_chat(user, "[src] is set to [mode ? "Inject" : "Spray"] contents on application.")
/obj/item/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user)
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
var/obj/item/reagent_containers/glass/bottle/vial/V = I
V.forceMove(user.loc)
user.put_in_hands(V)
to_chat(user, "<span class='notice'>You remove [vial] from [src].</span>")
vial = null
update_icon()
playsound(loc, 'sound/weapons/empty.ogg', 50, 1)
else
to_chat(user, "<span class='notice'>This hypo isn't loaded!</span>")
return
/obj/item/hypospray/mkii/attackby(obj/item/I, mob/living/user)
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial) && vial != null))
if(!quickload)
to_chat(user, "<span class='warning'>[src] can not hold more than one vial!</span>")
return FALSE
unload_hypo(vial, user)
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
var/obj/item/reagent_containers/glass/bottle/vial/V = I
if(!is_type_in_list(V, allowed_containers))
to_chat(user, "<span class='notice'>[src] doesn't accept this type of vial.</span>")
return FALSE
if(!user.transferItemToLoc(V,src))
return FALSE
vial = V
user.visible_message("<span class='notice'>[user] has loaded a vial into [src].</span>","<span class='notice'>You have loaded [vial] into [src].</span>")
update_icon()
playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1)
return TRUE
else
to_chat(user, "<span class='notice'>This doesn't fit in [src].</span>")
return FALSE
return FALSE
/obj/item/hypospray/mkii/AltClick(mob/user)
if(vial)
vial.attack_self(user)
// Gunna allow this for now, still really don't approve - Pooj
/obj/item/hypospray/mkii/emag_act(mob/user)
. = ..()
if(obj_flags & EMAGGED)
to_chat(user, "[src] happens to be already overcharged.")
return
inject_wait = COMBAT_WAIT_INJECT
spray_wait = COMBAT_WAIT_SPRAY
spray_self = COMBAT_SELF_INJECT
inject_self = COMBAT_SELF_SPRAY
penetrates = TRUE
to_chat(user, "You overcharge [src]'s control circuit.")
obj_flags |= EMAGGED
return TRUE
/obj/item/hypospray/mkii/attack_hand(mob/user)
. = ..() //Don't bother changing this or removing it from containers will break.
/obj/item/hypospray/mkii/attack(obj/item/I, mob/user, params)
return
/obj/item/hypospray/mkii/afterattack(atom/target, mob/user, proximity)
if(!vial)
return
if(!proximity)
return
if(!ismob(target))
return
var/mob/living/L
if(isliving(target))
L = target
if(!penetrates && !L.can_inject(user, 1)) //This check appears another four times, since otherwise the penetrating sprays will break in do_mob.
return
if(!L && !target.is_injectable()) //only checks on non-living mobs, due to how can_inject() handles
to_chat(user, "<span class='warning'>You cannot directly fill [target]!</span>")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "<span class='notice'>[target] is full.</span>")
return
if(ishuman(L))
var/obj/item/bodypart/affecting = L.get_bodypart(check_zone(user.zone_selected))
if(!affecting)
to_chat(user, "<span class='warning'>The limb is missing!</span>")
return
if(affecting.status != BODYPART_ORGANIC)
to_chat(user, "<span class='notice'>Medicine won't work on a robotic limb!</span>")
return
var/contained = vial.reagents.log_list()
log_combat(user, L, "attemped to inject", src, addition="which had [contained]")
//Always log attemped injections for admins
if(vial != null)
switch(mode)
if(HYPO_INJECT)
if(L) //living mob
if(L != user)
L.visible_message("<span class='danger'>[user] is trying to inject [L] with [src]!</span>", \
"<span class='userdanger'>[user] is trying to inject [L] with [src]!</span>")
if(!do_mob(user, L, inject_wait))
return
if(!penetrates && !L.can_inject(user, 1))
return
if(!vial.reagents.total_volume)
return
if(L.reagents.total_volume >= L.reagents.maximum_volume)
return
L.visible_message("<span class='danger'>[user] uses the [src] on [L]!</span>", \
"<span class='userdanger'>[user] uses the [src] on [L]!</span>")
else
if(!do_mob(user, L, inject_self))
return
if(!penetrates && !L.can_inject(user, 1))
return
if(!vial.reagents.total_volume)
return
if(L.reagents.total_volume >= L.reagents.maximum_volume)
return
log_attack("<font color='red'>[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])</font>")
L.log_message("<font color='orange'>applied [src] to themselves ([contained]).</font>", INDIVIDUAL_ATTACK_LOG)
var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
vial.reagents.reaction(L, INJECT, fraction)
vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
if(vial.amount_per_transfer_from_this >= 15)
playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
if(vial.amount_per_transfer_from_this < 15)
playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
to_chat(user, "<span class='notice'>You inject [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.</span>")
if(HYPO_SPRAY)
if(L) //living mob
if(L != user)
L.visible_message("<span class='danger'>[user] is trying to spray [L] with [src]!</span>", \
"<span class='userdanger'>[user] is trying to spray [L] with [src]!</span>")
if(!do_mob(user, L, spray_wait))
return
if(!penetrates && !L.can_inject(user, 1))
return
if(!vial.reagents.total_volume)
return
if(L.reagents.total_volume >= L.reagents.maximum_volume)
return
L.visible_message("<span class='danger'>[user] uses the [src] on [L]!</span>", \
"<span class='userdanger'>[user] uses the [src] on [L]!</span>")
else
if(!do_mob(user, L, spray_self))
return
if(!penetrates && !L.can_inject(user, 1))
return
if(!vial.reagents.total_volume)
return
if(L.reagents.total_volume >= L.reagents.maximum_volume)
return
log_attack("<font color='red'>[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])</font>")
L.log_message("<font color='orange'>applied [src] to themselves ([contained]).</font>", INDIVIDUAL_ATTACK_LOG)
var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
vial.reagents.reaction(L, PATCH, fraction)
vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
if(vial.amount_per_transfer_from_this >= 15)
playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
if(vial.amount_per_transfer_from_this < 15)
playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
to_chat(user, "<span class='notice'>You spray [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.</span>")
else
to_chat(user, "<span class='notice'>[src] doesn't work here!</span>")
return
/obj/item/hypospray/mkii/attack_self(mob/living/user)
if(user)
if(user.incapacitated())
return
else if(!vial)
to_chat(user, "This Hypo needs to be loaded first!")
return
else
unload_hypo(vial,user)
/obj/item/hypospray/mkii/verb/modes()
set name = "Toggle Application Mode"
set category = "Object"
set src in usr
var/mob/M = usr
switch(mode)
if(HYPO_SPRAY)
mode = HYPO_INJECT
to_chat(M, "[src] is now set to inject contents on application.")
if(HYPO_INJECT)
mode = HYPO_SPRAY
to_chat(M, "[src] is now set to spray contents on application.")
@@ -1,198 +0,0 @@
/obj/item/reagent_containers/glass/bottle/vial
name = "broken hypovial"
desc = "A hypovial compatible with most hyposprays."
icon = 'modular_citadel/icons/obj/vial.dmi'
icon_state = "hypovial"
spillable = FALSE
var/comes_with = list() //Easy way of doing this.
volume = 10
possible_transfer_amounts = list(1,2,5,10)
obj_flags = UNIQUE_RENAME
unique_reskin = list("hypovial" = "hypovial",
"red hypovial" = "hypovial-b",
"blue hypovial" = "hypovial-d",
"green hypovial" = "hypovial-a",
"orange hypovial" = "hypovial-k",
"purple hypovial" = "hypovial-p",
"black hypovial" = "hypovial-t",
"pink hypovial" = "hypovial-pink"
)
always_reskinnable = TRUE
/obj/item/reagent_containers/glass/bottle/vial/Initialize()
. = ..()
if(!icon_state)
icon_state = "hypovial"
for(var/R in comes_with)
reagents.add_reagent(R,comes_with[R])
update_icon()
/obj/item/reagent_containers/glass/bottle/vial/on_reagent_change()
update_icon()
/obj/item/reagent_containers/glass/bottle/vial/update_icon()
cut_overlays()
if(reagents.total_volume)
var/mutable_appearance/filling = mutable_appearance('modular_citadel/icons/obj/vial.dmi', "hypovial10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9)
filling.icon_state = "hypovial10"
if(10 to 29)
filling.icon_state = "hypovial25"
if(30 to 49)
filling.icon_state = "hypovial50"
if(50 to 85)
filling.icon_state = "hypovial75"
if(86 to INFINITY)
filling.icon_state = "hypovial100"
filling.color = mix_color_from_reagents(reagents.reagent_list)
add_overlay(filling)
/obj/item/reagent_containers/glass/bottle/vial/tiny
name = "small hypovial"
//Shouldn't be possible to get this without adminbuse
/obj/item/reagent_containers/glass/bottle/vial/small
name = "hypovial"
volume = 60
possible_transfer_amounts = list(5,10)
/obj/item/reagent_containers/glass/bottle/vial/small/bluespace
volume = 120
possible_transfer_amounts = list(5,10)
name = "bluespace hypovial"
icon_state = "hypovialbs"
unique_reskin = null
/obj/item/reagent_containers/glass/bottle/vial/large
name = "large hypovial"
desc = "A large hypovial, for deluxe hypospray models."
icon_state = "hypoviallarge"
volume = 120
possible_transfer_amounts = list(5,10,15,20)
unique_reskin = list("large hypovial" = "hypoviallarge",
"large red hypovial" = "hypoviallarge-b",
"large blue hypovial" = "hypoviallarge-d",
"large green hypovial" = "hypoviallarge-a",
"large orange hypovial" = "hypoviallarge-k",
"large purple hypovial" = "hypoviallarge-p",
"large black hypovial" = "hypoviallarge-t"
)
/obj/item/reagent_containers/glass/bottle/vial/large/update_icon()
cut_overlays()
if(reagents.total_volume)
var/mutable_appearance/filling = mutable_appearance('modular_citadel/icons/obj/vial.dmi', "hypoviallarge10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9)
filling.icon_state = "hypoviallarge10"
if(10 to 29)
filling.icon_state = "hypoviallarge25"
if(30 to 49)
filling.icon_state = "hypoviallarge50"
if(50 to 85)
filling.icon_state = "hypoviallarge75"
if(86 to INFINITY)
filling.icon_state = "hypoviallarge100"
filling.color = mix_color_from_reagents(reagents.reagent_list)
add_overlay(filling)
/obj/item/reagent_containers/glass/bottle/vial/large/bluespace
possible_transfer_amounts = list(5,10,15,20)
name = "bluespace large hypovial"
volume = 240
icon_state = "hypoviallargebs"
unique_reskin = null
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine
name = "red hypovial (bicaridine)"
icon_state = "hypovial-b"
comes_with = list("bicaridine" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin
name = "green hypovial (Anti-Tox)"
icon_state = "hypovial-a"
comes_with = list("antitoxin" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane
name = "orange hypovial (kelotane)"
icon_state = "hypovial-k"
comes_with = list("kelotane" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin
name = "blue hypovial (dexalin)"
icon_state = "hypovial-d"
comes_with = list("dexalin" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord
name = "hypovial (tricordrazine)"
icon_state = "hypovial"
comes_with = list("tricordrazine" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction
name = "pink hypovial (breast treatment)"
icon_state = "hypovial-pink"
comes_with = list("BEsmaller_hypo" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction
name = "pink hypovial (penis treatment)"
icon_state = "hypovial-pink"
comes_with = list("PEsmaller_hypo" = 30)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO
name = "deluxe hypovial"
icon_state = "hypoviallarge-cmos"
comes_with = list("omnizine" = 20, "leporazine" = 20, "atropine" = 20)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/bicaridine
name = "large red hypovial (bicaridine)"
icon_state = "hypoviallarge-b"
comes_with = list("bicaridine" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/antitoxin
name = "large green hypovial (anti-tox)"
icon_state = "hypoviallarge-a"
comes_with = list("antitoxin" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/kelotane
name = "large orange hypovial (kelotane)"
icon_state = "hypoviallarge-k"
comes_with = list("kelotane" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/dexalin
name = "large blue hypovial (dexalin)"
icon_state = "hypoviallarge-d"
comes_with = list("dexalin" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/charcoal
name = "large black hypovial (charcoal)"
icon_state = "hypoviallarge-t"
comes_with = list("charcoal" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/tricord
name = "large hypovial (tricord)"
icon_state = "hypoviallarge"
comes_with = list("tricordrazine" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salglu
name = "large green hypovial (salglu)"
icon_state = "hypoviallarge-a"
comes_with = list("salglu_solution" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/synthflesh
name = "large orange hypovial (synthflesh)"
icon_state = "hypoviallarge-k"
comes_with = list("synthflesh" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat
name = "combat hypovial"
icon_state = "hypoviallarge-t"
comes_with = list("epinephrine" = 3, "omnizine" = 19, "leporazine" = 19, "atropine" = 19) //Epinephrine's main effect here is to kill suff damage, so we don't need much given atropine
@@ -2,7 +2,7 @@
/datum/reagent/consumable/semen
name = "Semen"
id = "semen"
description = "Sperm from some animal. Useless for anything but insemination, really."
description = "Sperm from some animal. I bet you'll drink this out of a bucket someday."
taste_description = "something salty"
taste_mult = 2 //Not very overpowering flavor
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
@@ -39,7 +39,9 @@
add_blood_DNA(list("Non-human DNA" = "A+"))
/obj/effect/decal/cleanable/semen/replace_decal(obj/effect/decal/cleanable/semen/S)
S.add_blood_DNA(return_blood_DNA())
if(S.blood_DNA)
blood_DNA |= S.blood_DNA.Copy()
..()
/datum/reagent/consumable/femcum
name = "Female Ejaculate"
@@ -71,7 +73,8 @@
add_blood_DNA(list("Non-human DNA" = "A+"))
/obj/effect/decal/cleanable/femcum/replace_decal(obj/effect/decal/cleanable/femcum/F)
F.add_blood_DNA(return_blood_DNA())
if(F.blood_DNA)
blood_DNA |= F.blood_DNA.Copy()
..()
/datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume)
@@ -1,6 +0,0 @@
/datum/design/board/autoylathe
name = "Machine Design (Autoylathe)"
desc = "The circuit board for an autoylathe."
id = "autoylathe"
build_path = /obj/item/circuitboard/machine/autoylathe
category = list("Misc. Machinery")
@@ -1,7 +0,0 @@
/datum/design/mag_oldsmg/rubber_mag
name = "WT-550 Semi-Auto SMG rubberbullets Magazine (4.6x30mm rubber)"
desc = "A 20 round rubber shots magazine for the out of date security WT-550 Semi-Auto SMG"
id = "mag_oldsmg_rubber"
materials = list(MAT_METAL = 6000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtrubber
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
@@ -1,7 +0,0 @@
/datum/design/mag_oldsmg/tx_mag
name = "WT-550 Semi-Auto SMG Uranium Magazine (4.6x30mm TX)"
desc = "A 20 round uranium tipped magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg_tx"
materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_URANIUM = 2000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wttx
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
@@ -1,25 +0,0 @@
/datum/design/xenobio_upgrade
name = "owo"
desc = "someone's bussin"
build_type = PROTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
category = list("Electronics")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/xenobio_upgrade/xenobiomonkeys
name = "Xenobiology console monkey upgrade disk"
desc = "This disk will add the ability to remotely recycle monkeys via the Xenobiology console."
id = "xenobio_monkeys"
build_path = /obj/item/disk/xenobio_console_upgrade/monkey
/datum/design/xenobio_upgrade/xenobioslimebasic
name = "Xenobiology console basic slime upgrade disk"
desc = "This disk will add the ability to remotely manipulate slimes via the Xenobiology console."
id = "xenobio_slimebasic"
build_path = /obj/item/disk/xenobio_console_upgrade/slimebasic
/datum/design/xenobio_upgrade/xenobioslimeadv
name = "Xenobiology console advanced slime upgrade disk"
desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk."
id = "xenobio_slimeadv"
build_path = /obj/item/disk/xenobio_console_upgrade/slimeadv
@@ -1,3 +0,0 @@
/datum/techweb/specialized/autounlocking/autoylathe
design_autounlock_buildtypes = AUTOYLATHE
allowed_buildtypes = AUTOYLATHE
@@ -1,48 +0,0 @@
/obj/machinery/computer/camera_advanced/xenobio
max_slimes = 1
var/upgradetier = 0
/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/disk/xenobio_console_upgrade))
var/obj/item/disk/xenobio_console_upgrade/diskthing = O
var/successfulupgrade = FALSE
for(var/I in diskthing.upgradetypes)
if(upgradetier & I)
continue
else
upgradetier |= I
successfulupgrade = TRUE
if(I == XENOBIO_UPGRADE_SLIMEADV)
max_slimes = 10
if(successfulupgrade)
to_chat(user, "<span class='notice'>You have successfully upgraded [src] with [O].</span>")
else
to_chat(user, "<span class='warning'>[src] already has the contents of [O] installed!</span>")
return
. = ..()
/obj/item/disk/xenobio_console_upgrade
name = "Xenobiology console upgrade disk"
desc = "Allan please add detail."
icon_state = "datadisk5"
var/list/upgradetypes = list()
/obj/item/disk/xenobio_console_upgrade/admin
name = "Xenobio all access thing"
desc = "'the consoles are literally useless!!!!!!!!!!!!!!!'"
upgradetypes = list(XENOBIO_UPGRADE_SLIMEBASIC, XENOBIO_UPGRADE_SLIMEADV, XENOBIO_UPGRADE_MONKEYS)
/obj/item/disk/xenobio_console_upgrade/monkey
name = "Xenobiology console monkey upgrade disk"
desc = "This disk will add the ability to remotely recycle monkeys via the Xenobiology console."
upgradetypes = list(XENOBIO_UPGRADE_MONKEYS)
/obj/item/disk/xenobio_console_upgrade/slimebasic
name = "Xenobiology console basic slime upgrade disk"
desc = "This disk will add the ability to remotely manipulate slimes via the Xenobiology console."
upgradetypes = list(XENOBIO_UPGRADE_SLIMEBASIC)
/obj/item/disk/xenobio_console_upgrade/slimeadv
name = "Xenobiology console advanced slime upgrade disk"
desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk."
upgradetypes = list(XENOBIO_UPGRADE_SLIMEBASIC, XENOBIO_UPGRADE_SLIMEADV)
@@ -24,7 +24,7 @@
if(H.sprinting && charge)
charge--
new_speed = chargespeed
GET_COMPONENT(D, /datum/component/riding)
var/datum/component/riding/D = GetComponent(/datum/component/riding)
D.vehicle_move_delay = new_speed
for(var/i in progressbars_by_rider)
var/datum/progressbar/B = progressbars_by_rider[i]