From 30db9f83530855a9c97268f9c29c82b7ae7f8867 Mon Sep 17 00:00:00 2001 From: Yobrocharlie Date: Mon, 20 Apr 2026 09:05:30 -1000 Subject: [PATCH 001/282] Changes the antag gear spawner (#95771) ## About The Pull Request from the closed snowdin pr that was closed due to apathy. everything on the table is up for discussion and subject to change ## Why It's Good For The Game As of the itme of writing this for something called antag gear spawner the best thing you can hope to get is a syndicate toolbox or 15 raw diamonds, this changes that by adding instead just actual antag gear but not real antag gear- more so just loot in general. ## Changelog massive change just look at changed files :cl: add: added more things to the antag gear spawner /:cl: --- .../objects/effects/spawners/random/exotic.dm | 90 ++++++++++++++----- code/game/objects/items/emags.dm | 3 + 2 files changed, 72 insertions(+), 21 deletions(-) diff --git a/code/game/objects/effects/spawners/random/exotic.dm b/code/game/objects/effects/spawners/random/exotic.dm index 901bb06cee78..500d0832e4c1 100644 --- a/code/game/objects/effects/spawners/random/exotic.dm +++ b/code/game/objects/effects/spawners/random/exotic.dm @@ -43,35 +43,61 @@ ) /obj/effect/spawner/random/exotic/antag_gear_weak - name = "antag gear weak" + name = "loot weak" icon_state = "syndi_toolbox" - loot = list( - /obj/item/storage/medkit/regular = 45, - /obj/item/storage/medkit/toxin = 35, - /obj/item/storage/medkit/brute = 27, - /obj/item/storage/medkit/fire = 27, - /obj/item/storage/toolbox/syndicate = 12, - /obj/item/borg/upgrade/diamond_drill = 3, - /obj/item/knife/butcher = 14, - /obj/item/clothing/glasses/night = 10, - /obj/item/pickaxe/drill/diamonddrill = 6, - ) - -/obj/effect/spawner/random/exotic/antag_gear - name = "antag gear" - icon_state = "esword" loot = list( /obj/item/clothing/glasses/science/night = 15, - /obj/item/shield/riot = 12, + /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 10, + /obj/item/storage/toolbox/syndicate = 10, + /obj/item/shield/riot = 10, + /obj/item/storage/box/syndie_kit/chameleon = 10, + /obj/item/knife/combat = 10, + /obj/item/grenade/clusterbuster/smoke = 10, /obj/item/stack/sheet/mineral/diamond{amount = 15} = 5, /obj/item/stack/sheet/mineral/uranium{amount = 15} = 5, /obj/item/stack/sheet/mineral/plasma{amount = 15} = 5, /obj/item/stack/sheet/mineral/gold{amount = 15} = 5, - /obj/item/grenade/clusterbuster/smoke = 15, - /obj/item/clothing/under/chameleon = 13, - /obj/item/knife/combat = 10, /obj/item/implantcase/deathrattle = 5, - /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 1, + ) + +/obj/effect/spawner/random/exotic/antag_gear + name = "antag gear" + icon_state = "esword" + loot = list( + /obj/item/storage/box/stockparts/deluxe = 13, + /obj/item/storage/box/survival/syndie = 9, + /obj/item/reagent_containers/spray/syndicate = 9, + /obj/item/flashlight/lantern/syndicate = 5, + /obj/item/storage/box/evilmeds = 5, + /obj/item/storage/box/syndie_kit/space = 5, + /obj/item/gun/ballistic/automatic/pistol/m1911 = 5,//replaces makarov + /obj/item/climbing_hook/syndicate = 5, + /obj/item/dualsaber/toy = 5, + /obj/item/card/emag/blue = 5, + /obj/item/storage/box/syndie_kit/imp_storage = 5, + /obj/item/storage/box/syndie_kit/imp_radio = 5, + /obj/item/storage/box/alchemist_random_chems = 5, + /obj/item/gun/ballistic/automatic/smartgun = 4, + /obj/item/autosurgeon/syndicate/emaggedsurgerytoolset/single_use = 3, + /obj/item/mod/module/energy_shield/prototype = 2, + /obj/item/mod/module/jetpack/advanced = 2, + /obj/item/mod/module/visor/night = 2, + /obj/item/mod/module/storage/syndicate = 2, + /obj/item/autosurgeon/syndicate/anti_stun/single_use = 2, + /obj/item/mod/module/jetpack/advanced = 2, + /obj/item/melee/energy/sword/surplus = 1, + /obj/item/mod/control/pre_equipped/responsory/inquisitory/syndie/less_mods = 1, + /obj/item/gun/ballistic/automatic/napad = 1, + /obj/effect/spawner/random/exotic/antag_sub_spawner = 1, + /obj/item/card/emag/blue = 1, + ) + +/obj/effect/spawner/random/exotic/antag_sub_spawner + name = "antag gear sub spawner" + loot = list( + /obj/item/storage/box/stockparts/deluxe = 98, + /obj/item/storage/box/syndicate/bundle_b = 1, + /obj/item/storage/box/syndicate/bundle_a = 1, ) /obj/effect/spawner/random/exotic/snow_gear @@ -90,3 +116,25 @@ /obj/structure/mecha_wreckage/ripley = 3, /obj/vehicle/sealed/mecha/ripley/mining = 1, ) + +/obj/item/mod/module/energy_shield/prototype + name = "MOD prototype energy shield" + desc = "An early prototype of energy shield adapted for use inside of a MOD, the energy shield before this saw \ + extensive use in now defunct construction, combat, and mining exosuits with exosuits being something between a \ + modsuit and a mech with most still functioning exosuits either being in a museaum or a military parade" + recharge_start_delay = 30 SECONDS + max_charges = 2 + charge_increment_delay = 30 SECONDS + shield_icon = "shield-yellow" + +/obj/item/mod/control/pre_equipped/responsory/inquisitory/syndie/less_mods + starting_frequency = null + req_access = null + applied_cell = /obj/item/stock_parts/power_store/cell/super + insignia_type = /obj/item/mod/module/insignia/security + theme = /datum/mod_theme/responsory/traitor + applied_modules = list( + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/pathfinder, + ) diff --git a/code/game/objects/items/emags.dm b/code/game/objects/items/emags.dm index 9bce1d09fdd0..96e5ca19d2f7 100644 --- a/code/game/objects/items/emags.dm +++ b/code/game/objects/items/emags.dm @@ -86,6 +86,9 @@ color = rgb(40, 130, 255) prox_check = FALSE +/obj/item/card/emag/blue + color = rgb(40, 130, 255) + /obj/item/card/emag/halloween name = "hack-o'-lantern" desc = "It's a pumpkin with a cryptographic sequencer sticking out." From 8528022a7877bb1e951bf5d71505e59a134dd5e3 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 19:05:53 +0000 Subject: [PATCH 002/282] Automatic changelog for PR #95771 [ci skip] --- html/changelogs/AutoChangeLog-pr-95771.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95771.yml diff --git a/html/changelogs/AutoChangeLog-pr-95771.yml b/html/changelogs/AutoChangeLog-pr-95771.yml new file mode 100644 index 000000000000..9bd2285a9bb5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95771.yml @@ -0,0 +1,4 @@ +author: "Yobrocharlie" +delete-after: True +changes: + - rscadd: "added more things to the antag gear spawner" \ No newline at end of file From a61404714771b09fe2885e3710763117755c0eb0 Mon Sep 17 00:00:00 2001 From: LT3 <83487515+lessthnthree@users.noreply.github.com> Date: Mon, 20 Apr 2026 12:20:43 -0700 Subject: [PATCH 003/282] Fixes materials market delivery crate (#95813) ## About The Pull Request Fixes materials orders being delivered in a box instead of a crate. The crate is billed as part of the order, subtracted from the order value, and boxes aren't eligible for the 200cr return credit. This results in a loss of 400 credits if there is an error in the order and the manifest is correctly stamped denied. ## Why It's Good For The Game Fixes materials orders correctly stamped 'Denied' resulting in a loss of 400 credits. ## Changelog :cl: LT3 fix: Fixed loss of credits for correctly denied minerals market cargo manifest fix: Cargo budget materials market orders arrive in crates as expected /:cl: --- code/modules/cargo/order.dm | 5 +++++ code/modules/cargo/packs/_packs.dm | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index c6a8166ef69c..af2f2f655eb4 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -221,6 +221,11 @@ /datum/supply_order/disposable/materials/get_final_cost() return (..() + CARGO_CRATE_VALUE) +/// Custom material order to append cargo crate value to the final manifest cost +/datum/supply_order/disposable/materials/generateManifest(obj/container, owner, packname, cost) + cost += CARGO_CRATE_VALUE + return ..() + #undef MANIFEST_ERROR_CHANCE #undef MANIFEST_ERROR_NAME #undef MANIFEST_ERROR_CONTENTS diff --git a/code/modules/cargo/packs/_packs.dm b/code/modules/cargo/packs/_packs.dm index dc63b5f43e67..859cb7a99f0b 100644 --- a/code/modules/cargo/packs/_packs.dm +++ b/code/modules/cargo/packs/_packs.dm @@ -139,7 +139,7 @@ name = "materials order" crate_name = "galactic materials market delivery crate" access = FALSE - crate_type = /obj/structure/closet/crate/cardboard + crate_type = /obj/structure/closet/crate/cargo/mining /datum/supply_pack/custom/minerals/New(purchaser, cost, list/contains) . = ..() From 442ebb8e9a95a9b0bf43b47e660ea42b67a1c850 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 19:21:03 +0000 Subject: [PATCH 004/282] Automatic changelog for PR #95813 [ci skip] --- html/changelogs/AutoChangeLog-pr-95813.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95813.yml diff --git a/html/changelogs/AutoChangeLog-pr-95813.yml b/html/changelogs/AutoChangeLog-pr-95813.yml new file mode 100644 index 000000000000..ed6d79f72af5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95813.yml @@ -0,0 +1,5 @@ +author: "LT3" +delete-after: True +changes: + - bugfix: "Fixed loss of credits for correctly denied minerals market cargo manifest" + - bugfix: "Cargo budget materials market orders arrive in crates as expected" \ No newline at end of file From 643e601daf04520135b5a82e5a33dac47e60b4dc Mon Sep 17 00:00:00 2001 From: Pumpkinoe <61306435+Pumpkinoe@users.noreply.github.com> Date: Tue, 21 Apr 2026 11:27:04 +1200 Subject: [PATCH 005/282] Modernizes Central Command's ERT Wing [READY] (#95727) ## About The Pull Request The ERT wing of Centcom (the west-most part with the briefing room, commander's office and the ferry bay) has been updated to make it more up-to-date with the decoration tools that we have, as well as make it easier for admins to control where their ERTs go. Case in point: image The pod bay now has direct access to the briefing room! This door starts bolted by default, but there's also four handy buttons in officer's portion of the briefing room that control bolts for the hallway doors, pod bay doors, the quick access into the briefing room, _and_ a button that open/closes the hallway shutters as well. There's also a regular ID console to allow for changes to be made to IDs outside of the central command access. This makes it a lot easier to get ERTs into the fray a lot quicker, rather than having to herd them through the hallway then back into the pod bay if things have already hit the fan. Other small changes include an extra C4 in the armory, moving the lights in the pod bay to underneath the windows (so that it no longer tries to pod out the floor lights when you send your ERT), a mechanical toolbox and some assorted medkits available in the briefing room... There's a few other things too, but nothing too drastic! I tried to keep the same-ish layout overall. centcom ## Why It's Good For The Game CentCom has remained relatively the same ever since I joined back in 2019, and I felt like we're at the point where so many of our systems and visuals have come so far and centcom has been relatively left behind. Central Command is where a lot of event roles start and the briefing room is incredibly useful for giving a team the low-down of what's happened - or any member of the station that's been extracted from the station. Updating the briefing room and most of the wing around it gives it a fresh coat of paint, and will hopefully allow players & admins more roleplay opportunities overall. Opening up a door directly into the ERT bay and giving the briefing officer several buttons to control which doors are bolted also makes it way easier for admins to herd an ERT. ## Changelog :cl: map: Centcom's ERT wing has been updated, including a new door that leads directly to the pod bay and buttons to control the doors! /:cl: --- _maps/map_files/generic/CentCom.dmm | 2674 +++++++++++++++++---------- 1 file changed, 1733 insertions(+), 941 deletions(-) diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index a7879a5a0731..5e4af937de03 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -2,6 +2,11 @@ "aa" = ( /turf/open/space/basic, /area/space) +"ad" = ( +/obj/structure/sign/nanotrasen/directional/south, +/obj/effect/turf_decal/tile/green, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "ak" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -22,18 +27,20 @@ /turf/open/indestructible/dark, /area/centcom/central_command_areas/prison/cells) "ap" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/trimline/dark_red/warning{ dir = 1 }, -/obj/machinery/light/floor, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/ert) "ar" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, /obj/structure/chair/office{ dir = 8 }, /obj/effect/landmark/ert_spawn, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "at" = ( @@ -46,21 +53,8 @@ /turf/open/floor/iron, /area/centcom/tdome/observation) "au" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/plasteel{ - amount = 15 - }, -/obj/item/stack/sheet/rglass{ - amount = 50; - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/stack/rods/fifty, -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, +/obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron, /area/centcom/central_command_areas/admin) "av" = ( @@ -72,22 +66,24 @@ /turf/open/floor/iron, /area/centcom/tdome/observation) "aw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/south, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, /obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/iron, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron/textured_edge, /area/centcom/central_command_areas/admin/storage) "az" = ( /obj/machinery/modular_computer/preset/id/centcom{ dir = 1 }, -/turf/open/floor/iron/grimy, +/obj/effect/turf_decal/siding/wood, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "aA" = ( /obj/effect/landmark/thunderdome/one, @@ -105,10 +101,6 @@ /turf/open/floor/iron, /area/centcom/tdome/observation) "aD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, @@ -117,7 +109,12 @@ }, /obj/structure/cable, /obj/machinery/status_display/evac/directional/south, -/turf/open/floor/iron, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron/textured_edge, /area/centcom/central_command_areas/admin/storage) "aG" = ( /obj/structure/noticeboard/directional/east, @@ -128,13 +125,14 @@ /area/centcom/central_command_areas/prison) "aK" = ( /obj/structure/table/reinforced, -/obj/item/stack/package_wrap, /obj/item/crowbar/power, -/obj/item/wrench, -/obj/item/hand_labeler, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/obj/item/weldingtool/experimental{ + pixel_y = 5 + }, /turf/open/floor/iron, /area/centcom/central_command_areas/admin) "aL" = ( @@ -181,10 +179,8 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) "aS" = ( -/obj/item/kirbyplants/organic/plant22, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "aU" = ( @@ -270,12 +266,14 @@ /area/centcom/tdome/observation) "bj" = ( /obj/structure/table/reinforced, -/obj/item/storage/box/zipties, -/obj/item/crowbar/red, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/item/storage/box/zipties{ + pixel_y = 12; + pixel_x = -5 }, -/turf/open/floor/iron, +/obj/item/crowbar/red{ + pixel_y = -7 + }, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "bk" = ( /obj/machinery/door/firedoor, @@ -321,24 +319,23 @@ /area/centcom/tdome/observation) "bA" = ( /obj/structure/table/reinforced, -/obj/item/storage/medkit/regular{ - pixel_x = -7 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, /obj/item/bodybag/environmental/nanotrasen{ pixel_x = 7; - pixel_y = 12 + pixel_y = 13 }, /obj/item/bodybag/environmental/nanotrasen{ pixel_x = 7; - pixel_y = 6 + pixel_y = 7 }, /obj/item/bodybag/environmental/nanotrasen{ - pixel_x = 7 + pixel_x = 7; + pixel_y = 1 }, -/turf/open/floor/iron, +/obj/item/storage/medkit/advanced{ + pixel_y = 7; + pixel_x = -12 + }, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "bB" = ( /obj/item/storage/box/handcuffs, @@ -368,7 +365,12 @@ /area/centcom/central_command_areas/control) "bH" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 8 + }, +/obj/effect/turf_decal/caution/stand_clear/red{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "bJ" = ( @@ -397,9 +399,22 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation/ship) "bO" = ( -/obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/directional/south, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/storage/fancy/cigarettes/cigars/cohiba{ + pixel_y = 12; + pixel_x = -2 + }, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_x = -6 + }, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_x = 6; + pixel_y = 0 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "bP" = ( @@ -427,8 +442,7 @@ /area/centcom/central_command_areas/control) "bW" = ( /obj/structure/filingcabinet/white, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "bZ" = ( /obj/effect/turf_decal/tile/green, @@ -436,16 +450,8 @@ /turf/open/floor/iron, /area/centcom/tdome/arena) "cb" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/briefcase/secure, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/structure/filingcabinet/security, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "cd" = ( /obj/structure/sink/directional/east, @@ -499,10 +505,10 @@ "cm" = ( /obj/structure/closet/secure_closet/ert_engi, /obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 }, -/turf/open/floor/iron, +/turf/open/floor/iron/textured_half, /area/centcom/central_command_areas/armory) "cn" = ( /obj/effect/spawner/structure/window/reinforced, @@ -538,36 +544,49 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/courtroom) "cw" = ( -/obj/structure/table/wood, -/obj/item/folder/red, -/obj/item/lighter, /obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "cA" = ( /obj/item/storage/box/emps{ - pixel_x = 3; - pixel_y = 3 + pixel_x = 7; + pixel_y = 12 + }, +/obj/item/storage/box/flashbangs{ + pixel_y = 4 + }, +/obj/item/grenade/c4/x4{ + pixel_y = -1; + pixel_x = -8 + }, +/obj/item/grenade/c4/x4{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/grenade/c4/x4{ + pixel_x = -8; + pixel_y = 10 }, -/obj/item/storage/box/flashbangs, -/obj/item/grenade/c4/x4, -/obj/item/grenade/c4/x4, -/obj/item/grenade/c4/x4, -/obj/structure/table/reinforced, -/obj/item/clothing/ears/earmuffs, /obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/effect/turf_decal/stripes/line{ +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/dark{ dir = 1 }, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/textured_edge, /area/centcom/central_command_areas/admin/storage) "cB" = ( -/obj/item/kirbyplants/organic/plant21, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/wood, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) +"cC" = ( +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "cD" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -577,6 +596,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/tdome/administration) +"cG" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "cI" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -606,14 +633,23 @@ /turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/evacuation/ship) "cL" = ( -/obj/item/gun/energy/pulse/carbine/loyalpin, -/obj/item/flashlight/seclite, +/obj/item/gun/energy/pulse/carbine/loyalpin{ + pixel_y = 7 + }, +/obj/item/flashlight/seclite{ + pixel_x = 4; + pixel_y = -1 + }, /obj/structure/table/reinforced, /obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/stripes/line{ +/obj/item/clothing/ears/earmuffs{ + pixel_y = -1 + }, +/obj/effect/turf_decal/siding/dark{ dir = 1 }, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/textured_edge, /area/centcom/central_command_areas/admin/storage) "cO" = ( /obj/structure/fans/tiny, @@ -688,11 +724,16 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) "db" = ( -/obj/structure/table/wood, -/obj/item/folder/red, -/obj/item/lighter, /obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/storage/briefcase{ + pixel_y = 0; + pixel_x = 3 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "dc" = ( @@ -705,16 +746,46 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) "dd" = ( -/obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/table/reinforced, +/obj/item/stack/sheet/rglass{ + amount = 50; + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/stack/sheet/plasteel{ + amount = 15; + pixel_y = 5; + pixel_x = -1 + }, +/obj/item/stack/rods/fifty{ + pixel_y = 4; + pixel_x = -4 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 7; + pixel_x = 8 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 7; + pixel_x = 8 + }, +/obj/item/stack/cable_coil{ + pixel_y = -1; + pixel_x = 3 + }, /turf/open/floor/iron, /area/centcom/central_command_areas/admin) "df" = ( /obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/folder/red, +/obj/item/clipboard{ + pixel_x = -6 + }, +/obj/item/folder/documents{ + pixel_x = -6 + }, /obj/item/stamp/denied{ pixel_x = 6; pixel_y = 6 @@ -724,7 +795,7 @@ pixel_y = 3 }, /obj/item/stamp/centcom, -/turf/open/floor/iron/grimy, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "dh" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ @@ -831,7 +902,9 @@ /area/centcom/tdome/observation) "dx" = ( /obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "dy" = ( @@ -847,19 +920,27 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation/ship) "dz" = ( -/obj/item/clipboard, -/obj/structure/table/reinforced, -/obj/item/detective_scanner, +/obj/item/clipboard{ + pixel_x = -6; + pixel_y = 2 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, /obj/structure/cable, -/obj/item/storage/box/ids{ - pixel_x = 6; - pixel_y = 12 +/obj/item/folder/red{ + pixel_x = -7 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/item/paper_bin{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/machinery/door/window/brigdoor/right/directional/west{ + name = "Commander's Desk"; + req_access = list("cent_captain") + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "dC" = ( /obj/item/kirbyplants/organic/plant21, @@ -908,6 +989,14 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/iron, /area/centcom/tdome/observation) +"dR" = ( +/obj/effect/turf_decal/tile/green/half{ + dir = 4 + }, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/centcom/central_command_areas/ferry) "dU" = ( /obj/structure/bookcase/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -923,18 +1012,19 @@ /turf/open/floor/iron/dark, /area/centcom/tdome/observation) "dW" = ( +/obj/machinery/status_display/evac/directional/east, +/obj/structure/table/wood, /obj/item/radio{ pixel_x = 5; - pixel_y = 5 + pixel_y = 7 }, /obj/item/radio{ pixel_x = -5; - pixel_y = 5 + pixel_y = 7 + }, +/obj/item/radio{ + pixel_y = 2 }, -/obj/item/radio, -/obj/structure/table/wood, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "ea" = ( @@ -1017,17 +1107,15 @@ /area/centcom/central_command_areas/evacuation/ship) "eA" = ( /obj/machinery/status_display/ai/directional/north, -/obj/item/kirbyplants/organic/plant15{ - pixel_x = -6; - pixel_y = 12 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "eB" = ( -/obj/structure/bookcase/random, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/nanotrasen/directional/west, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/bookcase/random, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "eD" = ( @@ -1037,20 +1125,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/access/all/admin/officer, -/turf/open/floor/iron, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "eE" = ( -/obj/structure/table/reinforced, -/obj/item/toy/figure/dsquad{ +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/green/full, +/obj/item/clothing/mask/gas/sechailer{ pixel_x = -3; - pixel_y = 11 + pixel_y = 2 }, -/obj/item/flashlight/seclite, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/item/flashlight/seclite{ + pixel_x = 1; + pixel_y = -5 + }, +/obj/item/toy/figure/dsquad{ + pixel_y = 5; + pixel_x = 9 + }, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) "eF" = ( -/turf/open/floor/iron/grimy, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "eH" = ( /obj/structure/flora/bush/sparsegrass/style_random, @@ -1112,10 +1209,15 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) "eV" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/taperecorder, -/turf/open/floor/iron/grimy, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "eX" = ( /obj/effect/turf_decal/siding/wood/corner{ @@ -1126,9 +1228,7 @@ /area/centcom/central_command_areas/evacuation/ship) "fa" = ( /obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, +/obj/effect/turf_decal/trimline/green/arrow_cw, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "fb" = ( @@ -1176,18 +1276,8 @@ /obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron, /area/centcom/tdome/observation) -"fi" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/landmark/ert_spawn, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/briefing) "fj" = ( /obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "fk" = ( @@ -1208,9 +1298,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/centcom/central_command_areas/evacuation) +"fo" = ( +/obj/effect/turf_decal/trimline/green/arrow_cw{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "fu" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/item/weldingtool/experimental, /obj/effect/decal/cleanable/blood/oil, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, @@ -1259,6 +1354,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/effect/mapping_helpers/airlock/access/all/admin/officer, +/obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/white, /area/centcom/central_command_areas/admin) "fI" = ( @@ -1287,9 +1383,9 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) "fN" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "fP" = ( @@ -1312,6 +1408,13 @@ }, /turf/open/space/basic, /area/space) +"fS" = ( +/obj/item/kirbyplants/organic/plant22, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "fT" = ( /obj/structure/lattice, /obj/structure/window/reinforced/spawner/directional/north, @@ -1394,7 +1497,18 @@ /area/centcom/central_command_areas/control) "gm" = ( /obj/structure/table/wood, -/obj/item/storage/dice, +/obj/item/storage/dice{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/dice/d20{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/dice/d10{ + pixel_x = 1; + pixel_y = 2 + }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "gs" = ( @@ -1423,15 +1537,18 @@ /area/centcom/central_command_areas/evacuation/ship) "gw" = ( /obj/structure/table/reinforced, +/obj/machinery/firealarm/directional/north, /obj/item/grenade/c4{ pixel_x = 6 }, /obj/item/grenade/c4{ pixel_x = -4 }, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, +/obj/item/grenade/c4{ + pixel_x = 1; + pixel_y = 3 + }, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "gy" = ( /obj/machinery/shower/directional/east, @@ -1466,6 +1583,12 @@ }, /turf/open/floor/iron, /area/centcom/tdome/observation) +"gF" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "gH" = ( /obj/structure/closet/secure_closet/security, /obj/item/storage/belt/security/full, @@ -1478,8 +1601,8 @@ /area/centcom/central_command_areas/control) "gI" = ( /obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "gL" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -1499,8 +1622,9 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) "gS" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/warning/secure_area/directional/east, +/obj/effect/turf_decal/siding/dark, +/obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "gU" = ( @@ -1509,13 +1633,21 @@ }, /turf/open/floor/iron, /area/centcom/tdome/observation) +"gW" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "gX" = ( /obj/structure/table/reinforced, -/obj/item/storage/lockbox/loyalty, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/item/storage/lockbox/loyalty{ + pixel_y = 8; + pixel_x = -4 }, -/turf/open/floor/iron, +/obj/item/tank/internals/emergency_oxygen/double, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "gY" = ( /obj/machinery/door/firedoor, @@ -1547,12 +1679,23 @@ /area/centcom/central_command_areas/control) "hd" = ( /obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen/fourcolor, -/turf/open/floor/iron/grimy, +/obj/item/paper_bin{ + pixel_y = 3; + pixel_x = 5 + }, +/obj/item/pen/fourcolor{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/phone{ + desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + pixel_x = -6; + pixel_y = 7 + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "he" = ( -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark, @@ -1585,24 +1728,38 @@ /turf/open/misc/asteroid, /area/centcom/central_command_areas/evacuation) "ho" = ( -/obj/structure/table/wood, -/obj/item/folder/red, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/restraints/handcuffs, -/obj/item/assembly/flash/handheld, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 1 + }, +/obj/item/kirbyplants/organic/plant11, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) +"ht" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/trimline/green/arrow_cw, +/obj/machinery/door/airlock/centcom{ + name = "CentCom Security"; + id_tag = "HallwayLock" + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) +"hu" = ( +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/machinery/door/airlock/centcom{ + name = "Administrative Office" + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/ferry) "hv" = ( /obj/machinery/barsign/all_access/directional/south, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/griddle, /turf/open/floor/iron/dark, /area/centcom/tdome/observation) -"hx" = ( -/obj/machinery/photocopier/gratis/prebuilt, -/turf/open/floor/iron/grimy, -/area/centcom/central_command_areas/briefing) "hz" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -1632,6 +1789,12 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/centcom/tdome/administration) +"hE" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "hF" = ( /obj/structure/table/reinforced, /obj/item/folder/red{ @@ -1688,38 +1851,76 @@ /area/centcom/central_command_areas/courtroom) "hT" = ( /obj/machinery/status_display/evac/directional/east, -/turf/open/floor/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) +"hV" = ( +/obj/effect/turf_decal/tile/green/half{ + dir = 1 + }, +/turf/open/floor/iron/edge{ + dir = 1 + }, +/area/centcom/central_command_areas/ferry) "hW" = ( /obj/structure/chair/office, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/prison) "hY" = ( /obj/structure/table/reinforced, -/obj/item/storage/box/handcuffs, -/obj/item/crowbar/red, -/obj/item/crowbar/power, -/obj/item/storage/belt/security/full, +/obj/item/crowbar/power{ + pixel_y = 16 + }, +/obj/item/storage/belt/security/full{ + pixel_x = 6 + }, +/obj/item/storage/box/handcuffs{ + pixel_y = 4; + pixel_x = -6 + }, /obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, +/obj/effect/turf_decal/siding/dark, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_edge{ + dir = 1 + }, /area/centcom/central_command_areas/admin/storage) "ia" = ( -/obj/structure/chair/comfy/brown{ +/obj/structure/chair/sofa/corner/brown{ dir = 8 }, -/turf/open/floor/iron/grimy, +/turf/open/floor/carpet/executive, /area/centcom/central_command_areas/admin) +"ib" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/light/floor, +/turf/open/floor/plating, +/area/centcom/central_command_areas/briefing) +"id" = ( +/turf/open/floor/carpet/green, +/area/centcom/central_command_areas/briefing) "ie" = ( /obj/item/soap/nanotrasen, /turf/open/floor/iron/white, /area/centcom/tdome/observation) "ig" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/item/taperecorder, -/obj/item/book/manual/wiki/security_space_law, -/turf/open/floor/iron/dark, +/obj/item/taperecorder{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 7 + }, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "ih" = ( /obj/structure/bookcase/random, @@ -1890,8 +2091,11 @@ }, /area/centcom/central_command_areas/supply) "iH" = ( -/obj/effect/turf_decal/tile/green, /obj/structure/sign/nanotrasen/directional/south, +/obj/effect/turf_decal/tile/green, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "iK" = ( @@ -2014,6 +2218,12 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/supply) +"je" = ( +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 9 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "jf" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -2281,6 +2491,20 @@ /obj/machinery/computer, /turf/open/floor/iron, /area/centcom/central_command_areas/prison) +"jZ" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters{ + id = "CCFerry"; + name = "CC Ferry Hangar" + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "ka" = ( /obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line{ @@ -2306,8 +2530,7 @@ /area/centcom/tdome/administration) "kh" = ( /obj/machinery/telecomms/allinone/nuclear, -/obj/structure/sign/poster/contraband/syndicate_pistol/directional/north, -/turf/open/indestructible/dark, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "ki" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -2348,9 +2571,10 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/supply) "ks" = ( -/obj/machinery/modular_computer/preset/id/centcom, /obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/grimy, +/obj/structure/table/wood, +/obj/machinery/computer/security/wooden_tv, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "ku" = ( /obj/machinery/button/door/indestructible{ @@ -2366,6 +2590,12 @@ }, /turf/open/floor/iron, /area/centcom/tdome/observation) +"kw" = ( +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "kx" = ( /obj/structure/filingcabinet/medical, /obj/effect/turf_decal/stripes/line{ @@ -2427,8 +2657,7 @@ /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/courtroom) "kO" = ( -/obj/item/kirbyplants/organic/plant21, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/kirbyplants/organic/plant22, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "kR" = ( @@ -2529,13 +2758,23 @@ /area/centcom/central_command_areas/evacuation/ship) "lj" = ( /obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen/fourcolor, +/obj/item/paper_bin{ + pixel_x = 7 + }, +/obj/item/pen/fourcolor{ + pixel_x = 7 + }, /obj/machinery/wall_healer/directional/north{ use_power = 0 }, /obj/machinery/computer/security/telescreen/entertainment/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/flashlight/lamp{ + pixel_y = 12; + pixel_x = -7 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "ln" = ( @@ -2593,8 +2832,8 @@ /area/centcom/central_command_areas/prison) "lw" = ( /obj/structure/chair/comfy/brown{ - buildstackamount = 0; - dir = 1 + dir = 1; + color = "#a75400" }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/courtroom) @@ -2677,9 +2916,8 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/control) "lU" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/status_display/ai/directional/south, +/obj/item/kirbyplants/organic/plant22, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "lV" = ( @@ -2697,6 +2935,15 @@ }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/courtroom) +"lX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron/grimy, +/area/centcom/central_command_areas/admin) "mc" = ( /obj/effect/light_emitter/podbay, /turf/open/floor/iron, @@ -2757,11 +3004,11 @@ /obj/structure/table/wood, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/courtroom) -"ms" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, +"mB" = ( /obj/machinery/light/floor, -/turf/open/floor/iron, -/area/centcom/central_command_areas/supplypod/loading/ert) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/centcom/central_command_areas/ferry) "mC" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/computer/operating, @@ -2871,6 +3118,13 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, /area/centcom/central_command_areas/prison) +"mU" = ( +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "mW" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/west, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -2907,8 +3161,11 @@ /turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/evacuation/ship) "ne" = ( -/obj/effect/turf_decal/tile/green, /obj/machinery/status_display/ai/directional/south, +/obj/effect/turf_decal/tile/green, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "nj" = ( @@ -2918,7 +3175,7 @@ /area/centcom/tdome/observation) "nk" = ( /obj/machinery/light_switch/directional/east, -/turf/open/floor/iron/grimy, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "nl" = ( /obj/machinery/computer/security/mining{ @@ -2972,14 +3229,19 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/fore) "nz" = ( -/obj/structure/table/reinforced, -/obj/machinery/fax/admin, -/turf/open/floor/iron/grimy, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/machinery/computer/records/medical/laptop{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "nA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "nC" = ( /obj/machinery/door/airlock/centcom{ @@ -3055,6 +3317,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) +"nR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/light/floor, +/turf/open/floor/plating, +/area/centcom/central_command_areas/ferry) "nS" = ( /obj/structure/bookcase/random, /obj/machinery/light/directional/north, @@ -3134,11 +3401,11 @@ /turf/open/floor/plating, /area/centcom/central_command_areas/ferry) "oh" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen/fourcolor, /obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/bookcase/random, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "oi" = ( @@ -3160,13 +3427,9 @@ /turf/open/space/basic, /area/space) "oo" = ( -/obj/structure/table/wood, -/obj/item/taperecorder, -/obj/item/storage/box/handcuffs, -/obj/item/flashlight/seclite, /obj/structure/noticeboard/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/machinery/vending/boozeomat, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "op" = ( /obj/structure/sink/directional/west, @@ -3226,7 +3489,9 @@ "oB" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/vending/wardrobe/cent_wardrobe, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "oF" = ( @@ -3272,13 +3537,14 @@ /area/centcom/central_command_areas/supply) "oK" = ( /obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "oL" = ( /obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/warning/secure_area/directional/east, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "oM" = ( @@ -3328,17 +3594,18 @@ /area/centcom/central_command_areas/supply) "oV" = ( /obj/structure/table/wood, -/obj/item/storage/briefcase/secure{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/lockbox/medal, /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/computer/security/telescreen/research/directional/south, -/turf/open/floor/iron/dark, +/obj/item/storage/lockbox/medal{ + pixel_y = 2 + }, +/obj/item/flashlight/seclite{ + pixel_y = 11; + pixel_x = 2 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "oW" = ( /obj/structure/flora/bush/lavendergrass/style_random, @@ -3450,26 +3717,35 @@ /obj/item/kirbyplants/organic/plant21, /obj/machinery/light/directional/east, /obj/structure/mirror/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "pB" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/trimline/dark_red/warning{ dir = 9 }, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/ert) +"pC" = ( +/obj/effect/turf_decal/tile/green, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "pD" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/trimline/dark_red/warning{ dir = 5 }, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/ert) "pE" = ( -/obj/structure/chair/comfy/black{ +/obj/structure/chair/sofa/right/brown{ dir = 8 }, -/turf/open/floor/iron/grimy, +/turf/open/floor/carpet/executive, /area/centcom/central_command_areas/admin) "pH" = ( /obj/structure/flora/tree/palm{ @@ -3515,11 +3791,17 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/supply) "pR" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "pT" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/trimline/dark_red/warning{ dir = 8 }, /turf/open/floor/iron, @@ -3538,7 +3820,7 @@ /turf/open/ai_visible, /area/centcom/ai_multicam_room) "pX" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/trimline/dark_red/warning{ dir = 4 }, /turf/open/floor/iron, @@ -3615,7 +3897,10 @@ /turf/open/floor/iron/dark, /area/centcom/tdome/administration) "ql" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_red/filled/warning, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin/storage) "qo" = ( @@ -3678,6 +3963,14 @@ name = "plating" }, /area/centcom/central_command_areas/control) +"qx" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "qy" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -3723,13 +4016,13 @@ /turf/open/floor/grass, /area/centcom/central_command_areas/evacuation) "qF" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/trimline/dark_red/warning{ dir = 10 }, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/ert) "qG" = ( -/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/trimline/dark_red/warning, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/ert) "qI" = ( @@ -3795,7 +4088,7 @@ /turf/open/floor/grass, /area/centcom/central_command_areas/evacuation) "rb" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/trimline/dark_red/warning{ dir = 6 }, /turf/open/floor/iron, @@ -3807,6 +4100,13 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/courtroom) +"rd" = ( +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 1 + }, +/obj/structure/sign/poster/official/nanotrasen_logo/directional/north, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "rf" = ( /obj/machinery/computer/records/medical{ dir = 1 @@ -3825,17 +4125,11 @@ /area/centcom/central_command_areas/courtroom) "rm" = ( /obj/machinery/computer/shuttle/labor, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/iron, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "rn" = ( /obj/machinery/computer/shuttle/mining, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/iron, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "ro" = ( /obj/machinery/newscaster/directional/north, @@ -3849,10 +4143,9 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) "rr" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/item/clipboard, -/obj/item/radio/headset/headset_cent, +/obj/effect/turf_decal/trimline/dark_red/line{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "rs" = ( @@ -3905,10 +4198,12 @@ /turf/cordon, /area/misc/start) "rB" = ( -/obj/structure/table/reinforced, -/obj/item/storage/fancy/donut_box, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/green/full, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 2 + }, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) "rF" = ( /obj/structure/flora/bush/sparsegrass/style_random, @@ -4052,7 +4347,8 @@ /area/centcom/tdome/observation) "sd" = ( /obj/machinery/door/airlock/centcom{ - name = "Orbital Drop Pod Loading" + name = "Orbital Drop Pod Loading"; + id_tag = "PodLock" }, /obj/effect/mapping_helpers/airlock/access/all/admin/general, /turf/open/floor/iron, @@ -4092,23 +4388,22 @@ /obj/machinery/computer/shuttle/white_ship{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, /obj/machinery/status_display/ai/directional/west, -/turf/open/floor/iron, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "sr" = ( /obj/structure/chair/office{ dir = 8 }, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 1 +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 9 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "ss" = ( -/obj/effect/turf_decal/tile/green{ +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark{ dir = 1 }, /turf/open/floor/iron, @@ -4117,7 +4412,8 @@ /obj/structure/chair/office{ dir = 1 }, -/obj/effect/turf_decal/tile/green{ +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark{ dir = 1 }, /turf/open/floor/iron, @@ -4130,8 +4426,9 @@ /area/centcom/central_command_areas/ferry) "sv" = ( /obj/structure/noticeboard/directional/east, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 4 +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 5 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) @@ -4169,7 +4466,10 @@ /turf/open/floor/iron, /area/centcom/tdome/observation) "sE" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "sF" = ( @@ -4177,6 +4477,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/evacuation/ship) +"sG" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "sH" = ( /obj/machinery/computer/security/telescreen, /obj/structure/table/reinforced, @@ -4291,16 +4601,20 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/supplypod) "tb" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen/fourcolor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/siding/wood, +/obj/structure/bookcase/random, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "td" = ( /obj/structure/sign/departments/drop, /turf/closed/indestructible/riveted, /area/centcom/central_command_areas/ferry) +"te" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/admin) "tg" = ( /obj/structure/chair{ dir = 1 @@ -4309,51 +4623,38 @@ /obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron, /area/centcom/central_command_areas/control) -"tl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/turf/open/floor/wood, -/area/centcom/central_command_areas/admin) "tn" = ( -/obj/structure/chair{ - dir = 8 - }, /obj/machinery/computer/security/telescreen/entertainment/directional/south, /obj/structure/sign/warning/secure_area/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, /obj/machinery/light/directional/south, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "to" = ( /obj/machinery/computer/shuttle/ferry{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, /obj/machinery/status_display/evac/directional/west, -/turf/open/floor/iron, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "tp" = ( -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 8 +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 10 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "tq" = ( /obj/structure/chair/office, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "tr" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "ts" = ( @@ -4361,7 +4662,10 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "tt" = ( -/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "tu" = ( @@ -4372,24 +4676,14 @@ dir = 8 }, /obj/effect/mapping_helpers/airlock/access/all/admin/general, -/turf/open/floor/iron, +/turf/open/floor/iron/dark, /area/centcom/central_command_areas/ferry) "ty" = ( -/obj/structure/filingcabinet/security, /obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/closet/crate/bin, +/obj/item/trash/cheesie, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) -"tA" = ( -/obj/machinery/door/poddoor/shutters{ - id = "CCFerry"; - name = "CC Ferry Hangar" - }, -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/ferry) "tF" = ( /obj/machinery/door/airlock/centcom{ name = "Thunderdome Locker Room" @@ -4475,7 +4769,7 @@ /area/centcom/central_command_areas/evacuation) "tW" = ( /obj/structure/sign/poster/contraband/syndicate_recruitment/directional/north, -/turf/open/indestructible/dark, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "ub" = ( /obj/structure/sign/directions/command, @@ -4501,8 +4795,9 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/evacuation) "uh" = ( -/obj/structure/chair/comfy/black{ - dir = 1 +/obj/structure/chair/comfy/brown{ + dir = 1; + color = "#a75400" }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) @@ -4539,10 +4834,7 @@ /obj/machinery/computer/communications{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/iron, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "up" = ( /obj/structure/table/wood, @@ -4572,6 +4864,12 @@ }, /turf/open/space/basic, /area/space) +"uv" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/admin) "uw" = ( /obj/structure/chair/office, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -4658,18 +4956,26 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) "uO" = ( +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/siding/dark/end, /obj/machinery/door/airlock/centcom{ name = "Shuttle Control Office" }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/airlock/access/all/admin/general, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "uP" = ( -/obj/item/flashlight/lamp, +/obj/item/flashlight/lamp{ + pixel_y = 7; + pixel_x = -7 + }, +/obj/item/storage/box/ids{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/structure/window/reinforced/spawner/directional/west, /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "uQ" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -4785,9 +5091,8 @@ }, /area/centcom/central_command_areas/evacuation) "vm" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/green/half, +/turf/open/floor/iron/edge, /area/centcom/central_command_areas/ferry) "vn" = ( /obj/item/kirbyplants/organic/plant21, @@ -4803,8 +5108,8 @@ /obj/machinery/door/window/brigdoor/left/directional/south{ name = "Shower" }, -/obj/item/soap/deluxe, /obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/item/soap/nanotrasen, /turf/open/floor/iron/white, /area/centcom/central_command_areas/admin) "vq" = ( @@ -4832,8 +5137,11 @@ /obj/item/kirbyplants/organic/plant22, /obj/machinery/newscaster/directional/west, /obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "vA" = ( /obj/effect/spawner/structure/window/reinforced, @@ -4858,36 +5166,22 @@ /area/centcom/central_command_areas/ferry) "vC" = ( /obj/machinery/light/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/ferry) -"vD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/chair{ + pixel_y = -2 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "vE" = ( /obj/machinery/firealarm/directional/north, -/obj/structure/chair{ - dir = 8 - }, /obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/structure/chair{ + pixel_y = -2 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "vF" = ( -/obj/machinery/door/airlock/centcom{ - name = "Administrative Office" - }, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/admin/general, -/turf/open/floor/iron, +/turf/closed/indestructible/riveted, /area/centcom/central_command_areas/ferry) "vG" = ( /obj/effect/turf_decal/stripes/line{ @@ -4932,6 +5226,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/centcom/central_command_areas/control) +"vT" = ( +/obj/effect/turf_decal/trimline/green/line, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "vU" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -4992,14 +5290,17 @@ /area/centcom/tdome/observation) "wg" = ( /obj/structure/closet/secure_closet/ert_com, -/obj/effect/turf_decal/stripes/line, /obj/machinery/status_display/ai/directional/east, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/dark_blue/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_half, /area/centcom/central_command_areas/armory) "wh" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/green, /obj/structure/sign/warning/secure_area/directional/south, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/green, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "wj" = ( @@ -5047,31 +5348,26 @@ /turf/open/floor/iron, /area/centcom/tdome/arena) "wq" = ( -/obj/structure/chair/comfy/black{ - dir = 1 - }, /obj/machinery/computer/security/telescreen/entertainment/directional/west, +/obj/structure/chair/comfy/brown{ + dir = 1; + color = "#a75400" + }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) -"wr" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/ferry) "wt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/turf_decal/trimline/green/arrow_cw{ + dir = 10 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "wv" = ( -/obj/effect/turf_decal/loading_area{ +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ dir = 4 }, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 8 + }, /obj/machinery/door/poddoor/shutters{ id = "CCFerry"; name = "CC Ferry Hangar" @@ -5079,31 +5375,32 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "ww" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 1 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "wx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/structure/sign/warning/secure_area/directional/south, +/obj/structure/chair{ + dir = 1 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "wy" = ( -/obj/effect/turf_decal/delivery, /obj/structure/cable, +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 1 + }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "wz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, +/obj/effect/turf_decal/trimline/green/arrow_cw, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "wB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/effect/turf_decal/trimline/green/corner{ + dir = 8 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) @@ -5208,9 +5505,6 @@ /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/evacuation/ship) "xc" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Ferry Airlock" - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -5218,29 +5512,32 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/machinery/door/airlock/external/ruin{ + name = "Ferry Airlock" + }, +/obj/structure/fans/tiny, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "xd" = ( -/obj/structure/fans/tiny, /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "xe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 1 }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/ferry) -"xf" = ( -/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/trimline/green/arrow_cw, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "xg" = ( -/obj/structure/chair{ +/obj/effect/turf_decal/trimline/green/corner{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/turf_decal/trimline/green/corner{ + dir = 1 + }, +/obj/structure/chair{ + dir = 8 }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) @@ -5253,18 +5550,6 @@ }, /turf/open/floor/plating, /area/centcom/central_command_areas/ferry) -"xj" = ( -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/ferry) -"xk" = ( -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/ferry) "xl" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 @@ -5305,15 +5590,20 @@ /turf/open/floor/iron, /area/centcom/tdome/arena) "xy" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, /obj/item/weldingtool/experimental, /obj/machinery/power/terminal{ dir = 8 }, /obj/structure/cable, -/turf/open/floor/iron, +/obj/effect/turf_decal/siding/dark, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_edge{ + dir = 1 + }, /area/centcom/central_command_areas/admin/storage) "xD" = ( /obj/machinery/computer/security{ @@ -5349,10 +5639,10 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/control) "xR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, /obj/structure/cable, +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 4 + }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "xS" = ( @@ -5361,10 +5651,12 @@ name = "CC Shutter 4 Control"; pixel_y = -24 }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/effect/turf_decal/tile/green/half{ + dir = 4 + }, +/turf/open/floor/iron/edge{ + dir = 4 }, -/turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "xT" = ( /obj/effect/turf_decal/tile/green{ @@ -5373,9 +5665,8 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/control) "xU" = ( -/obj/structure/filingcabinet/medical, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/directional/south, +/obj/structure/bookcase/random, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "xV" = ( @@ -5436,7 +5727,10 @@ /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_red/filled/warning, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin/storage) "yj" = ( @@ -5470,15 +5764,17 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) "yp" = ( -/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/loading_area/red, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "yr" = ( +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/trimline/green/arrow_cw{ + dir = 8 + }, /obj/machinery/door/airlock/centcom{ name = "Briefing Room" }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/airlock/access/all/admin/general, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "yx" = ( @@ -5537,15 +5833,14 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/evacuation/ship) "yL" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/donut_box, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/filingcabinet/employment, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "yO" = ( /obj/machinery/computer/communications, /obj/machinery/status_display/evac/directional/north, -/turf/open/floor/iron/grimy, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "yP" = ( /obj/machinery/newscaster{ @@ -5560,29 +5855,46 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/supply) "yR" = ( -/obj/item/clipboard, -/obj/item/folder/red, +/obj/item/clipboard{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/folder/blue{ + pixel_x = -6; + pixel_y = -4 + }, /obj/item/stamp/denied{ pixel_x = 6; - pixel_y = 6 + pixel_y = 3 }, /obj/item/stamp/granted{ pixel_x = 3; - pixel_y = 3 + pixel_y = 0 }, -/obj/structure/table/reinforced, -/obj/item/stamp/centcom, -/turf/open/floor/iron/grimy, +/obj/item/stamp/centcom{ + pixel_y = -3 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Briefing Desk"; + req_access = list("cent_captain") + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "yS" = ( /obj/structure/table/reinforced, -/obj/item/storage/box/emps, -/obj/item/gun/energy/ionrifle, -/obj/structure/sign/departments/medbay/alt/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/item/gun/energy/ionrifle{ + pixel_y = 9 }, -/turf/open/floor/iron, +/obj/item/storage/box/emps{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/structure/sign/departments/medbay/alt/directional/south, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "yV" = ( /obj/docking_port/stationary{ @@ -5624,7 +5936,8 @@ /area/centcom/central_command_areas/control) "zc" = ( /obj/structure/chair/comfy/brown{ - dir = 1 + dir = 1; + color = "#a75400" }, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -5732,11 +6045,16 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/centcom/central_command_areas/evacuation/ship) "zz" = ( -/obj/structure/table/reinforced, -/obj/item/restraints/handcuffs/cable/zipties, -/obj/item/assembly/flash/handheld, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/green/full, +/obj/item/storage/medkit/o2{ + pixel_y = 12; + pixel_x = 1 + }, +/obj/item/storage/medkit/toxin{ + pixel_x = -1 + }, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) "zA" = ( /obj/structure/flora/bush/lavendergrass/style_random, @@ -5839,7 +6157,7 @@ "zU" = ( /obj/item/kirbyplants/organic/plant22, /obj/machinery/light_switch/directional/south, -/turf/open/floor/wood, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "zW" = ( /obj/structure/table, @@ -5988,12 +6306,9 @@ /turf/open/floor/iron, /area/centcom/tdome/observation) "AF" = ( -/obj/structure/table/wood, -/obj/item/storage/photo_album, -/obj/item/camera, /obj/structure/reagent_dispensers/wall/peppertank/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "AG" = ( /obj/structure/table/wood, @@ -6014,17 +6329,11 @@ /area/centcom/central_command_areas/supplypod/loading/one) "AK" = ( /obj/machinery/light_switch/directional/north, -/turf/open/floor/wood, -/area/centcom/central_command_areas/admin) -"AL" = ( -/obj/structure/chair/office{ - dir = 1 +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 }, -/obj/effect/landmark/ert_spawn, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/briefing) +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/admin) "AO" = ( /obj/machinery/computer/communications{ dir = 8 @@ -6117,10 +6426,22 @@ /turf/open/floor/iron, /area/centcom/tdome/administration) "Bl" = ( -/obj/structure/bookcase/random, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/admin) +"Bn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Bo" = ( /obj/effect/turf_decal/tile/green{ @@ -6134,13 +6455,13 @@ /turf/open/floor/iron, /area/centcom/tdome/administration) "Br" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/turf/open/floor/iron/grimy, +/obj/structure/chair/sofa/corner/brown{ + dir = 1 + }, +/turf/open/floor/carpet/executive, /area/centcom/central_command_areas/admin) "Bs" = ( /obj/structure/table/reinforced, @@ -6153,19 +6474,18 @@ /turf/open/floor/iron, /area/centcom/tdome/observation) "Bu" = ( -/obj/item/kirbyplants/organic/plant21, /obj/machinery/status_display/evac/directional/west, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 +/obj/structure/table/wood, +/obj/item/storage/fancy/donut_box{ + pixel_y = 5 }, -/turf/open/floor/iron/dark, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "By" = ( /obj/machinery/light/directional/south, /obj/structure/filingcabinet/chestdrawer, /obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "BA" = ( /obj/machinery/door/airlock/centcom{ @@ -6314,11 +6634,19 @@ /area/centcom/central_command_areas/evacuation/ship) "BT" = ( /obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/toy/figure/dsquad, +/obj/item/clipboard{ + pixel_y = 2 + }, +/obj/item/toy/figure/dsquad{ + pixel_y = 8; + pixel_x = -6 + }, /obj/machinery/computer/security/telescreen/entertainment/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/item/toy/figure/captain{ + pixel_y = 1; + pixel_x = 1 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "BU" = ( /obj/item/clipboard, @@ -6398,10 +6726,10 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/four) "Cp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, /obj/structure/sign/warning/secure_area/directional/north, +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 5 + }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "Cq" = ( @@ -6445,6 +6773,18 @@ }, /turf/open/floor/iron, /area/centcom/tdome/observation) +"CC" = ( +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/door/airlock/centcom{ + name = "Orbital Drop Pod Quick Access"; + id_tag = "QuickAccess" + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/iron, +/area/centcom/central_command_areas/briefing) "CE" = ( /obj/item/clipboard, /obj/item/folder/red, @@ -6518,6 +6858,12 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/centcom/central_command_areas/control) +"CQ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "CT" = ( /obj/structure/table/reinforced, /obj/structure/railing{ @@ -6544,8 +6890,8 @@ "CU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "CV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, @@ -6592,7 +6938,11 @@ /area/centcom/central_command_areas/prison/cells) "Dk" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/machinery/coffeemaker/impressa, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "Dm" = ( @@ -6731,9 +7081,8 @@ /turf/closed/indestructible/riveted, /area/centcom/central_command_areas/armory) "Eb" = ( -/obj/item/kirbyplants/organic/plant21, /obj/structure/extinguisher_cabinet/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/kirbyplants/organic/plant12, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "Ee" = ( @@ -6762,19 +7111,17 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) "Em" = ( -/obj/item/paper_bin, -/obj/item/pen/fourcolor, -/obj/structure/table/reinforced, /obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/modular_computer/preset/id/centcom{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "En" = ( -/obj/structure/chair/comfy/black, /obj/machinery/computer/security/telescreen/entertainment/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, +/obj/structure/chair/sofa/right/brown, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "Eq" = ( @@ -6795,6 +7142,12 @@ /obj/item/kirbyplants, /turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/evacuation/ship) +"Et" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/centcom/central_command_areas/admin) "Ev" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/bodycontainer/morgue{ @@ -6874,13 +7227,15 @@ /turf/open/floor/iron, /area/centcom/tdome/arena) "EJ" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8 }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/chair/office{ + dir = 4 + }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "EK" = ( @@ -6913,6 +7268,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/centcom/tdome/administration) +"ES" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -4; + pixel_y = 10 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "EV" = ( /obj/structure/table/wood, /obj/machinery/microwave{ @@ -6933,6 +7296,12 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/three) +"Fc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/admin) "Fe" = ( /obj/structure/sink/directional/west, /obj/structure/mirror/directional/east, @@ -6954,8 +7323,8 @@ /area/centcom/central_command_areas/control) "Fh" = ( /obj/item/kirbyplants/organic/plant21, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/large, /area/centcom/central_command_areas/ferry) "Fj" = ( /obj/machinery/door/firedoor, @@ -7031,20 +7400,17 @@ }, /turf/open/floor/iron/grimy, /area/centcom/tdome/administration) -"Fz" = ( -/obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/briefing) "FB" = ( /obj/structure/table/reinforced, -/obj/item/storage/box/syringes, -/obj/item/gun/syringe/rapidsyringe, -/obj/structure/reagent_dispensers/wall/peppertank/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/item/gun/syringe/rapidsyringe{ + pixel_y = 10 }, -/turf/open/floor/iron, +/obj/item/storage/box/syringes{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/structure/reagent_dispensers/wall/peppertank/directional/south, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "FI" = ( /obj/effect/landmark/thunderdome/two, @@ -7088,10 +7454,23 @@ "FX" = ( /obj/machinery/computer/auxiliary_base/directional/north, /obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/radio/headset/headset_cent, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/item/clipboard{ + pixel_x = -10; + pixel_y = 4 + }, +/obj/item/radio/headset/headset_cent{ + pixel_x = -8; + pixel_y = 2 + }, +/obj/item/hand_labeler{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/stack/package_wrap{ + pixel_y = -1; + pixel_x = 3 + }, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "FZ" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -7104,9 +7483,20 @@ /turf/closed/indestructible/fakeglass, /area/centcom/tdome/observation) "Ge" = ( -/obj/structure/bookcase/random, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/nanotrasen/directional/south, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 8; + pixel_x = -6 + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/whiskey{ + pixel_y = 11; + pixel_x = 8 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_y = 3; + pixel_x = 4 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "Gf" = ( @@ -7114,7 +7504,10 @@ /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8 }, -/turf/open/floor/iron/grimy, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Gi" = ( /obj/structure/window/reinforced/spawner/directional/north, @@ -7164,11 +7557,16 @@ /area/centcom/central_command_areas/control) "Gs" = ( /obj/machinery/power/smes/magical, -/obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/machinery/light/directional/north, -/turf/open/floor/iron, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_edge{ + dir = 1 + }, /area/centcom/central_command_areas/admin/storage) "Gy" = ( /obj/effect/turf_decal/siding/dark{ @@ -7178,24 +7576,41 @@ /area/centcom/tdome/administration) "GB" = ( /obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, /obj/structure/table/reinforced, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = -6; + pixel_y = 5 + }, /obj/item/stack/sheet/plasteel{ - amount = 15 + amount = 15; + pixel_y = 7; + pixel_x = -6 }, /obj/item/stack/sheet/rglass{ amount = 50; - pixel_x = 2; - pixel_y = -2 + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/stack/rods/fifty{ + pixel_y = 7 }, -/obj/item/stack/rods/fifty, /obj/item/stack/cable_coil, -/obj/item/screwdriver/power, +/obj/item/screwdriver/power{ + pixel_y = 11 + }, /obj/structure/cable, -/turf/open/floor/iron, +/obj/effect/turf_decal/siding/dark, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_edge{ + dir = 1 + }, /area/centcom/central_command_areas/admin/storage) "GC" = ( /obj/machinery/door/firedoor, @@ -7283,8 +7698,8 @@ /turf/open/indestructible/dark, /area/centcom/central_command_areas/prison/cells) "Hi" = ( -/obj/effect/turf_decal/tile/green, /obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/green, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "Hj" = ( @@ -7323,6 +7738,13 @@ /obj/effect/mapping_helpers/airlock/access/all/admin/captain, /turf/open/floor/iron, /area/centcom/central_command_areas/prison) +"Hq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "Hs" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -7334,14 +7756,24 @@ /turf/closed/indestructible/riveted, /area/centcom/central_command_areas/courtroom) "Hw" = ( -/obj/item/kirbyplants/organic/plant21, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/closet/crate/bin, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "Hz" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) +"HC" = ( +/obj/item/kirbyplants/organic/plant17, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "HE" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/fullgrass/style_random, @@ -7403,6 +7835,12 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) +"HN" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "HR" = ( /obj/structure/bed/medical/emergency, /obj/machinery/iv_drip, @@ -7424,7 +7862,8 @@ /area/centcom/central_command_areas/supply) "HW" = ( /obj/structure/chair/comfy/brown{ - dir = 1 + dir = 1; + color = "#a75400" }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/nanotrasen/directional/south, @@ -7513,6 +7952,12 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/prison) +"Il" = ( +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "Im" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ @@ -7549,10 +7994,7 @@ /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/iron, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "Iv" = ( /obj/effect/turf_decal/siding/wood{ @@ -7576,11 +8018,16 @@ /area/centcom/central_command_areas/prison/cells) "IK" = ( /obj/structure/closet/secure_closet/ert_sec, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, /obj/machinery/status_display/ai/directional/south, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/textured_half, +/area/centcom/central_command_areas/armory) +"IN" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "IO" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -7629,7 +8076,9 @@ dir = 8 }, /obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "JE" = ( @@ -7645,6 +8094,10 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/evacuation/ship) +"JG" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "JJ" = ( /obj/structure/table/wood, /obj/item/storage/fancy/donut_box, @@ -7652,7 +8105,9 @@ /turf/open/floor/iron/dark, /area/centcom/tdome/administration) "JO" = ( -/obj/machinery/modular_computer/preset/id/centcom, +/obj/structure/closet/crate/bin, +/obj/item/disk/nuclear/fake/obvious, +/obj/structure/sign/poster/official/do_not_question/directional/east, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "JS" = ( @@ -7692,11 +8147,37 @@ /turf/open/floor/iron/dark, /area/centcom/tdome/observation) "JW" = ( -/obj/structure/table/reinforced, -/obj/item/storage/briefcase/secure, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/assembly/flash/handheld{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/restraints/handcuffs{ + pixel_x = 9; + pixel_y = 5 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/effect/turf_decal/tile/green/full, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) +"Kb" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 1 + }, +/obj/machinery/door/airlock/centcom{ + name = "CentCom Security"; + id_tag = "HallwayLock" + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "Kd" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /obj/effect/turf_decal/tile/yellow/opposingcorners{ @@ -7705,18 +8186,19 @@ /turf/open/floor/iron, /area/centcom/tdome/observation) "Kf" = ( -/obj/machinery/door/airlock/centcom{ - name = "Administrative Storage" - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/admin/officer, -/turf/open/floor/iron, +/obj/effect/turf_decal/stripes/red/full, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/machinery/door/airlock/centcom{ + name = "Administrative Storage" + }, +/turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "Kg" = ( /obj/item/radio/intercom/directional/north, @@ -7753,16 +8235,15 @@ /area/centcom/central_command_areas/control) "Kv" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "CentCom Security" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, /obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/trimline/green/arrow_cw, +/obj/machinery/door/airlock/centcom{ + name = "CentCom Security"; + id_tag = "HallwayLock" + }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "KA" = ( @@ -7866,14 +8347,18 @@ "KW" = ( /obj/machinery/keycard_auth/wall_mounted/directional/south, /obj/structure/table/reinforced, -/obj/machinery/recharger, +/obj/machinery/recharger{ + pixel_x = 5 + }, /obj/machinery/button/door/indestructible{ id = "CCFerry"; name = "Hanger Bay Shutters"; pixel_y = -38 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/machinery/recharger{ + pixel_x = -5 + }, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "KZ" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -7921,6 +8406,12 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/evacuation/ship) +"Lg" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "Li" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -8175,16 +8666,19 @@ /area/centcom/tdome/arena) "Mo" = ( /obj/structure/bed, -/obj/item/bedsheet/black, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/nanotrasen/directional/south, +/obj/item/bedsheet/nanotrasen, +/obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "Mp" = ( +/obj/machinery/status_display/evac/directional/east, /obj/structure/table/wood, /obj/machinery/recharger, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/headset/headset_cent{ + pixel_x = 12; + pixel_y = 4 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "Mr" = ( @@ -8209,7 +8703,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/turf/open/floor/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Mu" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -8231,7 +8728,10 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Mz" = ( /obj/effect/spawner/structure/window/reinforced, @@ -8275,12 +8775,6 @@ }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/supplypod) -"MJ" = ( -/obj/structure/chair/office, -/obj/effect/landmark/ert_spawn, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/briefing) "MK" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -8315,7 +8809,13 @@ /area/centcom/tdome/observation) "MU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "MV" = ( /obj/structure/chair{ @@ -8336,6 +8836,13 @@ /obj/structure/sign/nanotrasen/directional/north, /turf/open/floor/iron, /area/centcom/central_command_areas/control) +"Nc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/admin) "Ne" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/glass/trophy/gold_cup, @@ -8379,11 +8886,19 @@ /area/centcom/central_command_areas/evacuation/ship) "Nn" = ( /obj/structure/table/reinforced, -/obj/item/storage/lockbox/loyalty, +/obj/item/storage/lockbox/loyalty{ + pixel_y = 8; + pixel_x = -4 + }, /obj/item/gun/ballistic/automatic/ar, /obj/machinery/light/directional/north, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_edge{ + dir = 1 + }, /area/centcom/central_command_areas/admin/storage) "Np" = ( /obj/structure/bookcase/random, @@ -8399,15 +8914,27 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Nr" = ( +/obj/item/restraints/handcuffs{ + pixel_x = 1 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, /obj/structure/table/reinforced, -/obj/item/folder/red, -/obj/item/restraints/handcuffs, -/obj/item/assembly/flash/handheld, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/machinery/recharger{ + pixel_y = 3; + pixel_x = -4 + }, +/obj/item/gun/energy/e_gun/mini{ + pixel_y = 17; + pixel_x = 1 + }, +/turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "Nw" = ( /obj/item/kirbyplants/organic/plant21, @@ -8423,11 +8950,19 @@ /area/centcom/central_command_areas/supply) "Ny" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "NC" = ( /obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear/red{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "NE" = ( @@ -8464,7 +8999,7 @@ "NM" = ( /obj/structure/closet/crate/bin, /obj/machinery/light/directional/south, -/turf/open/floor/wood, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "NN" = ( /obj/machinery/keycard_auth/wall_mounted/directional/south, @@ -8543,11 +9078,17 @@ }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/mapping_helpers/airlock/access/all/admin/officer, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "Od" = ( /obj/structure/cable, -/turf/open/floor/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Of" = ( /obj/item/clipboard, @@ -8574,12 +9115,13 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) "Om" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/folder/white, -/obj/item/pen/blue, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/medkit/regular{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/effect/turf_decal/tile/green/full, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) "On" = ( /turf/closed/indestructible/riveted, @@ -8593,7 +9135,10 @@ dir = 1 }, /obj/machinery/meter, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_red/filled/warning, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin/storage) "Ot" = ( @@ -8615,7 +9160,10 @@ dir = 1 }, /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_red/filled/warning, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin/storage) "Ox" = ( @@ -8686,6 +9234,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/evacuation/ship) +"OG" = ( +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "OH" = ( /obj/machinery/computer/records/security{ dir = 4 @@ -8698,8 +9249,14 @@ /turf/open/floor/iron/dark/herringbone, /area/centcom/central_command_areas/evacuation/ship) "OK" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/warning/secure_area/directional/west, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "OM" = ( @@ -8736,12 +9293,14 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/one) "OQ" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 4 + }, /obj/machinery/door/airlock/centcom{ name = "Briefing Room" }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/admin/general, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "OR" = ( @@ -8774,19 +9333,22 @@ /turf/open/floor/iron/white/textured, /area/centcom/central_command_areas/evacuation/ship) "OX" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, /obj/structure/chair/office{ dir = 1 }, /obj/effect/landmark/ert_spawn, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "OY" = ( -/obj/item/storage/fancy/donut_box, -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "OZ" = ( /obj/structure/flora/bush/lavendergrass/style_random, @@ -8804,6 +9366,7 @@ /area/centcom/tdome/observation) "Pd" = ( /obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/trimline/dark_red/corner, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "Pe" = ( @@ -8898,17 +9461,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_red/filled/warning, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin/storage) "Pt" = ( /obj/structure/table/reinforced, -/obj/item/storage/toolbox/mechanical, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/item/storage/toolbox/mechanical{ + pixel_x = 4; + pixel_y = 10 }, -/turf/open/floor/iron, +/obj/item/storage/toolbox/electrical{ + pixel_x = 4; + pixel_y = 2 + }, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "Pv" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -8966,8 +9535,7 @@ /obj/machinery/firealarm/directional/south, /obj/structure/closet/crate/bin, /obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "PJ" = ( /obj/structure/closet/crate/freezer/blood, @@ -8990,43 +9558,42 @@ /turf/open/misc/asteroid, /area/centcom/central_command_areas/evacuation) "PM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/structure/chair/office, /obj/effect/landmark/ert_spawn, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "PR" = ( -/obj/structure/table/wood, -/obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/cigarette/cigar/cohiba{ - pixel_x = 6 - }, -/obj/item/cigarette/cigar/havana{ - pixel_x = 2 - }, -/obj/item/cigarette/cigar{ - pixel_x = 4.5 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 10 }, -/turf/open/floor/iron/grimy, +/obj/structure/chair/sofa/middle/brown{ + dir = 1 + }, +/turf/open/floor/carpet/executive, /area/centcom/central_command_areas/admin) "PT" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/centcom/tdome/observation) "PU" = ( -/obj/structure/table/wood, -/obj/machinery/computer/records/medical/laptop, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/phone{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/lighter/greyscale{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/storage/fancy/cigarettes/cigars, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "PV" = ( /obj/effect/turf_decal/stripes/line{ @@ -9050,14 +9617,9 @@ /turf/open/floor/grass, /area/centcom/central_command_areas/evacuation/ship) "Qb" = ( -/obj/structure/table/wood, -/obj/item/folder/red, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/restraints/handcuffs, -/obj/item/assembly/flash/handheld, /obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/item/kirbyplants/organic/plant21, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Qd" = ( /obj/structure/table/wood, @@ -9135,6 +9697,21 @@ }, /turf/open/floor/iron, /area/centcom/tdome/observation) +"Qw" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/trimline/green/arrow_ccw{ + dir = 1 + }, +/obj/machinery/door/airlock/centcom{ + name = "CentCom Security"; + id_tag = "HallwayLock" + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "Qx" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/yellow{ @@ -9234,6 +9811,9 @@ /turf/open/floor/iron/dark, /area/centcom/tdome/administration) "QV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "QX" = ( @@ -9243,16 +9823,19 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) "QY" = ( -/obj/item/storage/box/handcuffs, -/obj/item/ammo_box/speedloader/c357, /obj/item/ammo_box/speedloader/c357, +/obj/item/ammo_box/speedloader/c357{ + pixel_y = 6; + pixel_x = -5 + }, /obj/item/gun/ballistic/revolver/mateba, /obj/structure/table/reinforced, /obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/siding/dark{ dir = 1 }, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/textured_edge, /area/centcom/central_command_areas/admin/storage) "Ra" = ( /obj/machinery/door/airlock/centcom{ @@ -9277,10 +9860,12 @@ /turf/open/floor/iron, /area/centcom/tdome/administration) "Rd" = ( -/obj/structure/bookcase/random, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/nanotrasen/directional/north, -/turf/open/floor/iron/dark, +/obj/structure/table/wood, +/obj/machinery/fax/admin{ + pixel_y = 6 + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "Rf" = ( /obj/item/kirbyplants/organic/plant22, @@ -9311,16 +9896,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, +/obj/effect/turf_decal/stripes/red/full, /obj/machinery/door/airlock/vault{ req_access = list("cent_captain") }, /obj/machinery/door/poddoor/shutters/indestructible{ id = "XCCadminstore" }, -/turf/open/floor/iron, +/turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin/storage) "Rk" = ( /obj/structure/cable, @@ -9328,10 +9911,10 @@ /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/evacuation/ship) "Rl" = ( -/obj/structure/chair/comfy/brown{ +/obj/structure/chair/sofa/left/brown{ dir = 4 }, -/turf/open/floor/iron/grimy, +/turf/open/floor/carpet/executive, /area/centcom/central_command_areas/admin) "Rm" = ( /obj/structure/filingcabinet/white, @@ -9343,14 +9926,24 @@ /area/centcom/central_command_areas/supply) "Rn" = ( /obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/folder/blue, -/obj/item/melee/chainofcommand, -/obj/item/stamp/head/captain, +/obj/item/clipboard{ + pixel_y = 1 + }, +/obj/item/folder/blue{ + pixel_y = 1 + }, +/obj/item/melee/chainofcommand{ + pixel_y = 5 + }, +/obj/item/stamp/head/captain{ + pixel_y = 4 + }, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "Ro" = ( @@ -9423,12 +10016,24 @@ /turf/open/floor/iron, /area/centcom/tdome/administration) "RF" = ( -/obj/structure/table/reinforced, -/obj/item/crowbar/red, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/item/clothing/mask/gas, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/green/full, +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_y = 4; + pixel_x = -13 + }, +/obj/machinery/cell_charger{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/stock_parts/power_store/cell/hyper{ + pixel_x = 15 + }, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) "RG" = ( /obj/structure/chair/comfy/black{ @@ -9440,7 +10045,9 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) "RH" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "RI" = ( @@ -9459,7 +10066,6 @@ "RM" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "RP" = ( @@ -9482,17 +10088,21 @@ "RT" = ( /obj/machinery/airalarm/directional/east, /obj/structure/filingcabinet/white, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/sign/poster/official/here_for_your_safety/directional/north, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "RV" = ( /obj/structure/table/reinforced, -/obj/item/restraints/handcuffs, -/obj/item/radio, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/item/radio{ + pixel_y = 11; + pixel_x = -7 }, -/turf/open/floor/iron, +/obj/item/radio{ + pixel_y = 10; + pixel_x = 4 + }, +/obj/item/restraints/handcuffs, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "RW" = ( /obj/structure/table/reinforced, @@ -9528,13 +10138,22 @@ "Sh" = ( /obj/structure/table/reinforced, /obj/item/mod/control/pre_equipped/corporate{ - pixel_y = 5 + pixel_y = 5; + pixel_x = -7 }, /obj/item/clothing/gloves/combat, /obj/item/clothing/shoes/combat/swat, -/obj/item/clothing/mask/gas/sechailer/swat, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, +/obj/item/clothing/mask/gas/sechailer/swat{ + pixel_y = 10; + pixel_x = 10 + }, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_edge{ + dir = 1 + }, /area/centcom/central_command_areas/admin/storage) "Si" = ( /turf/open/floor/iron, @@ -9550,10 +10169,17 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) "Sk" = ( -/obj/structure/table/reinforced, -/obj/item/storage/medkit/regular, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/green/full, +/obj/item/restraints/handcuffs/cable/zipties{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/storage/box/zipties{ + pixel_y = 8; + pixel_x = 5 + }, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) "Sl" = ( /obj/effect/spawner/structure/window/reinforced, @@ -9575,14 +10201,15 @@ /obj/structure/table/reinforced, /obj/item/clipboard, /obj/item/folder/yellow, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "Su" = ( /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod) +"Sv" = ( +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "Sx" = ( /obj/structure/chair{ dir = 1 @@ -9668,7 +10295,11 @@ "SP" = ( /obj/item/kirbyplants/organic/plant21, /obj/machinery/status_display/evac/directional/north, -/turf/open/floor/wood, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "SQ" = ( /obj/structure/filingcabinet/medical, @@ -9676,6 +10307,9 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) "SR" = ( +/obj/effect/turf_decal/siding/dark/end{ + dir = 4 + }, /turf/open/floor/circuit/green, /area/centcom/central_command_areas/briefing) "SS" = ( @@ -9685,11 +10319,16 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/one) "ST" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 4 + }, /obj/machinery/door/poddoor/ert{ id = "XCCertstore" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, +/turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "SX" = ( /obj/machinery/computer/shuttle, @@ -9721,14 +10360,11 @@ /turf/open/floor/iron/smooth_edge, /area/centcom/central_command_areas/evacuation/ship) "Tg" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/briefcase/secure, /obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + dir = 4 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Th" = ( /obj/structure/filingcabinet/white, @@ -9768,7 +10404,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/turf/open/floor/iron/grimy, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "Tp" = ( /obj/structure/table/reinforced, @@ -9834,11 +10470,10 @@ /turf/open/floor/iron/dark, /area/centcom/tdome/observation) "TE" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479"; +/obj/structure/chair/comfy/black{ dir = 4 }, -/turf/open/floor/iron/grimy, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "TG" = ( /obj/item/kirbyplants/organic/plant21, @@ -9847,11 +10482,25 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/evacuation) "TI" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/green/full, +/obj/item/paper_bin{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/clipboard{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/paper{ + pixel_x = 7; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) "TJ" = ( /turf/cordon, @@ -9870,16 +10519,19 @@ /area/centcom/tdome/arena) "TS" = ( /obj/structure/table/wood, -/obj/item/dice/d20{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/dice/d10{ - pixel_x = -3 - }, /obj/machinery/computer/security/telescreen/entertainment/directional/south, /obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/item/book/manual/wiki/tgc{ + pixel_y = 1; + pixel_x = -6 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "TT" = ( @@ -9915,13 +10567,24 @@ }, /turf/open/floor/iron/white, /area/centcom/central_command_areas/admin) +"TX" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "Ub" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible{ dir = 1 }, /obj/machinery/meter, /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_red/filled/warning, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin/storage) "Ud" = ( @@ -9940,7 +10603,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 8 }, -/turf/open/floor/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Ui" = ( /obj/structure/table/wood, @@ -9950,7 +10616,9 @@ pixel_y = 24 }, /obj/machinery/status_display/ai/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "Ul" = ( @@ -9979,24 +10647,8 @@ /turf/open/floor/iron, /area/centcom/tdome/arena) "Ur" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/clothing/under/rank/civilian/curator/treasure_hunter, -/obj/item/clothing/under/dress/skirt, -/obj/item/clothing/under/shorts/black, -/obj/item/clothing/under/pants/track, -/obj/item/clothing/accessory/armband/deputy, -/obj/item/clothing/accessory/waistcoat, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/neck/large_scarf/red, -/obj/item/clothing/neck/tie/red, -/obj/item/clothing/head/helmet/space/beret, -/obj/item/clothing/suit/jacket/curator, -/obj/item/clothing/suit/space/officer, -/obj/item/clothing/gloves/fingerless, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/glasses/eyepatch, /obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "Us" = ( @@ -10023,7 +10675,7 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/supplypod) "Ux" = ( -/turf/open/indestructible/dark, +/turf/open/floor/circuit, /area/centcom/central_command_areas/admin) "Uz" = ( /obj/effect/turf_decal/stripes/line{ @@ -10051,26 +10703,25 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/supplypod) "UI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/tank/air{ dir = 1 }, /obj/machinery/firealarm/directional/south, /obj/structure/sign/warning/secure_area/directional/east, -/turf/open/floor/iron, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron/textured_edge, /area/centcom/central_command_areas/admin/storage) "UK" = ( /obj/structure/closet/secure_closet/ert_med, /obj/machinery/wall_healer/directional/south{ use_power = 0 }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/blue/half, +/turf/open/floor/iron/textured_half, /area/centcom/central_command_areas/armory) "UM" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -10092,12 +10743,37 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/control) "UR" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, /obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/neck/large_scarf/red, +/obj/item/clothing/neck/tie/red, +/obj/item/clothing/suit/space/officer, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/eyepatch, +/obj/item/clothing/gloves/fingerless, +/obj/item/clothing/suit/jacket/curator, +/obj/item/clothing/head/helmet/space/beret, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/accessory/armband/deputy, +/obj/item/clothing/accessory/waistcoat, +/obj/item/clothing/under/dress/skirt, +/obj/item/clothing/under/pants/track, +/obj/item/clothing/under/shorts/black, +/obj/item/clothing/under/rank/civilian/curator/treasure_hunter, +/obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) +"US" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/admin) "UU" = ( /obj/structure/sign/flag/nanotrasen/directional/east, /obj/effect/turf_decal/siding/dark{ @@ -10158,10 +10834,10 @@ pixel_y = 3 }, /obj/item/gun/energy/e_gun, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/effect/turf_decal/tile/dark_blue/half{ + dir = 1 }, -/turf/open/floor/iron, +/turf/open/floor/iron/textured_half, /area/centcom/central_command_areas/armory) "Vh" = ( /obj/structure/table/reinforced, @@ -10286,25 +10962,38 @@ /turf/open/floor/iron, /area/centcom/tdome/observation) "VK" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/donut_box, -/turf/open/floor/iron/grimy, +/obj/structure/table/glass, +/obj/item/storage/briefcase{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/stack/spacecash/c1000{ + pixel_x = 1 + }, +/obj/item/stack/spacecash/c100{ + pixel_x = 4; + pixel_y = 2 + }, +/turf/open/floor/carpet/executive, /area/centcom/central_command_areas/admin) "VM" = ( /obj/structure/closet/secure_closet/ert_sec, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/machinery/status_display/evac/directional/east, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/dark_red/half, +/turf/open/floor/iron/textured_half, /area/centcom/central_command_areas/armory) "VO" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 4 + }, /obj/machinery/door/poddoor/ert{ id = "XCCertstore" }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/turf/open/floor/iron, +/turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "VP" = ( /obj/effect/turf_decal/tile/brown/anticorner/contrasted, @@ -10330,22 +11019,17 @@ /area/centcom/central_command_areas/evacuation) "VZ" = ( /obj/structure/closet/secure_closet/ert_med, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/blue/half, +/turf/open/floor/iron/textured_half, /area/centcom/central_command_areas/armory) "Wa" = ( -/obj/item/kirbyplants/organic/plant22, /obj/structure/noticeboard/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "Wb" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, /obj/structure/sign/warning/secure_area/directional/south, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/green/arrow_cw, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "Wc" = ( @@ -10363,11 +11047,14 @@ /area/centcom/central_command_areas/evacuation) "Wd" = ( /obj/structure/table/reinforced, -/obj/item/gun/ballistic/automatic/wt550, -/obj/item/flashlight/seclite, +/obj/item/gun/ballistic/automatic/wt550{ + pixel_y = 9 + }, +/obj/item/flashlight/seclite{ + pixel_x = 1 + }, /obj/structure/noticeboard/directional/north, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, +/turf/open/floor/iron/textured_large, /area/centcom/central_command_areas/armory) "Wf" = ( /obj/structure/sink/directional/west, @@ -10376,9 +11063,19 @@ /area/centcom/tdome/observation) "Wl" = ( /obj/structure/table/wood, -/obj/machinery/recharger, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 8; + pixel_x = -6 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 8; + pixel_y = 12 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Wn" = ( /obj/effect/spawner/structure/window/reinforced, @@ -10413,6 +11110,7 @@ /turf/open/floor/iron/dark, /area/centcom/tdome/observation) "Wy" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/structure/chair/office, /obj/effect/landmark/ert_spawn, /turf/open/floor/iron/dark, @@ -10439,8 +11137,10 @@ /area/centcom/central_command_areas/evacuation) "WG" = ( /obj/structure/closet/secure_closet/ert_engi, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_half, /area/centcom/central_command_areas/armory) "WK" = ( /obj/structure/chair, @@ -10462,33 +11162,45 @@ /turf/closed/indestructible/riveted, /area/centcom/central_command_areas/ferry) "WN" = ( -/obj/structure/table/wood, -/obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/cup/glass/bottle/whiskey{ - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/filingcabinet/medical, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "WO" = ( -/obj/structure/table/wood, -/obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/cigarette/cigar/cohiba{ - pixel_x = 6 +/obj/machinery/photocopier/gratis/prebuilt, +/obj/machinery/button/door/directional/north{ + pixel_x = 6; + id = "QuickAccess"; + name = "Quick Access Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + req_access = list("cent_general") }, -/obj/item/cigarette/cigar/havana{ - pixel_x = 2 +/obj/machinery/button/door/directional/north{ + pixel_x = 6; + id = "HallwayLock"; + name = "Hallway Doors Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + req_access = list("cent_general"); + pixel_y = 36 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = -6; + id = "PodLock"; + name = "Pod Loading Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_y = 24; + req_access = list("cent_general") }, -/obj/item/cigarette/cigar{ - pixel_x = 4.5 +/obj/machinery/button/door/directional/north{ + pixel_x = -6; + id = "CCFerry"; + name = "Ferry Hangar Shutters"; + pixel_y = 36; + req_access = list("cent_general") }, -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/briefing) "WP" = ( /obj/machinery/computer/station_alert{ @@ -10503,14 +11215,13 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "WU" = ( -/obj/machinery/door/airlock/centcom{ - name = "Administrative Office" - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/admin/officer, -/turf/open/floor/iron, +/obj/machinery/door/airlock/centcom{ + name = "Administrative Office" + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "WX" = ( /obj/machinery/light_switch/directional/west, @@ -10523,8 +11234,7 @@ /obj/item/wrench, /obj/item/clothing/mask/gas, /obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "Xa" = ( /obj/structure/table/reinforced, @@ -10601,7 +11311,7 @@ "Xo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/structure/cable, -/turf/open/floor/wood, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Xp" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -10609,7 +11319,10 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/evacuation/ship) "Xq" = ( -/turf/open/floor/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Xs" = ( /obj/effect/turf_decal/tile/brown/anticorner/contrasted, @@ -10636,23 +11349,26 @@ /turf/open/floor/iron/grimy, /area/centcom/tdome/administration) "Xy" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Ferry Airlock" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, /obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/external/ruin{ + name = "Ferry Airlock" + }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) "Xz" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4 }, -/turf/open/floor/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "XC" = ( /obj/machinery/vending/snack, @@ -10694,13 +11410,13 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/supply) "XL" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 6 }, -/turf/open/floor/iron/grimy, +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "XQ" = ( /obj/machinery/computer/crew{ @@ -10714,13 +11430,28 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/centcom/central_command_areas/supplypod) +"XU" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "Ya" = ( /turf/closed/indestructible/riveted, /area/centcom/central_command_areas/armory) +"Yb" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/armory) "Yc" = ( /obj/structure/fireplace, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Ye" = ( /obj/structure/closet/crate/bin, @@ -10741,9 +11472,9 @@ /turf/open/floor/iron/dark/herringbone, /area/centcom/central_command_areas/evacuation/ship) "Yj" = ( -/obj/structure/chair/comfy/black, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/structure/cable, +/obj/structure/chair/sofa/left/brown, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "Yk" = ( @@ -10767,13 +11498,27 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/admin) "Yr" = ( /obj/structure/table/wood, -/obj/machinery/computer/security/wooden_tv, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/iron/grimy, +/obj/machinery/recharger{ + pixel_y = 3; + pixel_x = -10 + }, +/obj/item/camera{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/item/storage/photo_album{ + pixel_x = 3; + pixel_y = -5 + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "Yt" = ( /obj/structure/sign/directions/security{ @@ -10785,12 +11530,16 @@ /turf/open/floor/iron/white/herringbone, /area/centcom/central_command_areas/evacuation/ship) "Yy" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/folder/yellow, -/obj/item/pen/blue, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/green/full, +/obj/item/storage/toolbox/emergency{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/flashlight/flare{ + pixel_y = 1 + }, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) "YA" = ( /obj/machinery/door/airlock/centcom{ @@ -10853,6 +11602,9 @@ pixel_x = 5; pixel_y = 5 }, +/obj/item/toy/cards/deck{ + pixel_y = 8 + }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "YT" = ( @@ -10883,6 +11635,9 @@ "YX" = ( /obj/machinery/light/small/directional/east, /obj/structure/sign/warning/secure_area/directional/east, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "YY" = ( @@ -10956,12 +11711,13 @@ /turf/open/floor/iron, /area/centcom/tdome/arena) "Zl" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/folder/red, -/obj/item/pen/red, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/green/full, +/obj/item/storage/fancy/donut_box{ + pixel_y = 17 + }, +/obj/machinery/recharger, +/turf/open/floor/iron/dark/smooth_large, /area/centcom/central_command_areas/briefing) "Zm" = ( /obj/structure/sink/directional/east, @@ -10971,22 +11727,51 @@ }, /turf/open/floor/iron/white, /area/centcom/tdome/observation) +"Zn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/pen/fourcolor{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/taperecorder{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/carpet/green, +/area/centcom/central_command_areas/briefing) "Zq" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/herringbone, /area/centcom/central_command_areas/evacuation/ship) "Zs" = ( /obj/machinery/shuttle_manipulator, +/obj/effect/turf_decal/siding/dark/end{ + dir = 8 + }, /turf/open/floor/circuit/green, /area/centcom/central_command_areas/briefing) "Zv" = ( /obj/machinery/light/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/dark_red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/armory) "Zw" = ( /obj/structure/table/wood, -/obj/item/flashlight/lamp, +/obj/item/flashlight/lamp{ + pixel_y = 5; + pixel_x = -5 + }, /obj/machinery/requests_console/directional/north{ department = "Captain's Desk"; name = "CentCom Requests Console" @@ -10994,7 +11779,7 @@ /obj/effect/mapping_helpers/requests_console/announcement, /obj/effect/mapping_helpers/requests_console/information, /obj/effect/mapping_helpers/requests_console/assistance, -/turf/open/floor/iron/grimy, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/admin) "Zx" = ( /obj/machinery/computer/records/security{ @@ -11045,7 +11830,7 @@ pixel_x = 32 }, /obj/machinery/status_display/ai/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/green/anticorner/contrasted, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "ZG" = ( @@ -11075,16 +11860,23 @@ /turf/open/floor/iron, /area/centcom/tdome/observation) "ZN" = ( -/obj/item/clipboard, -/obj/item/folder/red, +/obj/item/clipboard{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/folder/red{ + pixel_x = -4; + pixel_y = 2 + }, /obj/item/stamp/denied{ - pixel_x = 3; + pixel_x = 9; pixel_y = 3 }, -/obj/item/stamp/granted, +/obj/item/stamp/granted{ + pixel_x = 5 + }, /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/ferry) "ZO" = ( /obj/structure/flora/bush/lavendergrass/style_random, @@ -46252,9 +47044,9 @@ oe YG mD oe -oe +mB td -oe +nR oe mD aa @@ -46498,14 +47290,14 @@ aa aa mD WY -su -ts +ss +tr By mD vC -wr +fw xe -wr +fw wx mD pB @@ -46755,20 +47547,20 @@ aa aa oe bW -su -ts +ss +cG pR uO -vD +hV fw -xf +xe fw yp sd ap pU pU -ms +pU qG oe aa @@ -47017,7 +47809,7 @@ tt PH mD vE -wt +je xg wt tn @@ -47274,16 +48066,16 @@ tu mD mD mD -ds +Qw xh -ds +ht mD gO cn -cn +ib gO -cn -cn +ib +CC gO gO aa @@ -47526,13 +48318,13 @@ Zf Zf On fu -Hz -Hz +ES +Lg Hz aK mD -tA wv +jZ wv mD yL @@ -47783,21 +48575,21 @@ Wl Qb On au -Hz +XU dx -Hz +HN dd mD -Kv +Kb xh Kv mD WO +id +id +id eF -eF -eF -eF -eF +WR db gO aa @@ -48034,9 +48826,9 @@ aa aa On AF -Xq +Fc Xz -Xq +uv cw On On @@ -48050,11 +48842,11 @@ Fh wz mD Rd -eF -hx +id +id TE az -eF +WR Ge gO aa @@ -48293,7 +49085,7 @@ On eA Rl Br -Xq +te cB On vv @@ -48302,16 +49094,16 @@ gm wq eB mD -ss -xj +ww +fw fa mD PU -eF +Zn nz yR eV -eF +WR xU gO aa @@ -48559,16 +49351,16 @@ YQ uh oh mD -ss +ww fw Wb mD kO -WR -RH -WR +Sv he -WR +he +he +CQ ty gO aa @@ -48816,12 +49608,12 @@ Xq Xq bO mD -wx +rd fw wB yr -RH -RH +fo +JG JW eE rB @@ -49061,9 +49853,9 @@ On ry TW fG -nA -MU -MU +Bn +US +US MU NM On @@ -49076,8 +49868,8 @@ vF wy TK vm -mD -RH +oe +vT Wy Sk Zs @@ -49321,25 +50113,25 @@ On Zw df hd -To +Mt BT On uP dz Nr -Xq +te Hw mD Cp -TK +xR xR OQ -Ny +Hq PM Om SR Yy -AL +OX oK gO aa @@ -49578,21 +50370,21 @@ On ks XL Yr -CV +Nc nA eD CV Vp OY -tl +te fN -mD -su +hu +hV fw wh mD -Fz -MJ +WR +PM TI Zl zz @@ -49844,14 +50636,14 @@ Em hT TS mD -su +fS fw bm mD -kO -Ny +HC +gW +ar ar -fi ar Ny Eb @@ -50107,9 +50899,9 @@ iH mD Mp Pd -RH +kw NC -RH +kw YX dW gO @@ -50347,7 +51139,7 @@ iF iF On lj -To +lX WX Ur UR @@ -50605,7 +51397,7 @@ pd On Rn EJ -QV +Et QV Mo YU @@ -50617,13 +51409,13 @@ uZ oe su fw -ts +pC WM WG OK -sE +Il bH -sE +Il Zv VZ RQ @@ -50873,14 +51665,14 @@ YU uY oe su -xf +fw ts mD cm -bH -bH -bH -sE +TX +IN +IN +gF sE UK Ya @@ -51134,11 +51926,11 @@ fw Hi mD Wd -bH +qx RV Sq gX -sE +cC yS Ya aa @@ -51391,11 +52183,11 @@ fw ts mD gw -bH +qx bA bj Pt -sE +cC FB Ya aa @@ -51644,15 +52436,15 @@ YU vb oe su -xk -iH +fw +ad mD Vg -bH -bH -bH -sE -sE +sG +Yb +Yb +hE +mU IK Ya aa @@ -51900,7 +52692,7 @@ cA YU va oe -wB +dR Fh xS ub @@ -51908,7 +52700,7 @@ wg oL fj RM -sE +OG gS VM Yt From d12cbcea1f733eb8ee7b594c88294c9fc9e550df Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 23:27:22 +0000 Subject: [PATCH 006/282] Automatic changelog for PR #95727 [ci skip] --- html/changelogs/AutoChangeLog-pr-95727.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95727.yml diff --git a/html/changelogs/AutoChangeLog-pr-95727.yml b/html/changelogs/AutoChangeLog-pr-95727.yml new file mode 100644 index 000000000000..6ab4b4d793a5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95727.yml @@ -0,0 +1,4 @@ +author: "Pumpkinoe" +delete-after: True +changes: + - map: "Centcom's ERT wing has been updated, including a new door that leads directly to the pod bay and buttons to control the doors!" \ No newline at end of file From aaae5995ce3ed0839b89cbf437cf63aa3db9a08c Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 00:01:18 +0000 Subject: [PATCH 007/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95727.yml | 4 ---- html/changelogs/AutoChangeLog-pr-95771.yml | 4 ---- html/changelogs/AutoChangeLog-pr-95813.yml | 5 ----- html/changelogs/archive/2026-04.yml | 9 +++++++++ 4 files changed, 9 insertions(+), 13 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95727.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95771.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95813.yml diff --git a/html/changelogs/AutoChangeLog-pr-95727.yml b/html/changelogs/AutoChangeLog-pr-95727.yml deleted file mode 100644 index 6ab4b4d793a5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95727.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Pumpkinoe" -delete-after: True -changes: - - map: "Centcom's ERT wing has been updated, including a new door that leads directly to the pod bay and buttons to control the doors!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95771.yml b/html/changelogs/AutoChangeLog-pr-95771.yml deleted file mode 100644 index 9bd2285a9bb5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95771.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Yobrocharlie" -delete-after: True -changes: - - rscadd: "added more things to the antag gear spawner" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95813.yml b/html/changelogs/AutoChangeLog-pr-95813.yml deleted file mode 100644 index ed6d79f72af5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95813.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "Fixed loss of credits for correctly denied minerals market cargo manifest" - - bugfix: "Cargo budget materials market orders arrive in crates as expected" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index e7f5b66cb21b..33af17c639cc 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -461,3 +461,12 @@ necromanceranne: - qol: The detective's noir fedora is actually a detective fedora, and gets all the unique qualities expected of one. +2026-04-21: + LT3: + - bugfix: Fixed loss of credits for correctly denied minerals market cargo manifest + - bugfix: Cargo budget materials market orders arrive in crates as expected + Pumpkinoe: + - map: Centcom's ERT wing has been updated, including a new door that leads directly + to the pod bay and buttons to control the doors! + Yobrocharlie: + - rscadd: added more things to the antag gear spawner From d70eb776f869bdeb93a5190158d5112aac200819 Mon Sep 17 00:00:00 2001 From: san7890 Date: Mon, 20 Apr 2026 19:24:58 -0600 Subject: [PATCH 008/282] Pins release downloader to actual version instead of commit hash (#95834) Closes #95833 Hopefully this will reduce dependabot spam and actually tie it to a set version that can be audited at https://github.com/robinraju/release-downloader/releases/tag/v1.13. I think this had to be on some sort of interstital version due to Node version changes but now that a proper release was made an hour ago that we should be fine. --- .github/workflows/run_linters.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_linters.yml b/.github/workflows/run_linters.yml index 851fbdaa380a..7fc32f695e11 100644 --- a/.github/workflows/run_linters.yml +++ b/.github/workflows/run_linters.yml @@ -43,7 +43,7 @@ jobs: with: dotnet-version: 9.x - name: Install OpenDream - uses: robinraju/release-downloader@93eac224fa5a1e835cc942d66c12ee373bc7fae9 + uses: robinraju/release-downloader@v1.13 with: repository: "OpenDreamProject/OpenDream" tag: "latest" From 437af28f481f200dc1e7ac2557dc73c140aa033f Mon Sep 17 00:00:00 2001 From: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Date: Tue, 21 Apr 2026 10:06:02 +0530 Subject: [PATCH 009/282] Fixes malformed string input for stale announce workflow (#95823) ## About The Pull Request Fixes https://github.com/tgstation/tgstation/actions/runs/24643489491 Fixes https://github.com/tgstation/tgstation/actions/runs/24058690318 Storing the string as environment variable removes the need to runtime decode the value which causes double slashes // to be decoded as a single slash / which breaks the json string ## Changelog N/A --- .github/workflows/stale.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 987b4674fa5e..55c0909c2258 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -38,9 +38,11 @@ jobs: - name: Filter staled pull requests for announcement id: filter-prs uses: actions/github-script@v9 + env: + input: ${{steps.stale.outputs.staled-issues-prs}} with: script: | - return JSON.parse(`${{steps.stale.outputs.staled-issues-prs}}`) + return JSON.parse(process.env.input) .filter(issue => !!issue.pull_request) .map(pr => ({ title: pr.title, From c1e298ce6be8efda85a71cf8be508c4751c7372b Mon Sep 17 00:00:00 2001 From: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Date: Tue, 21 Apr 2026 17:33:38 +0200 Subject: [PATCH 010/282] halves the price of grapple guns (#95815) ## About The Pull Request 2 years ago i added this item. 2 years ago i set its price at 3000 points, i dont remember why cause this was 2 years ago. ## Why It's Good For The Game i talked to a few (1) miner players regarding this, the feedback i got was that, for a minor QoL tool, it was a bit too expensive for what it does. Especially now that theres more viable/accessible ways of traversing lava, ive decided to knock its price down a bit hopefully to make it more worthwhile. ## Changelog :cl: balance: the grapple gun's price has been reduced to 1500 points /:cl: --- .../computer/orders/order_items/mining/order_mining.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm index cf33d3bd8e5a..d628e3fc3292 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm @@ -122,4 +122,4 @@ /datum/orderable_item/mining/grapple_gun purchase_path = /obj/item/grapple_gun - cost_per_order = 3000 + cost_per_order = 1500 From ba85b2ebdc41c08d81c3c414dd36723cb7513308 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:34:01 +0000 Subject: [PATCH 011/282] Automatic changelog for PR #95815 [ci skip] --- html/changelogs/AutoChangeLog-pr-95815.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95815.yml diff --git a/html/changelogs/AutoChangeLog-pr-95815.yml b/html/changelogs/AutoChangeLog-pr-95815.yml new file mode 100644 index 000000000000..888f30c77347 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95815.yml @@ -0,0 +1,4 @@ +author: "Ben10Omintrix" +delete-after: True +changes: + - balance: "the grapple gun's price has been reduced to 1500 points" \ No newline at end of file From 55366497a3f156f5553a6446edf4c0b0cbba6716 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 18:00:46 +0000 Subject: [PATCH 012/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95815.yml | 4 ---- html/changelogs/archive/2026-04.yml | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95815.yml diff --git a/html/changelogs/AutoChangeLog-pr-95815.yml b/html/changelogs/AutoChangeLog-pr-95815.yml deleted file mode 100644 index 888f30c77347..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95815.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ben10Omintrix" -delete-after: True -changes: - - balance: "the grapple gun's price has been reduced to 1500 points" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 33af17c639cc..3b710cfd30ad 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -462,6 +462,8 @@ - qol: The detective's noir fedora is actually a detective fedora, and gets all the unique qualities expected of one. 2026-04-21: + Ben10Omintrix: + - balance: the grapple gun's price has been reduced to 1500 points LT3: - bugfix: Fixed loss of credits for correctly denied minerals market cargo manifest - bugfix: Cargo budget materials market orders arrive in crates as expected From e98cb75c570217e897cc037e36989bcd55c6cf02 Mon Sep 17 00:00:00 2001 From: FinancialGoose <92416224+TheBoondock@users.noreply.github.com> Date: Tue, 21 Apr 2026 13:43:47 -0700 Subject: [PATCH 013/282] Refactor gasmix mole change into a proc (#95327) ## About The Pull Request Refactor the majority of the current gasmix mole change use cases into a proc called adjust_gas which simply adds the designated mole count of the species into the gas mix while also handling asserting the gas and garbage_collect() I also added adjust_multiple_gases and convert_gas() for modifying multiple gases and within a gasmix ## Why It's Good For The Game Lemon wanted this to be done as part of the air group refactor ## Changelog :cl: refactor: refactored majority of gas_mix mole change into adjust_gas() proc /:cl: --- .../diseases/floor_diseases/gastritium.dm | 5 +- code/datums/elements/death_gases.dm | 4 +- .../fluid_spread/effects_foam.dm | 7 +- .../fluid_spread/effects_smoke.dm | 9 +- .../objects/effects/spawners/bombspawner.dm | 59 ++++----- code/game/objects/items/tanks/jetpack.dm | 3 +- code/game/objects/items/tanks/tank_types.dm | 45 +++---- .../items/weaponry/ranged/flamethrower.dm | 6 +- .../crates_lockers/closets/bodybag.dm | 15 ++- code/game/objects/structures/toiletbong.dm | 2 +- .../transit_tubes/transit_tube_pod.dm | 5 +- code/game/turfs/change_turf.dm | 2 +- .../heretic/items/corrupted_organs.dm | 3 +- .../atmospherics/gasmixtures/gas_mixture.dm | 35 ++++++ .../atmospherics/gasmixtures/reactions.dm | 8 +- .../electrolyzer/electrolyzer_reactions.dm | 22 ++-- .../components/fusion/hfr_main_processes.dm | 115 ++++++++---------- .../atmospherics/machinery/components/tank.dm | 4 +- .../machinery/portable/canister.dm | 18 ++- .../machinery/portable/pipe_scrubber.dm | 1 + .../machinery/portable/scrubber.dm | 6 +- code/modules/clothing/masks/gas_filter.dm | 12 +- .../events/space_vines/vine_mutations.dm | 2 +- code/modules/fishing/fish/fish_traits.dm | 4 +- .../modules/hydroponics/unique_plant_genes.dm | 4 +- code/modules/mob/living/basic/tree.dm | 6 +- code/modules/mod/modules/modules_timeline.dm | 5 +- .../power/supermatter/supermatter_gas.dm | 10 +- .../surgery/organs/internal/lungs/_lungs.dm | 7 +- .../mecha/equipment/tools/air_tank.dm | 5 +- 30 files changed, 211 insertions(+), 218 deletions(-) diff --git a/code/datums/diseases/floor_diseases/gastritium.dm b/code/datums/diseases/floor_diseases/gastritium.dm index 228cfa7496a4..e87555111476 100644 --- a/code/datums/diseases/floor_diseases/gastritium.dm +++ b/code/datums/diseases/floor_diseases/gastritium.dm @@ -44,11 +44,10 @@ /datum/disease/gastritium/proc/tritium_burp(hot_chance = FALSE) var/datum/gas_mixture/burp = new - ADD_GAS(/datum/gas/tritium, burp.gases) - burp.gases[/datum/gas/tritium][MOLES] = MOLES_GAS_VISIBLE + burp.set_gas(/datum/gas/tritium, MOLES_GAS_VISIBLE) burp.temperature = affected_mob.bodytemperature if(hot_chance && prob(tritium_burp_hot_chance)) - burp.temperature = TRITIUM_MINIMUM_BURN_TEMPERATURE + burp.set_temperature(TRITIUM_MINIMUM_BURN_TEMPERATURE) if(affected_mob.stat == CONSCIOUS) to_chat(affected_mob, span_warning("Your throat feels hot!")) affected_mob.visible_message("burps out green gas.", visible_message_flags = EMOTE_MESSAGE) diff --git a/code/datums/elements/death_gases.dm b/code/datums/elements/death_gases.dm index b93c870f817f..7589e7194158 100644 --- a/code/datums/elements/death_gases.dm +++ b/code/datums/elements/death_gases.dm @@ -30,7 +30,7 @@ SIGNAL_HANDLER var/datum/gas_mixture/mix_to_spawn = new() mix_to_spawn.add_gas(gas_type) - mix_to_spawn.gases[gas_type][MOLES] = amount_of_gas - mix_to_spawn.temperature = T20C + mix_to_spawn.set_gas(gas_type, amount_of_gas) + mix_to_spawn.set_temperature(T20C) var/turf/open/our_turf = get_turf(target) our_turf.assume_air(mix_to_spawn) diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm index 736be058ee4b..468654f4d5a0 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm @@ -291,10 +291,9 @@ QDEL_NULL(hotspot) var/datum/gas_mixture/air = location.air - var/list/gases = air.gases - if (gases[/datum/gas/plasma]) - var/scrub_amt = min(30, gases[/datum/gas/plasma][MOLES]) //Absorb some plasma - gases[/datum/gas/plasma][MOLES] -= scrub_amt + if (air.gases[/datum/gas/plasma]) + var/scrub_amt = min(30, air.gases[/datum/gas/plasma][MOLES]) //Absorb some plasma + air.adjust_gas(/datum/gas/plasma, -scrub_amt) absorbed_plasma += scrub_amt if (air.temperature > T20C) air.temperature = max(air.temperature / 2, T20C) diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm index b6d3d892896b..cca69643fb36 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm @@ -297,11 +297,10 @@ if(!distcheck || get_dist(location, chilly) < blast) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air air.temperature = temperature - var/list/gases = air.gases - if(gases[/datum/gas/plasma]) - air.assert_gas(/datum/gas/nitrogen) - gases[/datum/gas/nitrogen][MOLES] += gases[/datum/gas/plasma][MOLES] - gases[/datum/gas/plasma][MOLES] = 0 + if(air.gases[/datum/gas/plasma]) + var/mole_count = air.gases[/datum/gas/plasma][MOLES] + air.adjust_gas(/datum/gas/nitrogen, mole_count) + air.adjust_gas(/datum/gas/plasma, -mole_count) air.garbage_collect() for(var/obj/effect/hotspot/fire in chilly) diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index 9d1da48cd290..c5c82b485e0e 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -44,14 +44,11 @@ if(!first_gasmix || !second_gasmix) return - first_gasmix.temperature = 1413 - second_gasmix.temperature = 141.3 + first_gasmix.set_temperature(1413) + second_gasmix.set_temperature(141.3) - first_gasmix.assert_gas(/datum/gas/plasma) - second_gasmix.assert_gas(/datum/gas/oxygen) - - first_gasmix.gases[/datum/gas/plasma][MOLES] = calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1) - second_gasmix.gases[/datum/gas/oxygen][MOLES] = calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1) + first_gasmix.set_gas(/datum/gas/plasma, calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1)) + second_gasmix.set_gas(/datum/gas/oxygen, calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1)) /obj/effect/spawner/newbomb/tritium @@ -60,16 +57,13 @@ if(!first_gasmix || !second_gasmix) return - first_gasmix.temperature = 8000 - second_gasmix.temperature = 43 + first_gasmix.set_temperature(8000) + second_gasmix.set_temperature(43) - first_gasmix.assert_gas(/datum/gas/plasma) - second_gasmix.assert_gas(/datum/gas/oxygen) - second_gasmix.assert_gas(/datum/gas/tritium) + first_gasmix.set_gas(/datum/gas/plasma, calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1)) - first_gasmix.gases[/datum/gas/plasma][MOLES] = calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1) - second_gasmix.gases[/datum/gas/oxygen][MOLES] = 0.67 * calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1) - second_gasmix.gases[/datum/gas/tritium][MOLES] = 0.33 * calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1) + second_gasmix.set_gas(/datum/gas/oxygen, 0.67 * calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1)) + second_gasmix.set_gas(/datum/gas/tritium, 0.33 * calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1)) /obj/effect/spawner/newbomb/isolated_tritium @@ -78,16 +72,13 @@ if(!first_gasmix || !second_gasmix) return - first_gasmix.temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 1 - second_gasmix.temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 1 + first_gasmix.set_temperature(FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 1) + second_gasmix.set_temperature(FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 1) - first_gasmix.assert_gas(/datum/gas/hypernoblium) - first_gasmix.assert_gas(/datum/gas/tritium) - second_gasmix.assert_gas(/datum/gas/oxygen) + first_gasmix.set_gas(/datum/gas/hypernoblium, REACTION_OPPRESSION_THRESHOLD - 0.01,) + first_gasmix.set_gas( /datum/gas/tritium, 0.5 * calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1)) - first_gasmix.gases[/datum/gas/hypernoblium][MOLES] = REACTION_OPPRESSION_THRESHOLD - 0.01 - first_gasmix.gases[/datum/gas/tritium][MOLES] = 0.5 * calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1) - second_gasmix.gases[/datum/gas/oxygen][MOLES] = calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE-1) + second_gasmix.set_gas(/datum/gas/oxygen, calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE-1)) /obj/effect/spawner/newbomb/noblium @@ -96,14 +87,11 @@ if(!first_gasmix || !second_gasmix) return - first_gasmix.temperature = 2.7 - second_gasmix.temperature = 2.7 - - first_gasmix.assert_gas(/datum/gas/nitrogen) - second_gasmix.assert_gas(/datum/gas/tritium) + first_gasmix.set_temperature(2.7) + second_gasmix.set_temperature(2.7) - first_gasmix.gases[/datum/gas/nitrogen][MOLES] = calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1) - second_gasmix.gases[/datum/gas/tritium][MOLES] = calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1) + first_gasmix.set_gas(/datum/gas/nitrogen, calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1)) + second_gasmix.set_gas(/datum/gas/tritium, calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1)) /obj/effect/spawner/newbomb/pressure @@ -112,11 +100,8 @@ if(!first_gasmix || !second_gasmix) return - first_gasmix.temperature = 20000 - second_gasmix.temperature = 2.7 - - first_gasmix.assert_gas(/datum/gas/hypernoblium) - second_gasmix.assert_gas(/datum/gas/tritium) + first_gasmix.set_temperature(20000) + second_gasmix.set_temperature(2.7) - first_gasmix.gases[/datum/gas/hypernoblium][MOLES] = calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1) - second_gasmix.gases[/datum/gas/tritium][MOLES] = calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1) + first_gasmix.set_gas(/datum/gas/hypernoblium, calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1)) + second_gasmix.set_gas(/datum/gas/tritium, calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE - 1)) diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index 3a665d903a66..74557295dac4 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -73,8 +73,7 @@ /obj/item/tank/jetpack/populate_gas() if(gas_type) var/datum/gas_mixture/our_mix = return_air() - our_mix.assert_gas(gas_type) - our_mix.gases[gas_type][MOLES] = ((6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C)) + our_mix.set_gas(gas_type, ((6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C))) /obj/item/tank/jetpack/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/toggle_jetpack)) diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 0d8734a799b5..11ce2b694799 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -35,8 +35,7 @@ /obj/item/tank/internals/oxygen/populate_gas() - air_contents.assert_gas(/datum/gas/oxygen) - air_contents.gases[/datum/gas/oxygen][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.set_gas(/datum/gas/oxygen, (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/internals/oxygen/yellow @@ -68,9 +67,9 @@ force = 10 /obj/item/tank/internals/anesthetic/populate_gas() - air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrous_oxide) - air_contents.gases[/datum/gas/oxygen][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD + air_contents.set_gas(/datum/gas/oxygen, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD) + air_contents.set_gas(/datum/gas/nitrous_oxide, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD) + /obj/item/tank/internals/anesthetic/examine(mob/user) . = ..() @@ -82,8 +81,7 @@ icon_state = "anesthetic_warning" /obj/item/tank/internals/anesthetic/pure/populate_gas() - air_contents.assert_gases(/datum/gas/nitrous_oxide) - air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.adjust_gas(/datum/gas/nitrous_oxide, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /* * Plasma @@ -101,8 +99,7 @@ /obj/item/tank/internals/plasma/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.set_gas(/datum/gas/plasma, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/flamethrower)) @@ -118,8 +115,7 @@ return ..() /obj/item/tank/internals/plasma/full/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.set_gas(/datum/gas/plasma, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/internals/plasma/empty/populate_gas() return @@ -138,12 +134,10 @@ distribute_pressure = TANK_PLASMAMAN_RELEASE_PRESSURE /obj/item/tank/internals/plasmaman/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.set_gas(/datum/gas/plasma, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/internals/plasmaman/full/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.set_gas(/datum/gas/plasma, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/internals/plasmaman/belt @@ -158,8 +152,7 @@ w_class = WEIGHT_CLASS_SMALL //thanks i forgot this /obj/item/tank/internals/plasmaman/belt/full/populate_gas() - air_contents.assert_gas(/datum/gas/plasma) - air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.set_gas(/datum/gas/plasma, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/internals/plasmaman/belt/empty/populate_gas() return @@ -186,8 +179,7 @@ /obj/item/tank/internals/emergency_oxygen/populate_gas() - air_contents.assert_gas(/datum/gas/oxygen) - air_contents.gases[/datum/gas/oxygen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.set_gas(/datum/gas/oxygen, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) /obj/item/tank/internals/emergency_oxygen/empty/populate_gas() @@ -246,21 +238,18 @@ /obj/item/tank/internals/emergency_oxygen/engi/clown/n2o /obj/item/tank/internals/emergency_oxygen/engi/clown/n2o/populate_gas() - air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrous_oxide) - air_contents.gases[/datum/gas/oxygen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.95 - air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.05 + air_contents.set_gas(/datum/gas/oxygen, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.95) + air_contents.set_gas(/datum/gas/nitrous_oxide, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.05) /obj/item/tank/internals/emergency_oxygen/engi/clown/bz /obj/item/tank/internals/emergency_oxygen/engi/clown/bz/populate_gas() - air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/bz) - air_contents.gases[/datum/gas/oxygen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.9 - air_contents.gases[/datum/gas/bz][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.1 + air_contents.set_gas(/datum/gas/oxygen,(10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.9) + air_contents.set_gas(/datum/gas/bz,(10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.1) /obj/item/tank/internals/emergency_oxygen/engi/clown/helium distribute_pressure = TANK_CLOWN_RELEASE_PRESSURE + 2 /obj/item/tank/internals/emergency_oxygen/engi/clown/helium/populate_gas() - air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/helium) - air_contents.gases[/datum/gas/oxygen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.75 - air_contents.gases[/datum/gas/helium][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.25 + air_contents.set_gas(/datum/gas/oxygen, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.75) + air_contents.set_gas(/datum/gas/helium, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * 0.25) diff --git a/code/game/objects/items/weaponry/ranged/flamethrower.dm b/code/game/objects/items/weaponry/ranged/flamethrower.dm index 29a410dcb103..c8421c9fe80f 100644 --- a/code/game/objects/items/weaponry/ranged/flamethrower.dm +++ b/code/game/objects/items/weaponry/ranged/flamethrower.dm @@ -231,7 +231,8 @@ var/datum/gas_mixture/air_transfer = tank_mix.remove_ratio(release_amount) if(air_transfer.gases[/datum/gas/plasma]) - air_transfer.gases[/datum/gas/plasma][MOLES] *= 5 //Suffering + var/moles = air_transfer.gases[/datum/gas/plasma][MOLES] * 5 //Suffering + air_transfer.set_gas(/datum/gas/plasma, moles) target.assume_air(air_transfer) //Burn it based on transferred gas target.hotspot_expose((tank_mix.temperature*2) + 380,500) @@ -286,8 +287,7 @@ SIGNAL_HANDLER if(ptank) var/datum/gas_mixture/tank_mix = ptank.return_air() - tank_mix.assert_gas(/datum/gas/plasma) - tank_mix.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*ptank.volume/(R_IDEAL_GAS_EQUATION*T20C) + tank_mix.set_gas(/datum/gas/plasma, (10*ONE_ATMOSPHERE)*ptank.volume/(R_IDEAL_GAS_EQUATION*T20C)) else ptank = new /obj/item/tank/internals/plasma/full(src) update_appearance() diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index 28c2b6030b3c..4a4830a960f3 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -297,8 +297,8 @@ air_contents.temperature = T20C air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrogen) - air_contents.gases[/datum/gas/oxygen][MOLES] = (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - air_contents.gases[/datum/gas/nitrogen][MOLES] = (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD + air_contents.adjust_gas(/datum/gas/oxygen, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD) + air_contents.adjust_gas(/datum/gas/nitrogen, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD) /obj/structure/closet/body_bag/environmental/nanotrasen name = "elite environmental protection bag" @@ -428,8 +428,8 @@ air_contents.temperature = T20C air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrous_oxide) - air_contents.gases[/datum/gas/oxygen][MOLES] = (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD + air_contents.adjust_gas(/datum/gas/oxygen, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD) + air_contents.adjust_gas(/datum/gas/nitrous_oxide, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD) /obj/structure/closet/body_bag/environmental/hardlight name = "hardlight bodybag" @@ -509,11 +509,10 @@ var/inner_temp = T0C - 60 air_contents = null air_contents = new(mol_count) - air_contents.temperature = inner_temp + air_contents.set_temperature(inner_temp) - air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrogen) - air_contents.gases[/datum/gas/oxygen][MOLES] = (ONE_ATMOSPHERE * mol_count) / (R_IDEAL_GAS_EQUATION * inner_temp) * O2STANDARD - air_contents.gases[/datum/gas/nitrogen][MOLES] = (ONE_ATMOSPHERE * mol_count) / (R_IDEAL_GAS_EQUATION * inner_temp) * N2STANDARD + air_contents.set_gas(/datum/gas/oxygen, ((ONE_ATMOSPHERE * mol_count) / (R_IDEAL_GAS_EQUATION * inner_temp) * O2STANDARD)) + air_contents.set_gas(/datum/gas/nitrogen, ((ONE_ATMOSPHERE * mol_count) / (R_IDEAL_GAS_EQUATION * inner_temp) * N2STANDARD)) /obj/structure/closet/body_bag/environmental/stasis/examine_status(mob/user) switch(100 * get_integrity_percentage()) diff --git a/code/game/objects/structures/toiletbong.dm b/code/game/objects/structures/toiletbong.dm index 72549bdbcc7f..93e54886e6ef 100644 --- a/code/game/objects/structures/toiletbong.dm +++ b/code/game/objects/structures/toiletbong.dm @@ -95,7 +95,7 @@ return FALSE new /obj/item/flamethrower(get_turf(src)) var/obj/item/tank/internals/plasma/ptank = new /obj/item/tank/internals/plasma(get_turf(src)) - ptank.air_contents.gases[/datum/gas/plasma][MOLES] = (0) + ptank.air_contents.set_gas(/datum/gas/plasma, 0) drop_custom_materials() qdel(src) return TRUE diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index fe806662dac4..30ea69ff0d40 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -14,9 +14,8 @@ /obj/structure/transit_tube_pod/Initialize(mapload) . = ..() - air_contents.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen) - air_contents.gases[/datum/gas/oxygen][MOLES] = MOLES_O2STANDARD - air_contents.gases[/datum/gas/nitrogen][MOLES] = MOLES_N2STANDARD + var/list/new_gases = list(/datum/gas/oxygen = MOLES_O2STANDARD, /datum/gas/nitrogen = MOLES_N2STANDARD) + air_contents.adjust_multiple_gases(new_gases) air_contents.temperature = T20C /obj/structure/transit_tube_pod/Destroy() diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 49ebdb577a92..fa55c13fe40d 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -281,7 +281,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/list/giver_gases = mix.gases for(var/giver_id in giver_gases) ASSERT_GAS_IN_LIST(giver_id, total_gases) - total_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES] + total.adjust_gas(giver_id, giver_gases[giver_id][MOLES]) total.temperature = energy / heat_cap for(var/id in total_gases) diff --git a/code/modules/antagonists/heretic/items/corrupted_organs.dm b/code/modules/antagonists/heretic/items/corrupted_organs.dm index a6494591910e..0c96652436c2 100644 --- a/code/modules/antagonists/heretic/items/corrupted_organs.dm +++ b/code/modules/antagonists/heretic/items/corrupted_organs.dm @@ -251,8 +251,7 @@ breather.emote("cough"); var/chosen_gas = pick_weight(gas_types) var/datum/gas_mixture/mix_to_spawn = new() - mix_to_spawn.add_gas(pick(chosen_gas)) - mix_to_spawn.gases[chosen_gas][MOLES] = gas_amount + mix_to_spawn.adjust_gas(pick(chosen_gas), gas_amount) mix_to_spawn.temperature = breather.bodytemperature log_atmos("[owner] coughed some gas into the air due to their corrupted lungs.", mix_to_spawn) var/turf/open/our_turf = get_turf(breather) diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index b9f59c3208df..2324824426a4 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -172,6 +172,40 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) SEND_SIGNAL(src, COMSIG_GASMIX_MERGED) return TRUE +// Set the gas specie within the gas mix to a set amount, if there is none it will be created at the target temp +/datum/gas_mixture/proc/set_gas(gas_specie, amount) + ASSERT_GAS(gas_specie, src) + gases[gas_specie][MOLES] = amount + garbage_collect() + +/datum/gas_mixture/proc/set_temperature(target_temp) + temperature = target_temp + +/// Add a specific amount of moles to specified gas or add a new gas to the mix +/// amount is added so make it negative to remove +/datum/gas_mixture/proc/adjust_gas(gas, amount) + ASSERT_GAS(gas, src) + gases[gas][MOLES] += QUANTIZE(amount) + garbage_collect() + +/// Add a specific amount of moles to all the gasses present or add a new gas to the mix +///gases_moles is an associative list of gas species to their amount to be added +/datum/gas_mixture/proc/adjust_multiple_gases(list/gases_moles) + for(var/gas_specie in gases_moles) + ASSERT_GAS(gas_specie, src) + gases[gas_specie][MOLES] += gases_moles[gas_specie] + garbage_collect() + + +/// Modify the gas list as to convert moles of gas species A to gas species B +/// reactant and product are the gas species to convert and conversion_amount is the amount to be converted +/datum/gas_mixture/proc/convert_gas(datum/gas/reactant, datum/gas/product, conversion_amount) + var/list/cached_gases = gases + assert_gases(reactant, product) + cached_gases[reactant][MOLES] -= QUANTIZE(conversion_amount) + cached_gases[product][MOLES] += QUANTIZE(conversion_amount) + garbage_collect() + ///Proportionally removes amount of gas from the gas_mixture. ///Returns: gas_mixture with the gases removed /datum/gas_mixture/proc/remove(amount) @@ -764,3 +798,4 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) atmos_contents += temperature_str return atmos_contents.Join(";") + diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index d215c1c68030..4f5c643d05c1 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -220,7 +220,7 @@ plasma_burn_rate = min(plasma_burn_rate, plasma[MOLES], oxygen[MOLES] * INVERSE(oxygen_burn_ratio)) //Ensures matter is conserved properly plasma[MOLES] = QUANTIZE(plasma[MOLES] - plasma_burn_rate) oxygen[MOLES] = QUANTIZE(oxygen[MOLES] - (plasma_burn_rate * oxygen_burn_ratio)) - if (super_saturation) + if(super_saturation) ASSERT_GAS(/datum/gas/tritium, air) cached_gases[/datum/gas/tritium][MOLES] += plasma_burn_rate else @@ -229,6 +229,7 @@ cached_gases[/datum/gas/carbon_dioxide][MOLES] += plasma_burn_rate * 0.75 cached_gases[/datum/gas/water_vapor][MOLES] += plasma_burn_rate * 0.25 + SET_REACTION_RESULTS((plasma_burn_rate) * (1 + oxygen_burn_ratio)) var/energy_released = FIRE_PLASMA_ENERGY_RELEASED * plasma_burn_rate var/new_heat_capacity = air.heat_capacity() @@ -583,6 +584,8 @@ nitrous_oxide[MOLES] -= 0.4 * bz_formed plasma[MOLES] -= 0.8 * bz_formed * (1-nitrous_oxide_decomposed_factor) + + SET_REACTION_RESULTS(bz_formed) var/energy_released = bz_formed * (BZ_FORMATION_ENERGY + nitrous_oxide_decomposed_factor * (N2O_DECOMPOSITION_ENERGY - BZ_FORMATION_ENERGY)) var/new_heat_capacity = air.heat_capacity() @@ -681,6 +684,7 @@ bz[MOLES] -= heat_efficiency * 0.05 //bz gets consumed to balance the nitrium production and not make it too common and/or easy cached_gases[/datum/gas/nitrium][MOLES] += heat_efficiency + SET_REACTION_RESULTS(heat_efficiency) var/energy_used = heat_efficiency * NITRIUM_FORMATION_ENERGY var/new_heat_capacity = air.heat_capacity() @@ -829,6 +833,7 @@ tritium[MOLES] -= 5 * nob_formed * reduction_factor nitrogen[MOLES] -= 10 * nob_formed cached_gases[/datum/gas/hypernoblium][MOLES] += nob_formed // I'm not going to nitpick, but N20H10 feels like it should be an explosive more than anything. + SET_REACTION_RESULTS(nob_formed) var/energy_released = nob_formed * NOBLIUM_FORMATION_ENERGY / max(bz[MOLES], 1) var/new_heat_capacity = air.heat_capacity() @@ -1254,6 +1259,7 @@ continue gas[MOLES] -= reaction_rate * gas[MOLES] / total_not_antinoblium_moles antinoblium[MOLES] += reaction_rate + SET_REACTION_RESULTS(reaction_rate) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer_reactions.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer_reactions.dm index 21fd7eb018aa..6ff941771907 100644 --- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer_reactions.dm +++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer_reactions.dm @@ -64,11 +64,11 @@ GLOBAL_LIST_INIT(electrolyzer_reactions, electrolyzer_reactions_list()) /datum/electrolyzer_reaction/h2o_conversion/react(datum/gas_mixture/air_mixture, working_power, list/electrolyzer_args = list()) var/old_heat_capacity = air_mixture.heat_capacity() - air_mixture.assert_gases(/datum/gas/water_vapor, /datum/gas/oxygen, /datum/gas/hydrogen) + var/proportion = min(air_mixture.gases[/datum/gas/water_vapor][MOLES] * INVERSE(2), (2.5 * (working_power ** 2))) - air_mixture.gases[/datum/gas/water_vapor][MOLES] -= proportion * 2 - air_mixture.gases[/datum/gas/oxygen][MOLES] += proportion - air_mixture.gases[/datum/gas/hydrogen][MOLES] += proportion * 2 + air_mixture.adjust_gas(/datum/gas/water_vapor, -proportion * 2) + air_mixture.adjust_gas(/datum/gas/oxygen, proportion) + air_mixture.adjust_gas(/datum/gas/hydrogen, proportion * 2) var/new_heat_capacity = air_mixture.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air_mixture.temperature = max(air_mixture.temperature * old_heat_capacity / new_heat_capacity, TCMB) @@ -100,8 +100,10 @@ GLOBAL_LIST_INIT(electrolyzer_reactions, electrolyzer_reactions_list()) var/list/hypernoblium = cached_gases[/datum/gas/hypernoblium] var/list/antinoblium = cached_gases[/datum/gas/antinoblium] var/electrolysed = hypernoblium[MOLES] * clamp(supermatter_power - POWER_PENALTY_THRESHOLD, 0, CRITICAL_POWER_PENALTY_THRESHOLD - POWER_PENALTY_THRESHOLD) / (CRITICAL_POWER_PENALTY_THRESHOLD - POWER_PENALTY_THRESHOLD) - hypernoblium[MOLES] -= electrolysed - antinoblium[MOLES] += electrolysed + + air_mixture.adjust_gas(/datum/gas/hypernoblium, -electrolysed) + air_mixture.adjust_gas(/datum/gas/antinoblium, electrolysed) + var/new_heat_capacity = old_heat_capacity + electrolysed * (antinoblium[GAS_META][META_GAS_SPECIFIC_HEAT] - hypernoblium[GAS_META][META_GAS_SPECIFIC_HEAT]) if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air_mixture.temperature = max(air_mixture.temperature * old_heat_capacity / new_heat_capacity, TCMB) @@ -126,9 +128,11 @@ GLOBAL_LIST_INIT(electrolyzer_reactions, electrolyzer_reactions_list()) var/old_heat_capacity = air_mixture.heat_capacity() air_mixture.assert_gases(/datum/gas/bz, /datum/gas/oxygen, /datum/gas/halon) var/reaction_efficency = min(air_mixture.gases[/datum/gas/bz][MOLES] * (1 - NUM_E ** (-0.5 * air_mixture.temperature * working_power / FIRE_MINIMUM_TEMPERATURE_TO_EXIST)), air_mixture.gases[/datum/gas/bz][MOLES]) - air_mixture.gases[/datum/gas/bz][MOLES] -= reaction_efficency - air_mixture.gases[/datum/gas/oxygen][MOLES] += reaction_efficency * 0.2 - air_mixture.gases[/datum/gas/halon][MOLES] += reaction_efficency * 2 + + air_mixture.adjust_gas(/datum/gas/bz, -reaction_efficency) + air_mixture.adjust_gas(/datum/gas/oxygen, reaction_efficency * 0.2) + air_mixture.adjust_gas(/datum/gas/halon, reaction_efficency * 2) + var/energy_used = reaction_efficency * HALON_FORMATION_ENERGY var/new_heat_capacity = air_mixture.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm index 06fcda77b444..0dbf0cfaa540 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm @@ -250,37 +250,37 @@ var/scaled_production = production_amount * selected_fuel.gas_production_multiplier for(var/gas_id in fuel.requirements) - internal_fusion.gases[gas_id][MOLES] -= min(fuel_list[gas_id], fuel_consumption) + internal_fusion.adjust_gas(gas_id, -min(fuel_list[gas_id], fuel_consumption)) for(var/gas_id in fuel.primary_products) - internal_fusion.gases[gas_id][MOLES] += fuel_consumption * 0.5 + internal_fusion.adjust_gas(gas_id, fuel_consumption * 0.5) // Each recipe provides a tier list of six output gases. // Which gases are produced depend on what the fusion level is. var/list/tier = fuel.secondary_products switch(power_level) if(1) - moderator_internal.gases[tier[1]][MOLES] += scaled_production * 0.95 - moderator_internal.gases[tier[2]][MOLES] += scaled_production * 0.75 + moderator_internal.adjust_gas(tier[1], scaled_production * 0.95) + moderator_internal.adjust_gas(tier[2], scaled_production * 0.75) if(2) - moderator_internal.gases[tier[1]][MOLES] += scaled_production * 1.65 - moderator_internal.gases[tier[2]][MOLES] += scaled_production + moderator_internal.adjust_gas(tier[1], scaled_production * 1.65) + moderator_internal.adjust_gas(tier[2], scaled_production) if(moderator_list[/datum/gas/plasma] > 50) - moderator_internal.gases[tier[3]][MOLES] += scaled_production * 1.15 + moderator_internal.adjust_gas(tier[3], scaled_production * 1.15) if(3) - moderator_internal.gases[tier[2]][MOLES] += scaled_production * 0.5 - moderator_internal.gases[tier[3]][MOLES] += scaled_production * 0.45 + moderator_internal.adjust_gas(tier[2], scaled_production * 0.5) + moderator_internal.adjust_gas(tier[3], scaled_production * 0.45) if(4) - moderator_internal.gases[tier[3]][MOLES] += scaled_production * 1.65 - moderator_internal.gases[tier[4]][MOLES] += scaled_production * 1.25 + moderator_internal.adjust_gas(tier[3], scaled_production * 1.65) + moderator_internal.adjust_gas(tier[4], scaled_production * 1.25) if(moderator_list[/datum/gas/plasma] > 50) - moderator_internal.gases[tier[5]][MOLES] += scaled_production * 1.15 + moderator_internal.adjust_gas(tier[5], scaled_production * 1.15) if(5) - moderator_internal.gases[tier[4]][MOLES] += scaled_production * 0.65 - moderator_internal.gases[tier[5]][MOLES] += scaled_production - moderator_internal.gases[tier[6]][MOLES] += scaled_production * 0.75 + moderator_internal.adjust_gas(tier[4], scaled_production * 0.65) + moderator_internal.adjust_gas(tier[5], scaled_production) + moderator_internal.adjust_gas(tier[6], scaled_production * 0.75) if(6) - moderator_internal.gases[tier[5]][MOLES] += scaled_production * 0.35 - moderator_internal.gases[tier[6]][MOLES] += scaled_production + moderator_internal.adjust_gas(tier[5], scaled_production * 0.35) + moderator_internal.adjust_gas(tier[6], scaled_production) /** * Perform common fusion actions: @@ -293,94 +293,81 @@ switch(power_level) if(1) if(moderator_list[/datum/gas/plasma] > 100) - internal_output.assert_gases(/datum/gas/nitrous_oxide) - internal_output.gases[/datum/gas/nitrous_oxide] += scaled_production * 0.5 - moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 0.85) + internal_output.adjust_gas(/datum/gas/nitrous_oxide, scaled_production * 0.5) + moderator_internal.adjust_gas(/datum/gas/plasma, min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 0.85)) if(moderator_list[/datum/gas/bz] > 150) - internal_output.assert_gases(/datum/gas/halon) - internal_output.gases[/datum/gas/halon][MOLES] += scaled_production * 0.55 - moderator_internal.gases[/datum/gas/bz][MOLES] -= min(moderator_internal.gases[/datum/gas/bz][MOLES], scaled_production * 0.95) + internal_output.adjust_gas(/datum/gas/halon, scaled_production * 0.55) + moderator_internal.adjust_gas(/datum/gas/bz, min(moderator_internal.gases[/datum/gas/bz][MOLES], scaled_production * 0.95)) if(2) if(moderator_list[/datum/gas/plasma] > 50) - internal_output.assert_gases(/datum/gas/bz) - internal_output.gases[/datum/gas/bz][MOLES] += scaled_production * 1.8 - moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.75) + internal_output.adjust_gas(/datum/gas/bz, scaled_production * 1.8) + moderator_internal.adjust_gas(/datum/gas/plasma, min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.75)) if(moderator_list[/datum/gas/proto_nitrate] > 20) radiation *= 1.55 heat_output *= 1.025 - internal_output.assert_gases(/datum/gas/nitrium) - internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.05 - moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.35) + internal_output.adjust_gas(/datum/gas/nitrium, scaled_production * 1.05) + moderator_internal.adjust_gas(/datum/gas/proto_nitrate, min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.35)) if(3, 4) if(moderator_list[/datum/gas/plasma] > 10) - internal_output.assert_gases(/datum/gas/freon, /datum/gas/nitrium) - internal_output.gases[/datum/gas/freon][MOLES] += scaled_production * 0.15 - internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.05 - moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 0.45) + var/list/new_gases = list(/datum/gas/freon = scaled_production * 0.15, /datum/gas/nitrium = scaled_production * 1.05) + internal_output.adjust_multiple_gases(new_gases) + moderator_internal.adjust_gas(/datum/gas/plasma, min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 0.45)) if(moderator_list[/datum/gas/freon] > 50) heat_output *= 0.9 radiation *= 0.8 if(moderator_list[/datum/gas/proto_nitrate]> 15) - internal_output.assert_gases(/datum/gas/nitrium, /datum/gas/halon) - internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.25 - internal_output.gases[/datum/gas/halon][MOLES] += scaled_production * 1.15 - moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.55) + var/list/new_gases = list(/datum/gas/nitrium = scaled_production * 1.25, /datum/gas/halon = scaled_production * 1.15) + internal_output.adjust_multiple_gases(new_gases) + moderator_internal.adjust_gas(/datum/gas/proto_nitrate, min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.55)) radiation *= 1.95 heat_output *= 1.25 if(moderator_list[/datum/gas/bz] > 100) - internal_output.assert_gases(/datum/gas/healium, /datum/gas/proto_nitrate) - internal_output.gases[/datum/gas/proto_nitrate][MOLES] += scaled_production * 1.5 - internal_output.gases[/datum/gas/healium][MOLES] += scaled_production * 1.5 + var/list/new_gases = list(/datum/gas/healium = scaled_production * 1.5, /datum/gas/proto_nitrate = scaled_production * 1.5) + internal_output.adjust_multiple_gases(new_gases) visible_hallucination_pulse(src, HALLUCINATION_HFR(heat_output), 100 SECONDS * power_level * seconds_per_tick) if(5) if(moderator_list[/datum/gas/plasma] > 15) - internal_output.assert_gases(/datum/gas/freon) - internal_output.gases[/datum/gas/freon][MOLES] += scaled_production *0.25 - moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.45) + internal_output.adjust_gas(/datum/gas/freon, scaled_production *0.25) + moderator_internal.adjust_gas(/datum/gas/plasma,min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.45)) if(moderator_list[/datum/gas/freon] > 500) heat_output *= 0.5 radiation *= 0.2 if(moderator_list[/datum/gas/proto_nitrate] > 50) - internal_output.assert_gases(/datum/gas/nitrium, /datum/gas/pluoxium) - internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.95 - internal_output.gases[/datum/gas/pluoxium][MOLES] += scaled_production - moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.35) + var/list/new_gases = list(/datum/gas/nitrium = scaled_production * 1.95, /datum/gas/pluoxium = scaled_production) + internal_output.adjust_multiple_gases(new_gases) + moderator_internal.adjust_gas(/datum/gas/proto_nitrate, min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.35)) radiation *= 1.95 heat_output *= 1.25 if(moderator_list[/datum/gas/bz] > 100) - internal_output.assert_gases(/datum/gas/healium, /datum/gas/freon) - internal_output.gases[/datum/gas/healium][MOLES] += scaled_production + var/list/new_gases = list(/datum/gas/healium = scaled_production, /datum/gas/freon = scaled_production * 1.15) + internal_output.adjust_multiple_gases(new_gases) visible_hallucination_pulse(src, HALLUCINATION_HFR(heat_output), 100 SECONDS * power_level * seconds_per_tick) - internal_output.gases[/datum/gas/freon][MOLES] += scaled_production * 1.15 if(moderator_list[/datum/gas/healium] > 100) if(critical_threshold_proximity > 400) critical_threshold_proximity = max(critical_threshold_proximity - (moderator_list[/datum/gas/healium] / 100 * seconds_per_tick ), 0) - moderator_internal.gases[/datum/gas/healium][MOLES] -= min(moderator_internal.gases[/datum/gas/healium][MOLES], scaled_production * 20) + moderator_internal.adjust_gas(/datum/gas/healium, -min(moderator_internal.gases[/datum/gas/healium][MOLES], scaled_production * 20)) if(moderator_internal.temperature < 1e7 || (moderator_list[/datum/gas/plasma] > 100 && moderator_list[/datum/gas/bz] > 50)) - internal_output.assert_gases(/datum/gas/antinoblium) - internal_output.gases[/datum/gas/antinoblium][MOLES] += dirty_production_rate * 0.9 / 0.065 * seconds_per_tick + internal_output.adjust_gas(/datum/gas/antinoblium, dirty_production_rate * 0.9 / 0.065 * seconds_per_tick) if(6) internal_output.assert_gases(/datum/gas/antinoblium) if(moderator_list[/datum/gas/plasma] > 30) - internal_output.assert_gases(/datum/gas/bz) - internal_output.gases[/datum/gas/bz][MOLES] += scaled_production * 1.15 - moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.45) + internal_output.adjust_gas(/datum/gas/bz, scaled_production * 1.15) + moderator_internal.adjust_gas(/datum/gas/plasma, -min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.45)) if(moderator_list[/datum/gas/proto_nitrate]) - internal_output.assert_gases(/datum/gas/zauker, /datum/gas/nitrium) - internal_output.gases[/datum/gas/zauker][MOLES] += scaled_production * 5.35 - internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 2.15 - moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 3.35) + var/list/new_gases = list(/datum/gas/zauker = scaled_production * 5.35, /datum/gas/nitrium = scaled_production * 2.15) + internal_output.adjust_multiple_gases(new_gases) + moderator_internal.adjust_gas(/datum/gas/proto_nitrate, -min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 3.35)) radiation *= 2 heat_output *= 2.25 if(moderator_list[/datum/gas/bz]) visible_hallucination_pulse(src, HALLUCINATION_HFR(heat_output), 100 SECONDS * power_level * seconds_per_tick) - internal_output.gases[/datum/gas/antinoblium][MOLES] += clamp(dirty_production_rate / 0.045, 0, 10) * seconds_per_tick + internal_output.adjust_gas(/datum/gas/antinoblium, clamp(dirty_production_rate / 0.045, 0, 10) * seconds_per_tick) if(moderator_list[/datum/gas/healium] > 100) if(critical_threshold_proximity > 400) critical_threshold_proximity = max(critical_threshold_proximity - (moderator_list[/datum/gas/healium] / 100 * seconds_per_tick ), 0) - moderator_internal.gases[/datum/gas/healium][MOLES] -= min(moderator_internal.gases[/datum/gas/healium][MOLES], scaled_production * 20) - internal_fusion.gases[/datum/gas/antinoblium][MOLES] += dirty_production_rate * 0.01 / 0.095 * seconds_per_tick + moderator_internal.adjust_gas(/datum/gas/healium, -min(moderator_internal.gases[/datum/gas/healium][MOLES], scaled_production * 20)) + internal_fusion.adjust_gas(/datum/gas/antinoblium, dirty_production_rate * 0.01 / 0.095 * seconds_per_tick) //Modifies the internal_fusion temperature with the amount of heat output var/temperature_modifier = selected_fuel.temperature_change_multiplier @@ -413,7 +400,7 @@ var/max_iron_removable = IRON_OXYGEN_HEAL_PER_SECOND var/iron_removed = min(max_iron_removable * seconds_per_tick, iron_content) iron_content -= iron_removed - moderator_internal.gases[/datum/gas/oxygen][MOLES] -= iron_removed * OXYGEN_MOLES_CONSUMED_PER_IRON_HEAL + moderator_internal.adjust_gas(/datum/gas/oxygen, -iron_removed * OXYGEN_MOLES_CONSUMED_PER_IRON_HEAL) check_gravity_pulse(seconds_per_tick) diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index 1bfb9c1d5b23..8d9381df2732 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -143,8 +143,8 @@ var/pressure_limit = max_pressure * safety_margin var/moles_to_add = (pressure_limit * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature) - air_contents.assert_gas(gastype) - air_contents.gases[gastype][MOLES] += moles_to_add + + air_contents.adjust_gas(gastype, moles_to_add) air_contents.archive() /obj/machinery/atmospherics/components/tank/process_atmos() diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 0ca5fbff785d..3a76be7b1844 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -308,9 +308,8 @@ pressure_limit = 1e14 /obj/machinery/portable_atmospherics/canister/fusion_test/create_gas() - air_contents.add_gases(/datum/gas/hydrogen, /datum/gas/tritium) - air_contents.gases[/datum/gas/hydrogen][MOLES] = 300 - air_contents.gases[/datum/gas/tritium][MOLES] = 300 + air_contents.adjust_gas(/datum/gas/hydrogen, 300) + air_contents.adjust_gas(/datum/gas/tritium, 300) air_contents.temperature = 10000 SSair.start_processing_machine(src) @@ -323,9 +322,8 @@ greyscale_colors = "#9fba6c#3d4680" /obj/machinery/portable_atmospherics/canister/anesthetic_mix/create_gas() - air_contents.add_gases(/datum/gas/oxygen, /datum/gas/nitrous_oxide) - air_contents.gases[/datum/gas/oxygen][MOLES] = (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature) - air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature) + air_contents.adjust_gas(/datum/gas/oxygen, (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)) + air_contents.adjust_gas(/datum/gas/nitrous_oxide, (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)) SSair.start_processing_machine(src) /** @@ -335,14 +333,12 @@ /obj/machinery/portable_atmospherics/canister/proc/create_gas() if(!gas_type) return - air_contents.add_gas(gas_type) - air_contents.gases[gas_type][MOLES] = (maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature) + air_contents.adjust_gas(gas_type, (maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)) SSair.start_processing_machine(src) /obj/machinery/portable_atmospherics/canister/air/create_gas() - air_contents.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen) - air_contents.gases[/datum/gas/oxygen][MOLES] = (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature) - air_contents.gases[/datum/gas/nitrogen][MOLES] = (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature) + air_contents.adjust_gas(/datum/gas/oxygen, (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)) + air_contents.adjust_gas(/datum/gas/nitrogen, (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)) SSair.start_processing_machine(src) /obj/machinery/portable_atmospherics/canister/update_icon_state() diff --git a/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm b/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm index 60f3ac82bb8f..6ab73e5b2e1d 100644 --- a/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm @@ -93,6 +93,7 @@ filtered.temperature = filtering.temperature for(var/gas in filtering.gases & scrubbing) filtered.add_gas(gas) + filtered.gases[gas][MOLES] = filtering.gases[gas][MOLES] // Shuffle the "bad" gasses to the filtered mixture. filtering.gases[gas][MOLES] = 0 filtering.garbage_collect() // Now that the gasses are set to 0, clean up the mixture. diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index b1b094c9db01..4fd3392c32b5 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -84,7 +84,7 @@ //contains all of the gas we're sucking out of the tile, gets put into our parent pipenet var/datum/gas_mixture/filtered_out = new - var/list/filtered_gases = filtered_out.gases + filtered_out.temperature = environment.temperature //maximum percentage of the turfs gas we can filter @@ -102,8 +102,8 @@ filtered_out.add_gas(gas) var/transferred_moles = max(QUANTIZE(env_gases[gas][MOLES] * removal_ratio * (env_gases[gas][MOLES] / total_moles_to_remove)), min(MOLAR_ACCURACY*1000, env_gases[gas][MOLES])) - filtered_gases[gas][MOLES] = transferred_moles - env_gases[gas][MOLES] -= transferred_moles + filtered_out.adjust_gas(gas, transferred_moles) + environment.adjust_gas(gas, -transferred_moles) environment.garbage_collect() diff --git a/code/modules/clothing/masks/gas_filter.dm b/code/modules/clothing/masks/gas_filter.dm index 1399a1a07d45..98abaf220dd2 100644 --- a/code/modules/clothing/masks/gas_filter.dm +++ b/code/modules/clothing/masks/gas_filter.dm @@ -70,26 +70,26 @@ for(var/gas_id in breath.gases) if(gas_id in high_filtering_gases) if(breath.gases[gas_id][MOLES] > HIGH_FILTERING_MOLES) - breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_high * filter_efficiency * HIGH_FILTERING_RATIO, 0) + breath.set_gas(gas_id, max(breath.gases[gas_id][MOLES] - filter_strength_high * filter_efficiency * HIGH_FILTERING_RATIO, 0)) danger_points += 1 continue - breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_high * filter_efficiency * LOW_FILTERING_RATIO, 0) + breath.set_gas(gas_id, max(breath.gases[gas_id][MOLES] - filter_strength_high * filter_efficiency * LOW_FILTERING_RATIO, 0)) danger_points += 0.2 continue if(gas_id in mid_filtering_gases) if(breath.gases[gas_id][MOLES] > MID_FILTERING_MOLES) - breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_mid * filter_efficiency * HIGH_FILTERING_RATIO, 0) + breath.set_gas(gas_id, max(breath.gases[gas_id][MOLES] - filter_strength_mid * filter_efficiency * HIGH_FILTERING_RATIO, 0)) danger_points += 1.25 continue - breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_mid * filter_efficiency * LOW_FILTERING_RATIO, 0) + breath.set_gas(gas_id, max(breath.gases[gas_id][MOLES] - filter_strength_mid * filter_efficiency * LOW_FILTERING_RATIO, 0)) danger_points += 0.25 continue if(gas_id in low_filtering_gases) if(breath.gases[gas_id][MOLES] > LOW_FILTERING_MOLES) - breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_low * filter_efficiency * HIGH_FILTERING_RATIO, 0) + breath.set_gas(gas_id, max(breath.gases[gas_id][MOLES] - filter_strength_low * filter_efficiency * HIGH_FILTERING_RATIO, 0)) danger_points += 1.5 continue - breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_low * filter_efficiency * LOW_FILTERING_RATIO, 0) + breath.set_gas(gas_id, max(breath.gases[gas_id][MOLES] - filter_strength_low * filter_efficiency * LOW_FILTERING_RATIO, 0)) danger_points += 0.5 continue diff --git a/code/modules/events/space_vines/vine_mutations.dm b/code/modules/events/space_vines/vine_mutations.dm index ab6a3a2d394b..a0308fb317da 100644 --- a/code/modules/events/space_vines/vine_mutations.dm +++ b/code/modules/events/space_vines/vine_mutations.dm @@ -287,7 +287,7 @@ if(!gas_mix.gases[gas_type]) return - gas_mix.gases[gas_type][MOLES] = max(gas_mix.gases[gas_type][MOLES] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.growth_stage, 0) + gas_mix.set_gas(gas_type, max(gas_mix.gases[gas_type][MOLES] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.growth_stage, 0)) gas_mix.garbage_collect() /datum/spacevine_mutation/gas_eater/oxy_eater diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm index 342bfc981fd4..ae97235cfe56 100644 --- a/code/modules/fishing/fish/fish_traits.dm +++ b/code/modules/fishing/fish/fish_traits.dm @@ -340,8 +340,8 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) return var/datum/gas_mixture/stench = new - ADD_GAS(/datum/gas/miasma, stench.gases) - stench.gases[/datum/gas/miasma][MOLES] = MIASMA_CORPSE_MOLES * 2 * seconds_per_tick + + stench.set_gas(/datum/gas/miasma, MIASMA_CORPSE_MOLES * 2 * seconds_per_tick) stench.temperature = mob.bodytemperature our_turf.assume_air(stench) diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm index 7b273834a869..ad65e5f3a8e2 100644 --- a/code/modules/hydroponics/unique_plant_genes.dm +++ b/code/modules/hydroponics/unique_plant_genes.dm @@ -681,8 +681,8 @@ return var/datum/gas_mixture/stank = new - ADD_GAS(/datum/gas/miasma, stank.gases) - stank.gases[/datum/gas/miasma][MOLES] = (seed.yield + 6) * 3.5 * MIASMA_CORPSE_MOLES * seconds_per_tick // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses + + stank.set_gas(/datum/gas/miasma, (seed.yield + 6) * 3.5 * MIASMA_CORPSE_MOLES * seconds_per_tick) // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses stank.temperature = T20C // without this the room would eventually freeze and miasma mining would be easier tray_turf.assume_air(stank) diff --git a/code/modules/mob/living/basic/tree.dm b/code/modules/mob/living/basic/tree.dm index bae229fddd8c..5d370cf7cfbe 100644 --- a/code/modules/mob/living/basic/tree.dm +++ b/code/modules/mob/living/basic/tree.dm @@ -68,11 +68,11 @@ var/turf/open/our_turf = src.loc if(!our_turf.air || !our_turf.air.gases[/datum/gas/carbon_dioxide]) return - - var/co2 = our_turf.air.gases[/datum/gas/carbon_dioxide][MOLES] + var/datum/gas_mixture/our_air = our_turf.air + var/co2 = our_air.gases[/datum/gas/carbon_dioxide][MOLES] if(co2 > 0 && SPT_PROB(13, seconds_per_tick)) var/amt = min(co2, 9) - our_turf.air.gases[/datum/gas/carbon_dioxide][MOLES] -= amt + our_air.adjust_gas(/datum/gas/carbon_dioxide, -amt) our_turf.atmos_spawn_air("[GAS_O2]=[amt]") /mob/living/basic/tree/melee_attack(atom/target, list/modifiers, ignore_cooldown = FALSE) diff --git a/code/modules/mod/modules/modules_timeline.dm b/code/modules/mod/modules/modules_timeline.dm index a544e0963e01..0573d23e7b1d 100644 --- a/code/modules/mod/modules/modules_timeline.dm +++ b/code/modules/mod/modules/modules_timeline.dm @@ -418,9 +418,8 @@ /obj/structure/chrono_field/return_air() //we always have nominal air and temperature var/datum/gas_mixture/fresh_air = new - fresh_air.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen) - fresh_air.gases[/datum/gas/oxygen][MOLES] = MOLES_O2STANDARD - fresh_air.gases[/datum/gas/nitrogen][MOLES] = MOLES_N2STANDARD + fresh_air.set_gas(/datum/gas/oxygen, MOLES_O2STANDARD) + fresh_air.set_gas(/datum/gas/nitrogen, MOLES_N2STANDARD) fresh_air.temperature = T20C return fresh_air diff --git a/code/modules/power/supermatter/supermatter_gas.dm b/code/modules/power/supermatter/supermatter_gas.dm index b6eb2804c28a..01eb977325ea 100644 --- a/code/modules/power/supermatter/supermatter_gas.dm +++ b/code/modules/power/supermatter/supermatter_gas.dm @@ -113,10 +113,10 @@ GLOBAL_LIST_INIT(sm_gas_behavior, init_sm_gas()) ) if(!consumed_co2) return - sm.absorbed_gasmix.gases[/datum/gas/carbon_dioxide][MOLES] -= consumed_co2 - sm.absorbed_gasmix.gases[/datum/gas/oxygen][MOLES] -= consumed_co2 - ASSERT_GAS(/datum/gas/pluoxium, sm.absorbed_gasmix) - sm.absorbed_gasmix.gases[/datum/gas/pluoxium][MOLES] += consumed_co2 + sm.absorbed_gasmix.adjust_gas(/datum/gas/carbon_dioxide, -consumed_co2) + sm.absorbed_gasmix.adjust_gas(/datum/gas/oxygen, -consumed_co2) + + sm.absorbed_gasmix.adjust_gas(/datum/gas/pluoxium, consumed_co2) /datum/sm_gas/plasma gas_path = /datum/gas/plasma @@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(sm_gas_behavior, init_sm_gas()) var/consumed_miasma = sm.absorbed_gasmix.gases[/datum/gas/miasma][MOLES] * miasma_ratio if(!consumed_miasma) return - sm.absorbed_gasmix.gases[/datum/gas/miasma][MOLES] -= consumed_miasma + sm.absorbed_gasmix.adjust_gas(/datum/gas/miasma, -consumed_miasma) sm.external_power_trickle += consumed_miasma * MIASMA_POWER_GAIN sm.log_activation("miasma absorption") diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index 38364f303918..6ccd4a85a8d4 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -1133,10 +1133,9 @@ /// H2O electrolysis /obj/item/organ/lungs/ethereal/proc/consume_water(mob/living/carbon/breather, datum/gas_mixture/breath, h2o_pp, old_h2o_pp) var/gas_breathed = breath.gases[/datum/gas/water_vapor][MOLES] - breath.gases[/datum/gas/water_vapor][MOLES] -= gas_breathed - breath_out.assert_gases(/datum/gas/oxygen, /datum/gas/hydrogen) - breath_out.gases[/datum/gas/oxygen][MOLES] += gas_breathed - breath_out.gases[/datum/gas/hydrogen][MOLES] += gas_breathed * 2 + breath.adjust_gas(/datum/gas/water_vapor, -gas_breathed) + var/list/new_gases = list(/datum/gas/oxygen = gas_breathed, /datum/gas/hydrogen = gas_breathed * 2) + breath_out.adjust_multiple_gases(new_gases) /obj/item/organ/lungs/pod diff --git a/code/modules/vehicles/mecha/equipment/tools/air_tank.dm b/code/modules/vehicles/mecha/equipment/tools/air_tank.dm index 6d9765e6b058..eae27f5a183a 100644 --- a/code/modules/vehicles/mecha/equipment/tools/air_tank.dm +++ b/code/modules/vehicles/mecha/equipment/tools/air_tank.dm @@ -31,9 +31,8 @@ internal_tank.air_contents.volume = volume internal_tank.maximum_pressure = maximum_pressure if(start_full) - internal_tank.air_contents.temperature = T20C - internal_tank.air_contents.add_gases(/datum/gas/oxygen) - internal_tank.air_contents.gases[/datum/gas/oxygen][MOLES] = maximum_pressure * volume / (R_IDEAL_GAS_EQUATION * internal_tank.air_contents.temperature) + internal_tank.air_contents.set_temperature(T20C) + internal_tank.air_contents.set_gas(/datum/gas/oxygen, maximum_pressure * volume / (R_IDEAL_GAS_EQUATION * internal_tank.air_contents.temperature)) /obj/item/mecha_parts/mecha_equipment/air_tank/Destroy() if(chassis) From 7a98053a2f72b32d4e9de6f6bdfbe0a8e47fc41f Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 20:44:05 +0000 Subject: [PATCH 014/282] Automatic changelog for PR #95327 [ci skip] --- html/changelogs/AutoChangeLog-pr-95327.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95327.yml diff --git a/html/changelogs/AutoChangeLog-pr-95327.yml b/html/changelogs/AutoChangeLog-pr-95327.yml new file mode 100644 index 000000000000..664df019b8de --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95327.yml @@ -0,0 +1,4 @@ +author: "TheBoondock" +delete-after: True +changes: + - refactor: "refactored majority of gas_mix mole change into adjust_gas() proc" \ No newline at end of file From 28bf5ff0b72492dfc28f53be746a8d7709786958 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 00:00:22 +0000 Subject: [PATCH 015/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95327.yml | 4 ---- html/changelogs/archive/2026-04.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95327.yml diff --git a/html/changelogs/AutoChangeLog-pr-95327.yml b/html/changelogs/AutoChangeLog-pr-95327.yml deleted file mode 100644 index 664df019b8de..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95327.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheBoondock" -delete-after: True -changes: - - refactor: "refactored majority of gas_mix mole change into adjust_gas() proc" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 3b710cfd30ad..9bf8d725bb71 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -472,3 +472,6 @@ to the pod bay and buttons to control the doors! Yobrocharlie: - rscadd: added more things to the antag gear spawner +2026-04-22: + TheBoondock: + - refactor: refactored majority of gas_mix mole change into adjust_gas() proc From ce6364b0829eaaefae3d54201194a83f1ff306b3 Mon Sep 17 00:00:00 2001 From: Bloop <13398309+vinylspiders@users.noreply.github.com> Date: Wed, 22 Apr 2026 07:03:04 -0400 Subject: [PATCH 016/282] Fixes crafting runtime (#95822) ## About The Pull Request
big purple dinosaur clogging up the runtime logs v7N2LciICX
The issue is, the `contents` of items checked by `get_surroundings()` are assumed to be `/obj/item` which is a false assumption. So this just adds typechecking so that we don't runtime here and break crafting in the vicinity. This is a bad spot to runtime because it will stop materials from being picked up by the crafting menu, preventing crafting from being possible.
before tracy-profiler_Fk2WSoYG5t
after tracy-profiler_gHRDdRMMqo
I profiled this both before and after these changes in the same exact spot, surrounded by 70 electrical toolboxes, and the impact is negligible (actually appears to be ~7.5% faster, interestingly). ## Why It's Good For The Game ## Changelog :cl: fix: fixes an issue where raptor chicks and other non-items appearing in item contents would prevent any personal crafting in the vicinity /:cl: --- code/datums/components/crafting/crafting.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index a042bfe7a02c..1a19b82c97b6 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -180,7 +180,8 @@ for(var/obj/item/item in source.contents) within_source += item if(item.atom_storage) - within_source += item.contents + for(var/obj/item/item_stored_within in item.contents) + within_source += item_stored_within for(var/obj/item/item as anything in within_source) if(!item.tool_behaviour) From 69a3b9c7948bdab3491c455692fafcfdd0cc4215 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 11:03:23 +0000 Subject: [PATCH 017/282] Automatic changelog for PR #95822 [ci skip] --- html/changelogs/AutoChangeLog-pr-95822.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95822.yml diff --git a/html/changelogs/AutoChangeLog-pr-95822.yml b/html/changelogs/AutoChangeLog-pr-95822.yml new file mode 100644 index 000000000000..5a506caf1434 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95822.yml @@ -0,0 +1,4 @@ +author: "vinylspiders" +delete-after: True +changes: + - bugfix: "fixes an issue where raptor chicks and other non-items appearing in item contents would prevent any personal crafting in the vicinity" \ No newline at end of file From c9bcef21979457e9b3556f63eea1cdf5badad66e Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Wed, 22 Apr 2026 06:08:44 -0500 Subject: [PATCH 018/282] Spacers get pos mood for achieving nograv on planets (#95818) ## About The Pull Request Spacers who manage to get nograv on a planet are given a positive moodlet, and are considered in space for their buffs/debuffs ## Why It's Good For The Game I don't remember if I was opposed to this in the past or why I didn't make it work this way in the first place. It's sensible that, if you manage to disable your own gravity, all of the negative effects (which are tied to you feeling heavy gravity) would be lifted. ## Changelog :cl: Melbert add: Spacers who manage to get nograv while on a planet are given a positive moodlet, and are considered in space for the purpose of their buffs/debuffs /:cl: --- .../signals/signals_mob/signals_mob_living.dm | 3 + code/datums/quirks/positive_quirks/spacer.dm | 55 ++++++++++++++++--- code/datums/status_effects/debuffs/spacer.dm | 14 +++++ code/modules/mob/living/living_movement.dm | 2 +- 4 files changed, 66 insertions(+), 8 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index 4c7df9de2347..72ea3d186231 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -390,3 +390,6 @@ /// From /mob/living/on_looking_z_level_change() : (turf/old_turf, turf/new_turf) #define COMSIG_LIVING_LOOK_Z_CHANGE "living_look_z_change" + +/// From /mob/living/proc/refresh_gravity() : (new_gravity, old_gravity) +#define COMSIG_LIVING_GRAVITY_CHANGED "living_gravity_changed" diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm index a1c7f83ab421..24d392985de6 100644 --- a/code/datums/quirks/positive_quirks/spacer.dm +++ b/code/datums/quirks/positive_quirks/spacer.dm @@ -1,5 +1,6 @@ #define LAST_STATE_PLANET "on_planet" #define LAST_STATE_SPACE "in_space" +#define LAST_STATE_NOGRAV "in_nograv" /datum/quirk/spacer_born name = "Spacer" @@ -26,7 +27,7 @@ var/recover_period = 1 MINUTES /// TimerID for time spend in space VAR_FINAL/recovering_timer - /// Determines the last state we were in ([LAST_STATE_PLANET] or [LAST_STATE_SPACE]) + /// Determines the last state we were in ([LAST_STATE_PLANET], [LAST_STATE_SPACE], or [LAST_STATE_NOGRAV]) VAR_FINAL/last_state /datum/quirk/spacer_born/add(client/client_source) @@ -38,9 +39,10 @@ // It won't really make sense to walk 3 feet and then suddenly gain / lose gravity sickness. // If I'm proven wrong, swap this to use Moved. RegisterSignal(quirk_holder, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(spacer_moved)) + RegisterSignal(quirk_holder, COMSIG_LIVING_GRAVITY_CHANGED, PROC_REF(spacer_grav)) // Yes, it's assumed for planetary maps that you start at gravity sickness. - check_z(quirk_holder, skip_timers = TRUE) + update_effects(quirk_holder, skip_timers = TRUE) // drift slightly faster through zero G quirk_holder.inertia_move_multiplier *= 0.8 @@ -69,6 +71,7 @@ /datum/quirk/spacer_born/remove() UnregisterSignal(quirk_holder, COMSIG_MOVABLE_Z_CHANGED) + UnregisterSignal(quirk_holder, COMSIG_LIVING_GRAVITY_CHANGED) if(QDELING(quirk_holder)) return @@ -87,7 +90,13 @@ /datum/quirk/spacer_born/proc/spacer_moved(mob/living/source, turf/old_turf, turf/new_turf, same_z_layer) SIGNAL_HANDLER - check_z(source) + update_effects(source) + +/// Check on gravity change whether we should start or stop timers +/datum/quirk/spacer_born/proc/spacer_grav(mob/living/source, new_gravity, old_gravity) + SIGNAL_HANDLER + + update_effects(source) /** * Used to check if we should start or stop timers based on the quirk holder's location. @@ -95,9 +104,12 @@ * * afflicted - the mob arriving / same as quirk holder * * skip_timers - if TRUE, this is being done instantly / should not have feedback (such as in init) */ -/datum/quirk/spacer_born/proc/check_z(mob/living/spacer, skip_timers = FALSE) +/datum/quirk/spacer_born/proc/update_effects(mob/living/spacer, skip_timers = FALSE) if(is_on_a_planet(spacer)) - on_planet(spacer, skip_timers) + if(spacer.has_gravity()) + on_planet(spacer, skip_timers) + else + has_nograv(spacer, skip_timers) else in_space(spacer, skip_timers) @@ -168,9 +180,10 @@ deltimer(planetside_timer) planetside_timer = null + var/was_nograv = last_state == LAST_STATE_NOGRAV last_state = LAST_STATE_SPACE - if(skip_timers) + if(skip_timers || was_nograv) comfortably_in_space(afflicted, TRUE) return @@ -181,7 +194,7 @@ to_chat(afflicted, span_green("You start feeling better now that you're back in space.")) /** - * Ran when living back in space for a long enough period. + * Ran when living back in space, or just no-grav in general, for a long enough period. * * * afflicted - the mob arriving / same as quirk holder * * skip_timers - if TRUE, this is being done instantly / should not have feedback (such as in init) @@ -197,5 +210,33 @@ if(!skip_timers) to_chat(afflicted, span_green("You feel better.")) +// On a planet but has no gravity + +/** + * Ran when we are on a planet while having no gravity. + * + * * afflicted - the mob arriving / same as quirk holder + * * skip_timers - if TRUE, this is being done instantly / should not have feedback (such as in init) + */ +/datum/quirk/spacer_born/proc/has_nograv(mob/living/afflicted, skip_timers = FALSE) + if(last_state == LAST_STATE_NOGRAV) + return + if(planetside_timer) + deltimer(planetside_timer) + planetside_timer = null + if(recovering_timer) + deltimer(recovering_timer) + recovering_timer = null + + var/was_in_space = last_state == LAST_STATE_SPACE + last_state = LAST_STATE_NOGRAV + + afflicted.apply_status_effect(/datum/status_effect/spacer/gravity_wellness) + afflicted.add_mood_event("spacer", /datum/mood_event/spacer/on_planet/low_grav) + afflicted.add_movespeed_modifier(/datum/movespeed_modifier/spacer/in_space) + if(!skip_timers && !was_in_space) + to_chat(afflicted, span_green("You feel like you're back in space!")) + #undef LAST_STATE_PLANET #undef LAST_STATE_SPACE +#undef LAST_STATE_NOGRAV diff --git a/code/datums/status_effects/debuffs/spacer.dm b/code/datums/status_effects/debuffs/spacer.dm index 6f970eafac95..99b724b1d356 100644 --- a/code/datums/status_effects/debuffs/spacer.dm +++ b/code/datums/status_effects/debuffs/spacer.dm @@ -105,6 +105,20 @@ description = "I'm stationed on a planet. I'd love to be back in space." mood_change = -3 +/datum/mood_event/spacer/on_planet/low_grav + description = "This feels like I'm back home!" + mood_change = 3 + +/datum/mood_event/spacer/on_planet/low_grav/add_effects(...) + . = ..() + addtimer(CALLBACK(src, PROC_REF(lower_mood_bonus)), 5 MINUTES, TIMER_DELETE_ME) + +/datum/mood_event/spacer/on_planet/low_grav/proc/lower_mood_bonus() + mood_change -= 1 + owner.mob_mood.update_mood() + if(mood_change > 1) + addtimer(CALLBACK(src, PROC_REF(lower_mood_bonus)), 5 MINUTES, TIMER_DELETE_ME) + /datum/movespeed_modifier/spacer id = "spacer" diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index 5e334f3ac751..8ff67ffb6d93 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -46,7 +46,7 @@ return update_gravity(gravity_state) - + SEND_SIGNAL(src, COMSIG_LIVING_GRAVITY_CHANGED, gravity_state, old_grav_state) if(gravity_state > STANDARD_GRAVITY) gravity_animate() else if(old_grav_state > STANDARD_GRAVITY) From 32c1e73dc1d529016b70957708931ca3390c3137 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 11:09:02 +0000 Subject: [PATCH 019/282] Automatic changelog for PR #95818 [ci skip] --- html/changelogs/AutoChangeLog-pr-95818.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95818.yml diff --git a/html/changelogs/AutoChangeLog-pr-95818.yml b/html/changelogs/AutoChangeLog-pr-95818.yml new file mode 100644 index 000000000000..05e265ea5837 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95818.yml @@ -0,0 +1,4 @@ +author: "Melbert" +delete-after: True +changes: + - rscadd: "Spacers who manage to get nograv while on a planet are given a positive moodlet, and are considered in space for the purpose of their buffs/debuffs" \ No newline at end of file From 57be83952e68c6a91db717dae2e02967fb0048c7 Mon Sep 17 00:00:00 2001 From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Date: Wed, 22 Apr 2026 07:09:54 -0400 Subject: [PATCH 020/282] Fixes for black market creation verb. (#95619) ## About The Pull Request The "Create Black Market Item" verb now needs an input so that it doesn't try and crash the client. The verb also has a few extra bits of cleanup. Successful completion of the verb will now alert admins that it's been added to the market. ~~This also adds an additonal admin verb, "View Blackmarket", which will allows you to view a blackmarket UI with all the currently loaded items. (I HAVE YET TO MAKE THIS WORK WITH MY CURRENT STRATEGY, HENCE THIS PR BEING A DRAFT).~~ Removed due to taking too long. ## Why It's Good For The Game Better admin ui/ux, fewer ways to accidently crash your game from viewing all `/obj`s in the game, and allows for more admin interaction with the black market which the original PR intended to do. ## Changelog :cl: fix: More safeguards were added to the admin "Create Black Market Item" verb. /:cl: --- code/modules/admin/admin_verbs.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 77af0c72fb98..4109c49039ef 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -804,10 +804,14 @@ ADMIN_VERB(give_ai_speech, R_FUN, "Give Random AI Speech", ADMIN_VERB_NO_DESCRIP our_controller.planning_subtrees = list(GLOB.ai_subtrees[/datum/ai_planning_subtree/random_speech/blackboard]) + our_controller.planning_subtrees ADMIN_VERB(new_blackmarket_item, R_BUILD, "Create Black Market Item", "Add an item to the black market for purchase.", ADMIN_CATEGORY_EVENTS, object as text) + if(!object) + to_chat(user, span_boldwarning("Failed! Provide a full or partial typepath!")) + return //first: have admins select a typepath for the item they want to offer. var/obj/chosen = pick_closest_path(object, make_types_fancy(subtypesof(/obj))) // second: poll admins for the name, description, price, and quantity. - + if(isnull(chosen)) + return var/name = tgui_input_text(user, "Name of the item to sell?", "Item listing name", "Arcane Object", max_length = MAX_NAME_LEN) if(isnull(name)) return @@ -842,5 +846,6 @@ ADMIN_VERB(new_blackmarket_item, R_BUILD, "Create Black Market Item", "Add an it SSmarket.initialize_admin_item(admin_item) log_admin("[key_name(user)] created a new black market item: [name] ([chosen]) for [price] credits, of quantity [quantity].") + message_admins("[key_name(user)] created a new black market item: [name] ([chosen]) for [price] credits, of quantity [quantity].") BLACKBOX_LOG_ADMIN_VERB("Create Black Market Item") From 34606075d0b2dd4026d49d2f1674614bc62988db Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 11:10:13 +0000 Subject: [PATCH 021/282] Automatic changelog for PR #95619 [ci skip] --- html/changelogs/AutoChangeLog-pr-95619.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95619.yml diff --git a/html/changelogs/AutoChangeLog-pr-95619.yml b/html/changelogs/AutoChangeLog-pr-95619.yml new file mode 100644 index 000000000000..2302c5a8cbe9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95619.yml @@ -0,0 +1,4 @@ +author: "ArcaneMusic" +delete-after: True +changes: + - bugfix: "More safeguards were added to the admin \"Create Black Market Item\" verb." \ No newline at end of file From 4ab7e40d800c6613433d730847a18b1c94617585 Mon Sep 17 00:00:00 2001 From: Leland Kemble <70413276+lelandkemble@users.noreply.github.com> Date: Wed, 22 Apr 2026 07:25:07 -0400 Subject: [PATCH 022/282] Butchering no longer moves organs to nullspace (#95828) --- code/modules/surgery/bodyparts/_bodyparts.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 3ba712e5c6ce..72facbf11aca 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -642,8 +642,7 @@ bodypart_organ.apply_organ_damage(bodypart_organ.maxHealth * 0.5) if(owner) - if(!bodypart_organ.Remove(bodypart_organ.owner)) - continue + bodypart_organ.Remove(bodypart_organ.owner) else if(!bodypart_organ.bodypart_remove(src)) continue From eea57eeb247cfbf9155bcd91427dc1f20d1684a8 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 11:25:26 +0000 Subject: [PATCH 023/282] Automatic changelog for PR #95828 [ci skip] --- html/changelogs/AutoChangeLog-pr-95828.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95828.yml diff --git a/html/changelogs/AutoChangeLog-pr-95828.yml b/html/changelogs/AutoChangeLog-pr-95828.yml new file mode 100644 index 000000000000..dae20b421c44 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95828.yml @@ -0,0 +1,4 @@ +author: "lelandkemble" +delete-after: True +changes: + - bugfix: "Butchering heads no longer moves their organs to nullspace, and probably the same with any other method of mass removing organs." \ No newline at end of file From 634347d5f6af0bfa9fecad3d83f68bdfb055790a Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 12:00:24 +0000 Subject: [PATCH 024/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95619.yml | 4 ---- html/changelogs/AutoChangeLog-pr-95818.yml | 4 ---- html/changelogs/AutoChangeLog-pr-95822.yml | 4 ---- html/changelogs/AutoChangeLog-pr-95828.yml | 4 ---- html/changelogs/archive/2026-04.yml | 11 +++++++++++ 5 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95619.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95818.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95822.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95828.yml diff --git a/html/changelogs/AutoChangeLog-pr-95619.yml b/html/changelogs/AutoChangeLog-pr-95619.yml deleted file mode 100644 index 2302c5a8cbe9..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95619.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ArcaneMusic" -delete-after: True -changes: - - bugfix: "More safeguards were added to the admin \"Create Black Market Item\" verb." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95818.yml b/html/changelogs/AutoChangeLog-pr-95818.yml deleted file mode 100644 index 05e265ea5837..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95818.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - rscadd: "Spacers who manage to get nograv while on a planet are given a positive moodlet, and are considered in space for the purpose of their buffs/debuffs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95822.yml b/html/changelogs/AutoChangeLog-pr-95822.yml deleted file mode 100644 index 5a506caf1434..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95822.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "vinylspiders" -delete-after: True -changes: - - bugfix: "fixes an issue where raptor chicks and other non-items appearing in item contents would prevent any personal crafting in the vicinity" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95828.yml b/html/changelogs/AutoChangeLog-pr-95828.yml deleted file mode 100644 index dae20b421c44..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95828.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "lelandkemble" -delete-after: True -changes: - - bugfix: "Butchering heads no longer moves their organs to nullspace, and probably the same with any other method of mass removing organs." \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 9bf8d725bb71..e05edcfa47a7 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -473,5 +473,16 @@ Yobrocharlie: - rscadd: added more things to the antag gear spawner 2026-04-22: + ArcaneMusic: + - bugfix: More safeguards were added to the admin "Create Black Market Item" verb. + Melbert: + - rscadd: Spacers who manage to get nograv while on a planet are given a positive + moodlet, and are considered in space for the purpose of their buffs/debuffs TheBoondock: - refactor: refactored majority of gas_mix mole change into adjust_gas() proc + lelandkemble: + - bugfix: Butchering heads no longer moves their organs to nullspace, and probably + the same with any other method of mass removing organs. + vinylspiders: + - bugfix: fixes an issue where raptor chicks and other non-items appearing in item + contents would prevent any personal crafting in the vicinity From 34d37160fd4d111400d0d241947620033d2988d4 Mon Sep 17 00:00:00 2001 From: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:01:31 +0530 Subject: [PATCH 025/282] Bumps discord-notify workflow from v3 to main (#95847) ## About The Pull Request See https://github.com/tgstation/discord-notify/pull/1#issuecomment-4286624501 Fixes all warning in https://github.com/tgstation/tgstation/actions/runs/24754317912. Either we use the `main` branch or create a new tag and I'll update it in this PR ## Changelog N/A --- .github/workflows/discord_pr_announce.yml | 2 +- .github/workflows/stale.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/discord_pr_announce.yml b/.github/workflows/discord_pr_announce.yml index ebaaa85d5608..a24f8bb2b778 100644 --- a/.github/workflows/discord_pr_announce.yml +++ b/.github/workflows/discord_pr_announce.yml @@ -16,7 +16,7 @@ jobs: if [ -n "$ENABLER_SECRET" ]; then SECRET_EXISTS=true ; fi echo "SECRETS_ENABLED=$SECRET_EXISTS" >> $GITHUB_OUTPUT - name: Send Discord notification - uses: tgstation/discord-notify@v3 + uses: tgstation/discord-notify@main if: > steps.secrets_set.outputs.SECRETS_ENABLED && (github.event.pull_request.merged == true || github.event.action == 'opened') && diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 55c0909c2258..9d9fc69f4711 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -67,7 +67,7 @@ jobs: if [ -n "$ENABLER_SECRET" ]; then SECRET_EXISTS=true ; fi echo "SECRETS_ENABLED=$SECRET_EXISTS" >> $GITHUB_OUTPUT - name: Send Discord notification - uses: tgstation/discord-notify@v3 + uses: tgstation/discord-notify@main if: > steps.secrets_set.outputs.SECRETS_ENABLED with: From c89a3c1798d267fa1e36cf5d9563fd59e8a0b1b1 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Wed, 22 Apr 2026 22:46:27 +0200 Subject: [PATCH 026/282] Adds a search input to the planemaster debugger; bumps tgui-core (#95811) ## About The Pull Request Bumps ``tgui-core`` to ``5.10.0`` Converts the plane search dropdown into a proper text input for easier searching on multiz planecube assemblies. image ## Why It's Good For The Game Need this for my evil developer plans ## Changelog :cl: admin: Planemaster Debugger now has a text search input to locate and jump to planes /:cl: --- tgui/bun.lock | 8 ++++---- tgui/packages/tgui-panel/package.json | 2 +- tgui/packages/tgui-say/package.json | 2 +- .../tgui/interfaces/PlaneMasterDebug/index.tsx | 17 ++++++++++++++++- tgui/packages/tgui/package.json | 2 +- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/tgui/bun.lock b/tgui/bun.lock index 6dd4971b730c..4e2a142f45b1 100644 --- a/tgui/bun.lock +++ b/tgui/bun.lock @@ -54,7 +54,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-json-tree": "^0.20.0", - "tgui-core": "^5.6.0", + "tgui-core": "^5.10.0", "tgui-dev-server": "workspace:*", }, }, @@ -78,7 +78,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "tgui": "workspace:*", - "tgui-core": "^5.6.0", + "tgui-core": "^5.10.0", "tgui-dev-server": "workspace:*", "zod": "^4.2.1", }, @@ -91,7 +91,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "tgui": "workspace:*", - "tgui-core": "^5.6.0", + "tgui-core": "^5.10.0", }, }, "packages/tgui-setup": { @@ -1076,7 +1076,7 @@ "tgui": ["tgui@workspace:packages/tgui"], - "tgui-core": ["tgui-core@5.6.0", "", { "dependencies": { "@floating-ui/react": "^0.27.16", "@nozbe/microfuzz": "^1.0.0" }, "peerDependencies": { "react": "^19.1.0", "react-dom": "^19.1.0" } }, "sha512-F1ezppIr0sLLaQDljOsp5lpESSnCzpnlTy0tY2U5y868it7Q5FpXKlpUeYHsRgVINWUi2O2KEOHBB7izJgIPAg=="], + "tgui-core": ["tgui-core@5.10.0", "", { "dependencies": { "@floating-ui/react": "^0.27.16", "@nozbe/microfuzz": "^1.0.0" }, "peerDependencies": { "react": "^19.1.0", "react-dom": "^19.1.0" } }, "sha512-sbw2zSdJM55M333CHP2HALoEh3LBF07HNPDEXIwPDTGu0TKEaBMvkRnQlLN81A5s9cLjS4DCIvYTTE1qUQENeQ=="], "tgui-dev-server": ["tgui-dev-server@workspace:packages/tgui-dev-server"], diff --git a/tgui/packages/tgui-panel/package.json b/tgui/packages/tgui-panel/package.json index 5bc09bb73512..abc47fdd73b9 100644 --- a/tgui/packages/tgui-panel/package.json +++ b/tgui/packages/tgui-panel/package.json @@ -9,7 +9,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "tgui": "workspace:*", - "tgui-core": "^5.6.0", + "tgui-core": "^5.10.0", "tgui-dev-server": "workspace:*", "zod": "^4.2.1" }, diff --git a/tgui/packages/tgui-say/package.json b/tgui/packages/tgui-say/package.json index 45f81711e6d5..b11aa26b1c8b 100644 --- a/tgui/packages/tgui-say/package.json +++ b/tgui/packages/tgui-say/package.json @@ -6,7 +6,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "tgui": "workspace:*", - "tgui-core": "^5.6.0" + "tgui-core": "^5.10.0" }, "private": true } diff --git a/tgui/packages/tgui/interfaces/PlaneMasterDebug/index.tsx b/tgui/packages/tgui/interfaces/PlaneMasterDebug/index.tsx index ef6e42609c06..9f88be246c3a 100644 --- a/tgui/packages/tgui/interfaces/PlaneMasterDebug/index.tsx +++ b/tgui/packages/tgui/interfaces/PlaneMasterDebug/index.tsx @@ -536,11 +536,26 @@ export function PlaneMasterDebug() { title={`Plane Debugging: ${mob_name}`} buttons={ - + plane.name) + .sort((a, b) => a.length - b.length) + .pop() as string, + 'Verdana, Geneva', + 12, + ), + ) + 40 + }px`} + > plane.name).sort()} placeholder="Find Plane" selected={zoomToPlane} + searchInput onSelected={(value) => { setZoomToPlane(value); const locatedPlane = planes.find( diff --git a/tgui/packages/tgui/package.json b/tgui/packages/tgui/package.json index 921a604e5fb3..c695263eeef1 100644 --- a/tgui/packages/tgui/package.json +++ b/tgui/packages/tgui/package.json @@ -16,7 +16,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-json-tree": "^0.20.0", - "tgui-core": "^5.6.0", + "tgui-core": "^5.10.0", "tgui-dev-server": "workspace:*" }, "private": true From 50d1cdcc86ef3c5df77f7713f0e0b6fc64e40f1f Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Wed, 22 Apr 2026 15:46:46 -0500 Subject: [PATCH 027/282] Adds toggle for meteor mode in secrets (#95810) ## About The Pull Request Admins can disable ongoing or start meteor mode in the secrets menu ## Why It's Good For The Game Only other way is doing it mid round is manually, which is wack ## Changelog :cl: Melbert admin: Adds toggle for meteor mode in secrets /:cl: --- code/modules/admin/verbs/secrets.dm | 21 +++++++++++++++++++ .../modules/meteors/meteor_mode_controller.dm | 2 -- tgui/packages/tgui/interfaces/Secrets.jsx | 17 ++++++++++++++- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index c2a3f1f864dc..33c9afe6d5e3 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -703,6 +703,27 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w return return + if("meteormode") + if(!is_funmin) + return + if(GLOB.meteor_mode) + QDEL_NULL(GLOB.meteor_mode) + message_admins("[key_name_admin(holder)] disabled meteor mode.") + return TRUE + + GLOB.meteor_mode = new() + var/start_when = tgui_input_number(usr, "Meteors will start in (this many seconds):", "Meteor Mode: Start", (5 MINUTES) / 10, (24 HOURS) / 10, 0) + var/ramp_speed = tgui_input_number(usr, "Meteors will worsen every (this many seconds):", "Meteor Mode: Intensity", (5 MINUTES) / 10, (24 HOURS) / 10, (30 SECONDS) / 10) + if(!is_funmin) // deadminnied? + QDEL_NULL(GLOB.meteor_mode) + return TRUE + GLOB.meteor_mode.meteordelay = world.time + (start_when * 10) + GLOB.meteor_mode.rampupdelta = ramp_speed / 60 + GLOB.meteor_mode.start_meteor() + message_admins("[key_name_admin(holder)] enabled meteor mode. \ + Meteors will start [start_when ? "in [DisplayTimeText(start_when * 10)]" : "immediately"], and will worsen every [DisplayTimeText(ramp_speed * 10)].") + return TRUE + if("fix_gravity") if(!is_funmin) return diff --git a/code/modules/meteors/meteor_mode_controller.dm b/code/modules/meteors/meteor_mode_controller.dm index d19d5522bb77..ca22627233de 100644 --- a/code/modules/meteors/meteor_mode_controller.dm +++ b/code/modules/meteors/meteor_mode_controller.dm @@ -9,8 +9,6 @@ GLOBAL_DATUM(meteor_mode, /datum/meteor_mode_controller) var/rampupdelta = 5 /datum/meteor_mode_controller/proc/start_meteor() - if(datum_flags & DF_ISPROCESSING) - return START_PROCESSING(SSprocessing, src) /datum/meteor_mode_controller/process(seconds_per_tick) diff --git a/tgui/packages/tgui/interfaces/Secrets.jsx b/tgui/packages/tgui/interfaces/Secrets.jsx index b2864483e58e..fc65fd059907 100644 --- a/tgui/packages/tgui/interfaces/Secrets.jsx +++ b/tgui/packages/tgui/interfaces/Secrets.jsx @@ -580,13 +580,28 @@ const FunForYouTab = (props) => { - {material.requested > 0 && ( - x {material.requested} - )} ), )} + + + Buy orders for material sheets placed here will be ordered on the + next cargo shipment. +

+ To sell materials, please insert sheets or similar stacks of + materials. All minerals sold on the market directly are subject to + a scaling value decrease per material, but this will recover over + time. To prevent market manipulation, all registered traders can + buy a total of 10 full stacks of materials at a time. +

+ When selling materials, prices will be decreased based on the + elastic modifier of the material, which will recover over time. +

+ All new purchases will include the cost of the shipped crate, + which may be recycled afterwards. +
+
); @@ -299,3 +325,16 @@ const MarketCrashModal = (props) => { ); }; + +type rangeTextProps = { + minPrice: number; + maxPrice: number; +} + +function rangeText(props: rangeTextProps) { + const {minPrice, maxPrice} = props; + return ( + "This material can be bought and sold between " + formatMoney(minPrice) + + " - " + formatMoney(maxPrice) + " cr." + ) +} From fcb991fc386cf8384e2835a9b157d6a3a0fd9b61 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:50:21 +0000 Subject: [PATCH 037/282] Automatic changelog for PR #95564 [ci skip] --- html/changelogs/AutoChangeLog-pr-95564.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95564.yml diff --git a/html/changelogs/AutoChangeLog-pr-95564.yml b/html/changelogs/AutoChangeLog-pr-95564.yml new file mode 100644 index 000000000000..f4b027584b1e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95564.yml @@ -0,0 +1,5 @@ +author: "ArcaneMusic" +delete-after: True +changes: + - qol: "The GMM Ui can now tell you the minimum and maximum price ranges that a material will sell for." + - qol: "You can now sell materials on the edge of their buying and selling thresholds. (This really only effects iron and glass, practically)" \ No newline at end of file From 4174c91330c35261562dba67b066056beacc1387 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Wed, 22 Apr 2026 15:53:48 -0500 Subject: [PATCH 038/282] Tweaks (Fixes) formula for "internal bleeding" volume (#95753) ## About The Pull Request Before: Internal bleeding `volume = rand(1, damage * coefficient)` Bleeding could vary between 1 to 40, causing some attacks to drain you of 0.1% of your blood, and other attacks to drain you of 7% of your blood After: Internal bleeding `volume = sqrt(damage) * coefficient * rand(0.75, 1.5)` Bleeding may vary between ranges like 5 to 16, amounting to 1% to 3% of your blood Also I broke it, now it's fixed oops ## Why It's Good For The Game The variance in "internal bleeding" roll was so large that it could practically instantly sign your death warrant or would never matter across 100 attacks This aims to raise the low end and lower the high end to bring a more sensible range of "volume" ## Changelog :cl: Melbert balance: The amount of blood loss from an attack to an already bleeding wound has been tweaked. As an example, a 20 force attack used to range 0.1% to 4% blood loss, and now ranges 1% to 3%. /:cl: --- code/datums/wounds/pierce.dm | 39 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index 2ccf49d293f9..28a9286a7752 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -39,8 +39,8 @@ /// When hit on this bodypart, we have this chance of losing some blood + the incoming damage var/internal_bleeding_chance - /// If we let off blood when hit, the max blood lost is this * the incoming damage - var/internal_bleeding_coefficient + /// A multiplier applied to how much blood is lost from damage to the wounded limb + var/internal_bleeding_coefficient = 1 /// If TRUE we are ready to be mended in surgery VAR_FINAL/mend_state = FALSE @@ -51,37 +51,37 @@ return ..() -/datum/wound/pierce/bleed/receive_damage(wounding_type, wounding_dmg, wound_bonus) - if(victim.stat == DEAD || (wounding_dmg < 5) || !limb.can_bleed() || !victim.get_blood_volume() || !prob(internal_bleeding_chance + wounding_dmg)) +/datum/wound/pierce/bleed/receive_damage(wounding_type, wounding_dmg, wound_bonus, attack_direction, damage_source) + if(victim.stat == DEAD || wounding_dmg < 5 || !limb.can_bleed() || !victim.get_blood_volume() || !prob(internal_bleeding_chance + wounding_dmg)) return - var/blood_bled = rand(1, limb.get_splint_factor() * internal_bleeding_coefficient) // 12 brute toolbox can cause up to 15/18/21 bloodloss on mod/sev/crit + // 20 force attack ~= 5-16 blood loss ~= 1%-3% of blood volume + // 30 force attack ~= 6-20 blood loss ~= 1%-4% of blood volume + var/blood_bled = sqrt(wounding_dmg) * internal_bleeding_coefficient * limb.get_splint_factor() * pick(0.75, 1, 1.25, 1.5) switch(blood_bled) - if(1 to 6) - victim.bleed(blood_bled, TRUE) - if(7 to 13) + if(8 to 12) victim.visible_message( span_smalldanger("Blood droplets fly from the hole in [victim]'s [limb.plaintext_zone]."), span_danger("You cough up a bit of blood from the blow to your [limb.plaintext_zone]."), vision_distance = COMBAT_MESSAGE_RANGE, + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, ) - victim.bleed(blood_bled, TRUE) - if(14 to 19) + if(12 to 18) victim.visible_message( span_smalldanger("A small stream of blood spurts from the hole in [victim]'s [limb.plaintext_zone]!"), span_danger("You spit out a string of blood from the blow to your [limb.plaintext_zone]!"), vision_distance = COMBAT_MESSAGE_RANGE, + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, ) - victim.create_splatter(victim.dir) - victim.bleed(blood_bled) - if(20 to INFINITY) + if(18 to INFINITY) victim.visible_message( span_danger("A spray of blood streams from the gash in [victim]'s [limb.plaintext_zone]!"), span_bolddanger("You choke up on a spray of blood from the blow to your [limb.plaintext_zone]!"), vision_distance = COMBAT_MESSAGE_RANGE, + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, ) - victim.bleed(blood_bled) - victim.create_splatter(victim.dir) - victim.add_splatter_floor(get_step(victim.loc, victim.dir)) + victim.bleed(blood_bled) + if(blood_bled >= 18) + victim.spray_blood(attack_direction) /datum/wound/pierce/bleed/get_bleed_rate_of_change() //basically if a species doesn't bleed, the wound is stagnant and will not heal on its own (nor get worse) @@ -206,7 +206,7 @@ gauzed_clot_rate = 0.75 clot_rate = 0.03 internal_bleeding_chance = 30 - internal_bleeding_coefficient = 1.25 + internal_bleeding_coefficient = 1.5 series_threshold_penalty = 20 status_effect_type = /datum/status_effect/wound/pierce/moderate scar_keyword = "piercemoderate" @@ -240,7 +240,6 @@ gauzed_clot_rate = 0.1 clot_rate = 0.03 // will close quickly on its own internal_bleeding_chance = 0 - internal_bleeding_coefficient = 1 threshold_penalty = 5 /datum/wound_pregen_data/flesh_pierce/open_puncture/pinprick @@ -285,7 +284,7 @@ gauzed_clot_rate = 0.5 clot_rate = 0.02 internal_bleeding_chance = 60 - internal_bleeding_coefficient = 1.5 + internal_bleeding_coefficient = 2 series_threshold_penalty = 35 status_effect_type = /datum/status_effect/wound/pierce/severe scar_keyword = "piercesevere" @@ -397,7 +396,7 @@ initial_flow = 2.5 gauzed_clot_rate = 0.3 internal_bleeding_chance = 80 - internal_bleeding_coefficient = 1.75 + internal_bleeding_coefficient = 2.5 threshold_penalty = 15 status_effect_type = /datum/status_effect/wound/pierce/critical scar_keyword = "piercecritical" From 28037b942fe4ba65bd48738dfb35f99ab3372a6b Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:54:09 +0000 Subject: [PATCH 039/282] Automatic changelog for PR #95753 [ci skip] --- html/changelogs/AutoChangeLog-pr-95753.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95753.yml diff --git a/html/changelogs/AutoChangeLog-pr-95753.yml b/html/changelogs/AutoChangeLog-pr-95753.yml new file mode 100644 index 000000000000..c9222755013b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95753.yml @@ -0,0 +1,4 @@ +author: "Melbert" +delete-after: True +changes: + - balance: "The amount of blood loss from an attack to an already bleeding wound has been tweaked. As an example, a 20 force attack used to range 0.1% to 4% blood loss, and now ranges 1% to 3%." \ No newline at end of file From d4242d59075b29aa0ce05099407fa6e0fd7cfcb1 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 22 Apr 2026 15:54:29 -0500 Subject: [PATCH 040/282] Add Shoe Factory Ruin (#95774) ## About The Pull Request This adds a new lava/ice ruin called the Shoe Factory. It's basically an abandoned conveyor belt full of random shoes. StrongDMM-2026-04-16 20 02 24 There are 29 pairs of random shoes total. These use a new shoe random spawner that spawns ANY subtype of shoes. (even admin shoe types like disabler/bullet shoes) On top of this, the shoe spawner modifies the `slowdown` anywhere between `-0.5` (fast) to `+0.5` (slow) via dice rolls. (5d3) You basically need to roll a YAHTZEE to get super fast shoes. Using the dice method results in ~60% of shoes being normal, while ~20% are fast, and the other ~20% are slow. So you really need to test each shoe individually Cinderella style. Here is a [nice chart](https://tadeohepperle.com/dice-calculator-frontend/?d1=%2B5d3) showing the probability breakdown of dice rolls. For atmosphere, there are crates full of leather/tanning/hides. Also, there is a loom with durathread, cotton, and wool supplies. ## Why It's Good For The Game More ruin content. Also gives a chance for players to obtain some super rare shoe types. ## Changelog :cl: map: Add Shoe Factory to lava/ice ruins. /:cl: --- .../AnywhereRuins/shoe_factory.dmm | 1465 +++++++++++++++++ code/datums/ruins/icemoon.dm | 9 + code/datums/ruins/lavaland.dm | 9 + code/modules/mapfluff/ruins/shoe_factory.dm | 116 ++ config/iceruinblacklist.txt | 1 + config/lavaruinblacklist.txt | 1 + tgstation.dme | 1 + 7 files changed, 1602 insertions(+) create mode 100644 _maps/RandomRuins/AnywhereRuins/shoe_factory.dmm create mode 100644 code/modules/mapfluff/ruins/shoe_factory.dm diff --git a/_maps/RandomRuins/AnywhereRuins/shoe_factory.dmm b/_maps/RandomRuins/AnywhereRuins/shoe_factory.dmm new file mode 100644 index 000000000000..2bcfe8765f14 --- /dev/null +++ b/_maps/RandomRuins/AnywhereRuins/shoe_factory.dmm @@ -0,0 +1,1465 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"af" = ( +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"aW" = ( +/obj/structure/sign/poster/official/safety_eye_protection/directional/south, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"bl" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"bQ" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "shoe_factory" + }, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"bV" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"cf" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"cg" = ( +/obj/structure/table, +/obj/effect/spawner/random/decoration/ornament, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"ck" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"cq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50 + }, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"cL" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"da" = ( +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"dj" = ( +/obj/machinery/conveyor{ + dir = 5; + id = "shoe_factory" + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"dt" = ( +/obj/machinery/conveyor/inverted{ + dir = 9; + id = "shoe_factory" + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"dx" = ( +/turf/closed/wall, +/area/ruin/shoe_factory) +"dy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"dz" = ( +/obj/effect/spawner/random/trash/garbage{ + spawn_loot_count = 3; + spawn_scatter_radius = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"dE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"dF" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"dX" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/hairlesshide, +/obj/item/stack/sheet/hairlesshide, +/obj/item/stack/sheet/hairlesshide, +/obj/item/stack/sheet/leather/five, +/obj/item/stack/sheet/leather/five, +/obj/item/stack/sheet/leather/five, +/obj/machinery/light/small/burned/directional/north, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"fh" = ( +/obj/structure/girder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"gm" = ( +/obj/machinery/light/small/dim/directional/east, +/obj/item/stack/sheet/cardboard/fifty, +/obj/structure/rack, +/obj/item/stack/package_wrap, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"gn" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "shoe_factory_entrance" + }, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"iT" = ( +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"jf" = ( +/obj/structure/closet/cardboard, +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/mining_loot/shoe_factory{ + spawn_loot_count = 1; + spawn_scatter_radius = 0; + spawn_random_offset = 0 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"jF" = ( +/obj/machinery/space_heater, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"jI" = ( +/obj/item/chair, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"jQ" = ( +/obj/structure/sign/warning, +/turf/closed/wall, +/area/ruin/shoe_factory) +"jS" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"kJ" = ( +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"ld" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"le" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/noticeboard/directional/east, +/obj/item/paper/fluff/ruins/shoe_factory/osha_shutdown, +/turf/open/floor/iron, +/area/ruin/shoe_factory) +"lk" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"mu" = ( +/obj/machinery/power/port_gen/pacman, +/obj/item/wrench, +/obj/item/stack/sheet/mineral/plasma/thirty, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"mM" = ( +/obj/machinery/button/door/directional/south{ + id = "shoe_warehouse"; + name = "Warehouse Shutters Control" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"ny" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"nH" = ( +/obj/structure/loom, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"nJ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"ot" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"oU" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "shoe_factory_entrance" + }, +/obj/effect/mapping_helpers/airlock_note_placer, +/obj/item/paper/fluff/ruins/shoe_factory/osha_shutdown, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"pT" = ( +/turf/closed/wall{ + baseturfs = /turf/open/floor/plating/lavaland_baseturf + }, +/area/ruin/shoe_factory) +"qe" = ( +/obj/structure/table, +/obj/item/plate/large, +/obj/item/kitchen/fork, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"qm" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/chair, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"qA" = ( +/obj/structure/kitchenspike, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"ra" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"rt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"rW" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"sT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"tf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/door/airlock{ + name = "Restroom" + }, +/turf/open/floor/iron/freezer, +/area/ruin/shoe_factory) +"tk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/light/bulb/broken, +/obj/machinery/light/small/empty/directional/south, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"tz" = ( +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"ur" = ( +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"uC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/cleanliness/directional/east, +/obj/structure/sink/kitchen/directional/west, +/obj/machinery/light/small/directional/south, +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron/freezer, +/area/ruin/shoe_factory) +"uV" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"vO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"wv" = ( +/obj/structure/closet/cardboard, +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/mining_loot/shoe_factory{ + spawn_loot_count = 1; + spawn_scatter_radius = 0; + spawn_random_offset = 0 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"wQ" = ( +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"xd" = ( +/obj/structure/closet/crate/wooden, +/obj/item/stack/sheet/cotton/durathread{ + amount = 50 + }, +/obj/item/stack/sheet/cotton{ + amount = 50 + }, +/obj/item/stack/sheet/cotton/wool{ + amount = 50 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"xt" = ( +/obj/machinery/door/airlock/glass{ + name = "Break Room" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"xM" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"xW" = ( +/obj/structure/closet/crate/cardboard, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/mining_loot/shoe_factory{ + spawn_loot_count = 1; + spawn_scatter_radius = 0; + spawn_random_offset = 0 + }, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"xZ" = ( +/obj/machinery/button/door/directional/south{ + id = "shoe_warehouse"; + name = "Warehouse Shutters Control" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"yO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/safety_eye_protection/directional/north, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"yZ" = ( +/obj/structure/filingcabinet, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"zg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"zs" = ( +/obj/machinery/smartfridge/drying/rack, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"zw" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"zx" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"zE" = ( +/obj/structure/closet/crate/freezer, +/obj/item/stack/sheet/animalhide/corgi, +/obj/item/stack/sheet/animalhide/cat, +/obj/item/stack/sheet/animalhide/carbon/monkey, +/obj/item/stack/sheet/animalhide/carbon/lizard, +/obj/item/stack/sheet/animalhide/carbon/human, +/obj/item/stack/sheet/animalhide/bear, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"zF" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"zS" = ( +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50 + }, +/turf/closed/wall/rust, +/area/ruin/shoe_factory) +"Ad" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"AC" = ( +/obj/machinery/smartfridge/drying/rack, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"AM" = ( +/mob/living/basic/mouse, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"AS" = ( +/obj/item/reagent_containers/cup/bucket, +/obj/item/mop, +/obj/structure/mop_bucket, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/lights/mixed, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Bj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"Bo" = ( +/mob/living/basic/mouse, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"Bq" = ( +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50 + }, +/turf/closed/wall, +/area/ruin/shoe_factory) +"BL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/broken/directional/east, +/obj/item/light/bulb/broken, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"BM" = ( +/obj/structure/rack, +/obj/item/clothing/shoes/sneakers/random, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"BW" = ( +/obj/structure/railing/corner/end, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"DI" = ( +/turf/template_noop, +/area/template_noop) +"DP" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Es" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"EC" = ( +/obj/structure/girder, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"EL" = ( +/obj/machinery/light/directional/west, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"ES" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"Fd" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"FS" = ( +/obj/structure/kitchenspike, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"Gp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"Gz" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"GH" = ( +/obj/machinery/door/poddoor/shutters{ + name = "Warehouse Shutters"; + id = "shoe_warehouse" + }, +/obj/effect/turf_decal/caution, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"GV" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"GX" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"HK" = ( +/obj/machinery/digital_clock/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"HL" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"HV" = ( +/obj/item/hand_labeler, +/obj/item/hand_labeler_refill, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"Id" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"IG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"JW" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"Kk" = ( +/obj/structure/closet/crate/cardboard, +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/mining_loot/shoe_factory{ + spawn_loot_count = 1; + spawn_scatter_radius = 0; + spawn_random_offset = 0 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Kq" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"LA" = ( +/obj/structure/sign/poster/official/work_for_a_future/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/broken/directional/south, +/obj/item/light/tube/broken, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"LF" = ( +/obj/item/stack/sheet/cardboard/fifty, +/obj/structure/rack, +/obj/item/stack/package_wrap, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"LS" = ( +/obj/machinery/conveyor/inverted{ + dir = 10; + id = "shoe_factory" + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Mj" = ( +/obj/structure/chair/office, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"MH" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Nq" = ( +/obj/item/knife, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Nr" = ( +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"ND" = ( +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Ob" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Op" = ( +/obj/machinery/conveyor{ + dir = 6; + id = "shoe_factory" + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"OI" = ( +/obj/machinery/conveyor{ + id = "shoe_factory" + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"OR" = ( +/obj/structure/table, +/obj/machinery/coffeemaker{ + pixel_y = 5 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"PK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"Re" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = -32; + spawn_loot_chance = 50 + }, +/obj/structure/toilet{ + pixel_y = 8; + dir = 4 + }, +/turf/open/floor/iron/freezer, +/area/ruin/shoe_factory) +"Rl" = ( +/obj/structure/sign/poster/official/do_not_question/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/ruin/shoe_factory) +"RO" = ( +/obj/structure/sign/warning, +/turf/closed/wall/rust, +/area/ruin/shoe_factory) +"RU" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/effect/spawner/random/entertainment/deck{ + pixel_x = -6 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"SX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"Tw" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "shoe_factory_entrance" + }, +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock_note_placer, +/obj/item/paper/fluff/ruins/shoe_factory/osha_shutdown, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"Uk" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "shoe_factory" + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"UL" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"UV" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"Vj" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/item/coffee_cartridge, +/obj/structure/sign/poster/contraband/eat/directional/west, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"VY" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "shoe_factory"; + conveyor_speed = 5 + }, +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Wf" = ( +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"Wo" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Wx" = ( +/obj/machinery/disposal/delivery_chute{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"WA" = ( +/obj/structure/railing, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"WC" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"WO" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/ruin/shoe_factory) +"Xv" = ( +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"Xy" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"XN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"XW" = ( +/obj/item/light/tube/broken, +/obj/machinery/light/empty/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"Yr" = ( +/obj/machinery/door/poddoor/shutters{ + name = "Warehouse Shutters"; + id = "shoe_warehouse" + }, +/obj/effect/turf_decal/caution, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/shoe_factory) +"YM" = ( +/turf/closed/wall/rust, +/area/ruin/shoe_factory) +"YX" = ( +/obj/effect/spawner/random/mining_loot/shoe_factory, +/obj/machinery/conveyor{ + dir = 1; + id = "shoe_factory" + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"YY" = ( +/obj/effect/spawner/random/mining_loot/shoe_factory, +/obj/machinery/conveyor{ + id = "shoe_factory" + }, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Zl" = ( +/obj/structure/grille, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/shoe_factory) +"Zo" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/shoe_factory) + +(1,1,1) = {" +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +"} +(2,1,1) = {" +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +"} +(3,1,1) = {" +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +YM +gn +gn +pT +DI +DI +"} +(4,1,1) = {" +DI +DI +DI +DI +DI +dx +uV +uV +Xy +YM +DI +DI +DI +pT +kJ +XN +pT +DI +DI +"} +(5,1,1) = {" +DI +DI +DI +DI +YM +dx +GX +ny +jI +dx +dx +dx +YM +EC +Tw +oU +dx +DI +DI +"} +(6,1,1) = {" +dx +YM +dx +dx +EC +Rl +Wf +sT +Wf +iT +EL +vO +da +Wf +dy +Wf +YM +dx +DI +"} +(7,1,1) = {" +dx +OR +Vj +UV +YM +Xv +xM +JW +nJ +da +dy +dF +JW +nJ +HL +ES +BM +uV +DI +"} +(8,1,1) = {" +dx +qe +qm +ur +xt +sT +zF +jQ +YM +DP +MH +DP +Kq +RO +WC +sT +BM +uV +DI +"} +(9,1,1) = {" +YM +RU +Zo +cq +dx +da +ES +YM +dj +Uk +YX +Uk +Uk +af +UL +Bo +BM +uV +DI +"} +(10,1,1) = {" +YM +HK +rW +WO +dx +XW +Bj +YM +bQ +DP +DP +DP +YM +dx +SX +LA +YM +YM +Kq +"} +(11,1,1) = {" +dx +bl +tz +ck +zS +Wf +zx +dx +Op +OI +YY +OI +dt +Bq +SX +Wf +dx +Re +YM +"} +(12,1,1) = {" +dx +dx +EC +dx +YM +ES +Ad +Kq +fh +Zl +DP +DP +bQ +YM +PK +Wf +tf +uC +YM +"} +(13,1,1) = {" +DI +YM +jF +ra +Gz +sT +Gp +YM +dj +Uk +YX +Uk +LS +Bq +rt +xZ +dx +dx +dx +"} +(14,1,1) = {" +DI +dx +mu +dz +YM +YM +cL +dx +bQ +dx +YM +YM +cL +dx +Yr +GH +YM +DI +DI +"} +(15,1,1) = {" +DI +dx +jS +AS +dx +zE +ND +fh +Op +OI +YY +OI +dt +YM +ot +mM +dx +DI +DI +"} +(16,1,1) = {" +DI +dx +YM +YM +dx +dX +dE +dx +YM +DP +DP +DP +bQ +YM +IG +tk +YM +DI +DI +"} +(17,1,1) = {" +DI +DI +DI +DI +dx +xd +ND +YM +dj +Uk +YX +Uk +LS +Kq +zg +ND +YM +DI +DI +"} +(18,1,1) = {" +DI +DI +dx +dx +cL +nH +aW +dx +bQ +DP +DP +zw +dx +YM +yO +dy +dx +DI +DI +"} +(19,1,1) = {" +DI +DI +YM +zs +ND +ND +ND +WA +Op +OI +OI +OI +OI +Wx +ld +GV +dx +dx +YM +"} +(20,1,1) = {" +DI +DI +dx +FS +bV +da +da +BW +lk +cf +VY +Es +Wo +Ob +Nr +wQ +HV +yZ +YM +"} +(21,1,1) = {" +DI +DI +YM +qA +Nq +ND +wQ +ND +da +dy +AM +ND +dE +dy +dy +dE +Mj +cg +dx +"} +(22,1,1) = {" +DI +DI +dx +AC +da +BL +ND +dE +Kk +jf +gm +LF +wv +xW +da +Id +le +Fd +YM +"} +(23,1,1) = {" +DI +DI +EC +dx +YM +YM +YM +dx +dx +dx +dx +YM +dx +dx +dx +YM +dx +YM +dx +"} diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm index dffe313c1200..5e293a70747a 100644 --- a/code/datums/ruins/icemoon.dm +++ b/code/datums/ruins/icemoon.dm @@ -85,6 +85,15 @@ description = "A manufacturing and packaging facility producing insulated gloves." suffix = "icemoon_surface_gloves.dmm" +/datum/map_template/ruin/icemoon/shoe_facotry + name = "Ice-Ruin Shoe Factory" + id = "shoe_factory" + description = "An abandoned shoe factory." + prefix = "_maps/RandomRuins/AnywhereRuins/" + suffix = "shoe_factory.dmm" + allow_duplicates = FALSE + cost = 10 + // above and below ground together /datum/map_template/ruin/icemoon/mining_site diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index fb2d1d44c0c0..cd3c1065ec4d 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -330,3 +330,12 @@ description = "They launched too early" suffix = "lavaland_surface_crashsite.dmm" allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/shoe_facotry + name = "Lava-Ruin Shoe Factory" + id = "shoe_factory" + description = "An abandoned shoe factory." + prefix = "_maps/RandomRuins/AnywhereRuins/" + suffix = "shoe_factory.dmm" + allow_duplicates = FALSE + cost = 10 diff --git a/code/modules/mapfluff/ruins/shoe_factory.dm b/code/modules/mapfluff/ruins/shoe_factory.dm new file mode 100644 index 000000000000..db2f8b20d937 --- /dev/null +++ b/code/modules/mapfluff/ruins/shoe_factory.dm @@ -0,0 +1,116 @@ +/area/ruin/shoe_factory + name = "\improper Shoe Factory" + +/obj/effect/spawner/random/mining_loot/shoe_factory + name = "random shoe factory loot" + desc = "Spawns shoes from the loot list. Shoes have a randomized slowdown modifier." + icon = 'icons/obj/clothing/shoes.dmi' + icon_state = "sneakers" + loot = list() + loot_subtype_path = /obj/item/clothing/shoes + spawn_loot_count = 5 + spawn_scatter_radius = 2 + spawn_random_offset = TRUE + +/obj/effect/spawner/random/mining_loot/shoe_factory/make_item(spawn_loc, type_path_to_make) + var/obj/item/clothing/shoes/shoe = ..() + if(istype(shoe)) + // shoes will spawn anywhere from -0.5 speed modifer (fast) to +0.5 speed (slow) + // See https://tadeohepperle.com/dice-calculator-frontend/?d1=%2B5d3 to view dice chances for rolls (higher rolls == faster shoes) + var/dice_result = roll("5d3") + var/slowdown_modifier = (1 - (dice_result * 0.1)) + shoe.slowdown += slowdown_modifier + + return shoe + +/obj/item/paper/fluff/ruins/shoe_factory/osha_shutdown + name = "Official Spess OSHA Closure Notice" + desc = "A heavily stamped document with a bright red 'CONDEMNED' watermark." + default_raw_text = "SPESS OCCUPATIONAL SAFETY & HEALTH ADMINISTRATION

\ + ORDER OF IMMEDIATE CLOSURE

\ + Facility 44-S (Footwear Manufacturing Division) is hereby ordered to cease all operations indefinitely pending a Class-A kinetic anomaly investigation.

\ + Citations:
\ +
    \ +
  • Violation 882.A: Extreme deviation in product density. Random inspections reveal that approximately 99% of 'Sprint-Mate' footwear units possess a localized gravitational anomaly. Users report immense physical exertion, equating standard walking to 'dragging an asteroid through wet cement.'
  • \ +
  • Violation 882.B: Lethal kinetic acceleration. The remaining 1% of the production line exhibits zero-friction bluespace properties. A OSHA inspector testing a pair was accelerated to 150 km/h into a reinforced plasma glass window, resulting in critical injuries and a localized hull breach.
  • \ +

\ + All assets are frozen. Do not attempt to transport the remaining stock. If you must move a crate, DO NOT wear the contents." + + +/obj/item/paper/fluff/shoe_factory_osha + name = "Space OSHA Inspection Notice" + default_raw_text = {" +
NANOTRASEN OCCUPATIONAL SAFETY AND HAZARD ADMINISTRATION
+ Form 77-B: Mandatory Facility Closure Order

+
+ Facility: Cobbleton & Sons Shoe Manufacturing, Ltd.
+ Inspector: H. Bootsworth, Senior Field Auditor
+ Date of Inspection: ██/██/25██
+ Outcome: IMMEDIATE CLOSURE ORDERED
+
+ Summary of Violations:
+
+ Following a routine workplace safety audit, the following CRITICAL violations + were observed on the factory floor:
+
+ 1. Multiple pairs of finished footwear were found to exhibit anomalous and + hazardous properties inconsistent with standard shoe behavior. Products were + observed (REDACTED), emitting unlicensed energy signatures, and in one case + actively resisting removal from the test subject's feet.
+
+ 2. ZERO quality assurance records were found on-site. When asked about QA + procedures, the floor manager gestured vaguely at a clown and said + "he tries them on sometimes."
+
+ 3. The manufacturing line lacks any form of anomalous material handling + protocols despite the finished product clearly being outside baseline + safety parameters.
+
+ Closing Remarks:
+
+ I have been a Safety Auditor for 15 years across 3 sectors. I have shut down + plasma refineries. I have cited singularity engine rooms. I have written + violations for clown cars exceeding maximum occupancy by a factor of eleven.
+
+ I have never seen shoes do the things these shoes do.
+
+ This facility is to remain sealed until such time as a full anomalous item + review board can assess the product line. Any remaining inventory is + NOT to be removed from the premises.
+
+ (Addendum: if anyone from Corporate is reading this - no, you cannot + sell these. I don't care how much the profit margin is. Stop asking.)
+
+ This notice is the property of Space OSHA. Removal or defacement of this + notice is punishable under Nanotrasen Workplace Safety Code § 4.77.2 + "} + +/obj/item/paper/fluff/shoe_factory_closure + name = "NOTICE OF CLOSURE" + desc = "An official-looking document bearing the Space OSHA seal. Someone has drawn a tiny angry face on the corner." + default_raw_text = {"
SPACE OCCUPATIONAL SAFETY & HAZARDS ADMINISTRATION
+
OFFICIAL NOTICE OF FACILITY CLOSURE
+
+Facility: Unnamed Bootwear Manufactory, Sector (REDACTED)
+Inspecting Officer: Senior Agent Greaves, Division VII
+Status: PERMANENTLY CLOSED, pending owner's response (owner has not responded in 14 standard months).
+
+ +To whom it may concern,

+ +Following a routine compliance audit, this facility has been found in gross violation of no fewer than thirty-two distinct Space OSHA regulations. A full list is appended in Annex B. For the purposes of this summary notice, the most egregious are reproduced below:

+ +1. Complete absence of any functioning Quality Assurance pipeline. Upon questioning, the foreman claimed the previous QA officer "left in a hurry" through an unpatched hole in the ceiling. The hole has been independently verified. The QA officer has not.

+ +2. Production of footwear containing undeclared active components. This office has recovered several finished units displaying behavior wildly inconsistent with what a reasonable being would call "a shoe." The proprietor insists these are "premium features" for "the discerning adventurer." This office insists they are lawsuits.

+ +3. Failure to properly label hazardous stock. If you are reading this notice, and you are standing in the facility, and you are considering putting on a pair of the shoes on the floor: please do not. Or do. We are no longer liable either way.

+ +4. No fire exits. No fire extinguishers. Considerable amounts of flammable leather. We don't even know where to start.

+ +By the authority vested in this office, all operations are to cease immediately. Any remaining inventory is the property of the Crown and/or whoever gets here first.

+ +Stay safe out there.

+ +— Sr. Agent Greaves, Space OSHA
+"If it looks unsafe, it probably is. If it looks safe, it probably still is.""} diff --git a/config/iceruinblacklist.txt b/config/iceruinblacklist.txt index d6a945ff38a1..1f3236c753c8 100644 --- a/config/iceruinblacklist.txt +++ b/config/iceruinblacklist.txt @@ -5,6 +5,7 @@ ##RESPAWN #_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +#_maps/RandomRuins/AnywhereRuins/shoe_factory.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm diff --git a/config/lavaruinblacklist.txt b/config/lavaruinblacklist.txt index aaa507374cb6..16382c128b78 100644 --- a/config/lavaruinblacklist.txt +++ b/config/lavaruinblacklist.txt @@ -14,6 +14,7 @@ #_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm #_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +#_maps/RandomRuins/AnywhereRuins/shoe_factory.dmm ##SIN #_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm diff --git a/tgstation.dme b/tgstation.dme index 13f74d2cadb3..1bc5f6c59815 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4954,6 +4954,7 @@ #include "code\modules\mapfluff\centcom\nuke_ops.dm" #include "code\modules\mapfluff\ruins\generic.dm" #include "code\modules\mapfluff\ruins\lavaland_ruin_code.dm" +#include "code\modules\mapfluff\ruins\shoe_factory.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\commsagent.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\cursed_spring.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\lavaland_incursion.dm" From c048aa41fb32102fcbebb6bd8f01e0b8b3ba3c35 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:54:48 +0000 Subject: [PATCH 041/282] Automatic changelog for PR #95774 [ci skip] --- html/changelogs/AutoChangeLog-pr-95774.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95774.yml diff --git a/html/changelogs/AutoChangeLog-pr-95774.yml b/html/changelogs/AutoChangeLog-pr-95774.yml new file mode 100644 index 000000000000..7253d2ce0dad --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95774.yml @@ -0,0 +1,4 @@ +author: "timothymtorres" +delete-after: True +changes: + - map: "Add Shoe Factory to lava/ice ruins." \ No newline at end of file From 9b6e752f3ea5a7c9158bf5d19a41c972797c2b51 Mon Sep 17 00:00:00 2001 From: Lucy Date: Wed, 22 Apr 2026 16:55:26 -0400 Subject: [PATCH 042/282] Makes lighting objects objects again (#95332) ## About The Pull Request Continuation of https://github.com/tgstation/tgstation/pull/78857 FOR TOOO LONG WE HAVE SUFF- Ok yeah so like, we made them overlays to save on maptick, but with threaded maptick that is potentially not an issue anymore. I'm opening this pr so I can tm it and see. If it works, it'll save about 50% of lighting object update costs, which is pretty damn good. I'm also removing the fullbright light icon state, since it is barely ever used (it was added as a clientside op, but we don't hit fullbright very much at all so it does nothing but eat my cpu time) Also also changing how SSlighting does its resolution. Rather then waiting for all sources to process, then working on corners and objects, instead we will do all the sources we had at the start, then all the sources after, and so on. The goal is to avoid churn causing the system to constantly choke. it is better to potentially double operate then it is for things to feel horrifically slow. ## Why It's Good For The Game Faster. Also you won't be able to see lights through walls anymore, so mesons will be less dumb. Can maybe bump their nightvision a bit idk we'll see. ## Current Issues to be found ## Changelog :cl: Absolucy, LemonInTheDark fix: You can no longer see lights through walls when using mesons or when ventcrawling. /:cl: --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> --- code/__DEFINES/layers.dm | 2 +- code/controllers/subsystem/lighting.dm | 17 ++- code/controllers/subsystem/mapping.dm | 15 --- code/datums/lazy_template.dm | 1 + code/game/turfs/change_turf.dm | 6 +- code/game/turfs/turf.dm | 2 +- .../view_variables/reference_tracking.dm | 2 +- code/modules/lighting/lighting_corner.dm | 6 +- code/modules/lighting/lighting_object.dm | 109 ++++++++++++------ code/modules/lighting/lighting_turf.dm | 2 +- code/modules/mapping/map_template.dm | 9 +- .../camera/camera_image_capturing.dm | 4 +- .../mobile_port/shuttle_move_callbacks.dm | 10 ++ code/modules/unit_tests/unit_test.dm | 3 + icons/effects/lighting_object.dmi | Bin 2092 -> 1520 bytes 15 files changed, 114 insertions(+), 74 deletions(-) diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 90af29c67c06..4d368ccc6705 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -39,7 +39,7 @@ #define POINT_PLANE 5 //---------- LIGHTING ------------- -/// Normal 1 per turf dynamic lighting underlays +/// Normal 1 per turf dynamic lighting objects #define LIGHTING_PLANE 10 /// Lighting objects that are "free floating" diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 4717e7dcf8cd..d35a58b6ab68 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(lighting) /datum/controller/subsystem/atoms, /datum/controller/subsystem/mapping, ) - wait = 2 + wait = 1 ss_flags = SS_TICKER var/static/list/sources_queue = list() // List of lighting sources queued for update. var/static/list/corners_queue = list() // List of lighting corners queued for update. @@ -38,7 +38,7 @@ SUBSYSTEM_DEF(lighting) for(var/turf/area_turf as anything in zlevel_turfs) if(area_turf.space_lit) continue - new /datum/lighting_object(area_turf) + new /atom/movable/lighting_object(null, area_turf) CHECK_TICK CHECK_TICK @@ -53,6 +53,7 @@ SUBSYSTEM_DEF(lighting) // UPDATE SOURCE QUEUE var/i = 0 + // something something cache locally for sonic speed var/list/queue = current_sources while(i < length(queue)) //we don't use for loop here because i cannot be changed during an iteration i += 1 @@ -110,7 +111,7 @@ SUBSYSTEM_DEF(lighting) while(i < length(queue)) //we don't use for loop here because i cannot be changed during an iteration i += 1 - var/datum/lighting_object/O = queue[i] + var/atom/movable/lighting_object/O = queue[i] if(QDELETED(O)) continue O.update() @@ -132,3 +133,13 @@ SUBSYSTEM_DEF(lighting) /datum/controller/subsystem/lighting/Recover() initialized = SSlighting.initialized ..() + +/// Takes a list of turfs in, and sets up static lighting for them as needed. +/// Exactly what it says on the tin. +/datum/controller/subsystem/lighting/proc/setup_static_lighting_if_needed(list/turfs) + for(var/turf/unlit as anything in turfs) + if(unlit.space_lit) + continue + var/area/loc_area = unlit.loc + if(loc_area.static_lighting) + unlit.lighting_build_overlay() diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index b3bcc301ea62..8d98ff05bd5c 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -744,11 +744,6 @@ ADMIN_VERB(load_away_mission, R_FUN, "Load Away Mission", "Load a specific away if(contain_turfs) build_area_turfs(z_value, filled_with_space) - // And finally, misc global generation - - // We'll have to update this if offsets change, because we load lowest z to highest z - generate_lighting_appearance_by_z(z_value) - /datum/controller/subsystem/mapping/proc/build_area_turfs(z_level, space_guaranteed) // If we know this is filled with default tiles, we can use the default area // Faster @@ -785,11 +780,6 @@ ADMIN_VERB(load_away_mission, R_FUN, "Load Away Mission", "Load a specific away z_level_to_lowest_plane_offset[level_to_update.z_value] = plane_offset z_level_to_stack[level_to_update.z_value] = z_stack - // This can be affected by offsets, so we need to update it - // PAIN - for(var/i in 1 to length(z_list)) - generate_lighting_appearance_by_z(i) - var/old_max = max_plane_offset max_plane_offset = max(max_plane_offset, plane_offset) if(max_plane_offset == old_max) @@ -875,11 +865,6 @@ ADMIN_VERB(load_away_mission, R_FUN, "Load Away Mission", "Load a specific away CRASH("Attempted to lazy load a template key that does not exist: '[template_key]'") return target.lazy_load() -/proc/generate_lighting_appearance_by_z(z_level) - if(length(GLOB.default_lighting_underlays_by_z) < z_level) - GLOB.default_lighting_underlays_by_z.len = z_level - GLOB.default_lighting_underlays_by_z[z_level] = mutable_appearance(LIGHTING_ICON, "transparent", z_level * 0.01, null, LIGHTING_PLANE, 255, RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM, offset_const = GET_Z_PLANE_OFFSET(z_level)) - /// Returns true if the map we're playing on is on a planet /datum/controller/subsystem/mapping/proc/is_planetary() return current_map.planetary diff --git a/code/datums/lazy_template.dm b/code/datums/lazy_template.dm index 3faefc0cc78b..9fe85cbcbcd2 100644 --- a/code/datums/lazy_template.dm +++ b/code/datums/lazy_template.dm @@ -104,6 +104,7 @@ loaded_atom_movables |= thing SSatoms.InitializeAtoms(loaded_areas + loaded_atom_movables + loaded_turfs) + SSlighting.setup_static_lighting_if_needed(loaded_turfs) SSmachines.setup_template_powernets(loaded_cables) SSair.setup_template_machinery(loaded_atmospherics) diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index fa55c13fe40d..33afb7c7b291 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -158,8 +158,12 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( if(SSlighting.initialized) // Space tiles should never have lighting objects if(!space_lit) + if(old_lighting_object) + lighting_object = old_lighting_object + vis_contents += lighting_object // Should have a lighting object if we never had one - lighting_object = old_lighting_object || new /datum/lighting_object(src) + else + new /atom/movable/lighting_object(null, src) else if (old_lighting_object) qdel(old_lighting_object, force = TRUE) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index c6debdb5ce99..b6a0b8c38678 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -67,7 +67,7 @@ GLOBAL_LIST_EMPTY(station_turfs) var/tmp/lighting_corners_initialised = FALSE ///Our lighting object. - var/tmp/datum/lighting_object/lighting_object + var/tmp/atom/movable/lighting_object/lighting_object ///Lighting Corner datums. var/tmp/datum/lighting_corner/lighting_corner_NE var/tmp/datum/lighting_corner/lighting_corner_SE diff --git a/code/modules/admin/view_variables/reference_tracking.dm b/code/modules/admin/view_variables/reference_tracking.dm index 5f3afd380f73..cccb97f6c9bb 100644 --- a/code/modules/admin/view_variables/reference_tracking.dm +++ b/code/modules/admin/view_variables/reference_tracking.dm @@ -19,6 +19,7 @@ GLOBAL_ALIST_EMPTY(reftracker_skip_typecache_b) /icon, /matrix, /regex, + /atom/movable/lighting_object, // only contains turf and MA refs /atom/movable/mirage_holder, /atom/movable/render_step/emissive_blocker, /datum/armor, @@ -31,7 +32,6 @@ GLOBAL_ALIST_EMPTY(reftracker_skip_typecache_b) /datum/greyscale_layer, /datum/icon_transformer, /datum/instrument_key, - /datum/lighting_object, // only contains turf and MA refs /datum/movespeed_modifier, /datum/painting, /datum/paper_input, diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index 4c35a8f2bb3c..1323f45f1e6a 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -141,7 +141,7 @@ return #endif - var/datum/lighting_object/lighting_object = master_NE?.lighting_object + var/atom/movable/lighting_object/lighting_object = master_NE?.lighting_object if (lighting_object && !lighting_object.needs_update) lighting_object.needs_update = TRUE SSlighting.objects_queue += lighting_object @@ -163,10 +163,6 @@ self_destruct_if_idle() - -/datum/lighting_corner/dummy/New() - return - /datum/lighting_corner/Destroy(force) if (!force) return QDEL_HINT_LETMELIVE diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index c5ce42e45edd..85bcd6c0c31f 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -1,32 +1,50 @@ -/datum/lighting_object - ///the underlay we are currently applying to our turf to apply light - var/mutable_appearance/current_underlay - +/atom/movable/lighting_object + name = "" + anchored = TRUE + plane = LIGHTING_PLANE + icon = LIGHTING_ICON + icon_state = null + color = null //we manually set color in init instead + appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + invisibility = INVISIBILITY_LIGHTING + move_resist = INFINITY ///whether we are already in the SSlighting.objects_queue list var/needs_update = FALSE ///the turf that our light is applied to var/turf/affected_turf -// Global list of lighting underlays, indexed by z level -GLOBAL_LIST_EMPTY(default_lighting_underlays_by_z) - -/datum/lighting_object/New(turf/source) - if(!isturf(source)) - qdel(src, force=TRUE) - stack_trace("a lighting object was assigned to [source], a non turf! ") - return +/atom/movable/lighting_object/Initialize(mapload, turf/affected_turf) + if(!isnull(loc)) + if(isturf(loc)) + affected_turf = loc + moveToNullspace() + stack_trace("a lighting object was improperly initialized - they should have a null loc, with the affected turf being the second argument") + else + qdel(src, force = TRUE) + CRASH("a lighting object tried to be spawned for a non-turf!") + if(!isturf(affected_turf)) + qdel(src, force = TRUE) + CRASH("a lighting object was assigned to [affected_turf], a non turf!") . = ..() - current_underlay = new(GLOB.default_lighting_underlays_by_z[source.z]) + verbs.Cut() - affected_turf = source + src.affected_turf = affected_turf + layer = affected_turf.z * 0.01 + if(SSmapping.max_plane_offset) + // generates the offset lighting plane to use. NOTE: this assumes the turf lighting + // plane is ALWAYS offsettable which is technically dependent on a plane master var. + // checking for that is slower and this is hot enough that this is a worthwhile risk to take + plane = LIGHTING_PLANE - (PLANE_RANGE * GET_Z_PLANE_OFFSET(affected_turf.z)) if (affected_turf.lighting_object) qdel(affected_turf.lighting_object, force = TRUE) stack_trace("a lighting object was assigned to a turf that already had a lighting object!") affected_turf.lighting_object = src + affected_turf.vis_contents += src // Default to fullbright, so things can "see" if they use view() before we update affected_turf.luminosity = 1 @@ -38,18 +56,20 @@ GLOBAL_LIST_EMPTY(default_lighting_underlays_by_z) needs_update = TRUE SSlighting.objects_queue += src -/datum/lighting_object/Destroy(force) +/atom/movable/lighting_object/Destroy(force) if (!force) return QDEL_HINT_LETMELIVE SSlighting.objects_queue -= src if (isturf(affected_turf)) + affected_turf.vis_contents -= src affected_turf.lighting_object = null affected_turf.luminosity = 1 - affected_turf.underlays -= current_underlay affected_turf = null return ..() -/datum/lighting_object/proc/update() +/atom/movable/lighting_object/proc/update() + var/turf/affected_turf = src.affected_turf + // To the future coder who sees this and thinks // "Why didn't he just use a loop?" // Well my man, it's because the loop performed like shit. @@ -60,8 +80,6 @@ GLOBAL_LIST_EMPTY(default_lighting_underlays_by_z) var/static/datum/lighting_corner/dummy/dummy_lighting_corner = new - var/turf/affected_turf = src.affected_turf - #ifdef VISUALIZE_LIGHT_UPDATES affected_turf.add_atom_colour(COLOR_BLUE_LIGHT, ADMIN_COLOUR_PRIORITY) animate(affected_turf, 10, color = null) @@ -84,20 +102,12 @@ GLOBAL_LIST_EMPTY(default_lighting_underlays_by_z) var/set_luminosity = max > 1e-6 #endif - var/mutable_appearance/current_underlay = src.current_underlay - affected_turf.underlays -= current_underlay - if(red_corner.cache_r & green_corner.cache_r & blue_corner.cache_r & alpha_corner.cache_r && \ - (red_corner.cache_g + green_corner.cache_g + blue_corner.cache_g + alpha_corner.cache_g + \ - red_corner.cache_b + green_corner.cache_b + blue_corner.cache_b + alpha_corner.cache_b == 8)) - //anything that passes the first case is very likely to pass the second, and addition is a little faster in this case - current_underlay.icon_state = "lighting_transparent" - current_underlay.color = null - else if(!set_luminosity) - current_underlay.icon_state = "lighting_dark" - current_underlay.color = null + if(!set_luminosity) + icon_state = "lighting_dark" + color = null else - current_underlay.icon_state = null - current_underlay.color = list( + icon_state = null + color = list( red_corner.cache_r, red_corner.cache_g, red_corner.cache_b, 00, green_corner.cache_r, green_corner.cache_g, green_corner.cache_b, 00, blue_corner.cache_r, blue_corner.cache_g, blue_corner.cache_b, 00, @@ -105,7 +115,34 @@ GLOBAL_LIST_EMPTY(default_lighting_underlays_by_z) 00, 00, 00, 01 ) - // Of note. Most of the cost in this proc is here, I think because color matrix'd underlays DO NOT cache well, which is what adding to underlays does - // We use underlays because objects on each tile would fuck with maptick. if that ever changes, use an object for this instead - affected_turf.underlays += current_underlay - affected_turf.luminosity = set_luminosity + luminosity = set_luminosity + +// Variety of overrides so the overlays don't get affected by weird things. + +/atom/movable/lighting_object/ex_act(severity) + return FALSE + +/atom/movable/lighting_object/singularity_act() + return + +/atom/movable/lighting_object/singularity_pull() + return + +/atom/movable/lighting_object/blob_act() + return + +/atom/movable/lighting_object/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents = TRUE) + SHOULD_CALL_PARENT(FALSE) + return + +/atom/movable/lighting_object/wash(clean_types) + SHOULD_CALL_PARENT(FALSE) // lighting objects are dirty, confirmed + return + +// Override here to prevent things accidentally moving around overlays. +/atom/movable/lighting_object/forceMove(atom/destination, no_tp = FALSE, harderforce = FALSE) + if(harderforce) + return ..() + +/atom/movable/lighting_object/ref_search_details() + return "[text_ref(src)] (turf: [affected_turf ? "[affected_turf.type] @ [AREACOORD(affected_turf)]" : "null"] needs_update: [needs_update ? "true" : "false"])" diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 949d9b59b8f3..f3feed46bcff 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -14,7 +14,7 @@ if (lighting_object) qdel(lighting_object, force=TRUE) //Shitty fix for lighting objects persisting after death - new /datum/lighting_object(src) + new /atom/movable/lighting_object(null, src) // Used to get a scaled lumcount. /turf/proc/get_lumcount(minlum = 0, maxlum = 1) diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 0f6ff85eed92..a0a309849dc4 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -90,14 +90,7 @@ return SSatoms.InitializeAtoms(areas + turfs + movables, returns_created_atoms ? created_atoms : null) - - for(var/turf/unlit as anything in turfs) - if(unlit.space_lit) - continue - var/area/loc_area = unlit.loc - if(!loc_area.static_lighting) - continue - unlit.lighting_build_overlay() + SSlighting.setup_static_lighting_if_needed(turfs) // NOTE, now that Initialize and LateInitialize run correctly, do we really // need these two below? diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm index 7a4cc5857a0c..21ad4a51d4bd 100644 --- a/code/modules/photography/camera/camera_image_capturing.dm +++ b/code/modules/photography/camera/camera_image_capturing.dm @@ -41,7 +41,7 @@ atoms += new /obj/effect/appearance_clone(newT, T.loc) if(T.lighting_object) var/obj/effect/appearance_clone/lighting_overlay = new(newT) - lighting_overlay.appearance = T.lighting_object.current_underlay + lighting_overlay.appearance = T.lighting_object.appearance lighting_overlay.underlays += backdrop lighting_overlay.blend_mode = BLEND_MULTIPLY lighting += lighting_overlay @@ -61,7 +61,7 @@ atoms += T if(T.lighting_object) var/obj/effect/appearance_clone/lighting_overlay = new(T) - lighting_overlay.appearance = T.lighting_object.current_underlay + lighting_overlay.appearance = T.lighting_object.appearance lighting_overlay.underlays += backdrop lighting_overlay.blend_mode = BLEND_MULTIPLY lighting += lighting_overlay diff --git a/code/modules/shuttle/mobile_port/shuttle_move_callbacks.dm b/code/modules/shuttle/mobile_port/shuttle_move_callbacks.dm index 2eee98a0d6f0..245d1cb3485d 100644 --- a/code/modules/shuttle/mobile_port/shuttle_move_callbacks.dm +++ b/code/modules/shuttle/mobile_port/shuttle_move_callbacks.dm @@ -78,6 +78,13 @@ All ShuttleMove procs go here if(rotation) shuttleRotate(rotation, params = ALL) //see shuttle_rotate.dm + + // if we have a lighting object that needs to be updated + if(lighting_object?.needs_update) + lighting_object.update() + lighting_object.needs_update = FALSE + SSlighting.objects_queue -= lighting_object + SEND_SIGNAL(src, COMSIG_TURF_AFTER_SHUTTLE_MOVE, oldT) return TRUE @@ -402,6 +409,9 @@ All ShuttleMove procs go here /************************************Misc move procs************************************/ +/atom/movable/lighting_object/onShuttleMove() + return FALSE + /obj/docking_port/mobile/hypotheticalShuttleMove(rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() if(moving_dock == src) diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 3814df5ef38c..74f41bf10884 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -279,6 +279,9 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) /obj/effect/decal/cleanable/blood/trail, //Should not exist outside of ethereals /obj/item/stock_parts/power_store/cell/ethereal, + // Abstract type, controlled by turfs + // Literally errors on creation/deletion + /atom/movable/lighting_object, ) // Everything that follows is a typesof() check. diff --git a/icons/effects/lighting_object.dmi b/icons/effects/lighting_object.dmi index d2e503958723fba64ad288e8819ffbcdcb87afc0..f2d5960d91b0d07332dc9e8cbe9e46687dd4b294 100644 GIT binary patch literal 1520 zcmXX`dpOg39G*OGL*}45m1{1?C0Pjzn>5uLCUP>D$mK{8=F*hQqC#s{E?Pu8N3?|0)doKCz0+z z4FHaVyex1FEpgj{l5+KoS1d9lCI}Z66&n_L83e)?d-kxvX%-OKDVRtd(U^bHFVa}G zyR_DA8!CtP*bz7SW@$=C6Cw5%ban4%a%lE>Chx%fC~o%psehFCkBxF@WemBhtE2!+ z!g`sYMKr&`1Vz&5lS5F`TEe;-b zAr=R*->0H;(v8${WujZr6iO=DFCW2XU}pbdN!c|x1!ouQs7B$z{7~?pxe2=T-BF`r z&v~`p4a@6#2JZ3)BIKjsMHFv-``Yli&i1j6kd;FKm#K(LJN{c$x0@z?C4>BCV&dm!9D>(Kg#z#cZ-h34Q=MS9{JevnH~)4UF?9C5cG3Ds9h3ML4|BK?o63Db&z zQ<{gBLwXbEtzK+kw$16{bQB}-wrLmDIGUrD)A6|V0q12cu#Z_*C2`8Ho?=s7u>Dl6 z>0mV)^PK5A6h%FRgq>B?`6+>&oDKN>r8SEqRcMZYzh`>3B4On2*<1l zN8z5n0}NZgeJYV7mhqvydk=NX_c4z2_~GLkE?}v7%tr0EZQq5 zS{NpnIiUF|B@}32p|`ylnd>;F$7l!)6KvQ<=ZoS~m<){RsNqf}Xt#zi{00{>s;gX? zz{M5RdMyb$Nz=KM&r~43NnORg2qoy8Jn1{L9;dZ{zjJN<*C(GO?$f`p)Yq(T+2s^n zC<{|FIvzto2y$1H8EvBiz`DrGC_h-5D=G@Lt!Hvso5YZ$vF9dx+_ZO;PMFul@D17` zDB}sdZ{O}3{jArDycDr!4Qxx&sEU!c4ok~N(}==VSZa%6`SitigJpH=AI zV6A|(W!27Yn_oCWdq6@qm^pFt92xTC!ZX+`JaUSLK0aGw|9mo~F*X28-OkdHmFJbq zWl*6W*;>k=wR<*gZSBs=^_QTMRhNCs8ydK&Jq`V-_k zd#qO$IjO?afY(WY84n4t$JyIT2k0DF;f6^6y(BlKg<&0Ksf_-A-7BKpZECKSpB-5ICja$+HX@t*~`RnCsi5IMH|CZMv^U{_S ze>+JMLod00D_7qvMgpkql}NQ_U$LczMAFOhG7>_4Q?h{_a!5je3?xL-eTlcojkRS3 dDa=zAs}QFX`Gp?grN9>sLOHo2Ya9bo{{t&B=Mw+` literal 2092 zcmc(g`#;ltAIHD5cCck=Q-r1_r`3gWm^Q}|x+GRkR}M3mV=Z$?4x>4QmWOgXBqJ%x z6&KUt#*J)p=pcvWCMI83S-OqXB8s`^dfflR{ln+|{^j-ld|r?D^ZkB&E_=8;E1`Cy z002;Ob#bK0GhKe{kZ^gNHH*c_6F2#kZ@gn@Tu5vrD?T#%8~`MiUwYYu>N3F{ow53E zm^KkmpYUp*;XkTUVT!tXyUdGuSDrk{r0T~|mMZq#`y|=b@^*yi`u=ejL$vU`-6|@* z=ZoE4-2tc0VY7$~r?G;|2b6XaZq#KtNAcAySReh1&OE8jnz(6C8)fd6xtTs&xV~t5 z5OZ$j8{`paiG(%y^aB7Qz}3UHdT@W|x%LIuU;a@}F zGeH7KSR&j(A4W?;zbPDrgp}Ta64HTVLr$_o6|~ z-brw>w+}qsdpd3dxB5rxO7J(+u>!F=sD5<$SKv&>Js^<28{km8%)oc+(+VI{sw8C& zhGgQ`+~RLIBly>?vWF*e9#dM8-j+tkVZOmeZX?di_R#Xia)-r%N*IXV#TG--Hc{Y5 z;QOJUCMn#IQi3+3oY0SY7{NWs83;*40mw{_;&jDy+7hCRvXIxjOzh%b)n7fyZ7u7- z-Rbuft8-Pc6bH|H9FMs7q6PY?Dr6jgk1$=-lWll~7s9d%~Bv`T%ZVejo#% zfAcSw9%P?O)4tmdSofozI4uQ(oBPzUXS$heAG$G&zuc>5d#2xt9sgDo?r~i-s)4G~w4`oUY$)%m1ZT;`NsJ zz}XRBOejq?K@j_3jg%Q!wWP>;ChRvi%}*!orYdaFg0xwZQ@4b}ZQwSj2E?FBtx7Zd z?f)5_DD-2IL93ZER+GIO4trjM6(UQ5w+va2PmNnMYDraU0R(5K74;aQ@|+^x?&qa& zBH`sdq`4uD#@jdK?=t3tcvrH86AH!JP{xb3_6!%Bn%y32AOFVHGIdX!{~dE%iLb`W zWf9*4&V^IeE+G5jGS)co>stjMfx+CL&9;vw{NzkJx1K$h){X%T|NFo-?HP7g=qq4O7Z1UElu zZoTh1TsF2(ty`%z0kr( ztqccZ8N$-c!t8AA%l`o#L_Z+sWSYbHIMWPIu6j>xQq%LYrTN3rT0^Z-#K^h?Z)=PF zmTH!}c!fMP4-C8&lPbS#b>?sWnoJvY!;wX!z#E1g_PUiOLn-kMikl02}gNnO?0Bsg7@ahKq`} zh`Od9-Y7nT|0D3kGL0ngE*v#_qicStjK(W!+jqf9a(`UztR+ZWMWo8s;S>I*sd7!x zYAy(}mrz~zV$-5< z0f`xjB;$@vMjEO`m6Z7%_vHEUtjL0PuuY@Qc(ous=dyM;w4L0!0S?y79*1_xe!zk- z(j5hNN9w~y2kSh@HYM<^9=E6DCZLBJL&c*CPr4)OdX3 z4g`x4hjqin=ejYmmVZIM1~2(n>g*9*hcwRy!2o*5VzEuap$Ujq0I+|coUEhip%n4z ztfq;DjxuY}PGUz9l+sxUaZeu!yr{wQN&6{8>pYQet4v8wUHHE7Vwkg1+`5s{D=Sv! z40d8|1ygJO)_6Kz(`y&(dCmH)6au7`9O08n1`*&U%(u-}w%EkBp+APyg{-j!QBd!` zuWOu9czwQHS*PTy{qiH!Ta$l8F0Z$spFdEk?8_AV$JYkWpWuxCUkfLiJ8iaHv89`6 exe;*ji}C9rbAz$~yAk>K54bwHJ2p7bGyV%Xp49&U From d3b50351a06daafa864f7ffbd06b89afd2adddc7 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:55:49 +0000 Subject: [PATCH 043/282] Automatic changelog for PR #95332 [ci skip] --- html/changelogs/AutoChangeLog-pr-95332.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95332.yml diff --git a/html/changelogs/AutoChangeLog-pr-95332.yml b/html/changelogs/AutoChangeLog-pr-95332.yml new file mode 100644 index 000000000000..93e8eb801c4e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95332.yml @@ -0,0 +1,4 @@ +author: "Absolucy, LemonInTheDark" +delete-after: True +changes: + - bugfix: "You can no longer see lights through walls when using mesons or when ventcrawling." \ No newline at end of file From 4a2ca2e76d17e97a12cf07c8b71765a45a65e669 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Wed, 22 Apr 2026 15:56:07 -0500 Subject: [PATCH 044/282] Heretic starting knowledge tweaks (#95551) ## About The Pull Request Codex Cicatrix and Warren King's Welcome are moved from starting knowledge to tier 1 knowledge. The Codex cannot appear in the draft, though Warren King's Welcome can. Warren King's Welcome received a rework, and now has additional effects: - Requires 10 cable, 1 paper, 1 multitool - Grants all IDs present on the rune + your worn/held ID access to `maint`, `external airlock`, and `heretic` - All nearby airlocks (7 tile radius, needs line of sight) have their access overridden to `heretic` access (+ai wire cut) Eldritch ID card also starts with "heretic" access (just for fun) ## Why It's Good For The Game 1. The Codex Cicatrix was originally designed as an investment - you'd put in points + effort + risk, and you'd get reward But over time I think every aspect of it has been toned down - It's free, so you no longer invest points - It's significantly easier to create, so it's basically no effort - You have x-ray when around a rift, so you can easily see if someone is nearby, so it's far less a risk (besides being searched) Now it serves as a major point injection into the heretic, which I'm not sure they really need. Putting it back in T1 at least brings back the point investment part. 2. Warren King's Welcome is not a particularly problematic knowledge in comparison but I made the decision to move it to reduce the front-loaded-ness of heretic's starting knowledge. Having so many things available off rip is a bit overwhelming. Additionally, I prefer the idea of Warren King's Welcome being a point trade-off for people who can't get access to maintenance another way, rather than it being essentially free. You can spend 1 point for otherwise free maintenance access - *or* you can get access from the HoP, or you can steal an ID, or you can make an Eldritch Coin, or you can rely on a spell like Ashen Passage, or you can just hack doors. More sandboxxyness. The rework happened because it needed a bit more to be its own independent knowledge. Addendum: I touched on it in 2, but the amount of starting knowledge can easily overwhelm newer players. We should be careful adding multiple rituals off rip. ## Changelog :cl: Melbert balance: Codex Cicatrix is now a tier 1 heretic knowledge, and can not be drafted. balance: Warren King's Welcome is now a tier 1 heretic knowledge, but can be drafted. balance: Warren King's Welcome soft reworked. Now needs 10 cable, 1 paper, 1 multitool. Now adds access to all IDs present, including worn IDs. Now adds "heretic" access to the ID card. Now changes all nearby airlocks to require "heretic" access, and cuts the AI wire. balance: Eldritch ID card starts with "heretic" access. /:cl: --- code/__DEFINES/access.dm | 2 + .../antagonists/heretic/items/keyring.dm | 1 + .../knowledge/side_knowledge/tier_one.dm | 133 ++++++++++++++++++ .../heretic/knowledge/starting_lore.dm | 117 --------------- 4 files changed, 136 insertions(+), 117 deletions(-) diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index b139ef6713b2..7f5487651f92 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -199,6 +199,8 @@ #define ACCESS_BLOODCULT "bloodcult" /// HUNTERS #define ACCESS_HUNTER "hunter" +/// HERETIC +#define ACCESS_HERETIC "heretic" /// - - - MISC - - - // These don't really fit anywhere else diff --git a/code/modules/antagonists/heretic/items/keyring.dm b/code/modules/antagonists/heretic/items/keyring.dm index 61dbef21dc19..21bd99846e5d 100644 --- a/code/modules/antagonists/heretic/items/keyring.dm +++ b/code/modules/antagonists/heretic/items/keyring.dm @@ -95,6 +95,7 @@ ///An ID card capable of shapeshifting to other IDs given by the Key Keepers Burden knowledge /obj/item/card/id/advanced/heretic + access = list(ACCESS_HERETIC) ///List of IDs this card consumed var/list/obj/item/card/id/fused_ids = list() ///The first portal in the portal pair, so we can clear it later diff --git a/code/modules/antagonists/heretic/knowledge/side_knowledge/tier_one.dm b/code/modules/antagonists/heretic/knowledge/side_knowledge/tier_one.dm index e8a3f9b4d674..3706408b464e 100644 --- a/code/modules/antagonists/heretic/knowledge/side_knowledge/tier_one.dm +++ b/code/modules/antagonists/heretic/knowledge/side_knowledge/tier_one.dm @@ -100,3 +100,136 @@ research_tree_icon_path = 'icons/obj/economy.dmi' research_tree_icon_state = "coin_heretic" drafting_tier = 1 + +/** + * This allows heretics to choose if they want to rush all the influences and take them stealthily, or + * Construct a codex and take what's left with more points. + * Another downside to having the book is strip searches, which means that it's not just a free nab, at least until you get exposed - and when you do, you'll probably need the faster drawing speed. + * Overall, it's a tradeoff between speed and stealth or power. + */ +/datum/heretic_knowledge/codex_cicatrix + name = "Codex Cicatrix" + desc = "Allows you to transmute a book, any pen, and your pick from any carcass (animal or human), leather, or hide to create a Codex Cicatrix. \ + The Codex Cicatrix can be used when draining influences to gain additional knowledge, but comes at greater risk of being noticed. \ + It can also be used to draw and remove transmutation runes easier, and as a spell focus in a pinch." + gain_text = "The occult leaves fragments of knowledge and power anywhere and everywhere. The Codex Cicatrix is one such example. \ + Within the leather-bound faces and age old pages, a path into the Mansus is revealed." + required_atoms = list( + list(/obj/item/toy/eldritch_book, /obj/item/book) = 1, + /obj/item/pen = 1, + list(/mob/living, /obj/item/stack/sheet/leather, /obj/item/stack/sheet/animalhide, /obj/item/food/deadmouse) = 1, + ) + result_atoms = list(/obj/item/codex_cicatrix) + cost = 1 + priority = MAX_KNOWLEDGE_PRIORITY - 4 + drafting_tier = 1 + is_shop_only = TRUE + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "book" + + var/static/list/non_mob_bindings = typecacheof(list( + /obj/item/stack/sheet/leather, + /obj/item/stack/sheet/animalhide, + /obj/item/food/deadmouse, + )) + +/datum/heretic_knowledge/codex_cicatrix/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) + . = ..() + if(!.) + return FALSE + + for(var/thingy in atoms) + if(is_type_in_typecache(thingy, non_mob_bindings)) + selected_atoms += thingy + return TRUE + else if(isliving(thingy)) + var/mob/living/body = thingy + if(body.stat != DEAD) + continue + selected_atoms += body + return TRUE + return FALSE + +/datum/heretic_knowledge/codex_cicatrix/cleanup_atoms(list/selected_atoms) + var/mob/living/body = locate() in selected_atoms + if(!body) + return ..() + // A golem or an android doesn't have skin! + var/exterior_text = "skin" + // If carbon, it's the limb. If not, it's the body. + var/atom/movable/ripped_thing = body + + // We will check if it's a carbon's body. + // If it is, we will damage a random bodypart, and check that bodypart for its body type, to select between 'skin' or 'exterior'. + if(iscarbon(body)) + var/mob/living/carbon/carbody = body + var/obj/item/bodypart/bodypart = pick(carbody.get_bodyparts()) + ripped_thing = bodypart + + carbody.apply_damage(25, BRUTE, bodypart, sharpness = SHARP_EDGED) + if(!(bodypart.bodytype & BODYTYPE_ORGANIC)) + exterior_text = "exterior" + else + body.apply_damage(25, BRUTE, sharpness = SHARP_EDGED) + // If it is not a carbon mob, we will just check biotypes and damage it directly. + if(body.mob_biotypes & (MOB_MINERAL|MOB_ROBOTIC)) + exterior_text = "exterior" + + // Procure book for flavor text. This is why we call parent at the end. + var/obj/item/book/le_book = locate() in selected_atoms + if(!le_book) + stack_trace("Somehow, no book in codex cicatrix selected atoms! [english_list(selected_atoms)]") + playsound(body, 'sound/items/poster/poster_ripped.ogg', 100, TRUE) + body.do_jitter_animation() + body.visible_message(span_danger("An awful ripping sound is heard as [ripped_thing]'s [exterior_text] is ripped straight out, wrapping around [le_book || "the book"], turning into an eldritch shade of blue!")) + return ..() + +/** + * Warren King's Welcome + * Offers an alternative way besides stealing an ID or visiting the HoP to gain access to maintenance + * Additionally changes all nearby airlock's access's to ACCESS_HERETIC + */ +/datum/heretic_knowledge/bookworm + name = "Warren King's Welcome" + desc = "Allows you to transmute 10 cable pieces, a piece of paper, and a multitool to brand nearby ID cards and airlocks. \ + Branded ID cards will gain access to maintenance, external airlocks, as well to branded airlocks. \ + Branded airlocks will only be accessible by those with a branded ID card." + gain_text = "Gnawed into vicious-stained fingerbones, my grim invitation snaps my nauseous and clouded mind towards the heavy-set door. \ + Slowly, the light dances between a crawling darkness, blanketing the fetid promenade with infinite machinations. \ + But the King will soon take his pound of flesh. Even here, the taxman takes their cut. For there are a thousands mouths to feed." + required_atoms = list( + /obj/item/stack/cable_coil = 10, + /obj/item/paper = 1, + /obj/item/multitool = 1, + ) + cost = 1 + priority = MAX_KNOWLEDGE_PRIORITY - 3 + drafting_tier = 1 + research_tree_icon_path = 'icons/obj/card.dmi' + research_tree_icon_state = "eldritch" + +/datum/heretic_knowledge/bookworm/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) + . = ..() + for(var/obj/item/card/id/used_id in atoms) + selected_atoms += used_id + var/obj/item/card/user_card = user.get_idcard(hand_first = TRUE) + if(user_card) + selected_atoms += user_card + +/datum/heretic_knowledge/bookworm/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) + . = ..() + for(var/obj/item/card/id/improved_id in selected_atoms) + improved_id.add_access(list(ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_HERETIC), mode = FORCE_ADD_ALL) + selected_atoms -= improved_id + for(var/obj/machinery/door/airlock/door in view(7, loc)) + door.req_one_access = null + door.req_access = list(ACCESS_HERETIC) + door.wires?.cut(WIRE_AI) + new /obj/effect/temp_visual/eldritch_sparks(door.loc) + var/obj/effect/light_emitter/light = new(door.loc) + light.set_light(1.75, 1.5, COLOR_PUCE) + QDEL_IN(light, 1 SECONDS) + playsound(door, 'sound/effects/magic.ogg', 20, vary = TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) + playsound(door, SFX_SPARKS, 33, vary = TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) + + return TRUE diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm index 6647ee086bcf..4105a4d08c98 100644 --- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm @@ -200,84 +200,6 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) cost = 0 is_starting_knowledge = TRUE -/** - * Codex Cicatrixi is available at the start: - * This allows heretics to choose if they want to rush all the influences and take them stealthily, or - * Construct a codex and take what's left with more points. - * Another downside to having the book is strip searches, which means that it's not just a free nab, at least until you get exposed - and when you do, you'll probably need the faster drawing speed. - * Overall, it's a tradeoff between speed and stealth or power. - */ -/datum/heretic_knowledge/codex_cicatrix - name = "Codex Cicatrix" - desc = "Allows you to transmute a book, any pen, and your pick from any carcass (animal or human), leather, or hide to create a Codex Cicatrix. \ - The Codex Cicatrix can be used when draining influences to gain additional knowledge, but comes at greater risk of being noticed. \ - It can also be used to draw and remove transmutation runes easier, and as a spell focus in a pinch." - gain_text = "The occult leaves fragments of knowledge and power anywhere and everywhere. The Codex Cicatrix is one such example. \ - Within the leather-bound faces and age old pages, a path into the Mansus is revealed." - required_atoms = list( - list(/obj/item/toy/eldritch_book, /obj/item/book) = 1, - /obj/item/pen = 1, - list(/mob/living, /obj/item/stack/sheet/leather, /obj/item/stack/sheet/animalhide, /obj/item/food/deadmouse) = 1, - ) - result_atoms = list(/obj/item/codex_cicatrix) - cost = 1 - is_starting_knowledge = TRUE - priority = MAX_KNOWLEDGE_PRIORITY - 4 // Least priority out of the starting knowledges, as it's an optional boon. - var/static/list/non_mob_bindings = typecacheof(list(/obj/item/stack/sheet/leather, /obj/item/stack/sheet/animalhide, /obj/item/food/deadmouse)) - research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' - research_tree_icon_state = "book" - -/datum/heretic_knowledge/codex_cicatrix/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) - . = ..() - if(!.) - return FALSE - - for(var/thingy in atoms) - if(is_type_in_typecache(thingy, non_mob_bindings)) - selected_atoms += thingy - return TRUE - else if(isliving(thingy)) - var/mob/living/body = thingy - if(body.stat != DEAD) - continue - selected_atoms += body - return TRUE - return FALSE - -/datum/heretic_knowledge/codex_cicatrix/cleanup_atoms(list/selected_atoms) - var/mob/living/body = locate() in selected_atoms - if(!body) - return ..() - // A golem or an android doesn't have skin! - var/exterior_text = "skin" - // If carbon, it's the limb. If not, it's the body. - var/atom/movable/ripped_thing = body - - // We will check if it's a carbon's body. - // If it is, we will damage a random bodypart, and check that bodypart for its body type, to select between 'skin' or 'exterior'. - if(iscarbon(body)) - var/mob/living/carbon/carbody = body - var/obj/item/bodypart/bodypart = pick(carbody.get_bodyparts()) - ripped_thing = bodypart - - carbody.apply_damage(25, BRUTE, bodypart, sharpness = SHARP_EDGED) - if(!(bodypart.bodytype & BODYTYPE_ORGANIC)) - exterior_text = "exterior" - else - body.apply_damage(25, BRUTE, sharpness = SHARP_EDGED) - // If it is not a carbon mob, we will just check biotypes and damage it directly. - if(body.mob_biotypes & (MOB_MINERAL|MOB_ROBOTIC)) - exterior_text = "exterior" - - // Procure book for flavor text. This is why we call parent at the end. - var/obj/item/book/le_book = locate() in selected_atoms - if(!le_book) - stack_trace("Somehow, no book in codex cicatrix selected atoms! [english_list(selected_atoms)]") - playsound(body, 'sound/items/poster/poster_ripped.ogg', 100, TRUE) - body.do_jitter_animation() - body.visible_message(span_danger("An awful ripping sound is heard as [ripped_thing]'s [exterior_text] is ripped straight out, wrapping around [le_book || "the book"], turning into an eldritch shade of blue!")) - return ..() - /datum/heretic_knowledge/feast_of_owls name = "Feast of Owls" desc = "Allows you to undergo a ritual that gives you 5 knowledge points but locks you out of ascension. This can only be done once and cannot be reverted." @@ -322,42 +244,3 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) var/drain_message = pick_list(HERETIC_INFLUENCE_FILE, "drain_message") to_chat(user, span_hypnophrase(span_big("[drain_message]"))) return . - -/** - * Warren King's Welcome - * Ritual available at the start. So that heretics can easily gain access to maintenance airlocks without having to rely on a HoP or having to off some poor assistant. - * Gives access to solars since those doors are especially useful to get in or out of space. - */ -/datum/heretic_knowledge/bookworm - name = "Warren King's Welcome" - desc = "Allows you to transmute 5 cable pieces and a piece of paper to infuse any ID with maintenace and external airlock access." - gain_text = "Gnawed into vicious-stained fingerbones, my grim invitation snaps my nauseous and clouded mind towards the heavy-set door. \ - Slowly, the light dances between a crawling darkness, blanketing the fetid promenade with infinite machinations. \ - But the King will soon take his pound of flesh. Even here, the taxman takes their cut. For there are a thousands mouths to feed." - required_atoms = list( - /obj/item/stack/cable_coil = 5, - /obj/item/paper = 1, - ) - cost = 1 - is_starting_knowledge = TRUE - priority = MAX_KNOWLEDGE_PRIORITY - 3 - research_tree_icon_path = 'icons/obj/card.dmi' - research_tree_icon_state = "eldritch" - -/datum/heretic_knowledge/bookworm/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) - . = ..() - for(var/obj/item/card/id/used_id in atoms) - if((ACCESS_MAINT_TUNNELS in used_id.access) && (ACCESS_EXTERNAL_AIRLOCKS in used_id.access)) // If we can't give any access we aren't elligible - continue - selected_atoms += used_id - return TRUE - - user.balloon_alert(user, "ritual failed, no ID lacking access!") - return FALSE - -/datum/heretic_knowledge/bookworm/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) - . = ..() - var/obj/item/card/id/improved_id = locate() in selected_atoms - improved_id.add_access(list(ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS), mode = FORCE_ADD_ALL) - selected_atoms -= improved_id - return TRUE From cad869ac3aef75de86d1fec3f0ee4f7fe95ee7f9 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:56:26 +0000 Subject: [PATCH 045/282] Automatic changelog for PR #95551 [ci skip] --- html/changelogs/AutoChangeLog-pr-95551.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95551.yml diff --git a/html/changelogs/AutoChangeLog-pr-95551.yml b/html/changelogs/AutoChangeLog-pr-95551.yml new file mode 100644 index 000000000000..704d20980565 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95551.yml @@ -0,0 +1,7 @@ +author: "Melbert" +delete-after: True +changes: + - balance: "Codex Cicatrix is now a tier 1 heretic knowledge, and can not be drafted." + - balance: "Warren King's Welcome is now a tier 1 heretic knowledge, but can be drafted." + - balance: "Warren King's Welcome soft reworked. Now needs 10 cable, 1 paper, 1 multitool. Now adds access to all IDs present, including worn IDs. Now adds \"heretic\" access to the ID card. Now changes all nearby airlocks to require \"heretic\" access, and cuts the AI wire." + - balance: "Eldritch ID card starts with \"heretic\" access." \ No newline at end of file From ae0b1131c061923d81c63b2fae2ce3f75d4d7c74 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Wed, 22 Apr 2026 15:56:47 -0500 Subject: [PATCH 046/282] EVA helmets have retractable visors (#95687) ## About The Pull Request image EVA helmets can have their visors pulled up to show off your face. Older models of space helmets don't have retractable visors ## Why It's Good For The Game This was inspired by #95683 - I thought the potential behind being able to flip up your visor to get rid of the dirt in your eyes was an interesting lil gameplay interaction Then I got thinking of sci-fi tropes and scenes where the guy says "time to kick some ass" and rips his visor down, or scenes where the unknown guy in a space suits says "well well well" and rips up is visor to reveal he's the bad guy Now does this make much sense from a space suit design perspective? Well, not really... ideally you want that thing sealed as tight as possible, but by 2566 you'd think they'd improve the seals on the things to allow for it, right? (That was part of the reason why I didn't add it to the older models of space suits) ## Changelog :cl: Melbert add: Some EVA helmets now have retractable visors, which you can pull up or down at will, to reveal your face. /:cl: --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> --- code/datums/actions/items/adjust.dm | 8 +++++ code/modules/clothing/clothing.dm | 2 +- .../clothing/spacesuits/_spacesuits.dm | 28 ++++++++++++++++++ code/modules/clothing/spacesuits/pirate.dm | 3 +- code/modules/clothing/spacesuits/plasmamen.dm | 10 +++---- code/modules/clothing/spacesuits/softsuit.dm | 13 ++++---- .../modules/clothing/spacesuits/specialops.dm | 7 +++-- code/modules/clothing/spacesuits/syndi.dm | 3 +- .../mob/living/carbon/human/inventory.dm | 19 +++++++++--- icons/mob/clothing/head/spacehelm.dmi | Bin 12655 -> 16484 bytes icons/obj/clothing/head/spacehelm.dmi | Bin 5021 -> 6662 bytes 11 files changed, 71 insertions(+), 22 deletions(-) diff --git a/code/datums/actions/items/adjust.dm b/code/datums/actions/items/adjust.dm index be04a0f8dbdd..13189c533c07 100644 --- a/code/datums/actions/items/adjust.dm +++ b/code/datums/actions/items/adjust.dm @@ -20,3 +20,11 @@ ..() var/obj/item/item_target = target name = "Adjust [item_target.name]'s Style" + +/datum/action/item_action/adjust_visor + name = "Adjust Visor" + +/datum/action/item_action/adjust_visor/New(Target) + ..() + var/obj/item/item_target = target + name = "Adjust [item_target.name] Visor" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 91df732e454c..fe5c87fe8987 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -572,7 +572,7 @@ BLIND // can't see anything if(!iscarbon(user)) return TRUE var/mob/living/carbon/carbon_user = user - if(up) + if(visor_flags_inv) carbon_user.refresh_obscured() if(visor_vars_to_toggle & VISOR_TINT) carbon_user.update_tint() diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index f4535059a050..fa3a77f4365e 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -22,16 +22,27 @@ strip_delay = 5 SECONDS equip_delay_other = 5 SECONDS flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + visor_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | HEADINTERNALS + visor_flags_inv = HIDEMASK | HIDEEYES | HIDEFACE | HIDESNOUT + visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT resistance_flags = NONE dog_fashion = null sound_vary = TRUE equip_sound = 'sound/items/handling/helmet/helmet_equip1.ogg' pickup_sound = 'sound/items/handling/helmet/helmet_pickup1.ogg' drop_sound = 'sound/items/handling/helmet/helmet_drop1.ogg' + visor_toggle_up_sound = SFX_VISOR_UP + visor_toggle_down_sound = SFX_VISOR_DOWN + actions_types = list(/datum/action/item_action/adjust_visor) + toggle_message = "You pull your helmet's visor down." + alt_toggle_message = "You pull your helmet's visor up." ///How much this helmet affects fishing difficulty var/fishing_modifier = 3 ///Icon state applied when we get spraypainted/peppersprayed. If null, does not add the dirt component var/visor_dirt = "helm_dirt" + /// Whether the helmet has a visor you can flip up + var/has_visor = FALSE /obj/item/clothing/head/helmet/space/Initialize(mapload) . = ..() @@ -44,6 +55,23 @@ /obj/item/clothing/head/helmet/space/proc/add_stabilizer(loose_hat = TRUE) AddComponent(/datum/component/hat_stabilizer, loose_hat = loose_hat) +/obj/item/clothing/head/helmet/space/attack_self(mob/living/user) + . = ..() + if(. || !has_visor) + return + + return adjust_visor(user) + +/obj/item/clothing/head/helmet/space/click_alt(mob/user) + if(!has_visor) + return NONE + + return adjust_visor(user) ? CLICK_ACTION_SUCCESS : CLICK_ACTION_BLOCKING + +/obj/item/clothing/head/helmet/space/update_icon_state() + . = ..() + icon_state = "[initial(icon_state)][up ? "-novisor" : ""]" + /datum/armor/helmet_space bio = 100 fire = 80 diff --git a/code/modules/clothing/spacesuits/pirate.dm b/code/modules/clothing/spacesuits/pirate.dm index 1a0dcca025db..de7b36804033 100644 --- a/code/modules/clothing/spacesuits/pirate.dm +++ b/code/modules/clothing/spacesuits/pirate.dm @@ -7,7 +7,8 @@ strip_delay = 4 SECONDS equip_delay_other = 2 SECONDS fishing_modifier = -2 - visor_dirt = null + visor_dirt = "space_dirt" + has_visor = TRUE /datum/armor/space_pirate melee = 30 diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 97eb723c77e9..44324bae47aa 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -75,7 +75,7 @@ desc = "A special containment helmet that allows plasma-based lifeforms to exist safely in an oxygenated environment. It is space-worthy, and may be worn in tandem with other EVA gear." icon = 'icons/obj/clothing/head/plasmaman_hats.dmi' worn_icon = 'icons/mob/clothing/head/plasmaman_head.dmi' - clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | STACKABLE_HELMET_EXEMPT | PLASMAMAN_PREVENT_IGNITION | HEADINTERNALS + clothing_flags = parent_type::clothing_flags | PLASMAMAN_PREVENT_IGNITION icon_state = "plasmaman-helm" inhand_icon_state = "plasmaman-helm" strip_delay = 8 SECONDS @@ -90,10 +90,9 @@ light_on = FALSE fishing_modifier = 0 actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_welding_screen) - visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF - visor_flags_inv = HIDEEYES|HIDEFACE + visor_flags = NONE + visor_flags_inv = HIDEEYES|HIDEFACE|HIDESNOUT + visor_flags_cover = NONE visor_dirt = null var/helmet_on = FALSE var/smile = FALSE @@ -141,7 +140,6 @@ to_chat(user, span_notice("Your helmet's torch can't pass through your welding visor!")) set_light_on(FALSE) helmet_on = FALSE - playsound(src, up ? SFX_VISOR_UP : SFX_VISOR_DOWN, 50, TRUE) update_appearance() /obj/item/clothing/head/helmet/space/plasmaman/update_icon_state() diff --git a/code/modules/clothing/spacesuits/softsuit.dm b/code/modules/clothing/spacesuits/softsuit.dm index 72841de62df0..d6cb7bf0c898 100644 --- a/code/modules/clothing/spacesuits/softsuit.dm +++ b/code/modules/clothing/spacesuits/softsuit.dm @@ -1,25 +1,25 @@ //NASA Voidsuit /obj/item/clothing/head/helmet/space/nasavoid - name = "NASA Void Helmet" + name = "\improper NASA void helmet" desc = "An old, NASA CentCom branch designed, dark red space suit helmet." icon_state = "void" inhand_icon_state = "void_helmet" /obj/item/clothing/suit/space/nasavoid - name = "NASA Voidsuit" + name = "\improper NASA voidsuit" icon_state = "void" inhand_icon_state = "void_suit" desc = "An old, NASA CentCom branch designed, dark red space suit." allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool) /obj/item/clothing/head/helmet/space/nasavoid/old - name = "Engineering Void Helmet" + name = "\improper engineering void helmet" desc = "A CentCom engineering dark red space suit helmet. While old and dusty, it still gets the job done." icon_state = "void" visor_dirt = "void_dirt" /obj/item/clothing/suit/space/nasavoid/old - name = "Engineering Voidsuit" + name = "\improper engineering voidsuit" icon_state = "void" inhand_icon_state = "void_suit" desc = "A CentCom engineering dark red space suit. Age has degraded the suit making it difficult to move around in." @@ -28,20 +28,21 @@ //EVA suit /obj/item/clothing/suit/space/eva - name = "EVA suit" + name = "\improper EVA suit" icon_state = "space" inhand_icon_state = "s_suit" desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies." armor_type = /datum/armor/space_eva /obj/item/clothing/head/helmet/space/eva - name = "EVA helmet" + name = "\improper EVA helmet" icon_state = "space" inhand_icon_state = "space_helmet" desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies." flash_protect = FLASH_PROTECTION_NONE armor_type = /datum/armor/space_eva visor_dirt = "space_dirt" + has_visor = TRUE /datum/armor/space_eva bio = 100 diff --git a/code/modules/clothing/spacesuits/specialops.dm b/code/modules/clothing/spacesuits/specialops.dm index d0f06f89a67e..570db863b793 100644 --- a/code/modules/clothing/spacesuits/specialops.dm +++ b/code/modules/clothing/spacesuits/specialops.dm @@ -1,5 +1,5 @@ /obj/item/clothing/head/helmet/space/beret - name = "CentCom officer's beret" + name = "\improper CentCom officer's beret" desc = "An armored beret commonly used by special operations officers. Uses advanced force field technology to protect the head from space." icon = 'icons/map_icons/clothing/head/_head.dmi' icon_state = "/obj/item/clothing/head/helmet/space/beret" @@ -9,7 +9,8 @@ inhand_icon_state = null greyscale_colors = "#397F3F#FFCE5B" clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT - flags_inv = 0 + flags_inv = /obj/item/clothing/head/beret::flags_inv + flags_cover = /obj/item/clothing/head/beret::flags_cover armor_type = /datum/armor/space_beret strip_delay = 13 SECONDS max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -30,7 +31,7 @@ wound = 15 /obj/item/clothing/suit/space/officer - name = "CentCom officer's coat" + name = "\improper CentCom officer's coat" desc = "An armored, space-proof coat used in special operations." icon_state = "centcom_coat" icon = 'icons/obj/clothing/suits/jacket.dmi' diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index fb5bc428a5c8..e145e7f3d793 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -186,7 +186,8 @@ GLOBAL_LIST_INIT(syndicate_space_suits_to_helmets,list( w_class = WEIGHT_CLASS_SMALL icon_state = "syndicate-contract-helm" inhand_icon_state = "contractor_helmet" - visor_dirt = null + visor_dirt = "void_dirt" + has_visor = TRUE /obj/item/clothing/suit/space/syndicate/contract name = "contractor space suit" diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 10e9edfb715f..cfb9c5d8c163 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -286,18 +286,29 @@ var/obj/item/existing_tank = is_external ? external : internal if(tank == existing_tank) return toggle_close_internals(is_external) + // Use breathing tube regardless of mask. if(can_breathe_tube()) return toggle_open_internals(tank, is_external) + // Use mask in absence of tube. - if(isclothing(wear_mask) && ((wear_mask.visor_flags & MASKINTERNALS) || (wear_mask.clothing_flags & MASKINTERNALS))) - // Adjust dishevelled breathing mask back onto face unless it is exempt. - if ((wear_mask.up) && !(wear_mask.clothing_flags & INTERNALS_ADJUST_EXEMPT)) - wear_mask.adjust_visor(src) + if(can_breathe_mask()) return toggle_open_internals(tank, is_external) + // We have a valid mask but it's pulled down + else if(isclothing(wear_mask)) + var/obj/item/clothing/mask = wear_mask + if (mask.up && (mask.visor_flags & MASKINTERNALS) && !(mask.clothing_flags & INTERNALS_ADJUST_EXEMPT) && mask.adjust_visor(src)) + return toggle_open_internals(tank, is_external) + // Use helmet in absence of tube or valid mask. if(can_breathe_helmet()) return toggle_open_internals(tank, is_external) + // We have a valid helmet but its visor is up + else if(isclothing(head)) + var/obj/item/clothing/helmet = head + if (helmet.up && (helmet.visor_flags & HEADINTERNALS) && !(helmet.clothing_flags & INTERNALS_ADJUST_EXEMPT) && helmet.adjust_visor(src)) + return toggle_open_internals(tank, is_external) + // Notify user of missing valid breathing apparatus. if (wear_mask) // Invalid mask diff --git a/icons/mob/clothing/head/spacehelm.dmi b/icons/mob/clothing/head/spacehelm.dmi index b623fa0beeaf8d2b2d1d8d0fa103d352babf429a..54ae72503986fc109bf50f000506886613d26d7e 100644 GIT binary patch literal 16484 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 literal 12655 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 E02LmQ_5c6? diff --git a/icons/obj/clothing/head/spacehelm.dmi b/icons/obj/clothing/head/spacehelm.dmi index 05362ab689f324939fd4921405bfac08ceadf1b2..5bf888d1216d83cd832398962574da3b6ed3a6e0 100644 GIT binary patch literal 6662 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 From 8a342df57548face549296603713fc47263b50fd Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:57:09 +0000 Subject: [PATCH 047/282] Automatic changelog for PR #95687 [ci skip] --- html/changelogs/AutoChangeLog-pr-95687.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95687.yml diff --git a/html/changelogs/AutoChangeLog-pr-95687.yml b/html/changelogs/AutoChangeLog-pr-95687.yml new file mode 100644 index 000000000000..a7ea172ac5fe --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95687.yml @@ -0,0 +1,4 @@ +author: "Melbert" +delete-after: True +changes: + - rscadd: "Some EVA helmets now have retractable visors, which you can pull up or down at will, to reveal your face." \ No newline at end of file From 847b299aa98c7f3c2b5ea7ceed10f7f9f4ed7c33 Mon Sep 17 00:00:00 2001 From: levels0 Date: Wed, 22 Apr 2026 23:58:19 +0300 Subject: [PATCH 048/282] Fix randomized reaction persistence (#95835) ## About The Pull Request The wrong data was passed to the random reaction initialization Fixes #95830 ## Why It's Good For The Game livrah-streamer ## Changelog :cl: fix: metalgen and secret sauce recipes are now loaded properly /:cl: --------- Co-authored-by: l0 <--> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> --- code/_globalvars/lists/reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_globalvars/lists/reagents.dm b/code/_globalvars/lists/reagents.dm index d94c62a7a24e..cbed6116d05a 100644 --- a/code/_globalvars/lists/reagents.dm +++ b/code/_globalvars/lists/reagents.dm @@ -134,7 +134,7 @@ GLOBAL_LIST_INIT(stacked_metabolization_effect, init_chemical_side_effects()) if(ispath(reaction, /datum/chemical_reaction/randomized)) var/target_path = reaction var/index = reactions.Find(reaction) - reaction = new target_path(json) + reaction = new target_path(LAZYACCESS(json, "[target_path]")) //failed to init if(QDELETED(reaction)) From 56445a48ed4ff8f16208c5b6b47ea8ff9109cd29 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:58:40 +0000 Subject: [PATCH 049/282] Automatic changelog for PR #95835 [ci skip] --- html/changelogs/AutoChangeLog-pr-95835.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95835.yml diff --git a/html/changelogs/AutoChangeLog-pr-95835.yml b/html/changelogs/AutoChangeLog-pr-95835.yml new file mode 100644 index 000000000000..0f39a2d26295 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95835.yml @@ -0,0 +1,4 @@ +author: "levels0" +delete-after: True +changes: + - bugfix: "metalgen and secret sauce recipes are now loaded properly" \ No newline at end of file From bb357ce89215d7ddb09214cee4b0d6fe003a5664 Mon Sep 17 00:00:00 2001 From: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com> Date: Wed, 22 Apr 2026 16:58:49 -0400 Subject: [PATCH 050/282] Fix tattoo persistence version (#95839) ## About The Pull Request Hi, strange thing with tattoos. https://github.com/tgstation/tgstation/blob/55366497a3f156f5553a6446edf4c0b0cbba6716/code/controllers/subsystem/persistence/tattoos.dm#L25-L42 The tattoo persistence version seems to be setting based on engravings' persistence version, ``ENGRAVING_PERSISTENCE_VERSION`` Yet, in ``load_prisoner_tattoos()``, the conditional checks the value of TATTOO_PERSISTENCE_VERSION https://github.com/tgstation/tgstation/blob/55366497a3f156f5553a6446edf4c0b0cbba6716/code/controllers/subsystem/persistence/tattoos.dm#L10-L11 This PR just replaces the engraving version being set with the tattoo version being set. ## Why It's Good For The Game This seems rather blatantly incorrect. The TATTOO_PERSISTENCE_VERSION has no setter for its value other than when defined. Realistically? This does nothing. They are both 0 lol. --- code/controllers/subsystem/persistence/tattoos.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/persistence/tattoos.dm b/code/controllers/subsystem/persistence/tattoos.dm index 45dd31c7f5c9..d4b7ded137a2 100644 --- a/code/controllers/subsystem/persistence/tattoos.dm +++ b/code/controllers/subsystem/persistence/tattoos.dm @@ -35,7 +35,7 @@ entries += prison_tattoos_to_save - saved_data["version"] = ENGRAVING_PERSISTENCE_VERSION + saved_data["version"] = TATTOO_PERSISTENCE_VERSION saved_data["entries"] = entries fdel(json_file) From aaa4a9bb7bc7268d54501be12f1d08bf2e245eba Mon Sep 17 00:00:00 2001 From: 1393F <59183821+1393F@users.noreply.github.com> Date: Wed, 22 Apr 2026 16:59:37 -0400 Subject: [PATCH 051/282] Fixes mushroom bowl reagent overlay (#95838) ## About The Pull Request Mushroom bowl no longer turns invisible ## Why It's Good For The Game ## Changelog :cl: fix: The mushroom bowl no longer turns invisible when filled with a reagent. /:cl: --- code/modules/mining/lavaland/ash_flora.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 9616c6149e56..7f8c16d805e9 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -414,12 +414,9 @@ name = "mushroom bowl" desc = "A bowl made out of mushrooms. Not food, though it might have contained some at some point." icon = 'icons/obj/mining_zones/ash_flora.dmi' + base_icon_state = "mushroom_bowl" icon_state = "mushroom_bowl" fill_icon_state = "fullbowl" fill_icon = 'icons/obj/mining_zones/ash_flora.dmi' custom_materials = null -/obj/item/reagent_containers/cup/bowl/mushroom_bowl/update_icon_state() - if(!reagents.total_volume) - icon_state = "mushroom_bowl" - return ..() From 2ee5903c9820c7802147a43be7c08007990ba05a Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:59:57 +0000 Subject: [PATCH 052/282] Automatic changelog for PR #95838 [ci skip] --- html/changelogs/AutoChangeLog-pr-95838.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95838.yml diff --git a/html/changelogs/AutoChangeLog-pr-95838.yml b/html/changelogs/AutoChangeLog-pr-95838.yml new file mode 100644 index 000000000000..de6f67221f8e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95838.yml @@ -0,0 +1,4 @@ +author: "1393F" +delete-after: True +changes: + - bugfix: "The mushroom bowl no longer turns invisible when filled with a reagent." \ No newline at end of file From 5110eef308cba167a4c51402c4b84156122de64c Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:39:26 +0200 Subject: [PATCH 053/282] Express consoles have crab rockets once again... (#95817) ## About The Pull Request Alternative to https://github.com/tgstation/tgstation/pull/95658 that involves fewer lines rather than more. ## Why It's Good For The Game Makes it possible to order crab rockets on the express console without copypasta. I'm not sure if express consoles are supposed to be usable for special/emag orders (there was a check against that in the code for some reason), but because they've had the exact same options of a standard cargo delivery console for such a long time and because I haven't found any explicit reason for that to not be the case (in lieu of that, I found a bit of a reference to homoerotic material in the code comments), I guess it's fine and nothing bad will happen. ## Changelog :cl: fix: Packs exclusive to the express console (crab rockets for example) can now be ordered from express consoles. /:cl: --- code/controllers/subsystem/shuttle.dm | 3 --- code/modules/cargo/expressconsole.dm | 26 -------------------------- code/modules/cargo/orderconsole.dm | 12 ++++++------ 3 files changed, 6 insertions(+), 35 deletions(-) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 415d524b9c5b..0b29ee9f042d 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -187,9 +187,6 @@ SUBSYSTEM_DEF(shuttle) supply_packs[pack.id] = pack - for (var/obj/machinery/computer/cargo/express/console as anything in express_consoles) - console.packin_up(TRUE) - setup_shuttles(stationary_docking_ports) has_purchase_shuttle_access = init_has_purchase_shuttle_access() diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index 16427ae1a1d7..6cd0aed10843 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -14,7 +14,6 @@ interface_type = "CargoExpress" var/message - var/list/meme_pack_data /// The linked supplypod beacon var/obj/item/supplypod_beacon/beacon /// Where we droppin boys @@ -31,16 +30,11 @@ /obj/machinery/computer/cargo/express/Initialize(mapload) . = ..() - packin_up() landingzone = GLOB.areas_by_type[landingzone] if (isnull(landingzone)) WARNING("[src] couldnt find a Quartermaster/Storage (aka cargobay) area on the station, and as such it has set the supplypod landingzone to the area it resides in.") landingzone = get_area(src) -/obj/machinery/computer/cargo/express/on_construction(mob/user) - . = ..() - packin_up() - /obj/machinery/computer/cargo/express/Destroy() if(beacon) beacon.unlink_console() @@ -87,23 +81,8 @@ var/obj/item/circuitboard/computer/cargo/board = circuit board.obj_flags |= EMAGGED board.contraband = TRUE - packin_up() return TRUE -/obj/machinery/computer/cargo/express/proc/packin_up(forced = FALSE) // oh shit, I'm sorry - meme_pack_data = list() // sorry for what? - if(!forced && !SSshuttle.initialized) // our quartermaster taught us not to be ashamed of our supply packs - SSshuttle.express_consoles += src // specially since they're such a good price and all - return // yeah, I see that, your quartermaster gave you good advice - // it gets cheaper when I return it - for(var/pack_id in SSshuttle.supply_packs) // mmhm - var/datum/supply_pack/pack = SSshuttle.supply_packs[pack_id] // sometimes, I return it so much, I rip the manifest - if(!meme_pack_data[pack.group]) // see, my quartermaster taught me a few things too - meme_pack_data[pack.group] = list( // like, how not to rip the manifest - "name" = pack.group, // by using someone else's crate - "packs" = get_packs_data(pack.group, express = TRUE), // will you show me? - ) // i'd be right happy to - /obj/machinery/computer/cargo/express/ui_data(mob/user) var/canBeacon = beacon && (isturf(beacon.loc) || ismob(beacon.loc))//is the beacon in a valid location? var/list/data = list() @@ -120,7 +99,6 @@ data["hasBeacon"] = beacon != null//is there a linked beacon? data["beaconName"] = beacon ? beacon.name : "No Beacon Found" data["printMsg"] = COOLDOWN_FINISHED(src, beacon_print_cooldown) ? "Print Beacon for [BEACON_COST] [MONEY_NAME]" : "Print Beacon for [BEACON_COST] [MONEY_NAME] ([COOLDOWN_TIMELEFT(src, beacon_print_cooldown)])" //buttontext for printing beacons - data["supplies"] = list() message = "Sales are near-instantaneous - please choose carefully." if(SSshuttle.supply_blocked) message = blockade_warning @@ -131,10 +109,6 @@ if(obj_flags & EMAGGED) message = "(&!#@ERROR: R0UTING_#PRO7O&OL MALF(*CT#ON. $UG%ESTE@ ACT#0N: !^/PULS3-%E)ET CIR*)ITB%ARD." data["message"] = message - if(!meme_pack_data) - packin_up() - stack_trace("There was no pack data for [src]") - data["supplies"] = meme_pack_data return data /obj/machinery/computer/cargo/express/get_discount() diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm index c3eec017f795..b39646106710 100644 --- a/code/modules/cargo/orderconsole.dm +++ b/code/modules/cargo/orderconsole.dm @@ -165,9 +165,8 @@ /** * returns a list of supply packs for a certain group * * group - the group of packs to return - * * express - if this is an express console */ -/obj/machinery/computer/cargo/proc/get_packs_data(group, express = FALSE) +/obj/machinery/computer/cargo/proc/get_packs_data(group) var/list/packs = list() for(var/pack_id in SSshuttle.supply_packs) var/datum/supply_pack/pack = SSshuttle.supply_packs[pack_id] @@ -177,16 +176,17 @@ if(pack.order_flags & ORDER_INVISIBLE) continue - // Express console packs check - if(express && (pack.order_flags & (ORDER_EMAG_ONLY | ORDER_SPECIAL))) + if((pack.order_flags & ORDER_EMAG_ONLY) && !(obj_flags & EMAGGED)) continue - - if(!express && (((pack.order_flags & ORDER_EMAG_ONLY) && !(obj_flags & EMAGGED)) || ((pack.order_flags & ORDER_SPECIAL) && !(pack.order_flags & ORDER_SPECIAL_ENABLED)) || (pack.order_flags & ORDER_POD_ONLY))) + if((pack.order_flags & ORDER_SPECIAL) && !(pack.order_flags & ORDER_SPECIAL_ENABLED)) continue if((pack.order_flags & ORDER_CONTRABAND) && !contraband) continue + if(!is_express && (pack.order_flags & ORDER_POD_ONLY)) + continue + var/obj/item/first_item = length(pack.contains) > 0 ? pack.contains[1] : null packs += list(list( "name" = pack.name, From 309d63e669881cc11b9c131a47188f08060acfa4 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 21:39:45 +0000 Subject: [PATCH 054/282] Automatic changelog for PR #95817 [ci skip] --- html/changelogs/AutoChangeLog-pr-95817.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95817.yml diff --git a/html/changelogs/AutoChangeLog-pr-95817.yml b/html/changelogs/AutoChangeLog-pr-95817.yml new file mode 100644 index 000000000000..8fcbf5489047 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95817.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Packs exclusive to the express console (crab rockets for example) can now be ordered from express consoles." \ No newline at end of file From 94d4346e86ec8f8a0702320bac06ef733596e5d3 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 00:00:22 +0000 Subject: [PATCH 055/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95332.yml | 4 --- html/changelogs/AutoChangeLog-pr-95551.yml | 7 ---- html/changelogs/AutoChangeLog-pr-95564.yml | 5 --- html/changelogs/AutoChangeLog-pr-95687.yml | 4 --- html/changelogs/AutoChangeLog-pr-95753.yml | 4 --- html/changelogs/AutoChangeLog-pr-95774.yml | 4 --- html/changelogs/AutoChangeLog-pr-95797.yml | 4 --- html/changelogs/AutoChangeLog-pr-95801.yml | 4 --- html/changelogs/AutoChangeLog-pr-95810.yml | 4 --- html/changelogs/AutoChangeLog-pr-95811.yml | 4 --- html/changelogs/AutoChangeLog-pr-95817.yml | 4 --- html/changelogs/AutoChangeLog-pr-95835.yml | 4 --- html/changelogs/AutoChangeLog-pr-95838.yml | 4 --- html/changelogs/archive/2026-04.yml | 37 ++++++++++++++++++++++ 14 files changed, 37 insertions(+), 56 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95332.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95551.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95564.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95687.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95753.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95774.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95797.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95801.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95810.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95811.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95817.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95835.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95838.yml diff --git a/html/changelogs/AutoChangeLog-pr-95332.yml b/html/changelogs/AutoChangeLog-pr-95332.yml deleted file mode 100644 index 93e8eb801c4e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95332.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Absolucy, LemonInTheDark" -delete-after: True -changes: - - bugfix: "You can no longer see lights through walls when using mesons or when ventcrawling." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95551.yml b/html/changelogs/AutoChangeLog-pr-95551.yml deleted file mode 100644 index 704d20980565..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95551.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - balance: "Codex Cicatrix is now a tier 1 heretic knowledge, and can not be drafted." - - balance: "Warren King's Welcome is now a tier 1 heretic knowledge, but can be drafted." - - balance: "Warren King's Welcome soft reworked. Now needs 10 cable, 1 paper, 1 multitool. Now adds access to all IDs present, including worn IDs. Now adds \"heretic\" access to the ID card. Now changes all nearby airlocks to require \"heretic\" access, and cuts the AI wire." - - balance: "Eldritch ID card starts with \"heretic\" access." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95564.yml b/html/changelogs/AutoChangeLog-pr-95564.yml deleted file mode 100644 index f4b027584b1e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95564.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "ArcaneMusic" -delete-after: True -changes: - - qol: "The GMM Ui can now tell you the minimum and maximum price ranges that a material will sell for." - - qol: "You can now sell materials on the edge of their buying and selling thresholds. (This really only effects iron and glass, practically)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95687.yml b/html/changelogs/AutoChangeLog-pr-95687.yml deleted file mode 100644 index a7ea172ac5fe..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95687.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - rscadd: "Some EVA helmets now have retractable visors, which you can pull up or down at will, to reveal your face." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95753.yml b/html/changelogs/AutoChangeLog-pr-95753.yml deleted file mode 100644 index c9222755013b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95753.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - balance: "The amount of blood loss from an attack to an already bleeding wound has been tweaked. As an example, a 20 force attack used to range 0.1% to 4% blood loss, and now ranges 1% to 3%." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95774.yml b/html/changelogs/AutoChangeLog-pr-95774.yml deleted file mode 100644 index 7253d2ce0dad..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95774.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothymtorres" -delete-after: True -changes: - - map: "Add Shoe Factory to lava/ice ruins." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95797.yml b/html/changelogs/AutoChangeLog-pr-95797.yml deleted file mode 100644 index 0916ffa7f5f6..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95797.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - bugfix: "Plasma works in IEDs again" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95801.yml b/html/changelogs/AutoChangeLog-pr-95801.yml deleted file mode 100644 index 9d540c9afc40..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95801.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Happyowl93" -delete-after: True -changes: - - code_imp: "makeHologram now allows a color override." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95810.yml b/html/changelogs/AutoChangeLog-pr-95810.yml deleted file mode 100644 index c4bdd7e22e13..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95810.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - admin: "Adds toggle for meteor mode in secrets" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95811.yml b/html/changelogs/AutoChangeLog-pr-95811.yml deleted file mode 100644 index 110e8c090dee..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95811.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - admin: "Planemaster Debugger now has a text search input to locate and jump to planes" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95817.yml b/html/changelogs/AutoChangeLog-pr-95817.yml deleted file mode 100644 index 8fcbf5489047..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95817.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Packs exclusive to the express console (crab rockets for example) can now be ordered from express consoles." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95835.yml b/html/changelogs/AutoChangeLog-pr-95835.yml deleted file mode 100644 index 0f39a2d26295..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95835.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "levels0" -delete-after: True -changes: - - bugfix: "metalgen and secret sauce recipes are now loaded properly" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95838.yml b/html/changelogs/AutoChangeLog-pr-95838.yml deleted file mode 100644 index de6f67221f8e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95838.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "1393F" -delete-after: True -changes: - - bugfix: "The mushroom bowl no longer turns invisible when filled with a reagent." \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index e05edcfa47a7..357316381c9a 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -486,3 +486,40 @@ vinylspiders: - bugfix: fixes an issue where raptor chicks and other non-items appearing in item contents would prevent any personal crafting in the vicinity +2026-04-23: + 1393F: + - bugfix: The mushroom bowl no longer turns invisible when filled with a reagent. + Absolucy, LemonInTheDark: + - bugfix: You can no longer see lights through walls when using mesons or when ventcrawling. + ArcaneMusic: + - qol: The GMM Ui can now tell you the minimum and maximum price ranges that a material + will sell for. + - qol: You can now sell materials on the edge of their buying and selling thresholds. + (This really only effects iron and glass, practically) + Ghommie: + - bugfix: Packs exclusive to the express console (crab rockets for example) can + now be ordered from express consoles. + Happyowl93: + - code_imp: makeHologram now allows a color override. + Melbert: + - balance: Codex Cicatrix is now a tier 1 heretic knowledge, and can not be drafted. + - balance: Warren King's Welcome is now a tier 1 heretic knowledge, but can be drafted. + - balance: Warren King's Welcome soft reworked. Now needs 10 cable, 1 paper, 1 multitool. + Now adds access to all IDs present, including worn IDs. Now adds "heretic" access + to the ID card. Now changes all nearby airlocks to require "heretic" access, + and cuts the AI wire. + - balance: Eldritch ID card starts with "heretic" access. + - admin: Adds toggle for meteor mode in secrets + - rscadd: Some EVA helmets now have retractable visors, which you can pull up or + down at will, to reveal your face. + - balance: The amount of blood loss from an attack to an already bleeding wound + has been tweaked. As an example, a 20 force attack used to range 0.1% to 4% + blood loss, and now ranges 1% to 3%. + - bugfix: Plasma works in IEDs again + SmArtKar: + - admin: Planemaster Debugger now has a text search input to locate and jump to + planes + levels0: + - bugfix: metalgen and secret sauce recipes are now loaded properly + timothymtorres: + - map: Add Shoe Factory to lava/ice ruins. From 14e0622f703bdb3def8abee2ce0fcfa256c8c215 Mon Sep 17 00:00:00 2001 From: ElGitificador <168473461+ElGitificador@users.noreply.github.com> Date: Thu, 23 Apr 2026 16:06:19 +0200 Subject: [PATCH 056/282] Makes easy_random_mutate mutated genes researchable (#95717) ## About The Pull Request sets the scrambled flag of easy_random_mutate to FALSE ## Why It's Good For The Game Within my extensive geneticist playtime I have many times rushed the avalible genome in a round by myself, having a somewhat fast time of about 30 min, almost not exiting my lab in a non-stop A-T C-G frenzy. A kind of painful process for a human hand because of the amounts of clicking involved and our increasing number of avalible mutations, so i came up with what i hope is an adequate solution. In the practice what this pr does is allow for the random mutations caused by easy_random_mutate, which if im not mistaken are: toxin_reagents.dm | Unstable Mutagen body.dm | Unstable DNA mutation radiation_storm.dm | Radiation storm weather effects floral.dm | Plant-mutating radiation projectiles experimental_cloner_fuckup.dm | Cloner malfunctions eldritch_painting.dm | Heretic eldritch painting examines _species.dm | Species radiation damage handling to be saved to the dna consoles. under normal circumstances it means that unstable mutagen (and i guess cloner malf mutations) can be saved to dna consoles. IF im not mistaken and didnt miss anything, it essentially means that geneticists can now cooperate with chemistry in order to achieve a somewhat less click intensive, not necessarily much faster decoding process of the genome, at the cost of cooperating with your local chemist, and shorter lived test subjects (since it deals tox damage while metabolizing). because of how unstable mutagen works, this mostly means only unlocking negative mutations, since positives have a 2% of being unlocked and noted be mutagen only works first entering the mob, not while metabolizing. ## Changelog :cl: balance: mutations coming from most random mutation sources can now be saved in dna consoles /:cl: --- code/datums/dna/dna.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/dna/dna.dm b/code/datums/dna/dna.dm index b0cd64e4bef8..989882b4f459 100644 --- a/code/datums/dna/dna.dm +++ b/code/datums/dna/dna.dm @@ -619,7 +619,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) return var/datum/mutation/mutation = dna.get_mutation(mutation_path) if(mutation) - mutation.scrambled = TRUE + mutation.scrambled = FALSE //set to FALSE to allow easy_random_mutate obtained genes to be saved in DNA consoles /mob/living/carbon/proc/random_mutate_unique_identity() if(!has_dna()) From 9e91f22db7d5758427d4f9ea3e188cda4b2ae1bb Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:06:42 +0000 Subject: [PATCH 057/282] Automatic changelog for PR #95717 [ci skip] --- html/changelogs/AutoChangeLog-pr-95717.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95717.yml diff --git a/html/changelogs/AutoChangeLog-pr-95717.yml b/html/changelogs/AutoChangeLog-pr-95717.yml new file mode 100644 index 000000000000..db5b2ad278fa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95717.yml @@ -0,0 +1,4 @@ +author: "ElGitificador" +delete-after: True +changes: + - balance: "mutations coming from most random mutation sources can now be saved in dna consoles" \ No newline at end of file From 0c9153512035fa1dcc388750afa5211d4e6b0d3d Mon Sep 17 00:00:00 2001 From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:46:06 -0400 Subject: [PATCH 058/282] Arcmining: Chemical Boosting (#95530) --- .../CatwalkStation/CatwalkStation_2023.dmm | 139 +- .../map_files/Deltastation/DeltaStation2.dmm | 91 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 222 +- _maps/map_files/MetaStation/MetaStation.dmm | 176 +- .../map_files/NebulaStation/NebulaStation.dmm | 314 +- _maps/map_files/debug/runtimestation.dmm | 3 +- _maps/map_files/tramstation/tramstation.dmm | 133 +- _maps/map_files/wawastation/wawastation.dmm | 7702 +++++++++-------- code/__DEFINES/mining.dm | 2 - code/__DEFINES/reagents.dm | 2 + code/datums/components/plumbing/_plumbing.dm | 32 +- .../components/plumbing/boulder_reactions.dm | 30 + .../datums/looping_sounds/machinery_sounds.dm | 3 + code/datums/materials/_material.dm | 4 +- code/datums/materials/basemats.dm | 14 + .../objects/effects/decals/cleanable/toxic.dm | 61 + code/game/objects/effects/particles/acid.dm | 13 + .../machines/machine_circuitboards.dm | 2 + .../items/storage/boxes/cargo_boxes.dm | 16 + .../objects/structures/lavaland/ore_vent.dm | 36 +- .../boulder_processing/_boulder_processing.dm | 36 +- .../mining/boulder_processing/refinery.dm | 69 +- code/modules/plumbing/plumbers/synthesizer.dm | 21 + .../chemistry/reagents/toxin_reagents.dm | 102 + tgstation.dme | 2 + 25 files changed, 5015 insertions(+), 4210 deletions(-) create mode 100644 code/datums/components/plumbing/boulder_reactions.dm create mode 100644 code/game/objects/effects/decals/cleanable/toxic.dm diff --git a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm index f04f564a3d66..324e3f007357 100644 --- a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm +++ b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm @@ -4231,12 +4231,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/catwalk_floor/iron, /area/station/hallway/primary/central) -"bex" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) "beA" = ( /obj/effect/turf_decal/stripes{ dir = 1 @@ -6931,6 +6925,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"bOF" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) "bOI" = ( /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, @@ -10013,11 +10017,13 @@ /turf/open/openspace, /area/station/engineering/lobby) "cCN" = ( -/obj/machinery/newscaster/directional/south, /obj/machinery/conveyor{ dir = 8; id = "mining" }, +/obj/machinery/bouldertech/refinery{ + dir = 4 + }, /turf/open/floor/iron/textured, /area/station/cargo/storage) "cCX" = ( @@ -14154,6 +14160,9 @@ /obj/structure/railing{ dir = 8 }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, /turf/open/floor/iron/textured, /area/station/cargo/storage) "dKX" = ( @@ -19463,6 +19472,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_large, /area/station/science/xenobiology) +"fiR" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) "fiZ" = ( /obj/structure/showcase/machinery/oldpod{ desc = "An old NT branded sleeper, decommissioned after the lead acetate incident. None of the functional machinery remains inside."; @@ -30016,11 +30033,13 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/starboard/fore) "hXr" = ( -/obj/machinery/firealarm/directional/south, /obj/machinery/conveyor{ dir = 8; id = "mining" }, +/obj/machinery/bouldertech/refinery/smelter{ + dir = 4 + }, /turf/open/floor/iron/textured, /area/station/cargo/storage) "hXT" = ( @@ -32667,7 +32686,7 @@ /area/station/commons/dorms) "iGo" = ( /obj/structure/disposalpipe/trunk/multiz/down{ - dir = 1 + dir = 8 }, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) @@ -45384,6 +45403,12 @@ }, /turf/open/floor/iron/textured, /area/station/command/eva) +"mbh" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) "mbj" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -50553,6 +50578,9 @@ dir = 6; id = "mining" }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, /turf/open/floor/iron/textured, /area/station/cargo/storage) "nwT" = ( @@ -56153,6 +56181,12 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/tcommsat/server) +"oTH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) "oTK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/button/door/directional/east{ @@ -59624,13 +59658,13 @@ /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) "pQI" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 10 - }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, /turf/open/floor/iron/textured, /area/station/cargo/storage) "pQK" = ( @@ -66021,12 +66055,10 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "rCF" = ( -/obj/machinery/camera/autoname/directional/south, /obj/machinery/conveyor{ dir = 8; id = "mining" }, -/obj/machinery/bouldertech/refinery/smelter, /turf/open/floor/iron/textured, /area/station/cargo/storage) "rCP" = ( @@ -67416,6 +67448,11 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, /area/station/security/interrogation) +"rXI" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) "rXL" = ( /turf/open/openspace, /area/station/science/robotics/lab) @@ -70223,7 +70260,6 @@ /turf/open/openspace, /area/station/hallway/primary/central) "sLK" = ( -/obj/structure/extinguisher_cabinet/directional/south, /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/rubble, /turf/open/floor/iron/dark/smooth_large, @@ -75354,14 +75390,6 @@ /obj/structure/railing, /turf/open/floor/engine/hull/air, /area/station/maintenance/port) -"ucf" = ( -/obj/machinery/light/directional/south, -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, -/turf/open/floor/iron/textured, -/area/station/cargo/storage) "ucp" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -75420,12 +75448,13 @@ /turf/open/openspace, /area/station/maintenance/starboard/aft/upper) "ucX" = ( -/obj/item/radio/intercom/directional/south, /obj/machinery/conveyor{ dir = 10; id = "mining" }, -/obj/machinery/bouldertech/refinery, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, /turf/open/floor/iron/textured, /area/station/cargo/storage) "ucZ" = ( @@ -76832,6 +76861,15 @@ /obj/machinery/duct, /turf/open/floor/wood/large, /area/station/commons/dorms) +"uvA" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) "uvF" = ( /obj/structure/railing/corner{ dir = 4 @@ -80107,6 +80145,18 @@ /obj/structure/cable, /turf/open/openspace, /area/station/maintenance/starboard/upper) +"vmm" = ( +/obj/item/stack/ducts, +/obj/item/stack/ducts{ + pixel_y = -8; + pixel_x = -3 + }, +/obj/item/stack/ducts{ + pixel_y = 4; + pixel_x = 2 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "vmu" = ( /obj/machinery/door/airlock/grunge, /obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, @@ -88976,6 +89026,12 @@ /obj/effect/turf_decal/trimline/brown/arrow_ccw, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"xCP" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) "xCS" = ( /obj/item/clothing/suit/jacket/straight_jacket, /obj/structure/closet, @@ -89347,6 +89403,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"xHg" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) "xHi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, @@ -199829,9 +199890,9 @@ pSB lGA xSg pQI +xCP blo ayK -lwA vmk lwA lwA @@ -200086,10 +200147,10 @@ avc mIp iwQ sLK +rXI wrT toR wUi -wUi sfc avI sfc @@ -200341,11 +200402,11 @@ pSB avc pSB lnH -peQ +oTH hXr +mbh wrT rWg -lwA oPr lwA lwA @@ -200600,9 +200661,9 @@ pSB gLT peQ rCF +fiR wrT rWg -lwA oPr lwA lwA @@ -200855,10 +200916,10 @@ gkh oaF dKL lhy -peQ +oTH cCN +xHg wrT -bex iGo oPr lwA @@ -201113,10 +201174,10 @@ geK aPg jAO bEr -ucf -wrT -wrT +rCF +uvA wrT +rYh fQz kIE kIE @@ -201371,9 +201432,9 @@ cgX nwQ dKT ucX +bOF wrT -rYh -wrT +vmm mYL wrT wrT @@ -201629,7 +201690,7 @@ uKP uKP uKP wrT -rYh +wrT wrT cYX lVF @@ -201885,7 +201946,7 @@ hRj hRj hRj hRj -wrT +hRj wrT wrT jzI diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index e183b08b3322..f5e1ddc094fe 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -3743,7 +3743,6 @@ /area/space/nearstation) "aUS" = ( /obj/effect/turf_decal/bot, -/obj/structure/closet/crate/secure/loot, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/warehouse) @@ -8209,10 +8208,11 @@ /area/station/service/library) "bXF" = ( /obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/machinery/brm, /obj/machinery/conveyor{ + dir = 8; id = "mining" }, -/obj/machinery/brm, /turf/open/floor/iron, /area/station/cargo/warehouse) "bXG" = ( @@ -17211,9 +17211,7 @@ }, /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, /obj/effect/landmark/start/hangover, -/obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/cargo/warehouse) "ekZ" = ( @@ -18046,14 +18044,11 @@ /turf/open/floor/iron/white, /area/station/science/lobby) "ewa" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted, /obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor_switch/oneway{ - id = "mining"; - dir = 1 - }, -/obj/structure/railing{ - dir = 6 +/obj/machinery/bouldertech/refinery, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" }, /turf/open/floor/iron, /area/station/cargo/warehouse) @@ -20598,12 +20593,14 @@ /turf/open/floor/iron, /area/station/engineering/atmos/project) "fdn" = ( -/obj/effect/landmark/start/hangover, /obj/structure/closet/crate, /obj/effect/turf_decal/bot, /obj/item/airlock_painter/decal, /obj/effect/decal/cleanable/dirt, /obj/structure/railing/corner/end/flip, +/obj/item/stack/ducts, +/obj/item/stack/ducts, +/obj/item/stack/ducts, /turf/open/floor/iron, /area/station/cargo/warehouse) "fdG" = ( @@ -22676,13 +22673,13 @@ /turf/open/floor/iron/grimy, /area/station/service/library/abandoned) "fCA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, /turf/open/floor/iron, /area/station/cargo/warehouse) "fCD" = ( @@ -27814,6 +27811,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/oil, +/obj/structure/railing, +/obj/machinery/conveyor_switch/oneway{ + id = "mining"; + dir = 1 + }, /turf/open/floor/iron, /area/station/cargo/warehouse) "gKI" = ( @@ -31249,11 +31251,9 @@ /turf/open/floor/iron/white, /area/station/medical/virology) "hGP" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, -/obj/machinery/bouldertech/refinery, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/closet/crate/secure/loot, +/obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/cargo/warehouse) "hGW" = ( @@ -48781,9 +48781,12 @@ /turf/open/floor/iron, /area/station/security/checkpoint/escape) "lWX" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted, /obj/effect/decal/cleanable/dirt, -/obj/structure/railing, +/obj/machinery/bouldertech/refinery/smelter, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, /turf/open/floor/iron, /area/station/cargo/warehouse) "lXm" = ( @@ -64795,10 +64798,8 @@ /area/station/maintenance/port) "pVR" = ( /obj/structure/sign/poster/contraband/random/directional/south, -/obj/machinery/conveyor{ - dir = 10; - id = "mining" - }, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/warehouse) "pWb" = ( @@ -75244,10 +75245,10 @@ /turf/closed/wall, /area/station/service/bar/backroom) "szC" = ( -/obj/machinery/conveyor{ - dir = 9; - id = "mining" +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 }, +/obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/cargo/warehouse) "szG" = ( @@ -82886,10 +82887,13 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "utQ" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mining" +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 }, +/obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, /area/station/cargo/warehouse) "utS" = ( @@ -83760,7 +83764,13 @@ }, /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/delivery, -/obj/effect/landmark/start/hangover, +/obj/machinery/conveyor{ + dir = 9; + id = "mining" + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/cargo/warehouse) "uDQ" = ( @@ -86418,11 +86428,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "vnI" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, -/obj/machinery/bouldertech/refinery/smelter, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/warehouse) "vnP" = ( @@ -90268,6 +90275,8 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/cargo/warehouse) "wlW" = ( @@ -93139,7 +93148,6 @@ /area/station/commons/vacant_room/office) "wZD" = ( /obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/hangover, /obj/structure/cable, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -97164,6 +97172,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/cargo/warehouse) "xXw" = ( diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 906ce11eee73..e6dababd09a4 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -3642,9 +3642,9 @@ /area/station/science/research) "aYM" = ( /obj/effect/turf_decal/bot, -/obj/structure/closet/crate, -/obj/item/coin/gold, /obj/item/radio/intercom/directional/north, +/obj/item/coin/gold, +/obj/structure/closet/crate, /turf/open/floor/iron, /area/mine/production) "aYQ" = ( @@ -5057,16 +5057,15 @@ /turf/open/floor/iron/dark, /area/station/engineering/lobby) "brX" = ( -/obj/structure/plasticflaps, /obj/machinery/conveyor{ - dir = 8; id = "mining_internal" }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/bouldertech/refinery/smelter{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/mine/production) "brY" = ( @@ -7423,6 +7422,14 @@ "bXy" = ( /turf/open/openspace, /area/station/security/armory/upper) +"bXC" = ( +/obj/effect/decal/cleanable/rubble, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/mine/production) "bXD" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -7980,14 +7987,14 @@ dir = 4 }, /obj/machinery/light/small/directional/east, -/obj/machinery/conveyor{ - id = "mining_internal" - }, -/obj/machinery/bouldertech/refinery, /obj/machinery/camera/directional/east{ c_tag = "Mining Ore Smeltery"; network = list("ss13", "mine") }, +/obj/machinery/conveyor{ + dir = 10; + id = "mining_internal" + }, /turf/open/floor/iron, /area/mine/production) "ceO" = ( @@ -8628,9 +8635,12 @@ /turf/open/floor/plastic, /area/station/commons/dorms/laundry) "coY" = ( -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/delivery, -/obj/effect/decal/cleanable/rubble, +/obj/structure/railing/corner/end{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/iron, /area/mine/production) "coZ" = ( @@ -14318,16 +14328,14 @@ /turf/open/floor/iron, /area/station/commons/storage/primary) "dTF" = ( -/obj/machinery/conveyor{ - dir = 10; - id = "mining_internal" - }, -/obj/effect/turf_decal/stripes/corner{ +/obj/structure/railing{ dir = 1 }, /obj/effect/turf_decal/stripes/line{ - dir = 6 + dir = 1 }, +/obj/effect/decal/cleanable/greenglow/waste, +/obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, /area/mine/production) "dTI" = ( @@ -14831,6 +14839,15 @@ /obj/structure/flora/rock/pile/icy/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"ebn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/mine/production) "ebr" = ( /turf/open/openspace, /area/station/engineering/atmos/storage) @@ -22300,15 +22317,13 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "gko" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mining_internal" - }, /obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/railing{ dir = 1 }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/bouldertech/refinery/smelter, +/obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, /area/mine/production) "gks" = ( @@ -23748,6 +23763,15 @@ dir = 4 }, /area/station/command/heads_quarters/rd) +"gEA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/mine/production) "gEE" = ( /turf/open/openspace, /area/station/service/chapel) @@ -24224,6 +24248,10 @@ /obj/item/reagent_containers/dropper, /turf/open/floor/iron/cafeteria, /area/station/science/lab) +"gNm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/mine/production) "gNC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/sign/warning/secure_area/directional/north, @@ -27508,6 +27536,15 @@ /obj/structure/closet/secure_closet/medical2, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"hKw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/mine/production) "hKI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30314,6 +30351,13 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"izv" = ( +/obj/structure/rack, +/obj/item/stack/ducts{ + amount = 5 + }, +/turf/open/floor/iron, +/area/mine/production) "izw" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -33089,6 +33133,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"jpW" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/mine/production) "jqc" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -34198,6 +34247,10 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) +"jHr" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/mine/production) "jHF" = ( /obj/item/trash/boritos/red, /obj/structure/cable, @@ -35421,14 +35474,17 @@ /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "jXH" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mining_internal" - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small/directional/south, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/production) "jXL" = ( @@ -43343,6 +43399,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"mgE" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/mine/production) "mgS" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -45044,9 +45104,6 @@ dir = 6; id = "mining_internal" }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /obj/machinery/brm, @@ -46685,6 +46742,8 @@ /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/mine/production) "ngn" = ( @@ -54952,6 +55011,8 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/decal/cleanable/dirt, +/obj/structure/railing/corner, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron, /area/mine/production) "pqo" = ( @@ -58220,7 +58281,13 @@ /area/station/medical/virology) "qkI" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/railing/corner/end{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/open/floor/iron, @@ -58840,6 +58907,10 @@ /obj/structure/railing{ dir = 4 }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/mine/production) "que" = ( @@ -61993,7 +62064,10 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "rnl" = ( -/obj/structure/railing, +/obj/machinery/conveyor{ + dir = 8; + id = "mining_internal" + }, /turf/open/floor/iron, /area/mine/production) "rnp" = ( @@ -67486,12 +67560,6 @@ /obj/machinery/conveyor{ id = "mining_internal" }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /turf/open/floor/iron, /area/mine/production) "sPG" = ( @@ -72360,6 +72428,12 @@ }, /turf/open/floor/iron/dark, /area/station/medical/virology) +"ula" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/mine/production) "ulj" = ( /obj/structure/flora/tree/pine/style_random, /obj/structure/flora/grass/green/style_random, @@ -74865,8 +74939,10 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "uYF" = ( -/obj/structure/railing{ - dir = 6 +/obj/machinery/bouldertech/refinery, +/obj/machinery/conveyor{ + dir = 8; + id = "mining_internal" }, /turf/open/floor/iron, /area/mine/production) @@ -79736,6 +79812,9 @@ "wxN" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/fore) +"wxP" = ( +/turf/open/floor/iron, +/area/mine/production) "wxT" = ( /obj/structure/railing{ dir = 1 @@ -84745,10 +84824,10 @@ }, /area/station/security/processing) "xQK" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +/obj/machinery/conveyor/inverted{ + dir = 5; + id = "mining_internal" }, -/obj/structure/railing, /turf/open/floor/iron, /area/mine/production) "xQO" = ( @@ -84894,6 +84973,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) +"xTE" = ( +/obj/machinery/conveyor{ + dir = 10; + id = "mining_internal" + }, +/turf/open/floor/iron, +/area/mine/production) "xTL" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -169808,9 +169894,9 @@ sht gOU gjq eJf -gjq -gjq -gjq +eJf +eJf +eJf gjq gjq gjq @@ -170064,9 +170150,9 @@ cMk wmR cMk cMk -eJf -eJf -eJf +uvM +cMk +cMk faL eJf eJf @@ -170318,12 +170404,12 @@ bKE vpc kZu aYM -tDa +ebn sWU +jpW +wxP +izv cMk -cMk -gjq -gjq eJf gjq gjq @@ -170578,9 +170664,9 @@ fxY pql qkI coY +bXC +mgE cMk -gjq -gjq eJf gjq gjq @@ -170835,9 +170921,9 @@ vQy ngl xQK brX -cMk -gjq -gjq +xTE +gNm +uvM eJf gjq iDt @@ -171088,13 +171174,13 @@ tDa tDa tDa sWB -tDa -pql +gEA +hKw rnl gko -uvM -gjq -gjq +ula +jHr +cMk gnh iDt iDt diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 4bbff70a9e90..5279a4b7391b 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1976,6 +1976,15 @@ }, /turf/open/floor/wood, /area/station/commons/lounge) +"aKs" = ( +/obj/machinery/bouldertech/refinery{ + dir = 4 + }, +/obj/machinery/conveyor{ + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "aKz" = ( /obj/structure/chair{ dir = 4 @@ -7389,7 +7398,12 @@ /turf/open/floor/plating, /area/station/science/robotics/mechbay) "cBZ" = ( -/obj/structure/railing, +/obj/machinery/bouldertech/refinery/smelter{ + dir = 4 + }, +/obj/machinery/conveyor{ + id = "mining" + }, /turf/open/floor/iron, /area/station/cargo/miningoffice) "cCM" = ( @@ -7891,6 +7905,8 @@ /area/station/commons/fitness) "cLj" = ( /obj/structure/cable, +/obj/structure/railing/corner, +/obj/effect/turf_decal/siding/white/corner, /turf/open/floor/iron, /area/station/cargo/miningoffice) "cLk" = ( @@ -8290,8 +8306,11 @@ /turf/open/floor/iron, /area/station/commons/dorms) "cUt" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/obj/machinery/brm, /turf/open/floor/iron, /area/station/cargo/miningoffice) "cUw" = ( @@ -10008,14 +10027,13 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/greater) "dxo" = ( -/obj/structure/railing{ - dir = 6 +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/floor/iron, +/turf/open/floor/iron/textured, /area/station/cargo/miningoffice) "dxq" = ( /obj/structure/chair{ @@ -17795,6 +17813,11 @@ /obj/machinery/vending/wardrobe/jani_wardrobe, /turf/open/floor/iron, /area/station/service/janitor) +"gjS" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "gjZ" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -20983,15 +21006,14 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) "hlE" = ( +/obj/machinery/light/small/directional/south, /obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 + dir = 8 }, -/obj/machinery/conveyor{ - dir = 8; - id = "mining" +/obj/effect/turf_decal/stripes/corner{ + dir = 1 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, +/turf/open/floor/iron/textured, /area/station/cargo/miningoffice) "hlN" = ( /obj/structure/frame/machine{ @@ -25162,11 +25184,13 @@ /turf/open/floor/engine, /area/station/science/xenobiology) "iId" = ( -/obj/machinery/conveyor{ - id = "mining" +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 }, -/obj/machinery/brm, -/turf/open/floor/iron, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/textured, /area/station/cargo/miningoffice) "iIf" = ( /obj/machinery/camera/directional/north{ @@ -31899,6 +31923,16 @@ /turf/open/floor/iron, /area/station/commons/locker) "kRe" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "mining"; + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, /turf/open/floor/iron, /area/station/cargo/miningoffice) "kRf" = ( @@ -33122,6 +33156,14 @@ }, /turf/open/floor/iron, /area/station/science/lab) +"lnv" = ( +/obj/structure/cable, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "lnH" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -37658,6 +37700,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"mRP" = ( +/obj/machinery/conveyor/inverted{ + dir = 5; + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "mRY" = ( /obj/machinery/door/window/left/directional/north{ name = "Mass Driver"; @@ -44697,6 +44746,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/shaft_miner, +/obj/structure/railing/corner/end{ + dir = 4 + }, /turf/open/floor/iron, /area/station/cargo/miningoffice) "pom" = ( @@ -48647,17 +48699,14 @@ /turf/closed/wall, /area/station/hallway/secondary/entry) "qHt" = ( -/obj/structure/railing{ - dir = 4 +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 }, /obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/conveyor_switch/oneway{ - id = "mining"; - dir = 1 + dir = 9 }, -/turf/open/floor/iron, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, /area/station/cargo/miningoffice) "qHK" = ( /obj/effect/spawner/random/structure/grille, @@ -49430,14 +49479,12 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 }, -/obj/machinery/conveyor{ - dir = 9; - id = "mining" - }, -/obj/structure/railing{ - dir = 8 - }, /obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/rubble, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, /turf/open/floor/iron, /area/station/cargo/miningoffice) "qTz" = ( @@ -53721,6 +53768,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"sqP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "sqT" = ( /obj/machinery/atmospherics/components/tank/air/layer4, /turf/open/floor/plating, @@ -56156,10 +56213,10 @@ /turf/open/floor/plating, /area/station/maintenance/port) "tid" = ( -/obj/structure/railing/corner/end, -/obj/effect/turf_decal/delivery, -/obj/effect/decal/cleanable/rubble, -/obj/structure/railing/corner/end{ +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/siding/white{ dir = 4 }, /turf/open/floor/iron, @@ -56281,9 +56338,11 @@ /area/station/maintenance/starboard/fore) "tkf" = ( /obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/conveyor{ - id = "mining" +/obj/effect/decal/cleanable/greenglow/waste{ + opacity = 1; + alpha = 50 }, +/obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, /area/station/cargo/miningoffice) "tkg" = ( @@ -66279,10 +66338,9 @@ dir = 1 }, /obj/machinery/conveyor{ - dir = 8; + dir = 10; id = "mining" }, -/obj/machinery/bouldertech/refinery/smelter, /turf/open/floor/iron, /area/station/cargo/miningoffice) "wyV" = ( @@ -67655,14 +67713,8 @@ /area/station/tcommsat/computer) "wZo" = ( /obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/machinery/conveyor{ - dir = 10; - id = "mining" - }, -/obj/machinery/bouldertech/refinery, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, /area/station/cargo/miningoffice) "wZw" = ( @@ -69162,6 +69214,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"xzf" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "xzj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70851,8 +70909,10 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos) "ydi" = ( -/obj/structure/railing/corner/end/flip, -/obj/effect/turf_decal/stripes/corner, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, /turf/open/floor/iron, /area/station/cargo/miningoffice) "ydj" = ( @@ -89388,7 +89448,7 @@ sLU aZj cSP cLj -kRe +sqP kRe tid qTf @@ -89644,9 +89704,9 @@ jXu jXu jXu hzb -cLj -kRe -kRe +xzf +mRP +aKs cBZ wyP hKg @@ -89901,7 +89961,7 @@ omV kts cuh jBp -cLj +lnv ydi qHt dxo @@ -90158,7 +90218,7 @@ cAf dve jXu pVV -cLj +gjS cUt iId tkf diff --git a/_maps/map_files/NebulaStation/NebulaStation.dmm b/_maps/map_files/NebulaStation/NebulaStation.dmm index f1cc6623b14f..07914fb32cca 100644 --- a/_maps/map_files/NebulaStation/NebulaStation.dmm +++ b/_maps/map_files/NebulaStation/NebulaStation.dmm @@ -21177,6 +21177,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/commons/fitness) +"dgS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "dgZ" = ( /obj/effect/turf_decal/siding/dark/corner{ dir = 4 @@ -30596,9 +30603,6 @@ }, /area/station/security/mechbay) "eAs" = ( -/obj/structure/railing/corner/end{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/brown{ dir = 10 @@ -30609,6 +30613,7 @@ /obj/effect/turf_decal/trimline/brown/corner{ dir = 4 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningoffice) "eAw" = ( @@ -38567,6 +38572,15 @@ /obj/structure/cable, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"fIR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/brown{ + dir = 6 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "fIU" = ( /obj/structure/table/wood/fancy/green, /obj/machinery/light/directional/east, @@ -42767,9 +42781,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/delivery, -/obj/effect/decal/cleanable/plasma, -/obj/effect/decal/cleanable/rubble, +/obj/machinery/computer/order_console/mining, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/miningoffice) "gnM" = ( @@ -45427,6 +45439,14 @@ dir = 8 }, /area/station/hallway/primary/fore) +"gIP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "gIQ" = ( /turf/closed/wall/r_wall, /area/station/science/explab) @@ -49658,6 +49678,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/lower) +"hoC" = ( +/obj/effect/decal/cleanable/plasma, +/obj/effect/decal/cleanable/rubble, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/arrow_cw, +/obj/effect/turf_decal/trimline/brown/filled/arrow_ccw{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "hoE" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt/dust, @@ -57461,6 +57491,9 @@ dir = 9 }, /obj/effect/turf_decal/trimline/brown/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/miningoffice) "iwP" = ( @@ -63701,10 +63734,6 @@ /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/floor/grass, /area/station/ai/satellite/exterior) -"juB" = ( -/obj/machinery/computer/order_console/mining, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/miningoffice) "juD" = ( /obj/structure/railing{ dir = 1 @@ -64466,17 +64495,10 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/bridge) "jzQ" = ( -/obj/effect/turf_decal/siding/brown, -/obj/effect/turf_decal/trimline/brown/filled/line, /obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/stripes/line{ +/obj/structure/chair/sofa/bench/solo{ dir = 1 }, -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, -/obj/machinery/bouldertech/refinery/smelter, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/miningoffice) "jzZ" = ( @@ -75875,6 +75897,9 @@ dir = 1 }, /obj/effect/turf_decal/trimline/brown/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/miningoffice) "lhK" = ( @@ -78651,6 +78676,7 @@ "lCa" = ( /obj/machinery/holopad, /obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/glass/reinforced, /area/station/cargo/miningoffice) "lCd" = ( @@ -78692,14 +78718,6 @@ /turf/open/floor/iron/dark/small, /area/station/engineering/atmos/project) "lCS" = ( -/obj/structure/railing{ - dir = 6 - }, -/obj/machinery/conveyor_switch/oneway{ - id = "mining"; - name = "mining conveyor"; - pixel_y = 12 - }, /obj/effect/turf_decal/siding/brown{ dir = 6 }, @@ -83015,6 +83033,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"mmF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/siding/brown{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "mmG" = ( /obj/machinery/camera/directional/north{ c_tag = "Xenobiology Lab - Pen #4"; @@ -85294,16 +85321,16 @@ /turf/open/floor/iron/white, /area/station/science/lab) "mFl" = ( -/obj/machinery/mining_weather_monitor/directional/east, -/obj/machinery/conveyor{ - id = "mining" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/mining_weather_monitor/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/window/right/directional/east{ + req_access = list("mining"); + name = "Foundry Gate" }, -/obj/machinery/brm, /turf/open/floor/iron/dark/textured_large, -/area/station/cargo/miningoffice) +/area/station/cargo/miningfoundry) "mFr" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 10 @@ -86486,14 +86513,6 @@ /area/space/nearstation) "mOI" = ( /obj/structure/sign/poster/random/directional/east, -/obj/machinery/conveyor{ - dir = 10; - id = "mining" - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/bouldertech/refinery, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/miningoffice) "mOJ" = ( @@ -88140,6 +88159,9 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"nbS" = ( +/turf/closed/wall, +/area/station/cargo/miningfoundry) "nbU" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 @@ -90036,6 +90058,20 @@ dir = 1 }, /area/station/security/brig) +"nrD" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "mining"; + name = "mining conveyor"; + pixel_y = 12 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/brown{ + dir = 9 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "nrG" = ( /obj/machinery/holopad, /obj/effect/turf_decal/trimline/purple/corner{ @@ -92176,6 +92212,14 @@ /obj/item/clothing/glasses/welding, /turf/open/floor/plating, /area/station/maintenance/port/central) +"nIe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "nIf" = ( /obj/effect/turf_decal/box/white, /turf/open/floor/engine, @@ -92702,6 +92746,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/red, /area/station/service/library) +"nMH" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "nMJ" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /obj/effect/turf_decal/trimline/dark/corner, @@ -96954,6 +97006,14 @@ dir = 4 }, /area/station/service/chapel/funeral) +"oqz" = ( +/obj/machinery/conveyor{ + id = "mining"; + dir = 4 + }, +/obj/machinery/brm, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "oqE" = ( /obj/structure/chair/stool/directional/west, /turf/open/floor/plating, @@ -96968,6 +97028,10 @@ color = "#3d3e42" }, /area/station/engineering/engine_smes) +"oqM" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/miningfoundry) "oqS" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -105822,6 +105886,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_edge{ dir = 8 }, @@ -107299,11 +107364,8 @@ "pOD" = ( /obj/machinery/status_display/ai/directional/east, /obj/machinery/light/directional/east, -/obj/machinery/conveyor{ - id = "mining" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/effect/turf_decal/stripes/corner{ + dir = 4 }, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/miningoffice) @@ -108268,6 +108330,14 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/large, /area/station/service/library/upper) +"pVC" = ( +/obj/machinery/conveyor{ + id = "mining"; + dir = 6 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "pVH" = ( /obj/effect/turf_decal/trimline/red/line, /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -125854,6 +125924,15 @@ dir = 8 }, /area/station/security/prison) +"sDq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "sDr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -127914,6 +127993,13 @@ /obj/structure/bookcase/random/reference, /turf/open/floor/iron/dark, /area/station/security/breakroom) +"sTD" = ( +/obj/machinery/conveyor{ + id = "mining"; + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "sTG" = ( /obj/item/banner/command/mundane, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -133443,6 +133529,19 @@ dir = 6 }, /area/station/maintenance/disposal) +"tHC" = ( +/obj/structure/rack, +/obj/item/stack/ducts{ + pixel_y = -1 + }, +/obj/item/stack/ducts{ + pixel_y = 3 + }, +/obj/item/stack/ducts{ + pixel_y = 7 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningoffice) "tHJ" = ( /obj/machinery/light/floor, /obj/effect/landmark/event_spawn, @@ -140684,6 +140783,14 @@ /obj/structure/cable, /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) +"uOS" = ( +/obj/machinery/conveyor{ + dir = 10; + id = "mining" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "uOX" = ( /obj/structure/railing{ dir = 4 @@ -141756,6 +141863,10 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos/storage) +"uWr" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/lower) "uWt" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 4 @@ -142095,6 +142206,15 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"uYW" = ( +/obj/machinery/conveyor{ + id = "mining" + }, +/obj/machinery/bouldertech/refinery/smelter{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "uYZ" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner, /obj/effect/turf_decal/siding/thinplating_new/dark/corner{ @@ -151845,6 +151965,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured_large, /area/station/ai/satellite/service) +"wvQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/brown{ + dir = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "wvS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -153830,6 +153958,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"wLi" = ( +/obj/machinery/bouldertech/refinery{ + dir = 4 + }, +/obj/machinery/conveyor{ + id = "mining" + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/miningfoundry) "wLk" = ( /obj/effect/turf_decal/siding/dark, /obj/machinery/chem_dispenser, @@ -155669,11 +155806,7 @@ /area/station/commons/dorms) "xbk" = ( /obj/item/radio/intercom/directional/south, -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, -/obj/effect/turf_decal/stripes/line{ +/obj/structure/chair/sofa/bench/solo{ dir = 1 }, /turf/open/floor/iron/dark/textured_large, @@ -156149,7 +156282,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/structure/railing, /obj/effect/turf_decal/trimline/brown/filled/line, /obj/effect/turf_decal/siding/brown, /obj/effect/turf_decal/trimline/brown/line{ @@ -161349,7 +161481,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/science) "xSw" = ( -/obj/structure/railing/corner/end/flip, /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 5 }, @@ -161359,6 +161490,9 @@ /obj/effect/turf_decal/trimline/brown/corner{ dir = 8 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/miningoffice) "xSA" = ( @@ -194367,7 +194501,7 @@ gym fDY gJT cGO -juB +vNT lhE xeX jzQ @@ -194620,11 +194754,11 @@ gym gym gym gym -gym -gym gJT +rWS +fDY cGO -vNT +tHC xSw lCS xbk @@ -194877,11 +195011,11 @@ gym gym gym gym -gym -gym -fDY -bPw -bPw +rWS +nbS +oqM +nbS +nbS mFl pOD mOI @@ -195133,13 +195267,13 @@ gym gym gym gym -gym -gym -gym -gJT +dew gJT -bPw -bPw +nbS +oqz +nrD +wvQ +sDq kFj kFj kFj @@ -195391,13 +195525,13 @@ gym gym gym gym -gym -gym -gym -gym -ihJ -gJT -kFj +rWS +oqM +sTD +mmF +fIR +hoC +uWr grQ dsJ dec @@ -195647,13 +195781,13 @@ gym gym gym gym -gym -gym -gym -gym -gym -ihJ +dew rnW +nbS +pVC +wLi +uYW +uOS kFj tqY xsP @@ -195905,12 +196039,12 @@ gym gym gym gym -gym -gym -gym -gym -ihJ -gJT +rWS +nbS +nIe +gIP +dgS +nMH kFj ttj qwk @@ -196163,7 +196297,7 @@ gym gym gJT fDY -gJT +ewt oZM oZM oZM @@ -196420,7 +196554,7 @@ gym gJT nnP nnP -nnP +oZM oZM vxf rEU diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 66baca7acb26..9779a6622eec 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -2808,8 +2808,7 @@ /area/station/engineering/atmos) "ZK" = ( /obj/structure/table, -/obj/item/storage/box/shipping, -/obj/item/boulder_beacon, +/obj/item/storage/box/shipping/debug, /turf/open/floor/iron, /area/station/commons/storage/primary) "ZP" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 1d4036882789..8de7da9d478b 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -2338,7 +2338,9 @@ "ajn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, -/obj/structure/railing, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "ajo" = ( @@ -9859,8 +9861,8 @@ /area/station/hallway/secondary/service) "cqj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/railing/corner/end{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) @@ -11986,8 +11988,12 @@ /turf/open/floor/plating, /area/station/engineering/atmos) "cZQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) @@ -12242,10 +12248,8 @@ /area/station/security/prison/safe) "ddY" = ( /obj/structure/sign/poster/official/jim_nortons/directional/north, -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "dec" = ( @@ -28642,6 +28646,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"jfP" = ( +/obj/structure/closet/crate, +/obj/item/stack/ducts{ + amount = 5 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "jfU" = ( /obj/machinery/door/airlock/hatch{ name = "Secure Pen" @@ -29404,11 +29416,9 @@ /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/rd) "jsx" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, /obj/machinery/digital_clock/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "jsy" = ( @@ -29703,8 +29713,8 @@ /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/railing/corner/end/flip{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) @@ -32955,9 +32965,10 @@ /turf/open/floor/iron, /area/station/maintenance/tram/left) "kxV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) @@ -38049,8 +38060,8 @@ /area/station/security/courtroom) "meg" = ( /obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/railing/corner/end{ + dir = 4 }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) @@ -38695,10 +38706,9 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "mqT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/bouldertech/refinery/smelter, +/obj/structure/railing, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "mrf" = ( @@ -40074,7 +40084,6 @@ /area/station/medical/psychology) "mTg" = ( /obj/effect/decal/cleanable/rubble, -/obj/structure/closet/crate, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "mTh" = ( @@ -41705,6 +41714,10 @@ /area/station/hallway/secondary/exit) "nxN" = ( /obj/item/radio/intercom/directional/west, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "nxT" = ( @@ -43077,7 +43090,9 @@ "nXb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/railing, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "nXh" = ( @@ -49931,11 +49946,7 @@ /turf/closed/wall, /area/station/command/heads_quarters/qm) "qzh" = ( -/obj/machinery/bouldertech/refinery/smelter, -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "qzn" = ( @@ -50592,6 +50603,15 @@ /obj/item/paper/monitorkey, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"qLx" = ( +/obj/machinery/bouldertech/refinery, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "qLD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -50680,10 +50700,8 @@ /area/station/science/ordnance/testlab) "qMI" = ( /obj/machinery/light/warm/directional/north, -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "qMQ" = ( @@ -54713,14 +54731,6 @@ dir = 4 }, /area/station/service/theater) -"siF" = ( -/obj/machinery/bouldertech/refinery, -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, -/turf/open/floor/iron, -/area/station/cargo/miningfoundry) "siL" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -55818,6 +55828,7 @@ /obj/effect/turf_decal/tile/brown/opposingcorners{ dir = 1 }, +/obj/effect/decal/cleanable/greenglow/waste, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "szs" = ( @@ -65105,12 +65116,9 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "vFe" = ( -/obj/effect/mapping_helpers/burnt_floor, /obj/structure/sign/poster/official/midtown_slice/directional/north, -/obj/machinery/conveyor{ - dir = 8; - id = "mining" - }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/cargo/miningfoundry) "vFh" = ( @@ -69032,11 +69040,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"xcU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/railing, -/turf/open/floor/iron, -/area/station/cargo/miningfoundry) "xdx" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -69141,6 +69144,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai/satellite/maintenance) +"xeV" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "xfd" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/effect/turf_decal/trimline/red/filled/corner{ @@ -118588,8 +118601,8 @@ aac aaa xdZ qMI -cZQ -xcU +xeV +cqj sfn njK xiZ @@ -118844,9 +118857,9 @@ aac aaa aaa xdZ -siF -cZQ -xcU +qzh +qLx +cqj goY njK flZ @@ -119102,8 +119115,8 @@ aaa aaa xdZ jsx -mqT -xcU +cZQ +cqj eAV qxG unl @@ -119615,8 +119628,8 @@ aac aaa aaa xdZ +jfP fdc -cZQ jwy sUC pIF diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 4ee2d9a6ad03..96567ae603fc 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -491,6 +491,12 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/cargo/storage) +"ahX" = ( +/obj/structure/sign/warning/directional/west, +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/asteroid) "aic" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -837,6 +843,11 @@ /obj/structure/grille/broken, /turf/open/floor/plating/reinforced/airless, /area/station/asteroid) +"anz" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/maintenance/department/science) "anJ" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -946,11 +957,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/medical/morgue) -"apr" = ( -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/maintenance/department/medical) "apt" = ( /obj/structure/rack, /obj/item/stack/sheet/glass{ @@ -4788,12 +4794,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/upper) -"bGz" = ( -/obj/item/reagent_containers/cup/bottle/fake_gbs, -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/asteroid) "bGD" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -4957,6 +4957,11 @@ /obj/machinery/door/window/right/directional/west, /turf/open/floor/grass, /area/station/service/hydroponics/garden) +"bIS" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/maintenance/port/greater) "bJo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, @@ -5017,6 +5022,11 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"bLu" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/light/small/directional/north, +/turf/open/misc/asteroid, +/area/station/cargo/miningoffice) "bLI" = ( /obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/stripes/line, @@ -5824,15 +5834,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_dark, /area/station/ai/satellite/interior) -"cbn" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "brm" - }, -/obj/effect/turf_decal/sand/plating, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/cargo/miningoffice) "cbr" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -10991,11 +10992,6 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"dQq" = ( -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/hallway/secondary/entry) "dQr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/textured, @@ -15876,20 +15872,6 @@ /obj/structure/disposalpipe/trunk/multiz, /turf/open/floor/iron, /area/station/security) -"fCU" = ( -/obj/structure/table/glass, -/obj/item/radio/intercom/directional/south, -/obj/item/tgui_book/manual/dsm{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/tgui_book/manual/idc{ - pixel_y = 2; - pixel_x = 3 - }, -/obj/item/food/sandwich/cheese, -/turf/open/floor/iron/dark/textured, -/area/station/command/heads_quarters/cmo) "fCY" = ( /obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ dir = 8 @@ -16096,10 +16078,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"fFE" = ( -/obj/effect/decal/cleanable/rubble, -/turf/open/misc/asteroid, -/area/station/cargo/miningoffice) "fFT" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt, @@ -22057,12 +22035,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/commons/dorms) -"hFT" = ( -/obj/structure/sign/warning/directional/east, -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/asteroid) "hFY" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -22475,6 +22447,22 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark/side, /area/station/command/bridge) +"hOh" = ( +/obj/structure/table/glass, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/book/manual/wiki/infections, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/item/tgui_book/manual/idc{ + pixel_y = 2; + pixel_x = 3 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "hOn" = ( /obj/structure/closet/emcloset, /obj/structure/sign/poster/official/random/directional/east, @@ -23100,6 +23088,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"hXH" = ( +/obj/effect/decal/cleanable/rubble, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "hXK" = ( /obj/structure/closet/cardboard, /obj/effect/turf_decal/stripes/line, @@ -23271,12 +23264,6 @@ }, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) -"ibw" = ( -/obj/structure/sign/warning/directional/south, -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/asteroid) "ibx" = ( /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, @@ -23788,13 +23775,6 @@ /obj/machinery/smartfridge/organ, /turf/open/floor/plating, /area/station/medical/morgue) -"ilO" = ( -/obj/effect/decal/cleanable/rubble, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/misc/asteroid, -/area/station/cargo/miningoffice) "ilQ" = ( /obj/structure/railing, /obj/machinery/door/firedoor/border_only, @@ -24382,6 +24362,11 @@ dir = 1 }, /area/station/engineering/atmos) +"iwP" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/hallway/secondary/entry) "iwQ" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -24554,6 +24539,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) +"izF" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "izP" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -26222,11 +26211,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"jfO" = ( -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/maintenance/port/greater) "jge" = ( /obj/effect/spawner/random/structure/crate, /obj/item/clothing/glasses/meson, @@ -27029,11 +27013,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"jsy" = ( -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/maintenance/central/greater) "jsC" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/medical/central) @@ -27045,6 +27024,11 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"jsO" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/maintenance/department/medical) "jsU" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/corner{ dir = 1 @@ -31921,6 +31905,17 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/plating, /area/station/science/breakroom) +"kVS" = ( +/obj/effect/decal/cleanable/rubble, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "kVX" = ( /obj/structure/closet/secure_closet/miner, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ @@ -33488,11 +33483,6 @@ "lyN" = ( /turf/open/openspace, /area/station/engineering/lobby) -"lyP" = ( -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/asteroid) "lyQ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -33837,6 +33827,11 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/ai/satellite/interior) +"lEj" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/asteroid) "lEu" = ( /obj/structure/railing/corner{ dir = 4 @@ -34832,11 +34827,6 @@ dir = 1 }, /area/station/engineering/atmos/mix) -"lWq" = ( -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/maintenance/department/cargo) "lWF" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -36223,6 +36213,20 @@ }, /turf/open/openspace, /area/station/engineering/main) +"muE" = ( +/obj/structure/table/glass, +/obj/item/radio/intercom/directional/south, +/obj/item/tgui_book/manual/dsm{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/tgui_book/manual/idc{ + pixel_y = 2; + pixel_x = 3 + }, +/obj/item/food/sandwich/cheese, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/cmo) "muL" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -36404,6 +36408,12 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/showroomfloor, /area/station/engineering/main) +"mxf" = ( +/obj/structure/sign/warning/directional/east, +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/asteroid) "mxh" = ( /obj/item/radio/intercom/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -37487,6 +37497,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/wood, /area/station/commons/lounge) +"mRE" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "mRI" = ( /obj/effect/mob_spawn/corpse/human/clown, /turf/open/misc/asteroid, @@ -37644,6 +37659,22 @@ }, /turf/open/floor/iron/white, /area/station/maintenance/department/medical) +"mUB" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/book/manual/wiki/medicine, +/obj/item/tgui_book/manual/dsm{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/tgui_book/manual/idc{ + pixel_y = 7 + }, +/obj/item/clothing/neck/stethoscope{ + pixel_y = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "mUF" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -38487,6 +38518,12 @@ }, /turf/open/floor/engine, /area/station/hallway/secondary/entry) +"nho" = ( +/obj/structure/sign/warning/directional/south, +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/asteroid) "nhC" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, @@ -39217,15 +39254,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"nxd" = ( -/obj/structure/rack, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/sand/plating, -/obj/item/storage/box/bandages, -/turf/open/floor/plating, -/area/station/cargo/miningoffice) "nxv" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -39642,11 +39670,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/security/office) -"nGi" = ( -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/maintenance/disposal/incinerator) "nGp" = ( /obj/machinery/camera/directional/west{ c_tag = "Atmospherics Tank - Carbon Dioxide" @@ -40365,6 +40388,12 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/kitchen_coldroom, /area/station/medical/coldroom) +"nTN" = ( +/obj/item/reagent_containers/cup/bottle/fake_gbs, +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/asteroid) "nTQ" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 1 @@ -40632,22 +40661,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"oab" = ( -/obj/structure/table/reinforced/rglass, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/item/book/manual/wiki/medicine, -/obj/item/tgui_book/manual/dsm{ - pixel_y = 3; - pixel_x = 3 - }, -/obj/item/tgui_book/manual/idc{ - pixel_y = 7 - }, -/obj/item/clothing/neck/stethoscope{ - pixel_y = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "oac" = ( /obj/machinery/mecha_part_fabricator{ drop_direction = 1 @@ -40687,6 +40700,11 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/upper) +"oaD" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/maintenance/department/cargo) "oaF" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -43682,6 +43700,22 @@ }, /turf/open/floor/iron/large, /area/station/hallway/secondary/exit/departure_lounge) +"pdj" = ( +/obj/structure/rack, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating, +/obj/item/stack/ducts{ + pixel_y = 3 + }, +/obj/item/stack/ducts, +/obj/item/stack/ducts{ + pixel_y = 7 + }, +/obj/item/storage/box/bandages, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "pdo" = ( /obj/structure/cable/multilayer/multiz, /turf/open/floor/glass, @@ -43690,22 +43724,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/tile, /area/station/service/bar) -"pdt" = ( -/obj/structure/table/glass, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/book/manual/wiki/infections, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/obj/item/tgui_book/manual/idc{ - pixel_y = 2; - pixel_x = 3 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "pdx" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/item/radio/intercom/directional/south, @@ -44263,6 +44281,11 @@ "pog" = ( /turf/open/floor/iron/dark, /area/station/ai/satellite/teleporter) +"poh" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/maintenance/disposal/incinerator) "poi" = ( /turf/closed/wall, /area/station/maintenance/department/cargo) @@ -44980,12 +45003,6 @@ dir = 1 }, /area/station/medical/exam_room) -"pzu" = ( -/obj/structure/sign/warning/directional/west, -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/asteroid) "pzw" = ( /obj/machinery/door/airlock/maintenance/external, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -47584,6 +47601,20 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"qro" = ( +/obj/structure/table/glass, +/obj/structure/reagent_dispensers/wall/virusfood/directional/west, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 3 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "qrs" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -48939,12 +48970,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/station/solars/starboard/fore) -"qSf" = ( -/obj/structure/sign/warning/directional/north, -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/asteroid) "qSg" = ( /obj/machinery/newscaster/directional/north, /obj/structure/disposalpipe/segment{ @@ -55107,6 +55132,11 @@ /obj/item/stamp/head/hop, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/hop) +"sPy" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/maintenance/central/greater) "sPC" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -57681,6 +57711,12 @@ /obj/machinery/digital_clock/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central) +"tJk" = ( +/obj/structure/sign/warning/directional/north, +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/asteroid) "tJx" = ( /obj/structure/chair/plastic{ dir = 4 @@ -60721,6 +60757,11 @@ "uKm" = ( /turf/closed/wall, /area/station/asteroid) +"uKu" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineral_chance = 20 + }, +/area/station/cargo/miningoffice) "uKv" = ( /obj/machinery/requests_console/directional/east{ department = "Chief Medical Officer's Desk"; @@ -61058,11 +61099,6 @@ /obj/effect/turf_decal/trimline/blue/filled/mid_joiner, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) -"uPO" = ( -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/maintenance/department/science) "uQl" = ( /obj/item/flashlight/flare/candle/infinite{ pixel_x = 16; @@ -61753,6 +61789,16 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/closed/wall, /area/station/hallway/primary/central) +"vfg" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "vfq" = ( /obj/structure/railing{ dir = 9 @@ -64183,20 +64229,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lobby) -"vXz" = ( -/obj/structure/table/glass, -/obj/structure/reagent_dispensers/wall/virusfood/directional/west, -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 3 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "vXS" = ( /obj/structure/broken_flooring/side, /obj/effect/decal/cleanable/dirt/dust, @@ -66668,11 +66700,6 @@ "wOU" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/qm) -"wPb" = ( -/turf/closed/mineral/random/stationside/asteroid/porus{ - mineral_chance = 20 - }, -/area/station/cargo/miningoffice) "wPd" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, @@ -69758,6 +69785,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"xSi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "xSN" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/hydroponics/soil/rich, @@ -81097,9 +81131,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj rnk rnk auE @@ -81121,10 +81155,10 @@ rYJ fjg gzL jsC -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj cLf dUc cLf @@ -81353,9 +81387,9 @@ dUc cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj rnk rnk tdh @@ -81378,10 +81412,10 @@ oFu hrk oFu jsC -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj rnk loh loh @@ -81608,9 +81642,9 @@ cLf cLf dUc cLf -lyP -lyP -lyP +lEj +lEj +lEj rnk rnk rnk @@ -81864,10 +81898,10 @@ cLf cLf cLf dUc -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj rnk ryV rnk @@ -82100,10 +82134,10 @@ cLf cLf cLf cLf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj cLf dUc dUc @@ -82124,7 +82158,7 @@ hCS hCS hCS hCS -lyP +lEj rnk bCv tDg @@ -83118,7 +83152,7 @@ poi fgP poi cax -lWq +oaD aCx mxq mxq @@ -83374,7 +83408,7 @@ dqW vTd csl dfW -lWq +oaD dDZ mMS nIJ @@ -83628,13 +83662,13 @@ cro cro cro poi -lWq +oaD ngd lKZ ngd mMS mMS -lWq +oaD mxq pRM mxq @@ -83890,8 +83924,8 @@ eSS dGR syR aVY -lWq -lWq +oaD +oaD mxq iPw tBe @@ -84148,7 +84182,7 @@ sIV syR sVn sIV -lWq +oaD mxq uiy qWu @@ -84405,7 +84439,7 @@ mJL hHJ hHJ qHv -lWq +oaD mxq mxq xlB @@ -84662,8 +84696,8 @@ abw eSS esl ggY -lWq -lWq +oaD +oaD mxq fGr ugu @@ -84917,10 +84951,10 @@ cDM lDP fBK eSS -lWq +oaD ggY -lWq -lWq +oaD +oaD mxq mxq sGj @@ -86431,7 +86465,7 @@ cLf cLf cLf dUc -lyP +lEj ubm ubm hME @@ -86528,8 +86562,8 @@ rnk gtK oqj rnk -lyP -lyP +lEj +lEj dUc cLf cLf @@ -86688,8 +86722,8 @@ cLf cLf cLf unk -lyP -lyP +lEj +lEj ubm fae eyv @@ -86767,7 +86801,7 @@ wJy qof hHj lUk -oab +mUB asr lyr tYs @@ -86786,7 +86820,7 @@ gtK rnk rnk rnk -lyP +lEj unk cLf cLf @@ -86944,9 +86978,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj ubm eYT ohZ @@ -87043,7 +87077,7 @@ gtK rnk gaE rnk -lyP +lEj cLf cLf cLf @@ -87201,9 +87235,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj ubm dMF rrF @@ -87300,8 +87334,8 @@ gtK rZz beO rnk -lyP -lyP +lEj +lEj cLf cLf cLf @@ -87458,9 +87492,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj ubm hME hME @@ -87557,7 +87591,7 @@ paa rnk qvN rnk -lyP +lEj cLf cLf cLf @@ -87715,9 +87749,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj hHw oRD pbB @@ -87814,7 +87848,7 @@ paa rnk rnk rnk -lyP +lEj cLf cLf cLf @@ -87972,9 +88006,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj hHw mut eQY @@ -88070,7 +88104,7 @@ rnk rms loR rnk -lyP +lEj cLf cLf cLf @@ -88229,9 +88263,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj hHw xjQ oMk @@ -88487,8 +88521,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj hHw xjQ qEm @@ -88745,7 +88779,7 @@ cLf cLf cLf cLf -lyP +lEj hHw okV mks @@ -92943,9 +92977,9 @@ rnk paa lqf rnk -lyP -lyP -lyP +lEj +lEj +lEj cLf cLf dUc @@ -93137,8 +93171,8 @@ oZz oZz pHy oZz -lyP -lyP +lEj +lEj ygw lTJ qZh @@ -93200,8 +93234,8 @@ rnk paa pDQ rnk -lyP -lyP +lEj +lEj rnk rnk rnk @@ -93393,9 +93427,9 @@ fYe fYe fYe fYe -lyP -lyP -lyP +lEj +lEj +lEj ygw pgC sxC @@ -93636,10 +93670,10 @@ cLf cLf cLf cLf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj wBC pOg cYP @@ -93652,7 +93686,7 @@ cLf fYe fYe fYe -lyP +lEj ygw ygw ygw @@ -93894,9 +93928,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj wBC rKi kIK @@ -93910,10 +93944,10 @@ cLf uuN fYe fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj iol iol iol @@ -94151,9 +94185,9 @@ cLf cLf cLf cLf -lyP +lEj unk -lyP +lEj wBC dQr dNn @@ -94169,8 +94203,8 @@ uuN fYe fYe fYe -lyP -lyP +lEj +lEj fri sZy otH @@ -94427,7 +94461,7 @@ cLf cLf fYe fYe -lyP +lEj fri taD nIb @@ -103653,7 +103687,7 @@ iUF cLf cLf cLf -lyP +lEj srs eEx vDK @@ -103910,7 +103944,7 @@ iUF dUc dUc unk -lyP +lEj srs srs cgK @@ -104166,8 +104200,8 @@ cLf iUF cLf cLf -lyP -lyP +lEj +lEj srs lPj cqm @@ -104424,7 +104458,7 @@ iUF cLf cLf cLf -lyP +lEj eOn fxo vDK @@ -104703,10 +104737,10 @@ dUc cLf cLf cLf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gvF uLz grl @@ -104959,11 +104993,11 @@ dUc dUc dUc dUc -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj gvF dnW rvg @@ -105216,7 +105250,7 @@ cLf cLf cLf cLf -lyP +lEj vfJ uJt uJt @@ -105473,7 +105507,7 @@ cLf cLf cLf cLf -lyP +lEj uJt eJr wWY @@ -105708,7 +105742,7 @@ cLf iUF cLf cLf -lyP +lEj dZy fhG lQe @@ -105730,7 +105764,7 @@ cLf cLf cLf cLf -lyP +lEj uJt eJr hgX @@ -105964,8 +105998,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj dZy dZy xZX @@ -105986,8 +106020,8 @@ kYu cLf cLf cLf -lyP -lyP +lEj +lEj uJt nXF tLH @@ -106221,9 +106255,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj dZy tgw nes @@ -106239,12 +106273,12 @@ kYu aUD kYu kYu -lyP +lEj cLf cLf cLf -lyP -lyP +lEj +lEj uJt eJr wWY @@ -106479,8 +106513,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj dZy prz idU @@ -106496,12 +106530,12 @@ lYN iPQ noc kYu -lyP -lyP +lEj +lEj cLf cLf -lyP -lyP +lEj +lEj vfJ vfJ xbu @@ -106737,7 +106771,7 @@ cLf cLf cLf cLf -lyP +lEj wfl dZy dZy @@ -106753,13 +106787,13 @@ kYu kYu kYu pIN -lyP -lyP +lEj +lEj cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj vfJ eIV gMK @@ -106994,8 +107028,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj wZz wZz wZz @@ -107009,14 +107043,14 @@ wZz wZz wZz fBc -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe -lyP -lyP -lyP +lEj +lEj +lEj vfJ gLw jmY @@ -107251,8 +107285,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj wZz wZz dxA @@ -107266,14 +107300,14 @@ dPf uCS wZz wZz -lyP -lyP +lEj +lEj uif fYe fYe fYe -lyP -lyP +lEj +lEj vfJ rXG raz @@ -107508,8 +107542,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj wZz wZz tOs @@ -107523,14 +107557,14 @@ hwP wmd wZz wZz -lyP -lyP +lEj +lEj fYe fYe fYe fYe -lyP -lyP +lEj +lEj vfJ oBP raz @@ -107765,8 +107799,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj wZz wZz rdK @@ -107780,13 +107814,13 @@ hwP iYC wZz wZz -lyP -lyP +lEj +lEj fYe fYe fYe uif -lyP +lEj vfJ vfJ oBP @@ -108021,9 +108055,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj wZz wZz mYK @@ -108037,13 +108071,13 @@ cHP taK wZz wZz -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe -lyP -lyP +lEj +lEj vfJ gZF oBP @@ -108123,9 +108157,9 @@ ykG fdj dUc mPv -lyP -lyP -lyP +lEj +lEj +lEj cLf cLf cLf @@ -108278,9 +108312,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj wZz wZz fOM @@ -108294,13 +108328,13 @@ hwP tOp wZz wZz -lyP -lyP -lyP +lEj +lEj +lEj cLf cLf -lyP -lyP +lEj +lEj vfJ xAd iXp @@ -108383,8 +108417,8 @@ ykG ykG ykG ykG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -108535,9 +108569,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj wZz wZz toT @@ -108551,13 +108585,13 @@ hwP emn wZz wZz -lyP -lyP +lEj +lEj cLf cLf cLf -lyP -lyP +lEj +lEj dpu aku uOo @@ -108640,8 +108674,8 @@ pRG arr aRs ykG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -108793,8 +108827,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj wZz wZz biC @@ -108808,17 +108842,17 @@ xZL jPg wZz wZz -lyP -lyP +lEj +lEj cLf cLf cLf -lyP -lyP -uPO +lEj +lEj +anz aku uOo -uPO +anz obA lXz oAX @@ -108897,8 +108931,8 @@ ptc saJ arr ykG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -109050,8 +109084,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj wZz wZz wZz @@ -109065,17 +109099,17 @@ wZz wZz wZz wZz -lyP +lEj cLf cLf cLf cLf -lyP -lyP +lEj +lEj vfR aku uOo -uPO +anz obA mxs qQr @@ -109101,7 +109135,7 @@ vKd niB hjI crU -lyP +lEj dUc dUc nbu @@ -109154,8 +109188,8 @@ rrz wOy voY ykG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -109308,7 +109342,7 @@ cLf cLf cLf cLf -lyP +lEj wNk wZz wZz @@ -109322,17 +109356,17 @@ wZz wZz wZz wNk -lyP +lEj cLf cLf cLf cLf -lyP -lyP -uPO +lEj +lEj +anz aku uOo -uPO +anz obA xPZ gzr @@ -109358,7 +109392,7 @@ aoA pXS hjI crU -lyP +lEj dUc dUc nbu @@ -109411,7 +109445,7 @@ ptc dwH arr ykG -lyP +lEj cLf cLf cLf @@ -109584,12 +109618,12 @@ cLf cLf cLf cLf -lyP -lyP -uPO +lEj +lEj +anz aku uOo -uPO +anz obA wzX eFx @@ -109615,7 +109649,7 @@ ise niB qAI crU -lyP +lEj dUc dUc nbu @@ -109668,7 +109702,7 @@ wIN arr arr ykG -lyP +lEj cLf cLf cLf @@ -109841,12 +109875,12 @@ cLf cLf cLf cLf -lyP -lyP -uPO +lEj +lEj +anz aku uOo -uPO +anz obA sOJ uhc @@ -109872,7 +109906,7 @@ aoA qOs bpy crU -lyP +lEj dUc dUc nbu @@ -109925,7 +109959,7 @@ ykG ykG ykG ykG -lyP +lEj cLf cLf cLf @@ -110098,12 +110132,12 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj ieo aku uOo -uPO +anz obA obA obA @@ -110129,7 +110163,7 @@ niB niB aoA crU -lyP +lEj dUc dUc nbu @@ -110182,7 +110216,7 @@ fmr dUc cLf cLf -lyP +lEj cLf cLf cLf @@ -110354,18 +110388,18 @@ cLf cLf cLf cLf -lyP -lyP -lyP -uPO +lEj +lEj +lEj +anz aku uOo -uPO -uPO +anz +anz ieo lKk iSU -uPO +anz ixU mLH dfM @@ -110386,7 +110420,7 @@ niB ers dsL crU -lyP +lEj dUc dUc dUc @@ -110612,9 +110646,9 @@ cLf cLf cLf fYe -lyP -lyP -uPO +lEj +lEj +anz aku uOo aku @@ -110622,7 +110656,7 @@ foX aku ouA jJe -uPO +anz gOY gOY gOY @@ -110643,7 +110677,7 @@ aRf aRf crU crU -lyP +lEj fTX hfp hfp @@ -110693,8 +110727,8 @@ cpG cpG cpG cpG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -110869,17 +110903,17 @@ dUc dUc dUc fYe -lyP -lyP -uPO +lEj +lEj +anz aku uOo aku foX aku aku -uPO -uPO +anz +anz gOY xxN aam @@ -110892,9 +110926,9 @@ uPL sSN nal gOY -lyP +lEj cxg -lyP +lEj dUc dUc dUc @@ -110951,8 +110985,8 @@ rWI hVe cpG cpG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -111126,16 +111160,16 @@ cLf cLf cLf fYe -lyP -lyP -uPO +lEj +lEj +anz aku uOo pwZ rji foX -uPO -uPO +anz +anz jTB jTB jTB @@ -111151,7 +111185,7 @@ cpJ gOY cxg cxg -lyP +lEj nbu nbu nbu @@ -111208,7 +111242,7 @@ lpe xDk mcd cpG -lyP +lEj cLf cLf cLf @@ -111383,15 +111417,15 @@ cLf cLf cLf fYe -lyP -lyP -uPO +lEj +lEj +anz vfR aku uOo aku aku -uPO +anz jTB jTB ief @@ -111408,7 +111442,7 @@ oLj gOY wHl cxg -lyP +lEj nbu aXt rBj @@ -111641,14 +111675,14 @@ cLf cLf cLf uif -lyP -uPO -uPO -uPO +lEj +anz +anz +anz uOo aku -uPO -uPO +anz +anz jTB jGd eBH @@ -111665,7 +111699,7 @@ gOY gOY cxg cxg -lyP +lEj nbu aXt jyO @@ -111889,8 +111923,8 @@ cLf cLf dUc cLf -lyP -lyP +lEj +lEj fYe fYe fYe @@ -111898,14 +111932,14 @@ fYe fYe fYe fYe -lyP -uPO -uPO -uPO +lEj +anz +anz +anz uOo aku -uPO -uPO +anz +anz jTB dkr hbH @@ -111922,7 +111956,7 @@ ofG gOY cxg cxg -lyP +lEj nbu aXt aXt @@ -112144,25 +112178,25 @@ dUc dUc dUc dUc -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj fYe fYe fYe fYe fYe fYe -uPO -uPO +anz +anz ieo iSU uOo uro rji -uPO +anz jTB sqJ wiT @@ -112179,7 +112213,7 @@ rYe gOY gOY cxg -lyP +lEj nbu nbu nbu @@ -112401,9 +112435,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe fYe @@ -112413,13 +112447,13 @@ cLf cLf fYe rji -uPO +anz vfR aku uOo aku -uPO -uPO +anz +anz jTB dEn lIn @@ -112436,7 +112470,7 @@ fDz gqV gOY cxg -lyP +lEj nbu pIV dLf @@ -112659,7 +112693,7 @@ cLf cLf cLf cLf -lyP +lEj cLf cLf dUc @@ -112675,8 +112709,8 @@ aku aku uOo aku -uPO -uPO +anz +anz jTB gbV jqY @@ -112693,7 +112727,7 @@ dyd qDM gOY cxg -lyP +lEj nbu pIV mBg @@ -112750,8 +112784,8 @@ aTv aTv cpG cpG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -112932,8 +112966,8 @@ aku pkw uOo aku -uPO -uPO +anz +anz jTB wKR wKR @@ -112950,7 +112984,7 @@ aWM vzP gOY cxg -lyP +lEj nbu pIV pIV @@ -113007,8 +113041,8 @@ aYf aYf krW cpG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -113182,7 +113216,7 @@ cLf cLf cLf fYe -lyP +lEj rji nLT aku @@ -113190,7 +113224,7 @@ aku uOo aku ieo -uPO +anz jTB jTB qXE @@ -113207,7 +113241,7 @@ lfq mDx gOY cxg -lyP +lEj nbu nbu nbu @@ -113264,8 +113298,8 @@ aYf eRD eRD cpG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -113438,17 +113472,17 @@ cLf cLf cLf cLf -lyP -lyP -uPO +lEj +lEj +anz pkw aku aku uOo aku vfR -uPO -uPO +anz +anz jTB jTB jTB @@ -113464,7 +113498,7 @@ sLr mDx cxg cxg -lyP +lEj nbu msY nGp @@ -113521,8 +113555,8 @@ aYf eRD lPp cpG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -113721,7 +113755,7 @@ lfq nkM cxg cxg -lyP +lEj nbu msY qNM @@ -113778,8 +113812,8 @@ prc prc prc cpG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -113978,7 +114012,7 @@ vib vMR dUc cxg -lyP +lEj nbu msY msY @@ -114035,8 +114069,8 @@ prc prc prc cpG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -114235,7 +114269,7 @@ egV vMR dUc cxg -lyP +lEj nbu nbu nbu @@ -114292,8 +114326,8 @@ cpG cpG cpG cpG -lyP -lyP +lEj +lEj cLf cLf cLf @@ -114492,12 +114526,12 @@ nbS vMR dUc cLf -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj dUc wRN fdC @@ -114524,7 +114558,7 @@ kGZ woo kUX uFC -lyP +lEj uFC cUD nPW @@ -114543,14 +114577,14 @@ xwD cvL psF uFC -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj kxB kxB -lyP -lyP +lEj +lEj cLf cLf cLf @@ -114726,8 +114760,8 @@ pkl pkl pkl pkl -uPO -uPO +anz +anz ieo aku aku @@ -114750,11 +114784,11 @@ nkM dUc cLf dUc -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj dUc fTX rLK @@ -114780,8 +114814,8 @@ edL kGZ wlG kUX -lyP -lyP +lEj +lEj uFC pbD nPW @@ -114806,8 +114840,8 @@ gjZ sqZ uuN kxB -lyP -lyP +lEj +lEj cLf cLf cLf @@ -114980,12 +115014,12 @@ cLf cLf cLf cLf -uPO -uPO -uPO -uPO -uPO -uPO +anz +anz +anz +anz +anz +anz vfR pkw aku @@ -115007,12 +115041,12 @@ moe dUc cLf dUc -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj dUc eTZ dUc @@ -115037,8 +115071,8 @@ cEh kGZ pul kUX -lyP -lyP +lEj +lEj uFC biG nPW @@ -115063,7 +115097,7 @@ mlk dqK sqZ kxB -lyP +lEj cLf cLf cLf @@ -115234,17 +115268,17 @@ fYe fYe wfz dUc -lyP +lEj dUc dUc -uPO -uPO -uPO -uPO -uPO -uPO -uPO -uPO +anz +anz +anz +anz +anz +anz +anz +anz aku aku aku @@ -115268,8 +115302,8 @@ dUc dUc dUc dUc -lyP -lyP +lEj +lEj nbu jWP wVI @@ -115294,8 +115328,8 @@ nPf kGZ qih kUX -lyP -lyP +lEj +lEj uFC lCu pxu @@ -115320,7 +115354,7 @@ mlk mlk wtF kxB -lyP +lEj cLf cLf cLf @@ -115486,21 +115520,21 @@ cLf cLf cLf cLf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe fYe cLf cLf cLf -uPO -uPO -uPO -uPO +anz +anz +anz +anz cLf -uPO +anz obA lJq tsz @@ -115525,8 +115559,8 @@ cLf cLf cLf dUc -lyP -lyP +lEj +lEj nbu jxx bHa @@ -115577,7 +115611,7 @@ mlk dqK wtF kxB -lyP +lEj cLf cLf cLf @@ -115744,9 +115778,9 @@ cLf cLf cLf uif -lyP -lyP -lyP +lEj +lEj +lEj uif cLf cLf @@ -115782,8 +115816,8 @@ cLf cLf cLf dUc -lyP -lyP +lEj +lEj nbu szc azx @@ -115834,8 +115868,8 @@ mlk dqK wtF kxB -lyP -lyP +lEj +lEj cLf cLf cLf @@ -116000,10 +116034,10 @@ shs shs shs dUc -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe cLf cLf @@ -116012,9 +116046,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj obA lJq jBM @@ -116039,8 +116073,8 @@ cLf cLf cLf dUc -lyP -lyP +lEj +lEj nbu szc szc @@ -116066,7 +116100,7 @@ kUX kUX kUX dUc -lyP +lEj uFC spr xcm @@ -116090,9 +116124,9 @@ mlk mlk mlk wtF -lyP -lyP -lyP +lEj +lEj +lEj cLf cLf cLf @@ -116269,9 +116303,9 @@ cLf cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj obA cLf cPl @@ -116296,8 +116330,8 @@ cLf cLf cLf dUc -lyP -lyP +lEj +lEj nbu nbu nbu @@ -116311,7 +116345,7 @@ nbu nbu nbu nbu -lyP +lEj mUQ cLf dUc @@ -116320,10 +116354,10 @@ cLf cLf dUc cLf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj uFC uFC jnY @@ -116347,9 +116381,9 @@ dqK mlk dqK wtF -lyP -lyP -lyP +lEj +lEj +lEj cLf cLf cLf @@ -116527,8 +116561,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj obA cLf cLf @@ -116554,17 +116588,17 @@ cLf cLf dUc cLf -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe fYe @@ -116578,10 +116612,10 @@ cLf dUc cLf cLf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj dUc cLf mDV @@ -116604,9 +116638,9 @@ dqK dqK dqK wtF -lyP -lyP -lyP +lEj +lEj +lEj cLf cLf cLf @@ -116784,8 +116818,8 @@ tyd cLf cLf cLf -lyP -lyP +lEj +lEj etW cLf cLf @@ -116812,22 +116846,22 @@ cLf dUc cLf cLf -lyP +lEj cLf dUc -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe -lyP +lEj mUQ -lyP +lEj dUc cLf cLf @@ -116836,9 +116870,9 @@ dUc cLf cLf cLf -lyP -lyP -lyP +lEj +lEj +lEj dUc cLf mDV @@ -116861,8 +116895,8 @@ dqK mlk dqK wtF -lyP -lyP +lEj +lEj cLf cLf cLf @@ -117075,16 +117109,16 @@ dUc cLf cLf cLf -lyP -lyP +lEj +lEj cLf cLf cLf -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj dUc cLf cLf @@ -117092,10 +117126,10 @@ cLf dUc cLf cLf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj dUc dUc mDV @@ -117110,7 +117144,7 @@ adc ncv ncm uFC -lyP +lEj cxg cxg xzT @@ -117118,8 +117152,8 @@ tgj tgj tgj rwE -lyP -lyP +lEj +lEj cLf cLf cLf @@ -117340,18 +117374,18 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj dUc iUF iUF iUF dUc -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj cLf cLf cLf @@ -117367,16 +117401,16 @@ uvN wQz kiW uFC -lyP -lyP -lyP +lEj +lEj +lEj cxg cxg cxg cxg -lyP -lyP -lyP +lEj +lEj +lEj cLf cLf cLf @@ -117605,8 +117639,8 @@ cLf cLf cLf cLf -lyP -lyP +lEj +lEj cLf mUQ fYe @@ -117625,15 +117659,15 @@ aQo kEu uFC vaU -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj cLf cLf cLf @@ -117869,7 +117903,7 @@ uVI fYe fYe fYe -lyP +lEj uFC uFC kEu @@ -117881,15 +117915,15 @@ kEu kEu uFC uFC -lyP -lyP -lyP +lEj +lEj +lEj mUQ uVI uVI mUQ -lyP -lyP +lEj +lEj cLf cLf cLf @@ -118126,8 +118160,8 @@ uVI uVI uVI mUQ -lyP -lyP +lEj +lEj uFC uFC uFC @@ -118137,10 +118171,10 @@ uFC uFC uFC uFC -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe fYe fYe @@ -118385,18 +118419,18 @@ cLf cLf cLf cLf -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj cLf cLf fYe @@ -139440,12 +139474,12 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj hhX hhX -lyP -lyP +lEj +lEj hhX hhX hhX @@ -139695,15 +139729,15 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -139950,21 +139984,21 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj mUQ kLL unk -lyP +lEj hhX hhX hhX @@ -140205,24 +140239,24 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe qHE -lyP -lyP -lyP +lEj +lEj +lEj hhX hhX hhX @@ -140462,25 +140496,25 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj vYz aUf vYz vYz vYz -lyP +lEj fYe fYe fYe fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -140719,8 +140753,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj vYz aUf vYz @@ -140732,12 +140766,12 @@ vYz aUf aUf aUf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe -lyP +lEj hhX hhX hhX @@ -140990,9 +141024,9 @@ ory aTE aUf aUf -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe hhX @@ -141247,10 +141281,10 @@ qyq fUv pkA aUf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe hhX hhX @@ -141506,8 +141540,8 @@ wMe wnw fYe fYe -lyP -lyP +lEj +lEj hhX hhX hhX @@ -143560,7 +143594,7 @@ eZo wCR vYz vYz -lyP +lEj fYe fYe hhX @@ -143816,9 +143850,9 @@ eSs iXA vYz vYz -lyP -lyP -lyP +lEj +lEj +lEj fYe hhX hhX @@ -144075,7 +144109,7 @@ iVG eYP gHN gHN -lyP +lEj hhX hhX hhX @@ -145088,7 +145122,7 @@ hhX hhX hhX hhX -lyP +lEj vYz fJV wdI @@ -145344,8 +145378,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj vYz vYz rap @@ -145602,8 +145636,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj vYz aUf aUf @@ -145619,9 +145653,9 @@ hhX hhX jVV hhX -lyP -lyP -lyP +lEj +lEj +lEj hhX hhX fZF @@ -145876,8 +145910,8 @@ hhX fYe fYe fYe -lyP -lyP +lEj +lEj fYe fYe qHE @@ -146110,10 +146144,10 @@ oID jVV hhX hhX -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -146365,20 +146399,20 @@ hhX hhX hhX jVV -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -hhX -hhX -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +hhX +hhX +lEj +lEj iJm iJm eYP @@ -146389,14 +146423,14 @@ dvC mUQ fYe fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe fYe @@ -146622,19 +146656,19 @@ hhX hhX hhX hhX -lyP -lyP -lyP +lEj +lEj +lEj qAp fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj mUQ kLL cts @@ -146646,14 +146680,14 @@ iJm mUQ mUQ fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe fYe @@ -146879,19 +146913,19 @@ hhX hhX hhX hhX -lyP -lyP -lyP +lEj +lEj +lEj uif uif -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj iJm iJm foL @@ -146900,31 +146934,31 @@ gZt dPG foL iJm -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fnh fnh fnh fnh fnh fnh -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe fYe fYe fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -147108,9 +147142,9 @@ hhX hhX hhX hhX -lyP -lyP -lyP +lEj +lEj +lEj hhX hhX hhX @@ -147135,20 +147169,20 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe hSF -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj iJm iJm foL @@ -147158,31 +147192,31 @@ plV foL dcl qHE -lyP -lyP -lyP +lEj +lEj +lEj fnh vTt dBK aQD vTt fnh -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -147365,10 +147399,10 @@ fYe fYe fYe hhX -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -147392,8 +147426,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj gNV gNV gNV @@ -147402,10 +147436,10 @@ gNV gNV gNV uif -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj iJm iJm foL @@ -147424,22 +147458,22 @@ mlK mlK fSp fnh -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -bGz -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +nTN +lEj +lEj hhX hhX hhX @@ -147619,13 +147653,13 @@ fYe fYe fYe fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -147650,7 +147684,7 @@ aZg aZg aZg aZg -lyP +lEj gNV bMZ tKm @@ -147658,11 +147692,11 @@ lib qmf iSw gNV -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj iJm iJm eYP @@ -147681,22 +147715,22 @@ mlK mlK dBK fnh -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -147873,28 +147907,28 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj lLo sMT lLo @@ -147907,7 +147941,7 @@ umg umg umg umg -lyP +lEj gNV rwu eiI @@ -147915,11 +147949,11 @@ hvV kkK pha gNV -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj iJm iJm iJm @@ -147928,7 +147962,7 @@ wku plV gHN fYe -apr +jsO fnh diz jMW @@ -147938,8 +147972,8 @@ aQD dBK vTt fnh -lyP -lyP +lEj +lEj fnh fnh fnh @@ -147947,12 +147981,12 @@ fnh fnh fnh fnh -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -148130,27 +148164,27 @@ fNW hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +pEH pEH pEH pEH -lyP +lEj iaN iaN aJP @@ -148172,12 +148206,12 @@ tXr qia qtT gNV -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj iJm uKm eYP @@ -148185,7 +148219,7 @@ pmp ldf eYP fnh -apr +jsO fnh fnh jMW @@ -148204,10 +148238,10 @@ fnh wXY whx fnh -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -148387,26 +148421,26 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +uKu pEH -pEH -wPb -wPb +uKu +uKu +uKu iaN iaN iig @@ -148430,19 +148464,19 @@ gNV gNV gNV dLR -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj fnh mUA iLo lYg oHC fnh -apr +jsO fnh lTj jMW @@ -148461,10 +148495,10 @@ mkc kzS uym fnh -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -148646,24 +148680,24 @@ fYe fYe fYe fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -pEH +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +uKu +uKu ixo dcg -nxd +pdj iaN kVX bUJ @@ -148691,8 +148725,8 @@ vLs aCv vLs aCv -apr -apr +jsO +jsO kGS rPT atT @@ -148718,10 +148752,10 @@ fnh qlO guP fnh -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -148903,24 +148937,24 @@ hhX hhX fYe fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj pEH +bLu xok -ljG -fFE +vfg +hXH iaN mPH dhv @@ -148975,10 +149009,10 @@ fnh fnh fnh fnh -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -149160,23 +149194,23 @@ jVV jVV jVV fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -pEH -cbn -ljG +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +uKu +xSi +efm +qXY qXY iaN gEQ @@ -149232,10 +149266,10 @@ nFS fnh dxD aRn -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -149415,25 +149449,25 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj pEH +izF nuu -ilO +kVS qXY wds uRO @@ -149458,12 +149492,12 @@ fLe xRj xXY kYT -apr -apr -apr +jsO +jsO +jsO aCv wWJ -apr +jsO aCv ygt dXH @@ -149490,10 +149524,10 @@ fnh ibx ibx rFK -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe fYe fYe @@ -149686,9 +149720,9 @@ dOG dOG dOG dOG -lyP -lyP -wPb +lEj +uKu +izF efm ljG qXY @@ -149718,9 +149752,9 @@ wOU wOU wOU kYT -apr +jsO wWJ -apr +jsO bGk bGk tuL @@ -149747,12 +149781,12 @@ fnh fnh uXS fnh -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe hhX @@ -149943,12 +149977,12 @@ qog gcQ bEn dOG -lyP -lyP -wPb +lEj +pEH +mRE iee bPu -wPb +uKu iaN fON jds @@ -149975,9 +150009,9 @@ dCv fxF fxF kYT -apr +jsO taj -apr +jsO bGk mqc mfw @@ -150004,14 +150038,14 @@ qrg eQI iMT fnh -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -150200,12 +150234,12 @@ dOG dOG mkN dOG -lyP -lyP -lyP -wPb -wPb -wPb +lEj +lEj +uKu +uKu +uKu +uKu iaN iaN dlY @@ -150234,7 +150268,7 @@ fxF kYT wWJ wWJ -apr +jsO bGk sHo mJD @@ -150262,13 +150296,13 @@ eAq lGe fnh fnh -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe -lyP -lyP +lEj +lEj hhX hhX hhX @@ -150457,12 +150491,12 @@ ouF ouF lbr dOG -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +pEH +uKu +pEH iaN qIa fBm @@ -150490,8 +150524,8 @@ mYd uUP kYT wWJ -apr -apr +jsO +jsO bGk jfq dhj @@ -150519,9 +150553,9 @@ rcy cIi siK fnh -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe fYe @@ -150714,12 +150748,12 @@ gAQ eBa eWJ dOG -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj iaN iaN poi @@ -150776,9 +150810,9 @@ qpR lGe oJJ fnh -lyP -lyP -lyP +lEj +lEj +lEj fYe hhX hhX @@ -150971,14 +151005,14 @@ jqd jmU mKW dOG -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj poi xeh jir @@ -151033,9 +151067,9 @@ fnh fnh fnh fnh -lyP -lyP -lyP +lEj +lEj +lEj fYe hhX hhX @@ -151228,14 +151262,14 @@ dOG dOG dOG dOG -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj poi rEK poi @@ -151257,9 +151291,9 @@ wOU wAm lzu wOU -lyP -lyP -apr +lEj +lEj +jsO wWJ kYT auB @@ -151290,9 +151324,9 @@ vYQ ezM qMn iMq -lyP -lyP -lyP +lEj +lEj +lEj hhX hhX hhX @@ -151484,15 +151518,15 @@ xey egY rai uZc -lyP -lyP +lEj +lEj fYe fYe fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj poi tdq xTb @@ -151514,9 +151548,9 @@ wOU cNr ugI wOU -lyP -lyP -apr +lEj +lEj +jsO wWJ kYT xtb @@ -151547,9 +151581,9 @@ spA spA gBY iMq -lyP -lyP -lyP +lEj +lEj +lEj fYe hhX hhX @@ -151741,8 +151775,8 @@ cJZ rai rai uZc -lyP -lyP +lEj +lEj wkX fYe fYe @@ -151771,9 +151805,9 @@ wOU ntd pZj wOU -lyP -lyP -apr +lEj +lEj +jsO wWJ kYT auB @@ -151804,9 +151838,9 @@ iom tjn aRZ iMq -lyP -lyP -lyP +lEj +lEj +lEj hhX hhX hhX @@ -151998,7 +152032,7 @@ uZc uZc uZc uZc -lyP +lEj hen hen hen @@ -152009,7 +152043,7 @@ fYe fYe fYe fYe -lyP +lEj sdc oZQ oZQ @@ -152029,8 +152063,8 @@ epK epK epK fnh -apr -apr +jsO +jsO taj kYT jEu @@ -152061,9 +152095,9 @@ dpj cUm tve iMq -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe hhX @@ -152225,10 +152259,10 @@ hhX hhX fYe fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj jOV skb wSc @@ -152252,10 +152286,10 @@ xtp oPN bWJ uZc -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hen hen hen @@ -152266,7 +152300,7 @@ hen fYe fYe fYe -lyP +lEj sdc oZQ oZQ @@ -152286,7 +152320,7 @@ pkt xMY aDW fnh -apr +jsO rNJ rNJ kYT @@ -152318,9 +152352,9 @@ niI mnA jKj iMq -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe fYe @@ -152482,10 +152516,10 @@ hhX hhX fYe fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj jOV skb wSc @@ -152509,8 +152543,8 @@ crb iqE mMp hED -lyP -lyP +lEj +lEj fYe fYe hen @@ -152523,7 +152557,7 @@ hen fYe fYe fYe -lyP +lEj sdc oZQ oZQ @@ -152547,7 +152581,7 @@ bgY bgY bgY dog -apr +jsO fnh wnL oFa @@ -152575,9 +152609,9 @@ iMq beR iMq iMq -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe hhX @@ -152739,10 +152773,10 @@ hhX hhX fYe fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj jOV kDb ctL @@ -152752,10 +152786,10 @@ nvR fDi uEX jOV -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj mIW sUM rhc @@ -152767,7 +152801,7 @@ ylZ buu hED hED -lyP +lEj wkX fYe hen @@ -152780,7 +152814,7 @@ hen fYe fYe fYe -lyP +lEj sdc sdc sdc @@ -152800,11 +152834,11 @@ mlh jpx aLE fnh -apr +jsO rNJ koX dog -apr +jsO fnh igq igq @@ -152832,9 +152866,9 @@ iMq avC oEC iMq -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe fYe @@ -152996,7 +153030,7 @@ hhX hhX fYe fYe -lyP +lEj hHw hHw hHw @@ -153009,10 +153043,10 @@ jOV jOV jOV jOV -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj mIW thT thT @@ -153024,7 +153058,7 @@ ccI cPP tTz hED -lyP +lEj fYe fYe hen @@ -153036,9 +153070,9 @@ hen hen fYe fYe -lyP -lyP -lyP +lEj +lEj +lEj bNL xsj lFN @@ -153061,7 +153095,7 @@ aCv cGs vFq dog -apr +jsO fnh evQ evQ @@ -153089,9 +153123,9 @@ iMq lsq iBP iMq -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe hhX @@ -153262,14 +153296,14 @@ wSc rwW wSc jOV -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj mIW sTS thT @@ -153281,7 +153315,7 @@ bZI ipc tME hED -lyP +lEj fYe hen hen @@ -153293,9 +153327,9 @@ hen hen fYe fYe -lyP -lyP -lyP +lEj +lEj +lEj bNL xWQ cVb @@ -153314,11 +153348,11 @@ gnE xeA otY fnh -apr +jsO rNJ blM dog -apr +jsO fnh evQ evQ @@ -153346,9 +153380,9 @@ iMq frv cxP iMq -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe hhX @@ -153519,14 +153553,14 @@ xbr qFS wSc jOV -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj mIW thT thT @@ -153538,21 +153572,21 @@ tGw ipc eQJ hED -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj hen hen fYe fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj bNL exg bcj @@ -153571,11 +153605,11 @@ qBu fIm otY fnh -apr -apr +jsO +jsO rNJ kpx -apr +jsO fnh gWX bAV @@ -153603,9 +153637,9 @@ aOm aOm aOm aOm -lyP -lyP -lyP +lEj +lEj +lEj fYe hhX hhX @@ -153776,14 +153810,14 @@ hHw dAq jOV jOV -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj mIW thT thT @@ -153795,21 +153829,21 @@ rAq xNy iUV hED -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe fYe fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj bNL xgQ oRE @@ -153828,8 +153862,8 @@ vOu vOu vOu fnh -apr -apr +jsO +jsO rNJ kpx qcU @@ -153860,9 +153894,9 @@ fnU udG xzP oZt -lyP -lyP -lyP +lEj +lEj +lEj fYe hhX hhX @@ -154034,13 +154068,13 @@ aCb aCb hHw hHw -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj mIW mIW mIW @@ -154052,21 +154086,21 @@ hED hED hED hED -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe fYe -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj bNL hxg bcj @@ -154079,13 +154113,13 @@ tFD wjC rPt sdc -lyP -lyP -lyP -lyP -lyP -lyP -apr +lEj +lEj +lEj +lEj +lEj +lEj +jsO rNJ rNJ kpx @@ -154105,7 +154139,7 @@ wYo cLD nzb xnq -fCU +muE xhJ oZt fQG @@ -154117,10 +154151,10 @@ aRN nqD hZN oZt -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -154291,39 +154325,39 @@ uRG uRG uRG hHw -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hED npn okF aum hED -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -fYe -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +fYe +lEj +lEj +lEj +lEj +lEj +lEj bNL pNs dpH @@ -154336,8 +154370,8 @@ sdc sdc sdc sdc -lyP -lyP +lEj +lEj fnh fnh fnh @@ -154346,7 +154380,7 @@ fnh qcU kpx kpx -apr +jsO fnh sxa mpp @@ -154374,10 +154408,10 @@ fnU xzP nrW oZt -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -154548,53 +154582,53 @@ uRG uRG uRG hHw -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hED ocl kkC phJ hED -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -fYe -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +fYe +lEj +lEj +lEj +lEj +lEj +lEj bNL bNL bNL bNL bNL bNL -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fnh bmu tMP @@ -154603,7 +154637,7 @@ pSV kpx bzu qcU -apr +jsO fnh igq igq @@ -154631,9 +154665,9 @@ gcy aRN aRN oZt -lyP +lEj fYe -lyP +lEj mUQ jOM hhX @@ -154805,66 +154839,66 @@ hHw hHw hHw hHw -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hED hED hED hED hED -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -fYe -fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +fYe +fYe +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW gYW gYW gYW -lyP -lyP -lyP +lEj +lEj +lEj fnh bmu bMl uJA fnh -apr +jsO rNJ doZ -apr -lyP -lyP -lyP -lyP +jsO +lEj +lEj +lEj +lEj igq igq igq @@ -154884,11 +154918,11 @@ teV oZt rix ixR -vXz -pdt +qro +hOh vau oZt -lyP +lEj kqj xcq gVN @@ -155061,41 +155095,41 @@ hhX hhX hhX okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -fYe -fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +fYe +fYe +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW gYW gYW @@ -155106,25 +155140,25 @@ gYW jbP gLD gYW -lyP -lyP -lyP +lEj +lEj +lEj fnh fnh fnh fnh fnh -apr +jsO aCv tBL aCv -dQq -dQq -dQq -dQq -lyP -lyP -lyP +iwP +iwP +iwP +iwP +lEj +lEj +lEj gvw gvw gvw @@ -155318,41 +155352,41 @@ hhX hhX hhX okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe mEN -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW dTy vsD @@ -155366,25 +155400,25 @@ gYW gYW gYW gYW -dQq -dQq -dQq -dQq +iwP +iwP +iwP +iwP nev dtt dtt dtt dtt dtt -dQq -dQq -dQq -lyP -lyP -lyP -lyP -lyP -lyP +iwP +iwP +iwP +lEj +lEj +lEj +lEj +lEj +lEj gvw gjt jEf @@ -155392,9 +155426,9 @@ kQV uKv evg gvw -lyP -lyP -lyP +lEj +lEj +lEj oZt jCU tkh @@ -155402,10 +155436,10 @@ cgw fMY uHE oZt -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj jVV hhX hhX @@ -155575,41 +155609,41 @@ fYe hhX hhX okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe unk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW fdQ oMn @@ -155631,17 +155665,17 @@ dtt dtt dtt nev -dQq +iwP dtt -dQq -dQq -dQq -lyP -lyP -lyP -lyP -lyP -lyP +iwP +iwP +iwP +lEj +lEj +lEj +lEj +lEj +lEj gvw gvw gvw @@ -155649,7 +155683,7 @@ gvw gvw gvw gvw -lyP +lEj unk unk oZt @@ -155659,10 +155693,10 @@ oZt oZt oZt oZt -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -155832,37 +155866,37 @@ pnS hhX hhX okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe iRm fYe -lyP -lyP -lyP +lEj +lEj +lEj gYW gYW gYW @@ -155887,26 +155921,26 @@ dtt dtt dtt dtt -dQq -dQq +iwP +iwP dtt dtt nev mGn -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -ibw +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +nho unk hhX hhX @@ -155914,10 +155948,10 @@ hhX hhX hhX unk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -156089,36 +156123,36 @@ fYe hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -fYe -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +fYe +lEj unk fYe fYe -lyP +lEj fYe oSk esQ @@ -156137,15 +156171,15 @@ wjI wjI wjI gYW -dQq -dQq -dQq +iwP +iwP +iwP dtt dtt -dQq +iwP dtt uXD -dQq +iwP dtt dtt dtt @@ -156157,24 +156191,24 @@ azk azk azk azk -lyP -lyP +lEj +lEj gMk -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj hhX hhX hhX hhX hhX unk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -156346,32 +156380,32 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe -lyP -lyP +lEj +lEj fYe fYe fYe @@ -156396,7 +156430,7 @@ dSl gYW uXD uXD -dQq +iwP ldo ldo ldo @@ -156412,26 +156446,26 @@ cHs uXD uXD uXD -lyP +lEj azk azk azk azk azk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe hhX hhX hhX hhX unk -qSf -lyP -lyP -lyP +tJk +lEj +lEj +lEj hhX hhX hhX @@ -156603,37 +156637,37 @@ hhX hhX hhX okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -lyP -lyP -fYe -fYe -fYe -fYe -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +lEj +lEj +fYe +fYe +fYe +fYe +lEj oSk wAv wAv @@ -156669,26 +156703,26 @@ qIf vwL pbn uXD -lyP -lyP +lEj +lEj uet gMk -lyP +lEj azk azk -lyP -lyP -lyP +lEj +lEj +lEj fYe hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -156860,33 +156894,33 @@ hhX fNW hhX okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -fYe -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +fYe +lEj +lEj fYe gYW gYW @@ -156928,24 +156962,24 @@ dFc uXD uXD uXD -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj azk -lyP -lyP -lyP +lEj +lEj +lEj fYe hhX hhX hhX hhX unk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -157117,34 +157151,34 @@ hhX hhX hhX okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -fYe -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +fYe +lEj +lEj gYW dum hdN @@ -157185,24 +157219,24 @@ sZF pLP kEs uXD -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj azk -lyP -lyP +lEj +lEj unk unk unk -lyP +lEj unk unk unk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -157374,34 +157408,34 @@ hhX hhX hhX okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +lEj +lEj +lEj gYW kwW tQy @@ -157442,23 +157476,23 @@ sZF pLP pLP uXD -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj azk azk azk azk unk dra -lyP -pzu -lyP -lyP -lyP -hFT -lyP +lEj +ahX +lEj +lEj +lEj +mxf +lEj hhX hhX hhX @@ -157631,34 +157665,34 @@ hhX hhX hhX okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -fYe -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +fYe +lEj +lEj gYW hbQ saY @@ -157701,17 +157735,17 @@ uXD uXD uKm uKm -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj azk iEl gMk uet uet -lyP +lEj gMk mGM unk @@ -157888,34 +157922,34 @@ hhX hhX okm okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -fYe -fYe -fYe -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +fYe +fYe +fYe +lEj +lEj gYW gYW gYW @@ -157958,14 +157992,14 @@ gMk dij atB uKm -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj azk azk unk -lyP +lEj gMk gMk gMk @@ -158145,35 +158179,35 @@ hhX hhX okm okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj unk unk gbv any unk unk -lyP -lyP +lEj +lEj gYW kGy mMN @@ -158214,18 +158248,18 @@ uXD uet gMk mZs -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj azk -lyP -lyP -lyP +lEj +lEj +lEj gMk -lyP -lyP +lEj +lEj ent bCg unk @@ -158402,26 +158436,26 @@ hhX hhX okm okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj unk unk fYe @@ -158430,7 +158464,7 @@ fYe fYe unk unk -lyP +lEj gYW kGy mMN @@ -158471,22 +158505,22 @@ rzJ gMk gMk gMk -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj azk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -158659,26 +158693,26 @@ hhX hhX okm okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe dsG fYe fYe fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj unk fYe fYe @@ -158728,22 +158762,22 @@ uXD uXD uXD gMk -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj azk -lyP -lyP -lyP +lEj +lEj +lEj rnk rnk rnk rnk rnk rnk -lyP +lEj hhX hhX hhX @@ -158916,13 +158950,13 @@ hhX hhX okm okm -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe hen @@ -158934,8 +158968,8 @@ fYe fYe dsG dsG -lyP -lyP +lEj +lEj unk fYe ivx @@ -158985,15 +159019,15 @@ pLP kEs uXD gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk azk -lyP -lyP -lyP +lEj +lEj +lEj rnk vGs dwI @@ -159173,13 +159207,13 @@ hhX hhX hhX fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe hen @@ -159243,14 +159277,14 @@ pLP uXD gMk gMk -lyP -lyP -lyP +lEj +lEj +lEj azk azk gMk uet -lyP +lEj rnk iQt noh @@ -159430,13 +159464,13 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe hen @@ -159498,13 +159532,13 @@ wLu uXD uXD uXD -lyP +lEj gMk uet uet -lyP +lEj azk -lyP +lEj gMk gMk gMk @@ -159687,13 +159721,13 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe hen @@ -159715,8 +159749,8 @@ fYe fYe unk unk -lyP -lyP +lEj +lEj jCD jCD jCD @@ -159754,17 +159788,17 @@ lvw xGo oEp ibx -lyP -lyP +lEj +lEj azk azk azk azk azk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj rnk bzj eMq @@ -159944,13 +159978,13 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe fYe @@ -159964,19 +159998,19 @@ hen hen hen fYe -lyP +lEj unk unk unk unk unk unk -lyP -lyP -lyP -lyP -lyP -jsy +lEj +lEj +lEj +lEj +lEj +sPy gYW gYW gYW @@ -160014,13 +160048,13 @@ ibx uet azk azk -lyP -lyP +lEj +lEj pfg -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX rnk rnk @@ -160201,13 +160235,13 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe fYe @@ -160221,21 +160255,21 @@ hen hen hen fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hwW dTe -jsy +sPy gYW gYW gYW @@ -160270,14 +160304,14 @@ ibx ibx ibx azk -lyP -lyP -lyP +lEj +lEj +lEj iDq -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -160458,15 +160492,15 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe hen hen @@ -160478,23 +160512,23 @@ hen hen hen hen -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj oSk qGN dTe -jsy -jsy -jsy +sPy +sPy +sPy gYW gYW wjI @@ -160715,15 +160749,15 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe hen @@ -160735,24 +160769,24 @@ hen hen hen hen -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fAV aIB dTe eyf eyf -jsy -jsy +sPy +sPy gYW wjI wjI @@ -160779,9 +160813,9 @@ qaE klJ lSD jGB -lyP +lEj pfg -lyP +lEj ibx ftX piS @@ -160972,15 +161006,15 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe hen @@ -160991,15 +161025,15 @@ hen hen hen hen -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW gYW gYW @@ -161009,7 +161043,7 @@ pjn aWJ aWJ hwW -jsy +sPy gYW tXp gYW @@ -161038,7 +161072,7 @@ jGB jGB cOD uet -lyP +lEj ibx lgp hzF @@ -161229,15 +161263,15 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe hen @@ -161248,15 +161282,15 @@ hen hen hen hen -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW gnx dTe @@ -161487,14 +161521,14 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe hen @@ -161505,15 +161539,15 @@ hen hen hen hen -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW rLJ srv @@ -161523,7 +161557,7 @@ pLE tXp aWJ aIB -jsy +sPy gYW tXp gYW @@ -161744,14 +161778,14 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe fYe @@ -161762,15 +161796,15 @@ dsG fYe fYe fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW gYW hCT @@ -162002,33 +162036,33 @@ oID jVV jVV jVV -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj dsG -lyP -lyP -lyP -fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +fYe +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW gYW gYW @@ -162274,20 +162308,20 @@ ttt oaF ttt ttt -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj nzw aih fne @@ -162535,16 +162569,16 @@ ttt ttt ttt ttt -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj nzw pqB fne @@ -162792,23 +162826,23 @@ bjn bjn rRY ttt -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj nzw aih qCf ycw ksf hmF -jsy +sPy gYW wAv gYW @@ -163049,23 +163083,23 @@ tMp bjn nen ttt -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fne dTe dTe nMj nfj -jsy +sPy gYW wAv wAv @@ -163306,23 +163340,23 @@ wcH fib fDf ttt -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj lIZ dTe fne dTe -jsy +sPy gYW kIB gYW @@ -163579,7 +163613,7 @@ ycN wbT wub uMY -jsy +sPy gYW gYW gYW @@ -163836,9 +163870,9 @@ ycN unk unk unk -lyP -lyP -lyP +lEj +lEj +lEj gYW uSe cjp @@ -164090,12 +164124,12 @@ cHh kNJ vaC ycN -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj gYW uSe cjp @@ -164347,12 +164381,12 @@ hqg ukY vaC ycN -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj gYW gYW gYW @@ -164604,14 +164638,14 @@ kqS rtN jlI ycN -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW wyK tuR @@ -164651,7 +164685,7 @@ hzF hzF hzF hzF -lyP +lEj jVV jVV jVV @@ -164861,14 +164895,14 @@ brV hQA yhW ycN -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gYW kdc jYp @@ -164891,24 +164925,24 @@ mBw qxU fAT apQ -lyP -lyP +lEj +lEj gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -165118,14 +165152,14 @@ daK wad vaC ycN -lyP -lyP -lyP +lEj +lEj +lEj gMk gMk -lyP -lyP -lyP +lEj +lEj +lEj gYW imU mhD @@ -165148,26 +165182,26 @@ hPP rhW kNO apQ -lyP +lEj gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -165375,14 +165409,14 @@ hqg ukY vaC ycN -lyP +lEj gMk gMk gMk gMk uet -lyP -lyP +lEj +lEj gYW gYW gYW @@ -165405,13 +165439,13 @@ apQ kOE rMQ apQ -lyP -lyP +lEj +lEj gMk gMk -lyP -lyP -lyP +lEj +lEj +lEj lAj lAj lAj @@ -165425,7 +165459,7 @@ lAj lAj lAj lAj -lyP +lEj fYe hhX hhX @@ -165639,9 +165673,9 @@ gMk gMk gMk gMk -lyP -lyP -jsy +lEj +lEj +sPy aWJ dTe dTe @@ -165662,13 +165696,13 @@ apQ kOE uDd apQ -lyP -lyP +lEj +lEj gMk gMk gMk -lyP -lyP +lEj +lEj lAj pBg xJT @@ -165682,7 +165716,7 @@ vmB ctv rPC lAj -lyP +lEj fYe hhX hhX @@ -165889,15 +165923,15 @@ vaC vaC vaC ycN -lyP -lyP +lEj +lEj gMk gMk gMk gMk gMk -lyP -lyP +lEj +lEj oSk nlZ dTe @@ -165919,13 +165953,13 @@ apQ kOE rMQ apQ -lyP -lyP +lEj +lEj gMk gMk gMk -lyP -lyP +lEj +lEj lAj ebz sbo @@ -165939,7 +165973,7 @@ uBn rts gdZ lAj -lyP +lEj fYe hhX hhX @@ -166115,7 +166149,7 @@ hhX hhX hhX hhX -lyP +lEj juw prr juw @@ -166146,16 +166180,16 @@ ycN ycN ycN ycN -lyP -lyP -lyP +lEj +lEj +lEj gMk gMk gMk gMk -lyP -lyP -jsy +lEj +lEj +sPy aWJ hUN dTe @@ -166176,9 +166210,9 @@ apQ kOE rMQ apQ -lyP -lyP -lyP +lEj +lEj +lEj gMk gMk lAj @@ -166196,7 +166230,7 @@ ajS ajS gdZ lAj -lyP +lEj fYe hhX hhX @@ -166372,51 +166406,51 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj dsG -lyP -lyP +lEj +lEj dsG dsG -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk -lyP -lyP -lyP -lyP -jsy +lEj +lEj +lEj +lEj +sPy aWJ fAJ qaS -jsy +sPy apQ hCb rwX @@ -166433,9 +166467,9 @@ oNo vRt pXB apQ -lyP -lyP -lyP +lEj +lEj +lEj gMk rcP lAj @@ -166453,7 +166487,7 @@ ajS ajS gdZ lAj -lyP +lEj fYe hhX hhX @@ -166637,43 +166671,43 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj uet xUx -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj oSk lhO oSk oSk -jsy +sPy apQ dzQ vjT @@ -166690,8 +166724,8 @@ anZ jIf eaS apQ -lyP -lyP +lEj +lEj uet gMk obD @@ -166710,8 +166744,8 @@ ajS ajS bag lAj -lyP -lyP +lEj +lEj hhX hhX hhX @@ -166896,41 +166930,41 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj xUx uet -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk gMk gMk gMk -lyP -lyP +lEj +lEj apQ qEn tRl @@ -166947,8 +166981,8 @@ rwU sTl apQ apQ -lyP -lyP +lEj +lEj gMk alx obD @@ -166967,8 +167001,8 @@ ajS ajS gdZ lAj -lyP -lyP +lEj +lEj hhX hhX hhX @@ -167153,41 +167187,41 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj unk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk -lyP -lyP +lEj +lEj gMk gMk gMk gMk uet -lyP -lyP +lEj +lEj apQ apQ apQ @@ -167204,8 +167238,8 @@ apQ apQ apQ apQ -lyP -lyP +lEj +lEj gMk gMk sDP @@ -167224,7 +167258,7 @@ ajS ajS gdZ lAj -lyP +lEj fYe hhX hhX @@ -167412,58 +167446,58 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj gMk his gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk -lyP +lEj gMk gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk vDa rBU @@ -167481,7 +167515,7 @@ ajS ajS gdZ lAj -lyP +lEj fYe hhX hhX @@ -167669,57 +167703,57 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj voq jmp gMk xkI cGl -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj vDa vDa vDa @@ -167738,7 +167772,7 @@ ajS ajS gdZ lAj -lyP +lEj hhX hhX hhX @@ -167926,56 +167960,56 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj syX cGl gMk syX gMk cGl -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk gMk -lyP +lEj gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk vDa gMk @@ -167995,7 +168029,7 @@ ajS ajS gdZ lAj -lyP +lEj hhX hhX hhX @@ -168183,11 +168217,11 @@ hhX umg asZ umg -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj ura syX qIA @@ -168195,22 +168229,22 @@ cGl gMk syX qIA -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk -lyP -lyP +lEj +lEj gMk gMk gMk @@ -168218,25 +168252,25 @@ gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj mUQ gMk gMk -lyP +lEj gMk vDa gMk -lyP +lEj lAj lAj lAj @@ -168252,7 +168286,7 @@ ajS ajS lxR lAj -lyP +lEj hhX hhX hhX @@ -168440,11 +168474,11 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj aHe gMk xkI @@ -168452,39 +168486,39 @@ syX jmp gMk cGl -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk iEl gMk @@ -168492,10 +168526,10 @@ gMk vDa vDa vDa -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj lAj fiI rts @@ -168509,10 +168543,10 @@ mRd sbo gdZ lAj -lyP +lEj fYe fYe -lyP +lEj hhX hhX hhX @@ -168697,50 +168731,50 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj syX cGl gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj uet gMk iEl @@ -168748,11 +168782,11 @@ gMk gMk vDa gMk -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj lAj hXu xQe @@ -168769,7 +168803,7 @@ lAj fYe fYe fYe -lyP +lEj hhX hhX hhX @@ -168954,62 +168988,62 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj pfg pfg pfg -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk -lyP +lEj gMk uet -lyP -lyP +lEj +lEj gMk gMk -lyP +lEj gMk gMk mUQ -lyP -lyP +lEj +lEj vDa uet -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj lAj lAj lAj @@ -169026,7 +169060,7 @@ lAj fYe fYe fYe -lyP +lEj hhX hhX hhX @@ -169211,40 +169245,40 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk gMk @@ -169257,33 +169291,33 @@ gMk gMk gMk gMk -lyP -lyP -lyP +lEj +lEj +lEj vDa -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe fYe fYe -lyP +lEj hhX hhX hhX @@ -169468,38 +169502,38 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj uet gMk gMk gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk gMk gMk @@ -169514,32 +169548,32 @@ gMk gMk gMk gMk -lyP -lyP -lyP +lEj +lEj +lEj vDa vDa -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe -lyP +lEj hhX hhX hhX @@ -169723,11 +169757,11 @@ mxt hhX hhX hhX -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj gvF gvF gvF @@ -169737,25 +169771,25 @@ gvF gvF gvF gvF -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj xUx uet -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj gMk nyq gMk uQl gMk gMk -lyP -lyP +lEj +lEj uet gMk gMk @@ -169763,37 +169797,37 @@ gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj gMk gMk gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj vDa -lyP -lyP +lEj +lEj mUQ -lyP +lEj gMk gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -169980,9 +170014,9 @@ mxt hhX hhX hhX -lyP -lyP -lyP +lEj +lEj +lEj gvF gvF gvF @@ -169994,42 +170028,42 @@ tqD mMO fhP gvF -lyP +lEj bKL gMk gMk rZg gMk gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk gMk gqm gMk gMk gMk -lyP -lyP +lEj +lEj gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk -lyP -lyP +lEj +lEj woL woL cMJ @@ -170038,19 +170072,19 @@ stz stz gMk gMk -lyP +lEj gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -170259,55 +170293,55 @@ gMk gMk gMk fVf -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj rBv gMk tbp gMk gMk -lyP +lEj gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj uet -lyP -lyP +lEj +lEj gMk -lyP -lyP +lEj +lEj woL eAk cMJ stz jPq woL -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj uet gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -170508,7 +170542,7 @@ gOc gOc gOc gvF -lyP +lEj xUx gMk gMk @@ -170516,27 +170550,27 @@ gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj gMk gMk -lyP +lEj uet -lyP +lEj mNZ gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj ent gMk gMk @@ -170555,16 +170589,16 @@ ltS ltS ltS ltS -lyP +lEj gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -170765,8 +170799,8 @@ gOc gOc gOc gvF -lyP -lyP +lEj +lEj uet gMk tui @@ -170774,15 +170808,15 @@ gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj mNZ mNZ gMk @@ -170790,17 +170824,17 @@ gMk gMk gMk mNZ -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj gMk gMk gMk gMk gMk -lyP +lEj woL sVT cMJ @@ -170813,15 +170847,15 @@ lQL aoy ltS mpc -lyP +lEj gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -171005,7 +171039,7 @@ mwe dUl bGg sJT -lyP +lEj hhX hhX hhX @@ -171022,8 +171056,8 @@ gOc gOc gOc gvF -lyP -lyP +lEj +lEj hyM gMk cgu @@ -171032,14 +171066,14 @@ gMk gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj mNZ mNZ mNZ @@ -171047,8 +171081,8 @@ gMk gMk gMk gMk -lyP -lyP +lEj +lEj kxB kxB kxB @@ -171059,7 +171093,7 @@ eOx kxB kxB bkk -jfO +bIS cMJ msi ppD @@ -171072,13 +171106,13 @@ lls mpc gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -171262,7 +171296,7 @@ rBZ lPi meH sJT -lyP +lEj hhX hhX hhX @@ -171279,24 +171313,24 @@ gOc gOc gOc gvF -lyP -lyP -lyP +lEj +lEj +lEj gMk cgu yjm -lyP -lyP +lEj +lEj gMk gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj mNZ mNZ mNZ @@ -171304,8 +171338,8 @@ mNZ gMk gMk gMk -lyP -lyP +lEj +lEj kxB hhX hhX @@ -171328,17 +171362,17 @@ pVB pHr cXo tOw -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -171502,7 +171536,7 @@ hhX hhX cxg cxg -lyP +lEj imZ mQE fTj @@ -171519,13 +171553,13 @@ tww jlL sJT ogb -lyP -lyP +lEj +lEj hhX fYe mNZ mNZ -lyP +lEj vfJ fhN obA @@ -171538,22 +171572,22 @@ cMZ cMZ cMZ cMZ -lyP +lEj uet cgu -lyP -lyP +lEj +lEj uet gMk qIA gMk -lyP -lyP -lyP +lEj +lEj +lEj uKm -lyP -lyP -lyP +lEj +lEj +lEj mNZ mNZ gMk @@ -171561,8 +171595,8 @@ mNZ mNZ gMk gMk -lyP -lyP +lEj +lEj kxB hhX xAy @@ -171586,16 +171620,16 @@ mry mpc gMk yeS -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -171759,8 +171793,8 @@ hhX hhX cxg pvT -lyP -lyP +lEj +lEj mQE vNg kWb @@ -171775,9 +171809,9 @@ kWb sae sJT sJT -lyP -lyP -lyP +lEj +lEj +lEj hhX fYe mNZ @@ -171799,18 +171833,18 @@ ipx dVt cdl ipx -lyP -lyP +lEj +lEj gMk gMk gMk gMk -lyP -lyP +lEj +lEj kTV gMk -lyP -lyP +lEj +lEj fJz gMk gMk @@ -171843,16 +171877,16 @@ cuW cuW cuW cuW -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -172015,9 +172049,9 @@ hhX hhX hhX hhX -lyP -lyP -lyP +lEj +lEj +lEj mQE lJv kWb @@ -172032,7 +172066,7 @@ kWb wYj pdo sJT -lyP +lEj uif hhX hhX @@ -172057,22 +172091,22 @@ dOg kqf ipx ipx -lyP +lEj gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj xUx gMk gMk -lyP -lyP -lyP +lEj +lEj +lEj gMk gMk -lyP -lyP +lEj +lEj gMk gMk dtQ @@ -172102,14 +172136,14 @@ gun cuW cuW cuW -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -172272,9 +172306,9 @@ hhX hhX hhX hhX -lyP -lyP -lyP +lEj +lEj +lEj kWb kWb kWb @@ -172289,8 +172323,8 @@ kWb kWb kWb kWb -lyP -lyP +lEj +lEj hhX hhX fYe @@ -172318,19 +172352,19 @@ xCX gMk xUx uet -lyP -lyP +lEj +lEj gMk ceN gMk gMk gMk -lyP +lEj xKx -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk dtQ gMk @@ -172359,14 +172393,14 @@ yhy dlX iUq cuW -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -172529,9 +172563,9 @@ hhX hhX hhX hhX -lyP -lyP -lyP +lEj +lEj +lEj kWb kWb kWb @@ -172545,9 +172579,9 @@ lRk kWb kWb kWb -lyP -lyP -lyP +lEj +lEj +lEj hhX hhX fYe @@ -172575,22 +172609,22 @@ xCX gMk gMk gMk -lyP -lyP -lyP +lEj +lEj +lEj lmn gMk -lyP +lEj gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk -lyP -lyP +lEj +lEj dtQ -lyP +lEj kxB hhX xAy @@ -172616,17 +172650,17 @@ pMw nME iJb cuW -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -172786,8 +172820,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj kWb kWb kWb @@ -172803,8 +172837,8 @@ qWB kWb kWb kWb -lyP -lyP +lEj +lEj hhX hhX hhX @@ -172828,26 +172862,26 @@ dRh xBU xje ipx -lyP +lEj gMk gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj xIP xIP uKm elE -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk vkv -lyP +lEj dtQ -lyP +lEj kxB hhX cLf @@ -172873,18 +172907,18 @@ jGP cYe qbZ cuW -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -173043,8 +173077,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj kWb kWb kWb @@ -173060,8 +173094,8 @@ vAB kWb kWb kWb -lyP -lyP +lEj +lEj hhX hhX hhX @@ -173089,15 +173123,15 @@ uKm mWS gMk ent -lyP +lEj gMk gMk gMk uet cPE gMk -lyP -lyP +lEj +lEj gMk gMk gMk @@ -173136,10 +173170,10 @@ aWD uYG uYG uYG -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj uYG uYG uYG @@ -173301,7 +173335,7 @@ hhX hhX hhX unk -lyP +lEj kWb kWb kWb @@ -173317,8 +173351,8 @@ vAB kWb kWb kWb -lyP -lyP +lEj +lEj hhX hhX hhX @@ -173342,20 +173376,20 @@ fFg fFg dhR ipx -lyP +lEj uet gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk xUx -lyP +lEj dsF gMk -lyP -lyP +lEj +lEj gMk gMk gMk @@ -173574,8 +173608,8 @@ qDl aKU kWb kWb -lyP -lyP +lEj +lEj hhX hhX fYe @@ -173599,22 +173633,22 @@ dVt dVt ipx ipx -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj gMk gMk xUx -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk gMk dtQ @@ -173661,8 +173695,8 @@ tNE cEG cEG uYG -lyP -lyP +lEj +lEj jVV jVV jGa @@ -173815,7 +173849,7 @@ hhX hhX hhX unk -lyP +lEj kWb kWb kWb @@ -173831,8 +173865,8 @@ vAB kWb kWb kWb -lyP -lyP +lEj +lEj hhX hhX fYe @@ -173855,22 +173889,22 @@ vRA vRA vRA ixU -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj uet -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj xKo xKo xKo @@ -173918,8 +173952,8 @@ tNE tNE dYZ uYG -lyP -lyP +lEj +lEj jVV hhX hhX @@ -174071,8 +174105,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj kWb kWb kWb @@ -174088,7 +174122,7 @@ vAB kWb kWb kWb -lyP +lEj hhX hhX hhX @@ -174112,9 +174146,9 @@ vRA vRA vRA ixU -lyP -lyP -lyP +lEj +lEj +lEj kxB uKm uKm @@ -174122,12 +174156,12 @@ uKm uKm uKm uKm -lyP +lEj gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj xKo rhn lWF @@ -174328,8 +174362,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj kWb kWb kWb @@ -174377,14 +174411,14 @@ iHO iHO jZY ouE -lyP +lEj lzE -lyP +lEj gMk gMk uet -lyP -lyP +lEj +lEj xKo ljN eqC @@ -174586,7 +174620,7 @@ hhX hhX hhX hhX -lyP +lEj kWb kWb kWb @@ -174636,12 +174670,12 @@ uKm uKm uKm uKm -lyP -lyP +lEj +lEj gMk gMk -lyP -lyP +lEj +lEj xKo fEQ eeB @@ -174844,7 +174878,7 @@ hhX hhX hhX hhX -lyP +lEj kWb kWb kWb @@ -174893,12 +174927,12 @@ twx twx twx twx -lyP -lyP +lEj +lEj gMk gMk -lyP -lyP +lEj +lEj xKo xKo xKo @@ -175101,8 +175135,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj kWb kWb kWb @@ -175150,12 +175184,12 @@ twx twx twx twx -lyP -lyP +lEj +lEj gMk gMk -lyP -lyP +lEj +lEj xKo tmR xKo @@ -175359,16 +175393,16 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj kWb kWb kWb kWb kWb -lyP +lEj hhX hhX hhX @@ -175407,12 +175441,12 @@ twx twx twx twx -lyP +lEj uKm aXH gMk xUx -lyP +lEj xKo nqu ikD @@ -175458,11 +175492,11 @@ nUy uYG uYG uYG -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj jVV pnS hhX @@ -175617,8 +175651,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj hhX hhX jVV @@ -175665,11 +175699,11 @@ twx twx twx uKm -lyP +lEj gMk -lyP -lyP -lyP +lEj +lEj +lEj xKo xKo xKo @@ -175716,10 +175750,10 @@ uYG hhX hhX hhX -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj jVV hhX vUj @@ -175924,9 +175958,9 @@ twx uKm xwA gMk -lyP -lyP -lyP +lEj +lEj +lEj xKo dor lVx @@ -175974,8 +176008,8 @@ hhX hhX hhX hhX -lyP -lyP +lEj +lEj hhX jVV hhX @@ -176181,9 +176215,9 @@ mxq uKm gMk uet -lyP -lyP -lyP +lEj +lEj +lEj xKo lVx bkk @@ -176224,14 +176258,14 @@ vzC aWD wlV aWD -lyP -lyP +lEj +lEj mUQ rGg rGg mUQ -lyP -lyP +lEj +lEj hhX hhX jVV @@ -176431,15 +176465,15 @@ ixU dtQ dtQ gMk -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj xUx -lyP -lyP -lyP +lEj +lEj +lEj ent cIN lVx @@ -176481,13 +176515,13 @@ xwm sCp sCp aWD -lyP -lyP -lyP +lEj +lEj +lEj tOG ufA -lyP -lyP +lEj +lEj uif hhX hhX @@ -176689,14 +176723,14 @@ dtQ gMk gMk gMk -lyP +lEj gMk -lyP +lEj uKm aXH lgL rQP -lyP +lEj gMk vWx dor @@ -176738,13 +176772,13 @@ xwm mog mog aWD -lyP -lyP -lyP +lEj +lEj +lEj uif fYe -lyP -lyP +lEj +lEj hhX hhX hhX @@ -176995,12 +177029,12 @@ muB mog mog aWD -lyP -lyP -lyP +lEj +lEj +lEj fYe fYe -lyP +lEj mUQ jVV hhX @@ -177252,8 +177286,8 @@ mog mog cYw aWD -lyP -lyP +lEj +lEj fYe fYe fYe @@ -177464,9 +177498,9 @@ sqL rlw khP rlw -lyP -lyP -lyP +lEj +lEj +lEj xKo wlR lNe @@ -177509,12 +177543,12 @@ mog mog mog aWD -lyP -lyP -lyP +lEj +lEj +lEj fYe -lyP -lyP +lEj +lEj mUQ eCF hhX @@ -177716,14 +177750,14 @@ ixU gMk gMk gMk -lyP -lyP +lEj +lEj sqL uoY sqL -lyP -lyP -lyP +lEj +lEj +lEj xKo jBG oEN @@ -177766,14 +177800,14 @@ mog mog mog aWD -lyP -lyP -lyP +lEj +lEj +lEj fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -177971,16 +178005,16 @@ xbC cIE ixU gMk -lyP +lEj gMk -lyP -lyP +lEj +lEj sqL uoY sqL gMk -lyP -nGi +lEj +poh woL iNv xKo @@ -178023,14 +178057,14 @@ bkW bkW bkW aWD -lyP -lyP +lEj +lEj fYe fYe fYe -lyP -lyP -lyP +lEj +lEj +lEj hhX hhX hhX @@ -178227,17 +178261,17 @@ lsx idr lsx hEi -lyP -lyP +lEj +lEj iOE -lyP -lyP +lEj +lEj sqL uoY gbP fWJ -nGi -nGi +poh +poh wPU uab qhG @@ -178280,13 +178314,13 @@ tel tel lhg uFC -lyP -lyP +lEj +lEj fYe -lyP +lEj fYe -lyP -lyP +lEj +lEj fYe hhX hhX @@ -178485,10 +178519,10 @@ cHn sAN hEi hEi -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj sqL uoY sqL @@ -178537,13 +178571,13 @@ tGb tGb xlG uFC -lyP -lyP +lEj +lEj fYe -lyP +lEj fYe -lyP -lyP +lEj +lEj fYe hhX hhX @@ -178744,8 +178778,8 @@ uaY iFN iFN iFN -lyP -lyP +lEj +lEj sqL uoY sqL @@ -178775,7 +178809,7 @@ pMG lXi ldl iZa -lyP +lEj uFC xlG tGb @@ -178794,13 +178828,13 @@ tGb tGb xlG uFC -lyP -lyP +lEj +lEj fYe -lyP +lEj fYe -lyP -lyP +lEj +lEj fYe hhX hhX @@ -179002,11 +179036,11 @@ iFN ekR iFN iFN -lyP +lEj rlw eGM rlw -lyP +lEj dsP nQs ohk @@ -179032,7 +179066,7 @@ lRU wZb vxp iZa -lyP +lEj uFC xlG tGb @@ -179051,13 +179085,13 @@ tGb tGb xlG uFC -lyP -lyP +lEj +lEj fYe tOG fYe -lyP -lyP +lEj +lEj uif hhX hhX @@ -179259,12 +179293,12 @@ qJN uHQ szk iFN -lyP +lEj sqL uoY sqL -lyP -nGi +lEj +poh alu ohk jMN @@ -179289,7 +179323,7 @@ qWT grz grz grz -lyP +lEj uFC xlG tGb @@ -179308,13 +179342,13 @@ tGb tGb xlG uFC -lyP +lEj uKm uKm iDu uKm uKm -lyP +lEj fYe hhX hhX @@ -179516,13 +179550,13 @@ kHf xkL uSX iFN -lyP +lEj sqL uoY sqL -lyP -nGi -nGi +lEj +poh +poh hFa tUc qhG @@ -179545,8 +179579,8 @@ uLS uyZ esc grz -lyP -lyP +lEj +lEj uFC xlG tGb @@ -179565,13 +179599,13 @@ tGb tGb xlG uFC -lyP -lyP +lEj +lEj iJm iJm iJm uKm -lyP +lEj fYe hhX hhX @@ -179773,16 +179807,16 @@ aXl fyJ aXl iFN -lyP +lEj sqL uoY sqL -lyP -lyP -lyP +lEj +lEj +lEj dsP -nGi -nGi +poh +poh stP tNK vkp @@ -179802,8 +179836,8 @@ urI kdE xjL grz -lyP -lyP +lEj +lEj uFC xlG tGb @@ -179822,7 +179856,7 @@ tGb tGb xlG uFC -lyP +lEj fYe fYe iJm @@ -180030,16 +180064,16 @@ mZn oND iem iFN -lyP +lEj sqL uoY sqL gMk -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj qhG pql qhG @@ -180059,8 +180093,8 @@ rAP odk jDl grz -lyP -lyP +lEj +lEj uFC pFg gsg @@ -180079,13 +180113,13 @@ tGb tGb xlG uFC -lyP +lEj fYe fYe fYe iJm uKm -lyP +lEj fYe hhX hhX @@ -180287,15 +180321,15 @@ rEv vjQ evN iFN -lyP +lEj sqL uoY sqL gMk -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe vnb jCm @@ -180317,7 +180351,7 @@ odk kOU grz fYe -lyP +lEj uFC bMb xlG @@ -180336,13 +180370,13 @@ tGb tGb xgN uFC -lyP -lyP +lEj +lEj fYe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj fYe hhX hhX @@ -180544,7 +180578,7 @@ iFN iFN iFN iFN -lyP +lEj eIO ehY rlw @@ -180593,13 +180627,13 @@ tGb tGb xlG uFC -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hen -lyP -lyP +lEj +lEj hhX hhX hhX @@ -180797,11 +180831,11 @@ wkG wkG rzI moe -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj rlw wvS uCp @@ -180850,13 +180884,13 @@ tGb tGb xlG uFC -lyP +lEj hen hen hen hen -lyP -lyP +lEj +lEj hhX hhX hhX @@ -181054,10 +181088,10 @@ jYT jYT rIJ moe -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX rlw sqL @@ -181112,8 +181146,8 @@ hen hen hen hen -lyP -lyP +lEj +lEj hhX hhX hhX @@ -181311,9 +181345,9 @@ wkG wkG wkG moe -lyP -lyP -lyP +lEj +lEj +lEj hhX hhX jVV @@ -181370,7 +181404,7 @@ hen hen hen kxB -lyP +lEj fYe hhX hhX @@ -181567,9 +181601,9 @@ jYT wkG ivx ivx -lyP -lyP -lyP +lEj +lEj +lEj hhX hhX hhX @@ -181626,8 +181660,8 @@ hen hen hen hen -lyP -lyP +lEj +lEj fYe hhX hhX @@ -181825,8 +181859,8 @@ moe rGg rGg fqD -lyP -lyP +lEj +lEj hhX hhX hhX @@ -181848,18 +181882,18 @@ tAo vbd vbd fYe -lyP -lyP +lEj +lEj hhX nbk smD pBC hhX -lyP -lyP -lyP +lEj +lEj +lEj fYe -lyP +lEj uFC uFC uFC @@ -181883,8 +181917,8 @@ hen hen hen hen -lyP -lyP +lEj +lEj fYe hhX hhX @@ -182105,42 +182139,42 @@ uLR avQ uLR tAo -lyP -lyP +lEj +lEj hhX hHZ mxt eRO hhX -lyP -lyP -lyP -fYe -lyP -lyP -hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +fYe +lEj +lEj +hhX +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hen hen hen hen hen -lyP +lEj fYe uif hhX @@ -182363,41 +182397,41 @@ fYe uLR fYe fYe -lyP -lyP +lEj +lEj hhX mxt hhX hhX -lyP -lyP -lyP -fYe -lyP -lyP -hhX -hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +fYe +lEj +lEj +hhX +hhX +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hen hen hen hen hen -lyP +lEj fYe hhX hhX @@ -182612,11 +182646,11 @@ rlw uVI uVI mUQ -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj mUQ uVI uVI @@ -182626,35 +182660,35 @@ hhX mxt hhX hhX -lyP -lyP +lEj +lEj fYe fYe -lyP -lyP +lEj +lEj hhX hhX hhX -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hen hen hen hen hen hen -lyP +lEj fYe hhX hhX @@ -182868,13 +182902,13 @@ uoY sqL fYe fYe -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj fYe fYe fYe @@ -182887,31 +182921,31 @@ fYe fYe fYe fYe -lyP +lEj hhX hhX hhX hhX -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk gMk -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hen hen hen hen -lyP -lyP +lEj +lEj fYe hhX hhX @@ -183128,9 +183162,9 @@ hhX jVV hhX hhX -lyP +lEj hhX -lyP +lEj hhX hhX hhX @@ -183149,25 +183183,25 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj gMk xKx -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hen hen -lyP -lyP +lEj +lEj uif fYe hhX @@ -183405,21 +183439,21 @@ rjp hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj bZr rjp rjp @@ -183662,21 +183696,21 @@ rjp rjp rjp bZr -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -183920,20 +183954,20 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX hhX @@ -184178,18 +184212,18 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj +lEj +lEj hhX hhX -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX @@ -184436,10 +184470,10 @@ hhX hhX hhX hhX -lyP -lyP -lyP -lyP +lEj +lEj +lEj +lEj hhX hhX hhX diff --git a/code/__DEFINES/mining.dm b/code/__DEFINES/mining.dm index 6c660299563d..ea17fe8b68db 100644 --- a/code/__DEFINES/mining.dm +++ b/code/__DEFINES/mining.dm @@ -44,8 +44,6 @@ /// The number of points a miner gets for discovering a vent, multiplied by BOULDER_SIZE when completing a wave defense minus the discovery bonus. #define MINER_POINT_MULTIPLIER 100 -/// The multiplier that gets applied for automatically generated mining points. -#define MINING_POINT_MACHINE_MULTIPLIER 0.5 // String defines to use with CaveGenerator presets for what ore breakdown to use. #define OREGEN_PRESET_LAVALAND "lavaland" diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 8af05df6ca07..0df7396b5447 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -318,3 +318,5 @@ #define SPARK_ACT_ENCLOSED (1 << 0) /// We're in a large container or something, so decrease the power of bootleg explosives like welding fuel #define SPARK_ACT_WEAKEN_COMMON (1 << 1) +/// Chemical threshold that industrial waste needs to start eating floors. +#define WASTE_REACTION_THRESHOLD 10 diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index 289e600c509c..3f3af944f68b 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -20,6 +20,11 @@ /// Ex - if this was set to "3", our component would only request the first 3 reagents found, even if more are available var/distinct_reagent_cap = INFINITY + ///Extra offset on supply pipe. + var/supply_offset = 0 + ///Extra offset on demand pipe. + var/demand_offset = 0 + /datum/component/plumbing/Initialize(ducting_layer) if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE @@ -168,9 +173,7 @@ if(tile_covered) return - //Copied from ducts handle_layer() var/offset - switch(ducting_layer) if(FIRST_DUCT_LAYER) offset = -10 @@ -183,16 +186,36 @@ if(FIFTH_DUCT_LAYER) offset = 10 - var/duct_x = offset - parent_movable.pixel_x - parent_movable.pixel_w - var/duct_y = offset - parent_movable.pixel_y - parent_movable.pixel_z var/duct_layer = PLUMBING_PIPE_VISIBILE_LAYER + ducting_layer * 0.0003 for(var/direction in GLOB.cardinals) var/color + var/duct_x = offset - parent_movable.pixel_x - parent_movable.pixel_w + var/duct_y = offset - parent_movable.pixel_y - parent_movable.pixel_z if(direction & initial(demand_connects)) color = demand_color + if(demand_offset) + switch(parent_movable.dir) + if(NORTH) + duct_y -= demand_offset + if(SOUTH) + duct_y += demand_offset + if(EAST) + duct_x -= demand_offset + if(WEST) + duct_x += demand_offset else if(direction & initial(supply_connects)) color = supply_color + if(supply_offset) + switch(parent_movable.dir) + if(NORTH) + duct_y += supply_offset + if(SOUTH) + duct_y -= supply_offset + if(EAST) + duct_x += supply_offset + if(WEST) + duct_x -= supply_offset else continue @@ -218,6 +241,7 @@ new_supply_connects |= turn(direction, angle) demand_connects = new_demand_connects supply_connects = new_supply_connects + parent_obj.update_appearance(UPDATE_OVERLAYS) if(length(ducts)) disable() diff --git a/code/datums/components/plumbing/boulder_reactions.dm b/code/datums/components/plumbing/boulder_reactions.dm new file mode 100644 index 000000000000..56496ea803c4 --- /dev/null +++ b/code/datums/components/plumbing/boulder_reactions.dm @@ -0,0 +1,30 @@ +/** + * The boulder machines take in many types of chems, but should only ever eject "waste" chems, + */ +/datum/component/plumbing/boulder_reactions + demand_connects = NORTH + supply_connects = SOUTH + supply_offset = 4 + demand_offset = 4 + +/datum/component/plumbing/boulder_reactions/Initialize(ducting_layer) + if(!istype(parent, /obj/machinery/bouldertech/refinery)) + return COMPONENT_INCOMPATIBLE + return ..() + +/datum/component/plumbing/boulder_reactions/can_give(amount, reagent, datum/ductnet/net) + if(amount <= 0 || !reagents.total_volume || !reagent) + return FALSE + + var/obj/machinery/bouldertech/refinery/the_refinery = parent + var/list/datum/reagents/boosters = the_refinery.booster_list + + if(istype(amount, the_refinery.waste_chemical)) + return TRUE //Always allow waste chemicals to leave. + + if(!length(boosters)) + return ..() + for(var/datum/chem as anything in boosters) + if(chem.type == reagent) // Need to check strict subtype since most acids are subtypes of eachother. + return FALSE + return ..() diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index cd9d7fd862d1..142f76af7684 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -207,6 +207,9 @@ extra_range = MEDIUM_RANGE_SOUND_EXTRARANGE falloff_exponent = 4 +/datum/looping_sound/soup/toxic + volume = 40 + /datum/looping_sound/cryo_cell mid_sounds = list( 'sound/machines/cryo/cryo_1.ogg', diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 5d34b97c75d8..2c7f8093c74c 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -69,8 +69,10 @@ Simple datum which is instanced once per type and is used for every object of sa var/mat_rust_resistance = RUST_RESISTANCE_ORGANIC /// How likely this mineral is to be found in a boulder during mining. var/mineral_rarity = MATERIAL_RARITY_COMMON - /// How many points per units of ore does this grant? + /// How many points per units of ore does this grant? This is used by ore in the ORM, NOT for boulder machinery due to the automated nature. var/points_per_unit = 1 + /// How many points per unit does this ore grant when processed by a smelter/refinery? + var/points_per_boulder_unit = 1 // Sound/icon stats, not inherited /// Can be used to override the sound items make, lets add some SLOSHing. diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 4284503cede4..e859ed88073b 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -20,6 +20,7 @@ mat_rust_resistance = RUST_RESISTANCE_BASIC mineral_rarity = MATERIAL_RARITY_COMMON points_per_unit = 1 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 1 / SHEET_MATERIAL_AMOUNT minimum_value_override = 0 tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_COMMON @@ -57,6 +58,7 @@ tradable_base_quantity = MATERIAL_QUANTITY_COMMON mineral_rarity = MATERIAL_RARITY_COMMON points_per_unit = 1 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 1 / SHEET_MATERIAL_AMOUNT texture_layer_icon_state = "shine" /datum/material/glass/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) @@ -99,6 +101,7 @@ tradable_base_quantity = MATERIAL_QUANTITY_UNCOMMON mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS points_per_unit = 16 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 3.5 / SHEET_MATERIAL_AMOUNT texture_layer_icon_state = "shine" /datum/material/silver/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) @@ -130,6 +133,7 @@ tradable_base_quantity = MATERIAL_QUANTITY_RARE mineral_rarity = MATERIAL_RARITY_PRECIOUS points_per_unit = 18 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 4 / SHEET_MATERIAL_AMOUNT texture_layer_icon_state = "shine" /datum/material/gold/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) @@ -163,6 +167,7 @@ tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC mineral_rarity = MATERIAL_RARITY_RARE points_per_unit = 50 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 10 / SHEET_MATERIAL_AMOUNT /datum/material/diamond/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() @@ -195,6 +200,7 @@ tradable_base_quantity = MATERIAL_QUANTITY_RARE mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS points_per_unit = 30 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 3.5 / SHEET_MATERIAL_AMOUNT /// Adds firestacks on hit (Still needs support to turn into gas on destruction) /datum/material/plasma @@ -219,6 +225,7 @@ value_per_unit = 200 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_PRECIOUS points_per_unit = 15 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 2 / SHEET_MATERIAL_AMOUNT /datum/material/plasma/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() @@ -257,6 +264,7 @@ value_per_unit = 300 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_RARE points_per_unit = 50 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 10 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC texture_layer_icon_state = "shine" @@ -305,6 +313,7 @@ value_per_unit = 1000 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED points_per_unit = 60 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 15 / SHEET_MATERIAL_AMOUNT /datum/material/bananium/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() @@ -360,6 +369,7 @@ sheet_type = /obj/item/stack/sheet/mineral/titanium ore_type = /obj/item/stack/ore/titanium value_per_unit = 125 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 3 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_UNCOMMON mat_rust_resistance = RUST_RESISTANCE_TITANIUM @@ -390,6 +400,7 @@ value_per_unit = 600 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED points_per_unit = 100 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 20 / SHEET_MATERIAL_AMOUNT /datum/material/runite/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() @@ -429,6 +440,7 @@ value_per_unit = 25 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED // Nobody's found oil on lavaland yet. points_per_unit = 4 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 4 / SHEET_MATERIAL_AMOUNT /// Force decrease and mushy sound effect. (Not yet implemented) /datum/material/biomass @@ -483,6 +495,7 @@ value_per_unit = 500 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED // Doesn't naturally spawn on lavaland. points_per_unit = 100 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 20 / SHEET_MATERIAL_AMOUNT // If it ever needs it, we'll give it /datum/material/adamantine/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() @@ -521,6 +534,7 @@ value_per_unit = 1500 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED // Doesn't naturally spawn on lavaland. points_per_unit = 100 / SHEET_MATERIAL_AMOUNT + points_per_boulder_unit = 20 / SHEET_MATERIAL_AMOUNT /datum/material/mythril/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() diff --git a/code/game/objects/effects/decals/cleanable/toxic.dm b/code/game/objects/effects/decals/cleanable/toxic.dm new file mode 100644 index 000000000000..13a3fe57a0f7 --- /dev/null +++ b/code/game/objects/effects/decals/cleanable/toxic.dm @@ -0,0 +1,61 @@ +#define DISSOLVE_DURATION 45 SECONDS + +/obj/effect/decal/cleanable/greenglow/waste + name = "caustic sludge" + desc = "A puddle of toxic, industrial waste. Eats through the floor if not cleaned up." + icon_state = "waste_spill" + light_power = 1 + beauty = -300 + clean_type = CLEAN_TYPE_ACID + decal_reagent = /datum/reagent/toxin/acid/industrial_waste + reagent_amount = 5 + alpha = 0 + color = "#bebebe8e" + + /// audio of the waste bubbling and melting things. + var/datum/looping_sound/bubbling_audio // It's really just bubbling liquid audio, which is what I need here. + /// TimerID for the floor melting effect, so we can stop it if it gets cleaned up. + var/dissolve_timer + +/obj/effect/decal/cleanable/greenglow/waste/Initialize(mapload, list/datum/disease/diseases) + . = ..() + animate(src, alpha = 255, time = 0.5 SECONDS) + + var/mutable_appearance/splash_animation = mutable_appearance('icons/effects/effects.dmi', "splash_hydroponics") + splash_animation.color = "#15ff00" + flick_overlay_view(splash_animation, 1.1 SECONDS) + +/obj/effect/decal/cleanable/greenglow/waste/Destroy() + QDEL_NULL(bubbling_audio) + QDEL_NULL(particles) + return ..() + +/** + * Sets up our waste to perform dissolve_floor after the timer goes off. + */ +/obj/effect/decal/cleanable/greenglow/waste/proc/pre_dissolve(display_message = TRUE, dissolve_clock = DISSOLVE_DURATION) + if(display_message) + visible_message(span_warning("\The [src] begins corroding \the [get_turf(src)]!")) + color = "#ffffffff" + + playsound(src, 'sound/items/tools/welder.ogg', 50, TRUE) + bubbling_audio = new /datum/looping_sound/soup/toxic(src) + bubbling_audio.start() + + dissolve_timer = addtimer(CALLBACK(src, PROC_REF(dissolve_floor)), dissolve_clock, TIMER_STOPPABLE | TIMER_DELETE_ME) + particles = new /particles/acid/toxic() + +/obj/effect/decal/cleanable/greenglow/waste/proc/dissolve_floor() + if(QDELETED(src)) + return + var/atom/splashed_turf = get_turf(src) + if(!isfloorturf(splashed_turf)) + return + var/turf/open/splash_floor = splashed_turf + splash_floor.ScrapeAway(flags = CHANGETURF_IGNORE_AIR) //Eat away the floor + visible_message(span_warning("The waste eats away at the floor, leaving \the [get_turf(src)] behind.")) + animate(src, time = 0.5 SECONDS, color = "#bebebe8e") + bubbling_audio?.stop() + QDEL_NULL(particles) + +#undef DISSOLVE_DURATION diff --git a/code/game/objects/effects/particles/acid.dm b/code/game/objects/effects/particles/acid.dm index 5ce0984991d8..19683b6ad788 100644 --- a/code/game/objects/effects/particles/acid.dm +++ b/code/game/objects/effects/particles/acid.dm @@ -13,3 +13,16 @@ gravity = list(0, 0.15) position = generator(GEN_SPHERE, 0, 16, NORMAL_RAND) spin = generator(GEN_NUM, -15, 15, NORMAL_RAND) + +/particles/acid/toxic + count = 1000 + spawning = 4 + color = "#34ff19a1" + lifespan = null + grow = -0.08 + velocity = list(0, 1, 0) + position = generator(GEN_CIRCLE, 0, 16, NORMAL_RAND) + drift = generator(GEN_VECTOR, list(0, -0.2), list(0, 0.2)) + gravity = list(0, 0) + rotation = 25 + spin = generator(GEN_NUM, -20, 20) diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index 9fb7633daf4a..1a8695c75d3d 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -1703,6 +1703,7 @@ /obj/item/assembly/igniter/condenser = 1, /datum/stock_part/servo = 2, /datum/stock_part/matter_bin = 2, + /obj/item/reagent_containers/cup/beaker = 1, ) /obj/item/circuitboard/machine/smelter @@ -1713,6 +1714,7 @@ /obj/item/assembly/igniter = 1, /datum/stock_part/servo = 2, /datum/stock_part/matter_bin = 2, + /obj/item/reagent_containers/cup/beaker = 1, ) /obj/item/circuitboard/machine/shieldwallgen diff --git a/code/game/objects/items/storage/boxes/cargo_boxes.dm b/code/game/objects/items/storage/boxes/cargo_boxes.dm index 749873b50a06..a299ab085090 100644 --- a/code/game/objects/items/storage/boxes/cargo_boxes.dm +++ b/code/game/objects/items/storage/boxes/cargo_boxes.dm @@ -13,3 +13,19 @@ /obj/item/stack/wrapping_paper/small = 1, ) generate_items_inside(items_inside,src) + +/obj/item/storage/box/shipping/debug + name = "box of bigger shipping supplies" + desc = "Everything you need to make your own cargo department." + +/obj/item/storage/box/shipping/debug/PopulateContents() + var/list/items_inside = list( + /obj/item/universal_scanner = 1, + /obj/item/stack/package_wrap/small = 2, + /obj/item/stack/wrapping_paper/small = 2, + /obj/item/boulder_beacon = 1, + /obj/item/stack/conveyor/thirty = 1, + /obj/item/conveyor_switch_construct = 1, + /obj/item/construction/plumbing = 1, + ) + generate_items_inside(items_inside,src) diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm index 8a20893d32ba..c4204fd3f678 100644 --- a/code/game/objects/structures/lavaland/ore_vent.dm +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -357,7 +357,7 @@ miner.mind?.adjust_experience(/datum/skill/mining, MINING_SKILL_BOULDER_SIZE_XP * boulder_size) if(!user_id_card) continue - var/point_reward_val = (MINER_POINT_MULTIPLIER * boulder_size) - MINER_POINT_MULTIPLIER // We remove the base value of discovering the vent + var/point_reward_val = (MINER_POINT_MULTIPLIER * (boulder_size + 2)) - MINER_POINT_MULTIPLIER // We remove the base value of discovering the vent if(user_id_card.registered_account) user_id_card.registered_account.mining_points += point_reward_val user_id_card.registered_account.bank_card_talk("You have been awarded [point_reward_val] mining points for your efforts.") @@ -758,6 +758,40 @@ /mob/living/simple_animal/hostile/megafauna/colossus, ) +/obj/structure/ore_vent/debug + name = "debug ore vent" + desc = "How the hell did you get this?." + tapped = TRUE + discovered = TRUE + unique_vent = TRUE + color = "#ff00f2" + boulder_size = BOULDER_SIZE_SMALL + mineral_breakdown = list( + /datum/material/iron = 1, + ) + +/obj/structure/ore_vent/debug/attack_hand(mob/living/user, list/modifiers) + . = ..() + var/datum/material/choice = tgui_input_list(user, "Choose a material to add/remove.", "New material", subtypesof(/datum/material)) + if(!choice) + return + if(mineral_breakdown[choice]) + mineral_breakdown -= choice + balloon_alert_to_viewers("removed [choice::name]") + return + mineral_breakdown += choice + balloon_alert_to_viewers("added [choice::name]") + var/value = tgui_input_number(user, "What weight should it have?", "ore pickweight", 1, 100, 1) + mineral_breakdown[choice] = value + balloon_alert_to_viewers("weighting of [value] added") + +/obj/structure/ore_vent/debug/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + var/choice = tgui_input_list(user, "Choose a vent size.", "New size", list(SMALL_VENT_TYPE, MEDIUM_VENT_TYPE, LARGE_VENT_TYPE)) + if(!choice) + return + vent_size_setup(random = FALSE, force_size = choice, map_loading = FALSE) + /obj/effect/landmark/mining_center name = "Mining Epicenter" icon_state = "mining_epicenter" diff --git a/code/modules/mining/boulder_processing/_boulder_processing.dm b/code/modules/mining/boulder_processing/_boulder_processing.dm index 86a8679d0367..6d11c876bf36 100644 --- a/code/modules/mining/boulder_processing/_boulder_processing.dm +++ b/code/modules/mining/boulder_processing/_boulder_processing.dm @@ -23,6 +23,12 @@ ///The action verb to display to players var/action = "processing" + + /// What list of reagents should we look at when we boost the effectiveness of this machinery? Assign a value to a chem as well, eg: /datum/reagent/water = 1 is a 10% boost + var/list/booster_list = list() + /// What reagent should be produced when a boost chemical is replaced by the booster_reagent? + var/datum/reagent/waste_chemical = /datum/reagent/water + /// Cooldown associated with the sound played for collecting mining points. COOLDOWN_DECLARE(sound_cooldown) /// Cooldown associated with taking in boulds. @@ -75,14 +81,18 @@ /obj/machinery/bouldertech/examine(mob/user) . = ..() - . += span_notice("The machine reads that it has [span_bold("[points_held] mining points")] stored. Swipe an ID to claim them.") - . += span_notice("Click to remove a stored boulder.") + + . += span_suppradio("The machine reads that it has [EXAMINE_HINT("[points_held] mining points")] stored. Swipe an ID to claim them.") var/boulder_count = 0 for(var/obj/item/boulder/potential_boulder in contents) boulder_count += 1 - . += span_notice("Storage capacity = [boulder_count]/[boulders_held_max] boulders.") - . += span_notice("Can process up to [boulders_processing_count] boulders at a time.") + + if(boulder_count >= 1) + . += span_notice("[EXAMINE_HINT("Right Click")] to manually remove a stored boulder.
") + + . += span_info("Storage capacity = [boulder_count]/[boulders_held_max] boulders.") + . += span_info("This machine can process up to [EXAMINE_HINT("[boulders_processing_count] boulders")] at a time.") if(anchored) . += span_notice("It's [EXAMINE_HINT("anchored")] in place.") @@ -94,6 +104,15 @@ if(panel_open) . += span_notice("The whole machine can be [EXAMINE_HINT("pried")] apart.") +/obj/machinery/bouldertech/examine_more(mob/user) + . = ..() + + if(length(booster_list)) + . += span_notice("This machine's output is boosted by chemical intake:
") + for(var/datum/reagent/increment as anything in booster_list) + . += span_info("• [increment::name]: Provides [booster_list[increment] * 10]% Boost") + . += span_notice("
Upon being boosted successfully, \the [src] will produce [EXAMINE_HINT("[waste_chemical.name]")].") + /obj/machinery/bouldertech/update_icon_state() . = ..() var/suffix = "" @@ -338,7 +357,8 @@ //if boulders are kept inside because there is no space to eject them, then they could be reprocessed, lets avoid that if(!chosen_boulder.processed_by) - check_for_boosts() + if(length(reagents.reagent_list)) + check_for_boosts() //Handles the mineral boosting, as well as creating waste. Must have reagents in the machine. //here we loop through the boulder's ores var/list/rejected_mats = list() @@ -347,7 +367,7 @@ if(!can_process_material(possible_mat)) rejected_mats[possible_mat] = quantity continue - points_held = round(points_held + (quantity * possible_mat.points_per_unit * MINING_POINT_MACHINE_MULTIPLIER)) // put point total here into machine + points_held += round(quantity * possible_mat.points_per_boulder_unit) // put point total here into machine if(isnull(silo_materials.silo) || !silo_materials.mat_container.insert_amount_mat(quantity, possible_mat)) new possible_mat.sheet_type(drop_location(), floor(quantity / SHEET_MATERIAL_AMOUNT)) @@ -358,7 +378,7 @@ if(!length(chosen_boulder.custom_materials)) playsound(loc, usage_sound, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(istype(chosen_boulder, /obj/item/boulder/artifact)) - points_held = round((points_held + MINER_POINT_MULTIPLIER) * MINING_POINT_MACHINE_MULTIPLIER) /// Artifacts give bonus points! + points_held = round((points_held + MINER_POINT_MULTIPLIER)) /// Artifacts give bonus points! chosen_boulder.break_apart() return//We've processed all the materials in the boulder, so we can just destroy it in break_apart. @@ -387,7 +407,7 @@ breakdown_boulder(potential_boulder) boulders_found = FALSE - //when the boulder is removed it plays sound and displays a balloon alert. don't overlap when that happens + //when the boulder is removed it plays sound and displays a balloon alert. Don't overlap when that happens if(boulders_found) playsound(loc, usage_sound, 29, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) balloon_alert_to_viewers(action) diff --git a/code/modules/mining/boulder_processing/refinery.dm b/code/modules/mining/boulder_processing/refinery.dm index 861829219e23..52cf7189062a 100644 --- a/code/modules/mining/boulder_processing/refinery.dm +++ b/code/modules/mining/boulder_processing/refinery.dm @@ -5,12 +5,21 @@ */ /obj/machinery/bouldertech/refinery name = "boulder refinery" - desc = "BR for short. Accepts boulders and refines non-metallic ores into sheets using internal chemicals." + desc = "Accepts boulders and refines non-metallic ores into sheets using internal chemicals." icon_state = "stacker" base_icon_state = "stacker" circuit = /obj/item/circuitboard/machine/refinery usage_sound = 'sound/machines/mining/refinery.ogg' action = "crushing" + waste_chemical = /datum/reagent/toxin/acid/industrial_waste + + /// What list of reagents should we look at when we boost the effectiveness of this machinery? + booster_list = list( + /datum/reagent/toxin/acid = 1, + /datum/reagent/toxin/acid/fluacid = 2, + /datum/reagent/toxin/acid/nitracid = 3, + /datum/reagent/teslium = 5, + ) /obj/machinery/bouldertech/refinery/can_process_material(datum/material/possible_mat) var/static/list/processable_materials @@ -37,6 +46,56 @@ boulders_processing_count += servo.tier boulders_processing_count = ROUND_UP((boulders_processing_count / 8) * boulders_held_max) + var/new_volume = 0 + for(var/obj/item/reagent_containers/beaker in component_parts) + new_volume += beaker.volume + if(!reagents) + create_reagents(new_volume, OPENCONTAINER) + reagents.maximum_volume = new_volume + + +/obj/machinery/bouldertech/refinery/Initialize(mapload) + . = ..() + AddComponent(/datum/component/plumbing/boulder_reactions) + AddElement(/datum/element/simple_rotation) + update_appearance(UPDATE_OVERLAYS) + +/obj/machinery/bouldertech/refinery/check_for_boosts() + . = ..() //resets to 1.00 efficiency in the parent + var/highest_boost = 0 + var/datum/reagent/biggest_booster + for(var/datum/reagent/chem in reagents.reagent_list) + if(!booster_list[chem.type]) + continue + if(!reagents.has_reagent(chem.type, booster_list[chem.type])) //check that we have the associated quantity of the chem in order to perform the boost. + continue + if(booster_list[chem.type] > highest_boost) + highest_boost = booster_list[chem.type] + biggest_booster = chem.type + + if(!biggest_booster) + return + + reagents.remove_reagent(biggest_booster, highest_boost) //remove the associated amount from the reagents + refining_efficiency = 1 + (highest_boost / 10) //Results in a boost from 10-30% + reagents.add_reagent(waste_chemical, highest_boost) + +/obj/machinery/bouldertech/refinery/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + . = ..() + set_light_on(TRUE) + +/obj/machinery/bouldertech/refinery/default_unfasten_wrench(mob/user, obj/item/wrench, time) + . = ..() + set_light_on(TRUE) + +/obj/machinery/bouldertech/refinery/plunger_act(obj/item/plunger/attacking_plunger, mob/living/user, reinforced) + . = ..() + balloon_alert(user, "emptying...") + if(do_after(user, 2 SECONDS, src)) + reagents.expose(drop_location()) + reagents.clear_reagents() + + /** * Your other new favorite industrial waste magnet! * Accepts boulders and produces sheets of metallic materials. @@ -44,7 +103,7 @@ */ /obj/machinery/bouldertech/refinery/smelter name = "boulder smelter" - desc = "BS for short. Accept boulders and refines metallic ores into sheets." + desc = "Accept boulders and refines metallic ores into sheets." icon_state = "smelter" base_icon_state = "smelter" light_system = OVERLAY_LIGHT @@ -54,6 +113,12 @@ circuit = /obj/item/circuitboard/machine/smelter usage_sound = 'sound/machines/mining/smelter.ogg' action = "smelting" + booster_list = list( + /datum/reagent/fuel = 1, + /datum/reagent/thermite = 2, + /datum/reagent/gunpowder = 3, + /datum/reagent/liquid_dark_matter = 5, + ) /obj/machinery/bouldertech/refinery/smelter/Initialize(mapload) . = ..() diff --git a/code/modules/plumbing/plumbers/synthesizer.dm b/code/modules/plumbing/plumbers/synthesizer.dm index f7adedddd03d..941837c8b6c4 100644 --- a/code/modules/plumbing/plumbers/synthesizer.dm +++ b/code/modules/plumbing/plumbers/synthesizer.dm @@ -189,3 +189,24 @@ . = ..() dispensable_reagents = beer_reagents + +/obj/machinery/plumbing/synthesizer/mining + name = "mining synthesizer" + desc = "Can generate all the tasty plumbing chems that make mining more profitable or destructive." + + var/static/list/mining_chems = list( + /datum/reagent/toxin/acid, + /datum/reagent/toxin/acid/fluacid, + /datum/reagent/toxin/acid/nitracid, + /datum/reagent/teslium, + /datum/reagent/fuel, + /datum/reagent/thermite, + /datum/reagent/gunpowder, + /datum/reagent/liquid_dark_matter, + /datum/reagent/toxin/acid/industrial_waste, + ) + +/obj/machinery/plumbing/synthesizer/mining/Initialize(mapload, layer) + . = ..() + + dispensable_reagents = mining_chems diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 9b059a93ea4d..900e9468de0f 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -1569,3 +1569,105 @@ description = "A poison produced by the rare and elusive gatfruit plant." liver_damage_multiplier = 0 toxpwr = 1 + +#define CRITICAL_CAPACITY 45 + +/datum/reagent/toxin/acid/industrial_waste + name = "Industrial Waste" + description = "Industrial Waste produced as a side effect of efficient boulder refining. Highly toxic, corrosive, and hard to get rid of." + color = "#1eff00" + penetrates_skin = TOUCH|VAPOR + creation_purity = REAGENT_STANDARD_PURITY + purity = REAGENT_STANDARD_PURITY + toxpwr = 2 + acidpwr = 30.0 + ph = 0.0 + +/datum/reagent/toxin/acid/industrial_waste/on_new(data) + . = ..() + if(istype(holder.my_atom, /obj/machinery/plumbing/disposer)) + RegisterSignal(holder, COMSIG_REAGENTS_HOLDER_UPDATED, PROC_REF(pre_disposal)) + +/datum/reagent/toxin/acid/industrial_waste/on_merge(list/mix_data, amount) + . = ..() + var/merged_total = amount + volume + if(merged_total >= CRITICAL_CAPACITY) + spew_waste(round(volume / WASTE_REACTION_THRESHOLD*2)) //Sure as HELL can't store it. + var/atom/container = holder.my_atom + var/damage_mult = 1 + if(ismachinery(container)) + damage_mult = 2 + container.take_damage(round(merged_total * damage_mult / WASTE_REACTION_THRESHOLD), BURN, BIO) //It's an unusual combination of damage type and flags, but we need to intentionally bypass beakers acid immunity. + + +/datum/reagent/toxin/acid/industrial_waste/burn(datum/reagents/holder) + . = ..() + spew_waste(2) //Can't burn it... + +/datum/reagent/toxin/acid/industrial_waste/on_spark_act(power_charge, spark_flags) + if((spark_flags & SPARK_ACT_ENCLOSED) && !ismob(holder.my_atom)) + return + spew_waste(2) //Can't electrify it... + +/datum/reagent/toxin/acid/industrial_waste/expose_obj(obj/exposed_obj, reac_volume) + if(reac_volume < WASTE_REACTION_THRESHOLD) + return // There's too little waste to do anything. + if(istype(exposed_obj, /obj/effect/decal/cleanable/greenglow/waste)) + var/obj/effect/decal/cleanable/greenglow/waste/goo = exposed_obj + goo.visible_message(span_warning("The new waste reactivates [goo]!")) + goo.pre_dissolve(FALSE) + return ..() + +/datum/reagent/toxin/acid/industrial_waste/expose_turf(turf/exposed_turf, reac_volume) + var/obj/effect/decal/cleanable/greenglow/waste/goo = exposed_turf.spawn_unique_cleanable(/obj/effect/decal/cleanable/greenglow/waste) //Following similar logic to how ants spawn their cleanables. + if(QDELETED(goo)) + return + + goo.decal_reagent = type + var/rounded_volume = round(reac_volume, 1) + goo.reagent_amount = rounded_volume + + if(goo.lazy_init_reagents()) + goo.reagents.maximum_volume = min(goo.reagents.maximum_volume + rounded_volume, 300) + goo.reagents.add_reagent(type, rounded_volume) + if(goo.reagents.has_reagent(type, WASTE_REACTION_THRESHOLD)) + goo.pre_dissolve() + return // Otherwise there's too little waste to do anything. + return ..() + +/datum/reagent/toxin/acid/industrial_waste/proc/pre_disposal() + SIGNAL_HANDLER + var/atom/disaster_zone = holder?.my_atom + if(!disaster_zone) + return + if(prob(10)) + disaster_zone.balloon_alert_to_viewers("hissssssss!") + spew_waste(5) //You can't just dump the industrial waste down the kitchen sink. High range to disincentivize using the chem disposaler. + +/** + * Pick a random turf in the spew range and split our total amount of waste there. + */ +/datum/reagent/toxin/acid/industrial_waste/proc/spew_waste(spew_range = 1) + if(!spew_range) + return + + var/atom/atom_holder = holder.my_atom + var/turf/dropturf = get_turf(atom_holder) + if(!dropturf) + return //Check for at least an inital turf to start + var/obj/effect/particle_effect/fluid/smoke/quick/greenboy = new(dropturf) + greenboy.color = "#00ff00" + var/list/turf/turfs = list() + for(var/turf/open/floors in oview(spew_range, dropturf)) + if(isgroundlessturf(floors)) + continue + turfs += floors + + if(!length(turfs)) + return + dropturf = pick(turfs) + + expose_turf(dropturf, volume/2) + volume = round(volume/2, 0.01) + +#undef CRITICAL_CAPACITY diff --git a/tgstation.dme b/tgstation.dme index 1bc5f6c59815..cf71dd3e22f2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1432,6 +1432,7 @@ #include "code\datums\components\pet_commands\pet_commands_basic.dm" #include "code\datums\components\plumbing\_plumbing.dm" #include "code\datums\components\plumbing\automated_iv.dm" +#include "code\datums\components\plumbing\boulder_reactions.dm" #include "code\datums\components\plumbing\buffer.dm" #include "code\datums\components\plumbing\chemical_acclimator.dm" #include "code\datums\components\plumbing\ductnet.dm" @@ -2495,6 +2496,7 @@ #include "code\game\objects\effects\decals\cleanable\fuel.dm" #include "code\game\objects\effects\decals\cleanable\mess.dm" #include "code\game\objects\effects\decals\cleanable\robots.dm" +#include "code\game\objects\effects\decals\cleanable\toxic.dm" #include "code\game\objects\effects\decals\turfdecal\dirt.dm" #include "code\game\objects\effects\decals\turfdecal\markings.dm" #include "code\game\objects\effects\decals\turfdecal\tilecoloring.dm" From 9761c101ec33f3be7e59a9a2c42a628e3c421d91 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 15:46:31 +0000 Subject: [PATCH 059/282] Automatic changelog for PR #95530 [ci skip] --- html/changelogs/AutoChangeLog-pr-95530.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95530.yml diff --git a/html/changelogs/AutoChangeLog-pr-95530.yml b/html/changelogs/AutoChangeLog-pr-95530.yml new file mode 100644 index 000000000000..30212c21e03f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95530.yml @@ -0,0 +1,8 @@ +author: "ArcaneMusic" +delete-after: True +changes: + - rscadd: "The boulder smelter and refinery may now take a plumbing input (Closely examine to see the full list) to boost the mineral output of processed boulders." + - rscadd: "Boulder refinery machines will produce a new chemical, industrial waste, which must be managed, dispersed, or it will eventually overflow if too much exists in the same container." + - balance: "The smelter and refinery now produce less mining points per unit than before, but the quantity of points are now better scaled to the quantity processed. 50% more ores means 50% more points." + - balance: "The amount of points generated per ore within boulders is now a separate variable, not a percentage of the base value. This means some ores are better/worse for generating mining points as a result." + - balance: "Completing wave defense will award 200 more points across all ore vent tiers, 700/1200/1700 for small/medium/large vents." \ No newline at end of file From e9384e10a21a35d34b2be1597eed203de80c94cb Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 23 Apr 2026 12:57:25 -0400 Subject: [PATCH 060/282] Camera update: Monochrome photo-taking (#95656) Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> --- code/modules/photography/_pictures.dm | 4 +-- code/modules/photography/camera/camera.dm | 32 +++++++++++++++++-- .../camera/camera_image_capturing.dm | 3 ++ code/modules/photography/camera/other.dm | 5 +-- code/modules/photography/photos/photo.dm | 6 ++-- 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/code/modules/photography/_pictures.dm b/code/modules/photography/_pictures.dm index a59435f55491..76a0cf74bc22 100644 --- a/code/modules/photography/_pictures.dm +++ b/code/modules/photography/_pictures.dm @@ -205,9 +205,9 @@ P.has_blueprints = has_blueprints if(greyscale) if(picture_image) - P.picture_image.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) + P.picture_image.GrayScale() if(picture_icon) - P.picture_icon.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) + P.picture_icon.GrayScale() if(cropx || cropy) if(picture_image) P.picture_image.Crop(cropx, cropy, psize_x - cropx, psize_y - cropy) diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index e62f4c4ffe88..a4a7ac333972 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -31,6 +31,8 @@ var/pictures_left = 10 /// Currently inserted holorecord disk. var/obj/item/disk/holodisk/disk + ///Boolean on whether or not the camera will print in monochrome. + var/print_monochrome = FALSE /// Whether we flash upon taking a picture. var/flash_enabled = TRUE /// Whether we silence our picture taking and zoom adjusting sounds. @@ -77,6 +79,7 @@ /obj/item/camera/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) context[SCREENTIP_CONTEXT_ALT_LMB] = "Adjust Zoom" + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Change Printer Mode" if(istype(held_item, /obj/item/camera_film)) context[SCREENTIP_CONTEXT_LMB] = "Insert Film" @@ -96,6 +99,7 @@ . = ..() . += span_notice("It has [pictures_left] photos left.") . += span_notice("Alt-click to change its focusing, allowing you to set how big of an area it will capture.") + . += span_notice("Ctrl-click to change the printer between color and monochrome.") . += span_notice("The present dimensions of the picture are [EXAMINE_HINT("[APERTURE_TO_METERS(picture_size_x)]x[APERTURE_TO_METERS(picture_size_y)]")]") if(isnull(disk)) @@ -209,7 +213,6 @@ */ /obj/item/camera/proc/capture_image(atom/target, mob/user) PRIVATE_PROC(TRUE) - //Checking if we can target var/turf/target_turf = get_turf(target) var/view_size = user?.client?.view || world.view @@ -287,7 +290,19 @@ continue names += "[person.name]" - var/datum/picture/picture = new("picture", desc.Join("
"), mobs_spotted, dead_spotted, names, get_icon, null, width * ICON_SIZE_X, height * ICON_SIZE_Y, blueprints, can_see_ghosts = see_ghosts) + var/datum/picture/picture = new( + "picture", + desc.Join("
"), + mobs_spotted, + dead_spotted, + names, + get_icon, + null, + width * ICON_SIZE_X, + height * ICON_SIZE_Y, + blueprints, + can_see_ghosts = see_ghosts, + ) after_picture(user, picture) SEND_SIGNAL(src, COMSIG_CAMERA_IMAGE_CAPTURED, target, user, picture) blending = FALSE @@ -303,7 +318,9 @@ /obj/item/camera/proc/after_picture(mob/user, datum/picture/picture) PROTECTED_PROC(TRUE) - if(!silent) + if(silent) + user.playsound_local(get_turf(src), SFX_POLAROID, 35, TRUE) + else playsound(loc, SFX_POLAROID, 75, TRUE, -3) if(print_picture_on_snap) @@ -430,3 +447,12 @@ else playsound(src, 'sound/machines/click.ogg', 50, TRUE) return CLICK_ACTION_SUCCESS + +/obj/item/camera/item_ctrl_click(mob/user) + print_monochrome = !print_monochrome + user.balloon_alert(user, "printing [print_monochrome ? "monochrome" : "in color"]") + if(silent) // Don't out your silent cameras + user.playsound_local(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) + else + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + return CLICK_ACTION_SUCCESS diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm index 21ad4a51d4bd..c2e516b6cfce 100644 --- a/code/modules/photography/camera/camera_image_capturing.dm +++ b/code/modules/photography/camera/camera_image_capturing.dm @@ -155,6 +155,9 @@ else QDEL_LIST(lighting) + if(print_monochrome) + res.GrayScale() + return res #undef PHYSICAL_POSITION diff --git a/code/modules/photography/camera/other.dm b/code/modules/photography/camera/other.dm index cb976a8cf319..8598302c8401 100644 --- a/code/modules/photography/camera/other.dm +++ b/code/modules/photography/camera/other.dm @@ -27,11 +27,8 @@ /obj/item/camera/detective name = "detective's camera" desc = "A silent polaroid camera with extra capacity for crime investigations." + print_monochrome = TRUE flash_enabled = FALSE silent = TRUE pictures_max = 30 pictures_left = 30 - -/obj/item/camera/detective/after_picture(mob/user, datum/picture/picture) - . = ..() - user.playsound_local(get_turf(src), SFX_POLAROID, 35, TRUE) diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index a6009b63528e..b68c2f9c4007 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -20,8 +20,8 @@ /obj/item/photo/get_save_vars() return ..() - NAMEOF(src, icon) -/obj/item/photo/Initialize(mapload, datum/picture/P, datum_name = TRUE, datum_desc = TRUE) - set_picture(P, datum_name, datum_desc, TRUE) +/obj/item/photo/Initialize(mapload, datum/picture/P, datum_name = TRUE, datum_desc = TRUE, override_name = TRUE) + set_picture(P, datum_name, datum_desc, override_name) //Photos are quite rarer than papers, so they're more likely to be added to the queue to make things even. if(!mapload && prob(MESSAGE_BOTTLE_CHANCE * 5) && picture?.id) LAZYADD(SSpersistence.queued_message_bottles, src) @@ -111,7 +111,7 @@ + "" \ + "" \ + "[scribble ? "
Written on the back:
[scribble]" : ""]"\ - + "", "window=photo_showing;size=480x608") + + "", "window=photo_showing;size=[scribble ? "480x580" : "480x480"]") onclose(user, "[name]") /obj/item/photo/verb/rename() From 264142e30c311b79714e27b05d4975be389d9b08 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 16:57:46 +0000 Subject: [PATCH 061/282] Automatic changelog for PR #95656 [ci skip] --- html/changelogs/AutoChangeLog-pr-95656.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95656.yml diff --git a/html/changelogs/AutoChangeLog-pr-95656.yml b/html/changelogs/AutoChangeLog-pr-95656.yml new file mode 100644 index 000000000000..e16dcb83fd09 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95656.yml @@ -0,0 +1,5 @@ +author: "JohnFulpWillard" +delete-after: True +changes: + - rscadd: "You can Ctrl Click a camera to set it to print monochrome photos. The detective's camera is on this mode by default." + - qol: "Photos without a scribble written on them won't have empty white space at the bottom." \ No newline at end of file From 3f82fe405fbaf2481e4c3b292ef4b83d53a20205 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 18:00:24 +0000 Subject: [PATCH 062/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95530.yml | 8 -------- html/changelogs/AutoChangeLog-pr-95656.yml | 5 ----- html/changelogs/AutoChangeLog-pr-95717.yml | 4 ---- html/changelogs/archive/2026-04.yml | 21 +++++++++++++++++++++ 4 files changed, 21 insertions(+), 17 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95530.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95656.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95717.yml diff --git a/html/changelogs/AutoChangeLog-pr-95530.yml b/html/changelogs/AutoChangeLog-pr-95530.yml deleted file mode 100644 index 30212c21e03f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95530.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "ArcaneMusic" -delete-after: True -changes: - - rscadd: "The boulder smelter and refinery may now take a plumbing input (Closely examine to see the full list) to boost the mineral output of processed boulders." - - rscadd: "Boulder refinery machines will produce a new chemical, industrial waste, which must be managed, dispersed, or it will eventually overflow if too much exists in the same container." - - balance: "The smelter and refinery now produce less mining points per unit than before, but the quantity of points are now better scaled to the quantity processed. 50% more ores means 50% more points." - - balance: "The amount of points generated per ore within boulders is now a separate variable, not a percentage of the base value. This means some ores are better/worse for generating mining points as a result." - - balance: "Completing wave defense will award 200 more points across all ore vent tiers, 700/1200/1700 for small/medium/large vents." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95656.yml b/html/changelogs/AutoChangeLog-pr-95656.yml deleted file mode 100644 index e16dcb83fd09..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95656.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "JohnFulpWillard" -delete-after: True -changes: - - rscadd: "You can Ctrl Click a camera to set it to print monochrome photos. The detective's camera is on this mode by default." - - qol: "Photos without a scribble written on them won't have empty white space at the bottom." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95717.yml b/html/changelogs/AutoChangeLog-pr-95717.yml deleted file mode 100644 index db5b2ad278fa..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95717.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ElGitificador" -delete-after: True -changes: - - balance: "mutations coming from most random mutation sources can now be saved in dna consoles" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 357316381c9a..74b69ab88e2c 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -496,11 +496,32 @@ will sell for. - qol: You can now sell materials on the edge of their buying and selling thresholds. (This really only effects iron and glass, practically) + - rscadd: The boulder smelter and refinery may now take a plumbing input (Closely + examine to see the full list) to boost the mineral output of processed boulders. + - rscadd: Boulder refinery machines will produce a new chemical, industrial waste, + which must be managed, dispersed, or it will eventually overflow if too much + exists in the same container. + - balance: The smelter and refinery now produce less mining points per unit than + before, but the quantity of points are now better scaled to the quantity processed. + 50% more ores means 50% more points. + - balance: The amount of points generated per ore within boulders is now a separate + variable, not a percentage of the base value. This means some ores are better/worse + for generating mining points as a result. + - balance: Completing wave defense will award 200 more points across all ore vent + tiers, 700/1200/1700 for small/medium/large vents. + ElGitificador: + - balance: mutations coming from most random mutation sources can now be saved in + dna consoles Ghommie: - bugfix: Packs exclusive to the express console (crab rockets for example) can now be ordered from express consoles. Happyowl93: - code_imp: makeHologram now allows a color override. + JohnFulpWillard: + - rscadd: You can Ctrl Click a camera to set it to print monochrome photos. The + detective's camera is on this mode by default. + - qol: Photos without a scribble written on them won't have empty white space at + the bottom. Melbert: - balance: Codex Cicatrix is now a tier 1 heretic knowledge, and can not be drafted. - balance: Warren King's Welcome is now a tier 1 heretic knowledge, but can be drafted. From e60003f1058d608ab1318ea8e77227a7a4f83b38 Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:09:02 -0400 Subject: [PATCH 063/282] Remove unsupported CSS from `client.script` (#95841) ## About The Pull Request So it turns out that CSS validation in BYOND has been broken for some time, and it was fixed in 516.1681. This fix uncovered errors in `stylesheet.dm`, and per [this bug report](https://www.byond.com/forum/post/2986950), the `animation` style was never actually supported in DM CSS, we just didn't notice because these styles are only used in TGUI (which properly displays them) and the errors were being suppressed. ## Why It's Good For The Game Makes the codebase compile on the latest BYOND version --- interface/stylesheet.dm | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 7fdf99783b8d..317908f239d4 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -136,21 +136,9 @@ h1.alert, h2.alert {color: #000000;} .clown {color: #FF69Bf; font-size: 3; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;} .singing {font-family: "Trebuchet MS", cursive, sans-serif; font-style: italic;} .his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;} -.hypnophrase {color: #3bb5d3; font-weight: bold; animation: hypnocolor 1500ms infinite; animation-direction: alternate;} - @keyframes hypnocolor { - 0% {color: #0d0d0d;} - 25% {color: #410194;} - 50% {color: #7f17d8;} - 75% {color: #410194;} - 100% {color: #3bb5d3;} -} - -.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;} - @keyframes phobia { - 0% {color: #0d0d0d;} - 50% {color: #dd0000;} - 100% {color: #0d0d0d;} -} +.hypnophrase {color: #3bb5d3; font-weight: bold;} + +.phobia {color: #dd0000; font-weight: bold;} .icon {height: 1em; width: auto;} From db36485983caa33e08c6969f787e56dfb6032c24 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 18:09:24 +0000 Subject: [PATCH 064/282] Automatic changelog for PR #95841 [ci skip] --- html/changelogs/AutoChangeLog-pr-95841.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95841.yml diff --git a/html/changelogs/AutoChangeLog-pr-95841.yml b/html/changelogs/AutoChangeLog-pr-95841.yml new file mode 100644 index 000000000000..8036738464d3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95841.yml @@ -0,0 +1,4 @@ +author: "TealSeer" +delete-after: True +changes: + - bugfix: "fixed CSS-related errors in BYOND 516.1681+" \ No newline at end of file From 8bb8222569c621e691c88f0c8fb2f4b4f72cde50 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 18:15:24 +0000 Subject: [PATCH 065/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95841.yml | 4 ---- html/changelogs/archive/2026-04.yml | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95841.yml diff --git a/html/changelogs/AutoChangeLog-pr-95841.yml b/html/changelogs/AutoChangeLog-pr-95841.yml deleted file mode 100644 index 8036738464d3..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95841.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TealSeer" -delete-after: True -changes: - - bugfix: "fixed CSS-related errors in BYOND 516.1681+" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 74b69ab88e2c..255e42f1ebb7 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -540,6 +540,8 @@ SmArtKar: - admin: Planemaster Debugger now has a text search input to locate and jump to planes + TealSeer: + - bugfix: fixed CSS-related errors in BYOND 516.1681+ levels0: - bugfix: metalgen and secret sauce recipes are now loaded properly timothymtorres: From 24b5007e1a17d998bc83ffec396d4ca8822aaf76 Mon Sep 17 00:00:00 2001 From: Leland Kemble <70413276+lelandkemble@users.noreply.github.com> Date: Fri, 24 Apr 2026 09:38:26 -0400 Subject: [PATCH 066/282] Fixes looming (#95848) --- code/datums/elements/loomable.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/elements/loomable.dm b/code/datums/elements/loomable.dm index ca32bde165b1..f9b790855174 100644 --- a/code/datums/elements/loomable.dm +++ b/code/datums/elements/loomable.dm @@ -101,7 +101,7 @@ if (ispath(resulting_atom, /obj/item/stack)) var/obj/item/stack/stack_type = resulting_atom while (spawning_amount > 0) - new_thing = new resulting_atom(target.drop_location(), new_amount = min(spawning_amount, stack_type::max_amount)) + new_thing = new resulting_atom(target.drop_location(), min(spawning_amount, stack_type::max_amount)) spawning_amount -= stack_type::max_amount else for(var/repeated in 1 to spawning_amount) From 2c9bb6235925cd09c3b7d78f74ce19906591c2a7 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 13:38:48 +0000 Subject: [PATCH 067/282] Automatic changelog for PR #95848 [ci skip] --- html/changelogs/AutoChangeLog-pr-95848.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95848.yml diff --git a/html/changelogs/AutoChangeLog-pr-95848.yml b/html/changelogs/AutoChangeLog-pr-95848.yml new file mode 100644 index 000000000000..c7aad224e9f4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95848.yml @@ -0,0 +1,4 @@ +author: "lelandkemble" +delete-after: True +changes: + - bugfix: "Looming works again" \ No newline at end of file From 94132209297e9b49bcfa307f1901dbe9ddfc26c2 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 18:00:28 +0000 Subject: [PATCH 068/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95848.yml | 4 ---- html/changelogs/archive/2026-04.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95848.yml diff --git a/html/changelogs/AutoChangeLog-pr-95848.yml b/html/changelogs/AutoChangeLog-pr-95848.yml deleted file mode 100644 index c7aad224e9f4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95848.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "lelandkemble" -delete-after: True -changes: - - bugfix: "Looming works again" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 255e42f1ebb7..b5d82892597b 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -546,3 +546,6 @@ - bugfix: metalgen and secret sauce recipes are now loaded properly timothymtorres: - map: Add Shoe Factory to lava/ice ruins. +2026-04-24: + lelandkemble: + - bugfix: Looming works again From bda80877cb59d0d2edc2ea6e5d6c09474f766682 Mon Sep 17 00:00:00 2001 From: Leland Kemble <70413276+lelandkemble@users.noreply.github.com> Date: Fri, 24 Apr 2026 18:15:15 -0400 Subject: [PATCH 069/282] Fixes stamina bar shown value inversion (#95849) --- code/modules/mob/living/living.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5ee30cec038c..9ca801be1b41 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1452,7 +1452,7 @@ if(shown_stamina_loss >= stam_crit_threshold) stamina.icon_state = "stamina_crit" else if(shown_stamina_loss > 0 && maxHealth > 0) - stamina.icon_state = "stamina_[6 - ceil(shown_stamina_loss / (maxHealth * 0.2))]" + stamina.icon_state = "stamina_[ceil(shown_stamina_loss / (maxHealth * 0.2))]" else stamina.icon_state = "stamina_full" From 51b8555f64910423202ab2896b8580e6a8f327ec Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 22:15:37 +0000 Subject: [PATCH 070/282] Automatic changelog for PR #95849 [ci skip] --- html/changelogs/AutoChangeLog-pr-95849.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95849.yml diff --git a/html/changelogs/AutoChangeLog-pr-95849.yml b/html/changelogs/AutoChangeLog-pr-95849.yml new file mode 100644 index 000000000000..eb3946c603c3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95849.yml @@ -0,0 +1,4 @@ +author: "lelandkemble" +delete-after: True +changes: + - bugfix: "Stamina bars no longer invert the value they show you" \ No newline at end of file From 1f6f738760b041b8921b9e234d5603ebb2001923 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Apr 2026 00:00:22 +0000 Subject: [PATCH 071/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95849.yml | 4 ---- html/changelogs/archive/2026-04.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95849.yml diff --git a/html/changelogs/AutoChangeLog-pr-95849.yml b/html/changelogs/AutoChangeLog-pr-95849.yml deleted file mode 100644 index eb3946c603c3..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95849.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "lelandkemble" -delete-after: True -changes: - - bugfix: "Stamina bars no longer invert the value they show you" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index b5d82892597b..fdb37c5352d1 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -549,3 +549,6 @@ 2026-04-24: lelandkemble: - bugfix: Looming works again +2026-04-25: + lelandkemble: + - bugfix: Stamina bars no longer invert the value they show you From 68f5a555d0a478f9f9657e74afef4459d502cf09 Mon Sep 17 00:00:00 2001 From: Leland Kemble <70413276+lelandkemble@users.noreply.github.com> Date: Fri, 24 Apr 2026 20:15:08 -0400 Subject: [PATCH 072/282] Nonbinary people can respawn (#95854) ## About The Pull Request locked records(admin-only records) now use the `gender` variable to keep the mob's actual gender, not resorting to "Other". This means that nonbinary people are once again capable of being respawned. As locked records are admin-only, and used in few other locations, the gender variable is only accessed by respawning code at the moment, and should never be accessed in a player-facing manner, so it doesn't matter that plural & neuter are in there. ## Why It's Good For The Game fixes #95768 ## Changelog :cl: fix: Nonbinary people can respawn /:cl: --- code/datums/records/manifest.dm | 2 +- code/datums/records/record.dm | 2 +- code/modules/admin/verbs/admingame.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm index 2a7fc26a90d2..de4fae2baefc 100644 --- a/code/datums/records/manifest.dm +++ b/code/datums/records/manifest.dm @@ -127,7 +127,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) character_appearance = character_appearance, dna_string = record_dna.unique_enzymes, fingerprint = md5(record_dna.unique_identity), - gender = person_gender, + gender = person.gender, initial_rank = assignment, name = person.real_name, rank = assignment, diff --git a/code/datums/records/record.dm b/code/datums/records/record.dm index 93893f7871e0..8197d418bcba 100644 --- a/code/datums/records/record.dm +++ b/code/datums/records/record.dm @@ -145,7 +145,7 @@ character_appearance, dna_string = "Unknown", fingerprint = "?????", - gender = "Other", + gender = "neuter", initial_rank = "Unassigned", name = "Unknown", rank = "Unassigned", diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm index fb00b96f783e..f1c1ae14af15 100644 --- a/code/modules/admin/verbs/admingame.dm +++ b/code/modules/admin/verbs/admingame.dm @@ -285,7 +285,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th if(record_found)//If they have a record we can determine a few things. new_character.real_name = record_found.name - new_character.gender = LOWER_TEXT(record_found.gender) + new_character.gender = record_found.gender new_character.age = record_found.age var/datum/dna/found_dna = record_found.locked_dna new_character.hardset_dna(found_dna.unique_identity, found_dna.mutation_index, null, record_found.name, record_found.blood_type, new record_found.species_type, found_dna.features) From 4552acd21c920d73572767d4ead12355fa110f93 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Apr 2026 00:15:27 +0000 Subject: [PATCH 073/282] Automatic changelog for PR #95854 [ci skip] --- html/changelogs/AutoChangeLog-pr-95854.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95854.yml diff --git a/html/changelogs/AutoChangeLog-pr-95854.yml b/html/changelogs/AutoChangeLog-pr-95854.yml new file mode 100644 index 000000000000..73f3c45a2949 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95854.yml @@ -0,0 +1,4 @@ +author: "lelandkemble" +delete-after: True +changes: + - bugfix: "Nonbinary people can respawn" \ No newline at end of file From 7763db34a103c981476f4439ad50ac0b63c88e71 Mon Sep 17 00:00:00 2001 From: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Date: Sat, 25 Apr 2026 03:25:28 +0300 Subject: [PATCH 074/282] Basic beepskies and some ED209 additions (#95783) ## About The Pull Request this PR refactors beepskies and ED209s into basic mobs. ive also added a few features for the ed209 because i cant keep my hands to myself: ED bots can now wear hats! a few hats give them some new unique dialogue. Putting a cowboy's hat on an ED will have it acting like a town Sherrif EDs are now rideable when emagged. theyll still be shooting people while ridden. youll also have the ability to charge at people full throttle running them over ive also added a new Nukie variant, purchasable from the uplink. These versions come fitted with an LMG and will patrol the station and shoot all walks of life. If emagged, theyll blow up people with (weaker) rockets (im still working on balancing this). they are rideable but i highly suggest against it; youll be caught in the crossfire. (i understand if ud prefer i atomize this feature) ## Why It's Good For The Game gives some personality to EDs, as well as updating all these bots to the cool new ai system ## Changelog :cl: refactor: beepskies, and ed209s have been refactored. please report any bugs add: ed209s can now wear hats! some hats give them new dialogue add: emagged ed209s are now rideable! add: added evil versions of the ed209s to the syndie uplink /:cl: --------- Co-authored-by: san7890 --- .../SpaceRuins/hauntedtradingpost.dmm | 4 +- _maps/RandomZLevels/research.dmm | 2 +- .../CatwalkStation/CatwalkStation_2023.dmm | 6 +- .../map_files/Deltastation/DeltaStation2.dmm | 6 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 8 +- _maps/map_files/MetaStation/MetaStation.dmm | 6 +- _maps/map_files/Mining/Lavaland.dmm | 2 +- .../map_files/NebulaStation/NebulaStation.dmm | 8 +- _maps/map_files/tramstation/tramstation.dmm | 8 +- _maps/map_files/wawastation/wawastation.dmm | 8 +- _maps/shuttles/emergency_casino.dmm | 2 +- _maps/shuttles/emergency_shadow.dmm | 2 +- code/__DEFINES/ai/bot_keys.dm | 41 +- code/__DEFINES/robots.dm | 24 + code/_globalvars/phobias.dm | 6 +- .../basic_ai_behaviors/basic_attacking.dm | 6 +- code/datums/components/crafting/robot.dm | 6 +- code/datums/components/riding/riding_mob.dm | 37 ++ code/game/machinery/slotmachine.dm | 2 +- .../abandoned_crates/abandoned_crates.dm | 2 +- .../heretic/magic/eldritch_shapeshift.dm | 2 +- code/modules/antagonists/spy/spy_bounty.dm | 8 +- code/modules/events/ghost_role/sentience.dm | 2 +- .../mob/living/basic/bots/ed209/ed209.dm | 176 ++++++ .../living/basic/bots/ed209/ed209_ability.dm | 40 ++ .../mob/living/basic/bots/ed209/ed209_ai.dm | 65 ++ .../living/basic/bots/ed209/ed209_nukie_ai.dm | 16 + .../basic/bots/ed209/ed209_nukie_spawner.dm | 19 + .../mob/living/basic/bots/honkbots/honkbot.dm | 64 +- .../living/basic/bots/honkbots/honkbot_ai.dm | 60 +- .../mob/living/basic/bots/secbot/secbot.dm | 263 ++++++++ .../basic/bots/secbot/secbot_abilities.dm | 12 + .../mob/living/basic/bots/secbot/secbot_ai.dm | 91 +++ .../basic/bots/secbot/secbot_subtypes.dm | 65 ++ .../living/basic/bots/secbot/super_beepsky.dm | 96 +++ .../basic/bots/secbot/super_beepsky_ai.dm | 16 + code/modules/mob/living/living.dm | 2 +- .../living/simple_animal/bot/SuperBeepsky.dm | 146 ----- .../living/simple_animal/bot/construction.dm | 26 +- .../mob/living/simple_animal/bot/ed209bot.dm | 138 ---- .../mob/living/simple_animal/bot/secbot.dm | 588 ------------------ .../spells/spell_types/conjure/ed_swarm.dm | 10 +- .../spell_types/shapeshift/shapechange.dm | 2 +- .../unit_tests/simple_animal_freeze.dm | 11 - code/modules/uplink/uplink_items/nukeops.dm | 10 + icons/mob/silicon/aibots.dmi | Bin 88553 -> 96989 bytes tgstation.dme | 14 +- tools/UpdatePaths/Scripts/96000_secbots.txt | 11 + 48 files changed, 1067 insertions(+), 1072 deletions(-) create mode 100644 code/modules/mob/living/basic/bots/ed209/ed209.dm create mode 100644 code/modules/mob/living/basic/bots/ed209/ed209_ability.dm create mode 100644 code/modules/mob/living/basic/bots/ed209/ed209_ai.dm create mode 100644 code/modules/mob/living/basic/bots/ed209/ed209_nukie_ai.dm create mode 100644 code/modules/mob/living/basic/bots/ed209/ed209_nukie_spawner.dm create mode 100644 code/modules/mob/living/basic/bots/secbot/secbot.dm create mode 100644 code/modules/mob/living/basic/bots/secbot/secbot_abilities.dm create mode 100644 code/modules/mob/living/basic/bots/secbot/secbot_ai.dm create mode 100644 code/modules/mob/living/basic/bots/secbot/secbot_subtypes.dm create mode 100644 code/modules/mob/living/basic/bots/secbot/super_beepsky.dm create mode 100644 code/modules/mob/living/basic/bots/secbot/super_beepsky_ai.dm delete mode 100644 code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm delete mode 100644 code/modules/mob/living/simple_animal/bot/ed209bot.dm delete mode 100644 code/modules/mob/living/simple_animal/bot/secbot.dm create mode 100644 tools/UpdatePaths/Scripts/96000_secbots.txt diff --git a/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm b/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm index 349d32e62a3a..dd93e77a597b 100644 --- a/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm @@ -813,9 +813,9 @@ "hf" = ( /obj/structure/cable/layer1, /obj/structure/sign/poster/contraband/syndicate_pistol/directional/west, -/mob/living/simple_animal/bot/secbot{ +/mob/living/basic/bot/secbot{ faction = list("Syndicate"); - bot_cover_flags = 4; + bot_access_flags = 4; baton_type = /obj/item/melee/baton/security/cattleprod; name = "\improper Syndicate Securitron"; desc = "A little security robot, reprogrammed by the syndicate. He looks downright surly."; diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index c3513c00bfcc..66e00db43a65 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -1678,7 +1678,7 @@ /turf/open/floor/iron/white, /area/awaymission/research/interior/security) "ij" = ( -/mob/living/simple_animal/bot/secbot/genesky, +/mob/living/basic/bot/secbot/genesky, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, diff --git a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm index 324e3f007357..4ea337fddc7f 100644 --- a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm +++ b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm @@ -65878,7 +65878,7 @@ /obj/effect/turf_decal/siding/dark{ dir = 8 }, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /obj/structure/cable/layer3, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -89658,7 +89658,7 @@ /obj/machinery/holopad/secure{ pixel_y = -1 }, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /obj/effect/turf_decal/trimline/red/warning{ dir = 4 }, @@ -90749,7 +90749,7 @@ /obj/effect/mapping_helpers/mail_sorting/service/library, /obj/effect/mapping_helpers/mail_sorting/service/chapel, /obj/effect/mapping_helpers/mail_sorting/service/dormitories, -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=10-Vault"; location = "9-Bridge" diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index f5e1ddc094fe..d2e8048ba442 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -20883,7 +20883,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "fgq" = ( @@ -32201,7 +32201,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /turf/open/floor/iron/dark, /area/station/security/armory) "hTv" = ( @@ -96425,7 +96425,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer3, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /turf/open/floor/iron/grimy, /area/station/ai/satellite/interior) "xMX" = ( diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index e6dababd09a4..3f0d9f9d2ab7 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -3582,7 +3582,7 @@ /area/station/maintenance/starboard/fore) "aXq" = ( /obj/item/bedsheet/red, -/mob/living/simple_animal/bot/secbot/beepsky, +/mob/living/basic/bot/secbot/beepsky, /turf/open/floor/plating, /area/station/maintenance/fore) "aXG" = ( @@ -24035,7 +24035,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "gJI" = ( -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark/textured, /area/station/security/armory) @@ -46006,7 +46006,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer3, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /turf/open/floor/iron/dark, /area/station/ai/satellite/interior) "mXj" = ( @@ -62971,7 +62971,7 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/mob/living/simple_animal/bot/secbot/beepsky{ +/mob/living/basic/bot/secbot/beepsky{ desc = "Powered by the tears and sweat of laborers."; name = "Prison Ofitser" }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 5279a4b7391b..39a5c2d025db 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -299,7 +299,7 @@ /area/station/science/research) "agc" = ( /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /turf/open/floor/iron/dark, /area/station/security/armory) "agi" = ( @@ -27551,7 +27551,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer3, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /turf/open/floor/iron/dark, /area/station/ai/satellite/interior) "jvQ" = ( @@ -29863,7 +29863,7 @@ /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 }, -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /turf/open/floor/iron, /area/station/security/brig) "kho" = ( diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 0e9b0facd410..cf416e54eb85 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -972,7 +972,7 @@ "fS" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/red/filled/line, -/mob/living/simple_animal/bot/secbot/beepsky/ofitser, +/mob/living/basic/bot/secbot/beepsky/ofitser, /turf/open/floor/iron/dark/smooth_edge{ dir = 1 }, diff --git a/_maps/map_files/NebulaStation/NebulaStation.dmm b/_maps/map_files/NebulaStation/NebulaStation.dmm index 07914fb32cca..a56ce903b0c0 100644 --- a/_maps/map_files/NebulaStation/NebulaStation.dmm +++ b/_maps/map_files/NebulaStation/NebulaStation.dmm @@ -67112,7 +67112,7 @@ /area/station/medical/lower) "jSP" = ( /obj/structure/cable, -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /turf/open/floor/iron/dark/small, /area/station/security/brig) "jSZ" = ( @@ -91645,7 +91645,7 @@ /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 4 }, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /obj/machinery/ai_slipper{ uses = 10 }, @@ -110893,7 +110893,7 @@ location = "F10-Cargo"; codes_txt = "patrol;next_patrol=F11-Cargo" }, -/mob/living/simple_animal/bot/secbot/beepsky/officer{ +/mob/living/basic/bot/secbot/beepsky/officer{ name = "Beepsky the Third" }, /turf/open/floor/iron, @@ -113588,7 +113588,7 @@ /turf/open/floor/iron/dark/herringbone, /area/station/service/chapel/funeral) "qKN" = ( -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /turf/open/floor/glass/reinforced, /area/station/security/armory) "qKR" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 8de7da9d478b..20f1addfff1f 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -1119,7 +1119,7 @@ /turf/open/floor/iron, /area/station/security/courtroom) "adD" = ( -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/machinery/camera/directional/south{ @@ -1526,7 +1526,7 @@ /turf/open/misc/asteroid/airless, /area/station/asteroid) "aeX" = ( -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /obj/effect/turf_decal/stripes/line, /obj/structure/cable, /turf/open/floor/iron, @@ -14732,7 +14732,7 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "dWi" = ( -/mob/living/simple_animal/bot/secbot/beepsky, +/mob/living/basic/bot/secbot/beepsky, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22835,7 +22835,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "gWx" = ( -/mob/living/simple_animal/bot/secbot/pingsky{ +/mob/living/basic/bot/secbot/pingsky{ dir = 1 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 96567ae603fc..403a0404252c 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -816,7 +816,7 @@ dir = 5 }, /obj/machinery/camera/autoname/directional/east, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, @@ -5762,7 +5762,7 @@ /area/station/service/lawoffice) "bZI" = ( /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/mob/living/basic/bot/secbot/beepsky/armsky, /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark/textured_large, /area/station/security/armory) @@ -51431,7 +51431,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/mob/living/simple_animal/bot/secbot/beepsky/officer, +/mob/living/basic/bot/secbot/beepsky/officer, /turf/open/floor/iron, /area/station/hallway/primary/central) "rFX" = ( @@ -67915,7 +67915,7 @@ /area/station/maintenance/port/lesser) "xkc" = ( /obj/structure/cable/layer3, -/mob/living/simple_animal/bot/secbot/pingsky, +/mob/living/basic/bot/secbot/pingsky, /turf/open/floor/iron/dark, /area/station/ai/satellite/foyer) "xkx" = ( diff --git a/_maps/shuttles/emergency_casino.dmm b/_maps/shuttles/emergency_casino.dmm index e4521dc80b6c..1f28d476bf9f 100644 --- a/_maps/shuttles/emergency_casino.dmm +++ b/_maps/shuttles/emergency_casino.dmm @@ -1188,7 +1188,7 @@ /obj/item/storage/crayons, /obj/item/storage/crayons, /obj/item/storage/crayons, -/mob/living/basic/bot/honkbot, +/mob/living/basic/bot/secbot/honkbot, /turf/open/floor/sepia, /area/shuttle/escape) "NN" = ( diff --git a/_maps/shuttles/emergency_shadow.dmm b/_maps/shuttles/emergency_shadow.dmm index ac2807c70f3e..b1b61cc376a8 100644 --- a/_maps/shuttles/emergency_shadow.dmm +++ b/_maps/shuttles/emergency_shadow.dmm @@ -582,7 +582,7 @@ /turf/open/floor/eighties, /area/shuttle/escape) "BJ" = ( -/mob/living/simple_animal/bot/secbot{ +/mob/living/basic/bot/secbot{ name = "Officer McCuff" }, /turf/open/floor/iron/dark/smooth_large, diff --git a/code/__DEFINES/ai/bot_keys.dm b/code/__DEFINES/ai/bot_keys.dm index c12f48273eec..0c7758f61348 100644 --- a/code/__DEFINES/ai/bot_keys.dm +++ b/code/__DEFINES/ai/bot_keys.dm @@ -1,40 +1,3 @@ -//bitfield defines - -///can honkbots slip people? -#define HONKBOT_MODE_SLIP (1<<0) -///can honkbots check IDs? -#define HONKBOT_CHECK_IDS (1<<1) -///can honkbots check records? -#define HONKBOT_CHECK_RECORDS (1<<2) -///can honkbots handcuff people? -#define HONKBOT_HANDCUFF_TARGET (1<<3) - -DEFINE_BITFIELD(honkbot_flags, list( - "CAN_SLIP" = HONKBOT_MODE_SLIP, - "CHECK_IDS" = HONKBOT_CHECK_IDS, - "CHECK_RECORDS" = HONKBOT_CHECK_RECORDS, - "CAN_FAKE_CUFF" = HONKBOT_HANDCUFF_TARGET, -)) - -///can we fix breaches -#define REPAIRBOT_FIX_BREACHES (1<<0) -///can we fix grilles -#define REPAIRBOT_REPLACE_WINDOWS (1<<1) -///can we replace tiles -#define REPAIRBOT_REPLACE_TILES (1<<2) -///can we fix girders -#define REPAIRBOT_FIX_GIRDERS (1<<3) -///can we build girders -#define REPAIRBOT_BUILD_GIRDERS (1<<4) - -DEFINE_BITFIELD(repairbot_flags, list( - "FIX_BREACHES" = REPAIRBOT_FIX_BREACHES, - "REPLACE_WINDOWS" = REPAIRBOT_REPLACE_WINDOWS, - "REPLACE_TILES" = REPAIRBOT_REPLACE_TILES, - "FIX_GIRDERS" = REPAIRBOT_FIX_GIRDERS, - "BUILD_GIRDERS" = REPAIRBOT_BUILD_GIRDERS, -)) - // bot keys ///The first beacon we find #define BB_BEACON_TARGET "beacon_target" @@ -113,6 +76,10 @@ DEFINE_BITFIELD(repairbot_flags, list( ///key that holds cooldown after we finish cleaning something, so we dont immediately run off to patrol #define BB_POST_CLEAN_COOLDOWN "post_clean_cooldown" +//secbots +///threat of our current target +#define BB_CURRENT_CRIMINAL_ASSESSMENT "current_criminal_assessment" + //Honkbots ///key that holds all possible clown friends #define BB_CLOWNS_LIST "clowns_list" diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm index 5b14301927e7..2c76b6f3b91c 100644 --- a/code/__DEFINES/robots.dm +++ b/code/__DEFINES/robots.dm @@ -219,6 +219,30 @@ DEFINE_BITFIELD(security_mode_flags, list( "SECBOT_SABOTEUR_AFFECTED" = SECBOT_SABOTEUR_AFFECTED, )) +///can honkbots slip people? +#define HONKBOT_MODE_SLIP (1<<6) + +//repairbots +///can we fix breaches +#define REPAIRBOT_FIX_BREACHES (1<<0) +///can we fix grilles +#define REPAIRBOT_REPLACE_WINDOWS (1<<1) +///can we replace tiles +#define REPAIRBOT_REPLACE_TILES (1<<2) +///can we fix girders +#define REPAIRBOT_FIX_GIRDERS (1<<3) +///can we build girders +#define REPAIRBOT_BUILD_GIRDERS (1<<4) + +DEFINE_BITFIELD(repairbot_flags, list( + "FIX_BREACHES" = REPAIRBOT_FIX_BREACHES, + "REPLACE_WINDOWS" = REPAIRBOT_REPLACE_WINDOWS, + "REPLACE_TILES" = REPAIRBOT_REPLACE_TILES, + "FIX_GIRDERS" = REPAIRBOT_FIX_GIRDERS, + "BUILD_GIRDERS" = REPAIRBOT_BUILD_GIRDERS, +)) + + //MedBOT defines ///Whether to declare if someone (we are healing) is in critical condition #define MEDBOT_DECLARE_CRIT (1<<0) diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index 2e878a097882..186385debfe7 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -64,7 +64,7 @@ GLOBAL_LIST_INIT(phobia_mobs, list( )), "authority" = typecacheof(list( /mob/living/basic/trooper/nanotrasen, - /mob/living/simple_animal/bot/secbot, + /mob/living/basic/bot/secbot, )), "birds" = typecacheof(list( /mob/living/basic/chick, @@ -77,7 +77,7 @@ GLOBAL_LIST_INIT(phobia_mobs, list( "conspiracies" = typecacheof(list( /mob/living/basic/drone, /mob/living/basic/pet/penguin, - /mob/living/simple_animal/bot/secbot, + /mob/living/basic/bot/secbot, )), "doctors" = typecacheof(list(/mob/living/basic/bot/medbot)), "fish" = typecacheof(list( @@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(phobia_mobs, list( /mob/living/silicon/robot, /mob/living/simple_animal/bot, )), - "security" = typecacheof(list(/mob/living/simple_animal/bot/secbot)), + "security" = typecacheof(list(/mob/living/basic/bot/secbot)), "spiders" = typecacheof(list( /mob/living/basic/flesh_spider, /mob/living/basic/mega_arachnid, diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm index 2e145c31ec4b..9d9f995e17fd 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm @@ -6,6 +6,8 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION ///do we finish this action after hitting once? var/terminate_after_action = FALSE + ///do we have any alternate movement behavior? + var/movement_behavior /datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() @@ -16,7 +18,7 @@ if(QDELETED(target)) return FALSE - set_movement_target(controller, target) + set_movement_target(controller, target, movement_behavior) /datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/atom/target = controller.blackboard[target_key] @@ -57,6 +59,8 @@ /datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() controller.clear_blackboard_key(BB_BASIC_MOB_MELEE_COOLDOWN_TIMER) + if(movement_behavior) + controller.change_ai_movement_type(initial(controller.ai_movement)) if(!succeeded) controller.clear_blackboard_key(target_key) diff --git a/code/datums/components/crafting/robot.dm b/code/datums/components/crafting/robot.dm index cf8938deed46..dd1972b3fe82 100644 --- a/code/datums/components/crafting/robot.dm +++ b/code/datums/components/crafting/robot.dm @@ -1,6 +1,6 @@ /datum/crafting_recipe/ed209 name = "ED209" - result = /mob/living/simple_animal/bot/secbot/ed209 + result = /mob/living/basic/bot/secbot/ed209 reqs = list( /obj/item/robot_suit = 1, /obj/item/clothing/head/helmet/sec = 1, @@ -18,7 +18,7 @@ /datum/crafting_recipe/secbot name = "Secbot" - result = /mob/living/simple_animal/bot/secbot + result = /mob/living/basic/bot/secbot reqs = list( /obj/item/assembly/signaler = 1, /obj/item/clothing/head/helmet/sec = 1, @@ -72,7 +72,7 @@ /datum/crafting_recipe/honkbot name = "Honkbot" - result = /mob/living/basic/bot/honkbot + result = /mob/living/basic/bot/secbot/honkbot reqs = list( /obj/item/storage/box/clown = 1, /obj/item/bodypart/arm/right/robot = 1, diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm index bc457829b7a9..b75fcac9aacc 100644 --- a/code/datums/components/riding/riding_mob.dm +++ b/code/datums/components/riding/riding_mob.dm @@ -754,3 +754,40 @@ TEXT_EAST = list(0, 0, MOB_BELOW_PIGGYBACK_LAYER), TEXT_WEST = list(0, 0, MOB_BELOW_PIGGYBACK_LAYER), ) + + +/datum/component/riding/creature/ed_bot + ai_behavior_while_ridden = RIDING_PAUSE_AI_MOVEMENT //shoot while moving! + can_use_abilities = TRUE + uses_native_speed = TRUE + +/datum/component/riding/creature/ed_bot/get_rider_offsets_and_layers(pass_index, mob/offsetter) + return list( + TEXT_NORTH = list(0, 7), + TEXT_SOUTH = list(0, 7), + TEXT_EAST = list(-10, 7), + TEXT_WEST = list(10, 7), + ) + +/datum/component/riding/creature/ed_bot/get_parent_offsets_and_layers() + return list( + TEXT_NORTH = list(0, 0, MOB_BELOW_PIGGYBACK_LAYER), + TEXT_SOUTH = list(0, 0, MOB_ABOVE_PIGGYBACK_LAYER), + TEXT_EAST = list(0, 0, MOB_BELOW_PIGGYBACK_LAYER), + TEXT_WEST = list(0, 0, MOB_BELOW_PIGGYBACK_LAYER), + ) + +/datum/component/riding/creature/ed_bot/ride_check(mob/living/rider, consequences = TRUE) + . = ..() + if(!.) + return + var/mob/living/basic/bot/secbot/my_bot = parent + if(!(my_bot.bot_mode_flags & BOT_MODE_ON)) + return FALSE + return (my_bot.bot_access_flags & BOT_COVER_EMAGGED) + +/datum/component/riding/creature/ed_bot/nukie + +/datum/component/riding/creature/ed_bot/nukie/ride_check(mob/living/rider, consequences = TRUE) + var/mob/living/basic/bot/secbot/my_bot = parent + return my_bot.faction_check_atom(rider) diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 8903bacc8f03..5fcb061e0653 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -579,7 +579,7 @@ desc = "Repurposed from a confiscated syndicate gambling ring. Losing is a crime. Winning is also a crime." symbol_paths = list( /obj/item/food/donut/berry, - /mob/living/simple_animal/bot/secbot/beepsky, + /mob/living/basic/bot/secbot/beepsky, /obj/item/melee/baton/security/loaded, /obj/item/gun/energy/disabler, /obj/vehicle/sealed/mecha/ripley/paddy, diff --git a/code/game/objects/structures/crates_lockers/crates/abandoned_crates/abandoned_crates.dm b/code/game/objects/structures/crates_lockers/crates/abandoned_crates/abandoned_crates.dm index 3a17fdc4b8b3..6ab6b9ce437a 100644 --- a/code/game/objects/structures/crates_lockers/crates/abandoned_crates/abandoned_crates.dm +++ b/code/game/objects/structures/crates_lockers/crates/abandoned_crates/abandoned_crates.dm @@ -76,7 +76,7 @@ ) = 11, list( // Mobs - /mob/living/basic/bot/honkbot = 5, + /mob/living/basic/bot/secbot/honkbot = 5, /mob/living/basic/pet/gondola = 2, /obj/effect/spawner/abandoned_crate/bloodroaches = 1, ) = 8, diff --git a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm index 514236771e24..af2fd7e0ef1a 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm @@ -17,5 +17,5 @@ /mob/living/basic/pet/cat, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/fox, - /mob/living/simple_animal/bot/secbot, + /mob/living/basic/bot/secbot, ) diff --git a/code/modules/antagonists/spy/spy_bounty.dm b/code/modules/antagonists/spy/spy_bounty.dm index a1020c3c93ee..5344f86be2ea 100644 --- a/code/modules/antagonists/spy/spy_bounty.dm +++ b/code/modules/antagonists/spy/spy_bounty.dm @@ -716,23 +716,23 @@ /datum/spy_bounty/some_bot/beepsky difficulty = SPY_DIFFICULTY_MEDIUM // gotta get him to stand still - bot_type = /mob/living/simple_animal/bot/secbot/beepsky/officer + bot_type = /mob/living/basic/bot/secbot/beepsky/officer help = "Abduct Officer Beepsky - commonly found patrolling the station. \ Watch out, they may not take kindly to being scanned." /datum/spy_bounty/some_bot/ofitser difficulty = SPY_DIFFICULTY_EASY - bot_type = /mob/living/simple_animal/bot/secbot/beepsky/ofitser + bot_type = /mob/living/basic/bot/secbot/beepsky/ofitser help = "Abduct Prison Ofitser - commonly found guarding the Gulag." /datum/spy_bounty/some_bot/armsky difficulty = SPY_DIFFICULTY_HARD - bot_type = /mob/living/simple_animal/bot/secbot/beepsky/armsky + bot_type = /mob/living/basic/bot/secbot/beepsky/armsky help = "Abduct Sergeant-At-Armsky - commonly found guarding the station's Armory." /datum/spy_bounty/some_bot/pingsky difficulty = SPY_DIFFICULTY_HARD - bot_type = /mob/living/simple_animal/bot/secbot/pingsky + bot_type = /mob/living/basic/bot/secbot/pingsky help = "Abduct Officer Pingsky - commonly found protecting the station's AI." /datum/spy_bounty/some_bot/scrubs diff --git a/code/modules/events/ghost_role/sentience.dm b/code/modules/events/ghost_role/sentience.dm index 4fc837169d2b..5d4668f640c9 100644 --- a/code/modules/events/ghost_role/sentience.dm +++ b/code/modules/events/ghost_role/sentience.dm @@ -17,7 +17,7 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list( /mob/living/basic/sloth, /mob/living/basic/snake, /mob/living/basic/spider/giant/sgt_araneus, - /mob/living/simple_animal/bot/secbot/beepsky, + /mob/living/basic/bot/secbot/beepsky, /mob/living/basic/bear/snow/misha, /mob/living/basic/mining/lobstrosity/juvenile, ))) diff --git a/code/modules/mob/living/basic/bots/ed209/ed209.dm b/code/modules/mob/living/basic/bots/ed209/ed209.dm new file mode 100644 index 000000000000..83373e25a82d --- /dev/null +++ b/code/modules/mob/living/basic/bots/ed209/ed209.dm @@ -0,0 +1,176 @@ +/mob/living/basic/bot/secbot/ed209 + name = "\improper ED-209 Security Robot" + desc = "A security robot. He looks less than thrilled." + icon_state = "ed209" + base_icon_state = "ed209" + light_color = "#f84e4e" + density = TRUE + health = 100 + maxHealth = 100 + obj_damage = 60 + environment_smash = ENVIRONMENT_SMASH_WALLS //Walls can't stop THE LAW + mob_size = MOB_SIZE_LARGE + ai_controller = /datum/ai_controller/basic_controller/bot/ed209 + bot_type = ADVANCED_SEC_BOT + hackables = "combat inhibitors" + + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.8, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2.1, + ) + + ///sound of the projectiles we shoot + var/projectile_sound = 'sound/items/weapons/laser.ogg' + ///what projectiles we shoot + var/projectile_type = /obj/projectile/beam/disabler + ///what projectiles we shoot when emagged + var/emagged_projectile_type = /obj/projectile/beam + ///sound of emagged projectile + var/emagged_projectile_sound = 'sound/items/weapons/laser.ogg' + ///special hats that change our personality :mistake: + var/static/list/sherrif_hats = typecacheof(list( + /obj/item/clothing/head/cowboy, + )) + var/datum/action/cooldown/mob_cooldown/ed209_charge/bot_charge + ///our riding component + var/ride_component = /datum/component/riding/creature/ed_bot + ///have we become a sheriff + var/sheriffized = FALSE + ///timer till we yell out our war cry again + COOLDOWN_DECLARE(shoot_cry) + + +/mob/living/basic/bot/secbot/ed209/Initialize(mapload) + . = ..() + set_weapon() + bot_charge = new(src) + var/static/list/hat_offset = list(2, 0) + AddElement(/datum/element/hat_wearer,\ + offsets = hat_offset,\ + ) + + AddComponent(/datum/component/defaceable, \ + icon = 'icons/mob/silicon/aibot_faces.dmi', \ + icon_states = list("ed209" = FALSE, "ed209_highlight" = TRUE), \ + drawing_of = "a face", \ + ) + AddComponent(/datum/component/stun_n_cuff,\ + stun_sound = 'sound/items/weapons/egloves.ogg',\ + handcuff_type = /obj/item/restraints/handcuffs/cable/zipties,\ + ) + AddElement(/datum/element/ridable, ride_component) + RegisterSignal(src, COMSIG_BASICMOB_POST_ATTACK_RANGED, PROC_REF(post_ranged_attack)) + +/mob/living/basic/bot/secbot/ed209/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + sheriffized = (is_type_in_typecache(arrived, sherrif_hats)) //yeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeehawwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww + +/mob/living/basic/bot/secbot/ed209/proc/post_ranged_attack() + SIGNAL_HANDLER + if(!sheriffized || !COOLDOWN_FINISHED(src, shoot_cry)) + return + COOLDOWN_START(src, shoot_cry, 30 SECONDS) + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, say), "YIPPIE-KI-YAY!") + +/mob/living/basic/bot/secbot/ed209/Exited(atom/movable/gone, direction) + . = ..() + sheriffized = (is_type_in_typecache(gone, sherrif_hats)) + +/mob/living/basic/bot/secbot/ed209/examine(mob/user) + . = ..() + if(sheriffized) + . += span_notice("Fastest hand in the west.") + +/mob/living/basic/bot/secbot/ed209/bot_reset(bypass_ai_reset = FALSE) + . = ..() + if(bot_access_flags & BOT_COVER_EMAGGED && isnull(bot_charge.owner)) + bot_charge.Grant(src) + if(!(bot_access_flags & BOT_COVER_EMAGGED) && !isnull(bot_charge.owner)) + bot_charge.Remove(src) + set_weapon() + +/mob/living/basic/bot/secbot/ed209/emag_act(mob/user, obj/item/card/emag/emag_card) + . = ..() + icon_state = "ed209[bot_mode_flags & BOT_MODE_ON]" + set_weapon() + balloon_alert(user, "safeties disabled") + audible_message(span_bolddanger("[src] buzzes menacingly!")) + return TRUE + +/mob/living/basic/bot/secbot/ed209/proc/set_weapon() + qdel(GetComponent(/datum/component/ranged_attacks)) + var/projectile = (bot_access_flags & BOT_COVER_EMAGGED) ? emagged_projectile_type : projectile_type + var/final_projectile_sound = (bot_access_flags & BOT_COVER_EMAGGED) ? emagged_projectile_sound : projectile_sound + AddComponent(\ + /datum/component/ranged_attacks,\ + projectile_type = projectile,\ + projectile_sound = final_projectile_sound,\ + ) + +/mob/living/basic/bot/secbot/ed209/ui_data(mob/user) + var/list/data = ..() + if(!(bot_access_flags & BOT_COVER_LOCKED) || HAS_SILICON_ACCESS(user)) + data["custom_controls"]["handcuff"] = security_mode_flags & SECBOT_HANDCUFF_TARGET + data["custom_controls"]["check_ids"] = security_mode_flags & SECBOT_CHECK_IDS + data["custom_controls"]["check_records"] = security_mode_flags & SECBOT_CHECK_RECORDS + return data + +/mob/living/basic/bot/secbot/ed209/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + var/mob/user = ui.user + if(. || !isliving(user) || (bot_access_flags & BOT_COVER_LOCKED) && !HAS_SILICON_ACCESS(user)) + return + switch(action) + if("handcuff") + security_mode_flags ^= SECBOT_HANDCUFF_TARGET + if("check_ids") + security_mode_flags ^= SECBOT_CHECK_IDS + if("check_records") + security_mode_flags ^= SECBOT_CHECK_RECORDS + +/mob/living/basic/bot/secbot/ed209/retrieve_secbot_drops(atom/drop_location) + var/obj/item/bot_assembly/ed209/ed_assembly = new(drop_location) + ed_assembly.build_step = ASSEMBLY_FIRST_STEP + ed_assembly.add_overlay("hs_hole") + ed_assembly.created_name = name + new /obj/item/assembly/prox_sensor(drop_location) + var/obj/item/gun/energy/disabler/disabler_gun = new(drop_location) + disabler_gun.cell.charge = 0 + disabler_gun.update_appearance() + if(prob(50)) + new /obj/item/bodypart/leg/left/robot(drop_location) + if(prob(25)) + new /obj/item/bodypart/leg/right/robot(drop_location) + if(prob(75)) + return + if(prob(50)) // either helmet or vest + new /obj/item/clothing/head/helmet(drop_location) + else + new /obj/item/clothing/suit/armor/vest(drop_location) + +/mob/living/basic/bot/secbot/ed209/Destroy() + . = ..() + QDEL_NULL(bot_charge) + +/mob/living/basic/bot/secbot/ed209/nukie + name = "\improper ED-209(+1) Syndicate Robot" + desc = "Wait this one's red? This cannot be good... right??" + icon_state = "red209" + light_color = "#5c0909" + faction = list(ROLE_SYNDICATE) + health = 250 + maxHealth = 250 + obj_damage = 60 + req_one_access = list(ACCESS_SYNDICATE) + bot_mode_flags = parent_type::bot_mode_flags & ~BOT_MODE_REMOTE_ENABLED + radio_key = /obj/item/encryptionkey/syndicate + additional_access = /datum/id_trim/syndicom/crew + radio_channel = RADIO_CHANNEL_SYNDICATE + ai_controller = /datum/ai_controller/basic_controller/bot/ed209/syndicate + bot_type = ADVANCED_SEC_BOT + hackables = "combat inhibitors" + projectile_sound = 'sound/items/weapons/gun/l6/shot.ogg' + projectile_type = /obj/projectile/bullet/a7mm + emagged_projectile_sound = 'sound/items/weapons/minebot_rocket.ogg' + emagged_projectile_type = /obj/projectile/bullet/rocket/weak //lord have mercy + ride_component = /datum/component/riding/creature/ed_bot/nukie //ride at ur own risk. especially if its emagged. warranty void diff --git a/code/modules/mob/living/basic/bots/ed209/ed209_ability.dm b/code/modules/mob/living/basic/bots/ed209/ed209_ability.dm new file mode 100644 index 000000000000..57d3143e1331 --- /dev/null +++ b/code/modules/mob/living/basic/bots/ed209/ed209_ability.dm @@ -0,0 +1,40 @@ +/datum/action/cooldown/mob_cooldown/ed209_charge + name = "Bot Tackle" + desc = "Not even God's mightiest Quarterback can withstand this." + cooldown_time = 10 SECONDS + background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" + shared_cooldown = NONE + ///duration of telegraph + var/telegraph_duration = 1.25 SECONDS + ///damage we apply on tackle + var/tackle_damage = 25 + +/datum/action/cooldown/mob_cooldown/ed209_charge/Activate(atom/target) + var/turf/target_turf = get_turf(target) + if(isclosedturf(target_turf) || isspaceturf(target_turf)) + owner.balloon_alert(owner, "base not suitable!") + return FALSE + addtimer(CALLBACK(src, PROC_REF(commence_launch), target), telegraph_duration) + owner.Shake(duration = telegraph_duration) + StartCooldown() + return TRUE + +/datum/action/cooldown/mob_cooldown/ed209_charge/proc/commence_launch(atom/target) + var/turf/target_turf = get_turf(target) + owner.throw_at(target = target_turf, range = 7, speed = 1, spin = FALSE, callback = CALLBACK(src, PROC_REF(on_tackle), target_turf)) + new /obj/effect/temp_visual/mook_dust(owner.loc) + +/datum/action/cooldown/mob_cooldown/ed209_charge/proc/on_tackle(turf/target, original_pixel_y) + playsound(get_turf(owner), 'sound/effects/meteorimpact.ogg', 100, TRUE) + new /obj/effect/temp_visual/mook_dust(owner.loc) + for(var/mob/living/victim in oview(1, owner)) + if(victim in owner.buckled_mobs) + continue + victim.apply_damage(tackle_damage) + if(QDELETED(victim)) + continue + var/throw_dir = victim.loc == owner.loc ? get_dir(owner, victim) : pick(GLOB.alldirs) + var/throwtarget = get_edge_target_turf(victim, throw_dir) + victim.throw_at(target = throwtarget, range = 3, speed = 1) + victim.visible_message(span_warning("[victim] eats steel!")) diff --git a/code/modules/mob/living/basic/bots/ed209/ed209_ai.dm b/code/modules/mob/living/basic/bots/ed209/ed209_ai.dm new file mode 100644 index 000000000000..d699a153bb25 --- /dev/null +++ b/code/modules/mob/living/basic/bots/ed209/ed209_ai.dm @@ -0,0 +1,65 @@ +#define DEFAULT_LINES "default_lines" +#define SPECIAL_LINES "special_lines" + +/datum/ai_controller/basic_controller/bot/ed209 + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/secbot, + BB_UNREACHABLE_LIST_COOLDOWN = 1 MINUTES, + BB_ALWAYS_IGNORE_FACTION = TRUE, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/ranged_skirmish, + /datum/ai_planning_subtree/arrest_target/ed209, + /datum/ai_planning_subtree/find_patrol_beacon, + ) + reset_keys = list( + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_BOT_SUMMON_TARGET, + ) + + +/datum/ai_controller/basic_controller/bot/ed209/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_SET(BB_BASIC_MOB_CURRENT_TARGET), PROC_REF(on_target_set)) + + +/datum/ai_controller/basic_controller/bot/ed209/proc/on_target_set() + SIGNAL_HANDLER + var/datum/action/cooldown/bot_announcement/announcement = blackboard[BB_ANNOUNCE_ABILITY] + var/static/list/lines_to_pick = list( + DEFAULT_LINES = list( + "Scumbag alert!", + "Threat detected!" + ), + SPECIAL_LINES = list( + "Why y'all causin trouble in my town?", + "Fill your hands, you son of a bitch.", + "Aint nobody causin trouble in MY jurisdiction." + ) + + ) + var/mob/living/basic/bot/secbot/ed209/my_bot = pawn + var/list/final_list = my_bot.sheriffized ? lines_to_pick[SPECIAL_LINES] : lines_to_pick[DEFAULT_LINES] + INVOKE_ASYNC(announcement, TYPE_PROC_REF(/datum/action/cooldown/bot_announcement, announce), pick(final_list)) + +/datum/ai_planning_subtree/arrest_target/ed209 + arrest_behavior = /datum/ai_behavior/basic_melee_attack/interact_once/bot/ed209 + + +/datum/ai_behavior/basic_melee_attack/interact_once/bot/ed209 + action_cooldown = 0.5 SECONDS + +/datum/ai_behavior/basic_melee_attack/interact_once/bot/ed209/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + . = ..() + if(!(. & AI_BEHAVIOR_DELAY)) + return AI_BEHAVIOR_DELAY //this kinda sucks but we have to do this cause we need to shoot while moving to stun + + +#undef DEFAULT_LINES +#undef SPECIAL_LINES diff --git a/code/modules/mob/living/basic/bots/ed209/ed209_nukie_ai.dm b/code/modules/mob/living/basic/bots/ed209/ed209_nukie_ai.dm new file mode 100644 index 000000000000..24bf9a203670 --- /dev/null +++ b/code/modules/mob/living/basic/bots/ed209/ed209_nukie_ai.dm @@ -0,0 +1,16 @@ +/datum/ai_controller/basic_controller/bot/ed209/syndicate + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_UNREACHABLE_LIST_COOLDOWN = 1 MINUTES, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_ranged_attack_subtree, + /datum/ai_planning_subtree/find_patrol_beacon, + ) + reset_keys = list( + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_BOT_SUMMON_TARGET, + ) diff --git a/code/modules/mob/living/basic/bots/ed209/ed209_nukie_spawner.dm b/code/modules/mob/living/basic/bots/ed209/ed209_nukie_spawner.dm new file mode 100644 index 000000000000..95c5b18ea24b --- /dev/null +++ b/code/modules/mob/living/basic/bots/ed209/ed209_nukie_spawner.dm @@ -0,0 +1,19 @@ +/obj/item/antag_spawner/nuke_ops/ed209_nukie + name = "Syndicate ED209 Robot" + desc = "A single-use beacon designed to quickly launch reinforcement operatives into the field." + + +/obj/item/antag_spawner/nuke_ops/ed209_nukie/attack_self(mob/user) + if(!(check_usability(user))) + return + + to_chat(user, span_notice("You activate [src] and wait for confirmation.")) + drop_bot() + do_sparks(4, TRUE, src) + qdel(src) + +/obj/item/antag_spawner/nuke_ops/ed209_nukie/proc/drop_bot() + var/mob/living/basic/bot/secbot/ed209/nukie/nuclear_bot = new() + var/obj/structure/closet/supplypod/pod = setup_pod() + nuclear_bot.forceMove(pod) + new /obj/effect/pod_landingzone(spawn_location ? spawn_location : get_turf(src), pod) diff --git a/code/modules/mob/living/basic/bots/honkbots/honkbot.dm b/code/modules/mob/living/basic/bots/honkbots/honkbot.dm index eb57581ae167..9d7abf3c1f63 100644 --- a/code/modules/mob/living/basic/bots/honkbots/honkbot.dm +++ b/code/modules/mob/living/basic/bots/honkbots/honkbot.dm @@ -1,4 +1,4 @@ -/mob/living/basic/bot/honkbot +/mob/living/basic/bot/secbot/honkbot name = "\improper Honkbot" desc = "A little robot. It looks happy with its bike horn." icon_state = "honkbot" @@ -16,15 +16,19 @@ data_hud_type = TRAIT_SECURITY_HUD_ID_ONLY additional_access = /datum/id_trim/job/clown possessed_message = "You are a honkbot! Make sure the crew are having a great time!" + security_mode_flags = parent_type::security_mode_flags | HONKBOT_MODE_SLIP ///our voicelines var/static/list/honkbot_sounds = list( HONKBOT_VOICED_HONK_HAPPY = 'sound/items/bikehorn.ogg', HONKBOT_VOICED_HONK_SAD = 'sound/misc/sadtrombone.ogg', ) - ///Honkbot's flags - var/honkbot_flags = HONKBOT_CHECK_RECORDS | HONKBOT_HANDCUFF_TARGET | HONKBOT_MODE_SLIP + stun_sound = 'sound/items/airhorn/AirHorn.ogg' + baton_type = /obj/item/bikehorn/airhorn + cuff_type = /obj/item/restraints/handcuffs/cable/zipties/fake -/mob/living/basic/bot/honkbot/Initialize(mapload) + + +/mob/living/basic/bot/secbot/honkbot/Initialize(mapload) . = ..() var/static/list/clown_friends = typecacheof(list( /mob/living/carbon/human, @@ -48,33 +52,34 @@ on_slip_callback = CALLBACK(src, PROC_REF(post_slip)),\ can_slip_callback = CALLBACK(src, PROC_REF(pre_slip)),\ ) - AddComponent(/datum/component/stun_n_cuff,\ - stun_sound = 'sound/items/airhorn/AirHorn.ogg',\ - post_stun_callback = CALLBACK(src, PROC_REF(post_stun)),\ - post_arrest_callback = CALLBACK(src, PROC_REF(post_arrest)),\ - handcuff_type = /obj/item/restraints/handcuffs/cable/zipties/fake,\ - ) -/mob/living/basic/bot/honkbot/generate_speak_list() +/mob/living/basic/bot/secbot/honkbot/generate_speak_list() return honkbot_sounds -/mob/living/basic/bot/honkbot/proc/pre_slip() +/mob/living/basic/bot/secbot/honkbot/proc/pre_slip() return (prob(70) && ai_controller?.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) -/mob/living/basic/bot/honkbot/proc/post_slip() +/mob/living/basic/bot/secbot/honkbot/proc/post_slip() INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living/basic/bot, speak), HONKBOT_VOICED_HONK_SAD) set_attacking_state() -/mob/living/basic/bot/honkbot/proc/set_attacking_state() +/mob/living/basic/bot/secbot/honkbot/proc/set_attacking_state() icon_state = "[base_icon_state]-c" addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 0.2 SECONDS) -/mob/living/basic/bot/honkbot/proc/post_arrest(mob/living/carbon/current_target) +/mob/living/basic/bot/secbot/honkbot/post_arrest(mob/living/carbon/current_target) playsound(src, (bot_access_flags & BOT_COVER_EMAGGED ? SFX_HONKBOT_E : 'sound/items/bikehorn.ogg'), 50, FALSE) icon_state = bot_access_flags & BOT_COVER_EMAGGED ? "[base_icon_state]-e" : "[base_icon_state]-c" addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 3 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) -/mob/living/basic/bot/honkbot/proc/post_stun(mob/living/carbon/current_target) + audible_message(span_danger("[src] gives out an evil laugh!")) + playsound(src, 'sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg', 75, TRUE, -1) // evil laughter + +/mob/living/basic/bot/secbot/honkbot/retrieve_emag_message() + audible_message(span_danger("[src] gives out an evil laugh!")) + playsound(src, 'sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg', 75, TRUE, -1) // evil laughter + +/mob/living/basic/bot/secbot/honkbot/post_stun(mob/living/carbon/current_target) if(!istype(current_target)) return @@ -86,26 +91,33 @@ sound_damage(deafen = 10 SECONDS) -/mob/living/basic/bot/honkbot/ui_data(mob/user) +/mob/living/basic/bot/secbot/honkbot/ui_data(mob/user) var/list/data = ..() if(!(bot_access_flags & BOT_COVER_LOCKED) || HAS_SILICON_ACCESS(user)) - data["custom_controls"]["slip_people"] = honkbot_flags & HONKBOT_MODE_SLIP - data["custom_controls"]["fake_cuff"] = honkbot_flags & HONKBOT_HANDCUFF_TARGET - data["custom_controls"]["check_ids"] = honkbot_flags & HONKBOT_CHECK_IDS - data["custom_controls"]["check_records"] = honkbot_flags & HONKBOT_CHECK_RECORDS + data["custom_controls"]["slip_people"] = security_mode_flags & HONKBOT_MODE_SLIP + data["custom_controls"]["fake_cuff"] = security_mode_flags & SECBOT_HANDCUFF_TARGET + data["custom_controls"]["check_ids"] = security_mode_flags & SECBOT_CHECK_IDS + data["custom_controls"]["check_records"] = security_mode_flags & SECBOT_CHECK_RECORDS return data -/mob/living/basic/bot/honkbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) +/mob/living/basic/bot/secbot/honkbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() var/mob/user = ui.user if(. || !isliving(user) || (bot_access_flags & BOT_COVER_LOCKED) && !HAS_SILICON_ACCESS(user)) return switch(action) if("slip_people") - honkbot_flags ^= HONKBOT_MODE_SLIP + security_mode_flags ^= HONKBOT_MODE_SLIP if("fake_cuff") - honkbot_flags ^= HONKBOT_HANDCUFF_TARGET + security_mode_flags ^= SECBOT_HANDCUFF_TARGET if("check_ids") - honkbot_flags ^= HONKBOT_CHECK_IDS + security_mode_flags ^= SECBOT_CHECK_IDS if("check_records") - honkbot_flags ^= HONKBOT_CHECK_RECORDS + security_mode_flags ^= SECBOT_CHECK_RECORDS + +/mob/living/basic/bot/secbot/honkbot/retrieve_secbot_drops(atom/drop_location) + var/obj/item/bot_assembly/honkbot/honkbot_assembly = new(drop_location) + honkbot_assembly.build_step = ASSEMBLY_FIRST_STEP + honkbot_assembly.created_name = name + new /obj/item/assembly/prox_sensor(drop_location) + drop_part(baton_type, drop_location) diff --git a/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm b/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm index 620a6fc6d97d..3a4d022087d9 100644 --- a/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm +++ b/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/bot/honkbot blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/secbot, BB_UNREACHABLE_LIST_COOLDOWN = 1 MINUTES, BB_ALWAYS_IGNORE_FACTION = TRUE, ) @@ -8,8 +8,8 @@ /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/respond_to_summon, /datum/ai_planning_subtree/use_mob_ability/random_honk, - /datum/ai_planning_subtree/find_wanted_targets, - /datum/ai_planning_subtree/troll_target, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/arrest_target, /datum/ai_planning_subtree/slip_victims, /datum/ai_planning_subtree/play_with_clowns, /datum/ai_planning_subtree/find_patrol_beacon, @@ -43,60 +43,6 @@ add_to_blacklist(slip_target) clear_blackboard_key(BB_SLIP_TARGET) -/datum/ai_planning_subtree/find_wanted_targets - -/datum/ai_planning_subtree/find_wanted_targets/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) - var/static/list/can_arrest = typecacheof(list(/mob/living/carbon/human)) - if(!controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) - controller.queue_behavior(/datum/ai_behavior/bot_search/wanted_targets, BB_BASIC_MOB_CURRENT_TARGET, can_arrest) - -/datum/ai_behavior/bot_search/wanted_targets - -/datum/ai_behavior/bot_search/wanted_targets/valid_target(datum/ai_controller/basic_controller/bot/controller, mob/living/my_target) - if(!ishuman(my_target)) - return FALSE - var/mob/living/carbon/human/human_target = my_target - if(human_target.handcuffed || human_target.stat != CONSCIOUS) - return FALSE - if(locate(human_target) in controller.blackboard[BB_BASIC_MOB_RETALIATE_LIST]) - return TRUE - var/mob/living/basic/bot/honkbot/my_bot = controller.pawn - var/honkbot_flags = my_bot.honkbot_flags - var/assess_flags = NONE - if(human_target.IsParalyzed() && !(honkbot_flags & HONKBOT_HANDCUFF_TARGET)) - return FALSE - if(my_bot.bot_access_flags & BOT_COVER_EMAGGED) - assess_flags |= JUDGE_EMAGGED - if(honkbot_flags & HONKBOT_CHECK_IDS) - assess_flags |= JUDGE_IDCHECK - if(honkbot_flags & HONKBOT_CHECK_RECORDS) - assess_flags |= JUDGE_RECORDCHECK - return (human_target.assess_threat(assess_flags) > 0) - -/datum/ai_planning_subtree/troll_target - -/datum/ai_planning_subtree/troll_target/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) - var/mob/living/carbon/my_target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] - if(QDELETED(my_target) || !istype(my_target) || my_target.handcuffed) - controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET) - return - - var/mob/living/basic/bot/honkbot/my_bot = controller.pawn - if(my_target.IsParalyzed() && !(my_bot.honkbot_flags & HONKBOT_HANDCUFF_TARGET)) - controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET) - return - - controller.queue_behavior(/datum/ai_behavior/basic_melee_attack/interact_once/honkbot, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY) - return SUBTREE_RETURN_FINISH_PLANNING - -/datum/ai_behavior/basic_melee_attack/interact_once/honkbot - -/datum/ai_behavior/basic_melee_attack/interact_once/honkbot/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) - var/mob/living/carbon/human/human_target = controller.blackboard[target_key] - if(!isnull(human_target)) - controller.remove_from_blackboard_lazylist_key(BB_BASIC_MOB_RETALIATE_LIST, human_target) - return ..() - /datum/ai_planning_subtree/play_with_clowns/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) var/mob/living/clown_target = controller.blackboard[BB_CLOWN_FRIEND] if(QDELETED(clown_target)) diff --git a/code/modules/mob/living/basic/bots/secbot/secbot.dm b/code/modules/mob/living/basic/bots/secbot/secbot.dm new file mode 100644 index 000000000000..df71f848a941 --- /dev/null +++ b/code/modules/mob/living/basic/bots/secbot/secbot.dm @@ -0,0 +1,263 @@ +/mob/living/basic/bot/secbot + name = "\improper Securitron" + desc = "A little security robot. He looks less than thrilled." + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "secbot" + base_icon_state = "secbot" + light_color = "#f56275" + light_power = 0.8 + gender = MALE + density = FALSE + anchored = FALSE + health = 25 + maxHealth = 25 + damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, STAMINA = 0, OXY = 0) + pass_flags = PASSMOB | PASSFLAPS + combat_mode = TRUE + can_buckle_to = FALSE + + req_one_access = list(ACCESS_SECURITY) + radio_key = /obj/item/encryptionkey/secbot //AI Priv + Security + radio_channel = RADIO_CHANNEL_SECURITY //Security channel + bot_type = SEC_BOT + bot_mode_flags = ~BOT_MODE_CAN_BE_SAPIENT + data_hud_type = TRAIT_SECURITY_HUD + hackables = "target identification systems" + path_image_color = COLOR_RED + possessed_message = "You are a securitron! Guard the station to the best of your ability!" + additional_access = /datum/id_trim/job/detective + + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3.2) + ai_controller = /datum/ai_controller/basic_controller/bot/secbot + ///Whether this secbot is considered 'commissioned' and given the trait on Initialize. + var/commissioned = FALSE + ///The type of baton this Secbot will use + var/baton_type = /obj/item/melee/baton/security + ///The weapon (from baton_type) that will be used to make arrests. + var/obj/item/weapon + ///The threat level of the BOT, will arrest anyone at threatlevel 4 or above + var/threatlevel = 0 + + ///Flags SecBOTs use on what to check on targets when arresting, and whether they should announce it to security/handcuff their target + /// Look at the security_mode_flags bitfield for more information on what's togglable here. + var/security_mode_flags = SECBOT_DECLARE_ARRESTS | SECBOT_CHECK_RECORDS | SECBOT_HANDCUFF_TARGET + + /// On arrest, charges the violator this much. + /// If they don't have that much in their account, they will get beaten instead + var/price_arrest = 0 + /// Charged each time the violator is stunned on detain + var/price_detain = 0 + ///The department the secbot will deposit collected money into + var/payment_department = ACCOUNT_SEC + ///what sound we play when stunning + var/stun_sound = 'sound/items/weapons/egloves.ogg' + ///The type of cuffs we use on criminals after making arrests + var/cuff_type = /obj/item/restraints/handcuffs/cable/zipties/used + +/mob/living/basic/bot/secbot/Initialize(mapload) + . = ..() + weapon = new baton_type(src) + update_appearance(UPDATE_ICON) + if(commissioned) + ADD_TRAIT(src, TRAIT_COMMISSIONED, INNATE_TRAIT) + + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + + AddElement(/datum/element/connect_loc, loc_connections) + AddComponent(/datum/component/security_vision, judgement_criteria = NONE, update_judgement_criteria = CALLBACK(src, PROC_REF(judgement_criteria))) + add_arrest_component() + +/mob/living/basic/bot/secbot/Destroy() + QDEL_NULL(weapon) + return ..() + +/mob/living/basic/bot/secbot/update_icon_state() + if(mode == BOT_HUNT) + icon_state = "[base_icon_state]-c" + return ..() + +/mob/living/basic/bot/secbot/turn_off() + ..() + update_bot_mode(new_mode = BOT_IDLE) + +/mob/living/basic/bot/secbot/on_saboteur(datum/source, disrupt_duration) + . = ..() + if(!(security_mode_flags & SECBOT_SABOTEUR_AFFECTED)) + security_mode_flags |= SECBOT_SABOTEUR_AFFECTED + addtimer(CALLBACK(src, PROC_REF(remove_saboteur_effect)), disrupt_duration) + return TRUE + +/mob/living/basic/bot/secbot/proc/remove_saboteur_effect() + security_mode_flags &= ~SECBOT_SABOTEUR_AFFECTED + +/mob/living/basic/bot/secbot/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE)//shocks only make him angry + if(speed >= initial(speed) + 3) + return + speed += 3 + addtimer(VARSET_CALLBACK(src, speed, speed - 3), 6 SECONDS) + playsound(src, 'sound/machines/defib/defib_zap.ogg', 50) + visible_message(span_warning("[src] shakes and speeds up!")) + +/mob/living/basic/bot/secbot/Exited(atom/movable/gone, direction) + . = ..() + if(gone == weapon) + weapon = null + update_appearance() + +// Variables sent to TGUI +/mob/living/basic/bot/secbot/ui_data(mob/user) + var/list/data = ..() + if(!(bot_access_flags & BOT_COVER_LOCKED) || HAS_SILICON_ACCESS(user)) + data["custom_controls"]["check_id"] = security_mode_flags & SECBOT_CHECK_IDS + data["custom_controls"]["check_weapons"] = security_mode_flags & SECBOT_CHECK_WEAPONS + data["custom_controls"]["check_warrants"] = security_mode_flags & SECBOT_CHECK_RECORDS + data["custom_controls"]["handcuff_targets"] = security_mode_flags & SECBOT_HANDCUFF_TARGET + data["custom_controls"]["arrest_alert"] = security_mode_flags & SECBOT_DECLARE_ARRESTS + return data + +// Actions received from TGUI +/mob/living/basic/bot/secbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + var/mob/user = ui.user + if(. || (bot_access_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(user))) + return + + switch(action) + if("check_id") + security_mode_flags ^= SECBOT_CHECK_IDS + return TRUE + if("check_weapons") + security_mode_flags ^= SECBOT_CHECK_WEAPONS + return TRUE + if("check_warrants") + security_mode_flags ^= SECBOT_CHECK_RECORDS + return TRUE + if("handcuff_targets") + security_mode_flags ^= SECBOT_HANDCUFF_TARGET + return TRUE + if("arrest_alert") + security_mode_flags ^= SECBOT_DECLARE_ARRESTS + return TRUE + + +/mob/living/basic/bot/secbot/attack_hand(mob/living/carbon/human/user, list/modifiers) + + // Turns an oversight into a feature. Beepsky will now announce when pacifists taunt him over sec comms. + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + user.visible_message(span_notice("[user] taunts [src], daring [p_them()] to give chase!"), \ + span_notice("You taunt [src], daring [p_them()] to chase you!"), span_hear("You hear someone shout a daring taunt!"), DEFAULT_MESSAGE_RANGE, user) + speak("Taunted by pacifist scumbag [RUNECHAT_BOLD("[user]")] in [get_area(src)].", radio_channel) + + // Interrupt the attack chain. We've already handled this scenario for pacifists. + return + + return ..() + +/mob/living/basic/bot/secbot/proc/retrieve_emag_message() + audible_message(span_danger("[src] buzzes oddly!")) + +/mob/living/basic/bot/secbot/emag_act(mob/user, obj/item/card/emag/emag_card) + . = ..() + if(!(bot_access_flags & BOT_COVER_EMAGGED)) + return + if(user) + balloon_alert(user, "target assessment circuits shorted") + + retrieve_emag_message() + security_mode_flags &= ~SECBOT_DECLARE_ARRESTS + update_appearance() + return TRUE + +/mob/living/basic/bot/secbot/proc/post_arrest(mob/living/carbon/current_target) + playsound(src, SFX_LAW, 50, FALSE) + +/mob/living/basic/bot/secbot/proc/post_stun(mob/living/carbon/current_target, harm = FALSE) + flick("[base_icon_state]-c", src) + var/threat = 5 || ai_controller.blackboard[BB_CURRENT_CRIMINAL_ASSESSMENT] + if(security_mode_flags & SECBOT_DECLARE_ARRESTS) + var/area/location = get_area(src) + speak("[security_mode_flags & SECBOT_HANDCUFF_TARGET ? "Arresting" : "Detaining"] level [threat] scumbag [RUNECHAT_BOLD("[current_target]")] in [location].", radio_channel) + payment_check(current_target) + update_bot_mode(new_mode = BOT_PREP_ARREST) + +/mob/living/basic/bot/secbot/explode() + var/atom/drop_location = drop_location() + retrieve_secbot_drops(drop_location) + new /obj/effect/decal/cleanable/blood/oil(loc) + return ..() + +/mob/living/basic/bot/secbot/proc/retrieve_secbot_drops(atom/drop_location) + var/obj/item/bot_assembly/secbot/secbot_assembly = new(drop_location) + secbot_assembly.build_step = ASSEMBLY_FIRST_STEP + secbot_assembly.add_overlay("hs_hole") + secbot_assembly.created_name = name + new /obj/item/assembly/prox_sensor(drop_location) + drop_part(weapon, drop_location) + +/mob/living/basic/bot/secbot/proc/on_entered(datum/source, atom/movable/to_be_tripped) + SIGNAL_HANDLER + var/mob/living/possible_target = ai_controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(!has_gravity() || !ismob(to_be_tripped) || !possible_target) + return + var/mob/living/carbon/tripped_mob = to_be_tripped + if(istype(tripped_mob) && !in_range(src, possible_target)) + knockOver(tripped_mob) + +/// Returns true if the current target is unable to pay to be detained/arrested +/mob/living/basic/bot/secbot/proc/payment_check(mob/living/carbon/human/human_target) + var/fair_market_price = (security_mode_flags & SECBOT_HANDCUFF_TARGET) ? price_arrest : price_detain + if(fair_market_price <= 0) + return FALSE + if(!ishuman(human_target)) + return FALSE + var/obj/item/card/id/target_id = human_target.get_idcard() + if(!target_id) + say("Unable to pay fine: No ID card found.") + return TRUE + var/datum/bank_account/insurance = target_id.registered_account + if(!insurance) + say("Unable to pay fine: No bank account found.") + return TRUE + if(!insurance.adjust_money(-fair_market_price, "Securitron fine")) + say("Unable to pay fine: Not enough funds in account.") + return TRUE + + SSeconomy.get_dep_account(payment_department)?.adjust_money(fair_market_price) + say("Fine paid: Thank you for your compliance. Your account been charged [fair_market_price] [MONEY_NAME].") + return FALSE + +/mob/living/basic/bot/secbot/generate_speak_list() + var/static/list/secbot_lines = list( + BEEPSKY_VOICED_CRIMINAL_DETECTED = 'sound/mobs/non-humanoids/beepsky/criminal.ogg', + BEEPSKY_VOICED_FREEZE = 'sound/mobs/non-humanoids/beepsky/freeze.ogg', + BEEPSKY_VOICED_JUSTICE = 'sound/mobs/non-humanoids/beepsky/justice.ogg', + BEEPSKY_VOICED_YOUR_MOVE = 'sound/mobs/non-humanoids/beepsky/creep.ogg', + BEEPSKY_VOICED_I_AM_THE_LAW = 'sound/mobs/non-humanoids/beepsky/iamthelaw.ogg', + BEEPSKY_VOICED_SECURE_DAY = 'sound/mobs/non-humanoids/beepsky/secureday.ogg', + ) + return secbot_lines + + +/mob/living/basic/bot/secbot/proc/judgement_criteria() + var/final = FALSE + if(bot_access_flags & BOT_COVER_EMAGGED) + final |= JUDGE_EMAGGED + if(security_mode_flags & SECBOT_CHECK_IDS) + final |= JUDGE_IDCHECK + if(security_mode_flags & SECBOT_CHECK_RECORDS) + final |= JUDGE_RECORDCHECK + if(security_mode_flags & SECBOT_CHECK_WEAPONS) + final |= JUDGE_WEAPONCHECK + if(security_mode_flags & SECBOT_SABOTEUR_AFFECTED) + final |= JUDGE_CHILLOUT + return final + +/mob/living/basic/bot/secbot/proc/add_arrest_component() + AddComponent(/datum/component/stun_n_cuff,\ + stun_sound = stun_sound,\ + post_stun_callback = CALLBACK(src, PROC_REF(post_stun)),\ + post_arrest_callback = CALLBACK(src, PROC_REF(post_arrest)),\ + handcuff_type = cuff_type,\ + ) diff --git a/code/modules/mob/living/basic/bots/secbot/secbot_abilities.dm b/code/modules/mob/living/basic/bots/secbot/secbot_abilities.dm new file mode 100644 index 000000000000..23340fe22a0c --- /dev/null +++ b/code/modules/mob/living/basic/bots/secbot/secbot_abilities.dm @@ -0,0 +1,12 @@ +/datum/action/cooldown/mob_cooldown/bot/sword + name = "Energy Sword" + desc = "Turn your sword off/on!" + button_icon = 'icons/obj/weapons/transforming_energy.dmi' + button_icon_state = "e_sword_on" + cooldown_time = 0 SECONDS + click_to_activate = FALSE + +/datum/action/cooldown/mob_cooldown/bot/sword/Activate(mob/living/firer, atom/target) + var/obj/item/melee/energy/sword/saber/my_sword = locate() in owner + INVOKE_ASYNC(my_sword, TYPE_PROC_REF(/obj/item, attack_self), owner) + return TRUE diff --git a/code/modules/mob/living/basic/bots/secbot/secbot_ai.dm b/code/modules/mob/living/basic/bots/secbot/secbot_ai.dm new file mode 100644 index 000000000000..6aadd73fd218 --- /dev/null +++ b/code/modules/mob/living/basic/bots/secbot/secbot_ai.dm @@ -0,0 +1,91 @@ +/datum/ai_controller/basic_controller/bot/secbot + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/secbot, + BB_UNREACHABLE_LIST_COOLDOWN = 1 MINUTES, + BB_ALWAYS_IGNORE_FACTION = TRUE, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/arrest_target, + /datum/ai_planning_subtree/find_patrol_beacon, + ) + reset_keys = list( + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_BOT_SUMMON_TARGET, + ) + +/datum/targeting_strategy/basic/secbot/can_attack(mob/living/living_mob, atom/the_target, vision_range) + var/datum/ai_controller/basic_controller/bot/my_controller = living_mob.ai_controller + if(isnull(my_controller)) + return FALSE + if(!ishuman(the_target) || LAZYACCESS(my_controller.blackboard[BB_TEMPORARY_IGNORE_LIST], the_target)) + return FALSE + var/mob/living/carbon/human/human_target = the_target + if(human_target.handcuffed || human_target.stat != CONSCIOUS) + return FALSE + if(locate(human_target) in my_controller.blackboard[BB_BASIC_MOB_RETALIATE_LIST]) + return TRUE + var/mob/living/basic/bot/secbot/my_bot = living_mob + if(human_target.IsParalyzed() && !(my_bot.security_mode_flags & SECBOT_HANDCUFF_TARGET)) + return FALSE + var/assess_flags = my_bot.judgement_criteria() + var/assessed_threat = human_target.assess_threat(assess_flags) + if(assessed_threat > THREAT_ASSESS_DANGEROUS) + my_controller.set_blackboard_key(BB_CURRENT_CRIMINAL_ASSESSMENT, assessed_threat) + return (assessed_threat > THREAT_ASSESS_DANGEROUS) + + +/datum/ai_controller/basic_controller/bot/secbot/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_SET(BB_BASIC_MOB_CURRENT_TARGET), PROC_REF(on_target_set)) + RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_CLEARED(BB_BASIC_MOB_CURRENT_TARGET), PROC_REF(on_clear_target)) + +/datum/ai_controller/basic_controller/bot/secbot/proc/on_target_set() + SIGNAL_HANDLER + var/datum/action/cooldown/bot_announcement/announcement = blackboard[BB_ANNOUNCE_ABILITY] + var/threat_level = 5 || blackboard[BB_CURRENT_CRIMINAL_ASSESSMENT] + INVOKE_ASYNC(announcement, TYPE_PROC_REF(/datum/action/cooldown/bot_announcement, announce), "Level [threat_level] infraction alert!") + playsound(pawn, pick( + 'sound/mobs/non-humanoids/beepsky/criminal.ogg', + 'sound/mobs/non-humanoids/beepsky/justice.ogg', + 'sound/mobs/non-humanoids/beepsky/freeze.ogg', + ), 50, FALSE) + var/mob/living/basic/bot/secbot/my_bot = pawn + my_bot.update_bot_mode(new_mode = BOT_HUNT) + +/datum/ai_controller/basic_controller/bot/secbot/proc/on_clear_target() + SIGNAL_HANDLER + clear_blackboard_key(BB_CURRENT_CRIMINAL_ASSESSMENT) + +/datum/ai_planning_subtree/arrest_target + ///what behavior do we use when arresting? + var/datum/ai_behavior/arrest_behavior = /datum/ai_behavior/basic_melee_attack/interact_once/bot + +/datum/ai_planning_subtree/arrest_target/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/carbon/my_target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(QDELETED(my_target) || !istype(my_target) || my_target.handcuffed) + controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET) + return + + var/mob/living/basic/bot/secbot/my_bot = controller.pawn + var/bot_flags = my_bot.security_mode_flags + if(my_target.IsParalyzed() && !(bot_flags & SECBOT_HANDCUFF_TARGET)) + controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET) + return + + controller.queue_behavior(arrest_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/basic_melee_attack/interact_once/bot + movement_behavior = /datum/ai_movement/basic_avoidance + +/datum/ai_behavior/basic_melee_attack/interact_once/bot/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) + var/mob/living/carbon/human/human_target = controller.blackboard[target_key] + if(!isnull(human_target) && human_target.handcuffed) + controller.remove_from_blackboard_lazylist_key(BB_BASIC_MOB_RETALIATE_LIST, human_target) + return ..() diff --git a/code/modules/mob/living/basic/bots/secbot/secbot_subtypes.dm b/code/modules/mob/living/basic/bots/secbot/secbot_subtypes.dm new file mode 100644 index 000000000000..c34dca951560 --- /dev/null +++ b/code/modules/mob/living/basic/bots/secbot/secbot_subtypes.dm @@ -0,0 +1,65 @@ +/mob/living/basic/bot/secbot/beepsky + name = "Commander Beep O'sky" + desc = "It's Commander Beep O'sky! Officially the superior officer of all bots on station, Beepsky remains as humble and dedicated to the law as the day he was first fabricated." + bot_mode_flags = BOT_MODE_ON | BOT_MODE_AUTOPATROL | BOT_MODE_REMOTE_ENABLED + commissioned = TRUE + + +/mob/living/basic/bot/secbot/beepsky/officer + name = "Officer Beepsky" + desc = "It's Officer Beepsky! Powered by a potato and a shot of whiskey, and with a sturdier reinforced chassis, too." + health = 45 + +/mob/living/basic/bot/secbot/beepsky/officer/Initialize(mapload) + . = ..() + // Beepsky hates people scanning them + RegisterSignal(src, COMSIG_MOVABLE_SPY_STEALING, PROC_REF(on_spy_scan)) + +/mob/living/basic/bot/secbot/beepsky/officer/proc/on_spy_scan(datum/source, mob/user) + SIGNAL_HANDLER + + ai_controller?.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, user) + +/mob/living/basic/bot/secbot/beepsky/ofitser + name = "Prison Ofitser" + desc = "Powered by the tears and sweat of laborers." + bot_mode_flags = ~(BOT_MODE_CAN_BE_SAPIENT|BOT_MODE_AUTOPATROL) + +/mob/living/basic/bot/secbot/beepsky/armsky + name = "Sergeant-At-Armsky" + desc = "It's Sergeant-At-Armsky! He's a disgruntled assistant to the warden that would probably shoot you if he had hands." + health = 45 + bot_mode_flags = ~(BOT_MODE_CAN_BE_SAPIENT|BOT_MODE_AUTOPATROL) + security_mode_flags = SECBOT_DECLARE_ARRESTS | SECBOT_CHECK_IDS | SECBOT_CHECK_RECORDS | SECBOT_CHECK_WEAPONS + +/mob/living/basic/bot/secbot/beepsky/jr + name = "Officer Pipsqueak" + desc = "It's Commander Beep O'sky's smaller, just-as aggressive cousin, Pipsqueak." + commissioned = FALSE + +/mob/living/basic/bot/secbot/beepsky/jr/Initialize(mapload) + . = ..() + update_transform(0.8) + +/mob/living/basic/bot/secbot/pingsky + name = "Officer Pingsky" + desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment." + light_color = "#62baf5" + radio_channel = RADIO_CHANNEL_AI_PRIVATE + bot_mode_flags = ~(BOT_MODE_CAN_BE_SAPIENT|BOT_MODE_AUTOPATROL) + security_mode_flags = SECBOT_DECLARE_ARRESTS | SECBOT_CHECK_IDS | SECBOT_CHECK_RECORDS + +/mob/living/basic/bot/secbot/genesky + name = "Officer Genesky" + desc = "A beefy variant of the standard securitron model." + health = 50 + faction = list(FACTION_NANOTRASEN_PRIVATE) + bot_mode_flags = BOT_MODE_ON + bot_access_flags = BOT_COVER_LOCKED | BOT_COVER_EMAGGED + +/mob/living/basic/bot/secbot/beepsky/explode() + var/atom/current_location = drop_location() + new /obj/item/stock_parts/power_store/cell/potato(current_location) + var/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/drinking_oil = new(current_location) + drinking_oil.reagents.add_reagent(/datum/reagent/consumable/ethanol/whiskey, 15) + return ..() diff --git a/code/modules/mob/living/basic/bots/secbot/super_beepsky.dm b/code/modules/mob/living/basic/bots/secbot/super_beepsky.dm new file mode 100644 index 000000000000..cdb780036d8c --- /dev/null +++ b/code/modules/mob/living/basic/bots/secbot/super_beepsky.dm @@ -0,0 +1,96 @@ +/mob/living/basic/bot/secbot/grievous //This bot is powerful. If you managed to get 4 eswords somehow, you deserve this horror. Emag him for best results. + name = "General Beepsky" + desc = "Is that a secbot with four eswords in its arms...?" + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "grievous" + base_icon_state = "grievous" + health = 150 + maxHealth = 150 + ai_controller = /datum/ai_controller/basic_controller/bot/secbot/super_beepsky + baton_type = /obj/item/melee/energy/sword/saber + speed = 4 //he's a fast fucker + ///chance we block bullets + var/block_chance = 50 + ///is our sword currently active? + var/sword_active = FALSE + +/mob/living/basic/bot/secbot/grievous/Initialize(mapload) + . = ..() + RegisterSignal(weapon, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_weapon_transform)) + var/static/list/abilities = list( + /datum/action/cooldown/mob_cooldown/bot/sword = null, + ) + grant_actions_by_list(abilities) + INVOKE_ASYNC(weapon, TYPE_PROC_REF(/obj/item, attack_self), src) + RegisterSignal(src, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(block_bullets)) + + +/mob/living/basic/bot/secbot/grievous/check_block(atom/hit_by, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0, damage_type = BRUTE) + . = ..() + if(. & FAILED_BLOCK) + return . + + return (sword_active && prob(block_chance) ? SUCCESSFUL_BLOCK : FAILED_BLOCK) + +/mob/living/basic/bot/secbot/grievous/proc/on_weapon_transform(obj/item/source, mob/user, active) + SIGNAL_HANDLER + if(active) + visible_message(span_warning("[src] ignites his energy swords!")) + sword_active = active + update_icon_state() + +/mob/living/basic/bot/secbot/grievous/add_arrest_component() //i dont think we'll be arresting people... + return + +/mob/living/basic/bot/secbot/grievous/proc/block_bullets(datum/source, obj/projectile/hitting_projectile) + SIGNAL_HANDLER + + if(stat != CONSCIOUS ) + return NONE + + if(!sword_active || !prob(block_chance)) + return NONE + + visible_message(span_warning("[source] deflects [hitting_projectile] with its energy swords!")) + playsound(source, 'sound/items/weapons/blade1.ogg', 50, TRUE) + return COMPONENT_BULLET_BLOCKED + +/mob/living/basic/bot/secbot/grievous/on_entered(datum/source, atom/movable/movable_target) + . = ..() + if(!ismob(movable_target) || !ai_controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] == movable_target) + return + visible_message(span_warning("[src] flails his swords and cuts [movable_target]!")) + playsound(src, 'sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg' , 100, TRUE, -1) + INVOKE_ASYNC(src, TYPE_PROC_REF(/mob, ClickOn), movable_target) + + +/mob/living/basic/bot/secbot/grievous/update_icon_state() + . = ..() + + icon_state = "[base_icon_state][ sword_active ? "-c" : ""]" + +/mob/living/basic/bot/secbot/grievous/Destroy() + QDEL_NULL(weapon) + return ..() + +/mob/living/basic/bot/secbot/grievous/early_melee_attack(atom/target, list/modifiers, ignore_cooldown) + . = ..() + INVOKE_ASYNC(weapon, TYPE_PROC_REF(/obj/item, melee_attack_chain), src, target) + playsound(src, 'sound/items/weapons/blade1.ogg', 50, TRUE, -1) + +/mob/living/basic/bot/secbot/grievous/explode() + var/atom/drop_location = drop_location() + //Parent is dropping the weapon, so let's drop 3 more to make up for it. + for(var/i in 0 to 3) + drop_part(baton_type, drop_location) + + return ..() + + +/mob/living/basic/bot/secbot/grievous/toy //A toy version of general beepsky! + name = "Genewul Bweepskee" + desc = "An adorable looking secbot with four toy swords taped to its arms" + health = 50 + maxHealth = 50 + block_chance = 0 + baton_type = /obj/item/toy/sword diff --git a/code/modules/mob/living/basic/bots/secbot/super_beepsky_ai.dm b/code/modules/mob/living/basic/bots/secbot/super_beepsky_ai.dm new file mode 100644 index 000000000000..effd9a98cab6 --- /dev/null +++ b/code/modules/mob/living/basic/bots/secbot/super_beepsky_ai.dm @@ -0,0 +1,16 @@ +/datum/ai_controller/basic_controller/bot/secbot/super_beepsky + + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_patrol_beacon, + ) + +/datum/ai_controller/basic_controller/bot/secbot/super_beepsky/on_target_set() + . = ..() + var/mob/living/basic/bot/secbot/grievous/super_beeps = pawn + if(!super_beeps.sword_active) + INVOKE_ASYNC(super_beeps.weapon, TYPE_PROC_REF(/obj/item, attack_self), super_beeps) + super_beeps.visible_message("[super_beeps] points at [blackboard[BB_BASIC_MOB_CURRENT_TARGET]]!") diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 9ca801be1b41..c04a8c4c2821 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1537,7 +1537,7 @@ /mob/living/basic/bot/dedbot = 25, /mob/living/basic/bot/cleanbot = 25, /mob/living/basic/bot/firebot = 25, - /mob/living/basic/bot/honkbot = 25, + /mob/living/basic/bot/secbot/honkbot = 25, /mob/living/basic/bot/hygienebot = 25, /mob/living/basic/bot/vibebot = 25, /mob/living/basic/bot/medbot = 13, diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm deleted file mode 100644 index ee7e53b7141b..000000000000 --- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm +++ /dev/null @@ -1,146 +0,0 @@ -/mob/living/simple_animal/bot/secbot/grievous //This bot is powerful. If you managed to get 4 eswords somehow, you deserve this horror. Emag him for best results. - name = "General Beepsky" - desc = "Is that a secbot with four eswords in its arms...?" - icon = 'icons/mob/silicon/aibots.dmi' - icon_state = "grievous" - health = 150 - maxHealth = 150 - - baton_type = /obj/item/melee/energy/sword/saber - base_speed = 4 //he's a fast fucker - weapon_force = 30 - - var/block_chance = 50 - -/mob/living/simple_animal/bot/secbot/grievous/Initialize(mapload) - . = ..() - RegisterSignal(src, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(block_bullets)) - -/mob/living/simple_animal/bot/secbot/grievous/toy //A toy version of general beepsky! - name = "Genewul Bweepskee" - desc = "An adorable looking secbot with four toy swords taped to its arms" - health = 50 - maxHealth = 50 - baton_type = /obj/item/toy/sword - weapon_force = 0 - -/mob/living/simple_animal/bot/secbot/grievous/proc/block_bullets(datum/source, obj/projectile/hitting_projectile) - SIGNAL_HANDLER - - if(stat != CONSCIOUS) - return NONE - - visible_message(span_warning("[source] deflects [hitting_projectile] with its energy swords!")) - playsound(source, 'sound/items/weapons/blade1.ogg', 50, TRUE) - return COMPONENT_BULLET_BLOCKED - -/mob/living/simple_animal/bot/secbot/grievous/on_entered(datum/source, atom/movable/AM) - . = ..() - if(ismob(AM) && AM == target) - visible_message(span_warning("[src] flails his swords and cuts [AM]!")) - playsound(src,'sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg',100,TRUE,-1) - INVOKE_ASYNC(src, PROC_REF(stun_attack), AM) - -/mob/living/simple_animal/bot/secbot/grievous/Initialize(mapload) - . = ..() - INVOKE_ASYNC(weapon, TYPE_PROC_REF(/obj/item, attack_self), src) - -/mob/living/simple_animal/bot/secbot/grievous/Destroy() - QDEL_NULL(weapon) - return ..() - -/mob/living/simple_animal/bot/secbot/grievous/special_retaliate_after_attack(mob/user) - if(mode != BOT_HUNT) - return - if(prob(block_chance)) - visible_message(span_warning("[src] deflects [user]'s attack with his energy swords!")) - playsound(src, 'sound/items/weapons/blade1.ogg', 50, TRUE, -1) - return TRUE - -/mob/living/simple_animal/bot/secbot/grievous/stun_attack(mob/living/carbon/C) //Criminals don't deserve to live - weapon.attack(C, src) - playsound(src, 'sound/items/weapons/blade1.ogg', 50, TRUE, -1) - if(C.stat == DEAD) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 0.2 SECONDS) - back_to_idle() - - -/mob/living/simple_animal/bot/secbot/grievous/handle_automated_action() - if(!(bot_mode_flags & BOT_MODE_ON)) - return - switch(mode) - if(BOT_IDLE) // idle - update_appearance() - GLOB.move_manager.stop_looping(src) - look_for_perp() // see if any criminals are in range - if(!mode && bot_mode_flags & BOT_MODE_AUTOPATROL) // still idle, and set to patrol - mode = BOT_START_PATROL // switch to patrol mode - if(BOT_HUNT) // hunting for perp - update_appearance() - playsound(src,'sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg',100,TRUE,-1) - // general beepsky doesn't give up so easily, jedi scum - if(frustration >= 20) - GLOB.move_manager.stop_looping(src) - back_to_idle() - return - if(target) // make sure target exists - if(Adjacent(target) && isturf(target.loc)) // if right next to perp - target_lastloc = target.loc //stun_attack() can clear the target if they're dead, so this needs to be set first - stun_attack(target) - set_anchored(TRUE) - return - else // not next to perp - var/turf/olddist = get_dist(src, target) - GLOB.move_manager.move_to(src, target, 1, 4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else - back_to_idle() - - if(BOT_START_PATROL) - look_for_perp() - start_patrol() - - if(BOT_PATROL) - look_for_perp() - bot_patrol() - -/mob/living/simple_animal/bot/secbot/grievous/look_for_perp() - set_anchored(FALSE) - var/judgement_criteria = judgement_criteria() - for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal - if((C.stat) || (C.handcuffed)) - continue - - if((C.name == oldtarget_name) && (world.time < last_found + 100)) - continue - - threatlevel = C.assess_threat(judgement_criteria) - - if (threatlevel < THREAT_ASSESS_DANGEROUS) - continue - target = C - oldtarget_name = C.name - speak("Level [threatlevel] infraction alert!") - playsound(src, pick( - 'sound/mobs/non-humanoids/beepsky/criminal.ogg', - 'sound/mobs/non-humanoids/beepsky/justice.ogg', - 'sound/mobs/non-humanoids/beepsky/freeze.ogg', - ), 50, FALSE) - playsound(src,'sound/items/weapons/saberon.ogg',50,TRUE,-1) - visible_message(span_warning("[src] ignites his energy swords!")) - icon_state = "grievous-c" - visible_message("[src] points at [C.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - -/mob/living/simple_animal/bot/secbot/grievous/explode() - var/atom/Tsec = drop_location() - //Parent is dropping the weapon, so let's drop 3 more to make up for it. - for(var/dropped_weapons = 0 to 3) - drop_part(weapon, Tsec) - - return ..() diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 15173c282c1a..7934d9ab858a 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -198,8 +198,8 @@ to_chat(user, span_notice("You start attaching the gun to the frame...")) if(!tool.use_tool(src, user, 40, volume=100)) return ITEM_INTERACT_BLOCKING - var/mob/living/simple_animal/bot/secbot/ed209/B = new(drop_location()) - B.name = created_name + var/mob/living/basic/bot/secbot/ed209/new_bot = new(drop_location()) + new_bot.name = created_name to_chat(user, span_notice("You complete the ED-209.")) qdel(src) return ITEM_INTERACT_SUCCESS @@ -343,7 +343,7 @@ if(!can_finish_build(tool, user)) return ITEM_INTERACT_BLOCKING to_chat(user, span_notice("You add the [tool] to [src]! Honk!")) - var/mob/living/basic/bot/honkbot/new_honkbot = new(drop_location()) + var/mob/living/basic/bot/secbot/honkbot/new_honkbot = new(drop_location()) new_honkbot.name = created_name playsound(new_honkbot, 'sound/machines/ping.ogg', 50, TRUE, -1) qdel(tool) @@ -433,10 +433,10 @@ if(!can_finish_build(tool, user)) return ITEM_INTERACT_BLOCKING to_chat(user, span_notice("You complete the Securitron! Beep boop.")) - var/mob/living/simple_animal/bot/secbot/S = new(drop_loc) - S.name = created_name - S.baton_type = tool.type - S.robot_arm = robot_arm + var/mob/living/basic/bot/secbot/new_bot = new(drop_loc) + new_bot.name = created_name + new_bot.baton_type = tool.type + new_bot.robot_arm = robot_arm qdel(tool) qdel(src) return ITEM_INTERACT_SUCCESS @@ -478,9 +478,9 @@ return ITEM_INTERACT_BLOCKING to_chat(user, span_notice("You complete the Securitron!...Something seems a bit wrong with it..?")) - var/mob/living/simple_animal/bot/secbot/grievous/toy/S = new(drop_loc) - S.name = created_name - S.robot_arm = robot_arm + var/mob/living/basic/bot/secbot/grievous/toy/new_bot = new(drop_loc) + new_bot.name = created_name + new_bot.robot_arm = robot_arm qdel(tool) qdel(src) return ITEM_INTERACT_SUCCESS @@ -513,9 +513,9 @@ return ITEM_INTERACT_BLOCKING to_chat(user, span_notice("You complete the Securitron!...Something seems a bit wrong with it..?")) - var/mob/living/simple_animal/bot/secbot/grievous/S = new(drop_loc) - S.name = created_name - S.robot_arm = robot_arm + var/mob/living/basic/bot/secbot/grievous/new_bot = new(drop_loc) + new_bot.name = created_name + new_bot.robot_arm = robot_arm qdel(tool) qdel(src) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm deleted file mode 100644 index 945d0c2eba9a..000000000000 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ /dev/null @@ -1,138 +0,0 @@ -/mob/living/simple_animal/bot/secbot/ed209 - name = "\improper ED-209 Security Robot" - desc = "A security robot. He looks less than thrilled." - icon_state = "ed209" - light_color = "#f84e4e" - density = TRUE - health = 100 - maxHealth = 100 - obj_damage = 60 - environment_smash = ENVIRONMENT_SMASH_WALLS //Walls can't stop THE LAW - mob_size = MOB_SIZE_LARGE - - bot_type = ADVANCED_SEC_BOT - hackables = "combat inhibitors" - - automated_announcements = list(ED209_VOICED_DOWN_WEAPONS = 'sound/mobs/non-humanoids/ed209/ed209_20sec.ogg') - - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.8, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2.1) - - var/lastfired = 0 - var/shot_delay = 1.5 SECONDS - var/shoot_sound = 'sound/items/weapons/laser.ogg' - var/projectile = /obj/projectile/beam/disabler - var/fair_market_projectile = /obj/projectile/bullet/c38 // For shooting the worst scumbags of all: the poor - -/mob/living/simple_animal/bot/secbot/ed209/Initialize(mapload) - . = ..() - set_weapon() //giving it the right projectile and firing sound. - - AddComponent(/datum/component/defaceable, \ - icon = 'icons/mob/silicon/aibot_faces.dmi', \ - icon_states = list("ed209" = FALSE, "ed209_highlight" = TRUE), \ - drawing_of = "a face", \ - ) - -/mob/living/simple_animal/bot/secbot/ed209/bot_reset() - ..() - set_weapon() - -/mob/living/simple_animal/bot/secbot/ed209/emag_act(mob/user, obj/item/card/emag/emag_card) - . = ..() - icon_state = "ed209[get_bot_flag(bot_mode_flags, BOT_MODE_ON)]" - set_weapon() - balloon_alert(user, "safeties disabled") - audible_message(span_bolddanger("[src] buzzes menacingly!")) - return TRUE - -/mob/living/simple_animal/bot/secbot/ed209/handle_automated_action() - var/judgement_criteria = judgement_criteria() - var/list/targets = list() - for(var/mob/living/carbon/nearby_carbon in view(7, src)) //Let's find us a target - var/threatlevel = 0 - if(nearby_carbon.incapacitated) - continue - threatlevel = nearby_carbon.assess_threat(judgement_criteria) - if(threatlevel < THREAT_ASSESS_DANGEROUS) - continue - var/dst = get_dist(src, nearby_carbon) - if(dst <= 1 || dst > 7) - continue - targets += nearby_carbon - if(targets.len > 0) - var/mob/living/carbon/all_targets = pick(targets) - if(all_targets.stat != DEAD && !all_targets.handcuffed) //we don't shoot people who are dead, cuffed or lying down. - shoot_at(all_targets) - ..() - -/mob/living/simple_animal/bot/secbot/ed209/threat_react(threatlevel) - speak("Level [threatlevel] infraction alert!") - playsound(src, pick( - 'sound/mobs/non-humanoids/ed209/ed209_20sec.ogg', - 'sound/mobs/non-humanoids/ed209/edplaceholder.ogg', - ), 50, FALSE) - -/mob/living/simple_animal/bot/secbot/ed209/proc/set_weapon() //used to update the projectile type and firing sound - shoot_sound = 'sound/items/weapons/laser.ogg' - if(bot_cover_flags & BOT_COVER_EMAGGED) - projectile = /obj/projectile/beam - else - projectile = /obj/projectile/beam/disabler - -/mob/living/simple_animal/bot/secbot/ed209/proc/shoot_at(mob/target) - if(world.time <= lastfired + shot_delay) - return - lastfired = world.time - var/turf/T = loc - var/turf/U = get_turf(target) - if(!U) - return - if(!isturf(T)) - return - if(!projectile) - return - - var/obj/projectile/fired_bullet = new projectile(loc) - playsound(src, shoot_sound, 50, TRUE) - fired_bullet.aim_projectile(target, src) - fired_bullet.fire() - -/mob/living/simple_animal/bot/secbot/ed209/emp_act(severity) - if(severity == 2 && prob(70)) - severity = 1 - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(severity <= 1) - return - new /obj/effect/temp_visual/emp(loc) - var/list/mob/living/carbon/targets = list() - for(var/mob/living/carbon/nearby_carbons in view(12,src)) - if(nearby_carbons.stat == DEAD) - continue - targets += nearby_carbons - if(!targets.len) - return - if(prob(50)) - var/mob/toshoot = pick(targets) - if(toshoot) - targets -= toshoot - if(prob(50) && !(bot_cover_flags & BOT_COVER_EMAGGED)) // Temporarily emags it - bot_cover_flags |= BOT_COVER_EMAGGED - set_weapon() - shoot_at(toshoot) - bot_cover_flags &= ~BOT_COVER_EMAGGED - set_weapon() - else - shoot_at(toshoot) - else if(prob(50)) - if(targets.len) - var/mob/to_arrest = pick(targets) - if(to_arrest) - target = to_arrest - mode = BOT_HUNT - -/mob/living/simple_animal/bot/secbot/ed209/RangedAttack(atom/A) - if(!(bot_mode_flags & BOT_MODE_ON)) - return - shoot_at(A) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm deleted file mode 100644 index bd6024c74ad4..000000000000 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ /dev/null @@ -1,588 +0,0 @@ -/mob/living/simple_animal/bot/secbot - name = "\improper Securitron" - desc = "A little security robot. He looks less than thrilled." - icon = 'icons/mob/silicon/aibots.dmi' - icon_state = "secbot" - light_color = "#f56275" - light_power = 0.8 - gender = MALE - density = FALSE - anchored = FALSE - health = 25 - maxHealth = 25 - damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, STAMINA = 0, OXY = 0) - pass_flags = PASSMOB | PASSFLAPS - combat_mode = TRUE - can_buckle_to = FALSE - - req_one_access = list(ACCESS_SECURITY) - radio_key = /obj/item/encryptionkey/secbot //AI Priv + Security - radio_channel = RADIO_CHANNEL_SECURITY //Security channel - bot_type = SEC_BOT - bot_mode_flags = ~BOT_MODE_CAN_BE_SAPIENT - data_hud_type = TRAIT_SECURITY_HUD - hackables = "target identification systems" - path_image_color = COLOR_RED - possessed_message = "You are a securitron! Guard the station to the best of your ability!" - - automated_announcements = list( - BEEPSKY_VOICED_CRIMINAL_DETECTED = 'sound/mobs/non-humanoids/beepsky/criminal.ogg', - BEEPSKY_VOICED_FREEZE = 'sound/mobs/non-humanoids/beepsky/freeze.ogg', - BEEPSKY_VOICED_JUSTICE = 'sound/mobs/non-humanoids/beepsky/justice.ogg', - BEEPSKY_VOICED_YOUR_MOVE = 'sound/mobs/non-humanoids/beepsky/creep.ogg', - BEEPSKY_VOICED_I_AM_THE_LAW = 'sound/mobs/non-humanoids/beepsky/iamthelaw.ogg', - BEEPSKY_VOICED_SECURE_DAY = 'sound/mobs/non-humanoids/beepsky/secureday.ogg', - ) - - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3.2) - - ///Whether this secbot is considered 'commissioned' and given the trait on Initialize. - var/commissioned = FALSE - ///The type of baton this Secbot will use - var/baton_type = /obj/item/melee/baton/security - ///The type of cuffs we use on criminals after making arrests - var/cuff_type = /obj/item/restraints/handcuffs/cable/zipties/used - ///The weapon (from baton_type) that will be used to make arrests. - var/obj/item/weapon - ///Their current target - var/mob/living/carbon/target - ///Name of their last target to prevent spamming - var/oldtarget_name - ///The threat level of the BOT, will arrest anyone at threatlevel 4 or above - var/threatlevel = 0 - ///The last location their target was seen at - var/target_lastloc - ///Time since last seeing their perpetrator - var/last_found - - ///Flags SecBOTs use on what to check on targets when arresting, and whether they should announce it to security/handcuff their target - var/security_mode_flags = SECBOT_DECLARE_ARRESTS | SECBOT_CHECK_RECORDS | SECBOT_HANDCUFF_TARGET -// Selections: SECBOT_DECLARE_ARRESTS | SECBOT_CHECK_IDS | SECBOT_CHECK_WEAPONS | SECBOT_CHECK_RECORDS | SECBOT_HANDCUFF_TARGET - - /// On arrest, charges the violator this much. - /// If they don't have that much in their account, they will get beaten instead - var/price_arrest = 0 - /// Charged each time the violator is stunned on detain - var/price_detain = 0 - ///Force of the harmbaton used on them - var/weapon_force = 20 - ///The department the secbot will deposit collected money into - var/payment_department = ACCOUNT_SEC - -/mob/living/simple_animal/bot/secbot/beepsky - name = "Commander Beep O'sky" - desc = "It's Commander Beep O'sky! Officially the superior officer of all bots on station, Beepsky remains as humble and dedicated to the law as the day he was first fabricated." - bot_mode_flags = BOT_MODE_ON | BOT_MODE_AUTOPATROL | BOT_MODE_REMOTE_ENABLED - commissioned = TRUE - - -/mob/living/simple_animal/bot/secbot/beepsky/officer - name = "Officer Beepsky" - desc = "It's Officer Beepsky! Powered by a potato and a shot of whiskey, and with a sturdier reinforced chassis, too." - health = 45 - -/mob/living/simple_animal/bot/secbot/beepsky/officer/Initialize(mapload) - . = ..() - // Beepsky hates people scanning them - RegisterSignal(src, COMSIG_MOVABLE_SPY_STEALING, PROC_REF(retaliate_async)) - -/mob/living/simple_animal/bot/secbot/beepsky/ofitser - name = "Prison Ofitser" - desc = "Powered by the tears and sweat of laborers." - bot_mode_flags = ~(BOT_MODE_CAN_BE_SAPIENT|BOT_MODE_AUTOPATROL) - -/mob/living/simple_animal/bot/secbot/beepsky/armsky - name = "Sergeant-At-Armsky" - desc = "It's Sergeant-At-Armsky! He's a disgruntled assistant to the warden that would probably shoot you if he had hands." - health = 45 - bot_mode_flags = ~(BOT_MODE_CAN_BE_SAPIENT|BOT_MODE_AUTOPATROL) - security_mode_flags = SECBOT_DECLARE_ARRESTS | SECBOT_CHECK_IDS | SECBOT_CHECK_RECORDS | SECBOT_CHECK_WEAPONS - -/mob/living/simple_animal/bot/secbot/beepsky/jr - name = "Officer Pipsqueak" - desc = "It's Commander Beep O'sky's smaller, just-as aggressive cousin, Pipsqueak." - commissioned = FALSE - -/mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize(mapload) - . = ..() - update_transform(0.8) - -/mob/living/simple_animal/bot/secbot/pingsky - name = "Officer Pingsky" - desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment." - light_color = "#62baf5" - radio_channel = RADIO_CHANNEL_AI_PRIVATE - bot_mode_flags = ~(BOT_MODE_CAN_BE_SAPIENT|BOT_MODE_AUTOPATROL) - security_mode_flags = SECBOT_DECLARE_ARRESTS | SECBOT_CHECK_IDS | SECBOT_CHECK_RECORDS - -/mob/living/simple_animal/bot/secbot/genesky - name = "Officer Genesky" - desc = "A beefy variant of the standard securitron model." - health = 50 - faction = list(FACTION_NANOTRASEN_PRIVATE) - bot_mode_flags = BOT_MODE_ON - bot_cover_flags = BOT_COVER_LOCKED | BOT_COVER_EMAGGED - -/mob/living/simple_animal/bot/secbot/beepsky/explode() - var/atom/Tsec = drop_location() - new /obj/item/stock_parts/power_store/cell/potato(Tsec) - var/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/drinking_oil = new(Tsec) - drinking_oil.reagents.add_reagent(/datum/reagent/consumable/ethanol/whiskey, 15) - return ..() - -/mob/living/simple_animal/bot/secbot/Initialize(mapload) - . = ..() - weapon = new baton_type() - update_appearance(UPDATE_ICON) - if(commissioned) - ADD_TRAIT(src, TRAIT_COMMISSIONED, INNATE_TRAIT) - - // Doing this hurts my soul, but simplebot access reworks are for another day. - var/datum/id_trim/job/det_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/detective] - access_card.add_access(det_trim.access + det_trim.wildcard_access) - prev_access = access_card.access.Copy() - - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - AddComponent(/datum/component/security_vision, judgement_criteria = NONE, update_judgement_criteria = CALLBACK(src, PROC_REF(judgement_criteria))) - -/mob/living/simple_animal/bot/secbot/Destroy() - QDEL_NULL(weapon) - return ..() - -/mob/living/simple_animal/bot/secbot/update_icon_state() - if(mode == BOT_HUNT) - icon_state = "[initial(icon_state)]-c" - return - return ..() - -/mob/living/simple_animal/bot/secbot/turn_off() - ..() - mode = BOT_IDLE - -/mob/living/simple_animal/bot/secbot/bot_reset() - ..() - target = null - oldtarget_name = null - set_anchored(FALSE) - GLOB.move_manager.stop_looping(src) - last_found = world.time - -/mob/living/simple_animal/bot/secbot/on_saboteur(datum/source, disrupt_duration) - . = ..() - if(!(security_mode_flags & SECBOT_SABOTEUR_AFFECTED)) - security_mode_flags |= SECBOT_SABOTEUR_AFFECTED - addtimer(CALLBACK(src, PROC_REF(remove_saboteur_effect)), disrupt_duration) - return TRUE - -/mob/living/simple_animal/bot/secbot/proc/remove_saboteur_effect() - security_mode_flags &= ~SECBOT_SABOTEUR_AFFECTED - -/mob/living/simple_animal/bot/secbot/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE)//shocks only make him angry - if(base_speed < initial(base_speed) + 3) - base_speed += 3 - addtimer(VARSET_CALLBACK(src, base_speed, base_speed - 3), 6 SECONDS) - playsound(src, 'sound/machines/defib/defib_zap.ogg', 50) - visible_message(span_warning("[src] shakes and speeds up!")) - -/mob/living/simple_animal/bot/secbot/Exited(atom/movable/gone, direction) - . = ..() - if(gone == weapon) - weapon = null - update_appearance() - -// Variables sent to TGUI -/mob/living/simple_animal/bot/secbot/ui_data(mob/user) - var/list/data = ..() - if(!(bot_cover_flags & BOT_COVER_LOCKED) || HAS_SILICON_ACCESS(user)) - data["custom_controls"]["check_id"] = security_mode_flags & SECBOT_CHECK_IDS - data["custom_controls"]["check_weapons"] = security_mode_flags & SECBOT_CHECK_WEAPONS - data["custom_controls"]["check_warrants"] = security_mode_flags & SECBOT_CHECK_RECORDS - data["custom_controls"]["handcuff_targets"] = security_mode_flags & SECBOT_HANDCUFF_TARGET - data["custom_controls"]["arrest_alert"] = security_mode_flags & SECBOT_DECLARE_ARRESTS - return data - -// Actions received from TGUI -/mob/living/simple_animal/bot/secbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - var/mob/user = ui.user - if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(user))) - return - - switch(action) - if("check_id") - security_mode_flags ^= SECBOT_CHECK_IDS - if("check_weapons") - security_mode_flags ^= SECBOT_CHECK_WEAPONS - if("check_warrants") - security_mode_flags ^= SECBOT_CHECK_RECORDS - if("handcuff_targets") - security_mode_flags ^= SECBOT_HANDCUFF_TARGET - if("arrest_alert") - security_mode_flags ^= SECBOT_DECLARE_ARRESTS - -/mob/living/simple_animal/bot/secbot/proc/retaliate_async(datum/source, mob/user, ...) - SIGNAL_HANDLER - - INVOKE_ASYNC(src, PROC_REF(retaliate), user) - -/mob/living/simple_animal/bot/secbot/proc/retaliate(mob/living/carbon/human/attacking_human) - var/judgement_criteria = judgement_criteria() - threatlevel = attacking_human.assess_threat(judgement_criteria) - threatlevel += 6 - if(threatlevel >= THREAT_ASSESS_DANGEROUS) - target = attacking_human - mode = BOT_HUNT - if(threatlevel < 0 && prob(5)) - manual_emote("salutes.") - speak("Thank you sir.") - -/mob/living/simple_animal/bot/secbot/proc/judgement_criteria() - var/final = FALSE - if(bot_cover_flags & BOT_COVER_EMAGGED) - final |= JUDGE_EMAGGED - if(security_mode_flags & SECBOT_CHECK_IDS) - final |= JUDGE_IDCHECK - if(security_mode_flags & SECBOT_CHECK_RECORDS) - final |= JUDGE_RECORDCHECK - if(security_mode_flags & SECBOT_CHECK_WEAPONS) - final |= JUDGE_WEAPONCHECK - if(security_mode_flags & SECBOT_SABOTEUR_AFFECTED) - final |= JUDGE_CHILLOUT - return final - -/mob/living/simple_animal/bot/secbot/proc/special_retaliate_after_attack(mob/user) //allows special actions to take place after being attacked. - return - -/mob/living/simple_animal/bot/secbot/attack_hand(mob/living/carbon/human/user, list/modifiers) - if(user.combat_mode) - retaliate(user) - if(special_retaliate_after_attack(user)) - return - - // Turns an oversight into a feature. Beepsky will now announce when pacifists taunt him over sec comms. - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - user.visible_message(span_notice("[user] taunts [src], daring [p_them()] to give chase!"), \ - span_notice("You taunt [src], daring [p_them()] to chase you!"), span_hear("You hear someone shout a daring taunt!"), DEFAULT_MESSAGE_RANGE, user) - speak("Taunted by pacifist scumbag [RUNECHAT_BOLD("[user]")] in [get_area(src)].", radio_channel) - - // Interrupt the attack chain. We've already handled this scenario for pacifists. - return - - return ..() - -/mob/living/simple_animal/bot/secbot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) - ..() - if(!(bot_mode_flags & BOT_MODE_ON)) // Bots won't remember if you hit them while they're off. - return - if(attacking_item.tool_behaviour == TOOL_WELDER && !user.combat_mode) // Any intent but harm will heal, so we shouldn't get angry. - return - if(attacking_item.tool_behaviour != TOOL_SCREWDRIVER && (attacking_item.force) && (!target) && (attacking_item.damtype != STAMINA)) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass. - retaliate(user) - special_retaliate_after_attack(user) - -/mob/living/simple_animal/bot/secbot/emag_act(mob/user, obj/item/card/emag/emag_card) - . = ..() - if(!(bot_cover_flags & BOT_COVER_EMAGGED)) - return - if(user) - balloon_alert(user, "target assessment circuits shorted") - oldtarget_name = user.name - - if(bot_type == HONK_BOT) - audible_message(span_danger("[src] gives out an evil laugh!")) - playsound(src, 'sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg', 75, TRUE, -1) // evil laughter - else - audible_message(span_danger("[src] buzzes oddly!")) - - security_mode_flags &= ~SECBOT_DECLARE_ARRESTS - update_appearance() - return TRUE - -/mob/living/simple_animal/bot/secbot/bullet_act(obj/projectile/proj) - . = ..() - if(. != BULLET_ACT_HIT) - return - - if(istype(proj, /obj/projectile/beam) || istype(proj, /obj/projectile/bullet)) - if((proj.damage_type == BURN) || (proj.damage_type == BRUTE)) - if(proj.is_hostile_projectile() && proj.damage < src.health && ishuman(proj.firer)) - retaliate(proj.firer) - -/mob/living/simple_animal/bot/secbot/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - if(!(bot_mode_flags & BOT_MODE_ON)) - return - if(!can_unarmed_attack()) - return - if(!iscarbon(attack_target)) - return ..() - var/mob/living/carbon/carbon_target = attack_target - if(!carbon_target.IsParalyzed() || !(security_mode_flags & SECBOT_HANDCUFF_TARGET)) - stun_attack(attack_target, payment_check()) - else if(carbon_target.canBeHandcuffed() && !carbon_target.handcuffed) - start_handcuffing(attack_target) - -/mob/living/simple_animal/bot/secbot/hitby(atom/movable/hitting_atom, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) - if(isitem(hitting_atom)) - var/obj/item/item_hitby = hitting_atom - var/mob/thrown_by = throwingdatum?.get_thrower() - if(item_hitby.throwforce < src.health && thrown_by && ishuman(thrown_by)) - var/mob/living/carbon/human/human_throwee = thrown_by - retaliate(human_throwee) - ..() - -/mob/living/simple_animal/bot/secbot/proc/start_handcuffing(mob/living/carbon/current_target) - mode = BOT_ARREST - playsound(src, 'sound/items/weapons/cablecuff.ogg', 30, TRUE, -2) - current_target.visible_message(span_danger("[src] is trying to put zipties on [current_target]!"),\ - span_userdanger("[src] is trying to put zipties on you!")) - addtimer(CALLBACK(src, PROC_REF(handcuff_target), current_target), 6 SECONDS) - -/mob/living/simple_animal/bot/secbot/proc/handcuff_target(mob/living/carbon/current_target) - if(!(bot_mode_flags & BOT_MODE_ON)) //if he's in a closet or not adjacent, we cancel cuffing. - return FALSE - if(!isturf(current_target.loc)) - return FALSE - if(!Adjacent(current_target)) - return FALSE - if(!current_target.handcuffed) - current_target.set_handcuffed(new cuff_type(current_target)) - playsound(src, SFX_LAW, 50, FALSE) - back_to_idle() - -/mob/living/simple_animal/bot/secbot/proc/stun_attack(mob/living/carbon/current_target, harm = FALSE) - var/judgement_criteria = judgement_criteria() - playsound(src, 'sound/items/weapons/egloves.ogg', 50, TRUE, -1) - icon_state = "[initial(icon_state)]-c" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 0.2 SECONDS) - var/threat = 5 - - if(harm) - weapon.attack(current_target, src) - if(ishuman(current_target)) - current_target.set_stutter(10 SECONDS) - current_target.Paralyze(100) - var/mob/living/carbon/human/human_target = current_target - threat = human_target.assess_threat(judgement_criteria) - else - current_target.Paralyze(100) - current_target.set_stutter(10 SECONDS) - threat = current_target.assess_threat(judgement_criteria) - - log_combat(src, current_target, "stunned") - if(security_mode_flags & SECBOT_DECLARE_ARRESTS) - var/area/location = get_area(src) - speak("[security_mode_flags & SECBOT_HANDCUFF_TARGET ? "Arresting" : "Detaining"] level [threat] scumbag [RUNECHAT_BOLD("[current_target]")] in [location].", radio_channel) - current_target.visible_message(span_danger("[src] stuns [current_target]!"),\ - span_userdanger("[src] stuns you!")) - - target_lastloc = current_target.loc - mode = BOT_PREP_ARREST - -/mob/living/simple_animal/bot/secbot/handle_automated_action() - . = ..() - if(!.) - return - - switch(mode) - - if(BOT_IDLE) // idle - GLOB.move_manager.stop_looping(src) - look_for_perp() // see if any criminals are in range - if((mode == BOT_IDLE) && bot_mode_flags & BOT_MODE_AUTOPATROL) // didn't start hunting during look_for_perp, and set to patrol - mode = BOT_START_PATROL // switch to patrol mode - - if(BOT_HUNT) // hunting for perp - // if can't reach perp for long enough, go idle - if(frustration >= 8) - GLOB.move_manager.stop_looping(src) - back_to_idle() - return - - if(!target) // make sure target exists - back_to_idle() - return - if(Adjacent(target) && isturf(target.loc)) // if right next to perp - stun_attack(target, payment_check()) - set_anchored(TRUE) - return - - // not next to perp - var/turf/olddist = get_dist(src, target) - GLOB.move_manager.move_to(src, target, 1, 4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - - if(BOT_PREP_ARREST) // preparing to arrest target - // see if he got away. If he's no no longer adjacent or inside a closet or about to get up, we hunt again. - if(!Adjacent(target) || !isturf(target.loc) || !HAS_TRAIT(target, TRAIT_FLOORED)) - back_to_hunt() - return - - if(!iscarbon(target) || !target.canBeHandcuffed()) - back_to_idle() - return - - if(security_mode_flags & SECBOT_HANDCUFF_TARGET) - if(!target.handcuffed) //he's not cuffed? Try to cuff him! - start_handcuffing(target) - else - back_to_idle() - return - - if(BOT_ARREST) - if(!target) - set_anchored(FALSE) - mode = BOT_IDLE - last_found = world.time - frustration = 0 - return - - if(target.handcuffed) // target is cuffed, mission accomplished - if(payment_check()) // try to fine them - give them a love tap if they fail - stun_attack(target, TRUE) - else // otherwise return to idle state - back_to_idle() - return - - if(!Adjacent(target) || !isturf(target.loc) || (target.loc != target_lastloc && !HAS_TRAIT(target, TRAIT_FLOORED))) //if he's changed loc and about to get up or not adjacent or got into a closet, we prep arrest again. - back_to_hunt() - return - else //Try arresting again if the target escapes. - mode = BOT_PREP_ARREST - set_anchored(FALSE) - - if(BOT_START_PATROL) - look_for_perp() - start_patrol() - - if(BOT_PATROL) - look_for_perp() - bot_patrol() - -/mob/living/simple_animal/bot/secbot/proc/back_to_idle() - set_anchored(FALSE) - mode = BOT_IDLE - target = null - last_found = world.time - frustration = 0 - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - -/mob/living/simple_animal/bot/secbot/proc/back_to_hunt() - set_anchored(FALSE) - frustration = 0 - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) -// look for a criminal in view of the bot - -/mob/living/simple_animal/bot/secbot/proc/look_for_perp() - set_anchored(FALSE) - var/judgement_criteria = judgement_criteria() - for(var/mob/living/carbon/nearby_carbons in view(7, src)) //Let's find us a criminal - if((nearby_carbons.stat) || (nearby_carbons.handcuffed)) - continue - - if((nearby_carbons.name == oldtarget_name) && (world.time < last_found + 100)) - continue - - threatlevel = nearby_carbons.assess_threat(judgement_criteria) - - if(threatlevel < THREAT_ASSESS_DANGEROUS) - continue - - target = nearby_carbons - oldtarget_name = nearby_carbons.name - threat_react(threatlevel) - visible_message("[src] points at [nearby_carbons.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - -/// React to detecting criminal scum by making some kind of noise -/mob/living/simple_animal/bot/secbot/proc/threat_react(threatlevel) - speak("Level [threatlevel] infraction alert!") - playsound(src, pick( - 'sound/mobs/non-humanoids/beepsky/criminal.ogg', - 'sound/mobs/non-humanoids/beepsky/justice.ogg', - 'sound/mobs/non-humanoids/beepsky/freeze.ogg', - ), 50, FALSE) - -/mob/living/simple_animal/bot/secbot/explode() - var/atom/Tsec = drop_location() - switch(bot_type) - if(ADVANCED_SEC_BOT) - var/obj/item/bot_assembly/ed209/ed_assembly = new(Tsec) - ed_assembly.build_step = ASSEMBLY_FIRST_STEP - ed_assembly.add_overlay("hs_hole") - ed_assembly.created_name = name - new /obj/item/assembly/prox_sensor(Tsec) - var/obj/item/gun/energy/disabler/disabler_gun = new(Tsec) - disabler_gun.cell.charge = 0 - disabler_gun.update_appearance() - if(prob(50)) - new /obj/item/bodypart/leg/left/robot(Tsec) - if(prob(25)) - new /obj/item/bodypart/leg/right/robot(Tsec) - if(prob(25))//50% chance for a helmet OR vest - if(prob(50)) - new /obj/item/clothing/head/helmet(Tsec) - else - new /obj/item/clothing/suit/armor/vest(Tsec) - if(HONK_BOT) - var/obj/item/bot_assembly/honkbot/honkbot_assembly = new(Tsec) - honkbot_assembly.build_step = ASSEMBLY_FIRST_STEP - honkbot_assembly.created_name = name - new /obj/item/assembly/prox_sensor(Tsec) - drop_part(baton_type, Tsec) - else - var/obj/item/bot_assembly/secbot/secbot_assembly = new(Tsec) - secbot_assembly.build_step = ASSEMBLY_FIRST_STEP - secbot_assembly.add_overlay("hs_hole") - secbot_assembly.created_name = name - new /obj/item/assembly/prox_sensor(Tsec) - drop_part(baton_type, Tsec) - - new /obj/effect/decal/cleanable/blood/oil(loc) - return ..() - -/mob/living/simple_animal/bot/secbot/attack_alien(mob/living/carbon/alien/user, list/modifiers) - . = ..() - if(!isalien(target)) - target = user - mode = BOT_HUNT - -/mob/living/simple_animal/bot/secbot/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - if(has_gravity() && ismob(AM) && target) - var/mob/living/carbon/C = AM - if(!istype(C) || !C || in_range(src, target)) - return - knockOver(C) - -/// Returns true if the current target is unable to pay to be detained/arrested -/mob/living/simple_animal/bot/secbot/proc/payment_check() - var/fair_market_price = (security_mode_flags & SECBOT_HANDCUFF_TARGET) ? price_arrest : price_detain - if(fair_market_price <= 0) - return FALSE - if(!ishuman(target)) - return FALSE - var/mob/living/carbon/human/human_target = target - var/obj/item/card/id/target_id = human_target.get_idcard() - if(!target_id) - say("Unable to pay fine: No ID card found.") - return TRUE - var/datum/bank_account/insurance = target_id.registered_account - if(!insurance) - say("Unable to pay fine: No bank account found.") - return TRUE - if(!insurance.adjust_money(-fair_market_price, "Securitron fine")) - say("Unable to pay fine: Not enough funds in account.") - return TRUE - - SSeconomy.get_dep_account(payment_department)?.adjust_money(fair_market_price) - say("Fine paid: Thank you for your compliance. Your account been charged [fair_market_price] [MONEY_NAME].") - return FALSE diff --git a/code/modules/spells/spell_types/conjure/ed_swarm.dm b/code/modules/spells/spell_types/conjure/ed_swarm.dm index 3341f3a6aace..0370bc97099d 100644 --- a/code/modules/spells/spell_types/conjure/ed_swarm.dm +++ b/code/modules/spells/spell_types/conjure/ed_swarm.dm @@ -4,19 +4,19 @@ desc = "This spell dispenses wizard justice." summon_radius = 3 - summon_type = list(/mob/living/simple_animal/bot/secbot/ed209) + summon_type = list(/mob/living/basic/bot/secbot/ed209) summon_amount = 10 /datum/action/cooldown/spell/conjure/summon_ed_swarm/post_summon(atom/summoned_object, atom/cast_on) - if(!istype(summoned_object, /mob/living/simple_animal/bot/secbot/ed209)) + if(!istype(summoned_object, /mob/living/basic/bot/secbot/ed209)) return - var/mob/living/simple_animal/bot/secbot/ed209/summoned_bot = summoned_object + var/mob/living/basic/bot/secbot/ed209/summoned_bot = summoned_object summoned_bot.name = "Wizard's Justicebot" summoned_bot.security_mode_flags = ~SECBOT_DECLARE_ARRESTS summoned_bot.bot_mode_flags &= ~BOT_MODE_REMOTE_ENABLED summoned_bot.bot_mode_flags |= BOT_COVER_EMAGGED - summoned_bot.projectile = /obj/projectile/beam/laser - summoned_bot.shoot_sound = 'sound/items/weapons/laser.ogg' + summoned_bot.projectile_type = /obj/projectile/beam/laser + summoned_bot.projectile_sound = 'sound/items/weapons/laser.ogg' diff --git a/code/modules/spells/spell_types/shapeshift/shapechange.dm b/code/modules/spells/spell_types/shapeshift/shapechange.dm index dd2597d00970..aabec75e3db1 100644 --- a/code/modules/spells/spell_types/shapeshift/shapechange.dm +++ b/code/modules/spells/spell_types/shapeshift/shapechange.dm @@ -17,5 +17,5 @@ /mob/living/basic/mouse, /mob/living/basic/pet/dog/corgi, /mob/living/basic/spider/giant/viper/wizard, - /mob/living/simple_animal/bot/secbot/ed209, + /mob/living/basic/bot/secbot/ed209, ) diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index 43d153051a93..72e120160300 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -8,17 +8,6 @@ /mob/living/simple_animal/bot, /mob/living/simple_animal/bot/mulebot, /mob/living/simple_animal/bot/mulebot/paranormal, - /mob/living/simple_animal/bot/secbot, - /mob/living/simple_animal/bot/secbot/beepsky, - /mob/living/simple_animal/bot/secbot/beepsky/armsky, - /mob/living/simple_animal/bot/secbot/beepsky/jr, - /mob/living/simple_animal/bot/secbot/beepsky/officer, - /mob/living/simple_animal/bot/secbot/beepsky/ofitser, - /mob/living/simple_animal/bot/secbot/ed209, - /mob/living/simple_animal/bot/secbot/genesky, - /mob/living/simple_animal/bot/secbot/grievous, - /mob/living/simple_animal/bot/secbot/grievous/toy, - /mob/living/simple_animal/bot/secbot/pingsky, /mob/living/simple_animal/hostile, /mob/living/simple_animal/hostile/asteroid, /mob/living/simple_animal/hostile/asteroid/elite, diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index bf7c5ffa14fd..265c43dce651 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -668,6 +668,16 @@ restricted = FALSE refundable = FALSE + +/datum/uplink_item/reinforcements/ed209 + name = "Modified ED209" + desc = "Stolen Nanotrasen tech, slightly tweaked and modified to fit a greater purpose." + item = /obj/item/antag_spawner/nuke_ops/ed209_nukie + cost = 20 + restricted = FALSE + refundable = FALSE + + // Bundles /datum/uplink_item/bundles_tc/cyber_implants diff --git a/icons/mob/silicon/aibots.dmi b/icons/mob/silicon/aibots.dmi index fa4c11f891a6672f1035a3466d86c2436ffb1b7a..2df5bce43a32f74076400ba79ee35f4645850593 100644 GIT binary patch literal 96989 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%0A62ahmO?*-)>+;W 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 literal 88553 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 diff --git a/tgstation.dme b/tgstation.dme index cf71dd3e22f2..df33513e07e3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5190,6 +5190,11 @@ #include "code\modules\mob\living\basic\bots\cleanbot\cleanbot.dm" #include "code\modules\mob\living\basic\bots\cleanbot\cleanbot_abilities.dm" #include "code\modules\mob\living\basic\bots\cleanbot\cleanbot_ai.dm" +#include "code\modules\mob\living\basic\bots\ed209\ed209.dm" +#include "code\modules\mob\living\basic\bots\ed209\ed209_ability.dm" +#include "code\modules\mob\living\basic\bots\ed209\ed209_ai.dm" +#include "code\modules\mob\living\basic\bots\ed209\ed209_nukie_ai.dm" +#include "code\modules\mob\living\basic\bots\ed209\ed209_nukie_spawner.dm" #include "code\modules\mob\living\basic\bots\firebot\firebot.dm" #include "code\modules\mob\living\basic\bots\firebot\firebot_ai.dm" #include "code\modules\mob\living\basic\bots\honkbots\honkbot.dm" @@ -5202,6 +5207,12 @@ #include "code\modules\mob\living\basic\bots\repairbot\repairbot.dm" #include "code\modules\mob\living\basic\bots\repairbot\repairbot_abilities.dm" #include "code\modules\mob\living\basic\bots\repairbot\repairbot_ai.dm" +#include "code\modules\mob\living\basic\bots\secbot\secbot.dm" +#include "code\modules\mob\living\basic\bots\secbot\secbot_abilities.dm" +#include "code\modules\mob\living\basic\bots\secbot\secbot_ai.dm" +#include "code\modules\mob\living\basic\bots\secbot\secbot_subtypes.dm" +#include "code\modules\mob\living\basic\bots\secbot\super_beepsky.dm" +#include "code\modules\mob\living\basic\bots\secbot\super_beepsky_ai.dm" #include "code\modules\mob\living\basic\bots\vibebot\vibebot.dm" #include "code\modules\mob\living\basic\bots\vibebot\vibebot_abilities.dm" #include "code\modules\mob\living\basic\bots\vibebot\vibebot_ai.dm" @@ -5678,10 +5689,7 @@ #include "code\modules\mob\living\simple_animal\bot\bot.dm" #include "code\modules\mob\living\simple_animal\bot\bot_announcement.dm" #include "code\modules\mob\living\simple_animal\bot\construction.dm" -#include "code\modules\mob\living\simple_animal\bot\ed209bot.dm" #include "code\modules\mob\living\simple_animal\bot\mulebot.dm" -#include "code\modules\mob\living\simple_animal\bot\secbot.dm" -#include "code\modules\mob\living\simple_animal\bot\SuperBeepsky.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\ooze.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\_megafauna.dm" diff --git a/tools/UpdatePaths/Scripts/96000_secbots.txt b/tools/UpdatePaths/Scripts/96000_secbots.txt new file mode 100644 index 000000000000..1c0f40521f6c --- /dev/null +++ b/tools/UpdatePaths/Scripts/96000_secbots.txt @@ -0,0 +1,11 @@ +/mob/living/simple_animal/bot/secbot : /mob/living/basic/bot/secbot{@OLD} +/mob/living/simple_animal/bot/secbot/beepsky : /mob/living/basic/bot/secbot/beepsky{@OLD} +/mob/living/simple_animal/bot/secbot/beepsky/armsky : /mob/living/basic/bot/secbot/beepsky/armsky{@OLD} +/mob/living/simple_animal/bot/secbot/beepsky/jr : /mob/living/basic/bot/secbot/beepsky/jr{@OLD} +/mob/living/simple_animal/bot/secbot/beepsky/officer : /mob/living/basic/bot/secbot/beepsky/officer{@OLD} +/mob/living/simple_animal/bot/secbot/beepsky/ofitser : /mob/living/basic/bot/secbot/beepsky/ofitser{@OLD} +/mob/living/simple_animal/bot/secbot/ed209 : /mob/living/basic/bot/secbot/ed209{@OLD} +/mob/living/simple_animal/bot/secbot/genesky : /mob/living/basic/bot/secbot/genesky{@OLD} +/mob/living/simple_animal/bot/secbot/grievous : /mob/living/basic/bot/secbot/grievous{@OLD} +/mob/living/simple_animal/bot/secbot/pingsky : /mob/living/basic/bot/secbot/pingsky{@OLD} +/mob/living/basic/bot/honkbot : /mob/living/basic/bot/secbot/honkbot{@OLD} From f9a7c58654f733e301e94e6772bdbc0d03ce027f Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Apr 2026 00:25:48 +0000 Subject: [PATCH 075/282] Automatic changelog for PR #95783 [ci skip] --- html/changelogs/AutoChangeLog-pr-95783.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95783.yml diff --git a/html/changelogs/AutoChangeLog-pr-95783.yml b/html/changelogs/AutoChangeLog-pr-95783.yml new file mode 100644 index 000000000000..30159606bbdd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95783.yml @@ -0,0 +1,7 @@ +author: "Ben10Omintrix" +delete-after: True +changes: + - refactor: "beepskies, and ed209s have been refactored. please report any bugs" + - rscadd: "ed209s can now wear hats! some hats give them new dialogue" + - rscadd: "emagged ed209s are now rideable!" + - rscadd: "added evil versions of the ed209s to the syndie uplink" \ No newline at end of file From 06ed98602ca7906924fc65ad3e5b25f6bbdb0b83 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Apr 2026 00:30:25 +0000 Subject: [PATCH 076/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95783.yml | 7 ------- html/changelogs/AutoChangeLog-pr-95854.yml | 4 ---- html/changelogs/archive/2026-04.yml | 6 ++++++ 3 files changed, 6 insertions(+), 11 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95783.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95854.yml diff --git a/html/changelogs/AutoChangeLog-pr-95783.yml b/html/changelogs/AutoChangeLog-pr-95783.yml deleted file mode 100644 index 30159606bbdd..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95783.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "Ben10Omintrix" -delete-after: True -changes: - - refactor: "beepskies, and ed209s have been refactored. please report any bugs" - - rscadd: "ed209s can now wear hats! some hats give them new dialogue" - - rscadd: "emagged ed209s are now rideable!" - - rscadd: "added evil versions of the ed209s to the syndie uplink" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95854.yml b/html/changelogs/AutoChangeLog-pr-95854.yml deleted file mode 100644 index 73f3c45a2949..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95854.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "lelandkemble" -delete-after: True -changes: - - bugfix: "Nonbinary people can respawn" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index fdb37c5352d1..7a5f0eda10f8 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -550,5 +550,11 @@ lelandkemble: - bugfix: Looming works again 2026-04-25: + Ben10Omintrix: + - refactor: beepskies, and ed209s have been refactored. please report any bugs + - rscadd: ed209s can now wear hats! some hats give them new dialogue + - rscadd: emagged ed209s are now rideable! + - rscadd: added evil versions of the ed209s to the syndie uplink lelandkemble: - bugfix: Stamina bars no longer invert the value they show you + - bugfix: Nonbinary people can respawn From 937118b76909251b034f8f16c35363cff4bd6f1d Mon Sep 17 00:00:00 2001 From: Capsandi <38051413+Capsandi@users.noreply.github.com> Date: Fri, 24 Apr 2026 20:56:03 -0400 Subject: [PATCH 077/282] Cleans up Fire Alarm sounds (#95705) ## About The Pull Request Collapses fire alarm sound bytes to mono. Cleans up a high register artefact from the collapse of stereo to mono sound. ## Why It's Good For The Game Sounds played in world should not be stereo files. ## Changelog :cl: sound: fire alarms are no longer stereo files condensed to mono at runtime /:cl: --- code/datums/looping_sounds/machinery_sounds.dm | 8 ++++---- .../antagonists/malf_ai/malf_ai_modules.dm | 2 +- sound/machines/fire_alarm/FireAlarm1.ogg | Bin 46714 -> 0 bytes sound/machines/fire_alarm/FireAlarm2.ogg | Bin 47659 -> 0 bytes sound/machines/fire_alarm/FireAlarm3.ogg | Bin 48583 -> 0 bytes sound/machines/fire_alarm/FireAlarm4.ogg | Bin 48739 -> 0 bytes sound/machines/fire_alarm/fire_alarm1.ogg | Bin 0 -> 16720 bytes sound/machines/fire_alarm/fire_alarm2.ogg | Bin 0 -> 16720 bytes sound/machines/fire_alarm/fire_alarm3.ogg | Bin 0 -> 16720 bytes sound/machines/fire_alarm/fire_alarm4.ogg | Bin 0 -> 18724 bytes 10 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 sound/machines/fire_alarm/FireAlarm1.ogg delete mode 100644 sound/machines/fire_alarm/FireAlarm2.ogg delete mode 100644 sound/machines/fire_alarm/FireAlarm3.ogg delete mode 100644 sound/machines/fire_alarm/FireAlarm4.ogg create mode 100644 sound/machines/fire_alarm/fire_alarm1.ogg create mode 100644 sound/machines/fire_alarm/fire_alarm2.ogg create mode 100644 sound/machines/fire_alarm/fire_alarm3.ogg create mode 100644 sound/machines/fire_alarm/fire_alarm4.ogg diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index 142f76af7684..871a5ca7bf90 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -161,10 +161,10 @@ /datum/looping_sound/firealarm mid_sounds = list( - 'sound/machines/fire_alarm/FireAlarm1.ogg', - 'sound/machines/fire_alarm/FireAlarm2.ogg', - 'sound/machines/fire_alarm/FireAlarm3.ogg', - 'sound/machines/fire_alarm/FireAlarm4.ogg', + 'sound/machines/fire_alarm/fire_alarm1.ogg', + 'sound/machines/fire_alarm/fire_alarm2.ogg', + 'sound/machines/fire_alarm/fire_alarm3.ogg', + 'sound/machines/fire_alarm/fire_alarm4.ogg', ) mid_length = 2.4 SECONDS volume = 30 diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index d88a4d039174..0fdb4251f5f4 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -753,7 +753,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) power_type = /datum/action/innate/ai/break_fire_alarms unlock_text = span_notice("You replace the thermal sensing capabilities of all fire alarms with a manual override, \ allowing you to turn them off at will.") - unlock_sound = 'sound/machines/fire_alarm/FireAlarm1.ogg' + unlock_sound = 'sound/machines/fire_alarm/fire_alarm1.ogg' /datum/action/innate/ai/break_fire_alarms name = "Override Thermal Sensors" diff --git a/sound/machines/fire_alarm/FireAlarm1.ogg b/sound/machines/fire_alarm/FireAlarm1.ogg deleted file mode 100644 index 7ffecac8d88c210fd988f03ff77fa8fae26cd2dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46714 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 Hd(Hm=wmYZW diff --git a/sound/machines/fire_alarm/FireAlarm2.ogg b/sound/machines/fire_alarm/FireAlarm2.ogg deleted file mode 100644 index 387bc64996ceed6328636391bb3f58d0fc3ddc1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47659 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 z 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 diff --git a/sound/machines/fire_alarm/FireAlarm3.ogg b/sound/machines/fire_alarm/FireAlarm3.ogg deleted file mode 100644 index caefb92a9c556eddcef314109d4186c8f2a70497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48583 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 RH1TQbm#3uhJa_g5;C};jmxTZT diff --git a/sound/machines/fire_alarm/FireAlarm4.ogg b/sound/machines/fire_alarm/FireAlarm4.ogg deleted file mode 100644 index 3ee36928002256f4fe31b21d1b6ad41275bde16c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48739 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 bw-fCv_70n{JS|yWo=JVqX;9^tiUj`yrX@v~ diff --git a/sound/machines/fire_alarm/fire_alarm1.ogg b/sound/machines/fire_alarm/fire_alarm1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4c709873c5634176787d785c1d8247bfbfc26461 GIT binary patch literal 16720 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 literal 0 HcmV?d00001 diff --git a/sound/machines/fire_alarm/fire_alarm2.ogg b/sound/machines/fire_alarm/fire_alarm2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ff34af491cd528efc9eefad3b2a6b4512f599206 GIT binary patch literal 16720 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 literal 0 HcmV?d00001 diff --git a/sound/machines/fire_alarm/fire_alarm3.ogg b/sound/machines/fire_alarm/fire_alarm3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..09d970bdc370b8a9f752ffd5c341b3437a9317d8 GIT binary patch literal 16720 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 literal 0 HcmV?d00001 diff --git a/sound/machines/fire_alarm/fire_alarm4.ogg b/sound/machines/fire_alarm/fire_alarm4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1b2491925c712fecc2eb5ad56b415d385e092ad6 GIT binary patch literal 18724 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 Date: Sat, 25 Apr 2026 00:56:21 +0000 Subject: [PATCH 078/282] Automatic changelog for PR #95705 [ci skip] --- html/changelogs/AutoChangeLog-pr-95705.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95705.yml diff --git a/html/changelogs/AutoChangeLog-pr-95705.yml b/html/changelogs/AutoChangeLog-pr-95705.yml new file mode 100644 index 000000000000..8bfe3dac3315 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95705.yml @@ -0,0 +1,4 @@ +author: "Capsandi" +delete-after: True +changes: + - sound: "fire alarms are no longer stereo files condensed to mono at runtime" \ No newline at end of file From 6c2ad0eac741e00059947a7627df7310a584be14 Mon Sep 17 00:00:00 2001 From: frog <162057394+forgman6@users.noreply.github.com> Date: Sat, 25 Apr 2026 00:57:19 +0000 Subject: [PATCH 079/282] Adds the savior of the universe paper hat from Project Hail Merry. (#95772) ## About The Pull Request Adds the savior of the universe paper hat from Project Hail Merry to the waylaid bus ruin. ## Why It's Good For The Game I very much like the references scattered through out the game and so I'm adding another. image imageimageimageimage image ## Changelog :cl: add: Saviors paper hat. add: Added worn and normal icon states for it in costume.dmi map: Modified bus.dmm to include the paper hat behind the main bus. /:cl: --------- Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com> --- _maps/RandomRuins/SpaceRuins/bus.dmm | 6 +++++- code/modules/clothing/head/hat.dm | 6 ++++++ icons/mob/clothing/head/costume.dmi | Bin 48674 -> 53372 bytes icons/obj/clothing/head/costume.dmi | Bin 29200 -> 31153 bytes 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/_maps/RandomRuins/SpaceRuins/bus.dmm b/_maps/RandomRuins/SpaceRuins/bus.dmm index 177654f63add..b725897aa360 100644 --- a/_maps/RandomRuins/SpaceRuins/bus.dmm +++ b/_maps/RandomRuins/SpaceRuins/bus.dmm @@ -295,6 +295,10 @@ }, /turf/open/misc/asteroid/airless, /area/ruin/space) +"FD" = ( +/obj/item/clothing/head/costume/paper_hat/savior, +/turf/open/misc/asteroid/airless, +/area/ruin/space) "FZ" = ( /obj/effect/decal/cleanable/dirt, /obj/item/toy/plush/awakenedplushie{ @@ -501,7 +505,7 @@ ab yY yY yY -yY +FD OD yY Ne diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm index 93c085f9fc1a..61882a88192e 100644 --- a/code/modules/clothing/head/hat.dm +++ b/code/modules/clothing/head/hat.dm @@ -404,3 +404,9 @@ worn_icon_state = "paper" dog_fashion = /datum/dog_fashion/head custom_materials = list(/datum/material/paper = HALF_SHEET_MATERIAL_AMOUNT / 2) + +/obj/item/clothing/head/costume/paper_hat/savior + name = "ancient paper hat" + desc = "An ancient hat made of paper. \"Savior of the Universe\" is spelled out on the rim in orange marker. " + icon_state = "paper_savior" + worn_icon_state = "paper_savior" diff --git a/icons/mob/clothing/head/costume.dmi b/icons/mob/clothing/head/costume.dmi index ea18067ebc188a5c00cc1dc47e42f103e8d52738..ac776302e2553af21f7882cd02a02539ea39d5a4 100644 GIT binary patch literal 53372 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 literal 48674 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 diff --git a/icons/obj/clothing/head/costume.dmi b/icons/obj/clothing/head/costume.dmi index 9e3ad9e212c9b34afbdb730ef564990e4df70baa..fce68eb8f2120392566fc4ad33a3f1897e0208d9 100644 GIT binary patch literal 31153 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 literal 29200 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%0Ab&N)6QexwLp7)UOlNU*ZnC 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

n6~lD@=!!VB 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 ZkNt$9ejWD Date: Sat, 25 Apr 2026 00:57:36 +0000 Subject: [PATCH 080/282] Automatic changelog for PR #95772 [ci skip] --- html/changelogs/AutoChangeLog-pr-95772.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95772.yml diff --git a/html/changelogs/AutoChangeLog-pr-95772.yml b/html/changelogs/AutoChangeLog-pr-95772.yml new file mode 100644 index 000000000000..ff86ef55eda1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95772.yml @@ -0,0 +1,6 @@ +author: "forgman6" +delete-after: True +changes: + - rscadd: "Saviors paper hat." + - rscadd: "Added worn and normal icon states for it in costume.dmi" + - map: "Modified bus.dmm to include the paper hat behind the main bus." \ No newline at end of file From e6b9e57b354e777be2fa1a3642a008f966768b1c Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Apr 2026 01:09:55 +0000 Subject: [PATCH 081/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95705.yml | 4 ---- html/changelogs/AutoChangeLog-pr-95772.yml | 6 ------ html/changelogs/archive/2026-04.yml | 6 ++++++ 3 files changed, 6 insertions(+), 10 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95705.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-95772.yml diff --git a/html/changelogs/AutoChangeLog-pr-95705.yml b/html/changelogs/AutoChangeLog-pr-95705.yml deleted file mode 100644 index 8bfe3dac3315..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95705.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Capsandi" -delete-after: True -changes: - - sound: "fire alarms are no longer stereo files condensed to mono at runtime" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-95772.yml b/html/changelogs/AutoChangeLog-pr-95772.yml deleted file mode 100644 index ff86ef55eda1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95772.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "forgman6" -delete-after: True -changes: - - rscadd: "Saviors paper hat." - - rscadd: "Added worn and normal icon states for it in costume.dmi" - - map: "Modified bus.dmm to include the paper hat behind the main bus." \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index 7a5f0eda10f8..db73349a167f 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -555,6 +555,12 @@ - rscadd: ed209s can now wear hats! some hats give them new dialogue - rscadd: emagged ed209s are now rideable! - rscadd: added evil versions of the ed209s to the syndie uplink + Capsandi: + - sound: fire alarms are no longer stereo files condensed to mono at runtime + forgman6: + - rscadd: Saviors paper hat. + - rscadd: Added worn and normal icon states for it in costume.dmi + - map: Modified bus.dmm to include the paper hat behind the main bus. lelandkemble: - bugfix: Stamina bars no longer invert the value they show you - bugfix: Nonbinary people can respawn From 0f0d44e2ecba015f6c56ddc7be6bbe14a6902f5c Mon Sep 17 00:00:00 2001 From: Arturlang <24881678+Arturlang@users.noreply.github.com> Date: Sat, 25 Apr 2026 13:16:00 +0100 Subject: [PATCH 082/282] change shutter and high security syndicate door sprites (#95840) --- _maps/shuttles/infiltrator_basic.dmm | 10 +++---- _maps/templates/battlecruiser_starfury.dmm | 22 +++++++------- _maps/templates/lazy_templates/nukie_base.dmm | 27 ++++++++---------- code/game/machinery/doors/airlock.dm | 4 +++ code/game/machinery/doors/shutters.dm | 12 ++++++++ icons/obj/chairs.dmi | Bin 12330 -> 27538 bytes .../obj/doors/airlocks/syndicate/highsec.dmi | Bin 0 -> 5036 bytes icons/obj/doors/syndicateshutters.dmi | Bin 0 -> 36825 bytes 8 files changed, 43 insertions(+), 32 deletions(-) create mode 100644 icons/obj/doors/airlocks/syndicate/highsec.dmi create mode 100644 icons/obj/doors/syndicateshutters.dmi diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index b1b00f10d57f..61f8ea231df2 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -382,11 +382,11 @@ "bK" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner, /obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/airlock/hatch, /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/highsecurity/syndicate, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/syndicate/medical) "bM" = ( @@ -397,8 +397,8 @@ dir = 8 }, /obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/airlock/hatch, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/highsecurity/syndicate, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/syndicate/engineering) "bO" = ( @@ -629,12 +629,12 @@ /turf/open/floor/iron/dark, /area/shuttle/syndicate/engineering) "lm" = ( -/obj/machinery/door/airlock/hatch, /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/turf_decal/stripes/red/line{ dir = 1 }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/highsecurity/syndicate, /turf/open/floor/iron/dark, /area/shuttle/syndicate/bridge) "lo" = ( @@ -645,8 +645,8 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/airlock/hatch, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/highsecurity/syndicate, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/syndicate/eva) "lJ" = ( @@ -1068,9 +1068,9 @@ /area/shuttle/syndicate/airlock) "Tu" = ( /obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/airlock/hatch, /obj/effect/turf_decal/stripes/red/line, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/highsecurity/syndicate, /turf/open/floor/iron/dark, /area/shuttle/syndicate/hallway) "TD" = ( diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index bb32515c5a1f..24c52bda672d 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -1857,7 +1857,7 @@ /area/shuttle/sbc_starfury) "hc" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/shutters{ +/obj/machinery/door/poddoor/shutters/syndicate{ id = "syndie_battlecruiser_mech" }, /turf/open/floor/pod/light, @@ -2182,12 +2182,11 @@ /area/shuttle/sbc_starfury) "hX" = ( /obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/highsecurity{ - id_tag = "syndie_battlecruiser_armory"; - name = "Starfury Armory" - }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/door/airlock/highsecurity/syndicate{ + name = "Starfury Armory" + }, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) "hZ" = ( @@ -4389,11 +4388,11 @@ /area/shuttle/sbc_starfury) "Ay" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/shutters{ - id = "syndie_battlecruiser_mech" - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters/syndicate{ + id = "syndie_battlecruiser_mech" + }, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) "AF" = ( @@ -5814,12 +5813,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/highsecurity{ - id_tag = "syndie_battlecruiser_armory"; - name = "Starfury Armory" - }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/door/airlock/highsecurity/syndicate{ + name = "Starfury Armory" + }, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) "ZR" = ( diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index 537fe8fda84f..d025553bd8da 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -1181,11 +1181,11 @@ /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 }, -/obj/machinery/door/poddoor/shutters{ +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor/shutters/syndicate{ id = "FBBZ1"; name = "Security Shutters" }, -/obj/structure/fans/tiny, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) "nk" = ( @@ -1627,7 +1627,7 @@ dir = 1 }, /obj/effect/turf_decal/siding/wideplating, -/obj/machinery/door/poddoor/shutters/indestructible{ +/obj/machinery/door/poddoor/shutters/syndicate/indestructible{ name = "Subterrainian Cargo Lift" }, /turf/open/floor/iron/dark/textured_half, @@ -2390,12 +2390,9 @@ /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 }, -/obj/machinery/door/poddoor/shutters/window{ - id = "FBBZ1"; - name = "Security Shutters" - }, /obj/structure/fans/tiny, /obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/door/poddoor/shutters/syndicate, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) "AO" = ( @@ -3672,10 +3669,10 @@ /obj/effect/turf_decal/siding/wideplating/dark{ dir = 4 }, -/obj/machinery/door/airlock/highsecurity{ +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/highsecurity/syndicate{ name = "Sky Bridge" }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/textured_large, /area/centcom/syndicate_mothership/control) "Oc" = ( @@ -3813,11 +3810,11 @@ /obj/effect/turf_decal/siding/wideplating/dark{ dir = 4 }, -/obj/machinery/door/airlock/highsecurity{ - name = "Sky Bridge" - }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/highsecurity/syndicate{ + name = "Sky Bridge" + }, /turf/open/floor/iron/textured_large, /area/centcom/syndicate_mothership/control) "OX" = ( @@ -4354,11 +4351,11 @@ /obj/effect/turf_decal/siding/wideplating/dark{ dir = 4 }, -/obj/machinery/door/airlock/highsecurity{ - name = "Sky Bridge" - }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/highsecurity/syndicate{ + name = "Sky Bridge" + }, /turf/open/floor/iron/textured_large, /area/centcom/syndicate_mothership/control) "TS" = ( diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 883084e6c9a8..edce48f662d8 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -2400,6 +2400,10 @@ security_level = 1 damage_deflection = 30 +/obj/machinery/door/airlock/highsecurity/syndicate + icon = 'icons/obj/doors/airlocks/syndicate/highsec.dmi' + overlays_file = null + // Shuttle Airlocks /obj/machinery/door/airlock/shuttle diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 46370354003a..72c5f4f5eede 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -99,3 +99,15 @@ icon_state = "open" density = FALSE opacity = FALSE + +/obj/machinery/door/poddoor/shutters/syndicate + icon = 'icons/obj/doors/syndicateshutters.dmi' + +/obj/machinery/door/poddoor/shutters/syndicate/preopen + icon_state = "open" + density = FALSE + opacity = FALSE + +/obj/machinery/door/poddoor/shutters/syndicate/indestructible + name = "hardened syndicate shutters" + resistance_flags = INDESTRUCTIBLE diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index b1432f16701c2009ecd493b65022ac81c5409a87..26a1861af2f9ebe5ae4017795b3c01412c113dc9 100644 GIT binary patch literal 27538 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ⲿ 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 literal 12330 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 diff --git a/icons/obj/doors/airlocks/syndicate/highsec.dmi b/icons/obj/doors/airlocks/syndicate/highsec.dmi new file mode 100644 index 0000000000000000000000000000000000000000..fe54b6826cca319f220ad660ee2445c12c0cd944 GIT binary patch literal 5036 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 ZCyG9FF-pE5`M=))7tfy~WTwczWjEHc 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 Date: Sat, 25 Apr 2026 12:16:18 +0000 Subject: [PATCH 083/282] Automatic changelog for PR #95840 [ci skip] --- html/changelogs/AutoChangeLog-pr-95840.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-95840.yml diff --git a/html/changelogs/AutoChangeLog-pr-95840.yml b/html/changelogs/AutoChangeLog-pr-95840.yml new file mode 100644 index 000000000000..aa7d3b0a2e6c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-95840.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - rscadd: "changes shutter and high security door sprites on the infiltrator battlecruiser and the syndicate nuclear operative base" \ No newline at end of file From 035437b45ef08343075f355d86a90097fa5a6c90 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Apr 2026 12:30:28 +0000 Subject: [PATCH 084/282] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-95840.yml | 4 ---- html/changelogs/archive/2026-04.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-95840.yml diff --git a/html/changelogs/AutoChangeLog-pr-95840.yml b/html/changelogs/AutoChangeLog-pr-95840.yml deleted file mode 100644 index aa7d3b0a2e6c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-95840.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Arturlang" -delete-after: True -changes: - - rscadd: "changes shutter and high security door sprites on the infiltrator battlecruiser and the syndicate nuclear operative base" \ No newline at end of file diff --git a/html/changelogs/archive/2026-04.yml b/html/changelogs/archive/2026-04.yml index db73349a167f..4719c82ff672 100644 --- a/html/changelogs/archive/2026-04.yml +++ b/html/changelogs/archive/2026-04.yml @@ -550,6 +550,9 @@ lelandkemble: - bugfix: Looming works again 2026-04-25: + Arturlang: + - rscadd: changes shutter and high security door sprites on the infiltrator battlecruiser + and the syndicate nuclear operative base Ben10Omintrix: - refactor: beepskies, and ed209s have been refactored. please report any bugs - rscadd: ed209s can now wear hats! some hats give them new dialogue From aa4dc568350909c0bacccd5f7181ef452cc25018 Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Sat, 25 Apr 2026 16:13:31 -0400 Subject: [PATCH 085/282] Removes Station-time (more time changes) (#95744) ## About The Pull Request Removes Station-Time entirely Server Time is now NST (Nanotrasen Standard Time). SS13 takes place exactly 540 years in the future of the current day, so every second is 1 second in-game. Round Time is now PT (Pay-Time), how Nanotrasen keeps track of how long the current rotation of Employees has been working for. Telecomms uses NST due to its importance of being the communication to the blackbox. Autopsy report, clocks, scientific reports and requisitions use both timestamps due to them being more official documents that NT may need to know beyond just the current round (just for flavortext). Pretty much everything else (Det scanner, PDA, IC logs, Time-of-Death, AI law changes, Cyborg file downloading) uses PT PT image image image https://github.com/user-attachments/assets/29445051-c98b-4af3-a657-812083aab91a Clock (Literate) image Clock (Illiterate) image New paperwork time working properly image NST image image # Other changes 1. Circuit time checker will now get the value of the given input (Hour, Minute, Second) rather than the full dedisecond time converted into hour/minutes/seconds image 2. Turns nightshift into a round event that'll last approximately 22 minutes 3. 12-hour pref (doesn't apply to the stat panel because it's global info) & removal of "TCT" time image 4. The chocolate pudding negative moodlet is now based on the server's IRL time. 5. Admins can now use ``class``, ``style`` and ``background`` (they were already given perms to use ``img`` so hiding background, which was removed to prevent image embedding, is pointless) 6. Also fixes ``year`` being off on localhost. ## Why It's Good For The Game Server Time is approximately 1s = 12s converted, not including it desyncing from lag (I believe?). This makes it pretty much impossible for people to actually use this as a unit of measurement for in-game actions. Different things also uses different timestamps which is a bit more confusing. The main change here is for accessibility and, hopefully, using time as a source of immersion. "20 minutes ago" is no longer OOC, they're just speaking in PT. There's no timezones in space, Nanotrasen Standard Time is the closest there is, but Pay Time is how NT considers when you get your paychecks, so it's what is more commonly used. It also fixes major inconsistencies between "IC time" and "Station time", things like breakfast moodlet was the first 15mins of the round despite the round starting like 7 hours in? Nukies with an L6 SAW firing down the halls was shooting like 1 bullet every 3 seconds (assuming 4 bullets per second), overall there was just a disconnect between how long time actually is in the universe. The secondary reason for this change (though it is what pushed me to actually get around to making this change) is the greater stat-panel removal. This hopes to lessen the dependence on the stat panel for station-time by making it easier to understand, and the end-goal I have is for this information to be limited to Admins & the AI (AI will get the IC version with the accurate year), so until that happens I would like to improve the use of station-time by making it consistent (for example, you should only care for PT for IC, which is also what your PDA displays), so that when it gets removed it won't leave players timeless. If you haven't already, and is interested in helping remove the stat panel, every entry that needs to be removed can be found here - https://hackmd.io/443_dE5lRWeEAp9bjGcKYw?view Closes https://github.com/tgstation/tgstation/issues/94988 ## Changelog :cl: del: Removed Station Time, now we use NST (Nanotrasen Standard Time), which is IRL server time +540 years, and PT (Pay Time), the amount of time since the round has started. del: Station nightshift is now a Station event rather than being based on Server time. balance: Time circuit's Unit of Measure now tells the amount of time in hour/minute/seconds rather than giving the whole time translated to hours/minutes/seconds. qol: Added a 12-hour clock pref for people who prefer it. qol: Hovering over NST timestamps on official documents will now translate how much it is in PT/Shift Time. admin: Admins can now use style/class/background in their papercode. /:cl: --------- Co-authored-by: Isratosh --- code/__DEFINES/paper.dm | 4 + code/__DEFINES/time.dm | 10 +-- code/__HELPERS/logging/mob.dm | 2 +- code/__HELPERS/logging/research.dm | 2 +- code/__HELPERS/time.dm | 35 +++------ code/_globalvars/time_vars.dm | 5 +- .../_onclick/hud/screen_objects/new_player.dm | 2 +- .../configuration/entries/game_options.dm | 9 --- code/controllers/subsystem/economy.dm | 2 +- code/controllers/subsystem/explosions.dm | 2 +- .../subsystem/networks/modular_computers.dm | 2 +- code/controllers/subsystem/nightshift.dm | 66 ---------------- code/controllers/subsystem/security_level.dm | 3 - code/controllers/subsystem/statpanel.dm | 5 +- code/controllers/subsystem/tgui.dm | 2 +- code/controllers/subsystem/ticker.dm | 20 ++--- code/datums/records/crime.dm | 2 +- code/datums/request_message.dm | 2 +- code/datums/status_effects/debuffs/debuffs.dm | 2 +- code/game/machinery/computer/accounting.dm | 2 +- code/game/machinery/computer/apc_control.dm | 2 +- .../machinery/computer/records/medical.dm | 2 +- code/game/machinery/digital_clock.dm | 4 +- code/game/machinery/doors/airlock.dm | 6 +- .../machinery/newscaster/newscaster_data.dm | 4 +- .../telecomms/machines/message_server.dm | 2 +- .../objects/items/AI_modules/_AI_modules.dm | 2 +- .../items/devices/scanners/autopsy_scanner.dm | 7 +- .../items/devices/scanners/health_analyzer.dm | 11 +-- .../game/objects/items/devices/table_clock.dm | 5 +- code/game/objects/items/toys.dm | 4 +- .../structures/signs/signs_interactive.dm | 7 +- code/game/world.dm | 15 ++-- code/modules/admin/admin_investigate.dm | 2 +- code/modules/admin/verbs/admin_newscaster.dm | 2 +- code/modules/admin/verbs/adminhelp.dm | 14 ++-- code/modules/admin/verbs/secrets.dm | 15 ---- code/modules/admin/verbs/sprite_auditor.dm | 2 +- .../antagonists/heretic/heretic_knowledge.dm | 6 +- code/modules/cargo/order.dm | 4 +- code/modules/cargo/orderconsole.dm | 6 +- code/modules/client/preferences/time.dm | 5 ++ code/modules/detectivework/scanner.dm | 2 +- code/modules/error_handler/error_handler.dm | 4 +- code/modules/error_handler/error_viewer.dm | 10 +-- code/modules/escape_menu/details.dm | 36 ++------- code/modules/escape_menu/escape_menu.dm | 12 ++- code/modules/events/nightshift.dm | 78 +++++++++++++++++++ .../food_and_drinks/recipes/food_mixtures.dm | 3 +- code/modules/forensics/_forensics.dm | 2 +- code/modules/mining/machine_silo.dm | 2 +- code/modules/mob/living/death.dm | 2 +- code/modules/mob/living/silicon/silicon.dm | 2 +- code/modules/mob/living/status_procs.dm | 2 +- code/modules/mod/modules/modules_general.dm | 2 +- .../computers/item/computer.dm | 2 +- .../programs/chatroom/conversation.dm | 4 +- .../file_system/programs/crewmanifest.dm | 2 +- .../programs/messenger/messenger_program.dm | 4 +- code/modules/paperwork/fax.dm | 2 +- code/modules/paperwork/paper.dm | 4 +- code/modules/power/apc/apc_main.dm | 6 +- code/modules/requests/request_manager.dm | 2 +- code/modules/research/ordnance/_scipaper.dm | 2 +- .../research/ordnance/doppler_array.dm | 2 +- .../research/ordnance/tank_compressor.dm | 2 +- code/modules/reta/reta_system.dm | 2 +- .../wiremod/components/utility/timepiece.dm | 10 +-- config/game_options.txt | 9 --- tgstation.dme | 3 +- .../AccountingConsole/AuditScreen.tsx | 2 +- .../interfaces/AccountingConsole/index.tsx | 2 +- .../game_preferences/accessibility.tsx | 10 +++ tgui/packages/tgui/interfaces/Secrets.jsx | 12 +-- tgui/packages/tgui/sanitize.ts | 3 +- 75 files changed, 248 insertions(+), 300 deletions(-) delete mode 100644 code/controllers/subsystem/nightshift.dm create mode 100644 code/modules/client/preferences/time.dm create mode 100644 code/modules/events/nightshift.dm diff --git a/code/__DEFINES/paper.dm b/code/__DEFINES/paper.dm index e77086a40e5e..ff4c4a508563 100644 --- a/code/__DEFINES/paper.dm +++ b/code/__DEFINES/paper.dm @@ -43,3 +43,7 @@ #define LIST_PAPER_STAMP_X "x" #define LIST_PAPER_STAMP_Y "y" #define LIST_PAPER_ROTATION "rotation" + +///Use in conjunction with `advanced_html` to have underlined text that, when hovered over, will let you see additional text. +///Would be appreciated if you avoided dotted underlined (and underlined in general) text elsewhere so players don't get confused. +#define UNDERLINED_HTML_TEXT(text_displayed, revealed_text) "[text_displayed]" diff --git a/code/__DEFINES/time.dm b/code/__DEFINES/time.dm index d445b4ec461a..0ac278a4f862 100644 --- a/code/__DEFINES/time.dm +++ b/code/__DEFINES/time.dm @@ -1,8 +1,8 @@ ///number of deciseconds in a day #define MIDNIGHT_ROLLOVER 864000 -///displays the current time into the round, with a lot of extra code just there for ensuring it looks okay after an entire day passes -#define ROUND_TIME(...) ( "[STATION_TIME_PASSED() > MIDNIGHT_ROLLOVER ? "[round(STATION_TIME_PASSED()/MIDNIGHT_ROLLOVER)]:[gameTimestamp(wtime = STATION_TIME_PASSED())]" : gameTimestamp(wtime = STATION_TIME_PASSED())]" ) +/// In-universe, SS13 is set 540 years in the future from the real-world day, hence this number for determining the year-offset for the in-game year. +#define STATION_YEAR_OFFSET 540 ///Returns the time that has passed since the game started #define STATION_TIME_PASSED(...) (world.time - SSticker.round_start_time) @@ -10,12 +10,6 @@ /// Define that just has the current in-universe year for use in whatever context you might want to display that in. (For example, 2022 -> 2562 given a 540 year offset) #define CURRENT_STATION_YEAR (GLOB.year_integer + STATION_YEAR_OFFSET) -/// Used in the GLOB year and tgui PreInit -#define UTC_YEAR time2text(world.realtime,"YYYY",NO_TIMEZONE) - -/// In-universe, SS13 is set 540 years in the future from the real-world day, hence this number for determining the year-offset for the in-game year. -#define STATION_YEAR_OFFSET 540 - #define JANUARY 1 #define FEBRUARY 2 #define MARCH 3 diff --git a/code/__HELPERS/logging/mob.dm b/code/__HELPERS/logging/mob.dm index f5f51256f320..d4ab156bcd90 100644 --- a/code/__HELPERS/logging/mob.dm +++ b/code/__HELPERS/logging/mob.dm @@ -46,7 +46,7 @@ if(LOG_RADIO_EMOTE) colored_message = "(RADIOEMOTE) [colored_message]" - var/list/timestamped_message = list("\[[time_stamp(format = "YYYY-MM-DD hh:mm:ss")]\] [key_name_and_tag(src)] [loc_name(src)] (Event #[LAZYLEN(logging[smessage_type])])" = colored_message) + var/list/timestamped_message = list("\[[server_timestamp(format = "YYYY-MM-DD hh:mm:ss")]\] [key_name_and_tag(src)] [loc_name(src)] (Event #[LAZYLEN(logging[smessage_type])])" = colored_message) logging[smessage_type] += timestamped_message diff --git a/code/__HELPERS/logging/research.dm b/code/__HELPERS/logging/research.dm index f352123f9a2a..704e8cb6c45b 100644 --- a/code/__HELPERS/logging/research.dm +++ b/code/__HELPERS/logging/research.dm @@ -3,4 +3,4 @@ if(!text) return var/html_file = file("[GLOB.log_directory]/[INVESTIGATE_RESEARCH].html") - WRITE_FILE(html_file, "[time_stamp(format = "YYYY-MM-DD hh:mm:ss")] [text]
") + WRITE_FILE(html_file, "[server_timestamp(format = "YYYY-MM-DD hh:mm:ss")] [text]
") diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 59e95ad8e85f..eab1103fc812 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -1,30 +1,14 @@ -/// Returns UTC timestamp with the specifified format and optionally deciseconds -/proc/time_stamp(format = "hh:mm:ss", show_ds) - var/time_string = time2text(world.timeofday, format, TIMEZONE_UTC) +/// Returns UTC timestamp with the specifified format, with optionally deciseconds or optional IC time (year offset), AKA Nanotrasen Standard Time (NST) +/proc/server_timestamp(format = "hh:mm:ss", show_ds, ic_time, twelve_hour_clock) + var/time_string = twelve_hour_clock ? time_to_twelve_hour(format, world.timeofday, world.timezone) : time2text(world.timeofday, format, world.timezone) + if(ic_time && findtext(format, "YYYY")) //if we have a year, replace the year + time_string = replacetext_char(time_string, "[GLOB.year_integer]", CURRENT_STATION_YEAR) return show_ds ? "[time_string]:[world.timeofday % 10]" : time_string -/// Returns timestamp since the server started, for use with world.time -/proc/gameTimestamp(format = "hh:mm:ss", wtime=world.time) +/// Returns timestamp since the round started, AKA Pay Time (PT) +/proc/round_timestamp(format = "hh:mm:ss", wtime = STATION_TIME_PASSED()) return time2text(wtime, format, NO_TIMEZONE) -///returns the current IC station time in a world.time format -/proc/station_time(wtime = world.time) - return (((wtime - SSticker.round_start_time) * SSticker.station_time_rate_multiplier) + SSticker.gametime_offset) % (24 HOURS) - -///returns the current IC station time in a human readable format -/proc/station_time_timestamp(format = "hh:mm:ss", wtime) - return time2text(station_time(wtime), format, NO_TIMEZONE) - -/proc/station_time_debug(force_set) - if(isnum(force_set)) - SSticker.gametime_offset = force_set - return - SSticker.gametime_offset = rand(0, 24 HOURS) //hours in day * minutes in hour * seconds in minute * deciseconds in second - if(prob(50)) - SSticker.gametime_offset = FLOOR(SSticker.gametime_offset, 1 HOURS) - else - SSticker.gametime_offset = CEILING(SSticker.gametime_offset, 1 HOURS) - ///returns timestamp in a sql and a not-quite-compliant ISO 8601 friendly format. Do not use for SQL, use NOW() instead /proc/ISOtime(timevar) return time2text(timevar || world.timeofday, "YYYY-MM-DD hh:mm:ss", world.timezone) @@ -128,7 +112,7 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) * the format arg is the format passed down to time2text() (e.g. "hh:mm" is hours and minutes but not seconds). * the timezone is the time value offset from the local time. It's to be applied outside time2text() to get the AM/PM right. */ -/proc/time_to_twelve_hour(time, format = "hh:mm:ss", timezone = TIMEZONE_UTC) +/proc/time_to_twelve_hour(format = "hh:mm:ss", time = STATION_TIME_PASSED(), timezone = NO_TIMEZONE) time = MODULUS(time + (timezone * (1 HOURS)), 24 HOURS) var/am_pm = "AM" if(time > 12 HOURS) @@ -137,4 +121,5 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) time -= 12 HOURS // e.g. 4:16 PM but not 00:42 PM else if (time < 1 HOURS) time += 12 HOURS // e.g. 12.23 AM - return "[time2text(time, format)] [am_pm]" + //set NO_TIMEZONE because we've already applied the timezone above. + return "[time2text(time, format, NO_TIMEZONE)] [am_pm]" diff --git a/code/_globalvars/time_vars.dm b/code/_globalvars/time_vars.dm index fd9b925e0d4f..a006a4bc699d 100644 --- a/code/_globalvars/time_vars.dm +++ b/code/_globalvars/time_vars.dm @@ -1,6 +1,3 @@ -/// The difference betwen midnight (of the host computer) and 0 world.ticks. -GLOBAL_VAR_INIT(timezoneOffset, 0) - -GLOBAL_VAR_INIT(year, UTC_YEAR) +GLOBAL_VAR_INIT(year, time2text(world.timeofday, "YYYY", TIMEZONE_UTC)) GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? diff --git a/code/_onclick/hud/screen_objects/new_player.dm b/code/_onclick/hud/screen_objects/new_player.dm index 5a17abfc5d93..47977aab8eb3 100644 --- a/code/_onclick/hud/screen_objects/new_player.dm +++ b/code/_onclick/hud/screen_objects/new_player.dm @@ -695,7 +695,7 @@ if(round_started) new_maptext = "[SSmapping.current_map.map_name]
\ [LAZYLEN(GLOB.clients)] player\s online
\ - [ROUND_TIME()] in
" + [round_timestamp()] in
" new_maptext += "
" else if(hud.mymob.client?.holder) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 0ccde360e3b5..4191f5c6fcdb 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -396,15 +396,6 @@ /datum/config_entry/flag/enable_night_shifts -/datum/config_entry/flag/randomize_shift_time - -/datum/config_entry/flag/shift_time_realtime - -/datum/config_entry/number/shift_time_start_hour - default = 12 - min_val = 0 - max_val = 23 - /datum/config_entry/number/monkeycap default = 64 min_val = 0 diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index 750cdfc7d7ce..02cea10cdc8a 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -217,7 +217,7 @@ SUBSYSTEM_DEF(economy) "account" = "[account.account_holder]", "cost" = price_to_use, "vendor" = "[astype(vendor, /atom)?.name || vendor]", - "stationtime" = station_time_timestamp("hh:mm"), + "stationtime" = round_timestamp("hh:mm"), )) /** diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index f5c733c0fd6a..4e7d0d5fb8ae 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -367,7 +367,7 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec var/y0 = epicenter.y var/z0 = epicenter.z var/area/areatype = get_area(epicenter) - SSblackbox.record_feedback("associative", "explosion", 1, list("dev" = devastation_range, "heavy" = heavy_impact_range, "light" = light_impact_range, "flame" = flame_range, "flash" = flash_range, "orig_dev" = orig_dev_range, "orig_heavy" = orig_heavy_range, "orig_light" = orig_light_range, "x" = x0, "y" = y0, "z" = z0, "area" = areatype.type, "time" = time_stamp("YYYY-MM-DD hh:mm:ss", 1), "possible_cause" = explosion_cause, "possible_suspect" = who_did_it_game_log)) + SSblackbox.record_feedback("associative", "explosion", 1, list("dev" = devastation_range, "heavy" = heavy_impact_range, "light" = light_impact_range, "flame" = flame_range, "flash" = flash_range, "orig_dev" = orig_dev_range, "orig_heavy" = orig_heavy_range, "orig_light" = orig_light_range, "x" = x0, "y" = y0, "z" = z0, "area" = areatype.type, "time" = server_timestamp("YYYY-MM-DD hh:mm:ss", 1), "possible_cause" = explosion_cause, "possible_suspect" = who_did_it_game_log)) // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves. // Stereo users will also hear the direction of the explosion! diff --git a/code/controllers/subsystem/networks/modular_computers.dm b/code/controllers/subsystem/networks/modular_computers.dm index eb25e0c97aee..40ce21c51cd7 100644 --- a/code/controllers/subsystem/networks/modular_computers.dm +++ b/code/controllers/subsystem/networks/modular_computers.dm @@ -146,7 +146,7 @@ SUBSYSTEM_DEF(modular_computers) */ /datum/controller/subsystem/modular_computers/proc/add_log(log_string) var/list/log_text = list() - log_text += "\[[station_time_timestamp()]\]" + log_text += "\[[round_timestamp()]\]" log_text += "*SYSTEM* - " log_text += log_string log_string = log_text.Join() diff --git a/code/controllers/subsystem/nightshift.dm b/code/controllers/subsystem/nightshift.dm deleted file mode 100644 index 170f12696147..000000000000 --- a/code/controllers/subsystem/nightshift.dm +++ /dev/null @@ -1,66 +0,0 @@ -SUBSYSTEM_DEF(nightshift) - name = "Night Shift" - wait = 10 MINUTES - - var/nightshift_active = FALSE - var/nightshift_start_time = 702000 //7:30 PM, station time - var/nightshift_end_time = 270000 //7:30 AM, station time - var/nightshift_first_check = 30 SECONDS - - var/high_security_mode = FALSE - var/list/currentrun - -/datum/controller/subsystem/nightshift/Initialize() - if(!CONFIG_GET(flag/enable_night_shifts)) - can_fire = FALSE - return SS_INIT_SUCCESS - -/datum/controller/subsystem/nightshift/fire(resumed = FALSE) - if(resumed) - update_nightshift(resumed = TRUE) - return - if(world.time - SSticker.round_start_time < nightshift_first_check) - return - check_nightshift() - -/datum/controller/subsystem/nightshift/proc/announce(message) - priority_announce( - text = message, - sound = 'sound/announcer/notice/notice2.ogg', - sender_override = "Automated Lighting System Announcement", - color_override = "grey", - ) - -/datum/controller/subsystem/nightshift/proc/check_nightshift() - var/emergency = SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED - var/announcing = TRUE - var/time = station_time() - var/night_time = (time < nightshift_end_time) || (time > nightshift_start_time) - if(high_security_mode != emergency) - high_security_mode = emergency - if(night_time) - announcing = FALSE - if(!emergency) - announce("Restoring night lighting configuration to normal operation.") - else - announce("Disabling night lighting: Station is in a state of emergency.") - if(emergency) - night_time = FALSE - if(nightshift_active != night_time) - update_nightshift(night_time, announcing) - -/datum/controller/subsystem/nightshift/proc/update_nightshift(active, announce = TRUE, resumed = FALSE, forced = FALSE) - if(!resumed) - currentrun = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc) - nightshift_active = active - if(announce) - if (active) - announce("Good evening, crew. To reduce power consumption and stimulate the circadian rhythms of some species, all of the lights aboard the station have been dimmed for the night.") - else - announce("Good morning, crew. As it is now day time, all of the lights aboard the station have been restored to their former brightness.") - for(var/obj/machinery/power/apc/APC as anything in currentrun) - currentrun -= APC - if (APC.area && (APC.area.type in GLOB.the_station_areas)) - APC.set_nightshift(nightshift_active) - if(MC_TICK_CHECK && !forced) // subsystem will be in state SS_IDLE if forced by an admin - return diff --git a/code/controllers/subsystem/security_level.dm b/code/controllers/subsystem/security_level.dm index 2e48d593faec..c88237ec7eaa 100644 --- a/code/controllers/subsystem/security_level.dm +++ b/code/controllers/subsystem/security_level.dm @@ -42,9 +42,6 @@ SUBSYSTEM_DEF(security_level) if(!selected_level) CRASH("set_level was called with an invalid security level([new_level])") - if(SSnightshift.can_fire && (selected_level.number_level >= SEC_LEVEL_RED || current_security_level.number_level >= SEC_LEVEL_RED)) - SSnightshift.next_fire = world.time + 7 SECONDS // Fire nightshift after the security level announcement is complete - if(announce) level_announce(selected_level, current_security_level.number_level) // We want to announce BEFORE updating to the new level diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 27c0b2d597d5..191d270dbbdb 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -37,9 +37,8 @@ SUBSYSTEM_DEF(statpanels) global_data += list( "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]", - "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss", world.timezone)]", - "Round Time: [ROUND_TIME()]", - "Station Time: [station_time_timestamp()]", + "Server Time/NST: [server_timestamp(format = "YYYY-MM-DD hh:mm:ss")]", + "Shift Time/PT: [(SSticker.round_start_time == 0) ? "Pre-Game" : round_timestamp()]", "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)", ) diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index 9f5d518b6c2a..df33cf68c8c7 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -37,7 +37,7 @@ SUBSYSTEM_DEF(tgui) ntos_error = "" basehtml = replacetextEx(basehtml, "", ntos_error) - basehtml = replacetextEx(basehtml, "", "Nanotrasen (c) 2525-[text2num(UTC_YEAR) + STATION_YEAR_OFFSET]") // This can't use the GLOB as it runs before those are populated + basehtml = replacetextEx(basehtml, "", "Nanotrasen (c) 2525-[CURRENT_STATION_YEAR]") /datum/controller/subsystem/tgui/OnConfigLoad() var/storage_iframe = CONFIG_GET(string/storage_cdn_iframe) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 6bd850c3d08f..9c5f67ec6011 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -38,9 +38,6 @@ SUBSYSTEM_DEF(ticker) var/timeLeft //pregame timer var/start_at - var/gametime_offset = 432000 //Deciseconds to add to world.time for station time. - var/station_time_rate_multiplier = 12 //factor of station time progressal vs real time. - /// Num of players, used for pregame stats on statpanel var/totalPlayers = 0 /// Num of ready players, used for pregame stats on statpanel (only viewable by admins) @@ -131,21 +128,14 @@ SUBSYSTEM_DEF(ticker) GLOB.syndicate_code_response_regex = codeword_match start_at = world.time + (CONFIG_GET(number/lobby_countdown) * (1 SECONDS)) - round_start_time = start_at // May be changed later, but prevents the time from jumping back when the round actually starts - if(CONFIG_GET(flag/randomize_shift_time)) - gametime_offset = rand(0, 23) * (1 HOURS) - else if(CONFIG_GET(flag/shift_time_realtime)) - gametime_offset = world.timeofday + GLOB.timezoneOffset - station_time_rate_multiplier = 1 - else - gametime_offset = (CONFIG_GET(number/shift_time_start_hour) * (1 HOURS)) + return SS_INIT_SUCCESS /datum/controller/subsystem/ticker/fire() switch(current_state) if(GAME_STATE_STARTUP) if(Master.initializations_finished_with_no_players_logged_in) - start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10) + start_at = world.time + (CONFIG_GET(number/lobby_countdown) * (1 SECONDS)) for(var/client/C in GLOB.clients) window_flash(C, ignorepref = TRUE) //let them know lobby has opened up. to_chat(world, span_notice("Welcome to [station_name()]!")) @@ -156,9 +146,9 @@ SUBSYSTEM_DEF(ticker) fire() if(GAME_STATE_PREGAME) - //lobby stats for statpanels + //lobby stats for statpanels if(isnull(timeLeft)) - timeLeft = max(0,start_at - world.time) + timeLeft = max(0, start_at - world.time) totalPlayers = LAZYLEN(GLOB.new_player_list) totalPlayersReady = 0 total_admins_ready = 0 @@ -191,7 +181,7 @@ SUBSYSTEM_DEF(ticker) if(!setup()) //setup failed current_state = GAME_STATE_STARTUP - start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10) + start_at = world.time + (CONFIG_GET(number/lobby_countdown) * (1 SECONDS)) timeLeft = null Master.SetRunLevel(RUNLEVEL_LOBBY) SEND_SIGNAL(src, COMSIG_TICKER_ERROR_SETTING_UP) diff --git a/code/datums/records/crime.dm b/code/datums/records/crime.dm index 729b85c56b8e..a403923ab80d 100644 --- a/code/datums/records/crime.dm +++ b/code/datums/records/crime.dm @@ -19,7 +19,7 @@ src.author = author src.details = details src.name = name - src.time = station_time_timestamp() + src.time = round_timestamp() /datum/crime/citation /// Fine for the crime diff --git a/code/datums/request_message.dm b/code/datums/request_message.dm index 18feada06cb9..c88433e5ca91 100644 --- a/code/datums/request_message.dm +++ b/code/datums/request_message.dm @@ -21,7 +21,7 @@ /datum/request_message/New(data) sender_department = data["sender_department"] - received_time = station_time_timestamp() + received_time = round_timestamp() content = data["message"] message_verified_by = data["verified"] message_stamped_by = data["stamped"] diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index b55a385e2378..08f36ff70363 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -289,7 +289,7 @@ var/delta = world.time - last_dead_time var/new_timeofdeath = owner.timeofdeath + delta owner.timeofdeath = new_timeofdeath - owner.station_timestamp_timeofdeath = station_time_timestamp(wtime=new_timeofdeath) + owner.station_timestamp_timeofdeath = round_timestamp(wtime=new_timeofdeath) last_dead_time = null if(owner.stat == DEAD) last_dead_time = world.time diff --git a/code/game/machinery/computer/accounting.dm b/code/game/machinery/computer/accounting.dm index 05a1d12ed40c..6ccc1d2c7b31 100644 --- a/code/game/machinery/computer/accounting.dm +++ b/code/game/machinery/computer/accounting.dm @@ -37,7 +37,7 @@ data["accounts"] = player_accounts data["audit_log"] = SSeconomy.audit_log data["crashing"] = HAS_TRAIT(SSeconomy, TRAIT_MARKET_CRASHING) - data["station_time"] = station_time_timestamp("hh:mm") + data["station_time"] = round_timestamp("hh:mm") return data /obj/machinery/computer/accounting/ui_static_data(mob/user) diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 6c56f6e2aa60..a7add4639c3e 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -48,7 +48,7 @@ /obj/machinery/computer/apc_control/proc/log_activity(log_text) if(!should_log) return - LAZYADD(logs, "([station_time_timestamp()]): [auth_id] [log_text]") + LAZYADD(logs, "([round_timestamp()]): [auth_id] [log_text]") ///Resets the console's emagged state and re-enables logging of activity /obj/machinery/computer/apc_control/proc/restore_comp(mob/user) diff --git a/code/game/machinery/computer/records/medical.dm b/code/game/machinery/computer/records/medical.dm index d148b5bd2628..108abd8fbf9f 100644 --- a/code/game/machinery/computer/records/medical.dm +++ b/code/game/machinery/computer/records/medical.dm @@ -100,7 +100,7 @@ if(!content) return FALSE - var/datum/medical_note/new_note = new(usr.name, content, station_time_timestamp()) + var/datum/medical_note/new_note = new(usr.name, content, round_timestamp()) while(length(target.medical_notes) > 2) target.medical_notes.Cut(1, 2) diff --git a/code/game/machinery/digital_clock.dm b/code/game/machinery/digital_clock.dm index 57c58083aae7..e43ed60c32fb 100644 --- a/code/game/machinery/digital_clock.dm +++ b/code/game/machinery/digital_clock.dm @@ -110,7 +110,7 @@ if(obj_flags & EMAGGED) station_minutes = rand(0, 99) else - station_minutes = text2num(station_time_timestamp(format = "mm")) + station_minutes = text2num(round_timestamp(format = "mm")) // tenth / the '3' in '31' / 31 -> 3.1 -> 3 var/station_minute_tenth = station_minutes >= 10 ? round(station_minutes * 0.1) : 0 @@ -122,7 +122,7 @@ if(obj_flags & EMAGGED) station_hours = rand(0, 99) else - station_hours = text2num(station_time_timestamp(format = "hh")) + station_hours = text2num(round_timestamp(format = "hh")) // one / the '1' in '12' / 12 -> 1.2 -> 1 var/station_hours_tenth = station_minutes >= 10 ? round(station_hours * 0.1) : 0 diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index edce48f662d8..3ff1662d99bb 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1575,7 +1575,7 @@ bolt() //Bolt it! set_electrified(MACHINE_ELECTRIFIED_PERMANENT) //Shock it! if(origin) - LAZYADD(shockedby, "\[[time_stamp()]\] [key_name(origin)]") + LAZYADD(shockedby, "\[[server_timestamp()]\] [key_name(origin)]") /obj/machinery/door/airlock/disable_lockdown() @@ -1599,7 +1599,7 @@ return if(prob(severity*10 - 20) && (secondsElectrified < 30) && (secondsElectrified != MACHINE_ELECTRIFIED_PERMANENT)) set_electrified(30) - LAZYADD(shockedby, "\[[time_stamp()]\]EM Pulse") + LAZYADD(shockedby, "\[[server_timestamp()]\]EM Pulse") /obj/machinery/door/airlock/proc/set_electrified(seconds, mob/user) secondsElectrified = seconds @@ -1616,7 +1616,7 @@ message = "unshocked" else message = "temp shocked for [secondsElectrified] seconds" - LAZYADD(shockedby, "\[[time_stamp()]\] [key_name(user)] - ([uppertext(message)])") + LAZYADD(shockedby, "\[[server_timestamp()]\] [key_name(user)] - ([uppertext(message)])") log_combat(user, src, message) add_hiddenprint(user) diff --git a/code/game/machinery/newscaster/newscaster_data.dm b/code/game/machinery/newscaster/newscaster_data.dm index 59b8f09db477..6c91c94d6af1 100644 --- a/code/game/machinery/newscaster/newscaster_data.dm +++ b/code/game/machinery/newscaster/newscaster_data.dm @@ -207,7 +207,7 @@ GLOBAL_LIST_EMPTY(request_list) var/datum/feed_message/new_article = new /datum/feed_message new_article.author = author new_article.body = msg - new_article.time_stamp = "[station_time_timestamp()]" + new_article.time_stamp = "[round_timestamp()]" new_article.is_admin_message = adminMessage new_article.locked = !allow_comments @@ -243,7 +243,7 @@ GLOBAL_LIST_EMPTY(request_list) var/datum/feed_comment/new_feed_comment = new/datum/feed_comment new_feed_comment.author = newscaster_username new_feed_comment.body = comment_text - new_feed_comment.time_stamp = station_time_timestamp() + new_feed_comment.time_stamp = round_timestamp() GLOB.news_network.last_action ++ current_message.comments += new_feed_comment if(user) diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index f9fb183e53ee..cb34bf1e8134 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -105,7 +105,7 @@ if (calibrating) calibrating += world.time say("Calibrating... Estimated wait time: [rand(3, 9)] minutes.") - pda_msgs += new /datum/data_tablet_msg("System Administrator", "system", "This is an automated message. System calibration started at [station_time_timestamp()].") + pda_msgs += new /datum/data_tablet_msg("System Administrator", "system", "This is an automated message. System calibration started at [server_timestamp(ic_time = TRUE)] (PT: [round_timestamp()]).") else pda_msgs += new /datum/data_tablet_msg("System Administrator", "system", MESSAGE_SERVER_FUNCTIONING_MESSAGE) diff --git a/code/game/objects/items/AI_modules/_AI_modules.dm b/code/game/objects/items/AI_modules/_AI_modules.dm index 3422f57ac3be..69c809c903ee 100644 --- a/code/game/objects/items/AI_modules/_AI_modules.dm +++ b/code/game/objects/items/AI_modules/_AI_modules.dm @@ -89,7 +89,7 @@ else to_chat(user, span_notice("Upload complete.")) - var/time = time2text(world.realtime,"hh:mm:ss", TIMEZONE_UTC) + var/time = round_timestamp() var/ainame = law_datum.owner ? law_datum.owner.name : "empty AI core" var/aikey = law_datum.owner ? law_datum.owner.ckey : "null" diff --git a/code/game/objects/items/devices/scanners/autopsy_scanner.dm b/code/game/objects/items/devices/scanners/autopsy_scanner.dm index c541e513a0d8..5e0376879e77 100644 --- a/code/game/objects/items/devices/scanners/autopsy_scanner.dm +++ b/code/game/objects/items/devices/scanners/autopsy_scanner.dm @@ -54,8 +54,9 @@ var/obj/item/paper/autopsy_report = new(get_turf(src)) autopsy_report.color = "#99ccff" - autopsy_report.name = "autopsy report of [scanned] - [station_time_timestamp()])" - var/final_report_text = "

Autopsy report. Time of Autopsy: [station_time_timestamp()]
" + autopsy_report.name = "autopsy report of [scanned] - [server_timestamp(format = "hh:mm", ic_time = TRUE)]" + var/final_report_text = "
Autopsy report
\ + Time of Autopsy: [UNDERLINED_HTML_TEXT("[server_timestamp(format = "hh:mm", ic_time = TRUE)]", "Shift Time: [round_timestamp(format = "hh:mm")]")]
" //A lot of this is extremely similar to /proc/healthscan() - but with different formatting, no color, and some added/removed info //Does not list quirks/exhaustion/how to repair wounds @@ -240,7 +241,7 @@ autopsy_information += "Coroner's Notes:" //Bottom of the page, anything past here is player-written final_report_text += jointext(autopsy_information, "") - autopsy_report.add_raw_text(final_report_text) + autopsy_report.add_raw_text(final_report_text, advanced_html = TRUE) autopsy_report.update_appearance() user.put_in_hands(autopsy_report) user.balloon_alert(user, "report printed") diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index a36848069670..c3ae145b51e7 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -80,7 +80,7 @@ span_notice("You stupidly try to analyze [scan_turf]'s vitals!"), ) - var/floor_text = "Analyzing results for [scan_turf] ([station_time_timestamp()]):
" + var/floor_text = "Analyzing results for [scan_turf] ([round_timestamp()]):
" floor_text += "Overall status: Unknown
" floor_text += "Subject lacks a brain.
" floor_text += "Body temperature: [scan_turf?.return_air()?.return_temperature() || "???"]
" @@ -168,7 +168,7 @@ oxy_loss += 200 - (oxy_loss + tox_loss + fire_loss + brute_loss) oxy_loss = clamp(oxy_loss, 0, 200) - render_list += "[span_info("Analyzing results for [target] ([station_time_timestamp()]):")]
Overall status: [mob_status]
" + render_list += "[span_info("Analyzing results for [target] ([round_timestamp()]):")]
Overall status: [mob_status]
" if(!advanced && target.has_reagent(/datum/reagent/inverse/technetium)) advanced = TRUE @@ -474,11 +474,12 @@ var/obj/item/paper/medical_report/report_paper = new(get_turf(src)) report_paper.color = "#99ccff" - report_paper.name = "health scan report - [station_time_timestamp()]" - var/report_text = "
Health scan report. Time of retrieval: [station_time_timestamp()]

" + report_paper.name = "health scan report - [server_timestamp(format = "hh:mm", ic_time = TRUE)]" + var/report_text = "
Health scan report
\ + Time of retrieval: [UNDERLINED_HTML_TEXT("[server_timestamp(format = "hh:mm", ic_time = TRUE)]", "Shift Time: [round_timestamp(format = "hh:mm")]")]

" report_text += last_scan_text - report_paper.add_raw_text(report_text) + report_paper.add_raw_text(report_text, advanced_html = TRUE) report_paper.update_appearance() user.put_in_hands(report_paper) diff --git a/code/game/objects/items/devices/table_clock.dm b/code/game/objects/items/devices/table_clock.dm index 0d8195363668..c4420a813835 100644 --- a/code/game/objects/items/devices/table_clock.dm +++ b/code/game/objects/items/devices/table_clock.dm @@ -31,8 +31,9 @@ if(broken) . += span_info("It appears to be currently broken. You can use it in-hand to repair it.") else - . += span_info("The current CST (local) time is: [station_time_timestamp()].") - . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss", NO_TIMEZONE)].") + . += span_info("The current NST (local) time is: [server_timestamp(ic_time = TRUE, twelve_hour_clock = user.client?.prefs.read_preference(/datum/preference/toggle/twelve_hour))].") + if(user.is_literate()) + . += span_info("That means it is currently [round_timestamp()] into the shift.") /obj/item/table_clock/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index ce765778cb62..a4f64946c0e2 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1139,7 +1139,9 @@ /obj/item/toy/clockwork_watch/examine(mob/user) . = ..() - . += span_info("Station Time: [station_time_timestamp()]") + . += span_info("Station Time: [server_timestamp(ic_time = TRUE, twelve_hour_clock = user.client?.prefs.read_preference(/datum/preference/toggle/twelve_hour))]") + if(user.is_literate()) + . += span_info("That means it is currently [round_timestamp()] into the shift.") /* * Toy Dagger diff --git a/code/game/objects/structures/signs/signs_interactive.dm b/code/game/objects/structures/signs/signs_interactive.dm index 5ef9031fef93..49ae5ba6c29c 100644 --- a/code/game/objects/structures/signs/signs_interactive.dm +++ b/code/game/objects/structures/signs/signs_interactive.dm @@ -1,14 +1,15 @@ /obj/structure/sign/clock name = "wall clock" - desc = "It's your run-of-the-mill wall clock showing both the local Coalition Standard Time and the galactic Treaty Coordinated Time. Perfect for staring at instead of working." + desc = "It's your run-of-the-mill wall clock showing both the local Nanotrasen Standard Time and the galactic Treaty Coordinated Time. Perfect for staring at instead of working." icon_state = "clock" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/clock, 32) /obj/structure/sign/clock/examine(mob/user) . = ..() - . += span_info("The current CST (local) time is: [station_time_timestamp()].") - . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss", 0)].") + . += span_info("The current NST (local) time is: [server_timestamp(ic_time = TRUE, twelve_hour_clock = user.client?.prefs.read_preference(/datum/preference/toggle/twelve_hour))].") + if(user.is_literate()) + . += span_info("That means it is currently [round_timestamp()] into the shift.") /obj/structure/sign/calendar name = "wall calendar" diff --git a/code/game/world.dm b/code/game/world.dm index a243dd09e383..7561bfbd4bb5 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -126,12 +126,7 @@ GLOBAL_VAR(restart_counter) * All atoms in both compiled and uncompiled maps are initialized() */ /world/New() - log_world("World loaded at [time_stamp()]!") - - // From a really fucking old commit (91d7150) - // I wanted to move it but I think this needs to be after /world/New is called but before any sleeps? - // - Dominion/Cyberboss - GLOB.timezoneOffset = world.timezone * 36000 + log_world("World loaded at [server_timestamp()]!") // First possible sleep() InitTgs() @@ -244,7 +239,7 @@ GLOBAL_VAR(restart_counter) GLOB.picture_logging_prefix += "R_[GLOB.round_id]_" GLOB.picture_log_directory += "[GLOB.round_id]" else - var/timestamp = replacetext(time_stamp(), ":", ".") + var/timestamp = replacetext(server_timestamp(), ":", ".") GLOB.log_directory += "[timestamp]" GLOB.picture_log_directory += "[timestamp]" GLOB.picture_logging_prefix += "T_[timestamp]_" @@ -373,14 +368,14 @@ GLOBAL_VAR_INIT(last_maptick_time, 0) return #else if(check_hard_reboot()) - log_world("World hard rebooted at [time_stamp()]") + log_world("World hard rebooted at [server_timestamp()]") shutdown_logging() // See comment below. QDEL_NULL(Tracy) QDEL_NULL(Debugger) TgsEndProcess() return ..() - log_world("World rebooted at [time_stamp()]") + log_world("World rebooted at [server_timestamp()]") shutdown_logging() // Past this point, no logging procs can be used, at risk of data loss. QDEL_NULL(Tracy) @@ -436,7 +431,7 @@ GLOBAL_VAR_INIT(last_maptick_time, 0) else if(SSticker.current_state == GAME_STATE_SETTING_UP) new_status += "
Starting: Now" else if(SSticker.IsRoundInProgress()) - new_status += "
Time: [time2text(STATION_TIME_PASSED(), "hh:mm", NO_TIMEZONE)]" + new_status += "
Time: [round_timestamp("hh:mm")]" if(SSshuttle?.emergency && SSshuttle?.emergency?.mode != (SHUTTLE_IDLE || SHUTTLE_ENDGAME)) new_status += " | Shuttle: [SSshuttle.emergency.getModeStr()] [SSshuttle.emergency.getTimerStr()]" else if(SSticker.current_state == GAME_STATE_FINISHED) diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index e38401986654..642675dfc372 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -10,7 +10,7 @@ var/mob/living/source_mob = src source += " ([source_mob.ckey ? source_mob.ckey : "*no key*"])" - WRITE_FILE(F, "[time_stamp(format = "YYYY-MM-DD hh:mm:ss")] [REF(src)] ([x],[y],[z]) || [source] [message]
") + WRITE_FILE(F, "[server_timestamp(format = "YYYY-MM-DD hh:mm:ss")] [REF(src)] ([x],[y],[z]) || [source] [message]
") ADMIN_VERB(investigate_show, R_NONE, "Investigate", "Browse various detailed logs.", ADMIN_CATEGORY_GAME) var/static/list/investigates = list( diff --git a/code/modules/admin/verbs/admin_newscaster.dm b/code/modules/admin/verbs/admin_newscaster.dm index e300150659b1..ec96d8babce8 100644 --- a/code/modules/admin/verbs/admin_newscaster.dm +++ b/code/modules/admin/verbs/admin_newscaster.dm @@ -311,7 +311,7 @@ ADMIN_VERB(access_news_network, R_ADMIN, "Access Newscaster Network", "Allows yo var/datum/feed_comment/new_feed_comment = new /datum/feed_comment new_feed_comment.author = "Centcom Official" new_feed_comment.body = comment_text - new_feed_comment.time_stamp = station_time_timestamp() + new_feed_comment.time_stamp = round_timestamp() current_message.comments += new_feed_comment GLOB.news_network.last_action ++ usr.log_message("(as an admin) commented on message [current_message.return_body(-1)] -- [current_message.body]", LOG_COMMENT) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 4c235a48ca3d..94f9eae85fb6 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -278,7 +278,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) "PLAYERS" = player_count, "ROUND STATE" = round_state, "ROUND ID" = GLOB.round_id, - "ROUND TIME" = ROUND_TIME(), + "ROUND TIME" = round_timestamp(), "MESSAGE" = message, "ADMINS" = admin_text, ) @@ -356,9 +356,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) heard_by_no_admins = FALSE send2adminchat(initiator_ckey, "Ticket #[id]: Answered by [key_name(usr)]") - ticket_interactions += "[time_stamp()]: [formatted_message]" + ticket_interactions += "[server_timestamp()]: [formatted_message]" if (!isnull(player_message)) - player_interactions += "[time_stamp()]: [player_message]" + player_interactions += "[server_timestamp()]: [player_message]" //Removes the ahelp verb and returns it after 2 minutes /datum/admin_help/proc/TimeoutVerb() @@ -566,9 +566,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) dat += "[FOURSPACES][TicketHref("Refresh", ref_src)][FOURSPACES][TicketHref("Re-Title", ref_src, "retitle")]" if(state != AHELP_ACTIVE) dat += "[FOURSPACES][TicketHref("Reopen", ref_src, "reopen")]" - dat += "

Opened at: [gameTimestamp(wtime = opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)" + dat += "

Opened at: [round_timestamp(wtime = opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)" if(closed_at) - dat += "
Closed at: [gameTimestamp(wtime = closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)" + dat += "
Closed at: [round_timestamp(wtime = closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)" dat += "

" if(initiator) dat += "Actions: [FullMonty(ref_src)]
" @@ -666,9 +666,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) else dat += "UNKNOWN
" dat += "\n[FOURSPACES]Refresh" - dat += "

Opened at: [gameTimestamp("hh:mm:ss", opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)" + dat += "

Opened at: [round_timestamp("hh:mm:ss", opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)" if(closed_at) - dat += "
Closed at: [gameTimestamp("hh:mm:ss", closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)" + dat += "
Closed at: [round_timestamp("hh:mm:ss", closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)" dat += "

" dat += "
Log:

" for (var/interaction in player_interactions) diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index 33c9afe6d5e3..84ccaf2935ba 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -163,21 +163,6 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w log_admin("[key_name(holder)] reset the station name.") message_admins(span_adminnotice("[key_name_admin(holder)] reset the station name.")) priority_announce("[command_name()] has renamed the station to \"[new_name]\".") - if("night_shift_set") - var/val = tgui_alert(holder, "What do you want to set night shift to? This will override the automatic system until set to automatic again.", "Night Shift", list("On", "Off", "Automatic")) - switch(val) - if("Automatic") - if(CONFIG_GET(flag/enable_night_shifts)) - SSnightshift.can_fire = TRUE - SSnightshift.fire() - else - SSnightshift.update_nightshift(active = FALSE, announce = TRUE, forced = TRUE) - if("On") - SSnightshift.can_fire = FALSE - SSnightshift.update_nightshift(active = TRUE, announce = TRUE, forced = TRUE) - if("Off") - SSnightshift.can_fire = FALSE - SSnightshift.update_nightshift(active = FALSE, announce = TRUE, forced = TRUE) if("moveferry") SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Send CentCom Ferry")) if(!SSshuttle.toggleShuttle("ferry","ferry_home","ferry_away")) diff --git a/code/modules/admin/verbs/sprite_auditor.dm b/code/modules/admin/verbs/sprite_auditor.dm index 64022618c286..e1ffc660706c 100644 --- a/code/modules/admin/verbs/sprite_auditor.dm +++ b/code/modules/admin/verbs/sprite_auditor.dm @@ -11,7 +11,7 @@ GLOBAL_DATUM_INIT(sprite_auditor, /datum/sprite_auditor, new) "name" = author.real_name, "ckey" = author.ckey, "appearance" = icon_appearance, - "timestamp" = gameTimestamp(), + "timestamp" = round_timestamp(), ))) SStgui.update_uis(src) diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index 48aeb721c1aa..0c5efc1a9595 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -555,7 +555,7 @@ to_chat(user, span_boldnotice("[name] completed!")) to_chat(user, span_hypnophrase(span_big("[pick_list(HERETIC_INFLUENCE_FILE, "drain_message")]"))) desc += " (Completed!)" - log_heretic_knowledge("[key_name(user)] completed a [name] at [gameTimestamp()].") + log_heretic_knowledge("[key_name(user)] completed a [name] at [round_timestamp()].") user.add_mob_memory(/datum/memory/heretic_knowledge_ritual) SEND_SIGNAL(our_heretic, COMSIG_HERETIC_PASSIVE_UPGRADE_FINAL) return TRUE @@ -586,7 +586,7 @@ var/list/cost = our_heretic.researched_knowledge[knowledge][HKT_COST] total_points += cost - log_heretic_knowledge("[key_name(user)] gained knowledge of their final ritual at [gameTimestamp()]. \ + log_heretic_knowledge("[key_name(user)] gained knowledge of their final ritual at [round_timestamp()]. \ They have [length(our_heretic.researched_knowledge)] knowledge nodes researched, totalling [total_points] points \ and have sacrificed [our_heretic.total_sacrifices] people ([our_heretic.high_value_sacrifices] of which were high value)") @@ -636,7 +636,7 @@ human_user.physiology.burn_mod *= 0.5 SSblackbox.record_feedback("tally", "heretic_ascended", 1, heretic_datum.heretic_path.route) - log_heretic_knowledge("[key_name(user)] completed their final ritual at [gameTimestamp()].") + log_heretic_knowledge("[key_name(user)] completed their final ritual at [round_timestamp()].") notify_ghosts( "[user.real_name] has completed an ascension ritual!", source = user, diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index af2f2f655eb4..0f62be3dbab3 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -109,7 +109,7 @@ var/requisition_text = "

[station_name()] Supply Requisition

" requisition_text += "
" requisition_text += "Order #[id]
" - requisition_text+= "Time of Order: [station_time_timestamp()]
" + requisition_text += "Time of Order: [UNDERLINED_HTML_TEXT("[server_timestamp(ic_time = TRUE)]", "Shift Time: [round_timestamp()]")]
" requisition_text += "Item: [pack.name]
" requisition_text += "Access Restrictions: [SSid_access.get_access_desc(pack.access)]
" requisition_text += "Requested by: [orderer]
" @@ -118,7 +118,7 @@ requisition_text += "Rank: [orderer_rank]
" requisition_text += "Comment: [reason]
" - requisition_paper.add_raw_text(requisition_text) + requisition_paper.add_raw_text(requisition_text, advanced_html = TRUE) requisition_paper.update_appearance() return requisition_paper diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm index b39646106710..cda0c1a37e76 100644 --- a/code/modules/cargo/orderconsole.dm +++ b/code/modules/cargo/orderconsole.dm @@ -394,10 +394,10 @@ //create the paper from the SSshuttle.shopping_list if(length(SSshuttle.shopping_list)) var/obj/item/paper/requisition/requisition_paper = new(get_turf(src)) - requisition_paper.name = "requisition form - [station_time_timestamp()]" + requisition_paper.name = "requisition form - [server_timestamp(ic_time = TRUE)] (PT: [round_timestamp()])" var/requisition_text = "

[station_name()] Supply Requisition

" requisition_text += "
" - requisition_text += "Time of Order: [station_time_timestamp()]

" + requisition_text += "Time of Order: [UNDERLINED_HTML_TEXT("[server_timestamp(ic_time = TRUE)]", "Shift Time: [round_timestamp()]")]

" for(var/datum/supply_order/order as anything in SSshuttle.shopping_list) requisition_text += "[order.pack.name]
" requisition_text += "- Order ID: [order.id]
" @@ -412,7 +412,7 @@ if(reason) requisition_text += "- Reason Given: [reason]
" requisition_text += "

" - requisition_paper.add_raw_text(requisition_text) + requisition_paper.add_raw_text(requisition_text, advanced_html = TRUE) requisition_paper.color = "#9ef5ff" requisition_paper.update_appearance() diff --git a/code/modules/client/preferences/time.dm b/code/modules/client/preferences/time.dm new file mode 100644 index 000000000000..698618571ec1 --- /dev/null +++ b/code/modules/client/preferences/time.dm @@ -0,0 +1,5 @@ +/datum/preference/toggle/twelve_hour + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_key = "twelve_hour" + savefile_identifier = PREFERENCE_PLAYER + default_value = FALSE diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index a7cebef7bf25..bb1285c11a54 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -117,7 +117,7 @@ // Start gathering log_entry.scan_target = scanned_atom.name - log_entry.scan_time = station_time_timestamp() + log_entry.scan_time = round_timestamp() var/list/atom_fibers = GET_ATOM_FIBRES(scanned_atom) if(length(atom_fibers)) diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index f8355f530643..57eab84a1f96 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -110,7 +110,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) var/skipcount = abs(error_cooldown[erroruid]) - 1 error_cooldown[erroruid] = 0 if(skipcount > 0) - SEND_TEXT(world.log, "\[[time_stamp()]] Skipped [skipcount] runtimes in [E.file],[E.line].") + SEND_TEXT(world.log, "\[[server_timestamp()]] Skipped [skipcount] runtimes in [E.file],[E.line].") GLOB.error_cache.log_error(E, skip_count = skipcount) error_last_seen[erroruid] = world.time @@ -158,7 +158,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) if(GLOB.error_cache) GLOB.error_cache.log_error(E, desclines) - var/main_line = "\[[time_stamp()]] Runtime in [E.file],[E.line]: [E]" + var/main_line = "\[[server_timestamp()]] Runtime in [E.file],[E.line]: [E]" SEND_TEXT(world.log, main_line) for(var/line in desclines) SEND_TEXT(world.log, line) diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index fa0d1dcc9815..7ffba15b40f5 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -131,10 +131,10 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) /datum/error_viewer/error_source/New(exception/e) if (!istype(e)) - name = "\[[time_stamp()]] Uncaught exceptions" + name = "\[[server_timestamp()]] Uncaught exceptions" return - name = "\[[time_stamp()]] Runtime in [e.file], line [e.line]: [html_encode(e.name)]" + name = "\[[server_timestamp()]] Runtime in [e.file], line [e.line]: [html_encode(e.name)]" /datum/error_viewer/error_source/show_to(user, datum/error_viewer/back_to, linear) if (!istype(back_to)) @@ -156,15 +156,15 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) /datum/error_viewer/error_entry/New(exception/e, list/desclines, skip_count) if (!istype(e)) - name = "\[[time_stamp()]] Uncaught exception: [html_encode(e.name)]" + name = "\[[server_timestamp()]] Uncaught exception: [html_encode(e.name)]" return if(skip_count) - name = "\[[time_stamp()]] Skipped [skip_count] runtimes in [e.file],[e.line]." + name = "\[[server_timestamp()]] Skipped [skip_count] runtimes in [e.file],[e.line]." is_skip_count = TRUE return - name = "\[[time_stamp()]] Runtime in [e.file], line [e.line]: [html_encode(e.name)]" + name = "\[[server_timestamp()]] Runtime in [e.file], line [e.line]: [html_encode(e.name)]" exc = e if (istype(desclines)) for (var/line in desclines) diff --git a/code/modules/escape_menu/details.dm b/code/modules/escape_menu/details.dm index 00267ecba5da..69a6cc8f4d8c 100644 --- a/code/modules/escape_menu/details.dm +++ b/code/modules/escape_menu/details.dm @@ -1,42 +1,16 @@ -// This doesn't instantiate right away, since we rely on other GLOBs -GLOBAL_DATUM(escape_menu_details, /atom/movable/screen/escape_menu/details) - -/// Provides a singleton for the escape menu details screen. -/proc/give_escape_menu_details() - if (isnull(GLOB.escape_menu_details)) - GLOB.escape_menu_details = new - - return GLOB.escape_menu_details - /atom/movable/screen/escape_menu/details - screen_loc = "EAST:-180,NORTH:-34" + screen_loc = "EAST:-175,NORTH:-40" maptext_height = 100 maptext_width = 200 -/atom/movable/screen/escape_menu/details/Initialize(mapload, datum/hud/hud_owner) - . = ..() - - update_text() - START_PROCESSING(SSescape_menu, src) - -/atom/movable/screen/escape_menu/details/Destroy() - if (GLOB.escape_menu_details == src) - stack_trace("Something tried to delete the escape menu details screen") - return QDEL_HINT_LETMELIVE - - STOP_PROCESSING(SSescape_menu, src) - return ..() - -/atom/movable/screen/escape_menu/details/process(seconds_per_tick) - update_text() - -/atom/movable/screen/escape_menu/details/proc/update_text() +/atom/movable/screen/escape_menu/details/proc/update_text(client/client_owner) var/new_maptext = {" Round ID: [GLOB.round_id || "Unset"]
- Round Time: [ROUND_TIME()]
+ Server Time (NST): [server_timestamp(format = "hh:mm:ss", ic_time = TRUE, twelve_hour_clock = client_owner.prefs.read_preference(/datum/preference/toggle/twelve_hour))]
+ Shift Time (PT): [(SSticker.round_start_time == 0) ? "Pre-Game" : round_timestamp()]
Map: [SSmapping.current_map.return_map_name(webmap_included = TRUE) || "Loading..."]
- Time Dilation: [round(SStime_track.time_dilation_current,1)]%
+ Time Dilation: [round(SStime_track.time_dilation_current, 1)]%
"} diff --git a/code/modules/escape_menu/escape_menu.dm b/code/modules/escape_menu/escape_menu.dm index 0042a6f73322..53940e0ae075 100644 --- a/code/modules/escape_menu/escape_menu.dm +++ b/code/modules/escape_menu/escape_menu.dm @@ -24,6 +24,8 @@ GLOBAL_LIST_EMPTY(escape_menus) var/client/client /// A weakref to the hud this escape menu currently applies to var/datum/weakref/our_hud_ref + /// The details at the top right that persists through all screens, showing round info. + var/atom/movable/screen/escape_menu/details/detail_screen VAR_PRIVATE ckey @@ -49,6 +51,8 @@ GLOBAL_LIST_EMPTY(escape_menus) base_holder = new(client) if(isnull(dim_screen)) dim_screen = new() + detail_screen = new() + detail_screen.update_text(client) populate_base_ui() page_holder = new(client) @@ -64,7 +68,10 @@ GLOBAL_LIST_EMPTY(escape_menus) if (!isnull(ckey)) GLOB.escape_menus[ckey] = src + START_PROCESSING(SSescape_menu, src) + /datum/escape_menu/Destroy(force) + STOP_PROCESSING(SSescape_menu, src) QDEL_NULL(base_holder) QDEL_NULL(page_holder) resource_panels = null // list contents were already qdeled in QDEL_NULL(page_holder), so we can safely null this @@ -82,6 +89,9 @@ GLOBAL_LIST_EMPTY(escape_menus) return ..() +/datum/escape_menu/process(seconds_per_tick) + detail_screen.update_text(client) + /datum/escape_menu/proc/on_client_qdel() SIGNAL_HANDLER PRIVATE_PROC(TRUE) @@ -127,7 +137,7 @@ GLOBAL_LIST_EMPTY(escape_menus) PRIVATE_PROC(TRUE) base_holder.give_protected_screen_object(dim_screen) - base_holder.give_protected_screen_object(give_escape_menu_details()) + base_holder.give_screen_object(detail_screen) /datum/escape_menu/proc/open_home_page() PRIVATE_PROC(TRUE) diff --git a/code/modules/events/nightshift.dm b/code/modules/events/nightshift.dm new file mode 100644 index 000000000000..785ad8e04ac2 --- /dev/null +++ b/code/modules/events/nightshift.dm @@ -0,0 +1,78 @@ +/datum/round_event_control/nightshift + name = "Night Shift" + typepath = /datum/round_event/nightshift + weight = 2 + max_occurrences = 1 + earliest_start = 30 SECONDS + category = EVENT_CATEGORY_FRIENDLY + description = "Sets the station's lights to Night Shift mode for the next 20 minutes." + +/datum/round_event_control/nightshift/New() + . = ..() + if(!CONFIG_GET(flag/enable_night_shifts)) + max_occurrences = 0 + +/datum/round_event/nightshift + announce_when = 1 + start_when = 1 + end_when = 700 //~22 Minutes + fakeable = FALSE + + ///Whether the nightshift is on or not, synced to the alert level (which decides whether we're active) + ///TRUE means they are disabled by red alert. + var/nightshift_disabled = FALSE + ///APCs to update through ticks to account for lag. + var/list/currentrun + +/datum/round_event/nightshift/announce(fake) + update_nightshift(active = TRUE, announce = TRUE) + +/datum/round_event/nightshift/tick() + var/emergency = (SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED) + if(nightshift_disabled != emergency) + nightshift_disabled = emergency + if(emergency) + update_nightshift(active = FALSE, resume = TRUE) + else + update_nightshift(active = TRUE, resume = TRUE) + + update_machines() + +/datum/round_event/nightshift/end() + update_nightshift(active = FALSE, announce = TRUE) + +///Called several times, to start & stop nightlights including during red alert/de-red alerting. +/datum/round_event/nightshift/proc/update_nightshift(active, resume = FALSE, announce = FALSE) + currentrun = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc) + + if(announce) + if(active) + send_announcement("Good evening, crew. To reduce power consumption and stimulate the circadian rhythms of some species, all of the lights aboard the station have been dimmed for the night.") + else + send_announcement("Good morning, crew. As it is now day time, all of the lights aboard the station have been restored to their former brightness.") + + if(resume) + if(active) + send_announcement("Restoring night lighting configuration to normal operation.") + else + send_announcement("Disabling night lighting: Station is in a state of emergency.") + + update_machines() + +///Called on process that will slowly update all APCs to be nightlight +/datum/round_event/nightshift/proc/update_machines() + for(var/obj/machinery/power/apc/APC as anything in currentrun) + currentrun -= APC + if (APC.area && (APC.area.type in GLOB.the_station_areas)) + APC.set_nightshift(!nightshift_disabled) + if(TICK_CHECK) + return + +///Custom messages sent throughout the event that we'll do here, instead of using the `announce` proc that's only at the start. +/datum/round_event/nightshift/proc/send_announcement(message) + priority_announce( + text = message, + sound = 'sound/announcer/notice/notice2.ogg', + sender_override = "Automated Lighting System Announcement", + color_override = "grey", + ) diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index 15368d2c5431..31458a4a129d 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -121,8 +121,7 @@ /datum/chemical_reaction/food/chocolatepudding/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) . = ..() - var/station_time = station_time() - if(!ISINRANGE(station_time, 3 HOURS + 45 MINUTES, 4 HOURS + 15 MINUTES)) + if(!ISINRANGE(world.timeofday, 3 HOURS + 45 MINUTES, 4 HOURS + 15 MINUTES)) return var/lastkey = holder.my_atom?.fingerprintslast if(!lastkey) diff --git a/code/modules/forensics/_forensics.dm b/code/modules/forensics/_forensics.dm index e03790e27b06..af37a9b59589 100644 --- a/code/modules/forensics/_forensics.dm +++ b/code/modules/forensics/_forensics.dm @@ -214,7 +214,7 @@ var/mob/living/carbon/human/human_suspect = suspect if(human_suspect.gloves) has_gloves = "(gloves)" - var/current_time = time_stamp() + var/current_time = round_timestamp() if(!LAZYACCESS(hiddenprints, suspect.key)) LAZYSET(hiddenprints, suspect.key, "First: \[[current_time]\] \"[suspect.real_name]\"[has_gloves]. Ckey: [suspect.ckey]") else diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index d35002d32f5f..deb61dca16ba 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -564,7 +564,7 @@ var/alist/user_data /datum/ore_silo_log/New(obj/machinery/M, _action, _amount, _noun, list/mats=list(), alist/user_data) - timestamp = station_time_timestamp() + timestamp = round_timestamp() machine_name = M.name area_name = get_area_name(M, TRUE) action = _action diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 324215167130..a7de4804b76c 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -232,7 +232,7 @@ set_stat(DEAD) timeofdeath = world.time - station_timestamp_timeofdeath = station_time_timestamp() + station_timestamp_timeofdeath = round_timestamp() var/turf/death_turf = get_turf(src) var/area/death_area = get_area(src) // Display a death message if the mob is a player mob (has an active mind) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 240ddabf39df..1ae21953f234 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -487,7 +487,7 @@ create_modularInterface() var/mob/living/silicon/robot/robo = modularInterface.silicon_owner if(istype(robo)) - modularInterface.borglog += "[station_time_timestamp()] - [string]" + modularInterface.borglog += "[round_timestamp()] - [string]" var/datum/computer_file/program/robotact/program = modularInterface.get_robotact() if(program) var/datum/tgui/active_ui = SStgui.get_open_ui(src, program.computer) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 14bb9471a7cb..765bfe5b89f6 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -542,7 +542,7 @@ if(stat != DEAD) if(!silent) emote("deathgasp") - station_timestamp_timeofdeath = station_time_timestamp() + station_timestamp_timeofdeath = round_timestamp() if(!HAS_TRAIT(src, TRAIT_FAKEDEATH) && !silent) send_death_moodlets() diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index cf88eeffb1fd..9cc733599ba6 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -244,7 +244,7 @@ /obj/item/mod/module/status_readout/add_ui_data() . = ..() .["display_time"] = display_time - .["shift_time"] = station_time_timestamp() + .["shift_time"] = round_timestamp() .["shift_id"] = GLOB.round_id .["health"] = mod.wearer?.health || 0 .["health_max"] = mod.wearer?.getMaxHealth() || 0 diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index cced073163e4..1225479d73bf 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -687,7 +687,7 @@ data["PC_programheaders"] = program_headers - data["PC_stationtime"] = station_time_timestamp() + data["PC_stationtime"] = round_timestamp() data["PC_stationdate"] = "[time2text(world.realtime, "DDD, Month DD", NO_TIMEZONE)], [CURRENT_STATION_YEAR]" data["PC_showexitprogram"] = !!active_program // Hides "Exit Program" button on mainscreen return data diff --git a/code/modules/modular_computers/file_system/programs/chatroom/conversation.dm b/code/modules/modular_computers/file_system/programs/chatroom/conversation.dm index 969e56195edb..0e65dfedd2a8 100644 --- a/code/modules/modular_computers/file_system/programs/chatroom/conversation.dm +++ b/code/modules/modular_computers/file_system/programs/chatroom/conversation.dm @@ -46,13 +46,13 @@ return ..() /datum/ntnet_conversation/proc/add_message(message, username) - message = "[station_time_timestamp(format = "hh:mm")] [username]: [message]" + message = "[round_timestamp(format = "hh:mm")] [username]: [message]" messages["[next_message_id]"] = message next_message_id++ trim_message_list() /datum/ntnet_conversation/proc/add_status_message(message) - message = "[station_time_timestamp(format = "hh:mm")] -!- [message]" + message = "[round_timestamp(format = "hh:mm")] -!- [message]" messages["[next_message_id]"] = message next_message_id++ trim_message_list() diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm index d0dcf0ae873f..eccb78a58ff0 100644 --- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm +++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm @@ -23,7 +23,7 @@
[GLOB.manifest ? GLOB.manifest.get_html(0) : ""] "} - if(!computer.print_text(contents, "crew manifest ([station_time_timestamp()])")) + if(!computer.print_text(contents, "crew manifest ([round_timestamp()])")) to_chat(usr, span_notice("Printer is out of paper.")) return else diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm index dc83a7a76aee..e393ff2a60fb 100644 --- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm @@ -544,7 +544,7 @@ return FALSE // Log it in our logs - var/datum/pda_message/message_datum = new(message, TRUE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), photo_asset_key, everyone) + var/datum/pda_message/message_datum = new(message, TRUE, round_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), photo_asset_key, everyone) for(var/datum/pda_chat/target_chat as anything in target_chats) target_chat.add_message(message_datum, show_in_recents = !everyone) target_chat.unread_messages = 0 @@ -675,7 +675,7 @@ // don't create a new chat for rigged messages, make it a one off notif if(!is_rigged) - var/datum/pda_message/message = new(signal.data["message"], FALSE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), signal.data["photo"], signal.data["everyone"]) + var/datum/pda_message/message = new(signal.data["message"], FALSE, round_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), signal.data["photo"], signal.data["everyone"]) chat = find_chat_by_recipient(is_fake_user ? fake_name : sender_ref, is_fake_user) if(!istype(chat)) diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index b82d95497642..1761a7fe69fe 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -477,7 +477,7 @@ GLOBAL_VAR_INIT(fax_autoprinting, FALSE) var/list/history_data = list() history_data["history_type"] = history_type history_data["history_fax_name"] = history_fax_name - history_data["history_time"] = station_time_timestamp() + history_data["history_time"] = round_timestamp() fax_history += list(history_data) /// Clears the history of fax operations. diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 78f591b3ec36..5b2459d3caf2 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -233,9 +233,9 @@ if(is_signature) field_text = signature_name else if(is_date) - field_text = "[time2text(world.timeofday, "DD/MM", NO_TIMEZONE)]/[CURRENT_STATION_YEAR]" + field_text = "[server_timestamp("DD/MM/YYYY", ic_time = TRUE)]" else if(is_time) - field_text = time2text(world.timeofday, "hh:mm", NO_TIMEZONE) + field_text = round_timestamp() var/field_font = is_signature ? SIGNATURE_FONT : font diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 2f53861f4061..4af0bb0496b5 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -660,9 +660,11 @@ equipment = autoset(equipment, AUTOSET_ON) lighting = autoset(lighting, AUTOSET_ON) environ = autoset(environ, AUTOSET_ON) - if(nightshift_lights && low_power_nightshift_lights) + //If nightlights are on, and we're recovering from low power/nightlight event, we'll remove it. + var/nightshift_disabled = !(locate(/datum/round_event/nightshift) in SSevents.running) + if(nightshift_lights && (nightshift_disabled || low_power_nightshift_lights)) low_power_nightshift_lights = FALSE - if(!SSnightshift.nightshift_active) + if(nightshift_disabled) INVOKE_ASYNC(src, PROC_REF(set_nightshift), FALSE) if(cell_percent > APC_CHANNEL_ALARM_TRESHOLD) alarm_manager.clear_alarm(ALARM_POWER) diff --git a/code/modules/requests/request_manager.dm b/code/modules/requests/request_manager.dm index d2257515f8f1..77051641e50e 100644 --- a/code/modules/requests/request_manager.dm +++ b/code/modules/requests/request_manager.dm @@ -270,7 +270,7 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new) "message" = request.message, "additional_info" = request.additional_information, "timestamp" = request.timestamp, - "timestamp_str" = gameTimestamp(wtime = request.timestamp) + "timestamp_str" = round_timestamp(wtime = request.timestamp) )) data["fax_autoprinting"] = GLOB.fax_autoprinting return data diff --git a/code/modules/research/ordnance/_scipaper.dm b/code/modules/research/ordnance/_scipaper.dm index 0b5efc03e10f..e5fa3c3c8f04 100644 --- a/code/modules/research/ordnance/_scipaper.dm +++ b/code/modules/research/ordnance/_scipaper.dm @@ -185,7 +185,7 @@ author = "Unknown" et_alia = FALSE if(!abstract) - abstract = "Published on [station_time_timestamp()]" + abstract = "Published on [server_timestamp(ic_time = TRUE)] (PT: [round_timestamp()])" /datum/scientific_paper/explosive /** diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm index b39758918ea4..e22bb36b8e69 100644 --- a/code/modules/research/ordnance/doppler_array.dm +++ b/code/modules/research/ordnance/doppler_array.dm @@ -169,7 +169,7 @@ var/datum/data/tachyon_record/new_record = new /datum/data/tachyon_record() new_record.name = "Log Recording #[record_number]" - new_record.timestamp = station_time_timestamp() + new_record.timestamp = "[server_timestamp(ic_time = TRUE)] (PT: [round_timestamp()])" new_record.coordinates = "[epicenter.x], [epicenter.y]" new_record.displacement = took new_record.factual_radius["epicenter_radius"] = devastation_range diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm index 4887b41849b3..0631a7ed0aa4 100644 --- a/code/modules/research/ordnance/tank_compressor.dm +++ b/code/modules/research/ordnance/tank_compressor.dm @@ -169,7 +169,7 @@ var/datum/data/compressor_record/new_record = new() new_record.name = "Log Recording #[record_number]" new_record.experiment_source = inserted_tank.name - new_record.timestamp = station_time_timestamp() + new_record.timestamp = "[server_timestamp(ic_time = TRUE)] (PT: [round_timestamp()])" for(var/gas_path in leaked_gas_buffer.gases) new_record.gas_data[gas_path] = leaked_gas_buffer.gases[gas_path][MOLES] diff --git a/code/modules/reta/reta_system.dm b/code/modules/reta/reta_system.dm index ebcfe06d8964..51591a20590b 100644 --- a/code/modules/reta/reta_system.dm +++ b/code/modules/reta/reta_system.dm @@ -5,7 +5,7 @@ /// Helper function for RETA-specific logging /proc/log_reta(text) - WRITE_LOG(GLOB.reta_log, "[time_stamp()] RETA: [text]") + WRITE_LOG(GLOB.reta_log, "[server_timestamp()] RETA: [text]") log_game("RETA: [text]") /proc/initialize_reta_system() diff --git a/code/modules/wiremod/components/utility/timepiece.dm b/code/modules/wiremod/components/utility/timepiece.dm index fa675bfa1b9d..e40e4d1f09cd 100644 --- a/code/modules/wiremod/components/utility/timepiece.dm +++ b/code/modules/wiremod/components/utility/timepiece.dm @@ -46,19 +46,19 @@ switch(format.value) if(COMP_TIMEPIECE_TWENTYFOUR_HOUR) - time = station_time_timestamp() + time = round_timestamp() if(COMP_TIMEPIECE_TWELVE_HOUR) - time = time_to_twelve_hour(station_time()) + time = time_to_twelve_hour() text_output.set_output(time) switch(time_unit.value) if(COMP_TIMEPIECE_HOURS) - time = round(station_time() / (1 HOURS)) + time = round_timestamp(format = "hh") if(COMP_TIMEPIECE_MINUTES) - time = round(station_time() / (1 MINUTES)) + time = round_timestamp(format = "mm") if(COMP_TIMEPIECE_SECONDS) - time = round(station_time() / (1 SECONDS)) + time = round_timestamp(format = "ss") num_output.set_output(time) diff --git a/config/game_options.txt b/config/game_options.txt index 3a8319cca9a8..5588c20557cc 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -493,15 +493,6 @@ ROUNDSTART_TRAITS ## Enable night shifts #ENABLE_NIGHT_SHIFTS -## The shift start hour in 24-hour (0-23) notation -SHIFT_TIME_START_HOUR 7 - -## Sets shift time to server time at roundstart. Overrides SHIFT_TIME_START_HOUR -#SHIFT_TIME_REALTIME - -## Enable randomized shift start times. Overrides SHIFT_TIME_REALTIME and SHIFT_TIME_START_HOUR -#RANDOMIZE_SHIFT_TIME - ## A cap on how many monkeys may be created via monkey cubes MONKEYCAP 64 diff --git a/tgstation.dme b/tgstation.dme index df33513e07e3..7b10ea3d1e36 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -731,7 +731,6 @@ #include "code\controllers\subsystem\mobs.dm" #include "code\controllers\subsystem\moods.dm" #include "code\controllers\subsystem\mouse_entered.dm" -#include "code\controllers\subsystem\nightshift.dm" #include "code\controllers\subsystem\npcpool.dm" #include "code\controllers\subsystem\ore_generation.dm" #include "code\controllers\subsystem\overlays.dm" @@ -4122,6 +4121,7 @@ #include "code\modules\client\preferences\statpanel.dm" #include "code\modules\client\preferences\status_bar.dm" #include "code\modules\client\preferences\tgui.dm" +#include "code\modules\client\preferences\time.dm" #include "code\modules\client\preferences\tooltips.dm" #include "code\modules\client\preferences\trans_prosthetic.dm" #include "code\modules\client\preferences\ui_style.dm" @@ -4384,6 +4384,7 @@ #include "code\modules\events\market_crash.dm" #include "code\modules\events\mass_hallucination.dm" #include "code\modules\events\mice_migration.dm" +#include "code\modules\events\nightshift.dm" #include "code\modules\events\portal_storm.dm" #include "code\modules\events\processor_overload.dm" #include "code\modules\events\radiation_leak.dm" diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/AuditScreen.tsx b/tgui/packages/tgui/interfaces/AccountingConsole/AuditScreen.tsx index 98a19e308b15..2885340059f4 100644 --- a/tgui/packages/tgui/interfaces/AccountingConsole/AuditScreen.tsx +++ b/tgui/packages/tgui/interfaces/AccountingConsole/AuditScreen.tsx @@ -41,7 +41,7 @@ export const AuditScreen = () => { {purchase.vendor} - {purchase.stationtime || '00:00'} ST + {purchase.stationtime || '00:00'} PT ))} diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/index.tsx b/tgui/packages/tgui/interfaces/AccountingConsole/index.tsx index 3e45671520fd..622abff07aa1 100644 --- a/tgui/packages/tgui/interfaces/AccountingConsole/index.tsx +++ b/tgui/packages/tgui/interfaces/AccountingConsole/index.tsx @@ -150,7 +150,7 @@ export const AccountingConsole = () => { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/accessibility.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/accessibility.tsx index 1beda34b2920..1e943cf1b01a 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/accessibility.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/accessibility.tsx @@ -48,3 +48,13 @@ export const stair_indicator: FeatureToggle = { `, component: CheckboxInput, }; + +export const twelve_hour: FeatureToggle = { + name: 'Twelve-Hour Clock', + category: 'ACCESSIBILITY', + description: ` + When toggled, will replace many instances of real-world time with AM/PM instead. + `, + component: CheckboxInput, +}; + diff --git a/tgui/packages/tgui/interfaces/Secrets.jsx b/tgui/packages/tgui/interfaces/Secrets.jsx index fc65fd059907..370331857388 100644 --- a/tgui/packages/tgui/interfaces/Secrets.jsx +++ b/tgui/packages/tgui/interfaces/Secrets.jsx @@ -231,13 +231,13 @@ const HelpfulTab = (props) => { /> -