diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index c0dc87b1c0d..ca8b9bc8795 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -523,13 +523,11 @@
I = U.hastie
if(I.icon_action_button)
var/obj/screen/item_action/A = new(hud_used)
-
+
//A.icon = 'icons/mob/screen1_action.dmi'
//A.icon_state = I.icon_action_button
-
A.icon = ui_style2icon(client.prefs.UI_style)
A.icon_state = "template"
-
var/image/img = image(I.icon, A, I.icon_state)
img.pixel_x = 0
img.pixel_y = 0
@@ -540,9 +538,7 @@
else
A.name = "Use [I.name]"
A.owner = I
-
hud_used.item_action_list += A
-
switch(num)
if(1)
A.screen_loc = ui_action_slot1
@@ -554,16 +550,6 @@
A.screen_loc = ui_action_slot4
if(5)
A.screen_loc = ui_action_slot5
- if(6)
- A.screen_loc = ui_action_slot6
- if(7)
- A.screen_loc = ui_action_slot7
- if(8)
- A.screen_loc = ui_action_slot8
- if(9)
- A.screen_loc = ui_action_slot9
- if(10)
- A.screen_loc = ui_action_slot10
break //5 slots available, so no more can be added.
num++
- src.client.screen += src.hud_used.item_action_list
+ src.client.screen += src.hud_used.item_action_list
\ No newline at end of file
diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm
index 2d4796309e4..9766d356232 100644
--- a/code/datums/spells/horsemask.dm
+++ b/code/datums/spells/horsemask.dm
@@ -22,6 +22,9 @@
return
var/mob/living/carbon/target = targets[1]
+
+ if(!target)
+ return
if(!(target.type in compatible_mobs))
user << "It'd be stupid to curse [target] with a horse's head!"
diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm
index c19cb43be7b..c905bf88a97 100644
--- a/code/datums/spells/mind_transfer.dm
+++ b/code/datums/spells/mind_transfer.dm
@@ -10,14 +10,12 @@
range = 1
cooldown_min = 200 //100 deciseconds reduction per rank
var/list/protected_roles = list("Wizard","Changeling","Cultist") //which roles are immune to the spell
- var/list/compatible_mobs = list(/mob/living/carbon/human,/mob/living/carbon/monkey) //which types of mobs are affected by the spell. NOTE: change at your own risk
var/base_spell_loss_chance = 20 //base probability of the wizard losing a spell in the process
var/spell_loss_chance_modifier = 7 //amount of probability of losing a spell added per spell (mind_transfer included)
var/spell_loss_amount = 1 //the maximum amount of spells possible to lose during a single transfer
var/msg_wait = 500 //how long in deciseconds it waits before telling that body doesn't feel right or mind swap robbed of a spell
var/paralysis_amount_caster = 20 //how much the caster is paralysed for after the spell
var/paralysis_amount_victim = 20 //how much the victim is paralysed for after the spell
-
icon_power_button = "spell_mind"
/*
@@ -40,12 +38,8 @@ Also, you never added distance checking after target is selected. I've went ahea
user << "They are too far away!"
return
- if(!(target.type in compatible_mobs))
- user << "Their mind isn't compatible with yours."
- return
-
if(target.stat == DEAD)
- user << "You didn't study necromancy back at the Space Wizard Federation academy."
+ user << "You don't particularly want to be dead."
return
if(!target.key || !target.mind)
diff --git a/code/datums/wires/autolathe.dm b/code/datums/wires/autolathe.dm
index e382ce620f1..77a8ce6c03c 100644
--- a/code/datums/wires/autolathe.dm
+++ b/code/datums/wires/autolathe.dm
@@ -27,7 +27,7 @@ var/const/AUTOLATHE_DISABLE_WIRE = 4
var/obj/machinery/autolathe/A = holder
switch(index)
if(AUTOLATHE_HACK_WIRE)
- A.hacked = !mended
+ A.adjust_hacked(!mended)
if(AUTOLATHE_SHOCK_WIRE)
A.shocked = !mended
if(AUTOLATHE_DISABLE_WIRE)
@@ -39,10 +39,10 @@ var/const/AUTOLATHE_DISABLE_WIRE = 4
var/obj/machinery/autolathe/A = holder
switch(index)
if(AUTOLATHE_HACK_WIRE)
- A.hacked = !A.hacked
+ A.adjust_hacked(!A.hacked)
spawn(50)
if(A && !IsIndexCut(index))
- A.hacked = 0
+ A.adjust_hacked(0)
Interact(usr)
if(AUTOLATHE_SHOCK_WIRE)
A.shocked = !A.shocked
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index 2cf5b94c1df..f79374021d3 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -685,7 +685,7 @@ var/list/datum/dna/hivemind_bank = list()
/mob/proc/changeling_hivedownload()
set category = "Changeling"
set name = "Hive Absorb (20)"
- set desc = "Allows you to absorb DNA that is being channeled in the airwaves."
+ set desc = "Allows you to absorb DNA that is being channelled in the airwaves."
var/datum/changeling/changeling = changeling_power(20,1)
if(!changeling) return
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 0d361ca233c..efb7538cdb0 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -406,6 +406,7 @@
spellname = "mindswap"
icon_state ="bookmindswap"
desc = "This book's cover is pristine, though its pages look ragged and torn."
+ var/mob/stored_swap = null //Used in used book recoils to store an identity for mindswaps
/obj/item/weapon/spellbook/oneuse/mindswap/onlearned()
spellname = pick("fireball","smoke","blind","forcewall","knock","horses","charge")
@@ -415,8 +416,45 @@
/obj/item/weapon/spellbook/oneuse/mindswap/recoil(mob/user as mob)
..()
- user <<"You suddenly don't feel like yourself!"
- wabbajack(user)
+ if(stored_swap in dead_mob_list)
+ stored_swap = null
+ if(!stored_swap)
+ stored_swap = user
+ user <<"For a moment you feel like you don't even know who you are anymore."
+ return
+ if(stored_swap == user)
+ user <<"You stare at the book some more, but there doesn't seem to be anything else to learn..."
+ return
+
+ if(user.mind.special_verbs.len)
+ for(var/V in user.mind.special_verbs)
+ user.verbs -= V
+
+ if(stored_swap.mind.special_verbs.len)
+ for(var/V in stored_swap.mind.special_verbs)
+ stored_swap.verbs -= V
+
+ var/mob/dead/observer/ghost = stored_swap.ghostize(0)
+ ghost.spell_list = stored_swap.spell_list
+
+ user.mind.transfer_to(stored_swap)
+ stored_swap.spell_list = user.spell_list
+
+ if(stored_swap.mind.special_verbs.len)
+ for(var/V in user.mind.special_verbs)
+ user.verbs += V
+
+ ghost.mind.transfer_to(user)
+ user.key = ghost.key
+ user.spell_list = ghost.spell_list
+
+ if(user.mind.special_verbs.len)
+ for(var/V in user.mind.special_verbs)
+ user.verbs += V
+
+ stored_swap <<"You're suddenly somewhere else... and someone else?!"
+ user <<"Suddenly you're staring at [src] again... where are you, who are you?!"
+ stored_swap = null
/obj/item/weapon/spellbook/oneuse/forcewall
spell = /obj/effect/proc_holder/spell/wizard/aoe_turf/conjure/forcewall
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index ace660697bf..7afabaa849d 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -36,7 +36,7 @@
_color = "blue"
can_label = 0
/obj/machinery/portable_atmospherics/canister/toxins
- name = "Canister \[Toxin (Bio)\]"
+ name = "Canister \[Toxin (Plasma)\]"
icon_state = "orange"
_color = "orange"
can_label = 0
@@ -336,7 +336,7 @@ update_flag
"\[N2O\]" = "redws", \
"\[N2\]" = "red", \
"\[O2\]" = "blue", \
- "\[Toxin (Bio)\]" = "orange", \
+ "\[Toxin (Plasma)\]" = "orange", \
"\[CO2\]" = "black", \
"\[Air\]" = "grey", \
"\[CAUTION\]" = "yellow", \
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index 94e3e75a1ea..f834719c9e0 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -10,6 +10,7 @@
var/processing = 0
var/obj/item/weapon/reagent_containers/glass/beaker = null
var/points = 0
+ var/in_beaker = 1
var/menustat = "menu"
var/efficiency = 0
var/productivity = 0
@@ -137,11 +138,12 @@
menustat = "menu"
if(beaker)
dat += "
Biomass: [points] units.
"
- dat += "ActivateDetach Container"
+ dat += "ActivateDetach Container
"
+ dat += "Put fertilizer in: [in_beaker ? "Beaker" : "Bottle"]"
dat += "Food:
"
dat += ""
dat += "10 milk:
Make ([20/efficiency])
"
- /*dat += "10 cream:
Make ([30/efficiency])
"*/
+ dat += "10 cream:
Make ([30/efficiency])
"
dat += "Monkey cube:
Make ([250/efficiency])"
dat += "
"
dat += "Nutrients:
"
@@ -153,14 +155,14 @@
dat += "Leather:
"
dat += ""
dat += "Wallet:
Make ([100/efficiency])
"
- /*dat += "Book bag:
Make ([200/efficiency])
"
+ dat += "Book bag:
Make ([200/efficiency])
"
dat += "Plant bag:
Make ([200/efficiency])
"
- dat += "Mining satchel:
Make ([200/efficiency])
"*/
+ dat += "Mining satchel:
Make ([200/efficiency])
"
dat += "Botanical gloves:
Make ([250/efficiency])
"
dat += "Utility belt:
Make ([300/efficiency])
"
dat += "Leather Satchel:
Make ([400/efficiency])
"
dat += "Cash Bag:
Make ([400/efficiency])
"
- /*dat += "Leather Jacket:
Make ([500/efficiency])
"*/
+ dat += "Leather Jacket:
Make ([500/efficiency])
"
//dat += "
Other:
"
//dat += "Monkey:
Make ([400/efficiency])
"
dat += "
"
@@ -225,26 +227,38 @@
if(check_container_volume(10)) return 0
else if (check_cost(20/efficiency)) return 0
else beaker.reagents.add_reagent("milk",10)
- /*if("cream")
+ if("cream")
if(check_container_volume(10)) return 0
else if (check_cost(30/efficiency)) return 0
- else beaker.reagents.add_reagent("cream",10)*/
+ else beaker.reagents.add_reagent("cream",10)
if("meat")
if (check_cost(250/efficiency)) return 0
else new/obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc)
if("ez")
if (check_cost(10/efficiency)) return 0
- else new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc)
+ if(in_beaker)
+ if(check_container_volume(10)) return 0
+ else beaker.reagents.add_reagent("eznutrient",10)
+ else
+ new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc)
if("l4z")
if (check_cost(20/efficiency)) return 0
- else new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
+ if(in_beaker)
+ if(check_container_volume(10)) return 0
+ else beaker.reagents.add_reagent("left4zed",10)
+ else
+ new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
if("rh")
if (check_cost(25/efficiency)) return 0
- else new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
+ if(in_beaker)
+ if(check_container_volume(10)) return 0
+ else beaker.reagents.add_reagent("robustharvest",10)
+ else
+ new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
if("wallet")
if (check_cost(100/efficiency)) return 0
else new/obj/item/weapon/storage/wallet(src.loc)
- /*if("bkbag")
+ if("bkbag")
if (check_cost(200/efficiency)) return 0
else new/obj/item/weapon/storage/bag/books(src.loc)
if("ptbag")
@@ -252,7 +266,7 @@
else new/obj/item/weapon/storage/bag/plants(src.loc)
if("mnbag")
if (check_cost(200/efficiency)) return 0
- else new/obj/item/weapon/storage/bag/ore(src.loc)*/
+ else new/obj/item/weapon/storage/bag/ore(src.loc)
if("gloves")
if (check_cost(250/efficiency)) return 0
else new/obj/item/clothing/gloves/botanic_leather(src.loc)
@@ -265,9 +279,9 @@
if("cashbag")
if (check_cost(400/efficiency)) return 0
else new/obj/item/weapon/storage/bag/cash(src.loc)
- /*if("jacket")
+ if("jacket")
if (check_cost(500/efficiency)) return 0
- else new/obj/item/clothing/suit/jacket/leather(src.loc)*/
+ else new/obj/item/clothing/suit/jacket/leather(src.loc)
//if("monkey")
// if (check_cost(500)) return 0
// else new/mob/living/carbon/monkey(src.loc)
@@ -309,4 +323,8 @@
else if(href_list["menu"])
menustat = "menu"
+ updateUsrDialog()
+
+ else if(href_list["inbeaker"])
+ in_beaker = !in_beaker
updateUsrDialog()
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 90b0b268a22..3fa71922efd 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -9,6 +9,7 @@
* Mining Satchel
* Plant Bag
* Sheet Snatcher
+ * Book Bag
*
* -Sayu
*/
@@ -307,3 +308,19 @@
w_class = 1
can_hold = list("/obj/item/weapon/coin","/obj/item/weapon/spacecash")
+
+// -----------------------------
+// Book bag
+// -----------------------------
+
+/obj/item/weapon/storage/bag/books
+ name = "book bag"
+ desc = "A bag for books."
+ icon = 'icons/obj/library.dmi'
+ icon_state = "bookbag"
+ display_contents_with_number = 0 //This would look really stupid otherwise
+ storage_slots = 7
+ max_combined_w_class = 21
+ max_w_class = 3
+ w_class = 4 //Bigger than a book because physics
+ can_hold = list(/obj/item/weapon/book, /obj/item/weapon/spellbook) //No bibles, consistent with bookcase
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 76aa2126475..bf36677777a 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -56,8 +56,8 @@
return
/obj/item/weapon/storage/firstaid/toxin
- name = "toxin first aid"
- desc = "Used to treat when you have a high amoutn of toxins in your body."
+ name = "toxin first aid kit"
+ desc = "Used to treat when you have a high amounts of toxins in your body."
icon_state = "antitoxin"
item_state = "firstaid-toxin"
@@ -77,7 +77,7 @@
return
/obj/item/weapon/storage/firstaid/o2
- name = "oxygen deprivation first aid"
+ name = "oxygen deprivation first aid kit"
desc = "A box full of oxygen goodies."
icon_state = "o2"
item_state = "firstaid-o2"
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index cdf0cbc0156..5294334d070 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -68,6 +68,8 @@
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/under/color/black(src)
+ if(prob(25))
+ new /obj/item/clothing/suit/jacket/leather(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index fbfb77cdc9d..0b9570bbb5c 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -414,6 +414,11 @@
item_state = "bomber"
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|ARMS
+
+/obj/item/clothing/suit/jacket/leather
+ name = "leather jacket"
+ desc = "Pompadour not included."
+ icon_state = "leatherjacket"
/obj/item/clothing/suit/officercoat
name = "Clown Officer's Coat"
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index bffc9143707..54361ed3d36 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -17,119 +17,122 @@
mecha = null//This does not appear to be used outside of reference in mecha.dm.
- attack_self(mob/user as mob)
- if(brainmob && !brainmob.key && searching == 0)
- //Start the process of searching for a new user.
- user << "\blue You carefully locate the manual activation switch and start the positronic brain's boot process."
- icon_state = "posibrain-searching"
- ghost_volunteers.Cut()
- src.searching = 1
- src.request_player()
- spawn(600)
- if(ghost_volunteers.len)
- var/mob/dead/observer/O = pick(ghost_volunteers)
- if(istype(O) && O.client && O.key)
- transfer_personality(O)
- reset_search()
+/obj/item/device/mmi/posibrain/attack_self(mob/user as mob)
+ if(brainmob && !brainmob.key && searching == 0)
+ //Start the process of searching for a new user.
+ user << "\blue You carefully locate the manual activation switch and start the positronic brain's boot process."
+ icon_state = "posibrain-searching"
+ ghost_volunteers.Cut()
+ src.searching = 1
+ src.request_player()
+ spawn(600)
+ if(ghost_volunteers.len)
+ var/mob/dead/observer/O = pick(ghost_volunteers)
+ if(istype(O) && O.client && O.key)
+ transfer_personality(O)
+ reset_search()
- proc/request_player()
- for(var/mob/dead/observer/O in player_list)
- if(O.client && O.client.prefs.be_special & BE_PAI)
- if(check_observer(O))
- O << "\blue \A [src] has been activated. (Teleport | Sign Up)"
- //question(O.client)
+/obj/item/device/mmi/posibrain/proc/request_player()
+ for(var/mob/dead/observer/O in player_list)
+ if(O.client && O.client.prefs.be_special & BE_PAI)
+ if(check_observer(O))
+ O << "\blue \A [src] has been activated. (Teleport | Sign Up)"
+ //question(O.client)
- proc/check_observer(var/mob/dead/observer/O)
- if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted)
- return 0
- if(jobban_isbanned(O, "pAI"))
- return 0
- if(O.client)
- return 1
+/obj/item/device/mmi/posibrain/proc/check_observer(var/mob/dead/observer/O)
+ if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted)
return 0
+ if(jobban_isbanned(O, "pAI"))
+ return 0
+ if(O.client)
+ return 1
+ return 0
- proc/question(var/client/C)
- spawn(0)
- if(!C) return
- var/response = alert(C, "Someone is requesting a personality for a positronic brain. Would you like to play as one?", "Positronic brain request", "Yes", "No", "Never for this round")
- if(!C || brainmob.key || 0 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
- if(response == "Yes")
- transfer_personality(C.mob)
- else if (response == "Never for this round")
- C.prefs.be_special ^= BE_PAI
+/obj/item/device/mmi/posibrain/proc/question(var/client/C)
+ spawn(0)
+ if(!C) return
+ var/response = alert(C, "Someone is requesting a personality for a positronic brain. Would you like to play as one?", "Positronic brain request", "Yes", "No", "Never for this round")
+ if(!C || brainmob.key || 0 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
+ if(response == "Yes")
+ transfer_personality(C.mob)
+ else if (response == "Never for this round")
+ C.prefs.be_special ^= BE_PAI
- transfer_identity(var/mob/living/carbon/H)
- name = "positronic brain ([H])"
- brainmob.name = H.real_name
- brainmob.real_name = H.real_name
- brainmob.dna = H.dna
- brainmob.timeofhostdeath = H.timeofdeath
- brainmob.stat = 0
- if(brainmob.mind)
- brainmob.mind.assigned_role = "Positronic Brain"
- if(H.mind)
- H.mind.transfer_to(brainmob)
- brainmob << "\blue You feel slightly disoriented. That's normal when you're just a metal cube."
- icon_state = "posibrain-occupied"
+/obj/item/device/mmi/posibrain/transfer_identity(var/mob/living/carbon/H)
+ name = "positronic brain ([H])"
+ brainmob.name = H.real_name
+ brainmob.real_name = H.real_name
+ brainmob.dna = H.dna
+ brainmob.timeofhostdeath = H.timeofdeath
+ brainmob.stat = 0
+ if(brainmob.mind)
+ brainmob.mind.assigned_role = "Positronic Brain"
+ if(H.mind)
+ H.mind.transfer_to(brainmob)
+ brainmob << "\blue You feel slightly disoriented. That's normal when you're just a metal cube."
+ icon_state = "posibrain-occupied"
+ return
+
+/obj/item/device/mmi/posibrain/proc/transfer_personality(var/mob/candidate)
+ src.searching = 0
+ src.brainmob.mind = candidate.mind
+ //src.brainmob.key = candidate.key
+ src.brainmob.ckey = candidate.ckey
+ src.name = "positronic brain ([src.brainmob.name])"
+
+ src.brainmob << "You are a positronic brain, brought into existence on [station_name()]."
+ src.brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI."
+ src.brainmob << "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm."
+ src.brainmob << "Use say :b to speak to other artificial intelligences."
+ src.brainmob.mind.assigned_role = "Positronic Brain"
+
+ var/turf/T = get_turf_or_move(src.loc)
+ for (var/mob/M in viewers(T))
+ M.show_message("\blue The positronic brain chimes quietly.")
+ icon_state = "posibrain-occupied"
+
+/obj/item/device/mmi/posibrain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
+ if(src.brainmob && src.brainmob.key) return
+
+ src.searching = 0
+ icon_state = "posibrain"
+
+ var/turf/T = get_turf_or_move(src.loc)
+ for (var/mob/M in viewers(T))
+ M.show_message("\blue The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
+
+/obj/item/device/mmi/posibrain/Topic(href,href_list)
+ if("signup" in href_list)
+ var/mob/dead/observer/O = locate(href_list["signup"])
+ if(!O) return
+ volunteer(O)
+
+/obj/item/device/mmi/posibrain/proc/volunteer(var/mob/dead/observer/O)
+ if(!searching)
+ O << "Not looking for a ghost, yet."
return
-
- proc/transfer_personality(var/mob/candidate)
-
- src.searching = 0
- src.brainmob.mind = candidate.mind
- //src.brainmob.key = candidate.key
- src.brainmob.ckey = candidate.ckey
- src.name = "positronic brain ([src.brainmob.name])"
-
- src.brainmob << "You are a positronic brain, brought into existence on [station_name()]."
- src.brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI."
- src.brainmob << "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm."
- src.brainmob << "Use say :b to speak to other artificial intelligences."
- src.brainmob.mind.assigned_role = "Positronic Brain"
-
- var/turf/T = get_turf_or_move(src.loc)
- for (var/mob/M in viewers(T))
- M.show_message("\blue The positronic brain chimes quietly.")
- icon_state = "posibrain-occupied"
-
- proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
-
- if(src.brainmob && src.brainmob.key) return
-
- src.searching = 0
- icon_state = "posibrain"
-
- var/turf/T = get_turf_or_move(src.loc)
- for (var/mob/M in viewers(T))
- M.show_message("\blue The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
-
- Topic(href,href_list)
- if("signup" in href_list)
- var/mob/dead/observer/O = locate(href_list["signup"])
- if(!O) return
- volunteer(O)
-
- proc/volunteer(var/mob/dead/observer/O)
- if(!searching)
- O << "Not looking for a ghost, yet."
- return
- if(!istype(O))
- O << "\red NO."
- return
- if(O in ghost_volunteers)
- O << "\blue Removed from registration list."
- ghost_volunteers.Remove(O)
- return
- if(!check_observer(O))
- O << "\red You cannot be \a [src]."
- return
- O.<< "\blue You've been added to the list of ghosts that may become this [src]. Click again to unvolunteer."
- ghost_volunteers.Add(O)
+ if(!istype(O))
+ O << "\red Error."
+ return
+ if(O in ghost_volunteers)
+ O << "\blue Removed from registration list."
+ ghost_volunteers.Remove(O)
+ return
+ if(!check_observer(O))
+ O << "\red You cannot be \a [src]."
+ return
+ if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted)
+ O << "\red Upon using the antagHUD you forfeited the ability to join the round."
+ return
+ if(jobban_isbanned(O, "pAI"))
+ O << "\red You are job banned from this role."
+ return
+ O.<< "\blue You've been added to the list of ghosts that may become this [src]. Click again to unvolunteer."
+ ghost_volunteers.Add(O)
/obj/item/device/mmi/posibrain/examine()
-
set src in oview()
if(!usr || !src) return
diff --git a/code/modules/mob/living/carbon/human/hud.dm b/code/modules/mob/living/carbon/human/hud.dm
index c81f38fd1c2..fb462846e8e 100644
--- a/code/modules/mob/living/carbon/human/hud.dm
+++ b/code/modules/mob/living/carbon/human/hud.dm
@@ -525,43 +525,4 @@
src.hud_used.hotkey_ui_hidden = 0
else
client.screen -= src.hud_used.hotkeybuttons
- src.hud_used.hotkey_ui_hidden = 1
-
-
-/mob/living/carbon/human/update_action_buttons()
- var/num = 1
- if(!src.hud_used) return
- if(!src.client) return
-
- if(!hud_used.hud_shown) //Hud toggled to minimal
- return
-
- src.client.screen -= src.hud_used.item_action_list
- hud_used.item_action_list = list()
-
- for(var/obj/item/I in src)
- if(I.icon_action_button)
- var/obj/screen/item_action/A = new(src.hud_used)
- A.icon = 'icons/mob/screen1_action.dmi'
- A.icon_state = I.icon_action_button
- if(I.action_button_name)
- A.name = I.action_button_name
- else
- A.name = "Use [I.name]"
- A.owner = I
- hud_used.item_action_list += A
- switch(num)
- if(1)
- A.screen_loc = ui_action_slot1
- if(2)
- A.screen_loc = ui_action_slot2
- if(3)
- A.screen_loc = ui_action_slot3
- if(4)
- A.screen_loc = ui_action_slot4
- if(5)
- A.screen_loc = ui_action_slot5
- break //5 slots available, so no more can be added.
- num++
-
- src.client.screen += src.hud_used.item_action_list
\ No newline at end of file
+ src.hud_used.hotkey_ui_hidden = 1
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index b03f75a168e..e5dc9f519a4 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -17,13 +17,17 @@
var/datum/organ/external/H = organs_by_name["head"]
if (!H.amputated)
if ((health >= (config.health_threshold_dead/100*75)) && stat == DEAD) //need to get them 25% away from death point before reviving them
+ mob_list -= src
dead_mob_list -= src
living_mob_list += src
+ mob_list += src
stat = CONSCIOUS
ear_deaf = 0
if (stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix
+ mob_list -= src
dead_mob_list -= src
- living_mob_list += src
+ living_mob_list += src
+ mob_list += src
ear_deaf = 0
return
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
index 5c63753a382..68a5546e4da 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
@@ -103,7 +103,7 @@
if(istype(src,/mob/dead/observer))
var/mob/dead/observer/G = src
if(G.has_enabled_antagHUD == 1 && config.antag_hud_restricted)
- usr << "\blue Upon using the antagHUD you forfeighted the ability to join the round."
+ usr << "\blue Upon using the antagHUD you forfeited the ability to join the round."
return
var/deathtimeminutes = round(deathtime / 600)
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index f3dc453accc..99890d48df0 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi
index fc5eec635a0..734f32f1752 100644
Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 6a505eb8523..77dde9413fc 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi
index 606deaeefea..1c405908b43 100644
Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ
diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm
index 859e9d188b4..5a4eb7d743a 100644
--- a/maps/cyberiad.dmm
+++ b/maps/cyberiad.dmm
@@ -2616,7 +2616,7 @@
"aYp" = (/obj/machinery/seed_extractor,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aYq" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aYr" = (/obj/machinery/vending/hydroseeds,/obj/machinery/camera{c_tag = "Hydroponics North"; network = list("SS13")},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
-"aYs" = (/obj/machinery/biogenerator,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
+"aYs" = (/obj/machinery/biogenerator,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aYt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/requests_console{department = "Hydroponics"; departmentType = 2; pixel_x = 0; pixel_y = 30},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aYu" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aYv" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/obj/machinery/atmospherics/pipe/simple{_color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/turf/simulated/floor/wood,/area/library)
@@ -3571,7 +3571,7 @@
"bqI" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{dir = 2; id = "mechbay"; name = "Mech Bay"},/turf/simulated/floor{icon_state = "delivery"},/area/assembly/chargebay)
"bqJ" = (/obj/machinery/computer/rdconsole/robotics,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bqK" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics Requests Console"; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
-"bqL" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"bqL" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bqM" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "rdlab2"; name = "Research and Development Lab Shutters"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Research and Development Desk"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bqN" = (/obj/machinery/door_control{id = "rdlab2"; name = "Research and Development Lab Shutters Control"; pixel_x = -24; pixel_y = -24; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bqO" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/hallway/primary/starboard/east)
@@ -3646,7 +3646,7 @@
"bsf" = (/turf/simulated/floor,/area/assembly/chargebay)
"bsg" = (/obj/machinery/door_control{dir = 2; id = "mechbay"; name = "Mech Bay Door Control"; pixel_x = 6; pixel_y = 24; req_access_txt = "29"},/turf/simulated/floor{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/assembly/chargebay)
"bsh" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/chargebay)
-"bsi" = (/obj/machinery/power/apc{dir = 1; name = "Robotics Lab APC"; pixel_x = -25; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"bsi" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 8; name = "Robotics Lab APC"; pixel_x = -25},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bsj" = (/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bsk" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bsl" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/door_control{id = "rdlab"; name = "Research and Development Lab Shutters Control"; pixel_x = 24; pixel_y = 24; req_access_txt = "47"},/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab)
@@ -7622,11 +7622,11 @@
"cQD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cQE" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "AI Satellite Antechamber APC"; pixel_x = 25},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cQF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple{_color = "blue"; icon_state = "intact-b"; level = 2},/obj/machinery/light/small{dir = 4},/obj/machinery/camera/motion{c_tag = "Mini Satellite Exterior North-West"; dir = 8; network = list("SS13","MiniSat")},/turf/simulated/floor/plating,/area/aisat)
-"cQG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/bot/floorbot,/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/turret_protected/aisat_interior)
+"cQG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/bot/cleanbot{on = 0},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/turret_protected/aisat_interior)
"cQH" = (/obj/machinery/turret{dir = 1},/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cQI" = (/obj/machinery/camera/motion{c_tag = "Mini Satellite Antechamber"; dir = 1; network = list("SS13","MiniSat")},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
"cQJ" = (/obj/machinery/turret{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/aisat_interior)
-"cQK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/bot/cleanbot,/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/turret_protected/aisat_interior)
+"cQK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/bot/floorbot{on = 0},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/turret_protected/aisat_interior)
"cQL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple{_color = "red"; icon_state = "intact-r"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small{dir = 8},/obj/machinery/camera/motion{c_tag = "Mini Satellite Exterior North-East"; dir = 4; network = list("SS13","MiniSat")},/turf/simulated/floor/plating,/area/aisat)
"cQM" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/highsecurity{icon_state = "door_locked"; locked = 1; name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/ai)
"cQN" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor{dir = 5; icon_state = "dark"; tag = "icon-vault (NORTHEAST)"},/area/turret_protected/ai)
@@ -8887,7 +8887,7 @@
"doU" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
"doV" = (/obj/structure/table/reinforced,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/device/multitool,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
"doW" = (/obj/structure/rack,/obj/item/clothing/mask/gas/swat,/obj/item/clothing/mask/gas/swat,/obj/item/clothing/mask/gas/swat,/obj/item/clothing/mask/gas/swat,/obj/item/clothing/mask/gas/swat,/obj/item/clothing/mask/gas/swat,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
-"doX" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
+"doX" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/purple,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"doY" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "CREED"; name = "Spec Ops Ready Room"; pixel_y = 16; req_access_txt = "108"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "ASSAULT"; name = "Mech Storage"; pixel_y = -4; req_access_txt = "108"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "WEAPONS"; name = "Armory Door"; pixel_y = 6; req_access_txt = "108"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops)
"doZ" = (/obj/structure/stool/bed/chair/comfy/black{tag = "icon-comfychair_black (NORTH)"; icon_state = "comfychair_black"; dir = 1},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/specops)
"dpa" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; name = "Spec Ops Intercom"; pixel_y = 28},/obj/machinery/computer/shuttle_control{name = "gamma operations control console"; req_one_access_txt = "32"; shuttle_tag = "Gamma"},/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/specops)
@@ -8896,7 +8896,7 @@
"dpd" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/teargas,/obj/item/weapon/melee/baton/loaded,/obj/item/device/flash,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
"dpe" = (/obj/structure/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"dpf" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{id_tag = "specops_centcom_dock"; pixel_y = -25; tag_door = "specops_centcom_dock_inner"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"dpg" = (/obj/structure/rack,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/head/bio_hood/janitor,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
+"dpg" = (/obj/structure/rack,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/weapon/storage/belt/janitor,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"dph" = (/turf/unsimulated/floor{dir = 10; icon_state = "carpetside"},/area/centcom/specops)
"dpi" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpetside"},/area/centcom/specops)
"dpj" = (/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/centcom/specops)
@@ -12910,7 +12910,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOicOicOicOicOiaaacOicOicOicOicOiaaacOicOicOicOicOiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPWcPWcPWcPWcPWcPWcPWcPWcPWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrcPJcQccQdcQecQecQfcQgcQhcQicQjcQjcQkcQlcQmcQncQncQocQpcPVafraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOpcOpcOpcOpcOpaaacOpcOpcOpcOpcOpaaacOpcOpcOpcOpcOpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOicOicOicOicOiaaaaaaaaaaaaaaaaaaaaacOicOicOicOicOiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPWcPWcPWcPWcPWcPWcPWcPWcPWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrcPJcQqcQrckrckraaqcQscQtcQtcQucQtcQtcQvaaqckrckrcQwcQxcPVafraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOpcOpcOpcOpcOpaaaaaaaaaaaaaaaaaaaaacOpcOpcOpcOpcOpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPWcPWcPWcPWcPWcPWcPWcPWcPWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrcPJcQqcPVaaaaaaaaqcQycQzcQAcQBcQCcQDcQEaaqaaaaaacPJcQxcPVafraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPWcPWcPWcPWcPWcPWcPWcPWcPWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrcPJcQFaaqaaqaaqaaqcQGcQHcQtcQtcQIcQJcQKaaqaaqaaqaaqcQLcPVafraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPWcPWcPWcPWcPWcPWcPWcPWcPWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrcPJcQFaaqaaqaaqaaqcQKcQHcQtcQtcQIcQJcQGaaqaaqaaqaaqcQLcPVafraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPWcPWcPWcPWcPWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrcPJcQqcPVaaaaaaaaiafmaaiafecQMaaiaaiabnaaiaaaaaacPJcQxcPVafraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPWcPWcPWcPWcPWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrcPJcQqcPVaaaaaaaaicQNcQOcQPcQQcQRcQScQTaaiaaaaaacPJcQxcPVafraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPWcPWcPWcPWcPWcPWcPWcPWcPWcPWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafrcPJcQqcPVaaaaaiaaicQUcQSbkxbkxbkxcQScQVaaiaaiaaacPJcQxcPVafraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa