From 8c839de678d7b748bd480a9e8969adcfd5ad70b1 Mon Sep 17 00:00:00 2001 From: meem <75212565+meemofcourse@users.noreply.github.com> Date: Mon, 11 Dec 2023 21:46:49 -0300 Subject: [PATCH] ERT Minor Refactor, more ERTs, ERTs can now spawn on subshuttles (#2395) ## About The Pull Request Ports https://github.com/tgstation/tgstation/pull/71348 and https://github.com/tgstation/tgstation/pull/56345, with code adapted for Shiptest. Also adds the following ERTs: * NT Loss Prevention * Frontiersmen * Inteq * Minutemen * Riot Control * BARD * GOLD Collector * Syndicate * Gorlex Maruders * Cybersun Commando * Cybersun Paramedic * SolGov * Sonnensoldner * Solarian Inspector ## Why It's Good For The Game adminbus funny ## Changelog :cl: Zonespace27, Ryll-Ryll, MeeMOfCourse tweak: Admins can now spawn an unarmed horde of interns in addition to the old armed horde tweak: Admins can toggle name randomization for ERT's, as well as if they'd like to be spawned in the briefing room at the time of creation tweak: Admins can now force ERT's to pick the leader role from the most experienced candidates in terms of playtime tweak: Menus like Create Response Team and Create Portal Storm now toggle boolean options when clicked, rather than open a popup window to select one of the two options refactor: Centcom Officials are now a full subtype of ERT, rather than being a separate antagonist type with duplicated functionality admin: ERTs can now have a custom shuttle that they can spawn on, on a toggle while creating said ERT. admin: Shiptest-Specific ERTs, and respective files. /:cl: --------- Signed-off-by: meem <75212565+meemofcourse@users.noreply.github.com> Co-authored-by: Mark Suckerberg --- _maps/outpost/indie_space.dmm | 1072 +++++++++++------ _maps/outpost/nanotrasen_asteroid.dmm | 7 + .../subshuttles/Subshuttle Catalog.txt | 2 + .../shuttles/subshuttles/frontiersmen_gut.dmm | 5 + .../subshuttles/independent_kunai.dmm | 17 +- .../subshuttles/independent_sugarcube.dmm | 15 +- .../subshuttles/nanotrasen_falcon.dmm | 9 + code/_globalvars/lists/mapping.dm | 1 + code/datums/browser.dm | 2 +- code/datums/ert.dm | 198 ++- code/datums/shuttles.dm | 1 - code/game/objects/effects/contraband.dm | 8 +- code/game/objects/effects/landmarks.dm | 19 +- code/game/objects/items/storage/belt.dm | 34 +- code/modules/admin/topic.dm | 10 +- code/modules/admin/verbs/one_click_antag.dm | 242 ++-- .../antagonists/_common/antag_spawner.dm | 15 +- code/modules/antagonists/ert/ert.dm | 497 ++++++-- code/modules/antagonists/official/official.dm | 42 - code/modules/client/preferences.dm | 12 + code/modules/client/preferences_savefile.dm | 3 + .../clothing/outfits/ert/frontiersmen_ert.dm | 60 + .../modules/clothing/outfits/ert/indie_ert.dm | 88 ++ .../modules/clothing/outfits/ert/inteq_ert.dm | 53 + .../clothing/outfits/ert/minutemen_ert.dm | 126 ++ .../outfits/{ert.dm => ert/nanotrasen_ert.dm} | 235 ++-- .../clothing/outfits/ert/solgov_ert.dm | 38 + .../clothing/outfits/ert/syndicate_ert.dm | 164 +++ .../jobs/job_types/security_officer.dm | 2 +- code/modules/jobs/job_types/warden.dm | 2 +- .../modules/projectiles/guns/ballistic/smg.dm | 3 + icons/effects/landmarks_static.dmi | Bin 18956 -> 19814 bytes shiptest.dme | 9 +- 33 files changed, 2293 insertions(+), 698 deletions(-) delete mode 100644 code/modules/antagonists/official/official.dm create mode 100644 code/modules/clothing/outfits/ert/frontiersmen_ert.dm create mode 100644 code/modules/clothing/outfits/ert/indie_ert.dm create mode 100644 code/modules/clothing/outfits/ert/inteq_ert.dm create mode 100644 code/modules/clothing/outfits/ert/minutemen_ert.dm rename code/modules/clothing/outfits/{ert.dm => ert/nanotrasen_ert.dm} (73%) create mode 100644 code/modules/clothing/outfits/ert/solgov_ert.dm create mode 100644 code/modules/clothing/outfits/ert/syndicate_ert.dm diff --git a/_maps/outpost/indie_space.dmm b/_maps/outpost/indie_space.dmm index a3949804177c..b832b5f5b2f1 100644 --- a/_maps/outpost/indie_space.dmm +++ b/_maps/outpost/indie_space.dmm @@ -130,8 +130,13 @@ /obj/effect/turf_decal/corner/opaque/neutral{ dir = 4 }, -/obj/item/radio/intercom/directional/east, /obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/outpost/hallway/port) "aU" = ( @@ -279,6 +284,10 @@ /obj/structure/foamedmetal, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"bW" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel, +/area/outpost/security) "bY" = ( /obj/item/kirbyplants{ icon_state = "plant-19" @@ -364,6 +373,13 @@ /obj/structure/flora/junglebush, /turf/open/floor/grass/ship/jungle, /area/outpost/hallway/central) +"cu" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/outpost/security) "cG" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -426,6 +442,9 @@ /obj/effect/spawner/structure/window/reinforced/indestructable, /turf/open/floor/plating, /area/outpost/cargo/office) +"cX" = ( +/turf/open/floor/plasteel, +/area/outpost/security) "dg" = ( /obj/structure/railing{ dir = 4 @@ -513,28 +532,10 @@ /turf/open/floor/plating/asteroid, /area/outpost/maintenance/central) "dL" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/maintenance{ - dir = 4; - req_access = list("101") - }, -/turf/open/floor/plasteel/tech, -/area/outpost/vacant_rooms) +/obj/structure/closet/secure_closet/armory3, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel, +/area/outpost/security) "dN" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -734,6 +735,31 @@ /obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plasteel/patterned/cargo_one, /area/outpost/cargo) +"fh" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/security/brig{ + req_access = list("101"); + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/outpost/security) "fi" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -847,16 +873,10 @@ /turf/open/floor/plasteel/patterned, /area/outpost/cargo) "fZ" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable/yellow{ - icon_state = "0-10" - }, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/steeldecal/steel_decals_central7, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/structure/chair, +/obj/effect/landmark/ert_outpost_spawn, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "ga" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/effect/decal/cleanable/dirt, @@ -880,6 +900,17 @@ }, /turf/open/floor/plasteel, /area/outpost/hallway/port) +"gg" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central6, +/turf/open/floor/plasteel, +/area/outpost/security) "go" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, @@ -965,6 +996,10 @@ }, /turf/open/floor/plasteel/patterned, /area/outpost/cargo) +"gU" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "gW" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable/yellow{ @@ -1610,6 +1645,25 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel, /area/outpost/hallway/central) +"lt" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/window{ + req_access = list("101") + }, +/obj/machinery/door/window{ + req_access = list("101"); + dir = 1 + }, +/obj/effect/turf_decal/floordetail/tiled, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/tech, +/area/outpost/security) "lw" = ( /obj/machinery/light/small/directional/south, /obj/effect/turf_decal/siding/wood/corner{ @@ -1682,11 +1736,16 @@ /turf/open/floor/plating, /area/outpost/maintenance/central) "lY" = ( -/obj/effect/decal/cleanable/oil/streak, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/machinery/camera/autoname, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 5 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "mb" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1876,13 +1935,13 @@ /area/outpost/maintenance/fore) "mW" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "1-8" }, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/outpost/security) "nb" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2040,6 +2099,13 @@ }, /turf/open/floor/wood, /area/outpost/crew/bar) +"ob" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/grey, +/turf/open/floor/plasteel, +/area/outpost/security) "od" = ( /obj/machinery/shower{ pixel_y = 17 @@ -2131,6 +2197,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"oQ" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/plasteel, +/area/outpost/security) "oS" = ( /obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plasteel/patterned/cargo_one, @@ -2152,6 +2225,20 @@ /mob/living/simple_animal/mouse/brown, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"oW" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/airlock/security/brig{ + req_access = list("101") + }, +/turf/open/floor/plasteel/tech, +/area/outpost/security) "pb" = ( /obj/structure/chair/stool/bar{ dir = 1; @@ -2204,13 +2291,13 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, /obj/structure/holosign/barrier/infinite{ max_integrity = 500 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 4 + }, /turf/open/floor/plasteel, /area/outpost/hallway/port) "pp" = ( @@ -2421,9 +2508,9 @@ /turf/open/floor/plasteel, /area/outpost/hallway/central) "qW" = ( -/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/structure/window/reinforced/indestructable, /turf/open/floor/plating, -/area/outpost/vacant_rooms) +/area/outpost/security) "qX" = ( /obj/structure/grille/indestructable, /obj/structure/cable/yellow{ @@ -2440,6 +2527,9 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/outpost/vacant_rooms) "rg" = ( @@ -2512,6 +2602,11 @@ dir = 4 }, /obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central6, /turf/open/floor/plasteel, /area/outpost/vacant_rooms) "ry" = ( @@ -2531,6 +2626,11 @@ }, /turf/open/floor/plasteel/tech, /area/outpost/hallway/central) +"rz" = ( +/obj/structure/flora/rock, +/obj/structure/flora/rock, +/turf/open/floor/plating/asteroid, +/area/outpost/external) "rC" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -3202,6 +3302,23 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"uI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/plasteel, +/area/outpost/security) +"uJ" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "uL" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/structure/cable/yellow{ @@ -3496,6 +3613,11 @@ /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/outpost/hallway/port) +"wE" = ( +/obj/structure/closet/secure_closet/armory1, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel, +/area/outpost/security) "wF" = ( /obj/structure/flora/grass/jungle, /obj/structure/flora/junglebush/c, @@ -3537,6 +3659,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"wW" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/outpost/security) "wX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -3549,14 +3677,11 @@ /turf/open/floor/plasteel, /area/outpost/storage) "xc" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 }, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/turf/open/floor/plasteel, +/area/outpost/security) "xf" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -3820,6 +3945,14 @@ }, /turf/open/floor/plasteel, /area/outpost/hallway/port) +"za" = ( +/obj/structure/falsewall/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/falsewall/reinforced, +/turf/open/floor/plating, +/area/outpost/maintenance/fore) "zb" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/effect/decal/cleanable/dirt, @@ -3893,6 +4026,13 @@ /obj/effect/turf_decal/industrial/warning/fulltile, /turf/open/floor/plasteel/patterned/cargo_one, /area/outpost/cargo) +"zD" = ( +/obj/machinery/camera/autoname{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel, +/area/outpost/security) "zE" = ( /obj/structure/cable/yellow{ icon_state = "1-8" @@ -4029,6 +4169,10 @@ pixel_x = -14; pixel_y = -7 }, +/obj/item/reagent_containers/food/snacks/grown/soybeans{ + pixel_x = -12; + pixel_y = 8 + }, /turf/open/floor/plating/asteroid, /area/outpost/maintenance/central) "Ap" = ( @@ -4199,21 +4343,23 @@ /turf/open/floor/plasteel/patterned/cargo_one, /area/outpost/vacant_rooms/office) "Bc" = ( +/obj/item/radio/intercom/directional/west, /obj/structure/cable/yellow{ - icon_state = "2-5" + icon_state = "1-2" }, -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/effect/landmark/ert_outpost_spawn, +/turf/open/floor/plasteel, +/area/outpost/security) "Bd" = ( -/obj/structure/grille/indestructable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/machinery/computer/cryopod/directional/north, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 5 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "Bf" = ( /obj/structure/table/wood, /obj/machinery/camera/autoname{ @@ -4243,6 +4389,12 @@ }, /turf/open/floor/plasteel/tech, /area/outpost/hallway/central) +"Bo" = ( +/obj/item/bedsheet, +/obj/structure/bed/pod, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "Bp" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/structure/cable/yellow{ @@ -4281,6 +4433,9 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/outpost/vacant_rooms) "Bu" = ( @@ -4294,6 +4449,11 @@ }, /turf/open/floor/carpet/green, /area/outpost/crew/bar) +"By" = ( +/obj/structure/closet/secure_closet/contraband, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "Bz" = ( /obj/machinery/power/floodlight, /obj/structure/cable/yellow{ @@ -4350,6 +4510,17 @@ }, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"BO" = ( +/obj/structure/table, +/obj/item/radio/intercom/table{ + dir = 8; + layer = 2.99; + pixel_x = -6 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "BR" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -4584,10 +4755,11 @@ /turf/open/floor/plasteel/patterned, /area/outpost/cargo) "Do" = ( -/obj/machinery/portable_atmospherics/pump, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/outpost/security) "Dp" = ( /obj/structure/railing/corner, /obj/effect/turf_decal/industrial/loading{ @@ -4631,6 +4803,13 @@ /obj/effect/spawner/lootdrop/maintenance/two, /turf/open/floor/plasteel/mono, /area/outpost/storage) +"DI" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/fakelattice, +/turf/open/floor/plasteel/elevatorshaft, +/area/outpost/security) "DL" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -4768,6 +4947,13 @@ /obj/effect/turf_decal/steeldecal/steel_decals_central6, /turf/open/floor/plasteel, /area/outpost/vacant_rooms/office) +"Ff" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/plasteel, +/area/outpost/security) "Fi" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/effect/turf_decal/corner/opaque/neutral{ @@ -4788,18 +4974,42 @@ }, /turf/open/floor/plating, /area/outpost/maintenance/fore) -"Fq" = ( -/obj/effect/spawner/structure/window/reinforced/indestructable, -/turf/open/floor/plating, -/area/outpost/crew/library) -"Fr" = ( -/obj/machinery/vending/boozeomat{ - pixel_y = 32; - density = 0 +"Fn" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/carpet/green, -/area/outpost/crew/bar) +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/window{ + req_access = list("101"); + dir = 8 + }, +/obj/machinery/door/window{ + req_access = list("101"); + dir = 4 + }, +/obj/effect/turf_decal/floordetail/tiled, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/outpost/security) +"Fq" = ( +/obj/effect/spawner/structure/window/reinforced/indestructable, +/turf/open/floor/plating, +/area/outpost/crew/library) +"Fr" = ( +/obj/machinery/vending/boozeomat{ + pixel_y = 32; + density = 0 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/green, +/area/outpost/crew/bar) "Fs" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -4941,6 +5151,12 @@ }, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"Gl" = ( +/obj/structure/bed/pod, +/obj/item/bedsheet, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "Gm" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -4961,11 +5177,10 @@ /turf/open/floor/plasteel, /area/outpost/crew/janitor) "Gv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/toy/plush/spider, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/structure/table, +/obj/effect/turf_decal/floordetail/tiled, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "GB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -5260,6 +5475,21 @@ }, /turf/open/floor/plasteel, /area/outpost/hallway/port) +"Ia" = ( +/obj/item/radio/intercom/wideband/table{ + dir = 8; + pixel_y = 19; + pixel_x = -6 + }, +/obj/machinery/computer/security{ + dir = 4; + layer = 3.1; + pixel_y = 5; + pixel_x = -5 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "Ic" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/patterned/cargo_one, @@ -5414,6 +5644,13 @@ /obj/effect/turf_decal/corner/opaque/neutral/diagonal, /turf/open/floor/plasteel, /area/outpost/vacant_rooms) +"IT" = ( +/obj/machinery/camera/autoname, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/outpost/security) "IU" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5474,6 +5711,9 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/tech, /area/outpost/vacant_rooms) "Jq" = ( @@ -5584,6 +5824,12 @@ /obj/effect/turf_decal/corner/opaque/neutral, /turf/open/floor/plasteel, /area/outpost/hallway/central) +"Ki" = ( +/obj/machinery/door/poddoor/shutters/indestructible{ + dir = 4 + }, +/turf/closed/indestructible/rock, +/area/outpost/external) "Kl" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/structure/cable/yellow{ @@ -5794,11 +6040,15 @@ /turf/open/floor/plasteel/tech, /area/outpost/cargo) "Le" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/corner/opaque/red{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/plasteel, +/area/outpost/security) "Lg" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/machinery/airalarm/directional/south, @@ -5812,10 +6062,8 @@ /turf/open/floor/plasteel, /area/outpost/hallway/port) "Lh" = ( -/obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/turf/closed/indestructible/reinforced, +/area/outpost/security) "Li" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/green, @@ -5885,6 +6133,13 @@ /obj/structure/spider/stickyweb, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"LJ" = ( +/obj/machinery/computer/helm/viewscreen/directional/north, +/obj/structure/chair/comfy{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "LK" = ( /obj/structure/flora/junglebush/c, /turf/open/floor/grass/ship/jungle, @@ -5958,11 +6213,12 @@ /turf/open/floor/plating, /area/outpost/maintenance/fore) "Me" = ( -/obj/structure/grille/indestructable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) +"Mk" = ( +/obj/machinery/newscaster/directional/south, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "Ml" = ( /obj/effect/turf_decal/corner/opaque/neutral/diagonal, /obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ @@ -6098,6 +6354,10 @@ "Nc" = ( /turf/closed/indestructible/rock, /area/outpost/hallway/central) +"Nd" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "Ne" = ( /obj/item/radio/intercom/directional/north, /obj/structure/disposalpipe/segment{ @@ -6123,16 +6383,11 @@ /turf/open/floor/plasteel/dark, /area/outpost/cargo/office) "No" = ( -/obj/structure/grille/indestructable, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/structure/table, +/obj/effect/spawner/lootdrop/donut/jelly, +/obj/effect/turf_decal/floordetail/tiled, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "Nu" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/structure/cable/yellow{ @@ -6144,6 +6399,9 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, /turf/open/floor/plasteel, /area/outpost/hallway/port) "Nv" = ( @@ -6465,6 +6723,20 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/carpet/green, /area/outpost/crew/bar) +"PY" = ( +/obj/machinery/door/airlock/security/brig{ + req_access = list("101") + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/outpost/security) "Qa" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/machinery/newscaster/directional/north, @@ -6528,6 +6800,12 @@ /obj/item/trash/semki, /turf/open/floor/plating/asteroid, /area/outpost/external) +"Qr" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/outpost/security) "Qv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 6 @@ -6682,6 +6960,10 @@ /obj/item/trash/semki, /turf/open/floor/plating/asteroid, /area/outpost/external) +"Ro" = ( +/obj/structure/falsewall/reinforced, +/turf/closed/indestructible/reinforced, +/area/outpost/maintenance/fore) "Rr" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -6804,6 +7086,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel, /area/outpost/storage) +"RM" = ( +/obj/effect/turf_decal/corner/opaque/red{ + dir = 1 + }, +/obj/effect/landmark/ert_outpost_spawn, +/turf/open/floor/plasteel, +/area/outpost/security) "RO" = ( /obj/structure/railing{ dir = 6 @@ -6925,6 +7214,9 @@ /obj/effect/turf_decal/corner/opaque/neutral{ dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/outpost/hallway/port) "Sr" = ( @@ -6986,11 +7278,20 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/outpost/crew/bar) +"SO" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/outpost/security) "SS" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/ert_outpost_spawn, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/outpost/security) "SV" = ( /obj/structure/flora/grass/jungle, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, @@ -7025,6 +7326,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/outpost/crew/library) +"Te" = ( +/obj/effect/turf_decal/spline/fancy/opaque/grey, +/obj/effect/turf_decal/spline/fancy/opaque/grey{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/outpost/security) "Tg" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/donut, @@ -7275,7 +7583,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/outpost/vacant_rooms/office) "UG" = ( /obj/structure/cable/yellow{ @@ -7573,6 +7881,20 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"WJ" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/security/brig{ + req_access = list("101") + }, +/turf/open/floor/plasteel/tech, +/area/outpost/security) "WM" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -7718,6 +8040,9 @@ dir = 6 }, /obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/outpost/vacant_rooms) "Xz" = ( @@ -7809,10 +8134,13 @@ /turf/open/floor/plating, /area/outpost/maintenance/central) "XV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/outpost/vacant_rooms) +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/fakelattice, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/elevatorshaft, +/area/outpost/security) "XW" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -7869,6 +8197,9 @@ /obj/effect/turf_decal/corner/opaque/black{ dir = 8 }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/outpost/hallway/port) "Yt" = ( @@ -8001,6 +8332,13 @@ }, /turf/open/floor/plasteel, /area/outpost/vacant_rooms/office) +"Zl" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel, +/area/outpost/security) "Zm" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/effect/turf_decal/corner/opaque/neutral, @@ -12824,7 +13162,7 @@ HD HD hq dr -qp +rz AH hq hq @@ -14306,8 +14644,8 @@ Rg NK NK NK -NK -PS +Ro +za NK NK NK @@ -14669,7 +15007,7 @@ HD HD NK NK -NK +YL NK NK NK @@ -14791,9 +15129,9 @@ HD HD HD HD -HD -HD -HD +hq +hq +hq HD NK ds @@ -14914,9 +15252,9 @@ HD HD HD HD -HD -HD -HD +hq +qp +hq NK NK NK @@ -15037,9 +15375,9 @@ HD HD HD HD -HD -HD -HD +hq +hq +hq NK mV On @@ -15160,9 +15498,9 @@ HD HD HD HD -HD -HD -HD +Ha +hq +hq NK Wc Vx @@ -15283,9 +15621,9 @@ HD HD HD HD -HD -HD -HD +hq +hq +hq NK vH pp @@ -15404,11 +15742,11 @@ HD HD mC mC -mC -HD HD HD HD +hq +qp NK NK NK @@ -15527,15 +15865,15 @@ HD mC mC mC -mC -mC -HD -HD -HD -HD HD HD HD +hq +hq +hq +hq +hq +hq NK Pe Hv @@ -15650,16 +15988,16 @@ mC mC mC mC -mC -mC -mC HD HD HD HD -HD -HD -NK +hq +hq +hq +Ha +hq +YL FS Hv Wa @@ -15773,13 +16111,13 @@ mC mC mC mC -mC -mC -mC -mC HD HD HD +HD +HD +HD +hq Uw Uw Uw @@ -15897,8 +16235,8 @@ mC mC mC mC -mC -mC +HD +HD HD HD HD @@ -17647,20 +17985,20 @@ xk wL pS Am -wL -wL -wL -wL -wL -dL -wL -LL -LL -LL -LL -LL -LL -LL +Lh +Lh +Lh +Lh +fh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh +Lh HD HD HD @@ -17768,22 +18106,22 @@ rp gt ev wL -wL -wL -wL -Le +Lh +Lh +Lh Le +uI Bc mW xc -wL -HD -HD -HD -HD -HD -HD -HD +Lh +BO +Ia +Lh +zD +Ff +By +Lh HD HD HD @@ -17892,18 +18230,21 @@ hX lb Rx lY -Le +uJ Lh -Le +Zl fZ Gv -wL -wL -wL -HD -HD -HD -HD +SS +bW +Lh +LJ +Mk +Lh +cu +xc +By +Lh HD HD HD @@ -17952,9 +18293,6 @@ mC mC mC mC -mC -mC -mC "} (81,1,1) = {" mC @@ -18016,17 +18354,21 @@ wL wL Bd Me -wL -wL -wL +PY +wW +fZ No -wL -HD -HD -HD -HD -HD -HD +SS +cX +WJ +cX +cX +oW +Qr +xc +Lh +Lh +em HD HD HD @@ -18074,10 +18416,6 @@ mC mC mC mC -mC -mC -mC -mC "} (82,1,1) = {" mC @@ -18137,17 +18475,23 @@ wL wL HD wL +DI XV -XV -qW -wL +Lh +gg Do -SS -wL -HD -HD -HD -HD +RM +Do +Do +Lh +dL +wE +Lh +oQ +ob +qW +Bo +Lh HD HD HD @@ -18195,12 +18539,6 @@ mC mC mC mC -mC -mC -mC -mC -mC -mC "} (83,1,1) = {" mC @@ -18260,28 +18598,28 @@ HD HD HD wL -wL -wL -wL -wL -wL -wL -wL -HD -HD -HD -HD -HD -HD -HD -mC -mC -mC -mC -mC +Lh +Lh +Lh +Lh +qW +qW +qW +Lh +Lh +Lh +Lh +Lh +IT +ob +qW +Me +qW mC mC mC +HD +HD mC mC mC @@ -18387,25 +18725,25 @@ HD HD HD HD +mC +mC +mC HD HD HD HD -HD -HD -HD -HD -mC -mC -mC -mC -mC -mC -mC +Lh +SO +Te +lt +Nd +qW mC mC mC mC +HD +HD mC mC mC @@ -18509,26 +18847,26 @@ HD HD HD HD -HD -HD -HD -HD -HD -HD -mC -mC -mC -mC -mC -mC mC mC mC mC mC +HD +HD +HD +Lh +Fn +qW +Lh +Lh +Lh +HD mC mC mC +HD +HD mC mC mC @@ -18632,26 +18970,26 @@ HD HD HD HD -HD -HD -HD -mC -mC -mC -mC -mC -mC -mC -mC mC mC mC mC mC +HD +HD +HD +Lh +gU +Gl +Lh +HD +HD +HD mC mC mC mC +HD mC mC mC @@ -18751,8 +19089,8 @@ mC mC HD HD -mC -mC +HD +HD HD HD HD @@ -18760,17 +19098,17 @@ mC mC mC mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC +HD +HD +HD +Lh +qW +qW +Lh +HD +HD +HD +HD mC mC mC @@ -18874,26 +19212,26 @@ mC mC mC mC +HD +HD +HD +HD +HD mC mC mC mC +HD +HD +HD mC mC mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC +HD +HD +HD +HD +HD mC mC mC @@ -18996,27 +19334,27 @@ mC mC mC mC +HD +HD +HD +HD +HD +HD mC mC mC +HD +HD +Ki +HD mC mC mC mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC +HD +HD +HD +HD mC mC mC @@ -19118,21 +19456,21 @@ mC mC mC mC +HD +HD +HD +HD +HD +HD +HD +HD mC mC mC mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC -mC +HD +HD +HD mC mC mC @@ -19241,6 +19579,11 @@ mC mC mC mC +HD +HD +HD +HD +HD mC mC mC @@ -19249,14 +19592,9 @@ mC mC mC mC -mC -mC -mC -mC -mC -mC -mC -mC +HD +HD +HD mC mC mC @@ -19364,6 +19702,10 @@ mC mC mC mC +HD +HD +HD +HD mC mC mC @@ -19374,12 +19716,8 @@ mC mC mC mC -mC -mC -mC -mC -mC -mC +HD +HD mC mC mC @@ -19487,10 +19825,10 @@ mC mC mC mC -mC -mC -mC -mC +HD +HD +HD +HD mC mC mC @@ -19610,9 +19948,9 @@ mC mC mC mC -mC -mC -mC +HD +HD +HD mC mC mC @@ -19732,10 +20070,10 @@ mC mC mC mC -mC -mC -mC -mC +HD +HD +HD +HD mC mC mC @@ -19855,10 +20193,10 @@ mC mC mC mC -mC -mC -mC -mC +HD +HD +HD +HD mC mC mC @@ -19978,9 +20316,9 @@ mC mC mC mC -mC -mC -mC +HD +HD +HD mC mC mC @@ -20101,9 +20439,9 @@ mC mC mC mC -mC -mC -mC +HD +HD +HD mC mC mC @@ -20224,7 +20562,7 @@ mC mC mC mC -mC +HD mC mC mC diff --git a/_maps/outpost/nanotrasen_asteroid.dmm b/_maps/outpost/nanotrasen_asteroid.dmm index c2d88fd69ea2..5af450ce3e0d 100644 --- a/_maps/outpost/nanotrasen_asteroid.dmm +++ b/_maps/outpost/nanotrasen_asteroid.dmm @@ -868,6 +868,7 @@ /obj/item/radio/intercom/directional/north{ pixel_x = -3 }, +/obj/effect/landmark/ert_outpost_spawn, /turf/open/floor/plasteel/tech, /area/outpost/security/armory) "dv" = ( @@ -1723,6 +1724,7 @@ /obj/effect/turf_decal/industrial/caution{ pixel_x = 17 }, +/obj/effect/landmark/ert_outpost_spawn, /turf/open/floor/plasteel/tech/grid, /area/outpost/security/armory) "gx" = ( @@ -2094,6 +2096,7 @@ /obj/effect/turf_decal/techfloor{ dir = 8 }, +/obj/effect/landmark/ert_outpost_spawn, /turf/open/floor/plasteel/tech/grid, /area/outpost/security/armory) "hW" = ( @@ -3511,6 +3514,7 @@ req_access_txt = "101"; pixel_x = -3 }, +/obj/effect/landmark/ert_outpost_spawn, /turf/open/floor/plasteel/tech, /area/outpost/security/armory) "mP" = ( @@ -3666,6 +3670,7 @@ /obj/effect/turf_decal/techfloor{ dir = 4 }, +/obj/effect/landmark/ert_outpost_spawn, /turf/open/floor/plasteel/tech/grid, /area/outpost/security/armory) "nz" = ( @@ -10238,6 +10243,7 @@ dir = 4 }, /obj/machinery/airalarm/directional/east, +/obj/effect/landmark/ert_outpost_spawn, /turf/open/floor/plasteel/tech, /area/outpost/security/armory) "JK" = ( @@ -10709,6 +10715,7 @@ dir = 8 }, /obj/machinery/light/directional/west, +/obj/effect/landmark/ert_outpost_spawn, /turf/open/floor/plasteel/tech, /area/outpost/security/armory) "Lv" = ( diff --git a/_maps/shuttles/subshuttles/Subshuttle Catalog.txt b/_maps/shuttles/subshuttles/Subshuttle Catalog.txt index fb9dc1591234..3424b7605354 100644 --- a/_maps/shuttles/subshuttles/Subshuttle Catalog.txt +++ b/_maps/shuttles/subshuttles/Subshuttle Catalog.txt @@ -37,3 +37,5 @@ Name = "Falcon Dropship" Size = "13x7" Purpose = "A Nanotrasen dropship, primarily used by Heron-Class carriers." File Path = "_maps\shuttles\subshuttles\nanotrasen_falcon.dmm" + + diff --git a/_maps/shuttles/subshuttles/frontiersmen_gut.dmm b/_maps/shuttles/subshuttles/frontiersmen_gut.dmm index cf1571f9d7d4..3b05c2224080 100644 --- a/_maps/shuttles/subshuttles/frontiersmen_gut.dmm +++ b/_maps/shuttles/subshuttles/frontiersmen_gut.dmm @@ -247,6 +247,7 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel/tech, /area/ship/storage) "qh" = ( @@ -341,6 +342,7 @@ }, /obj/machinery/light/directional/east, /obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel/tech, /area/ship/storage) "ue" = ( @@ -569,6 +571,7 @@ color = "#808080" }, /obj/machinery/light/directional/east, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel/tech, /area/ship/storage) "RY" = ( @@ -625,6 +628,7 @@ dir = 8; color = "#808080" }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel/tech, /area/ship/storage) "UA" = ( @@ -686,6 +690,7 @@ dir = 1; name = "tactical chair" }, +/obj/effect/landmark/ert_shuttle_brief_spawn, /turf/open/floor/plasteel/telecomms_floor, /area/ship/storage) diff --git a/_maps/shuttles/subshuttles/independent_kunai.dmm b/_maps/shuttles/subshuttles/independent_kunai.dmm index cdc0efe873f5..e1975d0a1737 100644 --- a/_maps/shuttles/subshuttles/independent_kunai.dmm +++ b/_maps/shuttles/subshuttles/independent_kunai.dmm @@ -99,6 +99,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 1 }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/engine/hull/interior, /area/ship/storage) "al" = ( @@ -165,6 +166,7 @@ /area/ship/storage) "bY" = ( /obj/structure/chair/comfy/shuttle, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/engine/hull/interior, /area/ship/storage) "cF" = ( @@ -333,6 +335,17 @@ /obj/structure/grille, /turf/open/floor/engine/hull/reinforced, /area/ship/external) +"pk" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/landmark/ert_shuttle_brief_spawn, +/turf/open/floor/plasteel/dark, +/area/ship/storage) "qn" = ( /obj/machinery/power/terminal, /obj/structure/cable, @@ -391,6 +404,7 @@ dir = 1 }, /obj/machinery/light/small/directional/south, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/engine/hull/interior, /area/ship/storage) "DP" = ( @@ -493,6 +507,7 @@ "SE" = ( /obj/structure/chair/comfy/shuttle, /obj/machinery/light/small/directional/north, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/engine/hull/interior, /area/ship/storage) "Wx" = ( @@ -572,7 +587,7 @@ gs Pq hJ bG -RO +pk bG hJ Pq diff --git a/_maps/shuttles/subshuttles/independent_sugarcube.dmm b/_maps/shuttles/subshuttles/independent_sugarcube.dmm index 865e0da78091..11a8de916cd6 100644 --- a/_maps/shuttles/subshuttles/independent_sugarcube.dmm +++ b/_maps/shuttles/subshuttles/independent_sugarcube.dmm @@ -79,6 +79,7 @@ pixel_y = 23; pixel_x = -13 }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plating, /area/ship/storage) "j" = ( @@ -86,6 +87,7 @@ dir = 4 }, /obj/structure/window/reinforced/spawner/west, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plating, /area/ship/storage) "k" = ( @@ -95,6 +97,7 @@ /obj/structure/window/reinforced/spawner/west, /obj/structure/window/reinforced/spawner/east, /obj/machinery/light/directional/north, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plating, /area/ship/storage) "l" = ( @@ -107,6 +110,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 4 }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plating, /area/ship/storage) "n" = ( @@ -147,6 +151,7 @@ }, /obj/structure/window/reinforced/spawner/west, /obj/structure/window/reinforced/spawner/east, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plating, /area/ship/storage) "s" = ( @@ -223,6 +228,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plating, /area/ship/storage) "A" = ( @@ -274,6 +280,7 @@ }, /obj/structure/window/reinforced/spawner/west, /obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plating, /area/ship/storage) "G" = ( @@ -283,6 +290,7 @@ /obj/structure/window/reinforced/spawner/west, /obj/structure/window/reinforced/spawner/east, /obj/machinery/light/directional/south, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plating, /area/ship/storage) "H" = ( @@ -294,6 +302,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 8 }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plating, /area/ship/storage) "J" = ( @@ -308,6 +317,10 @@ "L" = ( /turf/closed/wall, /area/ship/engineering) +"T" = ( +/obj/effect/landmark/ert_shuttle_brief_spawn, +/turf/open/floor/plating, +/area/ship/storage) "Z" = ( /turf/closed/wall/rust, /area/ship/engineering) @@ -380,7 +393,7 @@ b d l l -y +T l J "} diff --git a/_maps/shuttles/subshuttles/nanotrasen_falcon.dmm b/_maps/shuttles/subshuttles/nanotrasen_falcon.dmm index 566469a7e219..e88bfc4bd5f2 100644 --- a/_maps/shuttles/subshuttles/nanotrasen_falcon.dmm +++ b/_maps/shuttles/subshuttles/nanotrasen_falcon.dmm @@ -36,6 +36,7 @@ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel, /area/ship/storage/eva) "e" = ( @@ -125,6 +126,7 @@ dir = 4; pixel_y = 8 }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel/telecomms_floor, /area/ship/storage/eva) "m" = ( @@ -146,6 +148,7 @@ /obj/machinery/vending/wallmed{ pixel_y = -28 }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel, /area/ship/storage/eva) "p" = ( @@ -174,6 +177,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel, /area/ship/storage/eva) "s" = ( @@ -307,6 +311,7 @@ /obj/effect/turf_decal/techfloor{ dir = 8 }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel, /area/ship/storage/eva) "C" = ( @@ -379,6 +384,7 @@ /obj/effect/turf_decal/techfloor{ dir = 4 }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel, /area/ship/storage/eva) "J" = ( @@ -394,6 +400,7 @@ dir = 4 }, /obj/item/radio/intercom/directional/north, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel, /area/ship/storage/eva) "L" = ( @@ -440,6 +447,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/effect/landmark/ert_shuttle_brief_spawn, /turf/open/floor/plasteel/patterned/brushed, /area/ship/storage/eva) "N" = ( @@ -535,6 +543,7 @@ dir = 8; pixel_y = 16 }, +/obj/effect/landmark/ert_shuttle_spawn, /turf/open/floor/plasteel/telecomms_floor, /area/ship/storage/eva) "U" = ( diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 7f1e2693f893..ff4237d1e892 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -34,6 +34,7 @@ GLOBAL_LIST_EMPTY(blobstart) //blobs, santa, respawning devils GLOBAL_LIST_EMPTY(secequipment) //sec equipment lockers that scale with the number of sec players GLOBAL_LIST_EMPTY(deathsquadspawn) GLOBAL_LIST_EMPTY(emergencyresponseteamspawn) +GLOBAL_LIST_EMPTY(emergencyresponseteam_outpostspawn) GLOBAL_LIST_EMPTY(ruin_landmarks) GLOBAL_LIST_EMPTY(stationroom_landmarks) //List of all spawns for stationrooms diff --git a/code/datums/browser.dm b/code/datums/browser.dm index c1ce6f43e99b..6aba94212699 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -399,7 +399,7 @@ if ("color") settings["mainsettings"][setting]["value"] = input(user, "Enter new value for [settings["mainsettings"][setting]["desc"]]", "Enter new value for [settings["mainsettings"][setting]["desc"]]", settings["mainsettings"][setting]["value"]) as color if ("boolean") - settings["mainsettings"][setting]["value"] = input(user, "[settings["mainsettings"][setting]["desc"]]?") in list("Yes","No") + settings["mainsettings"][setting]["value"] = (settings["mainsettings"][setting]["value"] == "Yes") ? "No" : "Yes" if ("ckey") settings["mainsettings"][setting]["value"] = input(user, "[settings["mainsettings"][setting]["desc"]]?") in list("none") + GLOB.directory if (settings["mainsettings"][setting]["callback"]) diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 8bb5f0e6e35a..0c0eb282e484 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -1,15 +1,29 @@ /datum/ert var/mobtype = /mob/living/carbon/human var/team = /datum/team/ert - var/opendoors = TRUE + var/opendoors = FALSE var/leader_role = /datum/antagonist/ert/commander - var/enforce_human = TRUE + var/enforce_human = FALSE var/roles = list(/datum/antagonist/ert/security, /datum/antagonist/ert/medic, /datum/antagonist/ert/engineer) //List of possible roles to be assigned to ERT members. var/rename_team var/code var/mission = "Assist your employers in achieving their goals. Protect corporate assets." var/teamsize = 5 var/polldesc + /// If TRUE, gives the team members "[role] [random last name]" style names + var/random_names = FALSE + /// If TRUE, the admin who created the response team will be spawned in the briefing room in their preferred briefing outfit (assuming they're a ghost) + var/spawn_admin = FALSE + /// If TRUE, we try and pick one of the most experienced players who volunteered to fill the leader slot + var/leader_experience = TRUE + /// A custom map template to spawn the ERT at. If use_custom_shuttle is FALSE, the ERT will spawn on foot. By default, a Kunai-Class. + var/datum/map_template/ert_template = /datum/map_template/shuttle/subshuttles/kunai + /// If we should actually _use_ the ert_template custom shuttle + var/use_custom_shuttle = TRUE + /// If TRUE, the ERT will spawn at the outpost. If use_custom_shuttle is also TRUE, the shuttle will be docked at the outpost + var/spawn_at_outpost = TRUE + +// Nanotrasen /datum/ert/New() if (!polldesc) @@ -46,20 +60,16 @@ code = "Green" teamsize = 1 opendoors = FALSE - leader_role = /datum/antagonist/official - roles = list(/datum/antagonist/official) + leader_role = /datum/antagonist/ert/official + roles = list(/datum/antagonist/ert/official) rename_team = "CentCom Officials" polldesc = "a CentCom Official" + random_names = FALSE + leader_experience = FALSE + spawn_at_outpost = FALSE /datum/ert/centcom_official/New() - mission = "Conduct a routine review of [station_name()]." - -/datum/ert/inquisition - roles = list(/datum/antagonist/ert/chaplain/inquisitor, /datum/antagonist/ert/security/inquisitor, /datum/antagonist/ert/medic/inquisitor) - leader_role = /datum/antagonist/ert/commander/inquisitor - rename_team = "Inquisition" - mission = "Destroy any traces of paranormal activity within the deployment site." - polldesc = "a Nanotrasen paranormal response team" + mission = "Conduct a routine review of [station_name()]'s vessels." /datum/ert/janitor roles = list(/datum/antagonist/ert/janitor, /datum/antagonist/ert/janitor/heavy) @@ -75,6 +85,170 @@ leader_role = /datum/antagonist/ert/intern/leader teamsize = 7 opendoors = FALSE + spawn_at_outpost = FALSE rename_team = "Horde of Interns" mission = "Assist in conflict resolution." polldesc = "an unpaid internship opportunity with Nanotrasen" + +/datum/ert/intern/unarmed + roles = list(/datum/antagonist/ert/intern/unarmed) + leader_role = /datum/antagonist/ert/intern/leader/unarmed + rename_team = "Unarmed Horde of Interns" + +/datum/ert/loss_prevention + code = "Light Blue" + teamsize = 4 + opendoors = FALSE + leader_role = /datum/antagonist/ert/lp/lieutenant + roles = list(/datum/antagonist/ert/lp, /datum/antagonist/ert/lp/medic, /datum/antagonist/ert/lp/engineer) + rename_team = "Loss Prevention Team" + polldesc = "a NanoTrasen loss prevention team" + +// Inteq + +/datum/ert/inteq + teamsize = 4 + opendoors = FALSE + leader_role = /datum/antagonist/ert/inteq/leader + roles = list(/datum/antagonist/ert/inteq) + mission = "Carry out your contract." + rename_team = "Generic Inteq Team" + polldesc = "an Inteq emergency team" + +// SolGov + +/datum/ert/solgov + teamsize = 4 + opendoors = FALSE + leader_role = /datum/antagonist/ert/solgov + roles = list(/datum/antagonist/ert/solgov) + mission = "Intervene in Solarian interests." + rename_team = "SolGov Sonnensoldner Team" + polldesc = "a SolGov mercenary team" + +/datum/ert/solgov/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/official/solgov + roles = list(/datum/antagonist/ert/official/solgov) + rename_team = "SolGov Inspector" + polldesc = "a solarian inspector" + spawn_at_outpost = FALSE + +/datum/ert/solgov/inspector/New() + mission = "Conduct a routine review on [station_name()]'s vessels." + +// Minutemen + +/datum/ert/minutemen + teamsize = 4 + opendoors = FALSE + leader_role = /datum/antagonist/ert/minutemen/leader + roles = list(/datum/antagonist/ert/minutemen) + mission = "Keep the peace in sector affairs" + rename_team = "Generic Minutemen Team" + polldesc = "a Minutemen emergency team" + random_names = TRUE + + +/datum/ert/minutemen/bard + leader_role = /datum/antagonist/ert/minutemen/bard/leader + roles = list(/datum/antagonist/ert/minutemen/bard) + rename_team = "Minutemen BARD Team" + polldesc = "a Minutemen biohazard removal team" + +/datum/ert/minutemen/riot + teamsize = 6 + leader_role = /datum/antagonist/ert/minutemen/riot/leader + roles = list(/datum/antagonist/ert/minutemen/riot) + rename_team = "Minutemen Riot Control Team" + polldesc = "a Minutemen riot control team" + +/datum/ert/minutemen/piratehunters + leader_role = /datum/antagonist/ert/minutemen/piratehunters/leader + roles = list(/datum/antagonist/ert/minutemen/piratehunters) + mission = "Eliminate pirate presence within the sector." + rename_team = "Minutemen Pirate Hunter Team" + polldesc = "a fireteam of Minutemen pirate hunters" + +/datum/ert/minutemen/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/official/minutemen + roles = list(/datum/antagonist/ert/official/minutemen) + rename_team = "Minutemen GOLD Inspector" + polldesc = "a Minutemen inspector" + +// Syndicate + +/datum/ert/syndicate + teamsize = 4 + opendoors = FALSE + leader_role = /datum/antagonist/ert/syndicate/leader + roles = list(/datum/antagonist/ert/syndicate) + mission = "Serve the interests of the Syndicate." + rename_team = "Generic Syndicate Team" + polldesc = "a Syndicate emergency team" + spawn_at_outpost = FALSE + +/datum/ert/syndicate/gorlex + leader_role = /datum/antagonist/ert/syndicate/gorlex/leader + roles = list(/datum/antagonist/ert/syndicate/gorlex, /datum/antagonist/ert/syndicate/gorlex/pointman, /datum/antagonist/ert/syndicate/gorlex/medic, /datum/antagonist/ert/syndicate/gorlex/sniper) + mission = "Serve the interests of the 2nd Battlegroup." + rename_team = "2nd Battlegroup Squad" + polldesc = "a loyalist Gorlex squad" + +/datum/ert/syndicate/cybersun + leader_role = /datum/antagonist/ert/syndicate/cybersun/leader + roles = list(/datum/antagonist/ert/syndicate/cybersun) + mission = "Serve the interests of CyberSun." + rename_team = "Cybersun Commando Team" + polldesc = "a Cybersun Commando team" + +/datum/ert/syndicate/cybersun/medic + leader_role = /datum/antagonist/ert/syndicate/cybersun/medic/leader + roles = list(/datum/antagonist/ert/syndicate/cybersun/medic) + mission = "Assist CyberSun clients." + rename_team = "Cybersun Medical Intervention Team" + polldesc = "a Cybersun paramedic team" + +// Frontiersmen +/datum/ert/frontier + teamsize = 4 + opendoors = FALSE + leader_role = /datum/antagonist/ert/frontier/leader + roles = list(/datum/antagonist/ert/frontier) + rename_team = "Generic Frontiersmen Team" + mission = "Pillage in the name of the Frontiersmen." + polldesc = "an armed group of pirates" + random_names = TRUE + leader_experience = FALSE + spawn_at_outpost = FALSE + ert_template = /datum/map_template/shuttle/subshuttles/sugarcube + +/datum/ert/frontier/assault + leader_role = /datum/antagonist/ert/frontier/leader + roles = list(/datum/antagonist/ert/frontier, /datum/antagonist/ert/frontier/medic, /datum/antagonist/ert/frontier/engineer) + rename_team = "Assault Frontiersmen Team" + polldesc = "a well armed squad of pirates" + ert_template = /datum/map_template/shuttle/subshuttles/frontiersmen_gut + +/datum/ert/independent + teamsize = 3 + opendoors = FALSE + leader_role = /datum/antagonist/ert/independent + roles = list(/datum/antagonist/ert/independent) + rename_team = "Security Independent Team" + polldesc = "an independent security team" + +/datum/ert/independent/emt + teamsize = 4 + leader_role = /datum/antagonist/ert/independent/emt + roles = list(/datum/antagonist/ert/independent/emt) + rename_team = "Medical Independent Team" + polldesc = "an independent medical response team" + +/datum/ert/independent/firefighter + teamsize = 5 + leader_role = /datum/antagonist/ert/independent/firefighter/leader + roles = list(/datum/antagonist/ert/independent/firefighter, /datum/antagonist/ert/independent/firefighter/medic) + rename_team = "Independent Firefighter Team" + polldesc = "an independent firefighting team" diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index c294d25dee10..35e8ff81a580 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -365,4 +365,3 @@ file_name = "nanotrasen_falcon" name = "Falcon Dropship" prefix = "NTSV" - diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index 218575737882..e8d1aca60520 100644 --- a/code/game/objects/effects/contraband.dm +++ b/code/game/objects/effects/contraband.dm @@ -963,13 +963,13 @@ icon_state = "poster-cmm_enlist" /obj/structure/sign/poster/minutemen/bard - name = "CMM BARD" - desc = "A poster that was made by soldiers that attemps to recruit people in the BARD depecting a \"Sargent Clues\" mowing down waves and waves of xenofauna, and them exploding into blood. Somethinng tells you that service is a lot less intresting than this." + name = "CMM-BARD" + desc = "A poster made by soldiers to recruit people into the BARD, depecting a \"Sergeant Clues\" mowing down waves and waves of xenofauna, and them exploding into blood. Something tells you that service is a lot less interesting than this." icon_state = "poster-cmm_bard" /obj/structure/sign/poster/minutemen/gold - name = "CMM GOLD" - desc = "A poster listing job positions open in CMM GOLD and asking for applications, listing important but unintresting benifits like health insurance and such." + name = "CMM-GOLD" + desc = "A poster listing job positions open in the CMM GOLD and asking for applications, listing important but uninteresting benifits like health insurance and such." icon_state = "poster-cmm_gold" /obj/structure/sign/poster/minutemen/lunatown diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 63ff9b794ce4..00dfda5879f5 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -344,7 +344,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) return INITIALIZE_HINT_QDEL /obj/effect/landmark/ert_spawn - name = "Emergencyresponseteam" + name = "Emergency response team spawn" icon_state = "ert_spawn" /obj/effect/landmark/ert_spawn/Initialize(mapload) @@ -352,6 +352,23 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) GLOB.emergencyresponseteamspawn += loc return INITIALIZE_HINT_QDEL +/obj/effect/landmark/ert_outpost_spawn + name = "Emergency response team outpost spawn" + icon_state = "ert_spawn" + +/obj/effect/landmark/ert_outpost_spawn/Initialize(mapload) + ..() + GLOB.emergencyresponseteam_outpostspawn += loc + return INITIALIZE_HINT_QDEL + +/obj/effect/landmark/ert_shuttle_spawn + name = "Emergency response team shuttle spawn" + icon_state = "ert_spawn" + +/obj/effect/landmark/ert_shuttle_brief_spawn + name = "Emergency response team briefing officer spawn" + icon_state = "ert_brief_spawn" + //ninja energy nets teleport victims here /obj/effect/landmark/holding_facility name = "Holding Facility" diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 05b02e77f8b1..fba5fd1b4fc7 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -303,6 +303,11 @@ var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 6 +/obj/item/storage/belt/security/webbing/bulldog/PopulateContents() + . = ..() + for(var/i in 1 to 3) + new /obj/item/ammo_box/magazine/m12g(src) + /obj/item/storage/belt/mining name = "explorer's webbing" desc = "A versatile chest rig, cherished by miners and hunters alike." @@ -434,22 +439,40 @@ var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_w_class = WEIGHT_CLASS_SMALL +/obj/item/storage/belt/military/c20r/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/smgm45(src) + +/obj/item/storage/belt/military/assault/m90/PopulateContents() + . = ..() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/m556(src) + /obj/item/storage/belt/military/minutemen name = "minutemen tactical webbing" desc = "A set of tactical webbing worn by the Colonial Minutemen of the frontier." icon_state = "cmmwebbing" item_state = "cmmwebbing" -/obj/item/storage/belt/military/minutemen/loaded/PopulateContents() - for(var/i in 1 to 7) +/obj/item/storage/belt/military/minutemen/p16/PopulateContents() + for(var/i in 1 to 4) new /obj/item/ammo_box/magazine/p16(src) +/obj/item/storage/belt/military/minutemen/gal/PopulateContents() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/gal(src) + +/obj/item/storage/belt/military/minutemen/cm5/PopulateContents() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/smgm9mm(src) + /obj/item/storage/belt/military/snack name = "tactical snack rig" /obj/item/storage/belt/military/snack/Initialize() . = ..() - var/sponsor = pick("DonkCo", "Waffle Co.", "Roffle Co.", "Gorlax Marauders", "Tiger Cooperative") + var/sponsor = pick("Donk! Co.", "CyberSun") desc = "A set of snack-tical webbing worn by athletes of the [sponsor] VR sports division." /obj/item/storage/belt/military/snack/ComponentInitialize() @@ -826,6 +849,11 @@ item_state = "inteq_webbing" supports_variations = VOX_VARIATION +/obj/item/storage/belt/security/webbing/inteq/ak47/PopulateContents() + . = ..() + for(var/i in 1 to 7) + new /obj/item/ammo_box/magazine/ak47(src) + /obj/item/storage/belt/security/webbing/inteq/alt name = "inteq drop pouch harness" desc = "A harness with a bunch of pouches attached to them emblazoned in the colors of the IRMG, can hold security gear." diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a4a70c00e429..bb46d7250b0b 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -125,13 +125,13 @@ log_admin("[key_name(usr)] spawned a blob with base resource gain [strength].") new/datum/round_event/ghost_role/blob(TRUE, strength) if("centcom") - message_admins("[key_name(usr)] is creating a CentCom response team...") + message_admins("[key_name(usr)] is creating a response team...") if(src.makeEmergencyresponseteam()) - message_admins("[key_name(usr)] created a CentCom response team.") - log_admin("[key_name(usr)] created a CentCom response team.") + message_admins("[key_name(usr)] created a response team.") + log_admin("[key_name(usr)] created a response team.") else - message_admins("[key_name_admin(usr)] tried to create a CentCom response team. Unfortunately, there were not enough candidates available.") - log_admin("[key_name(usr)] failed to create a CentCom response team.") + message_admins("[key_name_admin(usr)] tried to create a response team. Unfortunately, there were not enough candidates available.") + log_admin("[key_name(usr)] failed to create a response team.") if("abductors") message_admins("[key_name(usr)] is creating an abductor team...") if(src.makeAbductorTeam()) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 5b1e0e8ad082..6c303cddf060 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -1,3 +1,6 @@ +/// If we spawn an ERT with the "choose experienced leader" option, select the leader from the top X playtimes +#define ERT_EXPERIENCED_LEADER_CHOOSE_TOP 3 + /client/proc/one_click_antag() set name = "Create Antagonist" set desc = "Auto-create an antagonist of your choice" @@ -17,7 +20,7 @@ Make Blob
Make Wizard (Requires Ghosts)
Make Nuke Team (Requires Ghosts)
- Make CentCom Response Team (Requires Ghosts)
+ Make Response Team (Requires Ghosts)
Make Abductor Team (Requires Ghosts)
Make Revenant (Requires Ghost)
"} @@ -218,6 +221,11 @@ .["mainsettings"]["mission"]["value"] = newtemplate.mission .["mainsettings"]["polldesc"]["value"] = newtemplate.polldesc .["mainsettings"]["open_armory"]["value"] = newtemplate.opendoors ? "Yes" : "No" + .["mainsettings"]["leader_experience"]["value"] = newtemplate.leader_experience ? "Yes" : "No" + .["mainsettings"]["random_names"]["value"] = newtemplate.random_names ? "Yes" : "No" + .["mainsettings"]["spawn_admin"]["value"] = newtemplate.spawn_admin ? "Yes" : "No" + .["mainsettings"]["use_custom_shuttle"]["value"] = newtemplate.use_custom_shuttle ? "Yes" : "No" + .["mainsettings"]["spawn_at_outpost"]["value"] = newtemplate.spawn_at_outpost ? "Yes" : "No" /datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag) @@ -226,8 +234,6 @@ if (ispath(antag, /datum/antagonist/ert)) var/datum/antagonist/ert/ert = antag mannequin.equipOutfit(initial(ert.outfit), TRUE) - else if (ispath(antag, /datum/antagonist/official)) - mannequin.equipOutfit(/datum/outfit/centcom/centcom_official, TRUE) /datum/admins/proc/makeERTPreviewIcon(list/settings) // Set up the dummy for its photoshoot @@ -283,12 +289,17 @@ "teamsize" = list("desc" = "Team Size", "type" = "number", "value" = ertemplate.teamsize), "mission" = list("desc" = "Mission", "type" = "string", "value" = ertemplate.mission), "polldesc" = list("desc" = "Ghost poll description", "type" = "string", "value" = ertemplate.polldesc), - "enforce_human" = list("desc" = "Enforce human authority", "type" = "boolean", "value" = "No"), + "enforce_human" = list("desc" = "Spawn as humans", "type" = "boolean", "value" = "[(ertemplate.enforce_human ? "Yes" : "No")]"), "open_armory" = list("desc" = "Open armory doors", "type" = "boolean", "value" = "[(ertemplate.opendoors ? "Yes" : "No")]"), + "leader_experience" = list("desc" = "Pick an experienced leader", "type" = "boolean", "value" = "[(ertemplate.leader_experience ? "Yes" : "No")]"), + "random_names" = list("desc" = "Randomize names", "type" = "boolean", "value" = "[(ertemplate.random_names ? "Yes" : "No")]"), + "spawn_admin" = list("desc" = "Spawn yourself as briefing officer", "type" = "boolean", "value" = "[(ertemplate.spawn_admin ? "Yes" : "No")]"), + "use_custom_shuttle" = list("desc" = "Use the ERT's custom shuttle (if it has one)", "type" = "boolean", "value" = "[(ertemplate.use_custom_shuttle ? "Yes" : "No")]"), + "spawn_at_outpost" = list("desc" = "Spawn the ERT/Dock the ERT at the Outpost", "type" = "boolean", "value" = "[(ertemplate.spawn_at_outpost ? "Yes" : "No")]"), ) ) - var/list/prefreturn = presentpreflikepicker(usr,"Customize ERT", "Customize ERT", Button1="Ok", width = 600, StealFocus = 1,Timeout = 0, settings=settings) + var/list/prefreturn = presentpreflikepicker(usr, "Customize ERT", "Customize ERT", Button1="Ok", width = 600, StealFocus = 1,Timeout = 0, settings=settings) if (isnull(prefreturn)) return FALSE @@ -306,79 +317,174 @@ ertemplate.teamsize = prefs["teamsize"]["value"] ertemplate.mission = prefs["mission"]["value"] ertemplate.polldesc = prefs["polldesc"]["value"] - ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" ? TRUE : FALSE - ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes" ? TRUE : FALSE - - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc]?", "deathsquad", null) + ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 7 are effectively toggles + ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes" + ertemplate.leader_experience = prefs["leader_experience"]["value"] == "Yes" + ertemplate.random_names = prefs["random_names"]["value"] == "Yes" + ertemplate.spawn_admin = prefs["spawn_admin"]["value"] == "Yes" + ertemplate.use_custom_shuttle = prefs["use_custom_shuttle"]["value"] == "Yes" + ertemplate.spawn_at_outpost = prefs["use_custom_shuttle"]["value"] == "Yes" + + var/list/spawnpoints = GLOB.emergencyresponseteamspawn + var/index = 0 + + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc]?", "deathsquad") var/teamSpawned = FALSE - if(candidates.len > 0) - //Pick the (un)lucky players - var/numagents = min(ertemplate.teamsize,candidates.len) - - //Create team - var/datum/team/ert/ert_team = new ertemplate.team - if(ertemplate.rename_team) - ert_team.name = ertemplate.rename_team - - //Asign team objective - var/datum/objective/missionobj = new - missionobj.team = ert_team - missionobj.explanation_text = ertemplate.mission - missionobj.completed = TRUE - ert_team.objectives += missionobj - ert_team.mission = missionobj - - var/list/spawnpoints = GLOB.emergencyresponseteamspawn - var/index = 0 - while(numagents && candidates.len) - var/spawnloc = spawnpoints[index+1] - //loop through spawnpoints one at a time - index = (index + 1) % spawnpoints.len - var/mob/dead/observer/chosen_candidate = pick(candidates) - candidates -= chosen_candidate - if(!chosen_candidate.key) - continue + // This list will take priority over spawnpoints if not empty + var/list/spawn_turfs = list() - //Spawn the body - var/mob/living/carbon/human/ERTOperative = new ertemplate.mobtype(spawnloc) - chosen_candidate.client.prefs.copy_to(ERTOperative) - ERTOperative.key = chosen_candidate.key + // Takes precedence over spawnpoints[1] if not null + var/turf/brief_spawn - if(ertemplate.enforce_human || !(ERTOperative.dna.species.changesource_flags & ERT_SPAWN)) // Don't want any exploding plasmemes - ERTOperative.set_species(/datum/species/human) + if(!length(candidates)) + to_chat(usr, span_warning("No applicants for ERT. Aborting spawn.")) + return FALSE + + if(ertemplate.spawn_at_outpost && !ertemplate.use_custom_shuttle) + if(!length(GLOB.emergencyresponseteam_outpostspawn)) + message_admins("No outpost spawns found!") + spawnpoints = GLOB.emergencyresponseteam_outpostspawn - //Give antag datum - var/datum/antagonist/ert/ert_antag + if(ertemplate.use_custom_shuttle && ertemplate.ert_template) + to_chat(usr, span_boldnotice("Attempting to spawn ERT custom shuttle, this may take a few seconds...")) - if(numagents == 1) - ert_antag = new ertemplate.leader_role + var/datum/map_template/shuttle/template = new ertemplate.ert_template + var/spawn_location + + if(ertemplate.spawn_at_outpost) + if(length(SSovermap.outposts) > 1) + var/temp_loc = input(usr, "Select outpost to spawn at") as null|anything in SSovermap.outposts + if(!temp_loc) + message_admins("ERT Shuttle found no outpost to spawn at!") + return + spawn_location = temp_loc else - ert_antag = ertemplate.roles[WRAP(numagents,1,length(ertemplate.roles) + 1)] - ert_antag = new ert_antag - - ERTOperative.mind.add_antag_datum(ert_antag,ert_team) - ERTOperative.mind.assigned_role = ert_antag.name - - //Logging and cleanup - log_game("[key_name(ERTOperative)] has been selected as an [ert_antag.name]") - numagents-- - teamSpawned++ - - if (teamSpawned) - message_admins("[ertemplate.polldesc] has spawned with the mission: [ertemplate.mission]") - - //Open the Armory doors - if(ertemplate.opendoors) - for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks) - door.open() - CHECK_TICK - return TRUE + spawn_location = SSovermap.outposts[1] + + if(!spawn_location) + spawn_location = SSovermap.get_unused_overmap_square() + + var/datum/overmap/ship/controlled/ship = new(spawn_location, template) + + if(!ship) + CRASH("Loading ERT shuttle failed!") + + var/list/shuttle_turfs = ship.shuttle_port.return_turfs() + + for(var/turf/ship_turfs as anything in shuttle_turfs) + for(var/obj/effect/landmark/ert_shuttle_spawn/spawner in ship_turfs) + spawn_turfs += get_turf(spawner) + + if(!brief_spawn) + brief_spawn = locate(/obj/effect/landmark/ert_shuttle_brief_spawn) in shuttle_turfs + + if(!length(spawn_turfs)) + stack_trace("ERT shuttle loaded but found no spawnpoints, placing the ERT at wherever inside the shuttle instead.") + for(var/turf/open/floor/open_turf in shuttle_turfs) + if(!find_safe_turf(open_turf)) + continue + spawn_turfs += open_turf + + if(ertemplate.spawn_admin) + if(isobserver(usr)) + var/mob/living/carbon/human/admin_officer = new (brief_spawn || spawn_turfs || spawnpoints[1]) + var/chosen_outfit = usr.client?.prefs?.brief_outfit + usr.client.prefs.copy_to(admin_officer) + admin_officer.equipOutfit(chosen_outfit) + admin_officer.key = usr.key + else + to_chat(usr, span_warning("Could not spawn you in as briefing officer as you are not a ghost!")) + + //Pick the (un)lucky players + var/numagents = min(ertemplate.teamsize, length(candidates)) + + //Create team + var/datum/team/ert/ert_team = new ertemplate.team + if(ertemplate.rename_team) + ert_team.name = ertemplate.rename_team + + //Assign team objective + var/datum/objective/missionobj = new + missionobj.team = ert_team + missionobj.explanation_text = ertemplate.mission + missionobj.completed = TRUE + ert_team.objectives += missionobj + ert_team.mission = missionobj + + var/mob/dead/observer/earmarked_leader + var/leader_spawned = FALSE // just in case the earmarked leader disconnects or becomes unavailable, we can try giving leader to the last guy to get chosen + + if(ertemplate.leader_experience) + var/list/candidate_living_exps = list() + for(var/i in candidates) + var/mob/dead/observer/potential_leader = i + candidate_living_exps[potential_leader] = potential_leader.client?.get_exp_living(TRUE) + + candidate_living_exps = sortList(candidate_living_exps, cmp=/proc/cmp_numeric_dsc) + if(candidate_living_exps.len > ERT_EXPERIENCED_LEADER_CHOOSE_TOP) + candidate_living_exps = candidate_living_exps.Cut(ERT_EXPERIENCED_LEADER_CHOOSE_TOP+1) // pick from the top ERT_EXPERIENCED_LEADER_CHOOSE_TOP contenders in playtime + earmarked_leader = pick(candidate_living_exps) else - return FALSE + earmarked_leader = pick(candidates) + + while(numagents && candidates.len) + var/turf/spawnloc + if(length(spawn_turfs)) + spawnloc = pick(spawn_turfs) + else + if(!spawnpoints.len) + CRASH("ERT has no spawnpoints!") + spawnloc = spawnpoints[index+1] + //loop through spawnpoints one at a time + index = (index + 1) % spawnpoints.len + + var/mob/dead/observer/chosen_candidate = earmarked_leader || pick(candidates) // this way we make sure that our leader gets chosen + candidates -= chosen_candidate + if(!chosen_candidate.key) + continue + + //Spawn the body + var/mob/living/carbon/human/ert_operative = new ertemplate.mobtype(spawnloc) + chosen_candidate.client.prefs.copy_to(ert_operative) + ert_operative.key = chosen_candidate.key + + if(ertemplate.enforce_human || !(ert_operative.dna.species.changesource_flags & ERT_SPAWN)) // Don't want any exploding plasmemes + ert_operative.set_species(/datum/species/human) + + //Give antag datum + var/datum/antagonist/ert/ert_antag + + if((chosen_candidate == earmarked_leader) || (numagents == 1 && !leader_spawned)) + ert_antag = new ertemplate.leader_role () + earmarked_leader = null + leader_spawned = TRUE + else + ert_antag = ertemplate.roles[WRAP(numagents,1,length(ertemplate.roles) + 1)] + ert_antag = new ert_antag + ert_antag.random_names = ertemplate.random_names + + ert_operative.mind.add_antag_datum(ert_antag,ert_team) + ert_operative.mind.assigned_role = ert_antag.name + + //Logging and cleanup + log_game("[key_name(ert_operative)] has been selected as an [ert_antag.name]") + numagents-- + teamSpawned++ + + if(teamSpawned) + message_admins("[ertemplate.rename_team] has spawned with the mission: [ertemplate.mission]") + + //Open the Armory doors + if(ertemplate.opendoors) + for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks) + door.open() + CHECK_TICK + return TRUE return + //Abductors /datum/admins/proc/makeAbductorTeam() new /datum/round_event/ghost_role/abductor @@ -387,3 +493,5 @@ /datum/admins/proc/makeRevenant() new /datum/round_event/ghost_role/revenant(TRUE, TRUE) return 1 + +#undef ERT_EXPERIENCED_LEADER_CHOOSE_TOP diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index aa1717230c48..537afd8d4ff5 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -101,6 +101,7 @@ desc = "A single-use teleporter designed to quickly reinforce operatives in the field." icon = 'icons/obj/device.dmi' icon_state = "locator" + var/nukieonly = TRUE var/borg_to_spawn var/locked = TRUE @@ -181,6 +182,10 @@ name = "syndicate medical teleporter" borg_to_spawn = "Medical" +/obj/item/antag_spawner/nuke_ops/borg_tele/medical/unlocked // used for cybersun ERT + locked = FALSE + nukieonly = FALSE + /obj/item/antag_spawner/nuke_ops/borg_tele/saboteur name = "syndicate saboteur teleporter" @@ -193,7 +198,7 @@ /obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, kind, datum/mind/user) var/mob/living/silicon/robot/R var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE) - if(!creator_op) + if(!creator_op && nukieonly) return switch(borg_to_spawn) @@ -210,8 +215,9 @@ if(prob(50)) brainfirstname = pick(GLOB.first_names_female) var/brainopslastname = pick(GLOB.last_names) - if(creator_op.nuke_team.syndicate_name) //the brain inside the syndiborg has the same last name as the other ops. - brainopslastname = creator_op.nuke_team.syndicate_name + if(nukieonly) //the brain inside the syndiborg has the same last name as the other ops. + if(creator_op.nuke_team.syndicate_name) + brainopslastname = creator_op.nuke_team.syndicate_name var/brainopsname = "[brainfirstname] [brainopslastname]" R.mmi.name = "[initial(R.mmi.name)]: [brainopsname]" @@ -224,7 +230,8 @@ var/datum/antagonist/nukeop/new_borg = new() new_borg.send_to_spawnpoint = FALSE - R.mind.add_antag_datum(new_borg,creator_op.nuke_team) + if(nukieonly) + R.mind.add_antag_datum(new_borg,creator_op.nuke_team) R.mind.special_role = "Syndicate Cyborg" ///////////SLAUGHTER DEMON diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index c12fcb8eaf27..f28bd9e428bb 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -11,7 +11,7 @@ var/role = "Security Officer" var/list/name_source var/random_names = TRUE - var/rip_and_tear = FALSE + var/deathsquad = FALSE var/equip_ert = TRUE var/forge_objectives_for_ert = TRUE can_elimination_hijack = ELIMINATION_PREVENT @@ -28,6 +28,20 @@ equipERT() . = ..() +/datum/antagonist/ert/create_team(datum/team/ert/new_team) + if(istype(new_team)) + ert_team = new_team + +/datum/antagonist/ert/proc/forge_objectives() + if(ert_team) + objectives |= ert_team.objectives + +/datum/antagonist/ert/proc/equipERT() + var/mob/living/carbon/human/H = owner.current + if(!istype(H)) + return + H.equipOutfit(outfit) + /datum/antagonist/ert/get_team() return ert_team @@ -38,15 +52,56 @@ /datum/antagonist/ert/proc/update_name() owner.current.fully_replace_character_name(owner.current.real_name,"[role] [pick(name_source)]") -/datum/antagonist/ert/deathsquad/New() - . = ..() - name_source = GLOB.commando_names +/datum/antagonist/ert/greet() + if(!ert_team) + return -/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override) - ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + to_chat(owner, "You are the [name].") -/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override) - REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + var/missiondesc = "Your team is being sent to [station_name()].
" + if(leader) //If Squad Leader + missiondesc += " Lead your team to ensure the completion of your objectives." + else + missiondesc += " Follow orders given to you by your squad leader." + if(deathsquad) + missiondesc += "Leave no witnesses." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +// ******************************************************************** +// ** Nanotrasen ** +// ******************************************************************** + +// Official +/datum/antagonist/ert/official + name = "CentCom Official" + show_name_in_check_antagonists = TRUE + var/datum/objective/mission + role = "Inspector" + random_names = FALSE + outfit = /datum/outfit/centcom/centcom_official + +/datum/antagonist/ert/official/greet() + to_chat(owner, "You are a CentCom Official.") + if (ert_team) + to_chat(owner, "Central Command is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") + else + to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission.explanation_text]") + +/datum/antagonist/ert/official/forge_objectives() + if (ert_team) + return ..() + if(mission) + return + var/datum/objective/missionobj = new () + missionobj.owner = owner + missionobj.explanation_text = "Conduct a routine performance review of [station_name()]'s vessels." + missionobj.completed = TRUE + mission = missionobj + objectives |= mission + +// Standard ERT /datum/antagonist/ert/security // kinda handled by the base template but here for completion @@ -74,43 +129,30 @@ /datum/antagonist/ert/commander/red outfit = /datum/outfit/centcom/ert/commander/alert +// Deathsquad + /datum/antagonist/ert/deathsquad name = "Deathsquad Trooper" outfit = /datum/outfit/centcom/death_commando role = "Trooper" - rip_and_tear = TRUE - -/datum/antagonist/ert/medic/inquisitor - outfit = /datum/outfit/centcom/ert/medic/inquisitor + deathsquad = TRUE -/datum/antagonist/ert/medic/inquisitor/on_gain() - . = ..() - owner.holy_role = HOLY_ROLE_PRIEST - -/datum/antagonist/ert/security/inquisitor - outfit = /datum/outfit/centcom/ert/security/inquisitor +/datum/antagonist/ert/deathsquad/leader + name = "Deathsquad Officer" + outfit = /datum/outfit/centcom/death_commando + role = "Officer" -/datum/antagonist/ert/security/inquisitor/on_gain() +/datum/antagonist/ert/deathsquad/New() . = ..() - owner.holy_role = HOLY_ROLE_PRIEST - -/datum/antagonist/ert/chaplain - role = "Chaplain" - outfit = /datum/outfit/centcom/ert/chaplain - -/datum/antagonist/ert/chaplain/inquisitor - outfit = /datum/outfit/centcom/ert/chaplain/inquisitor + name_source = GLOB.commando_names -/datum/antagonist/ert/chaplain/on_gain() - . = ..() - owner.holy_role = HOLY_ROLE_PRIEST +/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override) + ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) -/datum/antagonist/ert/commander/inquisitor - outfit = /datum/outfit/centcom/ert/commander/inquisitor +/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override) + REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) -/datum/antagonist/ert/commander/inquisitor/on_gain() - . = ..() - owner.holy_role = HOLY_ROLE_PRIEST +// Janitor /datum/antagonist/ert/janitor role = "Janitor" @@ -120,10 +162,7 @@ role = "Heavy Duty Janitor" outfit = /datum/outfit/centcom/ert/janitor/heavy -/datum/antagonist/ert/deathsquad/leader - name = "Deathsquad Officer" - outfit = /datum/outfit/centcom/death_commando - role = "Officer" +// Intern /datum/antagonist/ert/intern name = "CentCom Intern" @@ -136,45 +175,13 @@ outfit = /datum/outfit/centcom/centcom_intern/leader role = "Head Intern" -/datum/antagonist/ert/clown - role = "Clown" - outfit = /datum/outfit/centcom/ert/clown +/datum/antagonist/ert/intern/unarmed + outfit = /datum/outfit/centcom/centcom_intern/unarmed -/datum/antagonist/ert/clown/New() - . = ..() - name_source = GLOB.clown_names +/datum/antagonist/ert/intern/leader/unarmed + outfit = /datum/outfit/centcom/centcom_intern/leader/unarmed -/datum/antagonist/ert/create_team(datum/team/ert/new_team) - if(istype(new_team)) - ert_team = new_team - -/datum/antagonist/ert/proc/forge_objectives() - if(ert_team) - objectives |= ert_team.objectives - -/datum/antagonist/ert/proc/equipERT() - var/mob/living/carbon/human/H = owner.current - if(!istype(H)) - return - H.equipOutfit(outfit) - - -/datum/antagonist/ert/greet() - if(!ert_team) - return - - to_chat(owner, "You are the [name].") - - var/missiondesc = "Your squad is being sent on a mission to [station_name()] by Nanotrasen's Security Division." - if(leader) //If Squad Leader - missiondesc += " Lead your squad to ensure the completion of the mission. Board the shuttle when your team is ready." - else - missiondesc += " Follow orders given to you by your squad leader." - if(!rip_and_tear) - missiondesc += "Avoid civilian casualties when possible." - - missiondesc += "
Your Mission : [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) +// Marine /datum/antagonist/ert/marine name = "Marine Commander" @@ -196,8 +203,340 @@ outfit = /datum/outfit/centcom/ert/marine/medic role = "Medical Officer" +// Loss Prevention + +/datum/antagonist/ert/lp + name = "Loss Prevention Security Specialist" + outfit = /datum/outfit/centcom/ert/lp + role = "Security Specialist" + +/datum/antagonist/ert/lp/medic + name = "Loss Prevention Medical Specialist" + outfit = /datum/outfit/centcom/ert/lp/medic + role = "Medical Specialist" + +/datum/antagonist/ert/lp/engineer + name = "Loss Prevention Engineering Specialist" + outfit = /datum/outfit/centcom/ert/lp/engineer + role = "Engineering Specialist" + +/datum/antagonist/ert/lp/lieutenant + name = "Loss Prevention Lieutenant" + leader = TRUE + outfit = /datum/outfit/centcom/ert/lp/lieutenant + role = "Lieutenant" + +// ******************************************************************** +// ** Inteq ** +// ******************************************************************** + +/datum/antagonist/ert/inteq + name = "Inteq Mercenary" + outfit = /datum/outfit/job/security/inteq + random_names = TRUE + role = "Enforcer" + + +/datum/antagonist/ert/inteq/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You're one of the many mercenaries under the Inteq Risk Management Group sent to [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your squadron to ensure the completion of your contract." + else + missiondesc += "Follow orders given to you by your Vanguard." + if(deathsquad) + missiondesc += "Leave no witnesses." + + missiondesc += "
Contract Terms: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/inteq/leader + name = "Inteq Mercenary Leader" + outfit = /datum/outfit/job/captain/inteq + role = "Vanguard" + +// ******************************************************************** +// ** SolGov ** +// ******************************************************************** /datum/antagonist/ert/solgov - name = "SolGov Sonnensoldner" - outfit = /datum/outfit/solgov/sonnensoldner + name = "SolGov Sonnensöldner" + outfit = /datum/outfit/centcom/ert/solgov random_names = FALSE - role = "SolGov Sonnensoldner" + role = "Sonnensöldner" + +/datum/antagonist/ert/official/solgov + name = "SolGov Inspector" + outfit = /datum/outfit/centcom/ert/solgov/inspector + role = "Solarian Inspector" + +/datum/antagonist/ert/official/solgov/greet() + to_chat(owner, "You are a Solarian Inspector.") + if (ert_team) + to_chat(owner, "The Department of Administrative Affairs is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") + else + to_chat(owner, "The Department of Administrative Affairs is sending you to [station_name()] with the task: [mission.explanation_text]") + + +// ******************************************************************** +// ** Minutemen ** +// ******************************************************************** + +/datum/antagonist/ert/minutemen + name = "Minutemen Infantry" + outfit = /datum/outfit/centcom/ert/minutemen + role = "Minuteman" + +/datum/antagonist/ert/minutemen/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You stand shoulder to shoulder with your fellow colonists in the Colonial Minutemen within [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the completion of your objectives." + else + missiondesc += "Follow orders given to you by your Sergent." + if(deathsquad) + missiondesc += "Leave no witnesses." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/minutemen/leader + name = "Minutemen Leader" + leader = TRUE + outfit = /datum/outfit/centcom/ert/minutemen/leader + role = "Sergeant" + +/datum/antagonist/ert/minutemen/bard + name = "BARD Infantry" + outfit = /datum/outfit/centcom/ert/minutemen/bard + role = "Minuteman" + +/datum/antagonist/ert/minutemen/bard/leader + name = "BARD Leader" + leader = TRUE + outfit = /datum/outfit/centcom/ert/minutemen/bard/leader + role = "Sergeant" + +/datum/antagonist/ert/minutemen/riot + name = "Riot Officer" + outfit = /datum/outfit/centcom/ert/minutemen/riot + role = "Minuteman" + +/datum/antagonist/ert/minutemen/riot/leader + name = "Riot Sergeant" + leader = TRUE + outfit = /datum/outfit/centcom/ert/minutemen/riot/leader + role = "Sergeant" + +/datum/antagonist/ert/official/minutemen + name = "GOLD Inspector" + outfit = /datum/outfit/centcom/ert/minutemen/inspector + role = "Lieutenant" + +/datum/antagonist/ert/official/minutemen/greet() + to_chat(owner, "You are the GOLD Inspector.") + if (ert_team) + to_chat(owner, "The Galactic Optimum Labor Division is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") + else + to_chat(owner, "The Galactic Optimum Labor Division is sending you to [station_name()] with the task: [mission.explanation_text]") + +/datum/antagonist/ert/minutemen/piratehunters + name = "Pirate Hunter" + outfit = /datum/outfit/centcom/ert/minutemen/piratehunters + role = "Minuteman" + +/datum/antagonist/ert/minutemen/piratehunters/leader + name = "Pirate Hunter Leader" + leader = TRUE + outfit = /datum/outfit/centcom/ert/minutemen/piratehunters/leader + role = "Sergeant" + +// ******************************************************************** +// ** Syndicate ** +// ******************************************************************** + +/datum/antagonist/ert/syndicate + name = "Syndicate Infantry" + outfit = /datum/outfit/centcom/ert/syndicate + role = "Squaddie" + +/datum/antagonist/ert/syndicate/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are but another member of the Syndicate sent to [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the completion of your objectives." + else + missiondesc += "Follow orders given to you by your Sergeant." + if(deathsquad) + missiondesc += "Leave no witnesses." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/syndicate/leader + name = "Syndicate Sergeant" + leader = TRUE + outfit = /datum/outfit/centcom/ert/syndicate/leader + role = "Sergeant" + +/datum/antagonist/ert/syndicate/gorlex + name = "2nd Battlegroup Trooper" + outfit = /datum/outfit/centcom/ert/syndicate/gorlex + role = "Trooper" + +/datum/antagonist/ert/syndicate/gorlex/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You're a soldier of the 2nd Battlegroup, sometimes known as Gorlex Loyalists, sent to [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the completion of your objectives." + else + missiondesc += "Follow orders given to you by your Sergeant." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/syndicate/gorlex/pointman + name = "2nd Battlegroup Shotgunner" + outfit = /datum/outfit/centcom/ert/syndicate/gorlex/pointman + role = "Pointman" + +/datum/antagonist/ert/syndicate/gorlex/medic + name = "2nd Battlegroup Medic" + outfit = /datum/outfit/centcom/ert/syndicate/gorlex/medic + role = "Medic" + +/datum/antagonist/ert/syndicate/gorlex/sniper + name = "2nd Battlegroup Sniper" + outfit = /datum/outfit/centcom/ert/syndicate/gorlex/sniper + role = "Marksman" + +/datum/antagonist/ert/syndicate/gorlex/leader + name = "2nd Battlegroup Sergeant" + leader = TRUE + outfit = /datum/outfit/centcom/ert/syndicate/gorlex/leader + role = "Sergeant" + +/datum/antagonist/ert/syndicate/cybersun + name = "Cybersun Commando" + outfit = /datum/outfit/centcom/ert/syndicate/cybersun + role = "Operative" + +/datum/antagonist/ert/syndicate/cybersun/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are one of the commandos enlisted in Cybersun Industries, deployed to [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the completion of your objectives." + else + missiondesc += "Follow orders given to you by your Sergeant." + if(prob(50) && !leader) + missiondesc += "
In addition to your contract with Cybersun, you are also a Gorlex Hardliner. You do not like Cybersun, but you work with them regardless." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/syndicate/cybersun/leader + name = "Cybersun Commando Leader" + leader = TRUE + outfit = /datum/outfit/centcom/ert/syndicate/cybersun/leader + role = "Lead Operative" + +/datum/antagonist/ert/syndicate/cybersun/medic + name = "Cybersun Paramedic" + outfit = /datum/outfit/centcom/ert/syndicate/cybersun/medic + role = "Medical Technician" + +/datum/antagonist/ert/syndicate/cybersun/medic/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are one of the many trained paramedics of Cybersun's Medical Intervention program, sent with your team to [station_name()] to aid Cybersun clients in distress.
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to ensure the safety of Cybersun's clientele.
" + else + missiondesc += "Follow orders given to you by your Lead Technician. Assist Cybersun clients.
" + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/syndicate/cybersun/medic/leader + name = "Cybersun Lead Paramedic" + leader = TRUE + outfit = /datum/outfit/centcom/ert/syndicate/cybersun/medic/leader + role = "Lead Medical Technician" + +// ******************************************************************** +// ** Frontiersmen ** +// ******************************************************************** + +/datum/antagonist/ert/frontier + name = "Frontiersmen Pirate" + outfit = /datum/outfit/centcom/ert/frontiersmen + role = "Grunt" + +/datum/antagonist/ert/frontier/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are one of the ruthless, sadistic pirates in the Frontiersmen pirate fleet, stationed in [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to complete your objectives." + else + missiondesc += "Follow orders given to you by your Officer." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/frontier/leader + name = "Frontiersmen Officer" + outfit = /datum/outfit/centcom/ert/frontiersmen/leader + role = "Officer" + +/datum/antagonist/ert/frontier/medic + name = "Frontiersmen Medic" + outfit = /datum/outfit/centcom/ert/frontiersmen/medic + role = "Stretcher-Bearer" + +/datum/antagonist/ert/frontier/engineer + name = "Frontiersmen Engineer" + outfit = /datum/outfit/centcom/ert/frontiersmen/engineer + role = "Sapper" + +// ******************************************************************** +// ** independent ** +// ******************************************************************** + +/datum/antagonist/ert/independent + name = "Independent Security Officer" + outfit = /datum/outfit/centcom/ert/independent + role = "Security Officer" + +/datum/antagonist/ert/independent/greet() + to_chat(owner, "You are the [name].") + var/missiondesc = "You are one of the many Independent contractors, workers and students on [station_name()].
" + if(leader) //If Squad Leader + missiondesc += "Lead your team to complete your objectives." + else + missiondesc += "Follow orders given to you by your leader." + + missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" + to_chat(owner,missiondesc) + +/datum/antagonist/ert/independent/emt + name = "Independent Medical Technician" + outfit = /datum/outfit/centcom/ert/independent/emt + role = "Paramedic" + +/datum/antagonist/ert/independent/firefighter + name = "Independent Firefighter" + outfit = /datum/outfit/centcom/ert/independent/firefighter + role = "Firefighter" + +/datum/antagonist/ert/independent/firefighter/medic + name = "Independent Firefighter Paramedic" + outfit = /datum/outfit/centcom/ert/independent/firefighter/medic + role = "Paramedic" + +/datum/antagonist/ert/independent/firefighter/leader + name = "Independent Firefighter Group Captain" + outfit = /datum/outfit/centcom/ert/independent/firefighter/leader + role = "Group Captain" + +/datum/antagonist/ert/independent/technician + name = "Independent Technician" + outfit = /datum/outfit/centcom/ert/independent/technician + role = "Technician" diff --git a/code/modules/antagonists/official/official.dm b/code/modules/antagonists/official/official.dm deleted file mode 100644 index a258d6e68e76..000000000000 --- a/code/modules/antagonists/official/official.dm +++ /dev/null @@ -1,42 +0,0 @@ -/datum/antagonist/official - name = "CentCom Official" - show_name_in_check_antagonists = TRUE - show_in_antagpanel = FALSE - can_elimination_hijack = ELIMINATION_PREVENT - var/datum/objective/mission - var/datum/team/ert/ert_team - show_to_ghosts = TRUE - -/datum/antagonist/official/greet() - to_chat(owner, "You are a CentCom Official.") - if (ert_team) - to_chat(owner, "Central Command is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") - else - to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission.explanation_text]") - -/datum/antagonist/official/proc/equip_official() - var/mob/living/carbon/human/H = owner.current - if(!istype(H)) - return - H.equipOutfit(/datum/outfit/centcom/centcom_official) - -/datum/antagonist/official/create_team(datum/team/new_team) - if(istype(new_team)) - ert_team = new_team - -/datum/antagonist/official/proc/forge_objectives() - if (ert_team) - objectives |= ert_team.objectives - else if (!mission) - var/datum/objective/missionobj = new - missionobj.owner = owner - missionobj.explanation_text = "Conduct a routine performance review of [station_name()] and its Captain." - missionobj.completed = 1 - mission = missionobj - objectives |= mission - - -/datum/antagonist/official/on_gain() - forge_objectives() - . = ..() - equip_official() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 69ea5e634cda..e73a186087f3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -16,6 +16,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/lastchangelog = "" //Saved changlog filesize to detect if there was a change var/ooccolor = "#c43b23" var/asaycolor = "#ff4500" //This won't change the color for current admins, only incoming ones. + /// If we spawn an ERT as an admin and choose to spawn as the briefing officer, we'll be given this outfit + var/brief_outfit = /datum/outfit/centcom/commander var/enable_tips = TRUE var/tip_delay = 500 //tip delay in milliseconds @@ -1097,6 +1099,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Hide Prayers: [(chat_toggles & CHAT_PRAYER)?"Shown":"Hidden"]
" dat += "Split Admin Tabs: [(toggles & SPLIT_ADMIN_TABS)?"Enabled":"Disabled"]
" dat += "Ignore Being Summoned as Cult Ghost: [(toggles & ADMIN_IGNORE_CULT_GHOST)?"Don't Allow Being Summoned":"Allow Being Summoned"]
" + dat += "Briefing Officer Outfit: [brief_outfit]
" if(CONFIG_GET(flag/allow_admin_asaycolor)) dat += "
" dat += "ASAY Color:     Change
" @@ -1981,6 +1984,15 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_asaycolor) asaycolor = new_asaycolor + if("briefoutfit") + var/list/valid_paths = list() + for(var/datum/outfit/outfit_path as anything in subtypesof(/datum/outfit)) + valid_paths[initial(outfit_path.name)] = outfit_path + var/new_outfit = input(user, "Choose your briefing officer outfit:", "Game Preference") as null|anything in valid_paths + new_outfit = valid_paths[new_outfit] + if(new_outfit) + brief_outfit = new_outfit + if("bag") var/new_backpack = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backpacklist if(new_backpack) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index e8015ce2fbb7..7800a7b57f33 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -161,6 +161,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //general preferences READ_FILE(S["asaycolor"], asaycolor) + READ_FILE(S["brief_outfit"], brief_outfit) READ_FILE(S["ooccolor"], ooccolor) READ_FILE(S["screentip_color"], screentip_color) READ_FILE(S["lastchangelog"], lastchangelog) @@ -265,6 +266,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) menuoptions = SANITIZE_LIST(menuoptions) be_special = SANITIZE_LIST(be_special) + brief_outfit = sanitize_inlist(brief_outfit, subtypesof(/datum/outfit), null) show_credits = sanitize_integer(show_credits, 0, 1, initial(show_credits)) pda_style = sanitize_inlist(pda_style, GLOB.pda_styles, initial(pda_style)) pda_color = sanitize_hexcolor(pda_color, 6, TRUE, initial(pda_color)) @@ -304,6 +306,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //general preferences WRITE_FILE(S["asaycolor"], asaycolor) + WRITE_FILE(S["brief_outfit"], brief_outfit) WRITE_FILE(S["ooccolor"], ooccolor) WRITE_FILE(S["screentip_color"], screentip_color) WRITE_FILE(S["lastchangelog"], lastchangelog) diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm new file mode 100644 index 000000000000..db934aaa9761 --- /dev/null +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -0,0 +1,60 @@ +/datum/outfit/centcom/ert/frontiersmen + name = "ERT - Frontiersman Basic" + + head = /obj/item/clothing/head/beret/sec/frontier + mask = /obj/item/clothing/mask/gas/sechailer/minutemen + suit = /obj/item/clothing/suit/armor/vest/bulletproof/frontier + suit_store = /obj/item/gun/ballistic/rifle/boltaction + uniform = /obj/item/clothing/under/rank/security/officer/frontier + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/color/black + ears = /obj/item/radio/headset/pirate/alt + back = /obj/item/storage/backpack + belt = null + l_pocket = /obj/item/flashlight/seclite + r_pocket = /obj/item/tank/internals/emergency_oxygen/double + + backpack_contents = list(/obj/item/ammo_box/a762=5, /obj/item/grenade/frag=1) + + id_role = "Grunt" + +/datum/outfit/centcom/ert/frontiersmen/leader + name = "ERT - Frontiersman Officer" + + uniform = /obj/item/clothing/under/rank/security/officer/frontier/officer + head = /obj/item/clothing/head/beret/sec/frontier/officer + ears = /obj/item/radio/headset/pirate/alt/captain + back = /obj/item/storage/backpack/satchel/leather + suit = /obj/item/clothing/suit/armor/frontier + suit_store = /obj/item/gun/ballistic/revolver/nagant + belt = /obj/item/storage/belt/military/assault + + backpack_contents = list(/obj/item/ammo_box/n762_clip=3, /obj/item/binoculars=1, /obj/item/kitchen/knife/combat/survival) + + id_role = "Officer" + +/datum/outfit/centcom/ert/frontiersmen/medic + name = "ERT - Frontiersman Medic" + + back = /obj/item/storage/backpack/medic + mask = /obj/item/clothing/mask/surgical + gloves = /obj/item/clothing/gloves/color/latex/nitrile + belt = /obj/item/storage/belt/medical/surgery + suit = null + suit_store = null + + backpack_contents = list(/obj/item/storage/firstaid/medical=1, /obj/item/reagent_containers/hypospray/medipen/stimpack=3) + + id_role = "Stretcher-Bearer" + +/datum/outfit/centcom/ert/frontiersmen/engineer + name = "ERT - Frontiersman Engineer" + + back = /obj/item/storage/backpack/industrial + belt = /obj/item/storage/belt/utility/full + head = /obj/item/clothing/head/hardhat/weldhat + suit_store = null + + backpack_contents = list(/obj/item/grenade/c4=3, /obj/item/crowbar/large=1) + + id_role = "Sapper" diff --git a/code/modules/clothing/outfits/ert/indie_ert.dm b/code/modules/clothing/outfits/ert/indie_ert.dm new file mode 100644 index 000000000000..18b611d1183d --- /dev/null +++ b/code/modules/clothing/outfits/ert/indie_ert.dm @@ -0,0 +1,88 @@ +/datum/outfit/centcom/ert/independent + name = "ERT - Independent Security Officer" + + head = /obj/item/clothing/head/helmet/sec + ears = /obj/item/radio/headset/alt + mask = null + uniform = /obj/item/clothing/under/rank/security/officer + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/color/black + suit = /obj/item/clothing/suit/armor/vest + back = /obj/item/storage/backpack/security + belt = /obj/item/storage/belt/security/full + id = /obj/item/card/id + + id_role = "Security Officer" + +/datum/outfit/centcom/ert/independent/emt + name = "ERT - Independent Paramedic" + + head = /obj/item/clothing/head/soft/paramedic + mask = null + uniform = /obj/item/clothing/under/rank/medical/paramedic + shoes = /obj/item/clothing/shoes/sneakers/white + gloves = /obj/item/clothing/gloves/color/latex + ears = /obj/item/radio/headset + suit = /obj/item/clothing/suit/toggle/labcoat/paramedic + back = /obj/item/storage/backpack/medic + belt = /obj/item/storage/belt/medical/webbing/paramedic + + id_role = "Emergency Medical Technician" + +/datum/outfit/centcom/ert/independent/firefighter + name = "ERT - Independent Firefighter (Standard)" + + head = /obj/item/clothing/head/hardhat/red + uniform = /obj/item/clothing/under/utility + suit = /obj/item/clothing/suit/fire/firefighter + suit_store = /obj/item/extinguisher + glasses = /obj/item/clothing/glasses/heat + mask = /obj/item/clothing/mask/breath + shoes = /obj/item/clothing/shoes/workboots + gloves = /obj/item/clothing/gloves/color/black + back = /obj/item/tank/internals/oxygen/red + + l_pocket = /obj/item/crowbar/red + r_pocket = /obj/item/radio + + id_role = "Firefighter" + +/datum/outfit/centcom/ert/independent/firefighter/medic + name = "ERT - Independent Firefighter (Medic)" + + mask = /obj/item/clothing/mask/breath/medical + back = /obj/item/storage/backpack/fireproof + gloves = /obj/item/clothing/gloves/color/latex/nitrile/evil + glasses = /obj/item/clothing/glasses/hud/health + suit_store = /obj/item/tank/internals/emergency_oxygen + + l_pocket = /obj/item/extinguisher/mini + + backpack_contents = list(/obj/item/storage/firstaid/fire=1, /obj/item/storage/firstaid/o2=1, /obj/item/radio=1) + + id_role = "Emergency Medical Technician" + +/datum/outfit/centcom/ert/independent/firefighter/leader + name = "ERT - Independent Firefighter (Group Captain)" + + back = /obj/item/fireaxe + suit = /obj/item/clothing/suit/space/hardsuit/engine + suit_store = /obj/item/tank/internals/oxygen/red + head = null + belt = /obj/item/storage/belt/utility/atmostech + gloves = /obj/item/clothing/gloves/color/yellow + + id_role = "Group Captain" + +/datum/outfit/centcom/ert/independent/technician + name = "ERT - Independent Technician" + + head = /obj/item/clothing/head/hardhat + belt = /obj/item/storage/belt/utility/full/engi + suit = /obj/item/clothing/suit/toggle/hazard + shoes = /obj/item/clothing/shoes/workboots + back = /obj/item/storage/backpack/industrial + l_pocket = /obj/item/radio + r_pocket = /obj/item/analyzer + + box = /obj/item/storage/box/survival/engineer diff --git a/code/modules/clothing/outfits/ert/inteq_ert.dm b/code/modules/clothing/outfits/ert/inteq_ert.dm new file mode 100644 index 000000000000..05d4f22eb69a --- /dev/null +++ b/code/modules/clothing/outfits/ert/inteq_ert.dm @@ -0,0 +1,53 @@ +/datum/outfit/centcom/ert/inteq + name = "ERT - Inteq Rifleman" + + mask = /obj/item/clothing/mask/gas/sechailer/inteq + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq + uniform = /obj/item/clothing/under/syndicate/inteq + suit = /obj/item/clothing/suit/space/hardsuit/syndi/inteq + suit_store = /obj/item/gun/ballistic/automatic/assault/ak47/inteq + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/radio/headset/inteq/alt + id = /obj/item/card/id + belt = /obj/item/storage/belt/security/webbing/inteq/ak47 + back = /obj/item/storage/backpack/fireproof + + l_pocket = /obj/item/kitchen/knife/combat + r_pocket = /obj/item/flashlight/seclite + + backpack_contents = list(/obj/item/radio=1) + + id_role = "Enforcer" + +/datum/outfit/centcom/ert/inteq/shotgun + name = "ERT - Inteq Shotgunner" + + suit_store = /obj/item/gun/ballistic/shotgun/automatic/combat/compact + belt = /obj/item/storage/belt/security/webbing/inteq/alt + + backpack_contents = list(/obj/item/storage/box/lethalshot=2, /obj/item/radio=1) + + id_role = "Enforcer" + +/datum/outfit/centcom/ert/inteq/medic + name = "ERT - Inteq Corpsman" + + uniform = /obj/item/clothing/under/syndicate/inteq/corpsman + belt = /obj/item/storage/belt/medical/webbing/paramedic + suit_store = null + + l_pocket = /obj/item/healthanalyzer + + id_role = "Corpsman" + + backpack_contents = list(/obj/item/storage/firstaid/medical=1, /obj/item/radio=1) + +/datum/outfit/centcom/ert/inteq/leader + name = "ERT - Inteq Vanguard" + + ears = /obj/item/radio/headset/inteq/alt/captain + back = /obj/item/storage/backpack/messenger/inteq + suit_store = /obj/item/gun/ballistic/automatic/pistol/commander/inteq + id = /obj/item/card/id/silver + + id_role = "Vanguard" diff --git a/code/modules/clothing/outfits/ert/minutemen_ert.dm b/code/modules/clothing/outfits/ert/minutemen_ert.dm new file mode 100644 index 000000000000..6ec68e0799ca --- /dev/null +++ b/code/modules/clothing/outfits/ert/minutemen_ert.dm @@ -0,0 +1,126 @@ +/datum/outfit/centcom/ert/minutemen + name = "ERT - Minutemen Basic" + + head = /obj/item/clothing/head/helmet/bulletproof/minutemen + uniform = /obj/item/clothing/under/rank/security/officer/minutemen + mask = /obj/item/clothing/mask/gas/sechailer/minutemen + ears = /obj/item/radio/headset/minutemen/alt + back = /obj/item/storage/backpack/security/cmm + suit = /obj/item/clothing/suit/armor/vest/bulletproof + id = /obj/item/card/id + r_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/flashlight/seclite + + box = /obj/item/storage/box/survival/security + + id_role = "Minutemen" + +/datum/outfit/centcom/ert/minutemen/leader + name = "ERT - Minutemen Basic Sergeant" + + ears = /obj/item/radio/headset/minutemen/alt/captain + back = /obj/item/storage/backpack/satchel/sec/cmm + + id_role = "Sergeant" + +/datum/outfit/centcom/ert/minutemen/bard + name = "ERT - Minutemen BARD" + + suit = /obj/item/clothing/suit/armor/vest/marine/medium + suit_store = /obj/item/gun/ballistic/automatic/smg/cm5 + head = /obj/item/clothing/head/helmet/riot/minutemen + belt = /obj/item/storage/belt/military/minutemen/cm5 + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + r_pocket = /obj/item/grenade/smokebomb + l_pocket = /obj/item/extinguisher/mini + r_hand = /obj/item/kitchen/knife/combat + l_hand = /obj/item/reagent_containers/hypospray/medipen/stimpack + + backpack_contents = list( + /obj/item/flashlight/seclite = 1, + /obj/item/flashlight/flare = 2 + ) + + id_role = "Minutemen" + +/datum/outfit/centcom/ert/minutemen/bard/leader + name = "ERT - Minutemen BARD Sergeant" + + belt = /obj/item/storage/belt/military/assault/minutemen + uniform = /obj/item/clothing/under/rank/command/minutemen + suit = /obj/item/clothing/suit/armor/vest/marine/heavy + suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen + glasses = /obj/item/clothing/glasses/hud/security/night + r_pocket = /obj/item/grenade/c4 + l_pocket = /obj/item/reagent_containers/hypospray/medipen/stimpack + + backpack_contents = list( + /obj/item/flashlight/flare = 3, + /obj/item/grenade/c4 = 2, + /obj/item/flashlight/seclite = 1 + ) + + id_role = "Sergeant" + +/datum/outfit/centcom/ert/minutemen/riot + name = "ERT - Minutemen Riot Officer" + + suit = /obj/item/clothing/suit/armor/riot/minutemen + head = /obj/item/clothing/head/helmet/riot/minutemen + l_hand = /obj/item/melee/baton/loaded + back = /obj/item/shield/riot + belt = /obj/item/gun/ballistic/automatic/smg/cm5/no_mag + r_pocket = /obj/item/ammo_box/magazine/smgm9mm/rubber + l_pocket = /obj/item/ammo_box/magazine/smgm9mm/rubber + + backpack_contents = null + box = null + + id_role = "Minutemen" + +/datum/outfit/centcom/ert/minutemen/riot/leader + name = "ERT - Minutemen Riot Officer Sergeant" + + ears = /obj/item/radio/headset/minutemen/alt/captain + back = /obj/item/shield/riot/flash + + id_role = "Sergeant" + +/datum/outfit/centcom/ert/minutemen/inspector + name = "ERT - Minutemen GOLD Inspector" + + head = null + mask = null + belt = /obj/item/clipboard + glasses = /obj/item/clothing/glasses/sunglasses + uniform = /obj/item/clothing/under/rank/command/minutemen + suit = /obj/item/clothing/suit/toggle/lawyer/minutemen + ears = /obj/item/radio/headset/minutemen/alt/captain + back = /obj/item/storage/backpack/satchel/leather + id = /obj/item/card/id/silver + + l_pocket = null + r_pocket = null + + id_role = "Lieutenant" + +/datum/outfit/centcom/ert/minutemen/piratehunters + name = "ERT - Minutemen Pirate Hunter" + + head = null + suit = /obj/item/clothing/suit/space/hardsuit/security/independent/minutemen + belt = /obj/item/storage/belt/military/minutemen/p16 + suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen + + id_role = "Minutemen" + +/datum/outfit/centcom/ert/minutemen/piratehunters/leader + name = "ERT - Minutemen Pirate Hunter Leader" + + uniform = /obj/item/clothing/under/rank/command/minutemen + ears = /obj/item/radio/headset/minutemen/alt/captain + belt = /obj/item/storage/belt/military/minutemen/gal + suit_store = /obj/item/gun/ballistic/automatic/gal + backpack_contents = list(/obj/item/ammo_box/magazine/gal=4) + + id_role = "Sergeant" diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm similarity index 73% rename from code/modules/clothing/outfits/ert.dm rename to code/modules/clothing/outfits/ert/nanotrasen_ert.dm index aa0b01ff5398..6fb533504715 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm @@ -1,3 +1,4 @@ +// this is where the base ERT outfit goes /datum/outfit/centcom/ert name = "ERT Common" @@ -6,19 +7,18 @@ shoes = /obj/item/clothing/shoes/combat/swat gloves = /obj/item/clothing/gloves/combat ears = /obj/item/radio/headset/headset_cent/alt + // determines what role goes on the ID of an ert member. cheap workaround for implementing it into the ert datum + var/id_role = "Emergency Response Officer" -/datum/outfit/centcom/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) +/datum/outfit/centcom/ert/post_equip(mob/living/carbon/human/human, visualsOnly = FALSE) if(visualsOnly) return - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CENTCOM) - R.freqlock = TRUE - - var/obj/item/card/id/W = H.wear_id - if(W) - W.registered_name = H.real_name - W.update_label() + var/obj/item/card/id/id = human.wear_id + if(id) + id.registered_name = human.real_name + id.assignment = id_role + id.update_label() ..() /datum/outfit/centcom/ert/commander @@ -26,14 +26,16 @@ id = /obj/item/card/id/ert suit = /obj/item/clothing/suit/space/hardsuit/ert + suit_store = /obj/item/gun/energy/e_gun/hades glasses = /obj/item/clothing/glasses/hud/security/sunglasses back = /obj/item/storage/backpack/ert belt = /obj/item/storage/belt/security/full backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/e_gun=1) + /obj/item/melee/baton/loaded=1) l_pocket = /obj/item/switchblade + id_role = "Emergency Response Team Commander" + /datum/outfit/centcom/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -64,7 +66,7 @@ back = /obj/item/storage/backpack/ert/security belt = /obj/item/storage/belt/security/full backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/storage/box/handcuffs=1,\ + /obj/item/storage/box/handcuffs=1, /obj/item/melee/baton/loaded=1) /datum/outfit/centcom/ert/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -80,28 +82,29 @@ /datum/outfit/centcom/ert/security/alert name = "ERT Security - High Alert" + suit_store = /obj/item/gun/energy/pulse/carbine/loyalpin mask = /obj/item/clothing/mask/gas/sechailer/swat backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/storage/box/handcuffs=1,\ /obj/item/melee/baton/loaded=1) - suit_store = /obj/item/gun/energy/pulse/carbine/loyalpin - /datum/outfit/centcom/ert/medic name = "ERT Medic" id = /obj/item/card/id/ert/medical suit = /obj/item/clothing/suit/space/hardsuit/ert/med + suit_store = /obj/item/gun/energy/e_gun/hades glasses = /obj/item/clothing/glasses/hud/health back = /obj/item/storage/backpack/ert/medical belt = /obj/item/storage/belt/medical r_hand = /obj/item/storage/firstaid/regular backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/e_gun=1,\ /obj/item/reagent_containers/hypospray/combat=1,\ /obj/item/gun/medbeam=1) + id_role = "Medical Response Officer" + /datum/outfit/centcom/ert/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -127,6 +130,7 @@ id = /obj/item/card/id/ert/engineer suit = /obj/item/clothing/suit/space/hardsuit/ert/engi + suit_store = /obj/item/gun/energy/e_gun/hades glasses = /obj/item/clothing/glasses/meson/engine back = /obj/item/storage/backpack/ert/engineer belt = /obj/item/storage/belt/utility/full @@ -134,9 +138,10 @@ r_hand = /obj/item/storage/firstaid/regular backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/e_gun=1,\ /obj/item/construction/rcd/loaded=1) + id_role = "Engineering Response Officer" + /datum/outfit/centcom/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -156,6 +161,7 @@ /obj/item/gun/energy/pulse/pistol/loyalpin=1,\ /obj/item/construction/rcd/combat=1) +// official /datum/outfit/centcom/centcom_official name = "CentCom Official" @@ -190,67 +196,6 @@ W.update_label() ..() -/datum/outfit/centcom/ert/commander/inquisitor - name = "Inquisition Commander" - r_hand = /obj/item/nullrod/scythe/talking/chainsword - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/gun/energy/e_gun=1) - -/datum/outfit/centcom/ert/security/inquisitor - name = "Inquisition Security" - - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - suit_store = /obj/item/gun/energy/e_gun/hades - - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/storage/box/handcuffs=1, - /obj/item/melee/baton/loaded=1, - /obj/item/construction/rcd/loaded=1) - -/datum/outfit/centcom/ert/medic/inquisitor - name = "Inquisition Medic" - - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/melee/baton/loaded=1, - /obj/item/gun/energy/e_gun=1, - /obj/item/reagent_containers/hypospray/combat=1, - /obj/item/reagent_containers/hypospray/combat/heresypurge=1, - /obj/item/gun/medbeam=1) - -/datum/outfit/centcom/ert/chaplain - name = "ERT Chaplain" - - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor // Chap role always gets this suit - id = /obj/item/card/id/ert/chaplain - glasses = /obj/item/clothing/glasses/hud/health - back = /obj/item/storage/backpack/cultpack - belt = /obj/item/storage/belt/soulstone - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/nullrod=1, - /obj/item/gun/energy/e_gun=1, - ) - -/datum/outfit/centcom/ert/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/headset_com - R.recalculateChannels() - -/datum/outfit/centcom/ert/chaplain/inquisitor - name = "Inquisition Chaplain" - - belt = /obj/item/storage/belt/soulstone/full/chappy - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/grenade/chem_grenade/holy=1, - /obj/item/nullrod=1, - /obj/item/gun/energy/e_gun=1, - ) - /datum/outfit/centcom/ert/janitor name = "ERT Janitor" @@ -269,6 +214,8 @@ /obj/item/reagent_containers/glass/bucket=1,\ /obj/item/grenade/clusterbuster/cleaner=1) + id_role = "Janitorial Response Officer" + /datum/outfit/centcom/ert/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -289,35 +236,6 @@ /obj/item/melee/baton/loaded=1,\ /obj/item/grenade/clusterbuster/cleaner=3) -/datum/outfit/centcom/ert/clown - name = "ERT Clown" - - suit = /obj/item/clothing/suit/space/hardsuit/ert/clown - mask = /obj/item/clothing/mask/gas/clown_hat - id = /obj/item/card/id/ert/clown - glasses = /obj/item/clothing/glasses/godeye - back = /obj/item/storage/backpack/ert/clown - belt = /obj/item/storage/belt/champion - shoes = /obj/item/clothing/shoes/clown_shoes/combat - r_pocket = /obj/item/bikehorn/golden - l_pocket = /obj/item/reagent_containers/food/snacks/grown/banana - backpack_contents = list(/obj/item/storage/box/hug/survival=1,\ - /obj/item/melee/transforming/energy/sword/bananium=1,\ - /obj/item/shield/energy/bananium=1,\ - /obj/item/gun/ballistic/revolver/reverse=1) - -/datum/outfit/centcom/ert/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/headset_com - R.recalculateChannels() - ADD_TRAIT(H, TRAIT_NAIVE, INNATE_TRAIT) - H.dna.add_mutation(CLOWNMUT) - for(var/datum/mutation/human/clumsy/M in H.dna.mutations) - M.mutadone_proof = TRUE - /datum/outfit/centcom/centcom_intern name = "CentCom Intern" @@ -333,6 +251,12 @@ r_pocket = /obj/item/ammo_box/a762 id = /obj/item/card/id/centcom backpack_contents = list(/obj/item/storage/box/survival = 1) +/datum/outfit/centcom/centcom_intern/unarmed + name = "CentCom Intern (Unarmed)" + belt = null + l_hand = null + l_pocket = null + r_pocket = null /datum/outfit/centcom/centcom_intern/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) if(visualsOnly) @@ -353,6 +277,14 @@ r_hand = /obj/item/megaphone head = /obj/item/clothing/head/intern +/datum/outfit/centcom/centcom_intern/leader/unarmed // i'll be nice and let the leader keep their baton and vest + name = "CentCom Head Intern (Unarmed)" + suit_store = null + l_pocket = null + r_pocket = null + +// Marine + /datum/outfit/centcom/ert/marine name = "Marine Commander" @@ -372,6 +304,8 @@ mask = /obj/item/clothing/mask/gas/sechailer head = /obj/item/clothing/head/helmet/marine + id_role = "Emergency Response Team Commander" + /datum/outfit/centcom/ert/marine/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -419,6 +353,8 @@ belt = /obj/item/storage/belt/medical/paramedic glasses = /obj/item/clothing/glasses/hud/health/sunglasses + id_role = "Medical Response Officer" + /datum/outfit/centcom/ert/marine/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -446,6 +382,8 @@ belt = /obj/item/storage/belt/utility/full/ert glasses = /obj/item/clothing/glasses/hud/diagnostic/sunglasses + id_role = "Engineering Response Officer" + /datum/outfit/centcom/ert/marine/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -455,3 +393,88 @@ var/obj/item/radio/headset = H.ears headset.keyslot = new /obj/item/encryptionkey/headset_com headset.recalculateChannels() + +// Loss Prevention + +/datum/outfit/centcom/ert/lp + name = "ERT - Loss Prevention Security Specialist" + + head = null + implants = list(/obj/item/implant/mindshield) + ears = /obj/item/radio/headset/nanotrasen/alt + id = /obj/item/card/id/lpsec + suit_store = /obj/item/gun/energy/laser/scatter/shotty + belt = /obj/item/storage/belt/security/full + glasses = /obj/item/clothing/glasses/sunglasses + gloves = /obj/item/clothing/gloves/tackler/combat + suit = /obj/item/clothing/suit/space/hardsuit/ert/lp/sec + uniform = /obj/item/clothing/under/rank/security/head_of_security/nt/lp + shoes = /obj/item/clothing/shoes/jackboots + back = /obj/item/storage/backpack/ert/security + + box = /obj/item/storage/box/survival/security + l_pocket = /obj/item/restraints/handcuffs + r_pocket = /obj/item/kitchen/knife/combat + + backpack_contents = list(/obj/item/radio=1, /obj/item/stock_parts/cell/gun/upgraded=2, /obj/item/screwdriver=1) + + id_role = "Security Specialist" + +/datum/outfit/centcom/ert/lp/medic + name = "ERT - Loss Prevention Medical Specialist" + + head = null + uniform = /obj/item/clothing/under/rank/medical/paramedic/lp + suit = /obj/item/clothing/suit/space/hardsuit/ert/lp/med + id = /obj/item/card/id/lpmed + gloves = /obj/item/clothing/gloves/color/latex/nitrile + back = /obj/item/storage/backpack/ert/medical + belt = /obj/item/storage/belt/medical/surgery + + box = /obj/item/storage/box/survival/medical + l_pocket = /obj/item/healthanalyzer + r_pocket = /obj/item/reagent_containers/hypospray/medipen/atropine + + backpack_contents = list(/obj/item/storage/firstaid/medical=1, /obj/item/radio=1) + + id_role = "Medical Specialist" + +/datum/outfit/centcom/ert/lp/engineer + name = "ERT - Loss Prevention Engineering Specialist" + + head = null + uniform = /obj/item/clothing/under/rank/engineering/engineer/nt/lp + suit = /obj/item/clothing/suit/space/hardsuit/ert/lp/engi + id = /obj/item/card/id/lpengie + belt = /obj/item/storage/belt/utility/full + gloves = /obj/item/clothing/gloves/combat + glasses = /obj/item/clothing/glasses/welding + back = /obj/item/storage/backpack/ert/engineer + + box = /obj/item/storage/box/survival/engineer + l_pocket = /obj/item/extinguisher/mini + r_pocket = /obj/item/wrench/combat + + id_role = "Engineering Specialist" + + backpack_contents = list(/obj/item/stack/sheet/metal/fifty=1, /obj/item/stack/sheet/glass/fifty=1, /obj/item/radio=1) + +/datum/outfit/centcom/ert/lp/lieutenant + name = "ERT - Loss Prevention Lieutenant" + + head = null + ears = /obj/item/radio/headset/nanotrasen/alt/captain + id = /obj/item/card/id/lplieu + belt = /obj/item/storage/belt/military/army + gloves = /obj/item/clothing/gloves/color/black + uniform = /obj/item/clothing/under/rank/security/warden/lp + suit = /obj/item/clothing/suit/space/hardsuit/ert/lp + shoes = /obj/item/clothing/shoes/combat + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + back = /obj/item/storage/backpack/ert + + box = /obj/item/storage/box/survival/radio + l_pocket = /obj/item/megaphone/command + r_pocket = /obj/item/binoculars + + id_role = "Lieutenant" diff --git a/code/modules/clothing/outfits/ert/solgov_ert.dm b/code/modules/clothing/outfits/ert/solgov_ert.dm new file mode 100644 index 000000000000..fbae8101728d --- /dev/null +++ b/code/modules/clothing/outfits/ert/solgov_ert.dm @@ -0,0 +1,38 @@ +/datum/outfit/centcom/ert/solgov + name = "ERT - SolGov Sonnensöldner" + + id = /obj/item/card/id/solgov + uniform = /obj/item/clothing/under/solgov + suit = /obj/item/clothing/suit/armor/vest/bulletproof/solgov + mask = null + ears = /obj/item/radio/headset/solgov/alt + gloves = /obj/item/clothing/gloves/combat + head = /obj/item/clothing/head/solgov/sonnensoldner + shoes = /obj/item/clothing/shoes/workboots + back = /obj/item/storage/backpack + + box = /obj/item/storage/box/survival + l_hand = /obj/item/energyhalberd + + id_role = "Sonnensöldner" + +/datum/outfit/centcom/ert/solgov/inspector + name = "ERT - SolGov Inspector" + + uniform = /obj/item/clothing/under/solgov/formal + belt = /obj/item/clipboard + ears = /obj/item/radio/headset/solgov/captain + back = /obj/item/storage/backpack/satchel/leather + head = /obj/item/clothing/head/solgov + gloves = /obj/item/clothing/gloves/color/white + shoes = /obj/item/clothing/shoes/laceup + suit = null + suit_store = null + mask = null + glasses = null + + l_hand = null + + backpack_contents = list(/obj/item/stamp/solgov=1) + + id_role = "Inspector" diff --git a/code/modules/clothing/outfits/ert/syndicate_ert.dm b/code/modules/clothing/outfits/ert/syndicate_ert.dm new file mode 100644 index 000000000000..5ec318f41d24 --- /dev/null +++ b/code/modules/clothing/outfits/ert/syndicate_ert.dm @@ -0,0 +1,164 @@ +/datum/outfit/centcom/ert/syndicate + name = "ERT - Syndicate Basic" + + uniform = /obj/item/clothing/under/syndicate + suit = /obj/item/clothing/suit/armor/vest/syndie + suit_store = /obj/item/gun/ballistic/automatic/smg/c20r + shoes = /obj/item/clothing/shoes/combat + ears = /obj/item/radio/headset/syndicate/alt + gloves = /obj/item/clothing/gloves/color/black + id = /obj/item/card/id/syndicate_command/crew_id + mask = /obj/item/clothing/mask/gas/sechailer/minutemen + head = /obj/item/clothing/head/helmet/operator + back = /obj/item/storage/backpack/fireproof + belt = /obj/item/storage/belt/military/c20r + + r_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/grenade/frag + + implants = list(/obj/item/implant/weapons_auth) + backpack_contents = list(/obj/item/radio=1) + box = /obj/item/storage/box/survival/syndie + + id_role = "Squaddie" + +/datum/outfit/centcom/ert/syndicate/leader + name = "ERT - Syndicate Basic Leader" + + head = /obj/item/clothing/head/HoS/beret/syndicate + ears = /obj/item/radio/headset/syndicate/captain + + backpack_contents = list(/obj/item/gun/ballistic/automatic/pistol=1, /obj/item/ammo_box/magazine/m10mm=2, /obj/item/radio=1) + + id_role = "Sergeant" + +// gorlex loyalist/2nd battlegroup + +/datum/outfit/centcom/ert/syndicate/gorlex + name = "ERT - Syndicate Gorlex Loyalist Trooper" + + head = /obj/item/clothing/head/helmet/swat + uniform = /obj/item/clothing/under/syndicate/combat + suit = /obj/item/clothing/suit/armor/vest/bulletproof + belt = /obj/item/storage/belt/military/assault/m90 + back = /obj/item/storage/backpack/security + suit_store = /obj/item/gun/ballistic/automatic/smg/m90 + + id_role = "Trooper" + +/datum/outfit/centcom/ert/syndicate/gorlex/pointman + name = "ERT - Syndicate Gorlex Loyalist Pointman" + + suit_store = /obj/item/gun/ballistic/shotgun/bulldog + belt = /obj/item/storage/belt/security/webbing/bulldog + +/datum/outfit/centcom/ert/syndicate/gorlex/medic + name = "ERT - Syndicate Gorlex Loyalist Medic" + + head = /obj/item/clothing/head/soft/black + mask = null + suit = /obj/item/clothing/suit/armor/vest/alt + belt = /obj/item/storage/belt/medical/webbing/paramedic + glasses = /obj/item/clothing/glasses/hud/health/sunglasses + gloves = /obj/item/clothing/gloves/color/latex/nitrile/evil + suit_store = /obj/item/gun/ballistic/automatic/pistol + + l_pocket = /obj/item/radio + + backpack_contents = list(/obj/item/ammo_box/magazine/m10mm=2, /obj/item/storage/firstaid/medical=1, /obj/item/defibrillator/compact/combat/loaded=1) + + id_role = "Medic" + +/datum/outfit/centcom/ert/syndicate/gorlex/sniper + name = "ERT - Syndicate Gorlex Loyalist Sniper" + + head = /obj/item/clothing/head/beret/black + back = /obj/item/storage/backpack/messenger/sec + glasses = /obj/item/clothing/glasses/night + gloves = /obj/item/clothing/gloves/fingerless + suit = /obj/item/clothing/suit/armor/vest + belt = /obj/item/storage/belt/security + suit_store = /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate + + r_pocket = /obj/item/kitchen/knife/combat/survival + l_pocket = /obj/item/binoculars + + backpack_contents = list(/obj/item/ammo_box/magazine/sniper_rounds=2, /obj/item/radio=1) + + id_role = "Marksman" + +/datum/outfit/centcom/ert/syndicate/gorlex/leader + name = "ERT - Syndicate Gorlex Loyalist Sergeant" + + uniform = /obj/item/clothing/under/syndicate/gorlex + head = /obj/item/clothing/head/HoS/beret/syndicate + back = /obj/item/storage/backpack/satchel/sec + mask = /obj/item/clothing/mask/gas/sechailer + glasses = /obj/item/clothing/glasses/hud/security/night + gloves = /obj/item/clothing/gloves/tackler/combat + + l_pocket = /obj/item/megaphone/sec + + id_role = "Sergeant" + +// commandos + +/datum/outfit/centcom/ert/syndicate/cybersun + name = "ERT - Syndicate Cybersun Commando" + + head = null + uniform = /obj/item/clothing/under/syndicate/combat + belt = /obj/item/storage/belt/military/c20r + suit = /obj/item/clothing/suit/space/hardsuit/syndi/cybersun + suit_store = /obj/item/gun/ballistic/automatic/smg/c20r + ears = /obj/item/radio/headset/syndicate/alt + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + + implants = list(/obj/item/implant/adrenalin) + backpack_contents = list(/obj/item/autosurgeon/syndicate/laser_arm, /obj/item/ammo_box/magazine/m10mm=2, /obj/item/radio=1) + + id_role = "Operative" + +/datum/outfit/centcom/ert/syndicate/cybersun/leader + name = "ERT - Syndicate Cybersun Commando Leader" + + ears = /obj/item/radio/headset/syndicate/alt/captain + glasses = /obj/item/clothing/glasses/hud/security/night + + backpack_contents = list(/obj/item/autosurgeon/syndicate/laser_arm=1, /obj/item/ammo_box/magazine/m10mm=2, /obj/item/antag_spawner/nuke_ops/borg_tele/medical/unlocked=1, /obj/item/radio=1) + + id_role = "Lead Operative" + +// paramedics + +/datum/outfit/centcom/ert/syndicate/cybersun/medic + name = "ERT - Syndicate Cybersun Paramedic" + + uniform = /obj/item/clothing/under/syndicate/medic + suit = /obj/item/clothing/suit/space/hardsuit/syndi/cybersun/paramed + suit_store = /obj/item/tank/internals/oxygen + mask = /obj/item/clothing/mask/breath/medical + glasses = /obj/item/clothing/glasses/hud/health/night + gloves = /obj/item/clothing/gloves/color/latex/nitrile + head = /obj/item/clothing/head/soft/cybersun/medical + belt = /obj/item/storage/belt/medical/webbing/paramedic + back = /obj/item/storage/backpack/ert/medical + l_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/pinpointer/crew + accessory = /obj/item/clothing/accessory/holster/marine + + backpack_contents = list(/obj/item/storage/firstaid/tactical=1, /obj/item/holosign_creator/medical=1, /obj/item/radio=1) + + id_role = "Medical Technician" + +/datum/outfit/centcom/ert/syndicate/cybersun/medic/leader + name = "ERT - Syndicate Cybersun Lead Paramedic" + + head = /obj/item/clothing/head/beret/cmo + glasses = /obj/item/clothing/glasses/hud/security/night + ears = /obj/item/radio/headset/syndicate/captain + r_pocket = /obj/item/megaphone/command + + backpack_contents = list(/obj/item/storage/firstaid/tactical=1, /obj/item/holosign_creator/medical=1, /obj/item/autosurgeon/cmo=1, /obj/item/radio=1, /obj/item/antag_spawner/nuke_ops/borg_tele/medical/unlocked=1) + + id_role = "Lead Medical Technician" diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 2e1f5799a0d2..76d0da5179bc 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -164,7 +164,7 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S name = "Minuteman (Colonial Minutemen) (Armed)" suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen - belt = /obj/item/storage/belt/military/minutemen/loaded + belt = /obj/item/storage/belt/military/minutemen/p16 /datum/outfit/job/security/minutemen/mechpilot name = "Mech Pilot (Colonial Minutemen)" diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index 46970dcc5db9..4ee47c36b459 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -78,7 +78,7 @@ name = "Field Commander (Colonial Minutemen) (Armed)" suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen - belt = /obj/item/storage/belt/military/minutemen/loaded + belt = /obj/item/storage/belt/military/minutemen/p16 backpack_contents = list(/obj/item/melee/classic_baton=1, /obj/item/gun/ballistic/automatic/pistol/commander=1, /obj/item/restraints/handcuffs=1, /obj/item/gun/energy/e_gun/advtaser=1) diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm index ab7c683ec423..7efd0a579925 100644 --- a/code/modules/projectiles/guns/ballistic/smg.dm +++ b/code/modules/projectiles/guns/ballistic/smg.dm @@ -261,6 +261,9 @@ . = ..() AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) +/obj/item/gun/ballistic/automatic/smg/cm5/no_mag + spawnwithmagazine = FALSE + /obj/item/gun/ballistic/automatic/smg/aks74u name = "\improper AKS-74U" desc = "A pre-FTL era carbine, known to be incredibly cheap. Its extreme fire rate make it perfect for bandits, pirates and colonists on a budget." diff --git a/icons/effects/landmarks_static.dmi b/icons/effects/landmarks_static.dmi index 847c252bbfb65a4ab3b6923233e109e0f0c144ce..05301f14a8313341677a74718c2b6d9df943f61d 100644 GIT binary patch literal 19814 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%0Dt$x8%$wY} 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 P00000NkvXXu0mjf&3AtP diff --git a/shiptest.dme b/shiptest.dme index e648ef7a92b7..0d290538b7c7 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1684,7 +1684,6 @@ #include "code\modules\antagonists\nukeop\equipment\nuclear_challenge.dm" #include "code\modules\antagonists\nukeop\equipment\nuclearbomb.dm" #include "code\modules\antagonists\nukeop\equipment\pinpointer.dm" -#include "code\modules\antagonists\official\official.dm" #include "code\modules\antagonists\revenant\revenant.dm" #include "code\modules\antagonists\revenant\revenant_abilities.dm" #include "code\modules\antagonists\revenant\revenant_antag.dm" @@ -1951,7 +1950,6 @@ #include "code\modules\clothing\masks\hailer.dm" #include "code\modules\clothing\masks\miscellaneous.dm" #include "code\modules\clothing\neck\_neck.dm" -#include "code\modules\clothing\outfits\ert.dm" #include "code\modules\clothing\outfits\event.dm" #include "code\modules\clothing\outfits\gezena.dm" #include "code\modules\clothing\outfits\plasmaman.dm" @@ -1959,6 +1957,13 @@ #include "code\modules\clothing\outfits\standard.dm" #include "code\modules\clothing\outfits\syndicate.dm" #include "code\modules\clothing\outfits\vv_outfit.dm" +#include "code\modules\clothing\outfits\ert\frontiersmen_ert.dm" +#include "code\modules\clothing\outfits\ert\indie_ert.dm" +#include "code\modules\clothing\outfits\ert\inteq_ert.dm" +#include "code\modules\clothing\outfits\ert\minutemen_ert.dm" +#include "code\modules\clothing\outfits\ert\nanotrasen_ert.dm" +#include "code\modules\clothing\outfits\ert\solgov_ert.dm" +#include "code\modules\clothing\outfits\ert\syndicate_ert.dm" #include "code\modules\clothing\shoes\_shoes.dm" #include "code\modules\clothing\shoes\bananashoes.dm" #include "code\modules\clothing\shoes\colour.dm"