diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm
index 787488e127f9..b157b96d5f8a 100644
--- a/code/__defines/machinery.dm
+++ b/code/__defines/machinery.dm
@@ -42,28 +42,27 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called
// Camera channels
// Station channels
-#define CAMERA_CHANNEL_PUBLIC "Public"
-#define CAMERA_CHANNEL_ENGINEERING "Engineering"
-#define CAMERA_CHANNEL_MEDICAL "Medical"
-#define CAMERA_CHANNEL_RESEARCH "Research"
-#define CAMERA_CHANNEL_SECURITY "Security"
-
-#define CAMERA_CHANNEL_ROBOTS "Robots"
-#define CAMERA_CHANNEL_MINE "Mining"
-#define CAMERA_CHANNEL_SECRET "Secret"
+#define CAMERA_CHANNEL_PUBLIC "Public"
+#define CAMERA_CHANNEL_ENGINEERING "Engineering"
+#define CAMERA_CHANNEL_MEDICAL "Medical"
+#define CAMERA_CHANNEL_RESEARCH "Research"
+#define CAMERA_CHANNEL_SECURITY "Security"
+#define CAMERA_CHANNEL_ROBOTS "Robots"
+#define CAMERA_CHANNEL_MINE "Mining"
+#define CAMERA_CHANNEL_SECRET "Secret"
// Non-station channels
-#define CAMERA_CHANNEL_CRESCENT "Crescent"
-#define CAMERA_CHANNEL_ERT "ZeEmergencyResponseTeam"
-#define CAMERA_CHANNEL_MERCENARY "MercurialNet"
-#define CAMERA_CHANNEL_TELEVISION "Television"
+#define CAMERA_CHANNEL_CRESCENT "Crescent"
+#define CAMERA_CHANNEL_ERT "Emergency Response Team"
+#define CAMERA_CHANNEL_MERCENARY "MercurialNet"
+#define CAMERA_CHANNEL_TELEVISION "Television"
// Alarm networks
-#define NETWORK_ALARM_ATMOS "Atmosphere Alarms"
+#define NETWORK_ALARM_ATMOS "Atmosphere Alarms"
#define NETWORK_ALARM_CAMERA "Camera Alarms"
-#define NETWORK_ALARM_FIRE "Fire Alarms"
+#define NETWORK_ALARM_FIRE "Fire Alarms"
#define NETWORK_ALARM_MOTION "Motion Alarms"
-#define NETWORK_ALARM_POWER "Power Alarms"
+#define NETWORK_ALARM_POWER "Power Alarms"
//singularity defines
#define STAGE_ONE 1
diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm
index fa1c3f9627b9..a3ce8adfbdd5 100644
--- a/code/datums/outfits/outfit.dm
+++ b/code/datums/outfits/outfit.dm
@@ -270,3 +270,7 @@
/decl/outfit/dd_SortValue()
return name
+
+// Stub for the sake of being able to make people spawn nude.
+/decl/outfit/naked
+ name = "Naked And Afraid"
\ No newline at end of file
diff --git a/code/datums/storage/subtypes_box.dm b/code/datums/storage/subtypes_box.dm
index 3803830d60f4..b94d406d1e6b 100644
--- a/code/datums/storage/subtypes_box.dm
+++ b/code/datums/storage/subtypes_box.dm
@@ -18,6 +18,9 @@
/datum/storage/box/animal_cube
can_hold = list(/obj/item/food/animal_cube)
+/datum/storage/box/large/metal
+ use_sound = 'sound/effects/closet_open.ogg'
+
/datum/storage/box/snappop
can_hold = list(/obj/item/toy/snappop)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index de511b041ee4..789d1706c70a 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -576,4 +576,4 @@
return TRUE
/obj/machinery/cryopod/proc/on_mob_spawn()
- playsound(src, 'sound/machines/ding.ogg', 30, 1)
\ No newline at end of file
+ playsound(src, 'sound/machines/ding.ogg', 30, 1)
diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm
index 3e0327cc03ad..81ea2fc50ed0 100644
--- a/code/game/machinery/holosign.dm
+++ b/code/game/machinery/holosign.dm
@@ -10,8 +10,9 @@
anchored = TRUE
obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED
directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":32}, "WEST":{"x":-32}}'
- var/lit = 0
+ var/lit = FALSE
var/on_icon = "sign_on"
+ var/sign_light_color = COLOR_CYAN_BLUE
uncreated_component_parts = list(
/obj/item/stock_parts/radio/receiver,
@@ -33,11 +34,11 @@
/obj/machinery/holosign/on_update_icon()
if (!lit || inoperable())
- icon_state = "sign_off"
+ icon_state = initial(icon_state)
set_light(0)
else
icon_state = on_icon
- set_light(1, 0.5, COLOR_CYAN_BLUE)
+ set_light(1, 0.5, sign_light_color)
/decl/public_access/public_variable/holosign_on
expected_type = /obj/machinery/holosign
@@ -68,6 +69,13 @@
desc = "Small wall-mounted holographic projector. This one reads SERVICE."
on_icon = "service"
+/obj/machinery/holosign/bar
+ name = "bar holosign"
+ desc = "Small wall-mounted holographic projector. This one reads OPEN."
+ icon_state = "barclosed"
+ on_icon = "baropen"
+ sign_light_color = COLOR_LIGHT_CYAN
+
////////////////////SWITCH///////////////////////////////////////
/obj/machinery/button/holosign
name = "holosign switch"
diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm
index 7482f522af6c..87e0136cd95f 100644
--- a/code/game/machinery/oxygen_pump.dm
+++ b/code/game/machinery/oxygen_pump.dm
@@ -280,4 +280,4 @@
if(lungs.is_bruised() && prob(30))
lungs.heal_damage(1)
else
- breather.suffocation_counter = max(breather.suffocation_counter - rand(1,5), 0)
\ No newline at end of file
+ breather.suffocation_counter = max(breather.suffocation_counter - rand(1,5), 0)
diff --git a/code/game/movietitles.dm b/code/game/movietitles.dm
index 90f5287221f8..e129ea1972b8 100644
--- a/code/game/movietitles.dm
+++ b/code/game/movietitles.dm
@@ -128,7 +128,7 @@ var/global/list/end_titles
titles += "
STAFF'S GOOD BOYS:
[english_list(goodboys)]
"
var/disclaimer = "
Sponsored by [global.using_map.company_name].
All rights reserved.
\
- This motion picture is protected under the copyright laws of the Sol Central Government
and other nations throughout the galaxy.
\
+ This motion picture is protected under the copyright laws of the system government
and other nations throughout the galaxy.
\
Colony of First Publication: [pick("Mars", "Luna", "Earth", "Venus", "Phobos", "Ceres", "Tiamat", "Ceti Epsilon", "Eos", "Pluto", "Ouere",\
"Lordania", "Kingston", "Cinu", "Yuklid V", "Lorriman", "Tersten", "Gaia")].
"
disclaimer += pick("Use for parody prohibited. PROHIBITED.",
@@ -146,4 +146,4 @@ var/global/list/end_titles
titles += "
"
titles += "[JOINTEXT(disclaimer)]"
- return titles
\ No newline at end of file
+ return titles
diff --git a/code/game/objects/items/circuitboards/computer/computer.dm b/code/game/objects/items/circuitboards/computer/computer.dm
index c013c88bdf5c..ff117e3375b3 100644
--- a/code/game/objects/items/circuitboards/computer/computer.dm
+++ b/code/game/objects/items/circuitboards/computer/computer.dm
@@ -120,4 +120,4 @@
/obj/item/stock_parts/circuitboard/guestpass
name = "circuitboard (guest pass terminal)"
- build_path = /obj/machinery/computer/guestpass
\ No newline at end of file
+ build_path = /obj/machinery/computer/guestpass
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index 40265fab29a1..fa29f4316653 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -453,3 +453,16 @@ var/global/list/all_gps_units = list()
"stripe-outside" = "#ffae00",
"stripe-inside" = "#9e7900"
)
+
+/obj/item/gps/security
+ color = "#5c0000"
+ decals = list(
+ "stripe-outside" = "#ff0000",
+ "stripe-inside" = "#800000"
+ )
+
+/obj/item/gps/security/hos
+ decals = list(
+ "stripe-outside" = "#ffae00",
+ "stripe-inside" = "#9e7900"
+ )
diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm
index 305f721f1730..34a48cec61b4 100644
--- a/code/game/objects/items/weapons/material/ashtray.dm
+++ b/code/game/objects/items/weapons/material/ashtray.dm
@@ -58,3 +58,6 @@
/obj/item/ashtray/glass
material = /decl/material/solid/glass
+
+/obj/item/ashtray/bronze
+ material = /decl/material/solid/metal/bronze
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index fa38daee6000..3ae0932a7075 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -166,6 +166,14 @@
/obj/item/box/ammo/blanks/WillContain()
return list(/obj/item/ammo_casing/shotgun/blank = 8)
+/obj/item/box/ammo/blanks/large
+ icon_state = "largebox"
+ w_class = ITEM_SIZE_LARGE
+ storage = /datum/storage/box/large/metal
+
+/obj/item/box/ammo/blanks/large/WillContain()
+ return list(/obj/item/ammo_casing/shotgun/blank = 16)
+
/obj/item/box/ammo/practiceshells
name = "box of practice shells"
/obj/item/box/ammo/practiceshells/WillContain()
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index 13c9162b87f9..2995bcc82700 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -1,7 +1,6 @@
/* Types of tanks!
* Contains:
* Oxygen
- * Anesthetic
* Air
* Hydrogen
* Emergency Oxygen
@@ -55,6 +54,9 @@
/obj/item/tank/hydrogen/empty
starting_pressure = list()
+/obj/item/tank/hydrogen/collector
+ starting_pressure = list(/decl/material/gas/hydrogen = 70)
+
/*
* Emergency Oxygen
*/
@@ -105,4 +107,4 @@
icon = 'icons/obj/items/tanks/tank_red.dmi'
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
starting_pressure = list(/decl/material/gas/nitrogen = 10 ATM)
- gas_volume = 180
\ No newline at end of file
+ gas_volume = 180
diff --git a/code/game/objects/random/subtypes/food.dm b/code/game/objects/random/subtypes/food.dm
index 36aa8a4a37e6..49c3a3dd0dce 100644
--- a/code/game/objects/random/subtypes/food.dm
+++ b/code/game/objects/random/subtypes/food.dm
@@ -194,3 +194,13 @@
/obj/item/food/plumphelmetbiscuit
)
return spawnable_choices
+
+/obj/random/mug
+ name = "random coffee cup"
+ desc = "A random coffee cup/mug."
+ icon = 'icons/obj/drink_glasses/coffecup.dmi'
+ icon_state = "coffeecup"
+
+/obj/random/mug/spawn_choices()
+ var/static/list/spawnable_choices = typesof(/obj/item/chems/drinks/glass2/coffeecup) - /obj/item/chems/drinks/glass2/coffeecup/custom
+ return spawnable_choices
diff --git a/code/game/objects/random/subtypes/tech.dm b/code/game/objects/random/subtypes/tech.dm
index a1b1ab86e65d..d04447d55c56 100644
--- a/code/game/objects/random/subtypes/tech.dm
+++ b/code/game/objects/random/subtypes/tech.dm
@@ -120,3 +120,20 @@
/obj/item/oxycandle
)
return spawnable_choices
+
+/obj/random/hardsuit
+ name = "random hardsuit"
+ desc = "This is a random hardsuit."
+ icon = 'icons/clothing/rigs/rig.dmi'
+ icon_state = ICON_STATE_WORLD
+
+/obj/random/hardsuit/spawn_choices()
+ var/static/list/spawnable_choices = list(
+ /obj/item/rig/light/hacker/unlocked = 4,
+ /obj/item/rig/industrial/unlocked = 5,
+ /obj/item/rig/eva/unlocked = 5,
+ /obj/item/rig/light/stealth/unlocked = 4,
+ /obj/item/rig/hazard/unlocked = 3,
+ /obj/item/rig/merc/empty/unlocked = 1
+ )
+ return spawnable_choices
diff --git a/code/game/turfs/floors/subtypes/floor_circuit.dm b/code/game/turfs/floors/subtypes/floor_circuit.dm
index 7684009c32a4..651ac3167adc 100644
--- a/code/game/turfs/floors/subtypes/floor_circuit.dm
+++ b/code/game/turfs/floors/subtypes/floor_circuit.dm
@@ -13,6 +13,10 @@
name = "mainframe base" // TODO: force name overriding flooring?
temperature = 263
+/turf/floor/bluegrid/cryo
+ initial_gas = list(/decl/material/gas/nitrogen = MOLES_CELLSTANDARD)
+ temperature = 73
+
/turf/floor/greengrid
name = "mainframe floor"
icon = 'icons/turf/flooring/circuit.dmi'
diff --git a/code/game/turfs/floors/subtypes/floor_tiled.dm b/code/game/turfs/floors/subtypes/floor_tiled.dm
index 33dc224c1966..76bdcef431df 100644
--- a/code/game/turfs/floors/subtypes/floor_tiled.dm
+++ b/code/game/turfs/floors/subtypes/floor_tiled.dm
@@ -10,6 +10,10 @@
icon_state = "dark"
_flooring = /decl/flooring/tiling/dark
+/turf/floor/tiled/dark/cryo
+ initial_gas = list(/decl/material/gas/nitrogen = MOLES_CELLSTANDARD)
+ temperature = 73
+
/turf/floor/tiled/dark/monotile
name = "floor"
icon_state = "monotiledark"
@@ -68,6 +72,10 @@
icon_state = "techfloor_gray"
_flooring = /decl/flooring/tiling/tech
+/turf/floor/tiled/techfloor/cryo
+ initial_gas = list(/decl/material/gas/nitrogen = MOLES_CELLSTANDARD)
+ temperature = 73
+
/turf/floor/tiled/monotile
name = "floor"
icon_state = "steel_monotile"
@@ -108,6 +116,10 @@
icon_state = "techfloor_grid"
_flooring = /decl/flooring/tiling/tech/grid
+/turf/floor/tiled/techfloor/grid/cryo
+ initial_gas = list(/decl/material/gas/nitrogen = MOLES_CELLSTANDARD)
+ temperature = 73
+
/turf/floor/tiled/airless
name = "airless floor"
initial_gas = null
diff --git a/code/game/turfs/walls/wall_natural.dm b/code/game/turfs/walls/wall_natural.dm
index 8b8fdab59083..b8ba4f36922b 100644
--- a/code/game/turfs/walls/wall_natural.dm
+++ b/code/game/turfs/walls/wall_natural.dm
@@ -236,4 +236,4 @@ var/global/_wall_chisel_skill = SKILL_CONSTRUCTION
if(length(S.base_materials))
return pick(S.base_materials)
//Otherwise, just use level strata
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/game/verbs/ignore.dm b/code/game/verbs/ignore.dm
index ee69faddf8a2..9b7435413868 100644
--- a/code/game/verbs/ignore.dm
+++ b/code/game/verbs/ignore.dm
@@ -41,4 +41,4 @@
if(check_rights(R_MOD|R_ADMIN, 0)) // Admins and moderators are not ignorable
return 0
return 1
- return 0
\ No newline at end of file
+ return 0
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 8ff55c421dea..e39ed6b84fa2 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -313,8 +313,7 @@
for(var/obj/machinery/rad_collector/Rad in SSmachines.machinery)
if(Rad.anchored)
if(!Rad.loaded_tank)
- Rad.loaded_tank = new /obj/item/tank/hydrogen(Rad)
- Rad.loaded_tank.air_contents.gas[/decl/material/gas/hydrogen] = 70
+ Rad.loaded_tank = new /obj/item/tank/hydrogen/collector(Rad)
Rad.drainratio = 0
if(!Rad.active)
Rad.toggle_power()
diff --git a/code/modules/atmospherics/atmos_primitives.dm b/code/modules/atmospherics/atmos_primitives.dm
index 6a09490b3251..89cf0ef6832b 100644
--- a/code/modules/atmospherics/atmos_primitives.dm
+++ b/code/modules/atmospherics/atmos_primitives.dm
@@ -500,9 +500,9 @@
status.Add("Chlorine contamination.")
if(nitrousoxide > 0.1) // Probably slightly less dangerous but still.
status.Add("N2O contamination.")
- if(hydrogen > 2.5) // Not too dangerous, but flammable.
+ if(hydrogen > 2.5) // Not too dangerous, but flammable.
status.Add("Hydrogen contamination.")
- if(carbondioxide > 5) // Not as dangerous until very large amount is present.
+ if(carbondioxide > 5) // Not as dangerous until a very large amount is present.
status.Add("CO2 concentration high.")
diff --git a/code/modules/backgrounds/citizenship/_citizenship.dm b/code/modules/backgrounds/citizenship/_citizenship.dm
index d6c349aa1edd..e16cc9455ac7 100644
--- a/code/modules/backgrounds/citizenship/_citizenship.dm
+++ b/code/modules/backgrounds/citizenship/_citizenship.dm
@@ -1,6 +1,7 @@
/decl/background_detail/citizenship
abstract_type = /decl/background_detail/citizenship
category = /decl/background_category/citizenship
+ var/ruling_body = "Other Faction"
var/capital
var/size_heading = "Systems"
var/size_value
diff --git a/code/modules/backgrounds/citizenship/citizenship_other.dm b/code/modules/backgrounds/citizenship/citizenship_other.dm
index d121a81af01a..cfeed30a29cf 100644
--- a/code/modules/backgrounds/citizenship/citizenship_other.dm
+++ b/code/modules/backgrounds/citizenship/citizenship_other.dm
@@ -14,3 +14,16 @@
description = "You do not possess any kind of official citizenship."
economic_power = 0
capital = "None"
+
+/decl/background_detail/citizenship/synthetic
+ name = "Stateless Drone"
+ uid = "stateless_drone"
+ description = "Drones are considered property in most systems. Thus, statelessness is ubiqtuous for them."
+ secondary_langs = list(
+ /decl/language/machine,
+ /decl/language/human/common,
+ /decl/language/sign
+ )
+
+/decl/background_detail/citizenship/synthetic/sanitize_background_name(new_name)
+ return sanitize_name(new_name, allow_numbers = TRUE)
diff --git a/code/modules/bodytype/_bodytype.dm b/code/modules/bodytype/_bodytype.dm
index fd6206eefa45..a11d1a1dd957 100644
--- a/code/modules/bodytype/_bodytype.dm
+++ b/code/modules/bodytype/_bodytype.dm
@@ -89,6 +89,8 @@ var/global/list/bodytypes_by_category = list()
var/z_flags = 0
/// Amount to shift overlays when lying. TODO: check if this is still needed with KEEP_TOGETHER
var/list/prone_overlay_offset
+ /// Set to TRUE to skip unit testing as a primary bodytype in a human. Generally for partial prosthetic models.
+ var/skip_organ_validation = FALSE
/// Per-bodytype per-zone message strings, see /mob/proc/get_hug_zone_messages
var/list/default_hug_message
@@ -552,7 +554,7 @@ var/global/list/bodytypes_by_category = list()
. += "non-list default metadata for [acc_decl.type]: [accessories[accessory] || "NULL"]"
var/list/tail_data = has_limbs[BP_TAIL]
- if(tail_data)
+ if(tail_data && !TYPE_IS_ABSTRACT(src))
var/obj/item/organ/external/tail/tail_organ = LAZYACCESS(tail_data, "path")
if(ispath(tail_organ, /obj/item/organ/external/tail))
var/decl/species/use_species = get_user_species_for_validation()
@@ -675,7 +677,7 @@ var/global/list/bodytypes_by_category = list()
var/organ_type = has_organ[organ_tag]
var/obj/item/organ/O = new organ_type(H, null, supplied_data)
if(organ_tag != O.organ_tag)
- warning("[O.type] has a default organ tag \"[O.organ_tag]\" that differs from the species' organ tag \"[organ_tag]\". Updating organ_tag to match.")
+ warning("[O.type] has a default organ tag \"[O.organ_tag]\" that differs from the bodytype organ tag \"[organ_tag]\". Updating organ_tag to match.")
O.organ_tag = organ_tag
H.add_organ(O, GET_EXTERNAL_ORGAN(H, O.parent_organ), FALSE, FALSE, skip_health_update = TRUE)
H.update_health()
diff --git a/code/modules/client/movement.dm b/code/modules/client/movement.dm
index 47b5ff8c256f..1e84cb1a5d5f 100644
--- a/code/modules/client/movement.dm
+++ b/code/modules/client/movement.dm
@@ -1,4 +1,3 @@
-
/client/New()
..()
dir = NORTH
diff --git a/code/modules/clothing/costumes/misc.dm b/code/modules/clothing/costumes/misc.dm
index 09b0b04ae8e7..cba9790788ad 100644
--- a/code/modules/clothing/costumes/misc.dm
+++ b/code/modules/clothing/costumes/misc.dm
@@ -127,3 +127,9 @@
desc = "A thick, layered grey undersuit lined with power cables. Feels a little like wearing an electrical storm."
icon = 'icons/clothing/jumpsuits/jumpsuit_psionic.dmi'
body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS
+
+/obj/item/clothing/costume/caretaker
+ name = "caretaker's jumpsuit"
+ desc = "A holy jumpsuit. Treat it well."
+ icon = 'icons/clothing/jumpsuits/caretaker.dmi'
+ bodytype_equip_flags = BODY_EQUIP_FLAG_HUMANOID
diff --git a/code/modules/clothing/costumes/rank.dm b/code/modules/clothing/costumes/rank.dm
index b2bc5a1fc940..f08fdefeb3bd 100644
--- a/code/modules/clothing/costumes/rank.dm
+++ b/code/modules/clothing/costumes/rank.dm
@@ -15,7 +15,7 @@
name = "head of personnel's suit"
icon = 'icons/clothing/uniform_hop_whimsy.dmi'
-/obj/item/clothing/costume/hosformalmale
+/obj/item/clothing/costume/hosformal
name = "head of security's formal uniform"
desc = "A male head of security's formal-wear, for special occasions."
icon = 'icons/clothing/uniform_hos_formal.dmi'
diff --git a/code/modules/clothing/jumpsuits/_jumpsuit.dm b/code/modules/clothing/jumpsuits/_jumpsuit.dm
index 205a8af7997a..21be4c2e731a 100644
--- a/code/modules/clothing/jumpsuits/_jumpsuit.dm
+++ b/code/modules/clothing/jumpsuits/_jumpsuit.dm
@@ -1,6 +1,6 @@
/obj/item/clothing/jumpsuit
name = "jumpsuit"
- desc = "The latest in space fashion."
+ desc = "The latest in utilitarian fashion."
icon = 'icons/clothing/jumpsuits/jumpsuit.dmi'
body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS
permeability_coefficient = 0.90
diff --git a/code/modules/clothing/masks/monitor.dm b/code/modules/clothing/masks/monitor.dm
index afdbbdd64194..46d60d8112c7 100644
--- a/code/modules/clothing/masks/monitor.dm
+++ b/code/modules/clothing/masks/monitor.dm
@@ -1,6 +1,6 @@
//IPC-face object for FPB.
/obj/item/clothing/mask/monitor
- name = "display monitor"
+ name = "unbranded display monitor"
desc = "A rather clunky old CRT-style display screen, fit for mounting on an optical output."
flags_inv = HIDEEYES
body_parts_covered = SLOT_EYES
diff --git a/code/modules/clothing/masks/smokable.dm b/code/modules/clothing/masks/smokable.dm
index 01cd25482a79..a9f621df4036 100644
--- a/code/modules/clothing/masks/smokable.dm
+++ b/code/modules/clothing/masks/smokable.dm
@@ -135,9 +135,10 @@
return
lit = TRUE
atom_damage_type = BURN
- if(REAGENT_VOLUME(reagents, /decl/material/liquid/fuel)) // the fuel explodes
+ var/explosive_power = round(REAGENT_VOLUME(reagents, /decl/material/liquid/fuel) / 5, 1)
+ if(explosive_power > 0)
var/datum/effect/effect/system/reagents_explosion/e = new()
- e.set_up(round(REAGENT_VOLUME(reagents, /decl/material/liquid/fuel) / 5, 1), get_turf(src), 0, 0)
+ e.set_up(explosive_power, get_turf(src), 0, 0)
e.start()
qdel(src)
return
diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm
index d36aa54c14dc..3812b8c92068 100644
--- a/code/modules/clothing/spacesuits/rig/suits/light.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/light.dm
@@ -64,6 +64,9 @@
/obj/item/rig_module/cooling_unit
)
+/obj/item/rig/light/hacker/unlocked
+ req_access = null
+
//The cybersuit is not space-proof. It does however, have good siemens_coefficient values
/obj/item/clothing/head/lightrig/hacker
name = "HUD"
@@ -90,3 +93,6 @@
/obj/item/rig_module/stealth_field,
/obj/item/rig_module/vision
)
+
+/obj/item/rig/light/stealth/unlocked
+ req_access = null
diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm
index 06c837cbe4a0..adab8b2e8d64 100644
--- a/code/modules/clothing/spacesuits/rig/suits/merc.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/merc.dm
@@ -51,6 +51,9 @@
/obj/item/rig_module/electrowarfare_suite,
)
+/obj/item/rig/merc/empty/unlocked
+ req_access = null
+
/obj/item/rig/merc/heavy
name = "crimson EOD hardsuit control module"
desc = "A blood-red hardsuit with heavy armoured plates. Judging by the abnormally thick plates, this one is for working with explosives."
diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm
index fe48b0e24b0d..97456e50ecee 100644
--- a/code/modules/clothing/spacesuits/rig/suits/station.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/station.dm
@@ -92,6 +92,9 @@
/obj/item/rig_module/cooling_unit
)
+/obj/item/rig/industrial/unlocked
+ req_access = null
+
/obj/item/rig/eva
name = "EVA hardsuit control module"
suit_type = "EVA hardsuit"
@@ -137,6 +140,9 @@
/obj/item/rig_module/cooling_unit
)
+/obj/item/rig/eva/unlocked
+ req_access = null
+
/obj/item/rig/ce
name = "advanced engineering hardsuit control module"
suit_type = "engineering hardsuit"
@@ -357,6 +363,9 @@
/obj/item/rig_module/cooling_unit
)
+/obj/item/rig/hazard/unlocked
+ req_access = null
+
/obj/item/rig/zero
name = "null suit control module"
suit_type = "null hardsuit"
diff --git a/code/modules/codex/categories/_materials.dm b/code/modules/codex/categories/_materials.dm
index 6509270555d4..cc138ce2dd81 100644
--- a/code/modules/codex/categories/_materials.dm
+++ b/code/modules/codex/categories/_materials.dm
@@ -22,6 +22,9 @@
var/list/reactant_values = list()
for(var/reactant_id in reaction.required_reagents)
var/decl/material/reactant = GET_DECL(reactant_id)
+ if(!istype(reactant))
+ log_error("Could not find /decl for [reactant_id], reaction type [reactiontype].")
+ continue
var/reactant_name = "[reactant.name]"
reactant_values += "[reaction.required_reagents[reactant_id]]u [reactant_name]"
mechanics_text += " [jointext(reactant_values, " + ")]"
diff --git a/code/modules/codex/categories/category_cultures.dm b/code/modules/codex/categories/category_cultures.dm
index 0aef22c0c0cd..84ccc0d6b841 100644
--- a/code/modules/codex/categories/category_cultures.dm
+++ b/code/modules/codex/categories/category_cultures.dm
@@ -1,5 +1,5 @@
/decl/codex_category/cultures
- name = "Places, Factions and Culture"
+ name = "Places, Factions, and Culture"
desc = "Prominent planets, cultures, factions and religions of known space."
/decl/codex_category/cultures/Populate()
diff --git a/code/modules/codex/categories/category_fusion_reaction.dm b/code/modules/codex/categories/category_fusion_reaction.dm
index ff61c4c392fc..715aee90cc2b 100644
--- a/code/modules/codex/categories/category_fusion_reaction.dm
+++ b/code/modules/codex/categories/category_fusion_reaction.dm
@@ -10,7 +10,15 @@
continue
var/decl/material/p_mat = GET_DECL(reaction.p_react)
+ if(!istype(p_mat))
+ log_error("Could not find /decl instance for [rtype]'s primary reactant [reaction.p_react || "NULL"].")
+ continue
+
var/decl/material/s_mat = GET_DECL(reaction.s_react)
+ if(!istype(s_mat))
+ log_error("Could not find /decl instance for [rtype]'s secondary reactant [reaction.s_react || "NULL"].")
+ continue
+
var/list/reaction_info = list()
reaction_info += "Fusion between [p_mat.name] and [s_mat.name] can be achieved with a plasma temperature of [T0C + reaction.minimum_reaction_temperature] Kelvin or higher."
reaction_info += "This reaction consumes [initial(reaction.energy_consumption)] heat unit\s and produces [reaction.energy_production] heat unit\s."
diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm
index 96d91b2e784d..4342ebf60d99 100644
--- a/code/modules/detectivework/tools/rag.dm
+++ b/code/modules/detectivework/tools/rag.dm
@@ -194,6 +194,14 @@
return
if(!can_ignite())
return
+ //also copied from matches
+ var/explosive_power = round(REAGENT_VOLUME(reagents, /decl/material/liquid/fuel) / 5, 1)
+ if(explosive_power > 0)
+ var/datum/effect/effect/system/reagents_explosion/e = new()
+ e.set_up(explosive_power, get_turf(src), 0, 0)
+ e.start()
+ qdel(src)
+ return
START_PROCESSING(SSobj, src)
set_light(2, 1, "#e38f46")
_on_fire = TRUE
diff --git a/code/modules/economy/cael/EFTPOS.dm b/code/modules/economy/cael/EFTPOS.dm
index 519938245c6d..d88132261a96 100644
--- a/code/modules/economy/cael/EFTPOS.dm
+++ b/code/modules/economy/cael/EFTPOS.dm
@@ -41,7 +41,16 @@
//by default, connect to the station account
//the user of the EFTPOS device can change the target account though, and no-one will be the wiser (except whoever's being charged)
- linked_account = station_account
+ linked_account = get_default_account()
+
+/obj/item/eftpos/proc/get_default_account()
+ return global.station_account
+
+/obj/item/eftpos/departmental
+ var/decl/department/default_department
+
+/obj/item/eftpos/departmental/get_default_account()
+ return (default_department && global.department_accounts[default_department]) || ..()
/obj/item/eftpos/proc/print_reference()
var/obj/item/paper/R = new(src.loc, null,
diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm
index 3cf18471cd43..6edfb41672b6 100644
--- a/code/modules/emotes/emote_define.dm
+++ b/code/modules/emotes/emote_define.dm
@@ -7,7 +7,7 @@
. = replacetext(., "$TARGET_THEM$", target_gender.him)
. = replacetext(., "$TARGET_THEIR$", target_gender.his)
. = replacetext(., "$TARGET_SELF$", target_gender.self)
- . = replacetext(., "$TARGET$", "\the [target]")
+ . = replacetext(., "$TARGET$", "[target]")
/proc/emote_replace_user_tokens(var/msg, var/atom/user)
. = msg
@@ -18,7 +18,7 @@
. = replacetext(., "$USER_THEM$", user_gender.him)
. = replacetext(., "$USER_THEIR$", user_gender.his)
. = replacetext(., "$USER_SELF$", user_gender.self)
- . = replacetext(., "$USER$", "\the [user]")
+ . = replacetext(., "$USER$", "[user]")
// Note about emote messages:
// - $USER$ / $TARGET$ will be replaced with the relevant name, in bold.
diff --git a/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm b/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm
index 221ee935055c..869920b3417f 100644
--- a/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm
+++ b/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm
@@ -123,6 +123,9 @@
floor_type = null
material = /decl/material/solid/stone/concrete
+/turf/wall/concrete/reinforced
+ reinf_material = /decl/material/solid/metal/steel
+
//Generic ruin
/datum/random_map/maze/concrete
wall_type = /turf/wall/concrete
diff --git a/code/modules/materials/definitions/solids/materials_solid_stone.dm b/code/modules/materials/definitions/solids/materials_solid_stone.dm
index 3bb5692d7769..d9a0ad5866d2 100644
--- a/code/modules/materials/definitions/solids/materials_solid_stone.dm
+++ b/code/modules/materials/definitions/solids/materials_solid_stone.dm
@@ -44,6 +44,15 @@
melting_point = T0C + 600
hardness = MAT_VALUE_RIGID + 5
+/decl/material/solid/stone/limestone
+ name = "limestone"
+ uid = "solid_limestone"
+ lore_text = "A pale sedimentary rock, often containing fossils. The cost of boosting it to orbit is almost universally much higher than the actual value of the material."
+ color = COLOR_OFF_WHITE
+ value = 1.5
+ melting_point = T0C + 600
+ hardness = MAT_VALUE_RIGID + 5
+
/decl/material/solid/stone/flint
name = "flint"
uid = "solid_flint"
diff --git a/code/modules/materials/stack_types/material_stack_misc.dm b/code/modules/materials/stack_types/material_stack_misc.dm
index afd7fbfe51ab..64017b9fdd6e 100644
--- a/code/modules/materials/stack_types/material_stack_misc.dm
+++ b/code/modules/materials/stack_types/material_stack_misc.dm
@@ -82,6 +82,16 @@
crafting_stack_type = /obj/item/stack/material/puck
can_be_pulverized = TRUE
+/obj/item/stack/material/crystal
+ name = "crystal"
+ singular_name = "crystal"
+ plural_name = "crystals"
+ icon_state = "sheet-phoron"
+ plural_icon_state = "sheet-phoron-mult"
+ max_icon_state = "sheet-phoron-max"
+ stack_merge_type = /obj/item/stack/material/crystal
+ can_be_pulverized = TRUE
+
/obj/item/stack/material/segment
name = "segments"
singular_name = "segment"
diff --git a/mods/species/ascent/datum/descriptors.dm b/code/modules/mob/living/human/descriptors/descriptors_body_length.dm
similarity index 100%
rename from mods/species/ascent/datum/descriptors.dm
rename to code/modules/mob/living/human/descriptors/descriptors_body_length.dm
diff --git a/code/modules/mob/living/human/human.dm b/code/modules/mob/living/human/human.dm
index 0fe3d1bc19cc..ee819f1252e6 100644
--- a/code/modules/mob/living/human/human.dm
+++ b/code/modules/mob/living/human/human.dm
@@ -611,7 +611,7 @@
for(var/obj/item/organ/external/E in get_external_organs())
E.sanitize_sprite_accessories()
- for(var/acc_cat in root_bodytype.default_sprite_accessories)
+ for(var/acc_cat in root_bodytype?.default_sprite_accessories)
var/decl/sprite_accessory_category/acc_cat_decl = GET_DECL(acc_cat)
if(!acc_cat_decl.always_apply_defaults)
continue
diff --git a/code/modules/multiz/level_data.dm b/code/modules/multiz/level_data.dm
index d291f1194227..5d6dbe0d957c 100644
--- a/code/modules/multiz/level_data.dm
+++ b/code/modules/multiz/level_data.dm
@@ -678,6 +678,8 @@
///Returns the instance of the base area for this level
/datum/level_data/proc/get_base_area_instance()
+ if(!base_area)
+ return null
var/area/found = locate(base_area)
if(found)
return found
diff --git a/code/modules/overmap/ftl_shunt/core.dm b/code/modules/overmap/ftl_shunt/core.dm
index 93592ecdb29c..5ad561f38a01 100644
--- a/code/modules/overmap/ftl_shunt/core.dm
+++ b/code/modules/overmap/ftl_shunt/core.dm
@@ -554,7 +554,7 @@
/decl/material/gas/hydrogen/deuterium = 25000,
/decl/material/gas/hydrogen = 25000,
/decl/material/solid/exotic_matter = 50000
- )
+ )
var/obj/item/fuel_assembly/fuel
var/obj/machinery/ftl_shunt/core/master
var/max_fuel = 0
@@ -654,4 +654,7 @@
icon = 'icons/obj/items/stock_parts/stock_parts.dmi'
icon_state = "smes_coil"
color = COLOR_YELLOW
- matter = list(/decl/material/solid/exotic_matter = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/plasteel = MATTER_AMOUNT_PRIMARY)
+ matter = list(
+ /decl/material/solid/exotic_matter = MATTER_AMOUNT_REINFORCEMENT,
+ /decl/material/solid/metal/plasteel = MATTER_AMOUNT_PRIMARY
+ )
diff --git a/code/modules/power/admin_setup_engine.dm b/code/modules/power/admin_setup_engine.dm
index e5aae9005847..4297a4ec897b 100644
--- a/code/modules/power/admin_setup_engine.dm
+++ b/code/modules/power/admin_setup_engine.dm
@@ -159,4 +159,4 @@ var/global/list/engine_setup_markers = list()
return ENGINE_SETUP_WARNING
found.activate()
found.update_icon()
- return ENGINE_SETUP_OK
\ No newline at end of file
+ return ENGINE_SETUP_OK
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index dc9234516221..d9e93ff2da18 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -330,6 +330,9 @@
maxcharge = 500
w_class = ITEM_SIZE_SMALL //Perhaps unwise.
+/obj/item/cell/gun/empty
+ charge = 0
+
/obj/item/cell/gun/on_update_icon()
. = ..()
//Color the battery charging overlay against the percentage of the battery capacity. However the index of gradient() is set to 1, instead of 100, so we divide it by 100. Colors were chosen by the sprite artist.
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index f85c32b16eb0..cd70fdbc44a5 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -4,14 +4,14 @@ var/global/list/rad_collectors = list()
/obj/machinery/rad_collector
name = "radiation collector array"
- desc = "A device which uses radiation and hydrogen to produce power."
+ desc = "A device which uses radiation and a reactant to produce power."
icon = 'icons/obj/machines/rad_collector.dmi'
icon_state = "ca"
anchored = FALSE
density = TRUE
initial_access = list(access_engine_equip)
max_health = 100
- var/obj/item/tank/hydrogen/loaded_tank = null
+ var/obj/item/tank/loaded_tank = null
var/max_safe_temp = 1000 + T0C
var/melted
@@ -80,22 +80,22 @@ var/global/list/rad_collectors = list()
return FALSE
. = TRUE
if((stat & BROKEN) || melted)
- to_chat(user, "\The [src] is completely destroyed!")
+ to_chat(user, SPAN_WARNING("\The [src] is completely destroyed!"))
if(!src.locked)
toggle_power()
user.visible_message("[user.name] turns \the [src] [active? "on":"off"].", \
"You turn \the [src] [active? "on":"off"].")
investigate_log("turned [active?"on":"off"] by [user.key]. [loaded_tank?"Fuel: [round(loaded_tank.air_contents.gas[/decl/material/gas/hydrogen]/0.29)]%":"It is empty"].","singulo")
else
- to_chat(user, "The controls are locked!")
+ to_chat(user, SPAN_WARNING("The controls are locked!"))
/obj/machinery/rad_collector/attackby(obj/item/used_item, mob/user)
- if(istype(used_item, /obj/item/tank/hydrogen))
+ if(istype(used_item, /obj/item/tank))
if(!src.anchored)
- to_chat(user, "\The [src] needs to be secured to the floor first.")
+ to_chat(user, SPAN_WARNING("\The [src] needs to be secured to the floor first."))
return TRUE
if(src.loaded_tank)
- to_chat(user, "There's already a tank loaded.")
+ to_chat(user, SPAN_WARNING("There's already a tank loaded."))
return TRUE
if(!user.try_unequip(used_item, src))
return TRUE
@@ -108,11 +108,11 @@ var/global/list/rad_collectors = list()
return TRUE
else if(IS_WRENCH(used_item))
if(loaded_tank)
- to_chat(user, "Remove the tank first.")
+ to_chat(user, SPAN_NOTICE("Remove the tank first."))
return TRUE
for(var/obj/machinery/rad_collector/R in get_turf(src))
if(R != src)
- to_chat(user, "You cannot install more than one collector on the same spot.")
+ to_chat(user, SPAN_WARNING("You cannot install more than one collector on the same spot."))
return TRUE
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
src.anchored = !src.anchored
@@ -129,7 +129,7 @@ var/global/list/rad_collectors = list()
src.locked = 0 //just in case it somehow gets locked
to_chat(user, SPAN_WARNING("The controls can only be locked when \the [src] is active."))
else
- to_chat(user, "Access denied!")
+ to_chat(user, SPAN_WARNING("Access denied!"))
return TRUE
return ..()
@@ -164,12 +164,11 @@ var/global/list/rad_collectors = list()
/obj/machinery/rad_collector/proc/eject()
locked = 0
- var/obj/item/tank/hydrogen/Z = src.loaded_tank
- if (!Z)
+ if (!loaded_tank)
return
- Z.dropInto(loc)
- Z.reset_plane_and_layer()
- src.loaded_tank = null
+ loaded_tank.dropInto(loc)
+ loaded_tank.reset_plane_and_layer()
+ loaded_tank = null
if(active)
toggle_power()
else
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 97a0d08fa836..26a7eb80a5fb 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -284,6 +284,11 @@ var/global/list/singularities = list()
if(last_pixel_x != default_pixel_x || last_pixel_y != default_pixel_y)
reset_offsets(0)
+/obj/effect/singularity/proc/pulse()
+ for(var/obj/machinery/rad_collector/R in global.rad_collectors)
+ if (get_dist(R, src) <= 15) //Better than using orange() every process.
+ R.receive_pulse(energy)
+
/obj/effect/singularity/singularity_act(S, size)
if(current_stage.stage_size <= size)
var/gain = (energy/2)
diff --git a/code/modules/random_map/noise/noise.dm b/code/modules/random_map/noise/noise.dm
index 15f6277f693a..91667bc86faf 100644
--- a/code/modules/random_map/noise/noise.dm
+++ b/code/modules/random_map/noise/noise.dm
@@ -152,6 +152,7 @@
if(has_neighbor_with_path(x, y, get_appropriate_path(map[mapcell]), TRUE))
continue
map[mapcell] = map[pick(get_neighbors(x, y, TRUE))]
+ CHECK_TICK
#define CHECK_NEIGHBOR_FOR_PATH(X, Y) \
TRANSLATE_AND_VERIFY_COORD(X,Y);\
diff --git a/code/modules/reagents/chems/chems_medicines.dm b/code/modules/reagents/chems/chems_medicines.dm
index 6578646b9e28..b771084ef239 100644
--- a/code/modules/reagents/chems/chems_medicines.dm
+++ b/code/modules/reagents/chems/chems_medicines.dm
@@ -30,10 +30,11 @@
value = 1.5
exoplanet_rarity_gas = MAT_RARITY_EXOTIC
uid = "chem_antirads"
+ var/antirad_power = 30
/decl/material/liquid/antirads/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder)
. = ..()
- M.radiation = max(M.radiation - 30 * removed, 0)
+ M.radiation = max(M.radiation - antirad_power * removed, 0)
/decl/material/liquid/brute_meds
name = "styptic powder"
diff --git a/code/modules/reagents/cocktails.dm b/code/modules/reagents/cocktails.dm
index fd688adbcd92..6a04df74b4e3 100644
--- a/code/modules/reagents/cocktails.dm
+++ b/code/modules/reagents/cocktails.dm
@@ -226,7 +226,7 @@
)
/decl/cocktail/toxins_special
- name = "H2 Special"
+ name = "Toxins Special"
description = "Raise a glass to the bomb technicians of yesteryear, wherever their ashes now reside."
ratios = list(
/decl/material/liquid/alcohol/rum = 1,
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm b/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm
index d4d7e5a425be..dd072542c416 100644
--- a/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm
+++ b/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm
@@ -65,6 +65,12 @@
/obj/item/box/glasses/mug/WillContain()
return list(/obj/item/chems/drinks/glass2/mug = max(1, storage?.storage_slots))
+/obj/item/box/glasses/coffeecup/WillContain()
+ return list(/obj/item/chems/drinks/glass2/coffeecup = max(1, storage?.storage_slots))
+
+/obj/item/box/glasses/teacup/WillContain()
+ return list(/obj/item/chems/drinks/glass2/coffeecup/teacup = max(1, storage?.storage_slots))
+
/obj/item/box/glasses/wine/WillContain()
return list(/obj/item/chems/drinks/glass2/wine = max(1, storage?.storage_slots))
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index bca089ca6fdd..fd4593aee2bd 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -383,6 +383,14 @@
add_to_reagents(/decl/material/liquid/amphetamines, 2 * vol_third)
return ..()
+/obj/item/chems/syringe/brute_meds
+ desc = "Contains drugs for treating brute trauma."
+ mode = SYRINGE_INJECT
+
+/obj/item/chems/syringe/brute_meds/populate_reagents()
+ add_to_reagents(/decl/material/liquid/brute_meds, REAGENT_MAXIMUM_VOLUME(reagents))
+ return ..()
+
// TG ports
/obj/item/chems/syringe/advanced
diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm
index c040fe8c780c..394c6abd75b3 100644
--- a/code/modules/species/species.dm
+++ b/code/modules/species/species.dm
@@ -118,7 +118,9 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200
var/breath_type = /decl/material/gas/oxygen // Non-oxygen gas breathed, if any.
/// Material types considered noticeably poisonous when inhaled (ie. updates the toxins indicator on the HUD).
/// This is an associative list for speed.
- var/poison_types = list(/decl/material/gas/chlorine = TRUE)
+ var/poison_types = list(
+ /decl/material/gas/chlorine = TRUE
+ )
var/exhale_type = /decl/material/gas/carbon_dioxide // Exhaled gas type.
var/blood_reagent = /decl/material/liquid/blood
diff --git a/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm b/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm
index c56e354022c8..c2d373859706 100644
--- a/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm
+++ b/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm
@@ -12,6 +12,10 @@
var/active = 0
var/drill_time = 10
var/turf/drilling_turf
+ matter = list(
+ /decl/material/solid/metal/plasteel/ocp = MATTER_AMOUNT_PRIMARY,
+ /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_REINFORCEMENT,
+ )
/obj/machinery/giga_drill/physical_attack_hand(mob/user)
if(active)
diff --git a/code/modules/xenoarcheaology/finds/find_types/_find.dm b/code/modules/xenoarcheaology/finds/find_types/_find.dm
index 4b04f9a04d71..5d855be5c4ba 100644
--- a/code/modules/xenoarcheaology/finds/find_types/_find.dm
+++ b/code/modules/xenoarcheaology/finds/find_types/_find.dm
@@ -2,7 +2,7 @@ var/global/list/responsive_carriers = list(
/decl/material/solid/carbon = "Trace organic cells",
/decl/material/solid/potassium = "Long exposure particles",
/decl/material/liquid/fuel/hydrazine = "Trace water particles",
- /decl/material/gas/ammonia = "Crystalline structures",
+ /decl/material/gas/ammonia = "Crystalline structures",
/decl/material/liquid/mercury = "Metallic derivative",
/decl/material/solid/metal/iron = "Metallic composite",
/decl/material/gas/chlorine = "Metamorphic/igneous rock composite",
diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm
index 2a0cc80fdbb1..9e334a8d1477 100644
--- a/code/unit_tests/mob_tests.dm
+++ b/code/unit_tests/mob_tests.dm
@@ -24,6 +24,8 @@
T = locate(/turf/space)
var/datum/mob_snapshot/dummy_appearance = new
for(var/decl/bodytype/bodytype in decls_repository.get_decls_of_subtype_unassociated(/decl/bodytype))
+ if(bodytype.skip_organ_validation)
+ continue
var/decl/species/species = bodytype.get_user_species_for_validation()
if(!species)
continue
@@ -208,6 +210,7 @@
var/msg = "Damage taken: [ending_damage] out of [damage_amount] || expected: [expected_msg] \[Overall Health:[ending_health] (Initial: [initial_health]\]"
if(failure)
+ msg += " || species: [H.get_species()?.type || "NULL"] || bodytype: [H.get_bodytype()?.type || "NULL"]"
fail(msg)
else
pass(msg)
@@ -305,6 +308,8 @@
var/failed = FALSE
var/datum/mob_snapshot/dummy_appearance = new
for(var/decl/bodytype/bodytype in decls_repository.get_decls_of_subtype_unassociated(/decl/bodytype))
+ if(bodytype.skip_organ_validation)
+ continue
var/decl/species/species = bodytype.get_user_species_for_validation()
if(!species)
continue
diff --git a/code/unit_tests/organ_tests.dm b/code/unit_tests/organ_tests.dm
index 72d20645b58b..69f4266c6b49 100644
--- a/code/unit_tests/organ_tests.dm
+++ b/code/unit_tests/organ_tests.dm
@@ -118,6 +118,8 @@
var/failcount = 0
var/datum/mob_snapshot/dummy_appearance = new
for(var/decl/bodytype/bodytype in decls_repository.get_decls_of_subtype_unassociated(/decl/bodytype))
+ if(bodytype.skip_organ_validation)
+ continue
var/decl/species/species = bodytype.get_user_species_for_validation()
if(!species)
continue
@@ -255,6 +257,8 @@
var/failcount = 0
var/datum/mob_snapshot/dummy_appearance = new
for(var/decl/bodytype/bodytype in decls_repository.get_decls_of_subtype_unassociated(/decl/bodytype))
+ if(bodytype.skip_organ_validation)
+ continue
var/decl/species/species = bodytype.get_user_species_for_validation()
if(!species)
continue
diff --git a/code/unit_tests/unique_tests.dm b/code/unit_tests/unique_tests.dm
index cef4aba20aab..c0c100bcd7c2 100644
--- a/code/unit_tests/unique_tests.dm
+++ b/code/unit_tests/unique_tests.dm
@@ -181,9 +181,9 @@
continue
group_by(decls_by_uid, decl_instance.uid, decl_type)
- var/number_of_issues = number_of_issues(decls_by_uid, "Language UIDs")
+ var/number_of_issues = number_of_issues(decls_by_uid, "/decl UIDs")
if(number_of_issues)
- fail("[number_of_issues] issue\s with decl UIDs found.")
+ fail("[number_of_issues] issue\s with /decl UIDs found.")
else
pass("All decl UIDs are unique.")
return TRUE
diff --git a/icons/obj/holosign.dmi b/icons/obj/holosign.dmi
index cf1781d4235b..a4493a5ee3e6 100644
Binary files a/icons/obj/holosign.dmi and b/icons/obj/holosign.dmi differ
diff --git a/mods/content/xenobiology/species/golem.dm b/mods/content/xenobiology/species/golem.dm
index 51b9a2046e88..afb79c1f4cad 100644
--- a/mods/content/xenobiology/species/golem.dm
+++ b/mods/content/xenobiology/species/golem.dm
@@ -36,7 +36,7 @@
force_background_info = list(
/decl/background_category/heritage = /decl/background_detail/heritage/hidden/cultist,
/decl/background_category/homeworld = /decl/background_detail/location/stateless,
- /decl/background_category/citizenship = /decl/background_detail/citizenship/other,
+ /decl/background_category/citizenship = /decl/background_detail/citizenship/synthetic,
/decl/background_category/faction = /decl/background_detail/faction/other
)
diff --git a/mods/species/adherent/datum/species.dm b/mods/species/adherent/datum/species.dm
index 89913e40651c..a9130f4fe2f4 100644
--- a/mods/species/adherent/datum/species.dm
+++ b/mods/species/adherent/datum/species.dm
@@ -56,7 +56,7 @@
available_background_info = list(
/decl/background_category/citizenship = list(
- /decl/background_detail/citizenship/other
+ /decl/background_detail/citizenship/synthetic
),
/decl/background_category/heritage = list(
/decl/background_detail/heritage/adherent
diff --git a/mods/species/ascent/_ascent.dme b/mods/species/ascent/_ascent.dme
index acb7c9b9a93e..63f077b54d9e 100644
--- a/mods/species/ascent/_ascent.dme
+++ b/mods/species/ascent/_ascent.dme
@@ -7,7 +7,6 @@
#include "datum\antagonist.dm"
#include "datum\codex.dm"
#include "datum\culture.dm"
-#include "datum\descriptors.dm"
#include "datum\emotes.dm"
#include "datum\languages.dm"
#include "datum\species.dm"
diff --git a/mods/species/utility_frames/species.dm b/mods/species/utility_frames/species.dm
index 367ddeccad7f..5de54ba13040 100644
--- a/mods/species/utility_frames/species.dm
+++ b/mods/species/utility_frames/species.dm
@@ -36,7 +36,8 @@
/decl/pronouns/neuter
)
available_background_info = list(
- /decl/background_category/heritage = list(/decl/background_detail/heritage/synthetic)
+ /decl/background_category/citizenship = list(/decl/background_detail/citizenship/synthetic),
+ /decl/background_category/heritage = list(/decl/background_detail/heritage/synthetic)
)
exertion_effect_chance = 10
diff --git a/nebula.dme b/nebula.dme
index ce318ce3d015..2a3e1f2d4153 100644
--- a/nebula.dme
+++ b/nebula.dme
@@ -2921,6 +2921,7 @@
#include "code\modules\mob\living\human\whisper.dm"
#include "code\modules\mob\living\human\descriptors\_descriptors.dm"
#include "code\modules\mob\living\human\descriptors\descriptors_age.dm"
+#include "code\modules\mob\living\human\descriptors\descriptors_body_length.dm"
#include "code\modules\mob\living\human\descriptors\descriptors_generic.dm"
#include "code\modules\mob\living\maneuvers\_maneuver.dm"
#include "code\modules\mob\living\maneuvers\maneuver_leap.dm"
diff --git a/tools/map_migrations/4912_unused_clothes_removal.txt b/tools/map_migrations/4912_unused_clothes_removal.txt
index 553a95bd086a..0d7f70e7ceed 100644
--- a/tools/map_migrations/4912_unused_clothes_removal.txt
+++ b/tools/map_migrations/4912_unused_clothes_removal.txt
@@ -1,3 +1,2 @@
/obj/item/clothing/jumpsuit/vice/@SUBTYPES : @DELETE
/obj/item/clothing/jumpsuit/johnny/@SUBTYPES : @DELETE
-/obj/item/clothing/jumpsuit/caretaker/@SUBTYPES : @DELETE
\ No newline at end of file