Merge branch 'master' into final_shuttle_touches_and_stuff
# Conflicts: # code/modules/power/breaker_box.dm
@@ -39,6 +39,7 @@
|
||||
|
||||
// Species languages
|
||||
#define LANGUAGE_SOL_COMMON "Sol Common"
|
||||
#define LANGUAGE_ELYRAN_STANDARD "Elyran Standard"
|
||||
#define LANGUAGE_UNATHI "Sinta'unathi"
|
||||
#define LANGUAGE_SIIK_MAAS "Siik'maas"
|
||||
#define LANGUAGE_SIIK_TAJR "Siik'tajr"
|
||||
|
||||
@@ -119,8 +119,8 @@
|
||||
var/datum/faction/F = faction
|
||||
if(!F.is_default)
|
||||
var/new_outfit = F.titles_to_loadout[title]
|
||||
var/datum/outfit/O = new new_outfit
|
||||
if(O)
|
||||
if(ispath(new_outfit))
|
||||
var/datum/outfit/O = new new_outfit
|
||||
O.pre_equip(H, TRUE)
|
||||
O.equip(H, TRUE)
|
||||
return
|
||||
|
||||
@@ -17,21 +17,21 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/cell_charger/update_icon()
|
||||
icon_state = "ccharger[charging ? 1 : 0]"
|
||||
|
||||
if(charging && !(stat & (BROKEN|NOPOWER)) )
|
||||
|
||||
var/newlevel = round(charging.percent() * 4.0 / 99)
|
||||
|
||||
if(chargelevel != newlevel)
|
||||
|
||||
cut_overlays()
|
||||
add_overlay("ccharger-o[newlevel]")
|
||||
|
||||
chargelevel = newlevel
|
||||
add_overlay("ccharger-on")
|
||||
else
|
||||
cut_overlays()
|
||||
|
||||
if(!charging)
|
||||
return
|
||||
|
||||
/obj/machinery/cell_charger/examine(mob/user)
|
||||
if(!..(user, 5))
|
||||
return
|
||||
|
||||
@@ -416,6 +416,12 @@
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/lockbox/vials/forensic
|
||||
icon_state = "vialbox6"
|
||||
locked = FALSE
|
||||
starts_with = list(/obj/item/reagent_containers/glass/beaker/vial = 6)
|
||||
req_access = list(access_forensics_lockers)
|
||||
|
||||
/obj/item/storage/box/fancy/chocolate_box
|
||||
name = "chocolate box"
|
||||
desc = "A lot like life, you never know what you're going to get."
|
||||
|
||||
@@ -303,7 +303,9 @@
|
||||
/obj/item/surgery/scalpel = 1,
|
||||
/obj/item/surgery/surgicaldrill = 1,
|
||||
/obj/item/autopsy_scanner = 1,
|
||||
/obj/item/device/mass_spectrometer = 1
|
||||
/obj/item/device/mass_spectrometer = 1,
|
||||
/obj/item/reagent_containers/glass/beaker/vial = 1,
|
||||
/obj/item/reagent_containers/syringe = 1
|
||||
)
|
||||
|
||||
can_hold = list(
|
||||
|
||||
@@ -106,6 +106,7 @@
|
||||
// Other station species' languages
|
||||
bst.add_language(LANGUAGE_SKRELLIAN)
|
||||
bst.add_language(LANGUAGE_SOL_COMMON)
|
||||
bst.add_language(LANGUAGE_ELYRAN_STANDARD)
|
||||
bst.add_language(LANGUAGE_ROOTSONG)
|
||||
bst.add_language(LANGUAGE_VAURCA)
|
||||
// Synthetics
|
||||
|
||||
@@ -189,11 +189,10 @@
|
||||
|
||||
/datum/citizenship/dominia
|
||||
name = CITIZENSHIP_DOMINIA
|
||||
description = "A heavily religious absolute monarchy with its capital, Nova Luxembourg, on the planet of Dominia in the X'yr Vharn'p system. This autocratic state is ruled by His \
|
||||
Imperial Majesty Boleslaw Keeser. The Empire of Dominia was proclaimed in 2437 by Unathi raiders who invaded the planet of Moroz, a colony which had been isolated for hundreds of \
|
||||
years. Imperial society is dominated by the Great and Minor Houses under the Emperor and is very socio-economically stratified due to the so-called blood debt, \
|
||||
known as the Mor'iz'al. All citizens are born with the Mor'iz'al debt in exchange for the privileges of citizenship, a debt that takes a lifetime or more to pay off. \
|
||||
Indebted citizens are known as Ma'zals, forming the massive underclass in Dominia. Many in the Empire follow a strict code of honor."
|
||||
description = "A heavily religious absolute monarchy with its capital, Nova Luxembourg, on the planet of Moroz in the Mira Sancta system. This autocratic state is ruled by \
|
||||
His Imperial Majesty Boleslaw Keeser. The Empire of Dominia was proclaimed in 2385 by then-Emperor Godwin Keeser, unifying a colony which had been isolated for hundreds of years. \
|
||||
Imperial society is dominated by the Great and Minor Houses under the Emperor and is very socio-economically stratified due to the so-called blood debt, known as the Mor’iz’al."
|
||||
|
||||
consular_outfit = /datum/outfit/job/representative/consular/dominia
|
||||
|
||||
job_species_blacklist = list(
|
||||
|
||||
@@ -36,12 +36,14 @@
|
||||
|
||||
/datum/religion/moroz
|
||||
name = RELIGION_MOROZ
|
||||
description = "A rapidly expanding religion that borrows from largly from the Sk'akh religion founded by former High Lord Precentor, Tribune Lien Jakaab and former Sk'akh Priest, \
|
||||
Tribune Kasam Kaelesi. Worship revolves around a gender neutral supreme being known commonly as \"Goddess\" in all languages. As a gender neutral God the being is often \
|
||||
called 'he' or 'she' interchangeably to represent that she/he is a collection of all the faithful. The elites of the religion are made up of the Tribunal who commune directly with \
|
||||
the \"Goddess\". From their communions, the Tribunal create edicts to be followed by the faithful. Disobeying an edict can be met with the death penalty in the worse case, typically \
|
||||
by firing squad or ritual suicide. Like Sk'akh, the Goddess can be either male or female and is often called Three of One because the spirits combine into three minor aspects within \
|
||||
the Goddess: the Soldier, the Scholar, the Artisan. These three spirits are personifications of the most important aspects of Dominia society."
|
||||
description = "The state religion of the Empire of Dominia, the Moroz Holy Tribunal is an eclectic mixture of old Earth faiths and the adaptations given to those faiths by the \
|
||||
colonists of Moroz. More conservative members of the faith are known to adopt some traits from Sk'akh, a recently arrived faith in the Empire. Worship revolves around a \
|
||||
female supreme being known commonly as 'Goddess' in all languages. The elites of the religion are made up of the Tribunal members that commune directly with the Goddess. \
|
||||
From their communions, the Tribunal create edicts to be followed by the faithful. Disobeying an edict can be met with the death penalty in the worse case, typically \
|
||||
by firing squad or ritual suicide. It is rumored by the faithful that the Tribunal possess psionic powers gifted to them by the Goddess. The Goddess is often called \
|
||||
Three of One due to her three minor aspects: the Soldier, the Scholar, the Artisan. These three spirits are personifications of the most important aspects of Dominia society. \
|
||||
Tribunal priests agree that all three are equally important, and that malign spirits can be attracted by an imbalance in the Great Three. Priests often stress the importance \
|
||||
of balance, both in matters of spirit, in society, and in personal life."
|
||||
book_name = "tribunal codex"
|
||||
|
||||
/datum/religion/trinary
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
var/flash_protection = FLASH_PROTECTION_NONE // Sets the item's level of flash protection.
|
||||
var/tint = TINT_NONE // Sets the item's level of visual impairment tint.
|
||||
var/list/species_restricted = null //Only these species can wear this kit.
|
||||
var/gunshot_residue //Used by forensics.
|
||||
var/list/gunshot_residue //Used by forensics.
|
||||
|
||||
var/list/accessories
|
||||
var/list/valid_accessory_slots
|
||||
@@ -56,7 +56,7 @@
|
||||
// Aurora forensics port.
|
||||
/obj/item/clothing/clean_blood()
|
||||
. = ..()
|
||||
gunshot_residue = null
|
||||
LAZYCLEARLIST(gunshot_residue)
|
||||
|
||||
/obj/item/proc/negates_gravity()
|
||||
return 0
|
||||
|
||||
@@ -5,11 +5,15 @@
|
||||
icon = 'icons/obj/unathi_items.dmi'
|
||||
icon_state = "sinta_hood"
|
||||
item_state = "sinta_hood_up"
|
||||
slot_flags = SLOT_TIE|SLOT_HEAD
|
||||
slot_flags = SLOT_TIE|SLOT_HEAD|SLOT_EARS
|
||||
flags_inv = BLOCKHAIR|BLOCKHEADHAIR
|
||||
contained_sprite = TRUE
|
||||
action_button_name = "Adjust Hood"
|
||||
var/up = TRUE
|
||||
|
||||
/obj/item/clothing/accessory/sinta_hood/get_ear_examine_text(var/mob/user, var/ear_text = "left")
|
||||
return "on [user.get_pronoun("his")] head"
|
||||
|
||||
/obj/item/clothing/accessory/sinta_hood/attack_self()
|
||||
toggle()
|
||||
|
||||
@@ -34,6 +38,9 @@
|
||||
update_worn_icon()
|
||||
update_clothing_icon()
|
||||
update_icon()
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
H.update_hair()
|
||||
|
||||
/obj/item/clothing/accessory/unathi
|
||||
name = "gyazo belt"
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
last_process_worldtime = world.time
|
||||
|
||||
/obj/machinery/dnaforensics/proc/complete_scan()
|
||||
visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] makes an insistent chime.</span>", range = 2)
|
||||
visible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] makes an insistent chime."), range = 2)
|
||||
update_icon()
|
||||
if(bloodsamp)
|
||||
var/obj/item/paper/P = new()
|
||||
@@ -110,13 +110,15 @@
|
||||
//dna data itself
|
||||
var/data = "No scan information available."
|
||||
if(bloodsamp.dna != null)
|
||||
data = "Spectometric analysis on provided sample has determined the presence of [bloodsamp.dna.len] strings of DNA.<br><br>"
|
||||
data = "Spectometric analysis on provided sample has determined the presence of [length(bloodsamp.dna)] string\s of DNA.<br><br>"
|
||||
for(var/blood in bloodsamp.dna)
|
||||
data += "<span class='notice'>Blood type: [bloodsamp.dna[blood]]<br>\nDNA: [blood]<br><br></span>"
|
||||
if(bloodsamp.dna[blood])
|
||||
data += "<b>Blood type:</b> [bloodsamp.dna[blood]]<br>"
|
||||
data += "<b>DNA:</b> [blood]<br><br>"
|
||||
else
|
||||
data += "No DNA found.<br>"
|
||||
info = "<b>[src] analysis report #[report_num]</b><br>"
|
||||
info += "<b>Scanned item:</b><br>[bloodsamp.name]<br>[bloodsamp.desc]<br><br>" + data
|
||||
info = "<b><font size=\"4\">[src] analysis report #[report_num]</font></b><HR>"
|
||||
info += "<b>Scanned item:</b> [bloodsamp.name]<br><br>" + data
|
||||
P.set_content_unsafe(pname, info)
|
||||
print(P)
|
||||
scanning = 0
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
density = 1
|
||||
|
||||
var/obj/item/sample = null
|
||||
var/report_num = 0
|
||||
var/report_fiber_num = 0
|
||||
var/report_print_num = 0
|
||||
var/report_gsr_num = 0
|
||||
|
||||
/obj/machinery/microscope/attackby(obj/item/W as obj, mob/user as mob)
|
||||
|
||||
@@ -43,47 +45,56 @@
|
||||
var/info
|
||||
report.stamped = list(/obj/item/stamp)
|
||||
report.overlays = list("paper_stamped")
|
||||
report_num++
|
||||
|
||||
if(istype(sample, /obj/item/forensics/slide))
|
||||
var/obj/item/forensics/slide/slide = sample
|
||||
if(slide.has_swab)
|
||||
var/obj/item/forensics/swab/swab = slide.has_swab
|
||||
|
||||
pname = "GSR report #[report_num]"
|
||||
info = "<b>Scanned item:</b><br>[swab.name]<br><br>"
|
||||
|
||||
if(swab.gsr)
|
||||
info += "Residue from a [swab.gsr] bullet detected."
|
||||
report_gsr_num++
|
||||
pname = "GSR report #[report_gsr_num]"
|
||||
info = "<b><font size=\"4\">GSR anaylsis report #[report_gsr_num]</font></b><HR>"
|
||||
if(length(swab.gsr))
|
||||
info += "Residue analysis of the [swab.name] has determined the presence of the following residues.<ul>"
|
||||
for(var/gsr in swab.gsr)
|
||||
info += "<li>Residue from a [gsr] bullet detected.</li>"
|
||||
info += "</ul>"
|
||||
else
|
||||
info += "No gunpowder residue found."
|
||||
|
||||
else if(slide.has_sample)
|
||||
var/obj/item/sample/fibers/fibers = slide.has_sample
|
||||
pname = "Fiber report #[report_num]"
|
||||
info = "<b>Scanned item:</b><br>[initial(fibers.name)]<br><br>"
|
||||
report_fiber_num++
|
||||
pname = "Fiber report #[report_fiber_num]"
|
||||
if(fibers.evidence)
|
||||
info = "Molecular analysis on [fibers.name] has determined the presence of unique fiber strings.<br><br>"
|
||||
info = "<b><font size=\"4\">Fiber anaylsis report #[report_fiber_num]</font></b><HR>"
|
||||
info += "<b>Source locations:</b> "
|
||||
info += "[english_list(fibers.source, "no sources were found", ", ", ", ", "")].<br><br>"
|
||||
info += "Molecular analysis on [fibers.name] has determined the presence of unique fiber strings.<ul>"
|
||||
for(var/fiber in fibers.evidence)
|
||||
info += SPAN_NOTICE("Most likely match for fibers: [fiber]<br><br>")
|
||||
info += "<li><b>Most likely match for fibers:</b> [fiber]</li>"
|
||||
info += "</ul>"
|
||||
else
|
||||
info += "No fibers found."
|
||||
else
|
||||
pname = "Empty slide report #[report_num]"
|
||||
pname = "Empty slide report #[report_fiber_num]"
|
||||
info = "Evidence suggests that there's nothing in this slide."
|
||||
else if(istype(sample, /obj/item/sample/print))
|
||||
pname = "Fingerprint report #[report_num]"
|
||||
info = "<b>Fingerprint analysis report #[report_num]</b>: [sample.name]<br>"
|
||||
report_print_num++
|
||||
pname = "Fingerprint report #[report_print_num]"
|
||||
var/obj/item/sample/print/card = sample
|
||||
info = "<b><font size=\"4\">Fingerprint analysis report #[report_print_num]</font></b><HR>"
|
||||
info += "<b>Source locations:</b> "
|
||||
info += "[english_list(card.source, "no sources were found", ", ", ", ", "")].<br><br>"
|
||||
if(card.evidence && card.evidence.len)
|
||||
info += "Surface analysis has determined unique fingerprint strings:<br><br>"
|
||||
info += "Surface analysis has determined unique fingerprint strings:<ul>"
|
||||
for(var/prints in card.evidence)
|
||||
info += SPAN_NOTICE("Fingerprint string: ")
|
||||
info += "<li><b>Fingerprint string: </b>"
|
||||
if(!is_complete_print(prints))
|
||||
info += "INCOMPLETE PRINT"
|
||||
else
|
||||
info += "[prints]"
|
||||
info += "<br>"
|
||||
info += "</li>"
|
||||
info += "</ul>"
|
||||
else
|
||||
info += "No information available."
|
||||
|
||||
|
||||
@@ -102,8 +102,8 @@
|
||||
/obj/item/evidencebag/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(W.ispen() || istype(W, /obj/item/device/flashlight/pen))
|
||||
var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
|
||||
if(length(tmp_label) > 15)
|
||||
to_chat(user, "<span class='notice'>The label can be at most 15 characters long.</span>")
|
||||
if(length(tmp_label) > MAX_NAME_LEN)
|
||||
to_chat(user, SPAN_NOTICE("The label can be at most [MAX_NAME_LEN] characters long."))
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You set the label to \"[tmp_label]\".</span>")
|
||||
label_text = tmp_label
|
||||
|
||||
@@ -2,28 +2,32 @@
|
||||
name = "forensic sample"
|
||||
icon = 'icons/obj/forensics.dmi'
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/list/evidence = list()
|
||||
var/list/evidence
|
||||
var/list/source
|
||||
var/label_text = ""
|
||||
|
||||
/obj/item/sample/New(var/newloc, var/atom/supplied)
|
||||
/obj/item/sample/Initialize(var/newloc, var/atom/supplied)
|
||||
..(newloc)
|
||||
if(supplied)
|
||||
copy_evidence(supplied)
|
||||
name = "[initial(name)] (\the [initial(supplied.name)])"
|
||||
name = "[initial(name)] ([supplied.get_swab_name()])"
|
||||
LAZYADD(source, supplied.get_swab_name())
|
||||
|
||||
/obj/item/sample/print/New(var/newloc, var/atom/supplied)
|
||||
/obj/item/sample/print/Initialize(var/newloc, var/atom/supplied)
|
||||
..(newloc, supplied)
|
||||
if(evidence && evidence.len)
|
||||
if(LAZYLEN(evidence))
|
||||
icon_state = "fingerprint1"
|
||||
|
||||
/obj/item/sample/proc/copy_evidence(var/atom/supplied)
|
||||
if(supplied.suit_fibers && supplied.suit_fibers.len)
|
||||
evidence = supplied.suit_fibers.Copy()
|
||||
LAZYADD(evidence, supplied.suit_fibers.Copy())
|
||||
supplied.suit_fibers.Cut()
|
||||
|
||||
/obj/item/sample/proc/merge_evidence(var/obj/item/sample/supplied, var/mob/user)
|
||||
if(!supplied.evidence || !supplied.evidence.len)
|
||||
return 0
|
||||
evidence |= supplied.evidence
|
||||
LAZYDISTINCTADD(evidence, supplied.evidence)
|
||||
LAZYDISTINCTADD(source, supplied.source)
|
||||
name = "[initial(name)] (combined)"
|
||||
to_chat(user, SPAN_NOTICE("You transfer the contents of \the [initial(supplied.name)] into \the [src]."))
|
||||
return 1
|
||||
@@ -32,10 +36,11 @@
|
||||
if(!supplied.evidence || !supplied.evidence.len)
|
||||
return 0
|
||||
for(var/print in supplied.evidence)
|
||||
if(evidence[print])
|
||||
evidence[print] = stringmerge(evidence[print],supplied.evidence[print])
|
||||
if(LAZYISIN(evidence, print))
|
||||
LAZYSET(evidence, print, stringmerge(evidence[print],supplied.evidence[print]))
|
||||
else
|
||||
evidence[print] = supplied.evidence[print]
|
||||
LAZYSET(evidence, print, supplied.evidence[print])
|
||||
LAZYDISTINCTADD(source, supplied.source)
|
||||
name = "[initial(name)] (combined)"
|
||||
to_chat(user, SPAN_NOTICE("You overlay \the [src] and \the [initial(supplied.name)], combining the print records."))
|
||||
return 1
|
||||
@@ -46,8 +51,38 @@
|
||||
if(merge_evidence(O, user))
|
||||
qdel(O)
|
||||
return 1
|
||||
else if (O.ispen())
|
||||
var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
|
||||
if(length(tmp_label) > MAX_NAME_LEN)
|
||||
to_chat(user, SPAN_WARNING("The label can be at most [MAX_NAME_LEN] characters long."))
|
||||
else
|
||||
to_chat(user, SPAN_NOTICE("You set the label to \"[tmp_label]\"."))
|
||||
label_text = tmp_label
|
||||
update_name_label()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/sample/proc/update_name_label()
|
||||
if(label_text == null)
|
||||
name = initial(name)
|
||||
else
|
||||
name = "[initial(name)] ([label_text])"
|
||||
|
||||
/obj/item/sample/Initialize(var/newloc, var/atom/supplied)
|
||||
..(newloc)
|
||||
if(supplied)
|
||||
copy_evidence(supplied)
|
||||
name = "[initial(name)] ([supplied.get_swab_name()])"
|
||||
LAZYADD(source, supplied.get_swab_name())
|
||||
|
||||
/atom/proc/get_swab_name()
|
||||
return "\the [initial(name)]"
|
||||
|
||||
/obj/machinery/door/get_swab_name()
|
||||
if(name != initial(name))
|
||||
return "\the [initial(name)]: [name]"
|
||||
return ..()
|
||||
|
||||
/obj/item/sample/fibers
|
||||
name = "fiber bag"
|
||||
desc = "Used to hold fiber evidence for the detective."
|
||||
@@ -65,7 +100,7 @@
|
||||
item_state = "paper"
|
||||
|
||||
/obj/item/sample/print/attack_self(var/mob/user)
|
||||
if(evidence && evidence.len)
|
||||
if(LAZYLEN(evidence))
|
||||
return
|
||||
if(!ishuman(user))
|
||||
return
|
||||
@@ -76,7 +111,8 @@
|
||||
|
||||
to_chat(user, SPAN_NOTICE("You firmly press your fingertips onto the card."))
|
||||
var/fullprint = H.get_full_print()
|
||||
evidence[fullprint] = fullprint
|
||||
LAZYSET(evidence, fullprint, fullprint)
|
||||
LAZYADD(source, "[H.name]")
|
||||
name = "[initial(name)] (\the [H])"
|
||||
icon_state = "fingerprint1"
|
||||
|
||||
@@ -85,7 +121,7 @@
|
||||
if(!ishuman(M))
|
||||
return ..()
|
||||
|
||||
if(evidence && evidence.len)
|
||||
if(LAZYLEN(evidence))
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -112,8 +148,9 @@
|
||||
return 1
|
||||
user.visible_message("[user] takes a copy of \the [H]'s fingerprints.")
|
||||
var/fullprint = H.get_full_print()
|
||||
evidence[fullprint] = fullprint
|
||||
LAZYSET(evidence, fullprint, fullprint)
|
||||
copy_evidence(src)
|
||||
LAZYADD(source, "[H.name]")
|
||||
name = "[initial(name)] (\the [H])"
|
||||
icon_state = "fingerprint1"
|
||||
return 1
|
||||
@@ -122,7 +159,7 @@
|
||||
/obj/item/sample/print/copy_evidence(var/atom/supplied)
|
||||
if(supplied.fingerprints && supplied.fingerprints.len)
|
||||
for(var/print in supplied.fingerprints)
|
||||
evidence[print] = supplied.fingerprints[print]
|
||||
LAZYSET(evidence, print, supplied.fingerprints[print])
|
||||
supplied.fingerprints.Cut()
|
||||
|
||||
/obj/item/forensics/sample_kit
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
\n\nGSR samples are put in a slide and examined in a microscope. \
|
||||
\nBlood and DNA samples are checked in the DNA analyzer"
|
||||
icon_state = "swab"
|
||||
var/gsr = 0
|
||||
var/list/gsr
|
||||
var/list/dna
|
||||
var/used
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
@@ -70,17 +70,17 @@
|
||||
return
|
||||
if(H.gloves)
|
||||
var/obj/item/clothing/B = H.gloves
|
||||
if(!B.gunshot_residue)
|
||||
if(!LAZYLEN(B.gunshot_residue))
|
||||
to_chat(user, SPAN_WARNING("There is no residue on [H]'s [B]."))
|
||||
return
|
||||
user.visible_message("[user] swabs [H]'s [B] for a sample.")
|
||||
gsr = B.gunshot_residue
|
||||
LAZYADD(gsr, B.gunshot_residue)
|
||||
else
|
||||
if(!H.gunshot_residue)
|
||||
if(!LAZYLEN(H.gunshot_residue))
|
||||
to_chat(user, SPAN_WARNING("There is no residue on [H]'s palms."))
|
||||
return
|
||||
user.visible_message("[user] swabs [H]'s palm for a sample.")
|
||||
gsr = H.gunshot_residue
|
||||
LAZYADD(gsr, H.gunshot_residue)
|
||||
sample_type = "GSR"
|
||||
else
|
||||
return
|
||||
@@ -134,10 +134,10 @@
|
||||
|
||||
if (EVIDENCE_TYPE_GSR)
|
||||
var/obj/item/clothing/B = A
|
||||
if(!istype(B) || !B.gunshot_residue)
|
||||
if(!istype(B) || !LAZYLEN(B.gunshot_residue))
|
||||
to_chat(user, SPAN_WARNING("There is no residue on \the [A]."))
|
||||
return
|
||||
gsr = B.gunshot_residue
|
||||
LAZYADD(gsr, B.gunshot_residue)
|
||||
sample_type = "residue"
|
||||
|
||||
if (EVIDENCE_TYPE_SALIVA)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
outfit = /datum/outfit/admin/ert/elyran_trooper
|
||||
possible_species = list(SPECIES_HUMAN)
|
||||
|
||||
extra_languages = list(LANGUAGE_SOL_COMMON)
|
||||
extra_languages = list(LANGUAGE_ELYRAN_STANDARD)
|
||||
|
||||
/datum/ghostspawner/human/ert/elyra/leader
|
||||
short_name = "elyra_leadertrooper"
|
||||
|
||||
@@ -358,6 +358,7 @@ h1.alert, h2.alert {color: #a4bad6;}
|
||||
.vaurca {color: #b9b943;}
|
||||
.soghun {color: #2cad2c;}
|
||||
.solcom {color: #5f5fd4;}
|
||||
.elyran {color: #e2bb4e;}
|
||||
.soghun_alt {color: #1d9b1d;}
|
||||
.changeling {color: #ad14ad;}
|
||||
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
|
||||
|
||||
@@ -355,6 +355,7 @@ h1.alert, h2.alert {color: #000080;}
|
||||
.vaurca {color: #9e9e39;}
|
||||
.soghun {color: #228B22;}
|
||||
.solcom {color: #22228B;}
|
||||
.elyran {color: #c79322;}
|
||||
.soghun_alt {color: #024402;}
|
||||
.changeling {color: #800080;}
|
||||
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
|
||||
|
||||
@@ -325,6 +325,7 @@ h1.alert, h2.alert {color: #000080;}
|
||||
.vaurca {color: #9e9e39;}
|
||||
.soghun {color: #228B22;}
|
||||
.solcom {color: #22228B;}
|
||||
.elyran {color: #c79322;}
|
||||
.soghun_alt {color: #024402;}
|
||||
.changeling {color: #800080;}
|
||||
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
|
||||
|
||||
@@ -4313,12 +4313,17 @@ Follow by example and make good judgement based on length which list to include
|
||||
body_parts = list(BP_CHEST)
|
||||
species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi)
|
||||
|
||||
tat_heart
|
||||
name = "Tattoo (Heart, Chest)"
|
||||
icon_state = "tat_heart"
|
||||
body_parts = list(BP_CHEST)
|
||||
tat_heart_arm
|
||||
name = "Tattoo (Heart, Left Arm)"
|
||||
icon_state = "tat_lheart"
|
||||
body_parts = list(BP_L_ARM)
|
||||
species_allowed = list(/datum/species/human, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi)
|
||||
|
||||
right
|
||||
name = "Tattoo (Heart, Right Arm)"
|
||||
icon_state = "tat_rheart"
|
||||
body_parts = list(BP_R_ARM)
|
||||
|
||||
tat_heart_back
|
||||
name = "Tattoo (Heart, Lower Back)"
|
||||
icon_state = "tat_heartback"
|
||||
@@ -4560,6 +4565,7 @@ Follow by example and make good judgement based on length which list to include
|
||||
|
||||
skr_tears
|
||||
name = "Tear Stains"
|
||||
icon = 'icons/mob/human_races/markings_skrell.dmi'
|
||||
icon_state = "skr_tears"
|
||||
body_parts = list(BP_HEAD)
|
||||
species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell)
|
||||
@@ -4567,6 +4573,7 @@ Follow by example and make good judgement based on length which list to include
|
||||
|
||||
skr_axiori_eyes
|
||||
name = "Axiori Eyes"
|
||||
icon = 'icons/mob/human_races/markings_skrell.dmi'
|
||||
icon_state = "skr_axiori_eyes"
|
||||
body_parts = list(BP_HEAD)
|
||||
species_allowed = list(/datum/species/skrell, /datum/species/zombie/skrell,/datum/species/zombie/skrell)
|
||||
@@ -4574,7 +4581,8 @@ Follow by example and make good judgement based on length which list to include
|
||||
|
||||
skr_arms
|
||||
name = "Skrell Arms"
|
||||
icon_state = "skrell_arms"
|
||||
icon = 'icons/mob/human_races/markings_skrell.dmi'
|
||||
icon_state = "skr_arms"
|
||||
body_parts = list(BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
|
||||
species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell)
|
||||
|
||||
@@ -4603,7 +4611,7 @@ Follow by example and make good judgement based on length which list to include
|
||||
name = "Skrell Stomach"
|
||||
icon = 'icons/mob/human_races/markings_skrell.dmi'
|
||||
icon_state = "skr_stomach"
|
||||
body_parts = list(BP_CHEST)
|
||||
body_parts = list(BP_CHEST, BP_GROIN)
|
||||
species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell)
|
||||
|
||||
skr_chin
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
signlang_verb = list("signs", "gestures")
|
||||
sing_verb = null
|
||||
colour = "i"
|
||||
key = "4"
|
||||
key = "s"
|
||||
flags = NO_STUTTER|SIGNLANG
|
||||
|
||||
// Helper
|
||||
|
||||
@@ -298,6 +298,20 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
//Placeholder stuff for now, a lot of it
|
||||
/datum/language/elyran
|
||||
name = LANGUAGE_ELYRAN_STANDARD
|
||||
short = "ELY"
|
||||
desc = "Elyran Standard is the official tongue of the Republic of Elyra. Constructed using elements of Farsi, Arabic, and Turkish, influence from all three of these languages can be seen throughout its grammar and vocabulary."
|
||||
colour = "elyran"
|
||||
written_style = "elyranstandard"
|
||||
key = "4"
|
||||
flags = WHITELISTED | TCOMSSIM
|
||||
syllables = list("af", "if", "ba", "ta", "tha", "id", "jem", "ha", "kha", "dal", "dhl", "ra", "zay", "sen", "um", "shn", "sid", "ad", "ta", "za", "ayn", "gha", "zir", "yn", "fa", "qaf", "iam", "mim", "al", "ja", "non", "ha", "waw", "ya",
|
||||
"hem", "zah", "hml", "ks", "ini", "da", "ks", "iga", "ih", "la", "ulf", "xe", "ayw", "sit", "ah", "aarah", "jalaa", "sirt", "kurt", "turhk", "ust", "irk", "kir", "mir", "ach", "oglu", "bolu", "shek", "she", "ghoz", "miya", "ejdan",
|
||||
"haaz", "quq", "taab", "shanha", "an", "saa", "seh", "an'", "e'", "a'", "em'")
|
||||
allow_accents = TRUE
|
||||
|
||||
/datum/language/machine
|
||||
name = LANGUAGE_EAL
|
||||
short = "EAL"
|
||||
|
||||
@@ -1291,7 +1291,7 @@
|
||||
update_inv_gloves(1)
|
||||
germ_level = 0
|
||||
|
||||
gunshot_residue = null
|
||||
LAZYCLEARLIST(gunshot_residue)
|
||||
if(clean_feet && !shoes)
|
||||
footprint_color = null
|
||||
feet_blood_DNA = null
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
var/hand_blood_color
|
||||
|
||||
var/list/flavor_texts = list()
|
||||
var/gunshot_residue
|
||||
var/list/gunshot_residue
|
||||
var/pulling_punches // Are you trying not to hurt your opponent?
|
||||
|
||||
mob_bump_flag = HUMAN
|
||||
|
||||
@@ -244,6 +244,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
|
||||
/mob/living/carbon/human/terminator/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_IPC_TERMINATOR)
|
||||
add_language(LANGUAGE_SOL_COMMON, 1)
|
||||
add_language(LANGUAGE_ELYRAN_STANDARD, 1)
|
||||
add_language(LANGUAGE_UNATHI, 1)
|
||||
add_language(LANGUAGE_SIIK_MAAS, 1)
|
||||
add_language(LANGUAGE_SKRELLIAN, 1)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
megacorporations have sparked secretive factions to fight their influence, while there is always the risk of someone digging too \
|
||||
deep into the secrets of the galaxy..."
|
||||
num_alternate_languages = 2
|
||||
secondary_langs = list(LANGUAGE_SOL_COMMON)
|
||||
secondary_langs = list(LANGUAGE_SOL_COMMON, LANGUAGE_ELYRAN_STANDARD)
|
||||
name_language = null // Use the first-name last-name generator rather than a language scrambler
|
||||
mob_size = 9
|
||||
spawn_flags = CAN_JOIN
|
||||
|
||||
@@ -83,13 +83,13 @@
|
||||
|
||||
default_h_style = "Skrell Short Tentacles"
|
||||
|
||||
allowed_citizenships = list(CITIZENSHIP_JARGON, CITIZENSHIP_BIESEL, CITIZENSHIP_SOL, CITIZENSHIP_COALITION, CITIZENSHIP_ELYRA, CITIZENSHIP_ERIDANI)
|
||||
allowed_citizenships = list(CITIZENSHIP_JARGON, CITIZENSHIP_BIESEL, CITIZENSHIP_SOL, CITIZENSHIP_COALITION, CITIZENSHIP_ERIDANI)
|
||||
allowed_religions = list(RELIGION_QEBLAK, RELIGION_WEISHII, RELIGION_SUURKA, RELIGION_KIRGUL, RELIGION_NONE, RELIGION_OTHER)
|
||||
default_citizenship = CITIZENSHIP_JARGON
|
||||
|
||||
default_accent = ACCENT_SKRELL
|
||||
allowed_accents = list(ACCENT_SKRELL, ACCENT_HOMEWORLD, ACCENT_QERRMALIC, ACCENT_ALIOSE, ACCENT_AWEIJI, ACCENT_TRAVERSE, ACCENT_CETI, ACCENT_GIBSON, ACCENT_COC, ACCENT_ERIDANI,
|
||||
ACCENT_ERIDANIDREG, ACCENT_VENUS, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_ELYRA, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_EUROPA, ACCENT_VALKYRIE, ACCENT_MICTLAN)
|
||||
ACCENT_ERIDANIDREG, ACCENT_VENUS, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_EUROPA, ACCENT_VALKYRIE, ACCENT_MICTLAN)
|
||||
|
||||
zombie_type = SPECIES_ZOMBIE_SKRELL
|
||||
bodyfall_sound = /decl/sound_category/bodyfall_skrell_sound
|
||||
|
||||
@@ -158,6 +158,7 @@ var/list/ai_verbs_default = list(
|
||||
add_language(LANGUAGE_ROBOT, TRUE)
|
||||
add_language(LANGUAGE_TCB, TRUE)
|
||||
add_language(LANGUAGE_SOL_COMMON, FALSE)
|
||||
add_language(LANGUAGE_ELYRAN_STANDARD, FALSE)
|
||||
add_language(LANGUAGE_UNATHI, FALSE)
|
||||
add_language(LANGUAGE_SIIK_MAAS, FALSE)
|
||||
add_language(LANGUAGE_SKRELLIAN, FALSE)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
networks = list(NETWORK_COMMAND)
|
||||
languages = list(
|
||||
LANGUAGE_SOL_COMMON = TRUE,
|
||||
LANGUAGE_ELYRAN_STANDARD = TRUE,
|
||||
LANGUAGE_TRADEBAND = TRUE,
|
||||
LANGUAGE_UNATHI = TRUE,
|
||||
LANGUAGE_SIIK_MAAS = TRUE,
|
||||
|
||||
@@ -174,6 +174,7 @@
|
||||
//Default languages without universal translator software
|
||||
|
||||
add_language(LANGUAGE_SOL_COMMON, 1)
|
||||
add_language(LANGUAGE_ELYRAN_STANDARD, 1)
|
||||
add_language(LANGUAGE_TRADEBAND, 1)
|
||||
add_language(LANGUAGE_GUTTER, 1)
|
||||
add_language(LANGUAGE_EAL, 1)
|
||||
|
||||
@@ -22,6 +22,7 @@ var/global/list/robot_modules = list(
|
||||
var/networks = list()
|
||||
var/languages = list( //Any listed language will be understandable. Any set to TRUE will be speakable
|
||||
LANGUAGE_SOL_COMMON = TRUE,
|
||||
LANGUAGE_ELYRAN_STANDARD = TRUE,
|
||||
LANGUAGE_TRADEBAND = TRUE,
|
||||
LANGUAGE_UNATHI = FALSE,
|
||||
LANGUAGE_SIIK_MAAS = FALSE,
|
||||
@@ -608,6 +609,7 @@ var/global/list/robot_modules = list(
|
||||
networks = list(NETWORK_SERVICE)
|
||||
languages = list(
|
||||
LANGUAGE_SOL_COMMON = TRUE,
|
||||
LANGUAGE_ELYRAN_STANDARD = TRUE,
|
||||
LANGUAGE_TRADEBAND = TRUE,
|
||||
LANGUAGE_UNATHI = TRUE,
|
||||
LANGUAGE_SIIK_MAAS = TRUE,
|
||||
@@ -839,6 +841,7 @@ var/global/list/robot_modules = list(
|
||||
name = "syndicate robot module"
|
||||
languages = list(
|
||||
LANGUAGE_SOL_COMMON = TRUE,
|
||||
LANGUAGE_ELYRAN_STANDARD = TRUE,
|
||||
LANGUAGE_TRADEBAND = TRUE,
|
||||
LANGUAGE_UNATHI = TRUE,
|
||||
LANGUAGE_SIIK_MAAS = TRUE,
|
||||
@@ -1084,6 +1087,7 @@ var/global/list/robot_modules = list(
|
||||
name = "bluespace robot module"
|
||||
languages = list(
|
||||
LANGUAGE_TCB = TRUE,
|
||||
LANGUAGE_ELYRAN_STANDARD = TRUE,
|
||||
LANGUAGE_GUTTER = TRUE,
|
||||
LANGUAGE_SIGN = TRUE,
|
||||
LANGUAGE_TRADEBAND = TRUE,
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
/obj/item/clothing/accessory/badge,
|
||||
/obj/item/pack,
|
||||
/obj/item/hand,
|
||||
/obj/item/key
|
||||
/obj/item/key,
|
||||
/obj/item/paper_scanner
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -34,20 +34,6 @@
|
||||
cells_amount++
|
||||
capacity = C * 40 //Basic cells are such crap. Hyper cells needed to get on normal SMES levels.
|
||||
|
||||
|
||||
/obj/machinery/power/smes/batteryrack/update_icon()
|
||||
cut_overlays()
|
||||
if(stat & BROKEN) return
|
||||
|
||||
if (output_attempt)
|
||||
add_overlay("gsmes_outputting")
|
||||
if(inputting)
|
||||
add_overlay("gsmes_charging")
|
||||
|
||||
var/clevel = chargedisplay()
|
||||
if(clevel>0)
|
||||
add_overlay("gsmes_og[clevel]")
|
||||
|
||||
/obj/machinery/power/smes/batteryrack/chargedisplay()
|
||||
return round(4 * charge/(capacity ? capacity : 5e6))
|
||||
|
||||
@@ -100,19 +86,10 @@
|
||||
)
|
||||
|
||||
/obj/machinery/power/smes/batteryrack/makeshift/update_icon()
|
||||
cut_overlays()
|
||||
if(stat & BROKEN) return
|
||||
|
||||
if (output_attempt)
|
||||
add_overlay("gsmes_outputting")
|
||||
if(inputting)
|
||||
add_overlay("gsmes_charging")
|
||||
if (overcharge_percent > 100)
|
||||
add_overlay("gsmes_overcharge")
|
||||
else
|
||||
var/clevel = chargedisplay()
|
||||
if(clevel>0)
|
||||
add_overlay("gsmes_og[clevel]")
|
||||
.=..()
|
||||
if(overcharge_percent > 100)
|
||||
cut_overlays()
|
||||
add_overlay("smes-crit")
|
||||
|
||||
//This mess of if-elses and magic numbers handles what happens if the engies don't pay attention and let it eat too much charge
|
||||
//What happens depends on how much capacity has the ghetto smes and how much it is overcharged.
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "bbox_off"
|
||||
//directwired = 0
|
||||
var/icon_state_on = "bbox_on"
|
||||
var/icon_state_off = "bbox_off"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/on = 0
|
||||
@@ -24,6 +22,9 @@
|
||||
LAZYADD(SSpower.breaker_boxes, src)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/breakerbox/update_icon()
|
||||
icon_state = "bbox_[on ? "on" : "off"]"
|
||||
|
||||
/obj/machinery/power/breakerbox/Destroy()
|
||||
LAZYREMOVE(SSpower.breaker_boxes, src)
|
||||
SSmachinery.queue_rcon_update()
|
||||
@@ -40,29 +41,30 @@
|
||||
/obj/machinery/power/breakerbox/activated/LateInitialize()
|
||||
set_state(1)
|
||||
|
||||
>>>>>>> master
|
||||
/obj/machinery/power/breakerbox/examine(mob/user)
|
||||
..()
|
||||
if(on)
|
||||
to_chat(user, "<span class='good'>It seems to be online.</span>")
|
||||
to_chat(user, SPAN_GOOD("It seems to be online."))
|
||||
else
|
||||
to_chat(user, "<span class='bad'>It seems to be offline.</span>")
|
||||
to_chat(user, SPAN_BAD("It seems to be offline."))
|
||||
|
||||
/obj/machinery/power/breakerbox/attack_ai(mob/user)
|
||||
if(!ai_can_interact(user))
|
||||
return
|
||||
if(update_locked)
|
||||
to_chat(user, "<span class='bad'>System locked. Please try again later.</span>")
|
||||
to_chat(user, SPAN_BAD("System locked. Please try again later."))
|
||||
return
|
||||
|
||||
if(busy)
|
||||
to_chat(user, "<span class='bad'>System is busy. Please wait until current operation is finished before changing power settings.</span>")
|
||||
to_chat(user, SPAN_BAD("System is busy. Please wait until current operation is finished before changing power settings."))
|
||||
return
|
||||
|
||||
busy = 1
|
||||
to_chat(user, "<span class='good'>Updating power settings..</span>")
|
||||
to_chat(user, SPAN_GOOD("Updating power settings..."))
|
||||
if(do_after(user, 50))
|
||||
set_state(!on)
|
||||
to_chat(user, "<span class='good'>Update Completed. New setting:[on ? "on": "off"]</span>")
|
||||
to_chat(user, SPAN_GOOD("Update Completed. New setting:[on ? "on": "off"]"))
|
||||
update_locked = 1
|
||||
addtimer(CALLBACK(src, .proc/reset_locked), 600)
|
||||
busy = 0
|
||||
@@ -73,22 +75,21 @@
|
||||
|
||||
/obj/machinery/power/breakerbox/attack_hand(mob/user)
|
||||
if(update_locked)
|
||||
to_chat(user, "<span class='bad'>System locked. Please try again later.</span>")
|
||||
to_chat(user, SPAN_BAD("System locked. Please try again later."))
|
||||
return
|
||||
|
||||
if(busy)
|
||||
to_chat(user, "<span class='bad'>System is busy. Please wait until current operation is finished before changing power settings.</span>")
|
||||
to_chat(user, SPAN_BAD("System is busy. Please wait until current operation is finished before changing power settings."))
|
||||
return
|
||||
|
||||
busy = 1
|
||||
for(var/mob/O in viewers(user))
|
||||
O.show_message(text("<span class='warning'>[user] started reprogramming [src]!</span>"), 1)
|
||||
O.show_message(SPAN_WARNING("[user] started reprogramming [src]!"), 1)
|
||||
|
||||
if(do_after(user, 50))
|
||||
set_state(!on)
|
||||
user.visible_message(\
|
||||
"<span class='notice'>[user.name] [on ? "enabled" : "disabled"] the breaker box!</span>",\
|
||||
"<span class='notice'>You [on ? "enabled" : "disabled"] the breaker box!</span>")
|
||||
user.visible_message(SPAN_NOTICE("[user.name] [on ? "enabled" : "disabled"] the breaker box!"), \
|
||||
SPAN_NOTICE("You [on ? "enabled" : "disabled"] the breaker box!"))
|
||||
update_locked = 1
|
||||
addtimer(CALLBACK(src, .proc/reset_locked), 600)
|
||||
busy = 0
|
||||
@@ -98,13 +99,13 @@
|
||||
var/newtag = input(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system") as text
|
||||
if(newtag)
|
||||
RCon_tag = newtag
|
||||
to_chat(user, "<span class='notice'>You changed the RCON tag to: [newtag]</span>")
|
||||
to_chat(user, SPAN_NOTICE("You changed the RCON tag to: [newtag]"))
|
||||
SSmachinery.queue_rcon_update()
|
||||
|
||||
/obj/machinery/power/breakerbox/proc/set_state(var/state)
|
||||
on = state
|
||||
update_icon()
|
||||
if(on)
|
||||
icon_state = icon_state_on
|
||||
var/list/connection_dirs = list()
|
||||
for(var/direction in directions)
|
||||
for(var/obj/structure/cable/C in get_step(src,direction))
|
||||
@@ -129,7 +130,6 @@
|
||||
C.mergeDiagonalsNetworks(C.d2)
|
||||
|
||||
else
|
||||
icon_state = icon_state_off
|
||||
for(var/obj/structure/cable/C in src.loc)
|
||||
qdel(C)
|
||||
|
||||
@@ -139,3 +139,11 @@
|
||||
set_state(!on)
|
||||
update_locked = 1
|
||||
addtimer(CALLBACK(src, .proc/reset_locked), 600)
|
||||
|
||||
/obj/machinery/power/breakerbox/activated
|
||||
icon_state = "bbox_on"
|
||||
|
||||
// Enabled on server startup. Used in substations to keep them in bypass mode.
|
||||
/obj/machinery/power/breakerbox/activated/Initialize()
|
||||
. = ..()
|
||||
set_state(1)
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
name = "Placeholder Generator" //seriously, don't use this. It can't be anchored without VV magic.
|
||||
desc = "A portable generator for emergency backup power"
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "portgen0"
|
||||
icon_state = "portgen0_0"
|
||||
var/base_icon = "portgen0"
|
||||
density = TRUE
|
||||
anchored = FALSE
|
||||
|
||||
@@ -57,6 +58,10 @@
|
||||
soundloop.start()
|
||||
return
|
||||
|
||||
/obj/machinery/power/port_gen/update_icon()
|
||||
icon_state = "[base_icon]_[active]"
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/port_gen/examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
@@ -369,11 +374,11 @@
|
||||
if(href_list["action"] == "enable")
|
||||
if(!active && HasFuel() && !IsBroken())
|
||||
active = TRUE
|
||||
icon_state = "portgen1"
|
||||
update_icon()
|
||||
if(href_list["action"] == "disable")
|
||||
if (active)
|
||||
active = FALSE
|
||||
icon_state = "portgen0"
|
||||
update_icon()
|
||||
if(href_list["action"] == "eject")
|
||||
if(!active)
|
||||
DropFuel()
|
||||
@@ -388,7 +393,8 @@
|
||||
/obj/machinery/power/port_gen/pacman/super
|
||||
name = "S.U.P.E.R.P.A.C.M.A.N.-type Portable Generator"
|
||||
desc = "A power generator that utilizes uranium sheets as fuel. Can run for much longer than the standard PACMAN type generators. Rated for 80 kW max safe output."
|
||||
icon_state = "portgen1"
|
||||
icon_state = "portgen1_0"
|
||||
base_icon = "portgen1"
|
||||
sheet_path = /obj/item/stack/material/uranium
|
||||
sheet_name = "Uranium Sheets"
|
||||
time_per_sheet = 576 //same power output, but a 50 sheet stack will last 2 hours at max safe power
|
||||
@@ -415,7 +421,8 @@
|
||||
/obj/machinery/power/port_gen/pacman/mrs
|
||||
name = "M.R.S.P.A.C.M.A.N.-type Portable Generator"
|
||||
desc = "An advanced power generator that runs on tritium. Rated for 200 kW maximum safe output!"
|
||||
icon_state = "portgen2"
|
||||
icon_state = "portgen2_0"
|
||||
base_icon = "portgen2"
|
||||
sheet_path = /obj/item/stack/material/tritium
|
||||
sheet_name = "Tritium Fuel Sheets"
|
||||
|
||||
|
||||
@@ -329,9 +329,10 @@
|
||||
// Parameters: None
|
||||
// Description: Allows us to use special icon overlay for critical SMESs
|
||||
/obj/machinery/power/smes/buildable/update_icon()
|
||||
if (failing)
|
||||
if(failing)
|
||||
cut_overlays()
|
||||
add_overlay("smes-crit")
|
||||
add_overlay("smes-crit_screen")
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -101,10 +101,10 @@
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(istype(H))
|
||||
if(!istype(H.gloves, /obj/item/clothing))
|
||||
H.gunshot_residue = chambered.caliber
|
||||
LAZYDISTINCTADD(H.gunshot_residue, chambered.caliber)
|
||||
else
|
||||
var/obj/item/clothing/G = H.gloves
|
||||
G.gunshot_residue = chambered.caliber
|
||||
LAZYDISTINCTADD(G.gunshot_residue, chambered.caliber)
|
||||
|
||||
switch(handle_casings)
|
||||
if(DELETE_CASINGS)
|
||||
|
||||
@@ -256,6 +256,13 @@
|
||||
can_tamper = FALSE
|
||||
reagents_to_add = list(/decl/reagent/acid = 1000)
|
||||
|
||||
/obj/structure/reagent_dispensers/peppertank/luminol
|
||||
name = "luminol dispenser"
|
||||
desc = "A dispenser to refill luminol bottles."
|
||||
icon_state = "luminoltank"
|
||||
amount_per_transfer_from_this = 50
|
||||
reagents_to_add = list(/decl/reagent/luminol = 1000)
|
||||
|
||||
//Water Cooler
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler
|
||||
|
||||
@@ -63,7 +63,8 @@
|
||||
|
||||
//Language macros
|
||||
interpreter.SetVar("L_BASIC", LANGUAGE_TCB)
|
||||
interpreter.SetVar("L_SOL", LANGUAGE_SOL_COMMON)
|
||||
interpreter.SetVar("L_SOL", LANGUAGE_SOL_COMMON)
|
||||
interpreter.SetVar("L_ELYRAN", LANGUAGE_ELYRAN_STANDARD)
|
||||
interpreter.SetVar("L_TRADE", LANGUAGE_TRADEBAND)
|
||||
interpreter.SetVar("L_GUTTER", LANGUAGE_GUTTER)
|
||||
interpreter.SetVar("L_MAAS", LANGUAGE_SIIK_MAAS)
|
||||
|
||||
@@ -98,6 +98,7 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.vaurca {color: #9e9e39;}
|
||||
.soghun {color: #228B22;}
|
||||
.solcom {color: #22228B;}
|
||||
.elyran {color: #c79322;}
|
||||
.soghun_alt {color: #024402;}
|
||||
.changeling {color: #800080;}
|
||||
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
.solcommon.understood { font-family: mo5v56; }
|
||||
.solcommon.scramble { font-family: ducados; }
|
||||
|
||||
.elyranstandard.understood {font-family: gelasio; }
|
||||
.elyranstandard.scramble {font-family: mo5v56; }
|
||||
|
||||
.tradeband.understood { font-family: gelasio; }
|
||||
.tradeband.scramble { font-family: gelasio; }
|
||||
|
||||
|
||||
@@ -35,6 +35,60 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">17 January 2022</h2>
|
||||
<h3 class="author">Geeves updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed a bug where faction overrides caused certain occupations to runtime when creating their outfits.</li>
|
||||
</ul>
|
||||
<h3 class="author">Omicega updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added the new language Elyran Standard, selectable by humans and IPCs. Its language key is ,4.</li>
|
||||
<li class="tweak">Moves the Sign Language language key to ,s from ,4.</li>
|
||||
</ul>
|
||||
<h3 class="author">TheGreyWolf updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Fingerprint & fiber reports now show all source locations, even when combined and doors will have the door's name attached.</li>
|
||||
<li class="rscadd">Added the ability to rename fingerprint cards & fiber bags.</li>
|
||||
<li class="tweak">Changed the layout of the various forensic machine reports.</li>
|
||||
<li class="tweak">Each report from the forensic machines are now numbered per evidence type (fiber, fingerprint, GSR, DNA) rather than combined amount of reports.</li>
|
||||
<li class="bugfix">Gunshot residue now shows all residue on something rather than only the most recent.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">16 January 2022</h2>
|
||||
<h3 class="author">Omicega updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Removed Elyran citizenship and accent choices from Skrell.</li>
|
||||
</ul>
|
||||
<h3 class="author">TheGreyWolf updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Business cards no longer change color when copied in a photocopier.</li>
|
||||
<li class="bugfix">Photocopiers toner now gets used correctly.</li>
|
||||
<li class="rscadd">The sinta hood now fits in the ear slot.</li>
|
||||
<li class="rscadd">The vial box in the forensic lab can now be locked by swiping an id card with forensic access.</li>
|
||||
<li class="rscadd">Added a syringe and vial to autopsy trays.</li>
|
||||
<li class="rscadd">Paper scanners now fit in filing cabinets.</li>
|
||||
<li class="rscadd">The forensic lab and investigations office now have luminol refillers.</li>
|
||||
<li class="bugfix">Fixes vial box sprites.</li>
|
||||
<li class="bugfix">The investigation lab ringers now clearly indicates the call comes from there when a pda is linked.</li>
|
||||
<li class="maptweak">Autopsy now has a second bodybag box.</li>
|
||||
<li class="maptweak">Re-arranged some equipment in the forensic lab and added a closet.</li>
|
||||
<li class="maptweak">The investigations office now has a button to open the door.</li>
|
||||
<li class="maptweak">Replaced one of the three no smoking signs in the security reception with a notice board.</li>
|
||||
<li class="maptweak">The forensic lab doors now permits anyone to leave regardless of access.</li>
|
||||
</ul>
|
||||
<h3 class="author">Wowzewow (Wezzy) updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="imageadd">Updates sprites for APCs, SMES, Battery racks, Breaker boxes, Power cells and their chargers.</li>
|
||||
</ul>
|
||||
<h3 class="author">listerla updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Punk Shave, Half-Shaved Bun is no longer one pixel too low on the right facing sprite.</li>
|
||||
<li class="imageadd">Added left and right arm heart tattoos. Credit for sprite goes to KasparoVy.</li>
|
||||
<li class="bugfix">Fixed Skrell stomach marking, removed nonexistent heart tattoo marking.</li>
|
||||
<li class="bugfix">Warding sphere sheath animation no longer makes the entire sprite relocate downwards.</li>
|
||||
<li class="tweak">Dominian citizenship selection blurb now uses far more recent lore, rather than a several year old outdated one.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">12 January 2022</h2>
|
||||
<h3 class="author">Dekser updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -22364,3 +22364,53 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- tweak: Slightly altered the Unathi brain sprite.
|
||||
- rscdel: Removed the Skrells appendix for the simple reason that Skrell and Humans
|
||||
evolved separately and shouldn't share an exact same useless organ.
|
||||
2022-01-16:
|
||||
Omicega:
|
||||
- tweak: Removed Elyran citizenship and accent choices from Skrell.
|
||||
TheGreyWolf:
|
||||
- tweak: Business cards no longer change color when copied in a photocopier.
|
||||
- bugfix: Photocopiers toner now gets used correctly.
|
||||
- rscadd: The sinta hood now fits in the ear slot.
|
||||
- rscadd: The vial box in the forensic lab can now be locked by swiping an id card
|
||||
with forensic access.
|
||||
- rscadd: Added a syringe and vial to autopsy trays.
|
||||
- rscadd: Paper scanners now fit in filing cabinets.
|
||||
- rscadd: The forensic lab and investigations office now have luminol refillers.
|
||||
- bugfix: Fixes vial box sprites.
|
||||
- bugfix: The investigation lab ringers now clearly indicates the call comes from
|
||||
there when a pda is linked.
|
||||
- maptweak: Autopsy now has a second bodybag box.
|
||||
- maptweak: Re-arranged some equipment in the forensic lab and added a closet.
|
||||
- maptweak: The investigations office now has a button to open the door.
|
||||
- maptweak: Replaced one of the three no smoking signs in the security reception
|
||||
with a notice board.
|
||||
- maptweak: The forensic lab doors now permits anyone to leave regardless of access.
|
||||
Wowzewow (Wezzy):
|
||||
- imageadd: Updates sprites for APCs, SMES, Battery racks, Breaker boxes, Power
|
||||
cells and their chargers.
|
||||
listerla:
|
||||
- bugfix: Punk Shave, Half-Shaved Bun is no longer one pixel too low on the right
|
||||
facing sprite.
|
||||
- imageadd: Added left and right arm heart tattoos. Credit for sprite goes to KasparoVy.
|
||||
- bugfix: Fixed Skrell stomach marking, removed nonexistent heart tattoo marking.
|
||||
- bugfix: Warding sphere sheath animation no longer makes the entire sprite relocate
|
||||
downwards.
|
||||
- tweak: Dominian citizenship selection blurb now uses far more recent lore, rather
|
||||
than a several year old outdated one.
|
||||
2022-01-17:
|
||||
Geeves:
|
||||
- bugfix: Fixed a bug where faction overrides caused certain occupations to runtime
|
||||
when creating their outfits.
|
||||
Omicega:
|
||||
- rscadd: Added the new language Elyran Standard, selectable by humans and IPCs.
|
||||
Its language key is ,4.
|
||||
- tweak: Moves the Sign Language language key to ,s from ,4.
|
||||
TheGreyWolf:
|
||||
- rscadd: Fingerprint & fiber reports now show all source locations, even when
|
||||
combined and doors will have the door's name attached.
|
||||
- rscadd: Added the ability to rename fingerprint cards & fiber bags.
|
||||
- tweak: Changed the layout of the various forensic machine reports.
|
||||
- tweak: Each report from the forensic machines are now numbered per evidence type
|
||||
(fiber, fingerprint, GSR, DNA) rather than combined amount of reports.
|
||||
- bugfix: Gunshot residue now shows all residue on something rather than only the
|
||||
most recent.
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
author: TheGreyWolf
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- tweak: "Business cards no longer change color when copied in a photocopier."
|
||||
- bugfix: "Photocopiers toner now gets used correctly."
|
||||
@@ -0,0 +1,3 @@
|
||||
Delete-after: true
|
||||
author: listerla
|
||||
changes: []
|
||||
@@ -1,6 +0,0 @@
|
||||
author: listerla
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- bugfix: "Punk Shave, Half-Shaved Bun is no longer one pixel too low on the right facing sprite."
|
||||
@@ -1,7 +0,0 @@
|
||||
author: listerla
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- bugfix: "Warding sphere sheath animation no longer makes the entire sprite relocate downwards."
|
||||
|
||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 767 B After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -393,14 +393,10 @@
|
||||
"aaU" = (
|
||||
/obj/effect/floor_decal/corner/beige/diagonal,
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/reagent_containers/glass/beaker/large,
|
||||
/obj/machinery/camera/network/security{
|
||||
c_tag = "Security - Forensics Lab Port";
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/storage/box/folders/blue{
|
||||
pixel_y = 15
|
||||
},
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/security/forensics_laboratory)
|
||||
"aaV" = (
|
||||
@@ -448,11 +444,10 @@
|
||||
pixel_x = -3;
|
||||
pixel_y = 7
|
||||
},
|
||||
/obj/item/pen{
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
},
|
||||
/obj/item/pen/red,
|
||||
/obj/item/pen{
|
||||
pixel_x = -4
|
||||
},
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/security/forensics_laboratory)
|
||||
"abc" = (
|
||||
@@ -462,11 +457,16 @@
|
||||
/area/security/forensics_laboratory)
|
||||
"abd" = (
|
||||
/obj/effect/floor_decal/corner/beige/diagonal,
|
||||
/obj/structure/table/glass,
|
||||
/obj/structure/closet{
|
||||
name = "Forensic Closet"
|
||||
},
|
||||
/obj/item/storage/box/swabs,
|
||||
/obj/item/storage/box/folders/blue,
|
||||
/obj/item/reagent_containers/spray/cleaner{
|
||||
pixel_x = 2;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/storage/box/evidence,
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/security/forensics_laboratory)
|
||||
"abe" = (
|
||||
@@ -701,6 +701,9 @@
|
||||
name = "Forensic Laboratory";
|
||||
req_access = list(4)
|
||||
},
|
||||
/obj/effect/map_effect/door_helper/unres{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/security/forensics_laboratory)
|
||||
"abE" = (
|
||||
@@ -963,8 +966,8 @@
|
||||
},
|
||||
/obj/machinery/ringer_button{
|
||||
id = "investigation_ringer";
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
pixel_x = 6;
|
||||
pixel_y = 6
|
||||
},
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/security/forensics_laboratory)
|
||||
@@ -1338,6 +1341,9 @@
|
||||
name = "Forensic Laboratory";
|
||||
req_access = list(4)
|
||||
},
|
||||
/obj/effect/map_effect/door_helper/unres{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/security/forensics_laboratory)
|
||||
"acQ" = (
|
||||
@@ -3256,12 +3262,13 @@
|
||||
"agu" = (
|
||||
/obj/structure/table/standard,
|
||||
/obj/item/storage/box/bodybags,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/machinery/requests_console{
|
||||
department = "Autopsy";
|
||||
departmentType = 5;
|
||||
pixel_x = -32
|
||||
},
|
||||
/obj/item/storage/box/bodybags,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/turf/simulated/floor/tiled{
|
||||
name = "cooled floor";
|
||||
temperature = 278
|
||||
@@ -3981,7 +3988,7 @@
|
||||
},
|
||||
/obj/item/pen/red,
|
||||
/obj/machinery/ringer{
|
||||
department = "Security";
|
||||
department = "Forensic Lab";
|
||||
id = "investigation_ringer";
|
||||
pixel_x = -30;
|
||||
req_access = list(1)
|
||||
@@ -21620,13 +21627,15 @@
|
||||
/obj/effect/floor_decal/corner/blue{
|
||||
dir = 6
|
||||
},
|
||||
/obj/structure/sign/nosmoking_2{
|
||||
pixel_x = 32
|
||||
},
|
||||
/obj/machinery/disposal,
|
||||
/obj/structure/disposalpipe/trunk{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/noticeboard{
|
||||
layer = 3.3;
|
||||
pixel_x = 32;
|
||||
pixel_y = 2
|
||||
},
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/security/brig/control_room)
|
||||
"aLF" = (
|
||||
@@ -60443,6 +60452,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/machinery/door/airlock/security{
|
||||
id_tag = "investdoor";
|
||||
name = "Investigations Office";
|
||||
req_access = list(4)
|
||||
},
|
||||
@@ -64939,6 +64949,7 @@
|
||||
/obj/machinery/firealarm/north,
|
||||
/obj/structure/table/standard,
|
||||
/obj/item/paper_scanner,
|
||||
/obj/item/paper_scanner,
|
||||
/turf/simulated/floor/tiled/dark,
|
||||
/area/security/forensics_office{
|
||||
name = "Security - Investigations Office"
|
||||
@@ -65527,7 +65538,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/ringer{
|
||||
department = "Security";
|
||||
department = "Forensic Lab";
|
||||
id = "investigation_ringer";
|
||||
pixel_y = 30;
|
||||
req_access = list(1)
|
||||
@@ -65763,7 +65774,7 @@
|
||||
"phk" = (
|
||||
/obj/effect/floor_decal/corner/beige/diagonal,
|
||||
/obj/machinery/ringer{
|
||||
department = "Security";
|
||||
department = "Forensic Lab";
|
||||
id = "investigation_ringer";
|
||||
pixel_y = -30;
|
||||
req_access = list(1)
|
||||
@@ -66619,6 +66630,9 @@
|
||||
/area/maintenance/medbay)
|
||||
"qHy" = (
|
||||
/obj/structure/coatrack,
|
||||
/obj/structure/reagent_dispensers/peppertank/luminol{
|
||||
pixel_x = -31
|
||||
},
|
||||
/turf/simulated/floor/lino/grey,
|
||||
/area/security/forensics_office{
|
||||
name = "Security - Investigations Office"
|
||||
@@ -67066,7 +67080,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/ringer{
|
||||
department = "Security";
|
||||
department = "Forensic Lab";
|
||||
id = "investigation_ringer";
|
||||
pixel_x = 30;
|
||||
req_access = list(1)
|
||||
@@ -69425,6 +69439,10 @@
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/reagent_dispensers/peppertank/luminol{
|
||||
pixel_x = 0;
|
||||
pixel_y = 32
|
||||
},
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/security/forensics_laboratory)
|
||||
"vgB" = (
|
||||
@@ -70583,12 +70601,14 @@
|
||||
"xcZ" = (
|
||||
/obj/effect/floor_decal/corner/beige/diagonal,
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/paper_scanner,
|
||||
/obj/machinery/requests_console{
|
||||
department = "Forensics Lab";
|
||||
departmentType = 5;
|
||||
pixel_y = 30
|
||||
},
|
||||
/obj/item/paper_scanner{
|
||||
pixel_x = -8
|
||||
},
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/security/forensics_laboratory)
|
||||
"xdi" = (
|
||||
@@ -70892,11 +70912,11 @@
|
||||
"xxd" = (
|
||||
/obj/effect/floor_decal/corner/beige/diagonal,
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/storage/box/swabs{
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
/obj/item/storage/lockbox/vials/forensic,
|
||||
/obj/item/reagent_containers/glass/beaker/large{
|
||||
pixel_x = 15;
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/item/storage/box/fancy/vials,
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/security/forensics_laboratory)
|
||||
"xxw" = (
|
||||
@@ -71341,11 +71361,23 @@
|
||||
/area/library)
|
||||
"yiH" = (
|
||||
/obj/structure/table/standard,
|
||||
/obj/item/paper_bin,
|
||||
/obj/item/pen,
|
||||
/obj/item/paper_bin{
|
||||
pixel_x = 7
|
||||
},
|
||||
/obj/effect/floor_decal/corner/blue{
|
||||
dir = 10
|
||||
},
|
||||
/obj/machinery/button/remote/airlock{
|
||||
id = "investdoor";
|
||||
name = "Office Door";
|
||||
pixel_x = -6;
|
||||
pixel_y = 8;
|
||||
req_access = list(4)
|
||||
},
|
||||
/obj/item/pen{
|
||||
pixel_x = -4
|
||||
},
|
||||
/obj/item/pen/red,
|
||||
/turf/simulated/floor/tiled/dark,
|
||||
/area/security/forensics_office{
|
||||
name = "Security - Investigations Office"
|
||||
|
||||