Merge branch 'master' into final_shuttle_touches_and_stuff

# Conflicts:
#	code/modules/power/breaker_box.dm
This commit is contained in:
alberyk
2022-01-17 19:36:22 -03:00
54 changed files with 407 additions and 181 deletions
+1
View File
@@ -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"
+2 -2
View File
@@ -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
+4 -4
View File
@@ -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
+4 -5
View File
@@ -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 Morizal."
consular_outfit = /datum/outfit/job/representative/consular/dominia
job_species_blacklist = list(
+8 -6
View File
@@ -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
+2 -2
View File
@@ -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
+52 -15
View File
@@ -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
+7 -7
View File
@@ -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
+1 -1
View File
@@ -80,7 +80,7 @@
signlang_verb = list("signs", "gestures")
sing_verb = null
colour = "i"
key = "4"
key = "s"
flags = NO_STUTTER|SIGNLANG
// Helper
+14
View File
@@ -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
+1
View File
@@ -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,
+2 -1
View File
@@ -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
)
+4 -27
View File
@@ -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.
+25 -17
View File
@@ -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)
+12 -5
View File
@@ -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"
+2 -1
View File
@@ -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
..()
+2 -2
View File
@@ -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)
+1
View File
@@ -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;}
+3
View File
@@ -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; }
+54
View File
@@ -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 &amp; fiber reports now show all source locations, even when combined and doors will have the door&#x27;s name attached.</li>
<li class="rscadd">Added the ability to rename fingerprint cards &amp; 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">
+50
View File
@@ -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&#x27;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 &amp; fiber reports now show all source locations, even when
combined and doors will have the door&#x27;s name attached.
- rscadd: Added the ability to rename fingerprint cards &amp; 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.
-7
View File
@@ -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."
+3
View File
@@ -0,0 +1,3 @@
Delete-after: true
author: listerla
changes: []
-6
View File
@@ -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."
-7
View File
@@ -1,7 +0,0 @@
author: listerla
delete-after: True
changes:
- bugfix: "Warding sphere sheath animation no longer makes the entire sprite relocate downwards."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 767 B

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

+58 -26
View File
@@ -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"