Merge branch 'master' into assu

# Conflicts Resolved:
#	icons/mob/head.dmi
#	icons/mob/suit.dmi
#	icons/obj/clothing/hats.dmi
#	icons/obj/clothing/suits.dmi
This commit is contained in:
Anonymous
2019-10-26 18:06:56 +03:00
716 changed files with 1470 additions and 1596 deletions
+5 -1
View File
@@ -200,7 +200,7 @@
if (!target.loc)
continue
if(!(SEND_SIGNAL(target.loc, COMSIG_ATOM_CANREACH, next) & COMPONENT_BLOCK_REACH))
if(!(SEND_SIGNAL(target.loc, COMSIG_ATOM_CANREACH, next) & COMPONENT_BLOCK_REACH) && target.loc.canReachInto(src, ultimate_target, next, view_only, tool))
next += target.loc
checking = next
@@ -215,6 +215,10 @@
/mob/living/DirectAccess(atom/target)
return ..() + GetAllContents()
//This is called reach into but it's called on the deepest things first so uh, make sure to account for that!
/atom/proc/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool)
return TRUE
/atom/proc/AllowClick()
return FALSE
@@ -96,6 +96,7 @@
RegisterSignal(parent, COMSIG_ITEM_PICKUP, .proc/signal_on_pickup)
RegisterSignal(parent, COMSIG_MOVABLE_POST_THROW, .proc/close_all)
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/check_views)
RegisterSignal(parent, COMSIG_CLICK_ALT, .proc/on_alt_click)
RegisterSignal(parent, COMSIG_MOUSEDROP_ONTO, .proc/mousedrop_onto)
@@ -386,6 +387,11 @@
close(M)
. = TRUE //returns TRUE if any mobs actually got a close(M) call
/datum/component/storage/proc/check_views()
for(var/mob/M in can_see_contents())
if(!isobserver(M) && !M.CanReach(src, view_only = TRUE))
close(M)
/datum/component/storage/proc/emp_act(datum/source, severity)
if(emp_shielded)
return
+87
View File
@@ -80,6 +80,7 @@
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
item_flags = NO_MAT_REDEMPTION | NOBLUDGEON
var/prox_check = TRUE //If the emag requires you to be in range
var/uses = 15
/obj/item/card/emag/bluespace
name = "bluespace cryptographic sequencer"
@@ -110,6 +111,37 @@
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
/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
. = ..()
/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/emagfake
desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back."
@@ -451,3 +483,58 @@ update_label("John Doe", "Clowny")
name = "APC Access ID"
desc = "A special ID card that allows access to APC terminals."
access = list(ACCESS_ENGINE_EQUIP)
//Polychromatic Knight Badge
/obj/item/card/id/knight
var/id_color = "#00FF00" //defaults to green
name = "knight badge"
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) ? "knight badge" : "[newname]'s Knight Badge"][(!newjob) ? "" : " ([newjob])"]"
return
name = "[(!registered_name) ? "knight badge" : "[registered_name]'s Knight Badge"][(!assignment) ? "" : " ([assignment])"]"
/obj/item/card/id/knight/update_icon()
var/mutable_appearance/id_overlay = mutable_appearance(icon, "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(!in_range(src, user) || !energy_color_input)
return
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
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/card/id/knight/blue
id_color = "#0000FF"
/obj/item/card/id/knight/captain
id_color = "#FFD700"
+149
View File
@@ -233,3 +233,152 @@
desc = "An extremely sharp blade made out of hard light. Packs quite a punch."
icon_state = "lightblade"
item_state = "lightblade"
/*/////////////////////////////////////////////////////////////////////////
///////////// 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"
item_state = "cxsword"
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(icon, "cxsword_blade")
var/mutable_appearance/gem_overlay = mutable_appearance(icon, "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 ..()
//////// 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>")
+124
View File
@@ -276,6 +276,106 @@
/obj/item/toy/sword/getweight()
return (active ? total_mass_on : total_mass) || w_class *1.25
/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 = 'icons/obj/items_and_weapons.dmi'
icon_state = "cxsword_hilt"
item_state = "cxsword"
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(icon, "cxsword_blade")
var/mutable_appearance/gem_overlay = mutable_appearance(icon, "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>")
/*
* Foam armblade
*/
@@ -337,6 +437,30 @@
/obj/item/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
return FALSE
/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
/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
/obj/item/toy/katana
name = "replica katana"
desc = "Woefully underpowered in D20."
+111
View File
@@ -6,6 +6,7 @@
* Spears
* CHAINSAWS
* Bone Axe and Spear
* And more
*/
/*##################################################################
@@ -464,6 +465,116 @@
else
return ..()
/////////////////////////////////////////////////////
// HYPEREUTACTIC Blades /////////////////////////
/////////////////////////////////////////////////////
/obj/item/twohanded/dualsaber/hypereutactic
icon = 'icons/obj/1x2.dmi'
icon_state = "hypereutactic"
lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi'
righthand_file = 'icons/mob/inhands/64x64_righthand.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(icon, "hypereutactic_blade")
var/mutable_appearance/gem_overlay = mutable_appearance(icon, "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()
clean_blood()
/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()
//spears
/obj/item/twohanded/spear
icon_state = "spearglass0"
@@ -614,3 +614,6 @@
user.resting = FALSE
togglelock(user)
T1.visible_message("<span class='warning'>[user] dives into [src]!</span>")
/obj/structure/closet/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool)
return ..() && opened
+4 -3
View File
@@ -318,6 +318,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
RemoveActive()
state = AHELP_CLOSED
GLOB.ahelp_tickets.ListInsert(src)
to_chat(initiator, "<span class='adminhelp'>Ticket closed by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"].</span>")
AddInteraction("<font color='red'>Closed by [key_name].</font>")
if(!silent)
SSblackbox.record_feedback("tally", "ahelp_stats", 1, "closed")
@@ -336,7 +337,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
addtimer(CALLBACK(initiator, /client/proc/giveadminhelpverb), 50)
AddInteraction("<font color='green'>Resolved by [key_name].</font>")
to_chat(initiator, "<span class='adminhelp'>Your ticket has been resolved by an admin. The Adminhelp verb will be returned to you shortly.</span>")
to_chat(initiator, "<span class='adminhelp'>Your ticket has been resolved by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"]. The Adminhelp verb will be returned to you shortly.</span>")
if(!silent)
SSblackbox.record_feedback("tally", "ahelp_stats", 1, "resolved")
var/msg = "Ticket [TicketHref("#[id]")] resolved by [key_name]"
@@ -353,7 +354,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
SEND_SOUND(initiator, sound('sound/effects/adminhelp.ogg'))
to_chat(initiator, "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
to_chat(initiator, "<font color='red' size='4'><b>- AdminHelp Rejected by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"]! -</b></font>")
to_chat(initiator, "<font color='red'><b>Your admin help was rejected.</b> The adminhelp verb has been returned to you so that you may try again.</font>")
to_chat(initiator, "Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting.")
@@ -369,7 +370,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
if(state != AHELP_ACTIVE)
return
var/msg = "<font color='red' size='4'><b>- AdminHelp marked as IC issue! -</b></font><br>"
var/msg = "<font color='red' size='4'><b>- AdminHelp marked as IC issue by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"]! -</b></font><br>"
msg += "<font color='red'><b>Losing is part of the game!</b></font><br>"
msg += "<font color='red'>It is also possible that your ahelp is unable to be answered properly, due to events occurring in the round.</font>"
if(initiator)
@@ -27,6 +27,7 @@
if(prob(10))
to_chat(target, "You feel as if you are being watched.")
return
face_atom(target)
draining = TRUE
essence_drained += rand(15, 20)
to_chat(src, "<span class='revennotice'>You search for the soul of [target].</span>")
+54
View File
@@ -587,3 +587,57 @@
shoes = /obj/item/clothing/shoes/sneakers/black
suit = /obj/item/clothing/suit/armor/vest
glasses = /obj/item/clothing/glasses/sunglasses/reagent
/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
id_job = "Knight"
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/blue
/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
id_job = "Knight Captain"
/datum/outfit/lavaknight/captain
name ="Cydonian Knight Captain"
l_pocket = /obj/item/twohanded/dualsaber/hypereutactic
id = /obj/item/card/id/knight/captain
@@ -867,3 +867,133 @@
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
actions_types = list()
/*
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_state = "knight_cydonia"
item_state = "knight_yellow"
item_color = null
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/Initialize()
. = ..()
if(istype(loc, /obj/item/clothing/suit/space/hardsuit/lavaknight))
var/obj/item/clothing/suit/space/hardsuit/lavaknight/S = loc
energy_color = S.energy_color
update_icon()
/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(icon, "knight_cydonia_overlay")
if(energy_color)
helm_overlay.color = energy_color
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
add_overlay(helm_overlay)
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file)
. = ..()
if(!isinhands)
var/mutable_appearance/energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
energy_overlay.plane = ABOVE_LIGHTING_LAYER
energy_overlay.color = energy_color
. += energy_overlay
/obj/item/clothing/suit/space/hardsuit/lavaknight
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"
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
tauric = TRUE //Citadel Add for tauric hardsuits
var/energy_color = "#35FFF0"
/obj/item/clothing/suit/space/hardsuit/lavaknight/Initialize()
..()
light_color = energy_color
set_light(1)
update_icon()
/obj/item/clothing/suit/space/hardsuit/lavaknight/update_icon()
var/mutable_appearance/suit_overlay = mutable_appearance(icon, "knight_cydonia_overlay")
if(energy_color)
suit_overlay.color = energy_color
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/worn_overlays(isinhands = FALSE, icon_file)
. = ..()
if(!isinhands)
var/mutable_appearance/energy_overlay
if(taurmode == SNEK_TAURIC)
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_naga.dmi', "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
else if(taurmode == PAW_TAURIC)
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_canine.dmi', "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
else
energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
energy_overlay.plane = ABOVE_LIGHTING_LAYER
energy_overlay.color = energy_color
. += energy_overlay
/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(helmet)
var/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/H = helmet
H.energy_color = energy_color
user.update_inv_head()
H.update_icon()
update_icon()
user.update_inv_wear_suit()
light_color = energy_color
update_light()
/obj/item/clothing/suit/space/hardsuit/lavaknight/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
+1
View File
@@ -4,6 +4,7 @@
weight = 10
max_occurrences = 1
earliest_start = 60 MINUTES
min_players = 40
gamemode_blacklist = list("blob") //Just in case a blob survives that long
+2 -1
View File
@@ -36,10 +36,11 @@
projectilesound = 'sound/weapons/emitter.ogg'
maxHealth = 50
health = 50
gold_core_spawnable = NO_SPAWN
var/allowed_projectile_types = list(/obj/item/projectile/magic/change, /obj/item/projectile/magic/animate, /obj/item/projectile/magic/resurrection,
/obj/item/projectile/magic/death, /obj/item/projectile/magic/teleport, /obj/item/projectile/magic/door, /obj/item/projectile/magic/aoe/fireball,
/obj/item/projectile/magic/spellblade, /obj/item/projectile/magic/arcane_barrage)
/mob/living/simple_animal/hostile/carp/ranged/Initialize()
projectiletype = pick(allowed_projectile_types)
. = ..()
+3
View File
@@ -61,6 +61,9 @@
var/display_order = JOB_DISPLAY_ORDER_DEFAULT
//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.
var/dresscodecompliant = TRUE
//Only override this proc
//H is usually a human unless an /equip override transformed it
/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
+1
View File
@@ -15,6 +15,7 @@ Assistant
outfit = /datum/outfit/job/assistant
antag_rep = 7
display_order = JOB_DISPLAY_ORDER_ASSISTANT
dresscodecompliant = FALSE
/datum/job/assistant/get_access()
if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set
@@ -15,7 +15,8 @@
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_CONSTRUCTION, 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)
display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN
/datum/outfit/job/atmos
+2 -2
View File
@@ -10,9 +10,9 @@
supervisors = "Nanotrasen officials and Space law"
selection_color = "#aac1ee"
req_admin_notify = 1
minimal_player_age = 14
minimal_player_age = 20
exp_requirements = 180
exp_type = EXP_TYPE_CREW
exp_type = EXP_TYPE_COMMAND
exp_type_department = EXP_TYPE_COMMAND
outfit = /datum/outfit/job/captain
@@ -11,7 +11,8 @@
outfit = /datum/outfit/job/cargo_tech
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINING,
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN
+2
View File
@@ -32,5 +32,7 @@
satchel = /obj/item/storage/backpack/satchel/chem
duffelbag = /obj/item/storage/backpack/duffelbag/med
backpack_contents = list(/obj/item/storage/hypospraykit/regular)
chameleon_extras = /obj/item/gun/syringe
@@ -11,7 +11,7 @@
supervisors = "the captain"
selection_color = "#ee7400"
req_admin_notify = 1
minimal_player_age = 7
minimal_player_age = 10
exp_requirements = 180
exp_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_ENGINEERING
@@ -11,7 +11,7 @@
supervisors = "the captain"
selection_color = "#509ed1"
req_admin_notify = 1
minimal_player_age = 7
minimal_player_age = 10
exp_requirements = 180
exp_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_MEDICAL
@@ -11,7 +11,7 @@
supervisors = "the captain"
selection_color = "#3a8529"
req_admin_notify = 1
minimal_player_age = 10
minimal_player_age = 20
exp_requirements = 180
exp_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SERVICE
@@ -21,13 +21,13 @@
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_CARGO, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
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_CARGO, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
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)
@@ -11,7 +11,7 @@
supervisors = "the captain"
selection_color = "#b90000"
req_admin_notify = 1
minimal_player_age = 14
minimal_player_age = 10
exp_requirements = 300
exp_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SECURITY
@@ -32,4 +32,6 @@
satchel = /obj/item/storage/backpack/satchel/med
duffelbag = /obj/item/storage/backpack/duffelbag/med
backpack_contents = list(/obj/item/storage/hypospraykit/regular)
chameleon_extras = /obj/item/gun/syringe
+10 -6
View File
@@ -11,17 +11,19 @@
supervisors = "the captain"
selection_color = "#a06121"
req_admin_notify = 1
minimal_player_age = 7
minimal_player_age = 10
exp_requirements = 180
exp_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SUPPLY
outfit = /datum/outfit/job/quartermaster
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION,
ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING,
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
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)
display_order = JOB_DISPLAY_ORDER_QUARTERMASTER
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
@@ -31,11 +33,13 @@
jobtype = /datum/job/qm
belt = /obj/item/pda/quartermaster
ears = /obj/item/radio/headset/headset_cargo
ears = /obj/item/radio/headset/heads/qm
uniform = /obj/item/clothing/under/rank/cargo
shoes = /obj/item/clothing/shoes/sneakers/brown
glasses = /obj/item/clothing/glasses/sunglasses
l_hand = /obj/item/clipboard
id = /obj/item/card/id/silver
backpack_contents = list(/obj/item/melee/classic_baton/telescopic = 1, /obj/item/modular_computer/tablet/preset/advanced = 1)
chameleon_extras = /obj/item/stamp/qm
@@ -11,7 +11,7 @@
supervisors = "the captain"
selection_color = "#7544cc"
req_admin_notify = 1
minimal_player_age = 7
minimal_player_age = 10
exp_type_department = EXP_TYPE_SCIENCE
exp_requirements = 180
exp_type = EXP_TYPE_CREW
+3 -2
View File
@@ -13,7 +13,8 @@
outfit = /datum/outfit/job/miner
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINING,
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
display_order = JOB_DISPLAY_ORDER_SHAFT_MINER
@@ -47,7 +48,7 @@
name = "Shaft Miner (Asteroid)"
uniform = /obj/item/clothing/under/rank/miner
shoes = /obj/item/clothing/shoes/workboots
/datum/outfit/job/miner/equipped
name = "Shaft Miner (Lavaland + Equipment)"
suit = /obj/item/clothing/suit/hooded/explorer/standard
+1 -1
View File
@@ -42,7 +42,7 @@
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
r_pocket = /obj/item/assembly/flash/handheld
l_pocket = /obj/item/restraints/handcuffs
suit_store = /obj/item/gun/energy/e_gun/advtaser
suit_store = /obj/item/gun/energy/pumpaction/defender
backpack_contents = list(/obj/item/melee/baton/loaded=1)
backpack = /obj/item/storage/backpack/security
+3
View File
@@ -468,3 +468,6 @@
bodyparts += BP
hand_bodyparts[i] = BP
..() //Don't redraw hands until we have organs for them
/mob/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool)
return ..() && (user == src)
@@ -975,4 +975,635 @@ GLOBAL_LIST_INIT(vox_sounds, list("abduction" = 'sound/vox_fem/abduction.ogg',
"zombie" = 'sound/vox_fem/zombie.ogg',
"zone" = 'sound/vox_fem/zone.ogg',
"zulu" = 'sound/vox_fem/zulu.ogg'))
//for vim
// :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox\/\1',/g
GLOBAL_LIST_INIT(vox_sounds_male, list("," = 'sound/vox/_comma.ogg',
"." = 'sound/vox/_period.ogg',
"a" = 'sound/vox/a.ogg',
"accelerating" = 'sound/vox/accelerating.ogg',
"accelerator" = 'sound/vox/accelerator.ogg',
"accepted" = 'sound/vox/accepted.ogg',
"access" = 'sound/vox/access.ogg',
"acknowledge" = 'sound/vox/acknowledge.ogg',
"acknowledged" = 'sound/vox/acknowledged.ogg',
"acquired" = 'sound/vox/acquired.ogg',
"acquisition" = 'sound/vox/acquisition.ogg',
"across" = 'sound/vox/across.ogg',
"activate" = 'sound/vox/activate.ogg',
"activated" = 'sound/vox/activated.ogg',
"activity" = 'sound/vox/activity.ogg',
"adios" = 'sound/vox/adios.ogg',
"administration" = 'sound/vox/administration.ogg',
"advanced" = 'sound/vox/advanced.ogg',
"after" = 'sound/vox/after.ogg',
"agent" = 'sound/vox/agent.ogg',
"alarm" = 'sound/vox/alarm.ogg',
"alert" = 'sound/vox/alert.ogg',
"alien" = 'sound/vox/alien.ogg',
"aligned" = 'sound/vox/aligned.ogg',
"all" = 'sound/vox/all.ogg',
"alpha" = 'sound/vox/alpha.ogg',
"am" = 'sound/vox/am.ogg',
"amigo" = 'sound/vox/amigo.ogg',
"ammunition" = 'sound/vox/ammunition.ogg',
"an" = 'sound/vox/an.ogg',
"and" = 'sound/vox/and.ogg',
"announcement" = 'sound/vox/announcement.ogg',
"anomalous" = 'sound/vox/anomalous.ogg',
"antenna" = 'sound/vox/antenna.ogg',
"any" = 'sound/vox/any.ogg',
"apprehend" = 'sound/vox/apprehend.ogg',
"approach" = 'sound/vox/approach.ogg',
"are" = 'sound/vox/are.ogg',
"area" = 'sound/vox/area.ogg',
"arm" = 'sound/vox/arm.ogg',
"armed" = 'sound/vox/armed.ogg',
"armor" = 'sound/vox/armor.ogg',
"armory" = 'sound/vox/armory.ogg',
"arrest" = 'sound/vox/arrest.ogg',
"ass" = 'sound/vox/ass.ogg',
"at" = 'sound/vox/at.ogg',
"atomic" = 'sound/vox/atomic.ogg',
"attention" = 'sound/vox/attention.ogg',
"authorize" = 'sound/vox/authorize.ogg',
"authorized" = 'sound/vox/authorized.ogg',
"automatic" = 'sound/vox/automatic.ogg',
"away" = 'sound/vox/away.ogg',
"b" = 'sound/vox/b.ogg',
"back" = 'sound/vox/back.ogg',
"backman" = 'sound/vox/backman.ogg',
"bad" = 'sound/vox/bad.ogg',
"bag" = 'sound/vox/bag.ogg',
"bailey" = 'sound/vox/bailey.ogg',
"barracks" = 'sound/vox/barracks.ogg',
"base" = 'sound/vox/base.ogg',
"bay" = 'sound/vox/bay.ogg',
"be" = 'sound/vox/be.ogg',
"been" = 'sound/vox/been.ogg',
"before" = 'sound/vox/before.ogg',
"beyond" = 'sound/vox/beyond.ogg',
"biohazard" = 'sound/vox/biohazard.ogg',
"biological" = 'sound/vox/biological.ogg',
"birdwell" = 'sound/vox/birdwell.ogg',
"bizwarn" = 'sound/vox/bizwarn.ogg',
"black" = 'sound/vox/black.ogg',
"blast" = 'sound/vox/blast.ogg',
"blocked" = 'sound/vox/blocked.ogg',
"bloop" = 'sound/vox/bloop.ogg',
"blue" = 'sound/vox/blue.ogg',
"bottom" = 'sound/vox/bottom.ogg',
"bravo" = 'sound/vox/bravo.ogg',
"breach" = 'sound/vox/breach.ogg',
"breached" = 'sound/vox/breached.ogg',
"break" = 'sound/vox/break.ogg',
"bridge" = 'sound/vox/bridge.ogg',
"bust" = 'sound/vox/bust.ogg',
"but" = 'sound/vox/but.ogg',
"button" = 'sound/vox/button.ogg',
"buzwarn" = 'sound/vox/buzwarn.ogg',
"bypass" = 'sound/vox/bypass.ogg',
"c" = 'sound/vox/c.ogg',
"cable" = 'sound/vox/cable.ogg',
"call" = 'sound/vox/call.ogg',
"called" = 'sound/vox/called.ogg',
"canal" = 'sound/vox/canal.ogg',
"cap" = 'sound/vox/cap.ogg',
"captain" = 'sound/vox/captain.ogg',
"capture" = 'sound/vox/capture.ogg',
"captured" = 'sound/vox/captured.ogg',
"ceiling" = 'sound/vox/ceiling.ogg',
"celsius" = 'sound/vox/celsius.ogg',
"center" = 'sound/vox/center.ogg',
"centi" = 'sound/vox/centi.ogg',
"central" = 'sound/vox/central.ogg',
"chamber" = 'sound/vox/chamber.ogg',
"charlie" = 'sound/vox/charlie.ogg',
"check" = 'sound/vox/check.ogg',
"checkpoint" = 'sound/vox/checkpoint.ogg',
"chemical" = 'sound/vox/chemical.ogg',
"cleanup" = 'sound/vox/cleanup.ogg',
"clear" = 'sound/vox/clear.ogg',
"clearance" = 'sound/vox/clearance.ogg',
"close" = 'sound/vox/close.ogg',
"clown" = 'sound/vox/clown.ogg',
"code" = 'sound/vox/code.ogg',
"coded" = 'sound/vox/coded.ogg',
"collider" = 'sound/vox/collider.ogg',
"command" = 'sound/vox/command.ogg',
"communication" = 'sound/vox/communication.ogg',
"complex" = 'sound/vox/complex.ogg',
"computer" = 'sound/vox/computer.ogg',
"condition" = 'sound/vox/condition.ogg',
"containment" = 'sound/vox/containment.ogg',
"contamination" = 'sound/vox/contamination.ogg',
"control" = 'sound/vox/control.ogg',
"coolant" = 'sound/vox/coolant.ogg',
"coomer" = 'sound/vox/coomer.ogg',
"core" = 'sound/vox/core.ogg',
"correct" = 'sound/vox/correct.ogg',
"corridor" = 'sound/vox/corridor.ogg',
"crew" = 'sound/vox/crew.ogg',
"cross" = 'sound/vox/cross.ogg',
"cryogenic" = 'sound/vox/cryogenic.ogg',
"d" = 'sound/vox/d.ogg',
"dadeda" = 'sound/vox/dadeda.ogg',
"damage" = 'sound/vox/damage.ogg',
"damaged" = 'sound/vox/damaged.ogg',
"danger" = 'sound/vox/danger.ogg',
"day" = 'sound/vox/day.ogg',
"deactivated" = 'sound/vox/deactivated.ogg',
"decompression" = 'sound/vox/decompression.ogg',
"decontamination" = 'sound/vox/decontamination.ogg',
"deeoo" = 'sound/vox/deeoo.ogg',
"defense" = 'sound/vox/defense.ogg',
"degrees" = 'sound/vox/degrees.ogg',
"delta" = 'sound/vox/delta.ogg',
"denied" = 'sound/vox/denied.ogg',
"deploy" = 'sound/vox/deploy.ogg',
"deployed" = 'sound/vox/deployed.ogg',
"destroy" = 'sound/vox/destroy.ogg',
"destroyed" = 'sound/vox/destroyed.ogg',
"detain" = 'sound/vox/detain.ogg',
"detected" = 'sound/vox/detected.ogg',
"detonation" = 'sound/vox/detonation.ogg',
"device" = 'sound/vox/device.ogg',
"did" = 'sound/vox/did.ogg',
"die" = 'sound/vox/die.ogg',
"dimensional" = 'sound/vox/dimensional.ogg',
"dirt" = 'sound/vox/dirt.ogg',
"disengaged" = 'sound/vox/disengaged.ogg',
"dish" = 'sound/vox/dish.ogg',
"disposal" = 'sound/vox/disposal.ogg',
"distance" = 'sound/vox/distance.ogg',
"distortion" = 'sound/vox/distortion.ogg',
"do" = 'sound/vox/do.ogg',
"doctor" = 'sound/vox/doctor.ogg',
"doop" = 'sound/vox/doop.ogg',
"door" = 'sound/vox/door.ogg',
"down" = 'sound/vox/down.ogg',
"dual" = 'sound/vox/dual.ogg',
"duct" = 'sound/vox/duct.ogg',
"e" = 'sound/vox/e.ogg',
"east" = 'sound/vox/east.ogg',
"echo" = 'sound/vox/echo.ogg',
"ed" = 'sound/vox/ed.ogg',
"effect" = 'sound/vox/effect.ogg',
"egress" = 'sound/vox/egress.ogg',
"eight" = 'sound/vox/eight.ogg',
"eighteen" = 'sound/vox/eighteen.ogg',
"eighty" = 'sound/vox/eighty.ogg',
"electric" = 'sound/vox/electric.ogg',
"electromagnetic" = 'sound/vox/electromagnetic.ogg',
"elevator" = 'sound/vox/elevator.ogg',
"eleven" = 'sound/vox/eleven.ogg',
"eliminate" = 'sound/vox/eliminate.ogg',
"emergency" = 'sound/vox/emergency.ogg',
"enemy" = 'sound/vox/enemy.ogg',
"energy" = 'sound/vox/energy.ogg',
"engage" = 'sound/vox/engage.ogg',
"engaged" = 'sound/vox/engaged.ogg',
"engine" = 'sound/vox/engine.ogg',
"enter" = 'sound/vox/enter.ogg',
"entry" = 'sound/vox/entry.ogg',
"environment" = 'sound/vox/environment.ogg',
"error" = 'sound/vox/error.ogg',
"escape" = 'sound/vox/escape.ogg',
"evacuate" = 'sound/vox/evacuate.ogg',
"exchange" = 'sound/vox/exchange.ogg',
"exit" = 'sound/vox/exit.ogg',
"expect" = 'sound/vox/expect.ogg',
"experiment" = 'sound/vox/experiment.ogg',
"experimental" = 'sound/vox/experimental.ogg',
"explode" = 'sound/vox/explode.ogg',
"explosion" = 'sound/vox/explosion.ogg',
"exposure" = 'sound/vox/exposure.ogg',
"exterminate" = 'sound/vox/exterminate.ogg',
"extinguish" = 'sound/vox/extinguish.ogg',
"extinguisher" = 'sound/vox/extinguisher.ogg',
"extreme" = 'sound/vox/extreme.ogg',
"f" = 'sound/vox/f.ogg',
"face" = 'sound/vox/face.ogg',
"facility" = 'sound/vox/facility.ogg',
"fahrenheit" = 'sound/vox/fahrenheit.ogg',
"failed" = 'sound/vox/failed.ogg',
"failure" = 'sound/vox/failure.ogg',
"farthest" = 'sound/vox/farthest.ogg',
"fast" = 'sound/vox/fast.ogg',
"feet" = 'sound/vox/feet.ogg',
"field" = 'sound/vox/field.ogg',
"fifteen" = 'sound/vox/fifteen.ogg',
"fifth" = 'sound/vox/fifth.ogg',
"fifty" = 'sound/vox/fifty.ogg',
"final" = 'sound/vox/final.ogg',
"fine" = 'sound/vox/fine.ogg',
"fire" = 'sound/vox/fire.ogg',
"first" = 'sound/vox/first.ogg',
"five" = 'sound/vox/five.ogg',
"flag" = 'sound/vox/flag.ogg',
"flooding" = 'sound/vox/flooding.ogg',
"floor" = 'sound/vox/floor.ogg',
"fool" = 'sound/vox/fool.ogg',
"for" = 'sound/vox/for.ogg',
"forbidden" = 'sound/vox/forbidden.ogg',
"force" = 'sound/vox/force.ogg',
"forms" = 'sound/vox/forms.ogg',
"found" = 'sound/vox/found.ogg',
"four" = 'sound/vox/four.ogg',
"fourteen" = 'sound/vox/fourteen.ogg',
"fourth" = 'sound/vox/fourth.ogg',
"fourty" = 'sound/vox/fourty.ogg',
"foxtrot" = 'sound/vox/foxtrot.ogg',
"freeman" = 'sound/vox/freeman.ogg',
"freezer" = 'sound/vox/freezer.ogg',
"from" = 'sound/vox/from.ogg',
"front" = 'sound/vox/front.ogg',
"fuel" = 'sound/vox/fuel.ogg',
"g" = 'sound/vox/g.ogg',
"gay" = 'sound/vox/gay.ogg',
"get" = 'sound/vox/get.ogg',
"go" = 'sound/vox/go.ogg',
"going" = 'sound/vox/going.ogg',
"good" = 'sound/vox/good.ogg',
"goodbye" = 'sound/vox/goodbye.ogg',
"gordon" = 'sound/vox/gordon.ogg',
"got" = 'sound/vox/got.ogg',
"government" = 'sound/vox/government.ogg',
"granted" = 'sound/vox/granted.ogg',
"great" = 'sound/vox/great.ogg',
"green" = 'sound/vox/green.ogg',
"grenade" = 'sound/vox/grenade.ogg',
"guard" = 'sound/vox/guard.ogg',
"gulf" = 'sound/vox/gulf.ogg',
"gun" = 'sound/vox/gun.ogg',
"guthrie" = 'sound/vox/guthrie.ogg',
"handling" = 'sound/vox/handling.ogg',
"hangar" = 'sound/vox/hangar.ogg',
"has" = 'sound/vox/has.ogg',
"have" = 'sound/vox/have.ogg',
"hazard" = 'sound/vox/hazard.ogg',
"head" = 'sound/vox/head.ogg',
"health" = 'sound/vox/health.ogg',
"heat" = 'sound/vox/heat.ogg',
"helicopter" = 'sound/vox/helicopter.ogg',
"helium" = 'sound/vox/helium.ogg',
"hello" = 'sound/vox/hello.ogg',
"help" = 'sound/vox/help.ogg',
"here" = 'sound/vox/here.ogg',
"hide" = 'sound/vox/hide.ogg',
"high" = 'sound/vox/high.ogg',
"highest" = 'sound/vox/highest.ogg',
"hit" = 'sound/vox/hit.ogg',
"holds" = 'sound/vox/holds.ogg',
"hole" = 'sound/vox/hole.ogg',
"hostile" = 'sound/vox/hostile.ogg',
"hot" = 'sound/vox/hot.ogg',
"hotel" = 'sound/vox/hotel.ogg',
"hour" = 'sound/vox/hour.ogg',
"hours" = 'sound/vox/hours.ogg',
"hundred" = 'sound/vox/hundred.ogg',
"hydro" = 'sound/vox/hydro.ogg',
"i" = 'sound/vox/i.ogg',
"idiot" = 'sound/vox/idiot.ogg',
"illegal" = 'sound/vox/illegal.ogg',
"immediate" = 'sound/vox/immediate.ogg',
"immediately" = 'sound/vox/immediately.ogg',
"in" = 'sound/vox/in.ogg',
"inches" = 'sound/vox/inches.ogg',
"india" = 'sound/vox/india.ogg',
"ing" = 'sound/vox/ing.ogg',
"inoperative" = 'sound/vox/inoperative.ogg',
"inside" = 'sound/vox/inside.ogg',
"inspection" = 'sound/vox/inspection.ogg',
"inspector" = 'sound/vox/inspector.ogg',
"interchange" = 'sound/vox/interchange.ogg',
"intruder" = 'sound/vox/intruder.ogg',
"invallid" = 'sound/vox/invallid.ogg',
"invasion" = 'sound/vox/invasion.ogg',
"is" = 'sound/vox/is.ogg',
"it" = 'sound/vox/it.ogg',
"johnson" = 'sound/vox/johnson.ogg',
"juliet" = 'sound/vox/juliet.ogg',
"key" = 'sound/vox/key.ogg',
"kill" = 'sound/vox/kill.ogg',
"kilo" = 'sound/vox/kilo.ogg',
"kit" = 'sound/vox/kit.ogg',
"lab" = 'sound/vox/lab.ogg',
"lambda" = 'sound/vox/lambda.ogg',
"laser" = 'sound/vox/laser.ogg',
"last" = 'sound/vox/last.ogg',
"launch" = 'sound/vox/launch.ogg',
"leak" = 'sound/vox/leak.ogg',
"leave" = 'sound/vox/leave.ogg',
"left" = 'sound/vox/left.ogg',
"legal" = 'sound/vox/legal.ogg',
"level" = 'sound/vox/level.ogg',
"lever" = 'sound/vox/lever.ogg',
"lie" = 'sound/vox/lie.ogg',
"lieutenant" = 'sound/vox/lieutenant.ogg',
"life" = 'sound/vox/life.ogg',
"light" = 'sound/vox/light.ogg',
"lima" = 'sound/vox/lima.ogg',
"liquid" = 'sound/vox/liquid.ogg',
"loading" = 'sound/vox/loading.ogg',
"locate" = 'sound/vox/locate.ogg',
"located" = 'sound/vox/located.ogg',
"location" = 'sound/vox/location.ogg',
"lock" = 'sound/vox/lock.ogg',
"locked" = 'sound/vox/locked.ogg',
"locker" = 'sound/vox/locker.ogg',
"lockout" = 'sound/vox/lockout.ogg',
"lower" = 'sound/vox/lower.ogg',
"lowest" = 'sound/vox/lowest.ogg',
"magnetic" = 'sound/vox/magnetic.ogg',
"main" = 'sound/vox/main.ogg',
"maintenance" = 'sound/vox/maintenance.ogg',
"malfunction" = 'sound/vox/malfunction.ogg',
"man" = 'sound/vox/man.ogg',
"mass" = 'sound/vox/mass.ogg',
"materials" = 'sound/vox/materials.ogg',
"maximum" = 'sound/vox/maximum.ogg',
"may" = 'sound/vox/may.ogg',
"med" = 'sound/vox/med.ogg',
"medical" = 'sound/vox/medical.ogg',
"men" = 'sound/vox/men.ogg',
"mercy" = 'sound/vox/mercy.ogg',
"mesa" = 'sound/vox/mesa.ogg',
"message" = 'sound/vox/message.ogg',
"meter" = 'sound/vox/meter.ogg',
"micro" = 'sound/vox/micro.ogg',
"middle" = 'sound/vox/middle.ogg',
"mike" = 'sound/vox/mike.ogg',
"miles" = 'sound/vox/miles.ogg',
"military" = 'sound/vox/military.ogg',
"milli" = 'sound/vox/milli.ogg',
"million" = 'sound/vox/million.ogg',
"minefield" = 'sound/vox/minefield.ogg',
"minimum" = 'sound/vox/minimum.ogg',
"minutes" = 'sound/vox/minutes.ogg',
"mister" = 'sound/vox/mister.ogg',
"mode" = 'sound/vox/mode.ogg',
"motor" = 'sound/vox/motor.ogg',
"motorpool" = 'sound/vox/motorpool.ogg',
"move" = 'sound/vox/move.ogg',
"must" = 'sound/vox/must.ogg',
"nearest" = 'sound/vox/nearest.ogg',
"nice" = 'sound/vox/nice.ogg',
"nine" = 'sound/vox/nine.ogg',
"nineteen" = 'sound/vox/nineteen.ogg',
"ninety" = 'sound/vox/ninety.ogg',
"no" = 'sound/vox/no.ogg',
"nominal" = 'sound/vox/nominal.ogg',
"north" = 'sound/vox/north.ogg',
"not" = 'sound/vox/not.ogg',
"november" = 'sound/vox/november.ogg',
"now" = 'sound/vox/now.ogg',
"number" = 'sound/vox/number.ogg',
"objective" = 'sound/vox/objective.ogg',
"observation" = 'sound/vox/observation.ogg',
"of" = 'sound/vox/of.ogg',
"officer" = 'sound/vox/officer.ogg',
"ok" = 'sound/vox/ok.ogg',
"on" = 'sound/vox/on.ogg',
"one" = 'sound/vox/one.ogg',
"open" = 'sound/vox/open.ogg',
"operating" = 'sound/vox/operating.ogg',
"operations" = 'sound/vox/operations.ogg',
"operative" = 'sound/vox/operative.ogg',
"option" = 'sound/vox/option.ogg',
"order" = 'sound/vox/order.ogg',
"organic" = 'sound/vox/organic.ogg',
"oscar" = 'sound/vox/oscar.ogg',
"out" = 'sound/vox/out.ogg',
"outside" = 'sound/vox/outside.ogg',
"over" = 'sound/vox/over.ogg',
"overload" = 'sound/vox/overload.ogg',
"override" = 'sound/vox/override.ogg',
"pacify" = 'sound/vox/pacify.ogg',
"pain" = 'sound/vox/pain.ogg',
"pal" = 'sound/vox/pal.ogg',
"panel" = 'sound/vox/panel.ogg',
"percent" = 'sound/vox/percent.ogg',
"perimeter" = 'sound/vox/perimeter.ogg',
"permitted" = 'sound/vox/permitted.ogg',
"personnel" = 'sound/vox/personnel.ogg',
"pipe" = 'sound/vox/pipe.ogg',
"plant" = 'sound/vox/plant.ogg',
"platform" = 'sound/vox/platform.ogg',
"please" = 'sound/vox/please.ogg',
"point" = 'sound/vox/point.ogg',
"portal" = 'sound/vox/portal.ogg',
"power" = 'sound/vox/power.ogg',
"presence" = 'sound/vox/presence.ogg',
"press" = 'sound/vox/press.ogg',
"primary" = 'sound/vox/primary.ogg',
"proceed" = 'sound/vox/proceed.ogg',
"processing" = 'sound/vox/processing.ogg',
"progress" = 'sound/vox/progress.ogg',
"proper" = 'sound/vox/proper.ogg',
"propulsion" = 'sound/vox/propulsion.ogg',
"prosecute" = 'sound/vox/prosecute.ogg',
"protective" = 'sound/vox/protective.ogg',
"push" = 'sound/vox/push.ogg',
"quantum" = 'sound/vox/quantum.ogg',
"quebec" = 'sound/vox/quebec.ogg',
"question" = 'sound/vox/question.ogg',
"questioning" = 'sound/vox/questioning.ogg',
"quick" = 'sound/vox/quick.ogg',
"quit" = 'sound/vox/quit.ogg',
"radiation" = 'sound/vox/radiation.ogg',
"radioactive" = 'sound/vox/radioactive.ogg',
"rads" = 'sound/vox/rads.ogg',
"rapid" = 'sound/vox/rapid.ogg',
"reach" = 'sound/vox/reach.ogg',
"reached" = 'sound/vox/reached.ogg',
"reactor" = 'sound/vox/reactor.ogg',
"red" = 'sound/vox/red.ogg',
"relay" = 'sound/vox/relay.ogg',
"released" = 'sound/vox/released.ogg',
"remaining" = 'sound/vox/remaining.ogg',
"renegade" = 'sound/vox/renegade.ogg',
"repair" = 'sound/vox/repair.ogg',
"report" = 'sound/vox/report.ogg',
"reports" = 'sound/vox/reports.ogg',
"required" = 'sound/vox/required.ogg',
"research" = 'sound/vox/research.ogg',
"reset" = 'sound/vox/reset.ogg',
"resevoir" = 'sound/vox/resevoir.ogg',
"resistance" = 'sound/vox/resistance.ogg',
"returned" = 'sound/vox/returned.ogg',
"right" = 'sound/vox/right.ogg',
"rocket" = 'sound/vox/rocket.ogg',
"roger" = 'sound/vox/roger.ogg',
"romeo" = 'sound/vox/romeo.ogg',
"room" = 'sound/vox/room.ogg',
"round" = 'sound/vox/round.ogg',
"run" = 'sound/vox/run.ogg',
"safe" = 'sound/vox/safe.ogg',
"safety" = 'sound/vox/safety.ogg',
"sargeant" = 'sound/vox/sargeant.ogg',
"satellite" = 'sound/vox/satellite.ogg',
"save" = 'sound/vox/save.ogg',
"science" = 'sound/vox/science.ogg',
"scores" = 'sound/vox/scores.ogg',
"scream" = 'sound/vox/scream.ogg',
"screen" = 'sound/vox/screen.ogg',
"search" = 'sound/vox/search.ogg',
"second" = 'sound/vox/second.ogg',
"secondary" = 'sound/vox/secondary.ogg',
"seconds" = 'sound/vox/seconds.ogg',
"sector" = 'sound/vox/sector.ogg',
"secure" = 'sound/vox/secure.ogg',
"secured" = 'sound/vox/secured.ogg',
"security" = 'sound/vox/security.ogg',
"select" = 'sound/vox/select.ogg',
"selected" = 'sound/vox/selected.ogg',
"service" = 'sound/vox/service.ogg',
"seven" = 'sound/vox/seven.ogg',
"seventeen" = 'sound/vox/seventeen.ogg',
"seventy" = 'sound/vox/seventy.ogg',
"severe" = 'sound/vox/severe.ogg',
"sewage" = 'sound/vox/sewage.ogg',
"sewer" = 'sound/vox/sewer.ogg',
"shield" = 'sound/vox/shield.ogg',
"shipment" = 'sound/vox/shipment.ogg',
"shock" = 'sound/vox/shock.ogg',
"shoot" = 'sound/vox/shoot.ogg',
"shower" = 'sound/vox/shower.ogg',
"shut" = 'sound/vox/shut.ogg',
"side" = 'sound/vox/side.ogg',
"sierra" = 'sound/vox/sierra.ogg',
"sight" = 'sound/vox/sight.ogg',
"silo" = 'sound/vox/silo.ogg',
"six" = 'sound/vox/six.ogg',
"sixteen" = 'sound/vox/sixteen.ogg',
"sixty" = 'sound/vox/sixty.ogg',
"slime" = 'sound/vox/slime.ogg',
"slow" = 'sound/vox/slow.ogg',
"soldier" = 'sound/vox/soldier.ogg',
"some" = 'sound/vox/some.ogg',
"someone" = 'sound/vox/someone.ogg',
"something" = 'sound/vox/something.ogg',
"son" = 'sound/vox/son.ogg',
"sorry" = 'sound/vox/sorry.ogg',
"south" = 'sound/vox/south.ogg',
"squad" = 'sound/vox/squad.ogg',
"square" = 'sound/vox/square.ogg',
"stairway" = 'sound/vox/stairway.ogg',
"status" = 'sound/vox/status.ogg',
"sterile" = 'sound/vox/sterile.ogg',
"sterilization" = 'sound/vox/sterilization.ogg',
"stolen" = 'sound/vox/stolen.ogg',
"storage" = 'sound/vox/storage.ogg',
"sub" = 'sound/vox/sub.ogg',
"subsurface" = 'sound/vox/subsurface.ogg',
"sudden" = 'sound/vox/sudden.ogg',
"suit" = 'sound/vox/suit.ogg',
"superconducting" = 'sound/vox/superconducting.ogg',
"supercooled" = 'sound/vox/supercooled.ogg',
"supply" = 'sound/vox/supply.ogg',
"surface" = 'sound/vox/surface.ogg',
"surrender" = 'sound/vox/surrender.ogg',
"surround" = 'sound/vox/surround.ogg',
"surrounded" = 'sound/vox/surrounded.ogg',
"switch" = 'sound/vox/switch.ogg',
"system" = 'sound/vox/system.ogg',
"systems" = 'sound/vox/systems.ogg',
"tactical" = 'sound/vox/tactical.ogg',
"take" = 'sound/vox/take.ogg',
"talk" = 'sound/vox/talk.ogg',
"tango" = 'sound/vox/tango.ogg',
"tank" = 'sound/vox/tank.ogg',
"target" = 'sound/vox/target.ogg',
"team" = 'sound/vox/team.ogg',
"temperature" = 'sound/vox/temperature.ogg',
"temporal" = 'sound/vox/temporal.ogg',
"ten" = 'sound/vox/ten.ogg',
"terminal" = 'sound/vox/terminal.ogg',
"terminated" = 'sound/vox/terminated.ogg',
"termination" = 'sound/vox/termination.ogg',
"test" = 'sound/vox/test.ogg',
"that" = 'sound/vox/that.ogg',
"the" = 'sound/vox/the.ogg',
"then" = 'sound/vox/then.ogg',
"there" = 'sound/vox/there.ogg',
"third" = 'sound/vox/third.ogg',
"thirteen" = 'sound/vox/thirteen.ogg',
"thirty" = 'sound/vox/thirty.ogg',
"this" = 'sound/vox/this.ogg',
"those" = 'sound/vox/those.ogg',
"thousand" = 'sound/vox/thousand.ogg',
"threat" = 'sound/vox/threat.ogg',
"three" = 'sound/vox/three.ogg',
"through" = 'sound/vox/through.ogg',
"time" = 'sound/vox/time.ogg',
"to" = 'sound/vox/to.ogg',
"top" = 'sound/vox/top.ogg',
"topside" = 'sound/vox/topside.ogg',
"touch" = 'sound/vox/touch.ogg',
"towards" = 'sound/vox/towards.ogg',
"track" = 'sound/vox/track.ogg',
"train" = 'sound/vox/train.ogg',
"transportation" = 'sound/vox/transportation.ogg',
"truck" = 'sound/vox/truck.ogg',
"tunnel" = 'sound/vox/tunnel.ogg',
"turn" = 'sound/vox/turn.ogg',
"turret" = 'sound/vox/turret.ogg',
"twelve" = 'sound/vox/twelve.ogg',
"twenty" = 'sound/vox/twenty.ogg',
"two" = 'sound/vox/two.ogg',
"unauthorized" = 'sound/vox/unauthorized.ogg',
"under" = 'sound/vox/under.ogg',
"uniform" = 'sound/vox/uniform.ogg',
"unlocked" = 'sound/vox/unlocked.ogg',
"until" = 'sound/vox/until.ogg',
"up" = 'sound/vox/up.ogg',
"upper" = 'sound/vox/upper.ogg',
"uranium" = 'sound/vox/uranium.ogg',
"us" = 'sound/vox/us.ogg',
"usa" = 'sound/vox/usa.ogg',
"use" = 'sound/vox/use.ogg',
"used" = 'sound/vox/used.ogg',
"user" = 'sound/vox/user.ogg',
"vacate" = 'sound/vox/vacate.ogg',
"valid" = 'sound/vox/valid.ogg',
"vapor" = 'sound/vox/vapor.ogg',
"vent" = 'sound/vox/vent.ogg',
"ventillation" = 'sound/vox/ventillation.ogg',
"victor" = 'sound/vox/victor.ogg',
"violated" = 'sound/vox/violated.ogg',
"violation" = 'sound/vox/violation.ogg',
"voltage" = 'sound/vox/voltage.ogg',
"vox_login" = 'sound/vox/vox_login.ogg',
"walk" = 'sound/vox/walk.ogg',
"wall" = 'sound/vox/wall.ogg',
"want" = 'sound/vox/want.ogg',
"wanted" = 'sound/vox/wanted.ogg',
"warm" = 'sound/vox/warm.ogg',
"warn" = 'sound/vox/warn.ogg',
"warning" = 'sound/vox/warning.ogg',
"waste" = 'sound/vox/waste.ogg',
"water" = 'sound/vox/water.ogg',
"we" = 'sound/vox/we.ogg',
"weapon" = 'sound/vox/weapon.ogg',
"west" = 'sound/vox/west.ogg',
"whiskey" = 'sound/vox/whiskey.ogg',
"white" = 'sound/vox/white.ogg',
"wilco" = 'sound/vox/wilco.ogg',
"will" = 'sound/vox/will.ogg',
"with" = 'sound/vox/with.ogg',
"without" = 'sound/vox/without.ogg',
"woop" = 'sound/vox/woop.ogg',
"xeno" = 'sound/vox/xeno.ogg',
"yankee" = 'sound/vox/yankee.ogg',
"yards" = 'sound/vox/yards.ogg',
"year" = 'sound/vox/year.ogg',
"yellow" = 'sound/vox/yellow.ogg',
"yes" = 'sound/vox/yes.ogg',
"you" = 'sound/vox/you.ogg',
"your" = 'sound/vox/your.ogg',
"yourself" = 'sound/vox/yourself.ogg',
"zero" = 'sound/vox/zero.ogg',
"zone" = 'sound/vox/zone.ogg',
"zulu" = 'sound/vox/zulu.ogg',))
#endif
@@ -51,6 +51,7 @@
var/treatment_fire = "kelotane"
var/treatment_tox_avoid = "tricordrazine"
var/treatment_tox = "charcoal"
var/treatment_tox_toxlover = "toxin"
var/treatment_virus_avoid = null
var/treatment_virus = "spaceacillin"
var/treat_virus = 1 //If on, the bot will attempt to treat viral infections, curing them if possible.
@@ -381,8 +382,8 @@
if((!C.reagents.has_reagent(treatment_fire_avoid)) && (C.getFireLoss() >= heal_threshold) && (!C.reagents.has_reagent(treatment_fire)))
return TRUE
if((!C.reagents.has_reagent(treatment_tox_avoid)) && (C.getToxLoss() >= heal_threshold) && (!C.reagents.has_reagent(treatment_tox)))
var/treatment_toxavoid = get_avoidchem_toxin(C)
if(((treatment_toxavoid && !C.reagents.has_reagent(treatment_toxavoid))) && (C.getToxLoss() >= heal_threshold) && (!C.reagents.has_reagent(get_healchem_toxin(C))))
return TRUE
if(treat_virus && !C.reagents.has_reagent(treatment_virus_avoid) && !C.reagents.has_reagent(treatment_virus))
@@ -396,6 +397,12 @@
return FALSE
/mob/living/simple_animal/bot/medbot/proc/get_avoidchem_toxin(mob/M)
return HAS_TRAIT(M, TRAIT_TOXINLOVER)? null : treatment_tox_avoid
/mob/living/simple_animal/bot/medbot/proc/get_healchem_toxin(mob/M)
return HAS_TRAIT(M, TRAIT_TOXINLOVER)? treatment_tox_toxlover : treatment_tox
/mob/living/simple_animal/bot/medbot/UnarmedAttack(atom/A)
if(iscarbon(A))
var/mob/living/carbon/C = A
@@ -463,8 +470,10 @@
reagent_id = treatment_fire
if(!reagent_id && (C.getToxLoss() >= heal_threshold))
if(!C.reagents.has_reagent(treatment_tox) && !C.reagents.has_reagent(treatment_tox_avoid))
reagent_id = treatment_tox
var/toxin_heal_avoid = get_avoidchem_toxin(C)
var/toxin_healchem = get_healchem_toxin(C)
if(!C.reagents.has_reagent(toxin_healchem) && (toxin_heal_avoid && !C.reagents.has_reagent(toxin_heal_avoid)))
reagent_id = toxin_healchem
//If the patient is injured but doesn't have our special reagent in them then we should give it to them first
if(reagent_id && use_beaker && reagent_glass && reagent_glass.reagents.total_volume)
@@ -131,3 +131,30 @@
category = list("Misc")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/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
@@ -98,3 +98,11 @@
build_path = /obj/item/circuitboard/machine/vr_sleeper
departmental_flags = DEPARTMENTAL_FLAG_ALL
category = list ("Medical Machinery")
/datum/design/board/autoylathe
name = "Machine Design (Autoylathe)"
desc = "The circuit board for an autoylathe."
id = "autoylathe"
build_path = /obj/item/circuitboard/machine/autoylathe
departmental_flags = DEPARTMENTAL_FLAG_ALL
category = list("Misc. Machinery")
@@ -372,3 +372,7 @@
/datum/techweb/specialized/autounlocking/exofab
allowed_buildtypes = MECHFAB
/datum/techweb/specialized/autounlocking/autoylathe
design_autounlock_buildtypes = AUTOYLATHE
allowed_buildtypes = AUTOYLATHE
@@ -31,8 +31,9 @@
var/list/stored_slimes
var/obj/item/slimepotion/slime/current_potion
var/max_slimes = 5
var/max_slimes = 1
var/monkeys = 0
var/upgradetier = 0
icon_screen = "slime_comp"
icon_keyboard = "rd_key"
@@ -106,6 +107,22 @@
stored_slimes -= deleted
/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
if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
monkeys++
to_chat(user, "<span class='notice'>You feed [O] to [src]. It now has [monkeys] monkey cubes stored.</span>")
@@ -264,3 +281,29 @@
break
else
to_chat(owner, "<span class='notice'>Target is not near a camera. Cannot proceed.</span>")
/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)
@@ -223,7 +223,6 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
/turf/open/space/bluespace/Entered(atom/movable/A)
. = ..()
A.forceMove(get_turf(parentSphere))
do_sparks(3, FALSE, get_turf(A))
/turf/closed/indestructible/hoteldoor
name = "Hotel Door"
+7
View File
@@ -1920,6 +1920,13 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
Radio headset does not include encryption key. No gun included."
item = /obj/item/storage/box/syndie_kit/centcom_costume
/datum/uplink_item/badass/claymore
name = "Claymore"
cost = 8
player_minimum = 25
desc = "A claymore. We don't know why you'd do this."
item = /obj/item/claymore
/datum/uplink_item/badass/costumes/clown
name = "Clown Costume"
desc = "Nothing is more terrifying than clowns with fully automatic weaponry."