Merge branch 'master' of github.com:Baystation12/Baystation12

Conflicts:
	baystation12.dme
This commit is contained in:
Apple_Master
2012-02-25 18:02:57 +00:00
37 changed files with 3363 additions and 2357 deletions
+3
View File
@@ -80,6 +80,7 @@
#define FILE_DIR "code/game/objects/stacks"
#define FILE_DIR "code/game/objects/storage"
#define FILE_DIR "code/game/objects/tanks"
#define FILE_DIR "code/game/player"
#define FILE_DIR "code/game/verbs"
#define FILE_DIR "code/js"
#define FILE_DIR "code/modules"
@@ -143,6 +144,7 @@
#define FILE_DIR "code/unused/pda2"
#define FILE_DIR "code/unused/spacecraft"
#define FILE_DIR "code/WorkInProgress"
#define FILE_DIR "code/WorkInProgress/Apples"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara"
#define FILE_DIR "code/WorkInProgress/mapload"
@@ -724,6 +726,7 @@
#include "code\game\objects\tanks\emergency.dm"
#include "code\game\objects\tanks\jetpack.dm"
#include "code\game\objects\tanks\oxygen.dm"
#include "code\game\player\news.dm"
#include "code\game\verbs\AI_status.dm"
#include "code\game\verbs\checkkarma.dm"
#include "code\game\verbs\ooc.dm"
+8
View File
@@ -253,11 +253,19 @@ obj/machinery/atmospherics/pipe
name="Scrubbers pipe"
color="red"
icon_state = ""
initialize()
..()
if(istype(node1, /obj/machinery/atmospherics/pipe/simple/supply) || istype(node1, /obj/machinery/atmospherics/pipe/simple/supply))
log_admin("Warning, scrubber pipeline connected to supply pipeline at [x], [y], [z]!")
simple/supply
name="Air supply pipe"
color="blue"
icon_state = ""
initialize()
..()
if(istype(node1, /obj/machinery/atmospherics/pipe/simple/scrubbers) || istype(node1, /obj/machinery/atmospherics/pipe/simple/scrubbers))
log_admin("Warning, supply pipeline connected to scrubber pipeline at [x], [y], [z]!")
simple/supplymain
name="Main air supply pipe"
@@ -7,7 +7,7 @@
var/max_fuel = 350
/obj/item/weapon/weldpack/New()
var/datum/reagents/R = new/datum/reagents(max_fuel) //5 refills
var/datum/reagents/R = new/datum/reagents(max_fuel) //Lotsa refills
reagents = R
R.my_atom = src
R.add_reagent("fuel", max_fuel)
+1 -1
View File
@@ -3,7 +3,7 @@
var/level = 2
var/flags = FPRINT
var/list/fingerprints = list()
var/list/fingerprintshidden = new/list()
var/list/fingerprintshidden = list()
var/fingerprintslast = null
var/list/blood_DNA = list()
var/last_bumped = 0
+1 -1
View File
@@ -860,7 +860,7 @@
yield = 2
potency = 10
plant_type = 0
growthstages = 6
growthstages = 5
/* // Maybe one day when I get it to work like a grenade which exlodes gibs.
/obj/item/seeds/gibtomatoseed
+1 -1
View File
@@ -90,7 +90,7 @@ I decided to scrap round-specific objectives since keeping track of them would r
When I already created about 4 new objectives, this doesn't seem terribly important or needed.
*/
/var/global/toggle_space_ninja = 1//If ninjas can spawn or not.
/var/global/toggle_space_ninja = 0//If ninjas can spawn or not.
/var/global/sent_ninja_to_station = 0//If a ninja is already on the station.
/proc/space_ninja_arrival()
+3 -2
View File
@@ -4,6 +4,7 @@ var/global/datum/controller/occupations/job_master
var
//List of all jobs
list/occupations = list()
list/occupations2 = list()
//Players who need jobs
list/unassigned = list()
//Debug info
@@ -159,7 +160,7 @@ var/global/datum/controller/occupations/job_master
if(unassigned.len == 0) return 0
//Shuffle players and jobs
unassigned = shuffle(unassigned)
// occupations = shuffle(occupations) check and see if we can do this one
occupations2 = shuffle(occupations)
//Assistants are checked first
Debug("DO, Running Assistant Check 1")
@@ -185,7 +186,7 @@ var/global/datum/controller/occupations/job_master
//Other jobs are now checked
Debug("DO, Running Standard Check")
for(var/level = 1 to 3)
for(var/datum/job/job in occupations)
for(var/datum/job/job in occupations2)
Debug("Checking job: [job]")
if(!job) continue
if(!unassigned.len) break
+6
View File
@@ -307,6 +307,12 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
target_types += /obj/effect/decal/cleanable/vomit
target_types += /obj/effect/decal/cleanable/robot_debris
target_types += /obj/effect/decal/cleanable/crayon
target_types += /obj/effect/decal/cleanable/mucus
target_types += /obj/effect/decal/cleanable/robot_debris
target_types += /obj/effect/decal/cleanable/molten_item
target_types += /obj/effect/decal/cleanable/tomato_smudge
target_types += /obj/effect/decal/cleanable/egg_smudge
target_types += /obj/effect/decal/cleanable/pie_smudge
if(src.blood)
target_types += /obj/effect/decal/cleanable/xenoblood/
+12 -18
View File
@@ -29,7 +29,7 @@
var/last_found = 0
var/last_newpatient_speak = 0 //Don't spam the "HEY I'M COMING" messages
var/currently_healing = 0
var/injection_amount = 15 //How much reagent do we inject at a time?
var/injection_amount = 5 //How much reagent do we inject at a time?
var/heal_threshold = 15 //Start healing when they have this much damage in a category
var/use_beaker = 1 //Use reagents in beaker instead of default treatment agents.
//Setting which reagents to use to treat what by default. By id.
@@ -375,25 +375,21 @@
if((src.use_beaker) && (src.reagent_glass) && (src.reagent_glass.reagents.total_volume))
if(always_inject)
reagent_id = "internal_beaker"
else if (C.getBruteLoss() >= heal_threshold)
if(C.reagents.has_reagent(src.treatment_brute))
reagent_id = "internal_beaker"
else if (C.getBruteLoss() >= heal_threshold && reagent_glass.reagents.has_reagent(src.treatment_brute))
reagent_id = "internal_beaker"
else if (C.getOxyLoss() >= (15 + heal_threshold))
if(C.reagents.has_reagent(src.treatment_oxy))
reagent_id = "internal_beaker"
else if (C.getOxyLoss() >= (15 + heal_threshold) && reagent_glass.reagents.has_reagent(src.treatment_oxy))
reagent_id = "internal_beaker"
else if (C.getFireLoss() >= heal_threshold)
if(C.reagents.has_reagent(src.treatment_fire))
reagent_id = "internal_beaker"
else if (C.getFireLoss() >= heal_threshold && reagent_glass.reagents.has_reagent(src.treatment_fire))
reagent_id = "internal_beaker"
else if (C.getToxLoss() >= heal_threshold)
if(C.reagents.has_reagent(src.treatment_tox))
reagent_id = "internal_beaker"
else if (C.getToxLoss() >= heal_threshold && reagent_glass.reagents.has_reagent(src.treatment_tox))
reagent_id = "internal_beaker"
else if (100 - C.health >= heal_threshold && reagent_glass.reagents.has_reagent("tricordrazine"))
reagent_id = "internal_beaker"
else if (100 - C.health >= heal_threshold)
if(C.reagents.has_reagent("tricordrazine"))
reagent_id = "internal_beaker"
if(src.emagged) //Emagged! Time to poison everybody.
reagent_id = "toxin"
@@ -425,8 +421,6 @@
reagent_id = "inaprovaline"
return
// src.speak(reagent_id)
reagent_id = null
return
+2
View File
@@ -1496,6 +1496,8 @@ About the new airlock wires panel:
return
if (istype(C, /obj/item/device/hacktool))
return src.attack_ai(user, C)
if(ismob(C))
return ..(C, user)
src.add_fingerprint(user)
switch(removal_step)
if(0)
+16 -15
View File
@@ -62,9 +62,9 @@ MASS SPECTROMETER
/obj/item/device/detective_scanner
name = "Scanner"
desc = "Used to scan objects for DNA and fingerprints."
icon_state = "forensic0"
icon_state = "forensic1"
var/amount = 20.0
var/printing = 0.0
// var/printing = 0.0
var/list/stored = list()
w_class = 3.0
item_state = "electronic"
@@ -90,15 +90,15 @@ MASS SPECTROMETER
W.add_fingerprint(user)
return
attack_self(mob/user as mob)
src.printing = !( src.printing )
if(src.printing)
user << "\blue Printing turned on"
else
user << "\blue Printing turned off"
src.icon_state = text("forensic[]", src.printing)
add_fingerprint(user)
return
// attack_self(mob/user as mob)
// src.printing = !( src.printing )
// if(src.printing)
// user << "\blue Printing turned on"
// else
// user << "\blue Printing turned off"
// src.icon_state = text("forensic[]", src.printing)
// add_fingerprint(user)
// return
attack(mob/living/carbon/human/M as mob, mob/user as mob)
if (!ishuman(M))
@@ -108,11 +108,12 @@ MASS SPECTROMETER
user << "\blue No fingerprints found on [M]"
return 0
else
if ((src.amount < 1 && src.printing))
if (src.amount < 1)
user << text("\blue Fingerprints scanned on [M]. Need more cards to print.")
src.printing = 0
src.icon_state = text("forensic[]", src.printing)
if (src.printing)
// src.printing = 0
// src.icon_state = text("forensic[]", src.printing)
// if (src.printing)
else
src.amount--
var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc )
F.amount = 1
+1
View File
@@ -79,6 +79,7 @@ AI MODULES
src.transmitInstructions(comp.current, usr)
comp.current << "These are your laws now:"
comp.current.show_laws()
usr << "Upload complete. The AI's laws have been modified."
@@ -43,7 +43,6 @@ CIRCULAR SAW
for(var/datum/disease/alien_embryo in M.viruses)
alien_embryo.cure()
return
return
if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human))
@@ -55,7 +54,7 @@ CIRCULAR SAW
M << "\red [user] begins to retract the flap in your abdomen with [src]!"
user << "\red You retract the flap in [M]'s abdomen with [src]!"
M:appendix_op_stage = 3.0
return
return
if (user.zone_sel.selecting == "eyes")
@@ -101,11 +100,11 @@ CIRCULAR SAW
M.take_organ_damage(15)
M:eye_op_stage = 2.0
return
else
// bone surgery doable?
if(!try_bone_surgery(M, user))
return ..()
// bone surgery doable?
if(!try_bone_surgery(M, user))
return ..()
/obj/item/weapon/retractor/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
if(!istype(H))
@@ -194,6 +193,7 @@ CIRCULAR SAW
M << "\red [user] begins to clamp bleeders in your abdomen with [src]!"
user << "\red You clamp bleeders in [M]'s abdomen with [src]!"
M:appendix_op_stage = 2.0
return
if(4.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
@@ -207,7 +207,7 @@ CIRCULAR SAW
return
new /obj/item/weapon/reagent_containers/food/snacks/appendix(get_turf(M))
M:appendix_op_stage = 5.0
return
return
if (user.zone_sel.selecting == "eyes")
@@ -252,7 +252,8 @@ CIRCULAR SAW
else
M.take_organ_damage(15)
M:eye_op_stage = 3.0
else if(user.zone_sel.selecting == "head")
return
if(user.zone_sel.selecting == "head")
if(istype(M, /mob/living/carbon/human) && M:brain_op_stage == 1)
M:brain_op_stage = 0
var/datum/organ/external/S = M:organs["head"]
@@ -264,10 +265,9 @@ CIRCULAR SAW
return ..()
else
return ..()
else
// bone surgery doable?
if(!try_bone_surgery(M, user))
return ..()
// bone surgery doable?
if(!try_bone_surgery(M, user))
return ..()
/obj/item/weapon/hemostat/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
@@ -357,7 +357,7 @@ CIRCULAR SAW
/obj/item/weapon/autopsy_scanner/verb/print_data()
set src in view(usr, 1)
if(usr.stat == 2)
if(usr.stat)
src << "No."
return
@@ -411,7 +411,7 @@ CIRCULAR SAW
n++
for(var/mob/O in viewers(usr))
O.show_message("\red The [src] rattles and prints out a sheet of paper.", 1)
O.show_message("\red \the [src] rattles and prints out a sheet of paper.", 1)
sleep(10)
@@ -441,7 +441,7 @@ CIRCULAR SAW
usr << "<b>You have to cut the limb open first!</b>"
return
for(var/mob/O in viewers(M))
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.display_name] with the [src.name]", 1)
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.display_name] with \the [src.name]", 1)
src.add_data(S)
@@ -469,8 +469,6 @@ CIRCULAR SAW
user << "\red You cauterize the incision in [M]'s torso with [src]!"
M:embryo_op_stage = 0.0
return
else
try_bone_surgery(M, user)
if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human))
@@ -485,9 +483,7 @@ CIRCULAR SAW
for(var/datum/disease/appendicitis in M.viruses)
appendicitis.cure()
M.resistances += appendicitis
else
try_bone_surgery(M, user)
return
return
if (user.zone_sel.selecting == "eyes")
@@ -533,12 +529,10 @@ CIRCULAR SAW
M.take_organ_damage(15)
M.disabilities &= ~128
M:eye_op_stage = 0.0
return
else
// bone surgery doable?
try_bone_surgery(M, user)
// if(!try_bone_surgery(M, user))
// return ..()
if(!try_bone_surgery(M, user))
return ..()
/obj/item/weapon/cautery/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
if(!istype(H))
@@ -562,7 +556,7 @@ CIRCULAR SAW
"\red [user] begins to cauterize the incision in \his [S.display_name] with [src]!", \
"\red You begin to cauterize the incision in your [S.display_name] with [src]!")
if(do_mob(user, H, 100))
if(do_mob(user, H, rand(70,100)))
if(H != user)
H.visible_message( \
"\red [user] cauterizes the incision in [H]'s [S.display_name] with [src]!", \
@@ -763,9 +757,9 @@ CIRCULAR SAW
M:brain_op_stage = 3.0
else
..()
return
return
else if(user.zone_sel.selecting == "eyes")
if(user.zone_sel.selecting == "eyes")
user << "\blue So far so good."
var/mob/living/carbon/human/H = M
@@ -812,10 +806,9 @@ CIRCULAR SAW
M.updatehealth()
M:eye_op_stage = 1.0
user << "\blue So far so good after."
else
// bone surgery doable?
if(!try_bone_surgery(M, user))
return ..()
return
if(!try_bone_surgery(M, user))
return ..()
/* wat
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
+2
View File
@@ -0,0 +1,2 @@
directory: player
content: Anything relating to out-of-character, player related features, including saves, announcements and so on.
+232
View File
@@ -0,0 +1,232 @@
// a single news datum
datum/news/var
ID // the ID of the news
title // the title of the news
body // a body with an exact explanation
author // key of the author
date // date on which this was created
datum/news_topic_handler
Topic(href,href_list)
var/client/C = locate(href_list["client"])
if(href_list["action"] == "show_all_news")
C.display_all_news_list()
else if(href_list["action"] == "remove")
C.remove_news(text2num(href_list["ID"]))
else if(href_list["action"] == "edit")
C.edit_news(text2num(href_list["ID"]))
else if(href_list["action"] == "show_news")
C.display_news_list()
else if(href_list["action"] == "add_news")
C.add_news()
var/datum/news_topic_handler/news_topic_handler
world/New()
..()
news_topic_handler = new
proc/savefile_path(mob/user)
return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/preferences.sav"
// add a new news datums
proc/make_news(title, body, author)
var/savefile/News = new("data/news.sav")
var/list/news
var/lastID
News["news"] >> news
News["lastID"] >> lastID
if(!news) news = list()
if(!lastID) lastID = 0
var/datum/news/created = new()
created.ID = ++lastID
created.title = title
created.body = body
created.author = author
created.date = world.realtime
news.Insert(1, created)
News["news"] << news
News["lastID"] << lastID
// load the news from disk
proc/load_news()
var/savefile/News = new("data/news.sav")
var/list/news
News["news"] >> news
if(!news) news = list()
return news
// save the news to disk
proc/save_news(var/list/news)
var/savefile/News = new("data/news.sav")
News << news
// check if there are any news in the player's "inbox"
client/proc/has_news()
var/list/news = load_news()
// load the list of news already read by this player
var/path = savefile_path(src.mob)
if(!fexists(path))
return
var/savefile/F = new(path)
var/list/read_news = list()
F["read_news"] >> read_news
for(var/datum/news/N in news)
if(N.ID in read_news)
continue
else return 1
return 0
// display only the news that haven't been read yet
client/proc/display_news_list()
var/list/news = load_news()
var/output = ""
if(has_news())
// load the list of news already read by this player
var/path = savefile_path(src.mob)
if(!fexists(path))
return
var/savefile/F = new(path)
var/list/read_news
F["read_news"] >> read_news
if(!read_news) read_news = list()
for(var/datum/news/N in news)
if(N.ID in read_news)
continue
read_news += N.ID
output += "<b>[N.title]</b><br>"
output += "[N.body]<br>"
output += "<small>authored by <i>[N.author]</i></small><br>"
output += "<br>"
F["read_news"] << read_news
else
output += "<b>Nothing new!</b><br><br>"
output += "<a href='?src=\ref[news_topic_handler];client=\ref[src];action=show_all_news'>Display All</a><br>"
if(src.holder)
output += "<a href='?src=\ref[news_topic_handler];client=\ref[src];action=add_news'>Add</a> <a href=http://baystation12.net/forums/index.php/topic,3680.0.html>Guidelines</a><br>"
usr << browse(output, "window=news;size=600x400")
// display all news, even the ones read already
client/proc/display_all_news_list()
var/list/news = load_news()
var/admin = (src.holder)
// load the list of news already read by this player
var/path = savefile_path(src.mob)
if(!fexists(path))
return
var/savefile/F = new(path)
var/list/read_news
F["read_news"] >> read_news
if(!read_news) read_news = list()
var/output = ""
for(var/datum/news/N in news)
if(!(N.ID in read_news))
read_news += N.ID
var/date = time2text(N.date,"MM/DD")
output += "[date] <b>[N.title]</b><br>"
output += "[N.body]<br>"
output += "<small>authored by <i>[N.author]</i></small>"
if(admin && N.author == src.key)
output += " <a href='?src=\ref[news_topic_handler];client=\ref[src];action=remove;ID=[N.ID]'>Delete</a> <a href='?src=\ref[news_topic_handler];client=\ref[src];action=edit;ID=[N.ID]'>Edit</a>"
output += "<br>"
output += "<br>"
F["read_news"] << read_news
if(admin)
output += "<a href='?src=\ref[news_topic_handler];client=\ref[src];action=add_news'>Add</a> <a href=http://baystation12.net/forums/index.php/topic,3680.0.html>Guidelines</a><br>"
usr << browse(output, "window=news;size=600x400")
client/proc/add_news()
if(!src.holder)
src << "<b>You tried to modify the news, but you're not an admin!"
return
var/title = input(src.mob, "Select a title for the news", "Title") as null|text
if(!title) return
var/body = input(src.mob, "Enter a body for the news", "Body") as null|message
if(!body) return
make_news(title, body, key)
spawn(1)
display_all_news_list()
client/verb/read_news()
set name = "Read News"
set category = "OOC"
set desc = "Read important news and updates"
display_all_news_list()
client/proc/remove_news(ID as num)
if(src.holder)
src << "<b>You tried to modify the news, but you're not an admin!"
return
var/savefile/News = new("data/news.sav")
var/list/news
News["news"] >> news
for(var/datum/news/N in news)
if(N.ID == ID)
news.Remove(N)
News["news"] << news
spawn(1)
display_all_news_list()
client/proc/edit_news(ID as num)
if(src.holder)
src << "<b>You tried to modify the news, but you're not an admin!"
return
var/savefile/News = new("data/news.sav")
var/list/news
News["news"] >> news
var/datum/news/found
for(var/datum/news/N in news)
if(N.ID == ID)
found = N
if(!found) src << "<b>* An error occured, sorry.</b>"
var/title = input(src.mob, "Select a title for the news", "Title") as null|text
if(!title) return
var/body = input(src.mob, "Enter a body for the news", "Body") as null|message
if(!body) return
found.title = title
found.body = body
News["news"] << news
spawn(1)
display_all_news_list()
+7 -7
View File
@@ -1207,13 +1207,6 @@ turf/simulated/floor/return_siding_icon_state()
if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels
return
if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear)))
if(istype(A, /mob/living))
var/mob/living/MM = A
if(MM.client)
MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is."
return
// else if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox") Sandbox_Spacemove(A)
else
@@ -1222,6 +1215,13 @@ turf/simulated/floor/return_siding_icon_state()
del(A)
return
if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear)))
if(istype(A, /mob/living))
var/mob/living/MM = A
if(MM.client)
MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is."
return
var/move_to_z_str = pickweight(accessable_z_levels)
var/move_to_z = text2num(move_to_z_str)
+4 -1
View File
@@ -92,13 +92,16 @@ obj/machinery/computer/forensic_scanning
scan_data = ""
scan_name = ""
scan_process = 0
booked = 0
req_access = list(access_forensics_lockers)
New()
..()
new /obj/item/weapon/book/manual/detective(get_turf(src))
if(!booked)
new /obj/item/weapon/book/manual/detective(get_turf(src))
booked = 1
return
-1
View File
@@ -17,7 +17,6 @@
/obj/item/weapon/evidencebag/afterattack(obj/item/O, mob/user as mob)
if(istype(O, /obj/item/weapon/storage) && O in user)
user << "You put the evidence bag into the [O]."
return ..()
if(!(O && istype(O)) || O.anchored == 1)
user << "You can't put that inside the [src]!"
+12 -1
View File
@@ -1747,7 +1747,18 @@
J.spawn_positions = -1
message_admins("[key_name_admin(usr)] has removed the cap on security officers.")
return
//hahaha
if (href_list["rnd_max"])
for(var/obj/machinery/computer/rdconsole/C in world)
for(var/datum/tech/T in C.files.known_tech)
T.level = 6
C.files.RefreshResearch()
for(var/obj/machinery/r_n_d/server/C in world)
for(var/datum/tech/T in C.files.known_tech)
T.level = 6
C.files.RefreshResearch()
owner:rnd_check_designs()
///////////////////////////////////////////////////////////////////////////////////////////////Panels
+2
View File
@@ -141,6 +141,7 @@
verbs += /client/proc/callprocobj
verbs += /client/proc/cmd_debug_prints
verbs += /client/proc/cmd_debug_blood
verbs += /client/proc/rnd_check_designs
if (holder.level >= 5)//Game Admin********************************************************************
verbs += /obj/admins/proc/view_txt_log
@@ -422,6 +423,7 @@
verbs -= /client/proc/radioalert
verbs -= /client/proc/cmd_debug_prints
verbs -= /client/proc/cmd_debug_blood
verbs -= /client/proc/rnd_check_designs
return
+27
View File
@@ -862,4 +862,31 @@ Traitors and the like can also be revived with the previous role mostly intact.
ticker.random_players = 1
/client/proc/rnd_check_designs()
set category = "Debug"
set name = "Check RnD Designs"
set desc = "Check validity of RnD data of the consoles and server."
if (!holder)
src << "Only administrators may use this command."
return
var/dat = "<head><title>RnD Check</title></head>"
for(var/obj/machinery/computer/rdconsole/C in world)
dat += "<b>[C.name] - RnD Console</b><br>"
for(var/datum/design/D in C.files.known_designs)
if(!text2path(D.build_path))
dat += "[D.name]'s has invalid build path [D.build_path]<br>"
dat += "<br>"
for(var/obj/machinery/r_n_d/server/C in world)
dat += "<b>[C.name] - Server</b><br>"
for(var/datum/design/D in C.files.known_designs)
if(!text2path(D.build_path))
dat += "[D.name]'s has invalid build path [D.build_path]<br>"
dat += "<br>"
dat += "<hr><a href='?src=\ref[holder];rnd_max=1'>Max out tech levels.</a>"
usr << browse(dat, "window=chk_design")
+2 -2
View File
@@ -154,7 +154,7 @@
/obj/machinery/chem_dispenser/process()
if(stat & NOPOWER) return
if(!charging_reagents) return
if(!charging_reagents || src.energy > 30) return
use_power(10000)
src.energy += 0.05
@@ -331,7 +331,7 @@
else if(href_list["pill_sprite"])
pillsprite = href_list["pill_sprite"]
else if(href_list["bottle_sprite"])
bottlesprite = href_list["bottlesprite"]
bottlesprite = href_list["bottle_sprite"]
else
usr << browse(null, "window=chem_master")
src.updateUsrDialog()
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
icon_state = "rig-engineering"
item_state = "rig_helm"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 60)
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20)
allowed = list(/obj/item/device/flashlight)
/obj/item/clothing/head/helmet/space/rig/mining
+1 -1
View File
@@ -4,7 +4,7 @@
desc = "A hood that protects the head and face from biological comtaminants."
permeability_coefficient = 0.01
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 10)
/obj/item/clothing/suit/bio_suit
name = "bio suit"
+1 -1
View File
@@ -34,7 +34,7 @@
icon_state = "rad"
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 20)
/obj/item/clothing/suit/radiation
name = "Radiation suit"
@@ -42,6 +42,14 @@
else
usr << "\blue [src.name] has a \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face."
if (src.head)
usr << "\blue [src.name] is wearing a[src.head.blood_DNA.len ? " bloody " : " "] \icon[src.head] [src.head.name] on [t_his] head!"
if (src.glasses)
usr << "\blue [src.name] is wearing a pair of [src.glasses.blood_DNA.len ? " bloody " : " "] \icon[src.glasses] [src.glasses.name]!"
if (src.l_hand)
if (src.l_hand.blood_DNA.len)
usr << "\red [src.name] has a[src.l_hand.blood_DNA.len ? " bloody " : " "] \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand!"
+58 -1
View File
@@ -1419,6 +1419,7 @@
/obj/effect/equip_e/human/process()
if (item)
item.add_fingerprint(source)
var/item_loc = 0
if (!item)
switch(place)
if("mask")
@@ -1481,9 +1482,65 @@
//SN src = null
del(src)
return
else
switch(place)
if("mask")
if(target.wear_mask)
item_loc = 1
if("l_hand")
if(target.l_hand)
item_loc = 1
if("r_hand")
if(target.r_hand)
item_loc = 1
if("gloves")
if(target.gloves)
item_loc = 1
if("eyes")
if(target.glasses)
item_loc = 1
if("l_ear")
if(target.l_ear)
item_loc = 1
if("r_ear")
if(target.r_ear)
item_loc = 1
if("head")
if(target.head)
item_loc = 1
if("shoes")
if(target.shoes)
item_loc = 1
if("belt")
if(target.belt)
item_loc = 1
if("suit")
if(target.wear_suit)
item_loc = 1
if("back")
if(target.back)
item_loc = 1
if("uniform")
if(target.w_uniform)
item_loc = 1
if("s_store")
if(target.s_store)
item_loc = 1
if("h_store")
if(target.h_store)
item_loc = 1
if("id")
if(target.wear_id)
item_loc = 1
if("internal")
if (target.internal)
item_loc = 1
if("handcuff")
if (target.handcuffed)
item_loc = 1
var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel")
if ((item && !( L.Find(place) )))
if (item && !L.Find(place) && !item_loc)
if(isrobot(source) && place != "handcuff")
del(src)
return
+46 -35
View File
@@ -13,6 +13,7 @@
isbreathing = 1
holdbreath = 0
lyingcheck = 0
buckle_check = 0
/mob/living/carbon/human/Life()
set invisibility = 0
@@ -24,6 +25,22 @@
if(!loc) // Fixing a null error that occurs when the mob isn't found in the world -- TLE
return
//Being buckled to a chair or bed
check_if_buckled()
// Update clothing
// update_clothing()
if((lyingcheck != lying) || (buckle_check != (buckled ? 1 : 0))) //This is a fix for falling down / standing up not updating icons. Instead of going through and changing every
spawn(5)
update_clothing() //instance in the code where lying is modified, I've just added a new variable "lyingcheck" which will be compared
lyingcheck = lying //to lying, so if lying ever changes, update_clothing() will run like normal.
if(stat == 2)
if((!lying || !lyingcheck) && !buckled)
lying = 1
update_clothing()
return
life_tick++
var/datum/gas_mixture/environment = loc.return_air()
@@ -85,18 +102,9 @@
// Some mobs heal slowly, others die slowly
handle_health_updates()
// Update clothing
// update_clothing()
if(lyingcheck != lying) //This is a fix for falling down / standing up not updating icons. Instead of going through and changing every
update_clothing() //instance in the code where lying is modified, I've just added a new variable "lyingcheck" which will be compared
lyingcheck = lying //to lying, so if lying ever changes, update_clothing() will run like normal.
if(client)
handle_regular_hud_updates()
//Being buckled to a chair or bed
check_if_buckled()
// Yup.
update_canmove()
@@ -317,6 +325,15 @@
//As close as I could find to where to put it
grav_delay = max(grav_delay-3,0)
/** Overview of breathing code:
- first it's determined whether the human is capable of breathing
- then it's determined whether the human is holding his breath intentionally
- the isbreathing variable is set according to this
- next, we look for any air that the mob could breathe, first internals, then in the air around him
- if the human isn't breathing, it counts as vacuum
- then we check if the air we found is breathable, if not, we inflict oxygen damage
**/
breathe()
if(reagents.has_reagent("lexorin")) return
@@ -324,25 +341,15 @@
var/datum/gas_mixture/environment = loc.return_air()
var/datum/air_group/breath
// HACK NEED CHANGING LATER
if(health < config.health_threshold_dead)
losebreath++
isbreathing = 0
if(isbreathing && health < config.health_threshold_crit)
spawn emote("stopbreath")
isbreathing = 0
if(holdbreath)
isbreathing = 0
if(losebreath > 0)
// inaprovaline prevents the need to breathe for a while
if(reagents.has_reagent("inaprovaline"))
losebreath = 0
else
losebreath--
// we're running out of air, gasp for it!
if (prob(25)) //High chance of gasping for air
spawn emote("gasp")
isbreathing = 0
else if(health >= 0 && !isbreathing)
else if(health >= config.health_threshold_crit && !isbreathing)
if(holdbreath)
// we're simply holding our breath, see if we can hold it longer
if(health < 30)
@@ -434,6 +441,8 @@
oxygen_alert = max(oxygen_alert, 1)
if(isbreathing && prob(20)) spawn(0) emote("gasp")
return 0
var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa
@@ -454,7 +463,7 @@
//var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value
if(O2_pp < safe_oxygen_min) // Too little oxygen
if(prob(20))
if(prob(20) && isbreathing)
spawn(0) emote("gasp")
if(O2_pp > 0)
var/ratio = safe_oxygen_min/O2_pp
@@ -485,7 +494,7 @@
oxyloss += 3 // Lets hurt em a little, let them know we mean business
if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
oxyloss += 8
if(prob(20)) // Lets give them some chance to know somethings not right though I guess.
if(prob(20) && isbreathing) // Lets give them some chance to know somethings not right though I guess.
spawn(0) emote("cough")
else
@@ -506,7 +515,7 @@
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
sleeping = max(sleeping, 2)
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
if(prob(20))
if(prob(20) && isbreathing)
spawn(0) emote(pick("giggle", "laugh"))
SA.moles = 0 //Hack to stop the damned surgeon from giggling.
@@ -830,9 +839,6 @@
else if(health < config.health_threshold_crit)
if(health <= 20 && prob(1)) spawn(0) emote("gasp")
//if(!rejuv) oxyloss++
if(!reagents.has_reagent("inaprovaline")) oxyloss++
if(stat != 2) stat = 1
Paralyse(5)
@@ -1190,13 +1196,18 @@
check_if_buckled()
if (buckled)
lying = istype(buckled, /obj/structure/stool/bed) || istype(buckled, /obj/machinery/conveyor)
if(lying)
if(buckle_check != (buckled ? 1 : 0))
buckle_check = (buckled ? 1 : 0)
if (buckled)
lying = istype(buckled, /obj/structure/stool/bed) || istype(buckled, /obj/machinery/conveyor)
if(lying)
drop_item()
density = 1
else
density = !lying
if(buckle_check)
if(istype(buckled, /obj/structure/stool/bed) || istype(buckled, /obj/machinery/conveyor))
drop_item()
density = 1
else
density = !lying
handle_stomach()
spawn(0)
+1 -1
View File
@@ -48,7 +48,7 @@
if(PARALYZE)
Paralyse(effect/(blocked+1))
if(IRRADIATE)
radiation += min((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor
radiation += max((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor
if(STUTTER)
stuttering = max(stuttering,(effect/(blocked+1)))
if(SLUR)
+18
View File
@@ -20,33 +20,51 @@
if (!src.laws)
src.laws = new /datum/ai_laws/nanotrasen
/mob/living/silicon/ai/proc/notify_linked_cyborgs()
for (var/mob/living/silicon/robot/A in world)
if(A.stat == 2)
continue
if(!islinked(A, src))
continue
A << "These are your laws now:"
A.show_laws()
/mob/living/silicon/ai/proc/set_zeroth_law(var/law)
src.laws_sanity_check()
src.laws.set_zeroth_law(law)
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/add_inherent_law(var/law)
src.laws_sanity_check()
src.laws.add_inherent_law(law)
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/clear_inherent_laws()
src.laws_sanity_check()
src.laws.clear_inherent_laws()
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/add_ion_law(var/law)
src.laws_sanity_check()
src.laws.add_ion_law(law)
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/clear_ion_laws()
src.laws_sanity_check()
src.laws.clear_ion_laws()
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/add_supplied_law(var/number, var/law)
src.laws_sanity_check()
src.laws.add_supplied_law(number, law)
src.notify_linked_cyborgs()
/mob/living/silicon/ai/proc/clear_supplied_laws()
src.laws_sanity_check()
src.laws.clear_supplied_laws()
src.notify_linked_cyborgs()
@@ -48,6 +48,9 @@
if(preferences.pregame_music)
spawn() Playmusic() // git some tunes up in heeyaa~
if(client.has_news())
src << "<b><font color=blue>There are some unread <a href='?src=\ref[news_topic_handler];client=\ref[client];action=show_news'>news</a> for you! Please make sure to read all news, as they may contain important updates about roleplay rules or canon.</font></b>"
new_player_panel()
//PDA Resource Initialisation =======================================================>
/*
+16 -4
View File
@@ -216,8 +216,9 @@ var/global/list/uneatable = list(
step_towards(X,src)
else if(istype(X,/mob/living/carbon/human))
var/mob/living/carbon/human/H = X
H << "\red The singularity has you in it's gravitational pull! It's hard to break free!"
H.grav_delay = 20 //No running this time!
if(prob(25))
H << "\red The singularity has you in it's gravitational pull! It's hard to break free!"
H.grav_delay = 15 //No running this time!
if(istype(H.shoes,/obj/item/clothing/shoes/magboots) && !(src.current_size >= 9))
var/obj/item/clothing/shoes/magboots/M = H.shoes
if(M.magpulse)
@@ -405,8 +406,8 @@ var/global/list/uneatable = list(
for(var/mob/living/M in view(toxrange, src.loc))
if(istype(M,/mob/living/))
M.apply_effect(rand(radiation), IRRADIATE)
toxdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
M.apply_effect(toxdamage, TOX)
var/tdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
M.apply_effect(tdamage, TOX)
return
@@ -432,6 +433,17 @@ var/global/list/uneatable = list(
for(var/obj/machinery/power/rad_collector/R in orange(15,src))
if(istype(R,/obj/machinery/power/rad_collector))
R.receive_pulse(energy)
// when we radiate rad collectors, naturally we radiate everything else, too
if(prob(10))
var/toxrange = 20
var/radiation = 20
if (src.energy>200)
radiation = round(((src.energy-150)/50)*20,1)
for(var/mob/living/M in view(toxrange, src.loc))
if(istype(M,/mob/living/))
var/damage = radiation / (get_dist(M, src) + 5)
M.apply_effect(rand(damage), IRRADIATE)
return
+1 -2
View File
@@ -221,8 +221,7 @@
/obj/item/proc/wrap(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/packageWrap))
var/obj/item/weapon/packageWrap/C = I
if(!istype(src.loc,/turf))
user << "\red You need to place the item on the ground or a table before wrapping it!"
if(anchored)
return
else if (C.amount > 1)
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(src.loc))
+10 -3
View File
@@ -330,6 +330,7 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/supplycomp"
/* is not a thing
mining
name = "Circuit Design (Outpost Status Display)"
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
@@ -338,6 +339,7 @@ datum
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/mining"
*/
firealarm
name = "Circuit Design (Fire Alarm)"
@@ -533,30 +535,34 @@ datum
req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/receiver"
telecomms_bus
name = "Circuit Design (Bus Mainframe)"
name = "Circuit Design (Telecom Bus Mainframe)"
desc = "Allows for the construction of Telecommunications Bus Mainframes."
id = "s-bus"
req_tech = list("programming" = 4, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/bus"
telecomms_processor
name = "Circuit Design (Processor Unit)"
name = "Circuit Design (Telecom Processor Unit)"
desc = "Allows for the construction of Telecommunications Processor equipment."
id = "s-processor"
req_tech = list("programming" = 4, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/processor"
telecomms_server
name = "Circuit Design (Subspace Receiver)"
name = "Circuit Design (Telecom Server)"
desc = "Allows for the construction of Telecommunications Servers."
id = "s-server"
req_tech = list("programming" = 4, "engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/server"
subspace_broadcaster
name = "Circuit Design (Subspace Broadcaster)"
@@ -565,6 +571,7 @@ datum
req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/telecomms/broadcaster"
///////////////////////////////////
Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 63 KiB

+2826 -2220
View File
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -505,8 +505,8 @@
"ajK" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig)
"ajL" = (/obj/structure/stool/bed,/obj/machinery/camera{c_tag = "Secure Cell 1"; dir = 4; name = "Security Camera"; network = "Security"},/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"ajM" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"ajN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"ajO" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig)
"ajN" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"ajO" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig)
"ajP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = -1},/turf/simulated/floor,/area/security/brig)
"ajQ" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor,/area/security/brig)
"ajR" = (/obj/structure/table,/obj/item/device/radio,/turf/simulated/floor,/area/security/brig)
@@ -523,7 +523,7 @@
"akc" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport)
"akd" = (/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/auxport)
"ake" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig)
"akf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "SC1"; name = "Secure Cell 1 Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass/glass_security{name = "Secure Holding Cell 1"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig)
"akf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "SC1"; name = "Secure Cell 1 Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass/glass_security{name = "Secure Holding Cell 1"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig)
"akg" = (/obj/structure/table,/obj/item/device/flash,/turf/simulated/floor,/area/security/brig)
"akh" = (/obj/structure/table,/obj/item/weapon/crowbar,/turf/simulated/floor,/area/security/brig)
"aki" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
@@ -3609,7 +3609,7 @@
"bru" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AftH"; location = "AIW"},/obj/machinery/door/firedoor/border_only{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft)
"brv" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=HOP"; location = "AIE"},/turf/simulated/floor,/area/hallway/primary/aft)
"brw" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/hallway/primary/aft)
"brx" = (/obj/machinery/door/airlock/maintenance{name = "Kitchen Maintenance"; req_access_txt = "28"},/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = list("Courtroom")},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
"brx" = (/obj/machinery/door/airlock/maintenance{name = "Kitchen Maintenance"; req_access_txt = "28"},/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j1s"; sortType = list("Courtroom")},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
"bry" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 1; icon_state = "right"; name = "Kitchen Delivery"; req_access_txt = "28"},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/kitchen)
"brz" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen)
"brA" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/cafeteria)
@@ -4978,7 +4978,7 @@
"bRL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Assembly Line Maintenance"; req_access_txt = "12;29"},/turf/simulated/floor/plating,/area/assembly/assembly_line)
"bRM" = (/obj/structure/table,/obj/structure/disposalpipe/segment,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/turf/simulated/floor,/area/assembly/assembly_line)
"bRN" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor,/area/assembly/assembly_line)
"bRO" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/turf/simulated/floor,/area/assembly/assembly_line)
"bRO" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/weapon/reagent_containers/glass/beaker/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/tricordrazine,/turf/simulated/floor,/area/assembly/assembly_line)
"bRP" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_y = 5},/turf/simulated/floor,/area/assembly/assembly_line)
"bRQ" = (/obj/machinery/computer/rdconsole{id = 2; name = "Robotics R&D Console"; req_access = null; req_access_txt = "29"},/turf/simulated/floor,/area/assembly/assembly_line)
"bRR" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/assembly/assembly_line)