From 85d012023962204eb4a9dbb931cd38b0df3713bc Mon Sep 17 00:00:00 2001 From: meem <75212565+meemofcourse@users.noreply.github.com> Date: Wed, 17 Jan 2024 17:08:17 -0300 Subject: [PATCH 01/68] [Needs TM] Repaths and sorts outfits into factional files, Factional SecHud Icons (#2628) ## About The Pull Request This pull request does the following: * Revives https://github.com/shiptest-ss13/Shiptest/pull/2455 and https://github.com/shiptest-ss13/Shiptest/pull/2493 * Sorts every factional outfit into a base outfit. These base outfits apply a faction. * Puts factional outfits into their own files. * Adds (partial) factional backgrounds for sechud icons. ![imagen](https://github.com/shiptest-ss13/Shiptest/assets/75212565/07f7b83b-14bb-4cbf-a250-4dd16208da02) ![imagen](https://github.com/shiptest-ss13/Shiptest/assets/75212565/b32620e5-d0fe-4b59-b013-d30211f2f2aa) * Adds a new Frontiersmen ERT. The gimmick is that their equipment is randomized, for the true "when the first is killed, the second takes the rifle" experience. You could get a mounted machine gun. Or a flyswatter. ![imagen](https://github.com/shiptest-ss13/Shiptest/assets/75212565/f5f058f1-4bdf-4abd-8bef-ff6158bdfb41) * Makes Agent Cards work with SecHuds, and get overlays when using the Select Chameleon Outfit button. * Fixes the chameleon mask and goggles default icon states. ## Why It's Good For The Game Easier to sift through. IFF (2234). Support for custom SecHud icons. Actually looks pretty on the outfit manager. Sugarcube Frontiersmen Rogue-like 2024. Identity Threat+. ## Changelog :cl: MeeMOfCourse, retlaw34 tweak: Repathed almost every faction outfit, and they now apply factions upon being used. tweak: SecHud icons have been redone. Sprites by retlaw34. tweak: Descriptions of multiple clothing items. add: SecHuds now identify factions. Somewhat. add: More desperate groups of Frontiersmen have been spotted roaming the frontier. /:cl: --------- Signed-off-by: meem <75212565+meemofcourse@users.noreply.github.com> --- .../IceRuins/icemoon_surface_engioutpost.dmm | 4 +- .../JungleRuins/jungle_abandoned_library.dmm | 2 +- .../JungleRuins/jungle_paradise.dmm | 2 +- .../lavaland_surface_survivalpod.dmm | 2 +- .../RockRuins/rockplanet_miningexpedition.dmm | 2 +- .../SpaceRuins/corporate_mining.dmm | 10 +- _maps/RandomRuins/SpaceRuins/ntfacility.dmm | 2 +- _maps/RandomRuins/SpaceRuins/power_puzzle.dmm | 4 +- _maps/RandomRuins/SpaceRuins/scav_mining.dmm | 6 +- _maps/configs/independent_beluga.json | 18 +- _maps/configs/independent_box.json | 10 +- _maps/configs/independent_boyardee.json | 10 +- _maps/configs/independent_bubble.json | 10 +- _maps/configs/independent_byo.json | 4 +- _maps/configs/independent_caravan.json | 12 +- _maps/configs/independent_dwayne.json | 12 +- _maps/configs/independent_halftrack.json | 6 +- _maps/configs/independent_junker.json | 2 +- _maps/configs/independent_kilo.json | 10 +- _maps/configs/independent_lagoon.json | 26 +- _maps/configs/independent_masinyane.json | 8 +- _maps/configs/independent_meta.json | 12 +- _maps/configs/independent_mudskipper.json | 8 +- _maps/configs/independent_nemo.json | 18 +- _maps/configs/independent_rigger.json | 18 +- _maps/configs/independent_rube_goldberg.json | 12 +- _maps/configs/independent_schmiedeberg.json | 10 +- _maps/configs/independent_shepherd.json | 10 +- _maps/configs/independent_shetland.json | 24 +- _maps/configs/independent_tranquility.json | 14 +- _maps/configs/inteq_colossus.json | 12 +- _maps/configs/inteq_hound.json | 6 +- _maps/configs/inteq_talos.json | 14 +- _maps/configs/inteq_vaquero.json | 12 +- _maps/configs/minutemen_asclepius.json | 14 +- _maps/configs/minutemen_cepheus.json | 12 +- _maps/configs/minutemen_corvus.json | 8 +- _maps/configs/minutemen_vela.json | 18 +- _maps/configs/nanotrasen_delta.json | 8 +- _maps/configs/nanotrasen_gecko.json | 10 +- _maps/configs/nanotrasen_heron.json | 26 +- _maps/configs/nanotrasen_mimir.json | 6 +- _maps/configs/nanotrasen_osprey.json | 22 +- _maps/configs/nanotrasen_ranger.json | 10 +- _maps/configs/nanotrasen_skipper.json | 14 +- _maps/configs/pirate_ember.json | 34 +- _maps/configs/pirate_libertatia.json | 12 +- _maps/configs/pirate_noderider.json | 8 +- _maps/configs/srm_glaive.json | 8 +- .../independent/independent_boyardee.dmm | 150 ++-- code/__DEFINES/factions.dm | 8 + code/datums/ert.dm | 6 + code/datums/holocall.dm | 9 - .../MapData/shuttles/nanotrasen_ranger.dm | 4 +- code/game/MapData/shuttles/srm_glaive.dm | 2 +- code/game/data_huds.dm | 14 +- code/game/objects/items/cards_ids.dm | 8 +- code/game/objects/items/stunbaton.dm | 3 + .../objects/structures/ghost_role_spawners.dm | 2 +- .../structures/icemoon/cave_entrance.dm | 2 +- code/modules/antagonists/ert/ert.dm | 85 +- code/modules/awaymissions/corpse.dm | 14 +- code/modules/clothing/chameleon.dm | 45 +- code/modules/clothing/head/berets.dm | 8 +- code/modules/clothing/head/jobs.dm | 5 +- .../clothing/outfits/ert/frontiersmen_ert.dm | 114 ++- .../modules/clothing/outfits/ert/indie_ert.dm | 23 +- .../modules/clothing/outfits/ert/inteq_ert.dm | 15 +- .../clothing/outfits/ert/minutemen_ert.dm | 62 +- .../clothing/outfits/ert/nanotrasen_ert.dm | 35 +- .../clothing/outfits/ert/solgov_ert.dm | 10 +- .../clothing/outfits/ert/syndicate_ert.dm | 76 +- .../clothing/outfits/factions/frontiersmen.dm | 184 ++++ .../clothing/outfits/{ => factions}/gezena.dm | 7 +- .../clothing/outfits/factions/independent.dm | 830 ++++++++++++++++++ .../clothing/outfits/factions/inteq.dm | 195 ++++ .../clothing/outfits/factions/minutemen.dm | 352 ++++++++ .../clothing/outfits/factions/nanotrasen.dm | 546 ++++++++++++ .../clothing/outfits/factions/roumain.dm | 92 ++ .../clothing/outfits/{ => factions}/solgov.dm | 54 +- .../outfits/{ => factions}/syndicate.dm | 168 ++-- code/modules/clothing/outfits/standard.dm | 175 ---- code/modules/clothing/shoes/colour.dm | 10 +- code/modules/clothing/shoes/miscellaneous.dm | 4 +- code/modules/clothing/suits/armor.dm | 2 +- code/modules/clothing/under/jobs/cargo.dm | 2 +- code/modules/clothing/under/jobs/security.dm | 50 +- code/modules/jobs/job_types/_job.dm | 3 + code/modules/jobs/job_types/assistant.dm | 150 ---- .../jobs/job_types/atmospheric_technician.dm | 17 - code/modules/jobs/job_types/bartender.dm | 13 - code/modules/jobs/job_types/botanist.dm | 9 - code/modules/jobs/job_types/brig_physician.dm | 17 - code/modules/jobs/job_types/captain.dm | 172 ---- .../jobs/job_types/cargo_technician.dm | 23 - code/modules/jobs/job_types/chaplain.dm | 15 - code/modules/jobs/job_types/chemist.dm | 67 -- code/modules/jobs/job_types/chief_engineer.dm | 75 -- .../jobs/job_types/chief_medical_officer.dm | 52 -- code/modules/jobs/job_types/cook.dm | 20 - code/modules/jobs/job_types/curator.dm | 35 - .../jobs/job_types/head_of_personnel.dm | 75 -- .../jobs/job_types/head_of_security.dm | 66 -- code/modules/jobs/job_types/janitor.dm | 4 - code/modules/jobs/job_types/lawyer.dm | 18 - code/modules/jobs/job_types/medical_doctor.dm | 122 --- code/modules/jobs/job_types/paramedic.dm | 24 - code/modules/jobs/job_types/prisoner.dm | 13 - code/modules/jobs/job_types/quartermaster.dm | 18 - .../jobs/job_types/research_director.dm | 9 - code/modules/jobs/job_types/roboticist.dm | 18 - code/modules/jobs/job_types/scientist.dm | 6 - .../jobs/job_types/security_officer.dm | 239 ----- code/modules/jobs/job_types/shaft_miner.dm | 100 --- .../jobs/job_types/station_engineer.dm | 115 +-- code/modules/jobs/job_types/virologist.dm | 7 - code/modules/jobs/job_types/warden.dm | 61 -- .../mob/living/simple_animal/hostile/bear.dm | 4 +- .../simple_animal/hostile/frontiersman.dm | 2 +- .../living/simple_animal/hostile/syndicate.dm | 2 +- icons/mob/hud.dmi | Bin 17933 -> 19255 bytes shiptest.dme | 12 +- 122 files changed, 3017 insertions(+), 2479 deletions(-) create mode 100644 code/modules/clothing/outfits/factions/frontiersmen.dm rename code/modules/clothing/outfits/{ => factions}/gezena.dm (74%) create mode 100644 code/modules/clothing/outfits/factions/independent.dm create mode 100644 code/modules/clothing/outfits/factions/inteq.dm create mode 100644 code/modules/clothing/outfits/factions/minutemen.dm create mode 100644 code/modules/clothing/outfits/factions/nanotrasen.dm create mode 100644 code/modules/clothing/outfits/factions/roumain.dm rename code/modules/clothing/outfits/{ => factions}/solgov.dm (89%) rename code/modules/clothing/outfits/{ => factions}/syndicate.dm (89%) diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm index 634a61810c3a..4e44e6fb41e0 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm @@ -6,7 +6,7 @@ /turf/open/floor/plating/snowed/smoothed/icemoon, /area/ruin) "ac" = ( -/obj/effect/mob_spawn/human/engineer/rig, +/obj/effect/mob_spawn/human/engineer, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/overmap_encounter/planetoid/ice/explored) "ad" = ( @@ -1199,7 +1199,7 @@ /turf/open/floor/plating/ice/icemoon, /area/overmap_encounter/planetoid/ice/explored) "cU" = ( -/obj/effect/mob_spawn/human/engineer/rig, +/obj/effect/mob_spawn/human/engineer, /obj/structure/cable{ icon_state = "4-8" }, diff --git a/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm b/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm index 55783c5a5359..71b31e40d1fd 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm @@ -1564,7 +1564,7 @@ /obj/effect/mob_spawn/human/corpse/assistant{ oxy_damage = 200; name = "Dungeon Master"; - outfit = /datum/outfit/job/curator/dungeonmaster; + outfit = /datum/outfit/job/curator; backpack_contents = null }, /obj/effect/decal/cleanable/blood, diff --git a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm index f008f3c68717..cc5902f26a82 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm @@ -6481,7 +6481,7 @@ /turf/open/water/jungle, /area/overmap_encounter/planetoid/cave/explored) "Pe" = ( -/obj/effect/mob_spawn/human/miner/old, +/obj/effect/mob_spawn/human/miner, /obj/effect/decal/cleanable/vomit/old{ pixel_x = 13; pixel_y = 6 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm index bfd1d0e63d41..5e8e6a7f0dec 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm @@ -78,7 +78,7 @@ /turf/open/floor/pod/dark, /area/ruin/powered) "q" = ( -/obj/effect/mob_spawn/human/miner/explorer{ +/obj/effect/mob_spawn/human/miner{ brute_damage = 150; oxy_damage = 50 }, diff --git a/_maps/RandomRuins/RockRuins/rockplanet_miningexpedition.dmm b/_maps/RandomRuins/RockRuins/rockplanet_miningexpedition.dmm index 7586ab699883..e4f0f716266c 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_miningexpedition.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_miningexpedition.dmm @@ -264,7 +264,7 @@ /area/ruin/unpowered) "Qo" = ( /obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/human/miner/explorer, +/obj/effect/mob_spawn/human/miner, /obj/item/pickaxe, /turf/open/floor/plating/asteroid/rockplanet/lit, /area/overmap_encounter/planetoid/rockplanet/explored) diff --git a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm index 42000bba1dd9..6ed5ed67825f 100644 --- a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm +++ b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm @@ -579,12 +579,12 @@ dir = 1 }, /obj/effect/decal/cleanable/blood/gibs/bubblegum, -/obj/effect/mob_spawn/human/miner/rig, +/obj/effect/mob_spawn/human/miner, /turf/open/floor/plating/asteroid/airless, /area/ruin/space) "ns" = ( /obj/item/pickaxe/drill, -/obj/effect/mob_spawn/human/miner/rig, +/obj/effect/mob_spawn/human/miner, /turf/open/floor/plating/asteroid/airless, /area/ruin/space) "nu" = ( @@ -635,7 +635,7 @@ /turf/closed/wall/rust, /area/ruin/space/has_grav/corporatemine/crewquarters) "ol" = ( -/obj/effect/mob_spawn/human/miner/rig, +/obj/effect/mob_spawn/human/miner, /obj/item/shovel, /turf/open/floor/plating/asteroid/airless, /area/ruin/space) @@ -758,7 +758,7 @@ /area/ruin/space/has_grav/corporatemine/bridge) "rh" = ( /obj/effect/decal/cleanable/blood/old, -/obj/effect/mob_spawn/human/miner/rig, +/obj/effect/mob_spawn/human/miner, /turf/open/floor/plating/asteroid/airless, /area/ruin/space) "rk" = ( @@ -1177,7 +1177,7 @@ /turf/open/floor/plasteel/grimy, /area/ruin/space/has_grav/corporatemine/crewquarters) "Bp" = ( -/obj/effect/mob_spawn/human/miner/rig, +/obj/effect/mob_spawn/human/miner, /obj/effect/decal/cleanable/blood, /obj/item/gun/energy/kinetic_accelerator, /turf/open/floor/plating/asteroid/airless, diff --git a/_maps/RandomRuins/SpaceRuins/ntfacility.dmm b/_maps/RandomRuins/SpaceRuins/ntfacility.dmm index 738a536a7db2..d17fe7601d26 100644 --- a/_maps/RandomRuins/SpaceRuins/ntfacility.dmm +++ b/_maps/RandomRuins/SpaceRuins/ntfacility.dmm @@ -755,7 +755,7 @@ /area/ruin/powered) "rY" = ( /obj/effect/mob_spawn/human/corpse/assistant{ - outfit = /datum/outfit/job/doctor/surgeon + outfit = /datum/outfit/job/doctor }, /obj/effect/decal/cleanable/blood, /obj/effect/decal/cleanable/dirt/dust, diff --git a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm index 18d617fda53c..291fd054aa63 100644 --- a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm +++ b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm @@ -1656,7 +1656,7 @@ }, /obj/effect/turf_decal/corner/transparent/grey/diagonal, /obj/effect/mob_spawn/human/corpse/cargo_tech{ - outfit = /datum/outfit/job/engineer/nt + outfit = /datum/outfit/job/nanotrasen/engineer }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/powerpuzzle/engineering) @@ -2493,7 +2493,7 @@ dir = 9 }, /obj/effect/mob_spawn/human/corpse/cargo_tech{ - outfit = /datum/outfit/job/engineer/nt + outfit = /datum/outfit/job/nanotrasen/engineer }, /obj/item/wirecutters{ pixel_y = 15 diff --git a/_maps/RandomRuins/SpaceRuins/scav_mining.dmm b/_maps/RandomRuins/SpaceRuins/scav_mining.dmm index 53d92db8e063..48476edb1b82 100644 --- a/_maps/RandomRuins/SpaceRuins/scav_mining.dmm +++ b/_maps/RandomRuins/SpaceRuins/scav_mining.dmm @@ -243,7 +243,7 @@ /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav) "rl" = ( -/obj/effect/mob_spawn/human/miner/explorer, +/obj/effect/mob_spawn/human/miner, /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav) "rH" = ( @@ -550,12 +550,12 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/scav_mining/core) "LT" = ( -/obj/effect/mob_spawn/human/miner/explorer, +/obj/effect/mob_spawn/human/miner, /turf/open/floor/plating, /area/ruin/space/has_grav/scav_mining/dorm) "MZ" = ( /obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/human/miner/explorer, +/obj/effect/mob_spawn/human/miner, /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav) "No" = ( diff --git a/_maps/configs/independent_beluga.json b/_maps/configs/independent_beluga.json index 520b70dddc6b..64230b0dc797 100644 --- a/_maps/configs/independent_beluga.json +++ b/_maps/configs/independent_beluga.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Beluga-class Transport", - "prefix": "ISV", + "prefix": "SV", "namelists": ["CRUISE", "NATURAL"], "map_short_name": "Beluga-class", "map_path": "_maps/shuttles/independent/independent_beluga.dmm", @@ -16,37 +16,37 @@ "roundstart": true, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain", + "outfit": "/datum/outfit/job/independent/captain", "officer": true, "slots": 1 }, "First Officer": { - "outfit": "/datum/outfit/job/head_of_personnel/beluga", + "outfit": "/datum/outfit/job/independent/hop", "officer": true, "slots": 1 }, "Mechanic": { - "outfit": "/datum/outfit/job/engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Private Security Officer": { - "outfit": "/datum/outfit/job/security/inteq/beluga", + "outfit": "/datum/outfit/job/inteq/security/beluga", "slots": 2 }, "High-Class Passenger": { - "outfit": "/datum/outfit/job/lawyer/passenger", + "outfit": "/datum/outfit/job/independent/lawyer", "slots": 4 }, "Bartender": { - "outfit": "/datum/outfit/job/bartender", + "outfit": "/datum/outfit/job/independent/bartender", "slots": 1 }, "Janitor": { - "outfit": "/datum/outfit/job/janitor", + "outfit": "/datum/outfit/job/independent/janitor", "slots": 1 }, "Assistant": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 2 } }, diff --git a/_maps/configs/independent_box.json b/_maps/configs/independent_box.json index 32bb02219819..14133f03f5bb 100644 --- a/_maps/configs/independent_box.json +++ b/_maps/configs/independent_box.json @@ -12,22 +12,22 @@ "SPACE", "NATURAL" ], - "prefix": "ISV", + "prefix": "IMV", "job_slots": { "Chief Medical Officer": { - "outfit": "/datum/outfit/job/cmo", + "outfit": "/datum/outfit/job/independent/cmo", "slots": 1 }, "Medical Doctor": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/independent/doctor", "slots": 3 }, "Paramedic": { - "outfit": "/datum/outfit/job/paramedic", + "outfit": "/datum/outfit/job/independent/paramedic", "slots": 2 }, "Assistant": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 3 } }, diff --git a/_maps/configs/independent_boyardee.json b/_maps/configs/independent_boyardee.json index eacf31372fdd..f099b23952e9 100644 --- a/_maps/configs/independent_boyardee.json +++ b/_maps/configs/independent_boyardee.json @@ -18,23 +18,23 @@ "map_path": "_maps/shuttles/independent/independent_boyardee.dmm", "job_slots": { "Bartender": { - "outfit": "/datum/outfit/job/bartender", + "outfit": "/datum/outfit/job/independent/bartender", "slots": 1 }, "Cook": { - "outfit": "/datum/outfit/job/cook", + "outfit": "/datum/outfit/job/independent/cook", "slots": 3 }, "Botanist": { - "outfit": "/datum/outfit/job/botanist", + "outfit": "/datum/outfit/job/independent/botanist", "slots": 2 }, "Janitor": { - "outfit": "/datum/outfit/job/janitor", + "outfit": "/datum/outfit/job/independent/janitor", "slots": 1 }, "Waiter": { - "outfit": "/datum/outfit/job/assistant/waiter", + "outfit": "/datum/outfit/job/independent/assistant/waiter", "slots": 2 } }, diff --git a/_maps/configs/independent_bubble.json b/_maps/configs/independent_bubble.json index 5284f758d47e..f63aca854e8b 100644 --- a/_maps/configs/independent_bubble.json +++ b/_maps/configs/independent_bubble.json @@ -16,23 +16,23 @@ "limit": 1, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain", + "outfit": "/datum/outfit/job/independent/captain", "slots": 1 }, "Scientist": { - "outfit": "/datum/outfit/job/scientist", + "outfit": "/datum/outfit/job/independent/scientist", "slots": 1 }, "Station Engineer": { - "outfit": "/datum/outfit/job/engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Shaft Miner": { - "outfit": "/datum/outfit/job/miner", + "outfit": "/datum/outfit/job/independent/miner", "slots": 1 }, "Assistant": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 3 } }, diff --git a/_maps/configs/independent_byo.json b/_maps/configs/independent_byo.json index 35598191c6b5..a09aaec0ee68 100644 --- a/_maps/configs/independent_byo.json +++ b/_maps/configs/independent_byo.json @@ -15,11 +15,11 @@ "prefix": "ISV", "job_slots": { "Architect": { - "outfit": "/datum/outfit/job/engineer/hazard", + "outfit": "/datum/outfit/job/independent/ce", "slots": 1 }, "Maso-Mechanic": { - "outfit": "/datum/outfit/job/engineer/hazard", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 4 } }, diff --git a/_maps/configs/independent_caravan.json b/_maps/configs/independent_caravan.json index 55398ad6fc94..ecadbea36c51 100644 --- a/_maps/configs/independent_caravan.json +++ b/_maps/configs/independent_caravan.json @@ -18,28 +18,28 @@ "roundstart": true, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/western", + "outfit": "/datum/outfit/job/independent/captain/western", "officer": true, "slots": 1 }, "Ship's Doctor": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/independent/doctor", "slots": 1 }, "Engine Technician": { - "outfit": "/datum/outfit/job/atmos", + "outfit": "/datum/outfit/job/independent/atmos", "slots": 1 }, "Asteroid Miner": { - "outfit": "/datum/outfit/job/miner/hazard", + "outfit": "/datum/outfit/job/independent/miner", "slots": 1 }, "Fauna Researcher": { - "outfit": "/datum/outfit/job/scientist", + "outfit": "/datum/outfit/job/independent/scientist", "slots": 1 }, "Assistant": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 1 } }, diff --git a/_maps/configs/independent_dwayne.json b/_maps/configs/independent_dwayne.json index 34a353fe332e..1cd4a3683f0f 100644 --- a/_maps/configs/independent_dwayne.json +++ b/_maps/configs/independent_dwayne.json @@ -19,28 +19,28 @@ "limit": 1, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/western", + "outfit": "/datum/outfit/job/independent/captain/western", "officer": true, "slots": 1 }, "Foreman": { - "outfit": "/datum/outfit/job/quartermaster/western", + "outfit": "/datum/outfit/job/independent/quartermaster/western", "slots": 1 }, "Ship's Doctor": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/independent/doctor", "slots": 1 }, "Ship's Engineer": { - "outfit": "/datum/outfit/job/engineer/hazard", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Asteroid Miner": { - "outfit": "/datum/outfit/job/miner/hazard", + "outfit": "/datum/outfit/job/independent/miner/hazard", "slots": 2 }, "Deckhand": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 3 } }, diff --git a/_maps/configs/independent_halftrack.json b/_maps/configs/independent_halftrack.json index 0569a4c395a2..83b5e52d9d48 100644 --- a/_maps/configs/independent_halftrack.json +++ b/_maps/configs/independent_halftrack.json @@ -15,16 +15,16 @@ "map_path": "_maps/shuttles/independent/independent_halftrack.dmm", "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain", + "outfit": "/datum/outfit/job/independent/captain", "slots": 1 }, "IRMG Vanguard": { - "outfit": "/datum/outfit/job/captain/inteq", + "outfit": "/datum/outfit/job/inteq/captain", "officer": true, "slots": 1 }, "IRMG Enforcer": { - "outfit": "/datum/outfit/job/security/inteq", + "outfit": "/datum/outfit/job/inteq/security", "slots": 2 } } diff --git a/_maps/configs/independent_junker.json b/_maps/configs/independent_junker.json index e32c13b36210..c0ecc8067ba6 100644 --- a/_maps/configs/independent_junker.json +++ b/_maps/configs/independent_junker.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Junker-class Salvaged Ship", - "prefix": "ISV", + "prefix": "SV", "namelists": [ "GENERAL", "SPACE" diff --git a/_maps/configs/independent_kilo.json b/_maps/configs/independent_kilo.json index 43e2d0d62d41..b1304f2e78bb 100644 --- a/_maps/configs/independent_kilo.json +++ b/_maps/configs/independent_kilo.json @@ -16,24 +16,24 @@ "map_path": "_maps/shuttles/independent/independent_kilo.dmm", "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/western", + "outfit": "/datum/outfit/job/independent/captain/western", "officer": true, "slots": 1 }, "Ship's Doctor": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/independent/doctor", "slots": 1 }, "Ship's Engineer": { - "outfit": "/datum/outfit/job/engineer/hazard", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Asteroid Miner": { - "outfit": "/datum/outfit/job/miner/hazard", + "outfit": "/datum/outfit/job/independent/miner", "slots": 1 }, "Deckhand": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 1 } }, diff --git a/_maps/configs/independent_lagoon.json b/_maps/configs/independent_lagoon.json index 9d5535ca6232..7c733956ac1e 100644 --- a/_maps/configs/independent_lagoon.json +++ b/_maps/configs/independent_lagoon.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Lagoon-class Cruise Ship", - "prefix": "ISV", + "prefix": "SV", "description": "An unusual sight in the relatively impoverished Frontier, the Lagoon-class is a large pleasure vessel dedicated to transporting its passengers to any number of exotic locales. Lagoons found on the Frontier tend to contain crews and passengers of a particularly daring – or foolhardy – character, willing to pay out the nose for a tour of some of the most dangerous regions in known space. Accordingly, Lagoons in these regions typically include a small but respectably equipped security contingent to protect (and, when necessary, rein in) the passengers, and come with a surprisingly powerful thermo-electric generator to move the ship’s prodigious bulk across vast expanses of space.", "tags": [ "RP Focus", @@ -16,51 +16,51 @@ "starting_funds": 3000, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain", + "outfit": "/datum/outfit/job/independent/captain", "slots": 1 }, "Cruise Director": { - "outfit": "/datum/outfit/job/head_of_personnel", + "outfit": "/datum/outfit/job/independent/hop", "slots": 1 }, "Security Officer": { - "outfit": "/datum/outfit/job/security", + "outfit": "/datum/outfit/job/independent/security", "slots": 2 }, "Medical Doctor": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/independent/doctor", "slots": 1 }, "Ship Engineer": { - "outfit": "/datum/outfit/job/atmos", + "outfit": "/datum/outfit/job/independent/atmos", "slots": 1 }, "Bartender": { - "outfit": "/datum/outfit/job/bartender", + "outfit": "/datum/outfit/job/independent/bartender", "slots": 1 }, "Cook": { - "outfit": "/datum/outfit/job/cook", + "outfit": "/datum/outfit/job/independent/cook", "slots": 1 }, "Botanist": { - "outfit": "/datum/outfit/job/botanist", + "outfit": "/datum/outfit/job/independent/botanist", "slots": 1 }, "Curator": { - "outfit": "/datum/outfit/job/curator", + "outfit": "/datum/outfit/job/independent/curator", "slots": 1 }, "Chaplain": { - "outfit": "/datum/outfit/job/chaplain", + "outfit": "/datum/outfit/job/independent/chaplain", "slots": 1 }, "Janitor": { - "outfit": "/datum/outfit/job/janitor", + "outfit": "/datum/outfit/job/independent/janitor", "slots": 1 }, "Passenger": { - "outfit": "/datum/outfit/job/assistant/corporate", + "outfit": "/datum/outfit/job/independent/assistant/fancy", "slots": 10 } }, diff --git a/_maps/configs/independent_masinyane.json b/_maps/configs/independent_masinyane.json index 4407f412bc92..b9ea7215f4dc 100644 --- a/_maps/configs/independent_masinyane.json +++ b/_maps/configs/independent_masinyane.json @@ -6,7 +6,7 @@ "tags": [ "Generalist" ], - "prefix": "ISV", + "prefix": "SV", "namelists": [ "MYTHOLOGICAL", "NATURAL" @@ -14,16 +14,16 @@ "map_path": "_maps/shuttles/independent/independent_masinyane.dmm", "job_slots": { "Private Ship Owner": { - "outfit": "/datum/outfit/job/captain/independent/owner", + "outfit": "/datum/outfit/job/independent/captain/masinyane", "officer": true, "slots": 1 }, "Ship Engineer": { - "outfit": "/datum/outfit/job/engineer/independent/ship_engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Crewmate": { - "outfit": "/datum/outfit/job/assistant/independent/crewmatefancy", + "outfit": "/datum/outfit/job/independent/assistant/fancy", "slots": 1 } } diff --git a/_maps/configs/independent_meta.json b/_maps/configs/independent_meta.json index 457c116c24ef..d31cd8006262 100644 --- a/_maps/configs/independent_meta.json +++ b/_maps/configs/independent_meta.json @@ -16,27 +16,27 @@ "map_path": "_maps/shuttles/independent/independent_meta.dmm", "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain", + "outfit": "/datum/outfit/job/independent/captain", "slots": 1 }, "Quartermaster": { - "outfit": "/datum/outfit/job/quartermaster", + "outfit": "/datum/outfit/job/independent/quartermaster", "slots": 1 }, "Medical Doctor": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/independent/doctor", "slots": 1 }, "Station Engineer": { - "outfit": "/datum/outfit/job/engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Shaft Miner": { - "outfit": "/datum/outfit/job/miner", + "outfit": "/datum/outfit/job/independent/miner", "slots": 1 }, "Assistant": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 3 } }, diff --git a/_maps/configs/independent_mudskipper.json b/_maps/configs/independent_mudskipper.json index 22de128d2667..1dfd48861d13 100644 --- a/_maps/configs/independent_mudskipper.json +++ b/_maps/configs/independent_mudskipper.json @@ -19,16 +19,16 @@ "starting_funds": 1500, "job_slots": { "Salvage Leader": { - "outfit": "/datum/outfit/job/captain", + "outfit": "/datum/outfit/job/independent/captain", "officer": true, "slots": 1 }, - "Salvagee": { - "outfit": "/datum/outfit/job/engineer/independent/ship_engineer/salvage", + "Salvager": { + "outfit": "/datum/outfit/job/independent/engineer/salvage", "slots": 2 }, "Salvage Technician": { - "outfit": "/datum/outfit/job/engineer/gloved", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 } }, diff --git a/_maps/configs/independent_nemo.json b/_maps/configs/independent_nemo.json index 8733d8aa0d1e..c77883168b5e 100644 --- a/_maps/configs/independent_nemo.json +++ b/_maps/configs/independent_nemo.json @@ -18,39 +18,39 @@ "map_path": "_maps/shuttles/independent/independent_nemo.dmm", "job_slots": { "Research Director": { - "outfit": "/datum/outfit/job/rd", + "outfit": "/datum/outfit/job/independent/rd", "slots": 1 }, "Fauna Researcher": { - "outfit": "/datum/outfit/job/scientist", + "outfit": "/datum/outfit/job/independent/scientist", "slots": 1 }, "Fauna Retrieval Specialist": { - "outfit": "/datum/outfit/job/miner/scientist", + "outfit": "/datum/outfit/job/independent/miner/scientist", "slots": 1 }, "Excavator": { - "outfit": "/datum/outfit/job/miner/hazard", + "outfit": "/datum/outfit/job/independent/miner", "slots": 1 }, "Mech Pilot": { - "outfit": "/datum/outfit/job/roboticist/technician", + "outfit": "/datum/outfit/job/independent/roboticist", "slots": 1 }, "Ship Engineer": { - "outfit": "/datum/outfit/job/engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Atmospheric Technician": { - "outfit": "/datum/outfit/job/atmos", + "outfit": "/datum/outfit/job/independent/atmos", "slots": 1 }, "Curator": { - "outfit": "/datum/outfit/job/curator", + "outfit": "/datum/outfit/job/independent/curator", "slots": 1 }, "Assistant": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 1 } }, diff --git a/_maps/configs/independent_rigger.json b/_maps/configs/independent_rigger.json index 324cf75dd3ea..77b85ce0bede 100644 --- a/_maps/configs/independent_rigger.json +++ b/_maps/configs/independent_rigger.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Riggs-class Sloop", - "prefix": "SV", + "prefix": "ISV", "namelists": [ "GENERAL", "SPACE", @@ -21,37 +21,37 @@ "limit": 1, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/western", + "outfit": "/datum/outfit/job/independent/captain/western", "officer": true, "slots": 1 }, "First Mate": { - "outfit": "/datum/outfit/job/head_of_personnel/western", + "outfit": "/datum/outfit/job/independent/hop/western", "officer": true, "slots": 1 }, "Ship's Doctor": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/independent/doctor", "slots": 1 }, "Machinist's Mate": { - "outfit": "/datum/outfit/job/engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 2 }, "Asteroid Miner": { - "outfit": "/datum/outfit/job/miner/hazard", + "outfit": "/datum/outfit/job/independent/miner", "slots": 2 }, "Mech Technician": { - "outfit": "/datum/outfit/job/roboticist/technician", + "outfit": "/datum/outfit/job/independent/roboticist", "slots": 1 }, "Security Detail": { - "outfit": "/datum/outfit/job/security/western", + "outfit": "/datum/outfit/job/independent/security/western", "slots": 1 }, "Deckhand": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 4 } }, diff --git a/_maps/configs/independent_rube_goldberg.json b/_maps/configs/independent_rube_goldberg.json index 055dbc86ee68..74adc118c512 100644 --- a/_maps/configs/independent_rube_goldberg.json +++ b/_maps/configs/independent_rube_goldberg.json @@ -13,28 +13,28 @@ "limit": 1, "job_slots": { "Chief at Engineering": { - "outfit": "/datum/outfit/job/ce", + "outfit": "/datum/outfit/job/independent/ce", "officer": true, "slots": 1 }, "Chief at Boozineering": { - "outfit": "/datum/outfit/job/bartender", + "outfit": "/datum/outfit/job/independent/bartender", "slots": 1 }, "Engineering Specialist": { - "outfit": "/datum/outfit/job/engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 2 }, "Atmospheric Specialist": { - "outfit": "/datum/outfit/job/atmos", + "outfit": "/datum/outfit/job/independent/atmos", "slots": 2 }, "Medical Specialist": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/independent/doctor", "slots": 1 }, "Mining Specialist": { - "outfit": "/datum/outfit/job/miner", + "outfit": "/datum/outfit/job/independent/miner", "slots": 2 } } diff --git a/_maps/configs/independent_schmiedeberg.json b/_maps/configs/independent_schmiedeberg.json index a21435659743..d7dd360bb1e4 100644 --- a/_maps/configs/independent_schmiedeberg.json +++ b/_maps/configs/independent_schmiedeberg.json @@ -17,27 +17,27 @@ "limit": 2, "job_slots": { "Chief Pharmacist": { - "outfit": "/datum/outfit/job/cmo/pharma", + "outfit": "/datum/outfit/job/independent/cmo/pharma", "officer": true, "slots": 1 }, "Pharmacist": { - "outfit": "/datum/outfit/job/chemist/pharma", + "outfit": "/datum/outfit/job/independent/chemist/pharma", "officer": false, "slots": 1 }, "Mixologist": { - "outfit": "/datum/outfit/job/bartender/pharma", + "outfit": "/datum/outfit/job/independent/bartender/pharma", "officer": false, "slots": 1 }, "Herbalist": { - "outfit": "/datum/outfit/job/botanist/pharma", + "outfit": "/datum/outfit/job/independent/botanist/pharma", "officer": false, "slots": 2 }, "Pharmacology Student": { - "outfit": "/datum/outfit/job/assistant/pharma", + "outfit": "/datum/outfit/job/independent/assistant/pharma", "officer": false, "slots": 2 } diff --git a/_maps/configs/independent_shepherd.json b/_maps/configs/independent_shepherd.json index ce677e1d3d11..05b27bdd5e1b 100644 --- a/_maps/configs/independent_shepherd.json +++ b/_maps/configs/independent_shepherd.json @@ -9,25 +9,25 @@ "Service" ], "map_path": "_maps/shuttles/independent/independent_shepherd.dmm", - "prefix": "ISV", + "prefix": "SV", "namelists": [ "MYTHOLOGICAL" ], "job_slots": { "Chaplain": { - "outfit": "/datum/outfit/job/chaplain", + "outfit": "/datum/outfit/job/independent/chaplain", "slots": 1 }, "Curator": { - "outfit": "/datum/outfit/job/curator", + "outfit": "/datum/outfit/job/independent/curator", "slots": 1 }, "Station Engineer": { - "outfit": "/datum/outfit/job/engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Acolyte": { - "outfit": "/datum/outfit/job/assistant/intern", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 6 } }, diff --git a/_maps/configs/independent_shetland.json b/_maps/configs/independent_shetland.json index 3923bed47db5..8769559072e0 100644 --- a/_maps/configs/independent_shetland.json +++ b/_maps/configs/independent_shetland.json @@ -1,6 +1,6 @@ { "map_name": "Shetland-class Multipurpose Frigate", - "prefix": "ISV", + "prefix": "SV", "namelists": [ "GENERAL", "SPACE", @@ -18,49 +18,49 @@ "roundstart": true, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain", + "outfit": "/datum/outfit/job/independent/captain", "officer": true, "slots": 1 }, "First Mate": { - "outfit": "/datum/outfit/job/head_of_personnel", + "outfit": "/datum/outfit/job/independent/hop", "officer": true, "slots": 1 }, "Medical Doctor": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/independent/doctor", "slots": 1 }, "Paramedic": { - "outfit": "/datum/outfit/job/paramedic", + "outfit": "/datum/outfit/job/independent/paramedic", "slots": 1 }, "Ship's Engineer": { - "outfit": "/datum/outfit/job/engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Atmospheric Technician": { - "outfit": "/datum/outfit/job/atmos", + "outfit": "/datum/outfit/job/independent/atmos", "slots": 1 }, "Asteroid Miner": { - "outfit": "/datum/outfit/job/miner/hazard", + "outfit": "/datum/outfit/job/independent", "slots": 2 }, "Security Detail": { - "outfit": "/datum/outfit/job/security", + "outfit": "/datum/outfit/job/independent/security", "slots": 1 }, "Detective": { - "outfit": "/datum/outfit/job/detective", + "outfit": "/datum/outfit/job/independent/detective", "slots": 1 }, "Janitor": { - "outfit": "/datum/outfit/job/janitor", + "outfit": "/datum/outfit/job/independent/janitor", "slots": 1 }, "Deckhand": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/independent/assistant", "slots": 5 } }, diff --git a/_maps/configs/independent_tranquility.json b/_maps/configs/independent_tranquility.json index a7ddabe6e4de..07236d5e4568 100644 --- a/_maps/configs/independent_tranquility.json +++ b/_maps/configs/independent_tranquility.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Tranquility-class Flying Apartment Complex", - "prefix": "ISV", + "prefix": "SV", "namelists": [ "GENERAL", "SPACE", @@ -17,28 +17,28 @@ "map_path": "_maps/shuttles/independent/independent_tranquility.dmm", "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/western", + "outfit": "/datum/outfit/job/independent/captain/western", "officer": true, "slots": 1 }, "Scholar": { - "outfit": "/datum/outfit/job/curator/librarian", + "outfit": "/datum/outfit/job/independent/curator", "slots": 1 }, "Medical Tenant": { - "outfit": "/datum/outfit/job/chemist/pharmacologist", + "outfit": "/datum/outfit/job/independent/chemist", "slots": 1 }, "Engineering Tenant": { - "outfit": "/datum/outfit/job/engineer", + "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, "Tenant": { - "outfit": "/datum/outfit/job/curator/dungeonmaster", + "outfit": "/datum/outfit/job/independent/curator/dungeonmaster", "slots": 1 }, "Resident Artist": { - "outfit": "/datum/outfit/job/assistant/artist", + "outfit": "/datum/outfit/job/independent/assistant/artist", "slots": 1 } }, diff --git a/_maps/configs/inteq_colossus.json b/_maps/configs/inteq_colossus.json index 06a1358c3e95..29337cb015a2 100644 --- a/_maps/configs/inteq_colossus.json +++ b/_maps/configs/inteq_colossus.json @@ -18,29 +18,29 @@ "limit": 1, "job_slots": { "Vanguard": { - "outfit": "/datum/outfit/job/captain/inteq/naked", + "outfit": "/datum/outfit/job/inteq/captain", "officer": true, "slots": 1 }, "Master At Arms": { - "outfit": "/datum/outfit/job/warden/inteq", + "outfit": "/datum/outfit/job/inteq/warden", "officer": true, "slots": 1 }, "Artificer": { - "outfit": "/datum/outfit/job/engineer/inteq", + "outfit": "/datum/outfit/job/inteq/engineer", "slots": 1 }, "Corpsman": { - "outfit": "/datum/outfit/job/paramedic/inteq", + "outfit": "/datum/outfit/job/inteq/paramedic", "slots": 1 }, "Enforcer": { - "outfit": "/datum/outfit/job/security/inteq", + "outfit": "/datum/outfit/job/inteq/security", "slots": 3 }, "Recruit": { - "outfit": "/datum/outfit/job/assistant/inteq", + "outfit": "/datum/outfit/job/inteq/assistant", "slots": 5 } }, diff --git a/_maps/configs/inteq_hound.json b/_maps/configs/inteq_hound.json index 80e8349de9ec..cad19884158f 100644 --- a/_maps/configs/inteq_hound.json +++ b/_maps/configs/inteq_hound.json @@ -17,16 +17,16 @@ "limit": 2, "job_slots": { "Vanguard": { - "outfit": "/datum/outfit/job/captain/inteq/naked", + "outfit": "/datum/outfit/job/inteq/captain", "officer": true, "slots": 1 }, "Enforcer": { - "outfit": "/datum/outfit/job/security/inteq", + "outfit": "/datum/outfit/job/inteq/security", "slots": 3 }, "Recruit": { - "outfit": "/datum/outfit/job/assistant/inteq", + "outfit": "/datum/outfit/job/inteq/assistant", "slots": 3 } }, diff --git a/_maps/configs/inteq_talos.json b/_maps/configs/inteq_talos.json index c298846d55b0..e65253ad3239 100644 --- a/_maps/configs/inteq_talos.json +++ b/_maps/configs/inteq_talos.json @@ -18,34 +18,34 @@ "limit": 1, "job_slots": { "Vanguard": { - "outfit": "/datum/outfit/job/captain/inteq", + "outfit": "/datum/outfit/job/inteq/captain", "officer": true, "slots": 1 }, "Master At Arms": { - "outfit": "/datum/outfit/job/warden/inteq", + "outfit": "/datum/outfit/job/inteq/warden", "officer": true, "slots": 1 }, "Artificer Class II": { - "outfit": "/datum/outfit/job/ce/inteq", + "outfit": "/datum/outfit/job/inteq/ce", "officer": true, "slots": 1 }, "Artificer": { - "outfit": "/datum/outfit/job/engineer/inteq", + "outfit": "/datum/outfit/job/inteq/engineer", "slots": 3 }, "Corpsman": { - "outfit": "/datum/outfit/job/paramedic/inteq", + "outfit": "/datum/outfit/job/inteq/paramedic", "slots": 2 }, "Enforcer": { - "outfit": "/datum/outfit/job/security/inteq", + "outfit": "/datum/outfit/job/inteq/security", "slots": 1 }, "Recruit": { - "outfit": "/datum/outfit/job/assistant/inteq", + "outfit": "/datum/outfit/job/inteq/assistant", "slots": 4 } }, diff --git a/_maps/configs/inteq_vaquero.json b/_maps/configs/inteq_vaquero.json index 72b2ae65d257..e8d790a526dc 100644 --- a/_maps/configs/inteq_vaquero.json +++ b/_maps/configs/inteq_vaquero.json @@ -15,29 +15,29 @@ "limit": 1, "job_slots": { "Vanguard": { - "outfit": "/datum/outfit/job/captain/inteq/naked", + "outfit": "/datum/outfit/job/inteq/captain", "officer": true, "slots": 1 }, "Master At Arms": { - "outfit": "/datum/outfit/job/warden/inteq", + "outfit": "/datum/outfit/job/inteq/warden", "officer": true, "slots": 1 }, "Artificer": { - "outfit": "/datum/outfit/job/engineer/inteq", + "outfit": "/datum/outfit/job/inteq/engineer", "slots": 1 }, "Corpsman": { - "outfit": "/datum/outfit/job/paramedic/inteq", + "outfit": "/datum/outfit/job/inteq/paramedic", "slots": 1 }, "Enforcer": { - "outfit": "/datum/outfit/job/security/inteq", + "outfit": "/datum/outfit/job/inteq/security", "slots": 1 }, "Recruit": { - "outfit": "/datum/outfit/job/assistant/inteq", + "outfit": "/datum/outfit/job/inteq/assistant", "slots": 2 } }, diff --git a/_maps/configs/minutemen_asclepius.json b/_maps/configs/minutemen_asclepius.json index 6923097d0447..3877d1e24549 100644 --- a/_maps/configs/minutemen_asclepius.json +++ b/_maps/configs/minutemen_asclepius.json @@ -17,32 +17,32 @@ "limit": 1, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/minutemen", + "outfit": "/datum/outfit/job/minutemen/captain", "officer": true, "slots": 1 }, "Mechanic": { - "outfit": "/datum/outfit/job/engineer/minutemen", + "outfit": "/datum/outfit/job/minutemen/engineer", "slots": 1 }, "Minuteman": { - "outfit": "/datum/outfit/job/security/minutemen", + "outfit": "/datum/outfit/job/minutemen/security", "slots": 1 }, "Cadet": { - "outfit": "/datum/outfit/job/assistant/minutemen", + "outfit": "/datum/outfit/job/minutemen/assistant", "slots": 3 }, "Field Medic": { - "outfit": "/datum/outfit/job/doctor/minutemen", + "outfit": "/datum/outfit/job/minutemen/doctor", "slots": 3 }, "Paramedic":{ - "outfit": "/datum/outfit/job/paramedic/minutemen", + "outfit": "/datum/outfit/job/minutemen/paramedic", "slots": 2 }, "Chemist":{ - "outfit": "/datum/outfit/job/chemist/minutemen", + "outfit": "/datum/outfit/job/minutemen/chemist", "slots": 1 } }, diff --git a/_maps/configs/minutemen_cepheus.json b/_maps/configs/minutemen_cepheus.json index c82468a59349..e9b51f1b3a02 100644 --- a/_maps/configs/minutemen_cepheus.json +++ b/_maps/configs/minutemen_cepheus.json @@ -15,28 +15,28 @@ "limit": 1, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/minutemen", + "outfit": "/datum/outfit/job/minutemen/captain", "officer": true, "slots": 1 }, "Mechanic": { - "outfit": "/datum/outfit/job/engineer/minutemen", + "outfit": "/datum/outfit/job/minutemen/engineer", "slots": 1 }, "Minuteman": { - "outfit": "/datum/outfit/job/security/minutemen", + "outfit": "/datum/outfit/job/minutemen/security", "slots": 2 }, "Mech Pilot" :{ - "outfit": "/datum/outfit/job/security/minutemen/mechpilot", + "outfit": "/datum/outfit/job/minutemen/security/mech_pilot", "slots": 2 }, "Roboticist": { - "outfit": "/datum/outfit/job/roboticist/technician/minutemen", + "outfit": "/datum/outfit/job/minutemen/roboticist", "slots": 1 }, "Cadet": { - "outfit": "/datum/outfit/job/assistant/minutemen", + "outfit": "/datum/outfit/job/minutemen/assistant", "slots": 3 } }, diff --git a/_maps/configs/minutemen_corvus.json b/_maps/configs/minutemen_corvus.json index 1080c81f59a4..502a67ce6b03 100644 --- a/_maps/configs/minutemen_corvus.json +++ b/_maps/configs/minutemen_corvus.json @@ -16,20 +16,20 @@ "limit": 2, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/minutemen", + "outfit": "/datum/outfit/job/minutemen/captain", "officer": true, "slots": 1 }, "Mechanic": { - "outfit": "/datum/outfit/job/engineer/minutemen", + "outfit": "/datum/outfit/job/minutemen/engineer", "slots": 1 }, "Minuteman": { - "outfit": "/datum/outfit/job/security/minutemen", + "outfit": "/datum/outfit/job/minutemen/security", "slots": 2 }, "Cadet": { - "outfit": "/datum/outfit/job/assistant/minutemen", + "outfit": "/datum/outfit/job/minutemen/assistant", "slots": 2 } }, diff --git a/_maps/configs/minutemen_vela.json b/_maps/configs/minutemen_vela.json index eed473a983ff..e7ea8ba86df4 100644 --- a/_maps/configs/minutemen_vela.json +++ b/_maps/configs/minutemen_vela.json @@ -15,41 +15,41 @@ "limit": 1, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/minutemen", + "outfit": "/datum/outfit/job/minutemen/captain", "officer": true, "slots": 1 }, "Foreman": { - "outfit": "/datum/outfit/job/ce/minutemen", + "outfit": "/datum/outfit/job/minutemen/ce", "officer": true, "slots": 1 }, "Bridge Officer": { - "outfit": "/datum/outfit/job/head_of_personnel/minutemen", + "outfit": "/datum/outfit/job/minutemen/head_of_personnel", "slots": 1 }, "Mech Pilot": { - "outfit": "/datum/outfit/job/miner/hazard/minutemen", + "outfit": "/datum/outfit/job/minutemen/miner", "slots": 4 }, "Mech Technician": { - "outfit": "/datum/outfit/job/roboticist/technician/minutemen", + "outfit": "/datum/outfit/job/minutemen/roboticist", "slots": 2 }, "Engineer": { - "outfit": "/datum/outfit/job/engineer/minutemen", + "outfit": "/datum/outfit/job/minutemen/engineer", "slots": 2 }, "Minuteman": { - "outfit": "/datum/outfit/job/security/minutemen", + "outfit": "/datum/outfit/job/minutemen/security", "slots": 2 }, "Scientist": { - "outfit": "/datum/outfit/job/scientist/minutemen", + "outfit": "/datum/outfit/job/minutemen/scientist", "slots": 2 }, "Cadet": { - "outfit": "/datum/outfit/job/assistant/minutemen", + "outfit": "/datum/outfit/job/minutemen/assistant", "slots": 1 } }, diff --git a/_maps/configs/nanotrasen_delta.json b/_maps/configs/nanotrasen_delta.json index 749e0240a6ba..f367497a820e 100644 --- a/_maps/configs/nanotrasen_delta.json +++ b/_maps/configs/nanotrasen_delta.json @@ -19,20 +19,20 @@ "starting_funds": 4000, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/nt", + "outfit": "/datum/outfit/job/nanotrasen/captain", "officer": true, "slots": 1 }, "Roboticist": { - "outfit": "/datum/outfit/job/roboticist", + "outfit": "/datum/outfit/job/nanotrasen/roboticist", "slots": 2 }, "Engineer": { - "outfit": "/datum/outfit/job/engineer/nt", + "outfit": "/datum/outfit/job/nanotrasen/engineer", "slots": 1 }, "Assistant": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/nanotrasen/assistant", "slots": 3 } }, diff --git a/_maps/configs/nanotrasen_gecko.json b/_maps/configs/nanotrasen_gecko.json index 1a8e59f73ece..9ba0672f03db 100644 --- a/_maps/configs/nanotrasen_gecko.json +++ b/_maps/configs/nanotrasen_gecko.json @@ -18,25 +18,25 @@ "starting_funds": 5000, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/nt", + "outfit": "/datum/outfit/job/nanotrasen/captain", "officer": true, "slots": 1 }, "Operations Chief": { - "outfit": "/datum/outfit/job/ce", + "outfit": "/datum/outfit/job/nanotrasen/ce", "officer": true, "slots": 1 }, "Engine Technician": { - "outfit": "/datum/outfit/job/engineer/nt", + "outfit": "/datum/outfit/job/nanotrasen/engineer", "slots": 2 }, "Salvage Technician": { - "outfit": "/datum/outfit/job/miner/classic", + "outfit": "/datum/outfit/job/nanotrasen/miner", "slots": 2 }, "Deckhand": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/nanotrasen/assistant", "slots": 4 } }, diff --git a/_maps/configs/nanotrasen_heron.json b/_maps/configs/nanotrasen_heron.json index fbe11a792000..80bf87c0cd15 100644 --- a/_maps/configs/nanotrasen_heron.json +++ b/_maps/configs/nanotrasen_heron.json @@ -10,60 +10,60 @@ "limit": 1, "job_slots": { "Fleet Captain": { - "outfit": "/datum/outfit/job/captain/nt/heron", + "outfit": "/datum/outfit/job/nanotrasen/captain/centcom", "officer": true, "slots": 1 }, "First Officer": { - "outfit": "/datum/outfit/job/head_of_personnel/nt", + "outfit": "/datum/outfit/job/nanotrasen/hop", "officer": true, "slots": 1 }, "Head of Security": { - "outfit": "/datum/outfit/job/hos/nanotrasen", + "outfit": "/datum/outfit/job/nanotrasen/hos", "officer": true, "slots": 1 }, "Pilot": { - "outfit": "/datum/outfit/job/head_of_personnel/pilot/heron", + "outfit": "/datum/outfit/job/nanotrasen/pilot", "officer": true, "slots": 1 }, "Security Officer": { - "outfit": "/datum/outfit/job/security/nanotrasen", + "outfit": "/datum/outfit/job/nanotrasen/security", "slots": 1 }, "ERT Officer":{ - "outfit": "/datum/outfit/job/security/nanotrasen/ert", + "outfit": "/datum/outfit/job/nanotrasen/security/ert", "slots": 4 }, "ERT Medical Officer":{ - "outfit": "/datum/outfit/job/security/nanotrasen/ert/med", + "outfit": "/datum/outfit/job/nanotrasen/security/ert/med", "slots": 1 }, "ERT Engineering Officer":{ - "outfit": "/datum/outfit/job/security/nanotrasen/ert/engi", + "outfit": "/datum/outfit/job/nanotrasen/security/ert/engi", "slots": 1 }, "Mech Pilot":{ - "outfit": "/datum/outfit/job/security/nanotrasen/mech_pilot", + "outfit": "/datum/outfit/job/nanotrasen/security/mech_pilot", "slots": 1 }, "Engine Technician": { - "outfit": "/datum/outfit/job/engineer/nt", + "outfit": "/datum/outfit/job/nanotrasen/engineer", "slots": 1 }, "Chief Engineer":{ - "outfit": "/datum/outfit/job/ce/nt", + "outfit": "/datum/outfit/job/nanotrasen/ce", "officer": true, "slots": 1 }, "Roboticist": { - "outfit":"/datum/outfit/job/roboticist/heron", + "outfit":"/datum/outfit/job/nanotrasen/roboticist", "slots": 1 }, "Medical Doctor":{ - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/nanotrasen/doctor", "slots": 1 }, diff --git a/_maps/configs/nanotrasen_mimir.json b/_maps/configs/nanotrasen_mimir.json index 273d17ad5705..db7d8b90d198 100644 --- a/_maps/configs/nanotrasen_mimir.json +++ b/_maps/configs/nanotrasen_mimir.json @@ -19,16 +19,16 @@ "limit": 1, "job_slots": { "Warden": { - "outfit": "/datum/outfit/job/warden", + "outfit": "/datum/outfit/job/nanotrasen/warden", "officer": true, "slots": 1 }, "Facility Security Officer": { - "outfit": "/datum/outfit/job/security", + "outfit": "/datum/outfit/job/nanotrasen/security", "slots": 2 }, "Facility Physician": { - "outfit": "/datum/outfit/job/brig_phys", + "outfit": "/datum/outfit/job/nanotrasen/brig_phys", "slots": 1 }, "Patient": { diff --git a/_maps/configs/nanotrasen_osprey.json b/_maps/configs/nanotrasen_osprey.json index d88127f1a177..7e0804a7f203 100644 --- a/_maps/configs/nanotrasen_osprey.json +++ b/_maps/configs/nanotrasen_osprey.json @@ -16,45 +16,45 @@ "starting_funds": 4000, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/nt", + "outfit": "/datum/outfit/job/nanotrasen/captain", "officer": true, "slots": 1 }, "First Officer": { - "outfit": "/datum/outfit/job/head_of_personnel/nt", + "outfit": "/datum/outfit/job/nanotrasen/hop", "officer": true, "slots": 1 }, "Scientist": { - "outfit": "/datum/outfit/job/scientist", + "outfit": "/datum/outfit/job/nanotrasen/scientist", "slots": 2 }, "Medical Doctor": { - "outfit": "/datum/outfit/job/doctor", + "outfit": "/datum/outfit/job/nanotrasen/doctor", "slots": 1 }, "Paramedic": { - "outfit": "/datum/outfit/job/paramedic", + "outfit": "/datum/outfit/job/nanotrasen/paramedic", "slots": 1 }, "Engineer": { - "outfit": "/datum/outfit/job/engineer/nt", + "outfit": "/datum/outfit/job/nanotrasen/engineer", "slots": 1 }, "Atmospheric Technician": { - "outfit": "/datum/outfit/job/atmos", + "outfit": "/datum/outfit/job/nanotrasen/atmos", "slots": 1 }, "Quartermaster": { - "outfit": "/datum/outfit/job/quartermaster", + "outfit": "/datum/outfit/job/nanotrasen/quartermaster", "slots": 1 }, "Cargo Technician": { - "outfit": "/datum/outfit/job/cargo_tech", + "outfit": "/datum/outfit/job/nanotrasen/cargo_tech", "slots": 1 }, "Shaft Miner": { - "outfit": "/datum/outfit/job/miner/classic", + "outfit": "/datum/outfit/job/nanotrasen/miner", "slots": 1 }, "Cook": { @@ -66,7 +66,7 @@ "slots": 1 }, "Assistant": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/nanotrasen/assistant", "slots": 3 } }, diff --git a/_maps/configs/nanotrasen_ranger.json b/_maps/configs/nanotrasen_ranger.json index 6c2d24f439f9..b4af3e797d39 100644 --- a/_maps/configs/nanotrasen_ranger.json +++ b/_maps/configs/nanotrasen_ranger.json @@ -22,24 +22,24 @@ "limit": 1, "job_slots": { "LP Lieutenant": { - "outfit": "/datum/outfit/job/captain/nt/lp_lieutenant", + "outfit": "/datum/outfit/job/nanotrasen/captain/lp", "officer": true, "slots": 1 }, "LP Engineering Specialist": { - "outfit": "/datum/outfit/job/engineer/lp", + "outfit": "/datum/outfit/job/nanotrasen/engineer/lp", "slots": 1 }, "LP Security Specialist": { - "outfit": "/datum/outfit/job/security/lp", + "outfit": "/datum/outfit/job/nanotrasen/security/lp", "slots": 1 }, "LP Medical Specialist": { - "outfit": "/datum/outfit/job/doctor/lp", + "outfit": "/datum/outfit/job/nanotrasen/doctor/lp", "slots": 1 }, "Intern": { - "outfit": "/datum/outfit/job/assistant", + "outfit": "/datum/outfit/job/nanotrasen/assistant", "slots": 1 } }, diff --git a/_maps/configs/nanotrasen_skipper.json b/_maps/configs/nanotrasen_skipper.json index 0b3d24ec9918..9ced4c28038c 100644 --- a/_maps/configs/nanotrasen_skipper.json +++ b/_maps/configs/nanotrasen_skipper.json @@ -20,35 +20,35 @@ "roundstart": true, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/nt", + "outfit": "/datum/outfit/job/nanotrasen/captain", "officer": true, "slots": 1 }, "First Officer": { - "outfit": "/datum/outfit/job/head_of_personnel/nt", + "outfit": "/datum/outfit/job/nanotrasen/hop", "officer": true, "slots": 1 }, "Internal Affairs Agent": { - "outfit": "/datum/outfit/job/lawyer/corporaterepresentative", + "outfit": "/datum/outfit/job/nanotrasen/lawyer/corporaterepresentative", "slots" : 1 }, "Medical Doctor": 1, "Engineer": { - "outfit": "/datum/outfit/job/engineer/nt", + "outfit": "/datum/outfit/job/nanotrasen/engineer", "slots": 1 }, "Atmospheric Technician": { - "outfit": "/datum/outfit/job/atmos", + "outfit": "/datum/outfit/job/nanotrasen/atmos", "slots": 1 }, "Shaft Miner": 2, "Cargo Technician": { - "outfit": "/datum/outfit/job/cargo_tech", + "outfit": "/datum/outfit/job/nanotrasen/cargo_tech", "slots": 1 }, "Security Officer": { - "outfit": "/datum/outfit/job/security/nanotrasen", + "outfit": "/datum/outfit/job/nanotrasen/security", "slots": 1 }, "Cook": { diff --git a/_maps/configs/pirate_ember.json b/_maps/configs/pirate_ember.json index 52b511afefe1..29a45c64cd6c 100644 --- a/_maps/configs/pirate_ember.json +++ b/_maps/configs/pirate_ember.json @@ -18,51 +18,51 @@ "limit": 1, "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/frontiersmen", + "outfit": "/datum/outfit/job/frontiersmen/captain", "officer": true, "slots": 1 }, "Bridge Officer": { - "outfit": "/datum/outfit/job/head_of_personnel/frontiersmen", + "outfit": "/datum/outfit/job/frontiersmen/hop", "officer": true, "slots": 2 }, - "Master At Arms": { - "outfit": "/datum/outfit/job/hos/frontiersmen", + "Shipswain": { + "outfit": "/datum/outfit/job/frontiersmen/hos", "officer": true, "slots": 1 }, - "Head Carpenter" :{ - "outfit": "/datum/outfit/job/ce/frontiersmen", + "Senior Sapper" :{ + "outfit": "/datum/outfit/job/frontiersmen/ce", "officer": true, "slots": 1 }, "Cargo Tech": { - "outfit": "/datum/outfit/job/cargo_tech/frontiersmen", + "outfit": "/datum/outfit/job/frontiersmen/cargo_tech", "slots": 2 }, - "Surgeon": { - "outfit": "/datum/outfit/job/doctor/frontiersmen", + "Aidman": { + "outfit": "/datum/outfit/job/frontiersmen/doctor", "slots": 1 }, - "Carpenter": { - "outfit": "/datum/outfit/job/engineer/independent/frontiersmen", + "Sapper": { + "outfit": "/datum/outfit/job/frontiersmen/engineer", "slots": 2 }, "Atmospheric Technician": { - "outfit": "/datum/outfit/job/atmos/frontiersmen", + "outfit": "/datum/outfit/job/frontiersmen/atmos", "slots": 1 }, "Steward": { - "outfit": "/datum/outfit/job/cook/frontiersmen", + "outfit": "/datum/outfit/job/frontiersmen/cook", "slots": 1 }, - "Deckhand": { - "outfit": "/datum/outfit/job/assistant/frontiersmen", + "Boarder": { + "outfit": "/datum/outfit/job/frontiersmen/security", "slots": 3 }, - "Buccaneer": { - "outfit": "/datum/outfit/job/security/Frontiersmen", + "Rookie": { + "outfit": "/datum/outfit/job/frontiersmen/assistant", "slots": 3 } }, diff --git a/_maps/configs/pirate_libertatia.json b/_maps/configs/pirate_libertatia.json index 1dd3654a93f7..f61e421b0952 100644 --- a/_maps/configs/pirate_libertatia.json +++ b/_maps/configs/pirate_libertatia.json @@ -14,29 +14,29 @@ ], "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/captain/pirate", + "outfit": "/datum/outfit/job/independent/captain/pirate", "officer": true, "slots": 1 }, "First Mate": { - "outfit": "/datum/outfit/job/head_of_personnel/pirate", + "outfit": "/datum/outfit/job/independent/hop/pirate", "officer": true, "slots": 1 }, "Buccaneer": { - "outfit": "/datum/outfit/job/security/pirate", + "outfit": "/datum/outfit/job/independent/security/pirate", "slots": 2 }, "Motorman": { - "outfit": "/datum/outfit/job/engineer/pirate", + "outfit": "/datum/outfit/job/independent/engineer/pirate", "slots": 1 }, "Ship's Doctor": { - "outfit": "/datum/outfit/job/doctor/pirate", + "outfit": "/datum/outfit/job/independent/doctor/pirate", "slots": 1 }, "Deckhand": { - "outfit": "/datum/outfit/job/assistant/pirate", + "outfit": "/datum/outfit/job/independent/assistant/pirate", "slots": 4 } }, diff --git a/_maps/configs/pirate_noderider.json b/_maps/configs/pirate_noderider.json index c46b88bee91b..1341a6197635 100644 --- a/_maps/configs/pirate_noderider.json +++ b/_maps/configs/pirate_noderider.json @@ -17,20 +17,20 @@ ], "job_slots": { "Command Node": { - "outfit": "/datum/outfit/job/captain/aipirate", + "outfit": "/datum/outfit/job/independent/captain/pirate/jupiter", "officer": true, "slots": 1 }, "Assault Node": { - "outfit": "/datum/outfit/job/security/aipirate", + "outfit": "/datum/outfit/job/independent/security/pirate/jupiter", "slots": 2 }, "Engineering Node": { - "outfit": "/datum/outfit/job/engineer/aipirate", + "outfit": "/datum/outfit/job/independent/engineer/pirate/jupiter", "slots": 1 }, "Fodder": { - "outfit": "/datum/outfit/job/assistant/aipirate", + "outfit": "/datum/outfit/job/independent/assistant/pirate/jupiter", "slots": 2 } }, diff --git a/_maps/configs/srm_glaive.json b/_maps/configs/srm_glaive.json index f71c8b2398fc..1c4cb6f91f86 100644 --- a/_maps/configs/srm_glaive.json +++ b/_maps/configs/srm_glaive.json @@ -18,20 +18,20 @@ "limit": 1, "job_slots": { "Hunter Montagne": { - "outfit": "/datum/outfit/job/hos/roumain", + "outfit": "/datum/outfit/job/roumain/captain", "officer": true, "slots": 1 }, "Hunter Doctor": { - "outfit": "/datum/outfit/job/doctor/roumain", + "outfit": "/datum/outfit/job/roumain/doctor", "slots": 1 }, "Hunter": { - "outfit": "/datum/outfit/job/security/roumain", + "outfit": "/datum/outfit/job/roumain/security", "slots": 3 }, "Shadow": { - "outfit": "/datum/outfit/job/assistant/roumain", + "outfit": "/datum/outfit/job/roumain/assistant", "slots": 3 } }, diff --git a/_maps/shuttles/independent/independent_boyardee.dmm b/_maps/shuttles/independent/independent_boyardee.dmm index aa0360e74c32..20a0cacad9ac 100644 --- a/_maps/shuttles/independent/independent_boyardee.dmm +++ b/_maps/shuttles/independent/independent_boyardee.dmm @@ -14,7 +14,7 @@ "as" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/layer4, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) "az" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -36,7 +36,7 @@ icon_state = "4-8" }, /turf/open/floor/plasteel/mono, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "cc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -85,7 +85,7 @@ /obj/item/reagent_containers/food/condiment/flour, /obj/item/reagent_containers/food/condiment/sugar, /turf/open/floor/plasteel/mono, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "cC" = ( /turf/closed/wall/r_wall, /area/ship/crew/canteen) @@ -131,7 +131,7 @@ dir = 1 }, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "di" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck/kotahi, @@ -236,7 +236,7 @@ }, /obj/machinery/airalarm/directional/north, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "ep" = ( /obj/effect/turf_decal/corner/opaque/blue{ dir = 1 @@ -251,7 +251,7 @@ icon_state = "0-8" }, /turf/open/floor/plasteel/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "ev" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -277,7 +277,7 @@ }, /obj/effect/turf_decal/box, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "eG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 @@ -362,7 +362,7 @@ dir = 9 }, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "gq" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -372,7 +372,7 @@ "gL" = ( /obj/effect/turf_decal/number/two, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) "gQ" = ( /obj/machinery/door/airlock/external/glass{ dir = 4; @@ -388,13 +388,13 @@ /obj/effect/turf_decal/box, /obj/machinery/firealarm/directional/south, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "hl" = ( /obj/effect/turf_decal/ihejirika_small/left{ dir = 8 }, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) "hs" = ( /obj/structure/table/glass, /obj/machinery/plantgenes, @@ -405,7 +405,7 @@ dir = 8 }, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) "hJ" = ( /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/siding/wood{ @@ -510,7 +510,7 @@ }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "kC" = ( /obj/machinery/light_switch{ dir = 1; @@ -518,7 +518,7 @@ pixel_y = -20 }, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "kM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -617,7 +617,7 @@ /obj/item/spacecash/bundle/c1000, /obj/item/spacecash/bundle/c1000, /turf/open/floor/plasteel/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "me" = ( /obj/structure/window/reinforced/spawner/west, /obj/machinery/power/smes/shuttle/precharged{ @@ -642,7 +642,7 @@ }, /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "mk" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 @@ -694,14 +694,14 @@ }, /obj/item/reagent_containers/glass/beaker/large, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "np" = ( /obj/structure/table/reinforced, /obj/machinery/microwave, /obj/effect/turf_decal/box, /obj/effect/turf_decal/corner/opaque/white/half, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "ny" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -730,12 +730,9 @@ }, /turf/open/floor/plating, /area/ship/maintenance) -"nZ" = ( -/turf/closed/wall, -/area/ship/external) "of" = ( /turf/closed/wall/r_wall, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "om" = ( /obj/structure/cable{ icon_state = "2-8" @@ -788,7 +785,7 @@ dir = 1 }, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "pt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/structure/cable{ @@ -803,7 +800,7 @@ "px" = ( /obj/machinery/status_display/shuttle, /turf/closed/wall/r_wall, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "pN" = ( /obj/machinery/atmospherics/components/binary/valve/digital, /obj/structure/cable{ @@ -972,7 +969,7 @@ dir = 1 }, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "rC" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -986,7 +983,7 @@ canhear_range = 5 }, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "rH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/structure/cable{ @@ -1136,7 +1133,7 @@ /obj/effect/turf_decal/box, /obj/item/radio/intercom/directional/west, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "vi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -1182,7 +1179,7 @@ }, /obj/machinery/holopad/emergency/kitchen, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "wF" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -1246,7 +1243,7 @@ }, /obj/item/storage/bag/tray, /turf/open/floor/plasteel/mono, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "xr" = ( /obj/machinery/door/poddoor{ id = "windowlockdown" @@ -1277,7 +1274,7 @@ dir = 10 }, /turf/open/floor/plasteel/mono, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "xO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -1305,7 +1302,7 @@ /area/ship/crew/canteen) "yi" = ( /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) "yk" = ( /obj/machinery/door/poddoor{ id = "cargoblastdoors" @@ -1384,7 +1381,7 @@ icon_state = "1-2" }, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "zu" = ( /obj/machinery/gibber, /obj/machinery/power/apc/auto_name/directional/west, @@ -1458,7 +1455,7 @@ dir = 8 }, /turf/open/floor/plasteel/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "AF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 @@ -1501,7 +1498,7 @@ "BC" = ( /obj/effect/turf_decal/number/zero, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) "BE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -1551,7 +1548,7 @@ }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "CP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -1596,7 +1593,7 @@ /obj/effect/turf_decal/box, /obj/item/stack/sheet/mineral/coal/ten, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Df" = ( /obj/machinery/power/shuttle/engine/electric{ dir = 4 @@ -1647,7 +1644,7 @@ }, /obj/effect/turf_decal/corner/opaque/white, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "DA" = ( /obj/machinery/vending/wardrobe/chef_wardrobe, /obj/machinery/light/directional/south, @@ -1659,7 +1656,7 @@ }, /obj/effect/turf_decal/box, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "DC" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -1804,7 +1801,7 @@ dir = 1 }, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Fe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -1850,7 +1847,7 @@ }, /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "FD" = ( /obj/machinery/cryopod{ dir = 1 @@ -1876,7 +1873,7 @@ /area/ship/crew/canteen) "FN" = ( /turf/closed/wall, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "FR" = ( /obj/structure/cable{ icon_state = "1-8" @@ -1970,7 +1967,7 @@ /obj/machinery/light/directional/west, /obj/machinery/newscaster/directional/north, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "HD" = ( /obj/machinery/power/terminal{ dir = 8 @@ -2030,7 +2027,7 @@ dir = 8 }, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) "IQ" = ( /obj/machinery/hydroponics/constructable{ layer = 2 @@ -2105,7 +2102,7 @@ pixel_y = 7 }, /turf/open/floor/plasteel/mono, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Kl" = ( /obj/effect/turf_decal/box, /obj/machinery/vending/hydronutrients, @@ -2137,7 +2134,7 @@ /obj/item/table_bell, /obj/item/reagent_containers/food/condiment/enzyme, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Lg" = ( /obj/machinery/door/airlock/external{ dir = 4 @@ -2146,7 +2143,7 @@ /area/ship/crew/canteen) "Lj" = ( /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "LI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -2170,13 +2167,13 @@ dir = 1 }, /turf/open/floor/plasteel/mono, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Mp" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Ng" = ( /obj/machinery/vending/wardrobe/bar_wardrobe, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -2186,7 +2183,7 @@ dir = 1 }, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Nr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 @@ -2217,7 +2214,7 @@ icon_state = "4-8" }, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "NM" = ( /turf/open/floor/plasteel/mono/dark, /area/ship/crew/canteen) @@ -2238,7 +2235,7 @@ "Of" = ( /obj/effect/turf_decal/number/five, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) "OI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -2259,28 +2256,7 @@ dir = 8 }, /turf/open/floor/plasteel/dark, -/area/ship/bridge) -"Pd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/airlock/freezer{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/area/ship/crew/canteen/kitchen) "Qc" = ( /obj/structure/table/reinforced, /obj/effect/spawner/lootdrop/ration, @@ -2288,7 +2264,7 @@ icon_state = "4-8" }, /turf/open/floor/plasteel/mono, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Qm" = ( /obj/machinery/door/window/eastright, /obj/structure/extinguisher_cabinet/directional/north, @@ -2303,7 +2279,7 @@ icon_state = "1-2" }, /turf/open/floor/plasteel/mono, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Qu" = ( /obj/machinery/atmospherics/components/binary/pump/on/layer2{ name = "Air to Distro"; @@ -2363,7 +2339,7 @@ icon_state = "2-8" }, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "RU" = ( /obj/structure/bed, /obj/item/bedsheet/dorms, @@ -2389,7 +2365,7 @@ /area/ship/crew/canteen) "Sf" = ( /turf/open/floor/plasteel/mono, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Si" = ( /obj/structure/reagent_dispensers/cooking_oil, /obj/structure/cable{ @@ -2411,7 +2387,7 @@ icon_state = "2-4" }, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Ss" = ( /obj/machinery/door/airlock, /turf/open/floor/plasteel/patterned, @@ -2469,7 +2445,7 @@ port_direction = 4 }, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) "To" = ( /obj/item/radio, /obj/item/radio, @@ -2546,7 +2522,7 @@ /obj/effect/turf_decal/box, /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Uq" = ( /obj/machinery/power/shuttle/engine/fueled/plasma{ dir = 4 @@ -2658,7 +2634,7 @@ dir = 4 }, /turf/open/floor/plasteel/mono/white, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Wf" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/carpet/red_gold, @@ -2821,7 +2797,7 @@ }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Zm" = ( /obj/machinery/door/airlock{ dir = 4 @@ -2839,7 +2815,7 @@ dir = 8 }, /turf/open/floor/plasteel/dark, -/area/ship/bridge) +/area/ship/crew/canteen/kitchen) "Zn" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -2936,7 +2912,7 @@ Df Df Uq Uq -nZ +dV hl IC hA @@ -3209,9 +3185,9 @@ UI sg zu sg -Pd -uR -JR +dZ +sg +Au vZ "} (17,1,1) = {" diff --git a/code/__DEFINES/factions.dm b/code/__DEFINES/factions.dm index a6fbc5c87546..5eb0209dda4c 100644 --- a/code/__DEFINES/factions.dm +++ b/code/__DEFINES/factions.dm @@ -1,6 +1,14 @@ //"Antag" factions // anything with these factions should be hostile to the average player. #define FACTION_ANTAG_SYNDICATE "Syndicate" +#define FACTION_ANTAG_FRONTIERSMEN "Frontiersmen" //Player Factions #define FACTION_PLAYER_SYNDICATE "playerSyndicate" +#define FACTION_PLAYER_NANOTRASEN "playerNanotrasen" +#define FACTION_PLAYER_FRONTIERSMEN "playerFrontiersmen" +#define FACTION_PLAYER_MINUTEMAN "playerMinuteman" +#define FACTION_PLAYER_SOLGOV "playerSolgov" +#define FACTION_PLAYER_INTEQ "playerInteq" +#define FACTION_PLAYER_ROUMAIN "playerRoumain" +#define FACTION_PLAYER_GEZENA "playerGezena" diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 847168876485..2c84f254cd6f 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -224,6 +224,12 @@ spawn_at_outpost = FALSE ert_template = /datum/map_template/shuttle/subshuttles/sugarcube +/datum/ert/frontier/random + teamsize = 8 + leader_role = /datum/antagonist/ert/frontier/random + roles = list(/datum/antagonist/ert/frontier/random) + rename_team = "Randomly Equipped Frontiersmen Team" + /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) diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index 6fd41b9df929..721444281653 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -349,21 +349,12 @@ /datum/preset_holoimage/engineer outfit_type = /datum/outfit/job/engineer -/datum/preset_holoimage/engineer/rig - outfit_type = /datum/outfit/job/engineer/gloved/rig - /datum/preset_holoimage/engineer/ce outfit_type = /datum/outfit/job/ce -/datum/preset_holoimage/engineer/ce/rig - outfit_type = /datum/outfit/job/engineer/gloved/rig - /datum/preset_holoimage/engineer/atmos outfit_type = /datum/outfit/job/atmos -/datum/preset_holoimage/engineer/atmos/rig - outfit_type = /datum/outfit/job/engineer/gloved/rig - /datum/preset_holoimage/researcher outfit_type = /datum/outfit/job/scientist diff --git a/code/game/MapData/shuttles/nanotrasen_ranger.dm b/code/game/MapData/shuttles/nanotrasen_ranger.dm index ec41a611618f..df5a0a9b4a08 100644 --- a/code/game/MapData/shuttles/nanotrasen_ranger.dm +++ b/code/game/MapData/shuttles/nanotrasen_ranger.dm @@ -5,7 +5,7 @@ /obj/item/clothing/under/rank/security/head_of_security/nt/lp name = "LP Security Specialist's Jumpsuit" - desc = "The ERT ran out of outfits to give to the LP, so they gave them station spares. This one belongs to the LP Lieutenant." + desc = "The ERT ran out of outfits to give to the LP, so they gave them station spares. This one belongs to the LP Security Specialist." /obj/item/clothing/under/rank/security/head_of_security/alt/lp name = "LP Lieutentant's 'Dramatic' Jumpsuit" @@ -91,7 +91,7 @@ //Holocalls /datum/preset_holoimage/commissioner - outfit_type = /datum/outfit/job/captain/nt/lp_lieutenant + outfit_type = /datum/outfit/job/nanotrasen/captain/lp //hardsuits /obj/item/clothing/suit/space/hardsuit/ert/lp diff --git a/code/game/MapData/shuttles/srm_glaive.dm b/code/game/MapData/shuttles/srm_glaive.dm index a40e9bd426c1..db6561b6550c 100644 --- a/code/game/MapData/shuttles/srm_glaive.dm +++ b/code/game/MapData/shuttles/srm_glaive.dm @@ -48,7 +48,7 @@ icon_state = "Sleep" /datum/preset_holoimage/montagne - outfit_type = /datum/outfit/job/hos/roumain + outfit_type = /datum/outfit/job/roumain/captain /obj/item/disk/holodisk/roumain name = "Grand Ideology Sermon" diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 14b3887ca539..1dee49da7f54 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -244,10 +244,22 @@ Security HUDs! Basic mode shows only the job. var/image/holder = hud_list[ID_HUD] var/icon/I = icon(icon, icon_state, dir) holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "hudno_id" + holder.icon_state = "hudno_job" var/obj/item/card/id/worn_id = wear_id?.GetID() if(worn_id && worn_id.job_icon) holder.icon_state = "hud[worn_id.job_icon]" + + var/underlay_icon_state = "hudunknown" + if(worn_id && worn_id.faction_icon) + underlay_icon_state = "hud[worn_id.faction_icon]" + + var/mutable_appearance/faction_background = mutable_appearance( + icon = holder.icon, + icon_state = underlay_icon_state + ) + holder.underlays.Cut() + holder.underlays += faction_background + sec_hud_set_security_status() /mob/living/proc/sec_hud_set_implants() diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index c4e48f1a629a..ad440817942b 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -161,6 +161,7 @@ var/icon/cached_flat_icon var/registered_age = 13 // default age for ss13 players var/job_icon + var/faction_icon /obj/item/card/id/Initialize(mapload) . = ..() @@ -435,11 +436,6 @@ update_label() registered_name = "Emergency Command Hologram" access = list(ACCESS_CHANGE_IDS) -/obj/item/card/id/silver/reaper - access = list(ACCESS_MAINT_TUNNELS) - assignment = "Reaper" - registered_name = "Thirteen" - /obj/item/card/id/gold name = "gold identification card" desc = "A golden card which shows power and might." @@ -525,6 +521,8 @@ update_label() else if (popup_input == "Forge/Reset" && forged) registered_name = initial(registered_name) assignment = initial(assignment) + faction_icon = initial(faction_icon) + job_icon = initial(job_icon) log_game("[key_name(user)] has reset \the [initial(name)] named \"[src]\" to default.") update_label() forged = FALSE diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 4b91fc6caae3..e1ad81e21413 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -296,6 +296,9 @@ QDEL_NULL(sparkler) return ..() +/obj/item/melee/baton/cattleprod/loaded + preload_cell_type = /obj/item/stock_parts/cell/high + /obj/item/melee/baton/boomerang name = "\improper OZtek Boomerang" desc = "A device invented in 2486 for the great Space Emu War by the confederacy of Australicus, these high-tech boomerangs also work exceptionally well at stunning crewmembers. Just be careful to catch it when thrown!" diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 56d0f0f2526f..3360f35d05d3 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -553,7 +553,7 @@ flavour_text = "You were mining peacefully, then a ash drake suddenly attacked, then you have died... or so you thought?\ You have no idea where you now, but you are glad to be alive." assignedrole = "Lost Shaft Miner" - outfit = /datum/outfit/job/miner/equipped + outfit = /datum/outfit/job/miner /obj/effect/mob_spawn/human/lost/ashwalker_heir icon = 'icons/obj/machines/sleeper.dmi' diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index 50cadf2f8801..dfd999e3aa3a 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -726,7 +726,7 @@ GLOBAL_LIST_INIT(ore_probability, list( new /mob/living/simple_animal/hostile/asteroid/goliath/beast(loc) new /mob/living/simple_animal/hostile/asteroid/goliath/beast(loc) new /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient(loc) - new /obj/effect/mob_spawn/human/miner/old(loc) + new /obj/effect/mob_spawn/human/miner(loc) new /turf/open/floor/plating/asteroid/basalt(loc) if(12)//sailing the ocean blue visible_message("Water pours out of the portal, followed by a strange vessel. It's occupied.") diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index f28bd9e428bb..f529c19901a3 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -207,23 +207,23 @@ /datum/antagonist/ert/lp name = "Loss Prevention Security Specialist" - outfit = /datum/outfit/centcom/ert/lp + outfit = /datum/outfit/job/nanotrasen/ert/lp role = "Security Specialist" /datum/antagonist/ert/lp/medic name = "Loss Prevention Medical Specialist" - outfit = /datum/outfit/centcom/ert/lp/medic + outfit = /datum/outfit/job/nanotrasen/ert/lp/medic role = "Medical Specialist" /datum/antagonist/ert/lp/engineer name = "Loss Prevention Engineering Specialist" - outfit = /datum/outfit/centcom/ert/lp/engineer + outfit = /datum/outfit/job/nanotrasen/ert/lp/engineer role = "Engineering Specialist" /datum/antagonist/ert/lp/lieutenant name = "Loss Prevention Lieutenant" leader = TRUE - outfit = /datum/outfit/centcom/ert/lp/lieutenant + outfit = /datum/outfit/job/nanotrasen/ert/lp/lieutenant role = "Lieutenant" // ******************************************************************** @@ -232,7 +232,7 @@ /datum/antagonist/ert/inteq name = "Inteq Mercenary" - outfit = /datum/outfit/job/security/inteq + outfit = /datum/outfit/job/inteq/security random_names = TRUE role = "Enforcer" @@ -252,7 +252,7 @@ /datum/antagonist/ert/inteq/leader name = "Inteq Mercenary Leader" - outfit = /datum/outfit/job/captain/inteq + outfit = /datum/outfit/job/inteq/captain role = "Vanguard" // ******************************************************************** @@ -260,13 +260,13 @@ // ******************************************************************** /datum/antagonist/ert/solgov name = "SolGov Sonnensöldner" - outfit = /datum/outfit/centcom/ert/solgov + outfit = /datum/outfit/job/solgov/ert random_names = FALSE role = "Sonnensöldner" /datum/antagonist/ert/official/solgov name = "SolGov Inspector" - outfit = /datum/outfit/centcom/ert/solgov/inspector + outfit = /datum/outfit/job/solgov/ert/inspector role = "Solarian Inspector" /datum/antagonist/ert/official/solgov/greet() @@ -283,7 +283,7 @@ /datum/antagonist/ert/minutemen name = "Minutemen Infantry" - outfit = /datum/outfit/centcom/ert/minutemen + outfit = /datum/outfit/job/minutemen/ert role = "Minuteman" /datum/antagonist/ert/minutemen/greet() @@ -302,52 +302,52 @@ /datum/antagonist/ert/minutemen/leader name = "Minutemen Leader" leader = TRUE - outfit = /datum/outfit/centcom/ert/minutemen/leader + outfit = /datum/outfit/job/minutemen/ert/leader role = "Sergeant" /datum/antagonist/ert/minutemen/bard name = "BARD Infantry" - outfit = /datum/outfit/centcom/ert/minutemen/bard + outfit = /datum/outfit/job/minutemen/ert/bard role = "Minuteman" /datum/antagonist/ert/minutemen/bard/leader - name = "BARD Leader" + name = "BARD Sergeant" leader = TRUE - outfit = /datum/outfit/centcom/ert/minutemen/bard/leader + outfit = /datum/outfit/job/minutemen/ert/bard/leader role = "Sergeant" /datum/antagonist/ert/minutemen/riot name = "Riot Officer" - outfit = /datum/outfit/centcom/ert/minutemen/riot + outfit = /datum/outfit/job/minutemen/ert/riot role = "Minuteman" /datum/antagonist/ert/minutemen/riot/leader name = "Riot Sergeant" leader = TRUE - outfit = /datum/outfit/centcom/ert/minutemen/riot/leader + outfit = /datum/outfit/job/minutemen/ert/riot/leader role = "Sergeant" /datum/antagonist/ert/official/minutemen name = "GOLD Inspector" - outfit = /datum/outfit/centcom/ert/minutemen/inspector + outfit = /datum/outfit/job/minutemen/ert/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]") + to_chat(owner, "You are part of The Galactic Optimum Labor Division, a division of the Colonial League. Your 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]") + to_chat(owner, "You are part of The Galactic Optimum Labor Division, a division of the Colonial League. Your task: [ert_team.mission.explanation_text]") /datum/antagonist/ert/minutemen/piratehunters name = "Pirate Hunter" - outfit = /datum/outfit/centcom/ert/minutemen/piratehunters + outfit = /datum/outfit/job/minutemen/ert/pirate_hunter role = "Minuteman" /datum/antagonist/ert/minutemen/piratehunters/leader name = "Pirate Hunter Leader" leader = TRUE - outfit = /datum/outfit/centcom/ert/minutemen/piratehunters/leader + outfit = /datum/outfit/job/minutemen/ert/pirate_hunter/leader role = "Sergeant" // ******************************************************************** @@ -356,7 +356,7 @@ /datum/antagonist/ert/syndicate name = "Syndicate Infantry" - outfit = /datum/outfit/centcom/ert/syndicate + outfit = /datum/outfit/job/syndicate/ert role = "Squaddie" /datum/antagonist/ert/syndicate/greet() @@ -375,12 +375,12 @@ /datum/antagonist/ert/syndicate/leader name = "Syndicate Sergeant" leader = TRUE - outfit = /datum/outfit/centcom/ert/syndicate/leader + outfit = /datum/outfit/job/syndicate/ert/leader role = "Sergeant" /datum/antagonist/ert/syndicate/gorlex name = "2nd Battlegroup Trooper" - outfit = /datum/outfit/centcom/ert/syndicate/gorlex + outfit = /datum/outfit/job/syndicate/ert/gorlex role = "Trooper" /datum/antagonist/ert/syndicate/gorlex/greet() @@ -396,28 +396,28 @@ /datum/antagonist/ert/syndicate/gorlex/pointman name = "2nd Battlegroup Shotgunner" - outfit = /datum/outfit/centcom/ert/syndicate/gorlex/pointman + outfit = /datum/outfit/job/syndicate/ert/gorlex/pointman role = "Pointman" /datum/antagonist/ert/syndicate/gorlex/medic name = "2nd Battlegroup Medic" - outfit = /datum/outfit/centcom/ert/syndicate/gorlex/medic + outfit = /datum/outfit/job/syndicate/ert/gorlex/medic role = "Medic" /datum/antagonist/ert/syndicate/gorlex/sniper name = "2nd Battlegroup Sniper" - outfit = /datum/outfit/centcom/ert/syndicate/gorlex/sniper + outfit = /datum/outfit/job/syndicate/ert/gorlex/sniper role = "Marksman" /datum/antagonist/ert/syndicate/gorlex/leader name = "2nd Battlegroup Sergeant" leader = TRUE - outfit = /datum/outfit/centcom/ert/syndicate/gorlex/leader + outfit = /datum/outfit/job/syndicate/ert/gorlex/leader role = "Sergeant" /datum/antagonist/ert/syndicate/cybersun name = "Cybersun Commando" - outfit = /datum/outfit/centcom/ert/syndicate/cybersun + outfit = /datum/outfit/job/syndicate/ert/cybersun role = "Operative" /datum/antagonist/ert/syndicate/cybersun/greet() @@ -436,12 +436,12 @@ /datum/antagonist/ert/syndicate/cybersun/leader name = "Cybersun Commando Leader" leader = TRUE - outfit = /datum/outfit/centcom/ert/syndicate/cybersun/leader + outfit = /datum/outfit/job/syndicate/ert/cybersun/leader role = "Lead Operative" /datum/antagonist/ert/syndicate/cybersun/medic name = "Cybersun Paramedic" - outfit = /datum/outfit/centcom/ert/syndicate/cybersun/medic + outfit = /datum/outfit/job/syndicate/ert/cybersun/medic role = "Medical Technician" /datum/antagonist/ert/syndicate/cybersun/medic/greet() @@ -458,7 +458,7 @@ /datum/antagonist/ert/syndicate/cybersun/medic/leader name = "Cybersun Lead Paramedic" leader = TRUE - outfit = /datum/outfit/centcom/ert/syndicate/cybersun/medic/leader + outfit = /datum/outfit/job/syndicate/ert/cybersun/medic/leader role = "Lead Medical Technician" // ******************************************************************** @@ -467,7 +467,7 @@ /datum/antagonist/ert/frontier name = "Frontiersmen Pirate" - outfit = /datum/outfit/centcom/ert/frontiersmen + outfit = /datum/outfit/job/frontiersmen/ert role = "Grunt" /datum/antagonist/ert/frontier/greet() @@ -481,19 +481,22 @@ missiondesc += "
Your Mission: [ert_team.mission.explanation_text]" to_chat(owner,missiondesc) +/datum/antagonist/ert/frontier/random + outfit = /datum/outfit/job/frontiersmen/ert/random + /datum/antagonist/ert/frontier/leader name = "Frontiersmen Officer" - outfit = /datum/outfit/centcom/ert/frontiersmen/leader + outfit = /datum/outfit/job/frontiersmen/ert/leader role = "Officer" /datum/antagonist/ert/frontier/medic name = "Frontiersmen Medic" - outfit = /datum/outfit/centcom/ert/frontiersmen/medic + outfit = /datum/outfit/job/frontiersmen/ert/medic role = "Stretcher-Bearer" /datum/antagonist/ert/frontier/engineer name = "Frontiersmen Engineer" - outfit = /datum/outfit/centcom/ert/frontiersmen/engineer + outfit = /datum/outfit/job/frontiersmen/ert/engineer role = "Sapper" // ******************************************************************** @@ -502,7 +505,7 @@ /datum/antagonist/ert/independent name = "Independent Security Officer" - outfit = /datum/outfit/centcom/ert/independent + outfit = /datum/outfit/job/independent/ert role = "Security Officer" /datum/antagonist/ert/independent/greet() @@ -518,25 +521,25 @@ /datum/antagonist/ert/independent/emt name = "Independent Medical Technician" - outfit = /datum/outfit/centcom/ert/independent/emt + outfit = /datum/outfit/job/independent/ert/emt role = "Paramedic" /datum/antagonist/ert/independent/firefighter name = "Independent Firefighter" - outfit = /datum/outfit/centcom/ert/independent/firefighter + outfit = /datum/outfit/job/independent/ert/firefighter role = "Firefighter" /datum/antagonist/ert/independent/firefighter/medic name = "Independent Firefighter Paramedic" - outfit = /datum/outfit/centcom/ert/independent/firefighter/medic + outfit = /datum/outfit/job/independent/ert/firefighter/medic role = "Paramedic" /datum/antagonist/ert/independent/firefighter/leader name = "Independent Firefighter Group Captain" - outfit = /datum/outfit/centcom/ert/independent/firefighter/leader + outfit = /datum/outfit/job/independent/ert/firefighter/leader role = "Group Captain" /datum/antagonist/ert/independent/technician name = "Independent Technician" - outfit = /datum/outfit/centcom/ert/independent/technician + outfit = /datum/outfit/job/independent/ert/technician role = "Technician" diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 92f8a61ab4d7..3cc75b08ae1b 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -358,12 +358,9 @@ /obj/effect/mob_spawn/human/engineer name = "Engineer" - outfit = /datum/outfit/job/engineer/gloved + outfit = /datum/outfit/job/engineer icon_state = "corpseengineer" -/obj/effect/mob_spawn/human/engineer/rig - outfit = /datum/outfit/job/engineer/gloved/rig - /obj/effect/mob_spawn/human/clown name = "Clown" outfit = /datum/outfit/job/clown @@ -379,15 +376,6 @@ outfit = /datum/outfit/job/miner icon_state = "corpseminer" -/obj/effect/mob_spawn/human/miner/rig - outfit = /datum/outfit/job/miner/equipped/hardsuit - -/obj/effect/mob_spawn/human/miner/explorer - outfit = /datum/outfit/job/miner/equipped - -/obj/effect/mob_spawn/human/miner/old - outfit = /datum/outfit/job/miner/old - /obj/effect/mob_spawn/human/plasmaman mob_species = /datum/species/plasmaman outfit = /datum/outfit/plasmaman diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index e16fde8d54f0..eb629f76ae43 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -100,9 +100,9 @@ var/outfit_type = outfit_options[selected] if(!outfit_type) return FALSE - var/datum/outfit/job/O = new outfit_type() - var/list/outfit_types = O.get_chameleon_disguise_info() - var/datum/job/job_datum = GLOB.type_occupations[O.jobtype] + var/datum/outfit/job/outfit = new outfit_type() + var/list/outfit_types = outfit.get_chameleon_disguise_info() + var/datum/job/job_datum = GLOB.type_occupations[outfit.jobtype] for(var/V in user.chameleon_item_actions) var/datum/action/item_action/chameleon/change/A = V @@ -119,22 +119,40 @@ break //hardsuit helmets/suit hoods - if(O.toggle_helmet && (ispath(O.suit, /obj/item/clothing/suit/space/hardsuit) || ispath(O.suit, /obj/item/clothing/suit/hooded)) && ishuman(user)) + if(outfit.toggle_helmet && (ispath(outfit.suit, /obj/item/clothing/suit/space/hardsuit) || ispath(outfit.suit, /obj/item/clothing/suit/hooded)) && ishuman(user)) var/mob/living/carbon/human/H = user //make sure they are actually wearing the suit, not just holding it, and that they have a chameleon hat if(istype(H.wear_suit, /obj/item/clothing/suit/chameleon) && istype(H.head, /obj/item/clothing/head/chameleon)) var/helmet_type - if(ispath(O.suit, /obj/item/clothing/suit/space/hardsuit)) - var/obj/item/clothing/suit/space/hardsuit/hardsuit = O.suit + if(ispath(outfit.suit, /obj/item/clothing/suit/space/hardsuit)) + var/obj/item/clothing/suit/space/hardsuit/hardsuit = outfit.suit helmet_type = initial(hardsuit.helmettype) else - var/obj/item/clothing/suit/hooded/hooded = O.suit + var/obj/item/clothing/suit/hooded/hooded = outfit.suit helmet_type = initial(hooded.hoodtype) if(helmet_type) var/obj/item/clothing/head/chameleon/hat = H.head hat.chameleon_action.update_look(user, helmet_type) - qdel(O) + + // ID card sechud + if(outfit.job_icon) + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + var/obj/item/card/id/card = H.wear_id + var/datum/job/J = GLOB.type_occupations[outfit.jobtype] // i really hope your outfit/job has a jobtype + if(!card) + return + var/old_assignment = card.assignment + card.job_icon = outfit.job_icon + card.faction_icon = outfit.faction_icon + card.assignment = J.name + card.update_label() + card.name = "[!card.registered_name ? initial(card.name) : "[card.registered_name]'s ID Card"][" ([old_assignment])"]" // this is terrible, but whatever + H.sec_hud_set_ID() + + qdel(outfit) return TRUE @@ -322,8 +340,10 @@ chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/suit/chameleon - name = "armor" - desc = "A slim armored vest that protects against most types of damage." + name = "armor vest" + desc = "A slim Type I armored vest that provides decent protection against most types of damage." + icon = 'icons/obj/clothing/suits/armor.dmi' + mob_overlay_icon = 'icons/mob/clothing/suits/armor.dmi' icon_state = "armor" item_state = "armor" blood_overlay_type = "armor" @@ -351,9 +371,9 @@ chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/glasses/chameleon - name = "Optical Meson Scanner" + name = "optical meson scanner" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." - icon_state = "meson" + icon_state = "mesongoggles" item_state = "meson" resistance_flags = NONE armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) @@ -489,7 +509,6 @@ voice_change = !voice_change to_chat(user, "The voice changer is now [voice_change ? "on" : "off"]!") - /obj/item/clothing/mask/chameleon/drone //Same as the drone chameleon hat, undroppable and no protection armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) diff --git a/code/modules/clothing/head/berets.dm b/code/modules/clothing/head/berets.dm index ca107806d69f..4c8595f2541d 100644 --- a/code/modules/clothing/head/berets.dm +++ b/code/modules/clothing/head/berets.dm @@ -1,7 +1,7 @@ //Mime /obj/item/clothing/head/beret name = "beret" - desc = "A beret, a mime's favorite headwear." + desc = "A red beret." icon_state = "beret" dog_fashion = /datum/dog_fashion/head/beret dynamic_hair_suffix = "+generic" @@ -15,13 +15,13 @@ /obj/item/clothing/head/beret/archaic name = "archaic beret" - desc = "An absolutely ancient beret, allegedly worn by the first mime to ever step foot on a Nanotrasen station." + desc = "An absolutely ancient beret." icon_state = "archaicberet" dog_fashion = null /obj/item/clothing/head/beret/black name = "black beret" - desc = "A black beret, perfect for war veterans and dark, brooding, anti-hero mimes." + desc = "A black beret." icon_state = "beret_black" /obj/item/clothing/head/beret/highlander @@ -97,7 +97,7 @@ icon_state = "beret_officer" /obj/item/clothing/head/beret/sec/brig_phys - desc = "A beret made out of black reinforced fabric with lue cross emblazoned on it. Denotes security's personal medic." + desc = "A beret made out of black reinforced fabric with a lue cross emblazoned on it. Denotes security's personal medic." icon_state = "beret_brigphys" //Engineering diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index ae7ecd5b121e..c4d13ef36948 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -55,7 +55,7 @@ /obj/item/clothing/head/caphat/frontier/admiral name = "\improper Frontiersmen admiral's cap" - desc = "An imposing peaked cap meant for only the highest of officers of the Frontiersman pirate fleet." + desc = "An imposing peaked cap meant for only the highest of officers of the Frontiersmen pirate fleet." icon_state = "frontier_admiral_cap" //Head of Personnel @@ -156,10 +156,9 @@ /obj/item/clothing/head/cowboy/sec/minutemen name = "colonial minutmen officer's slouch hat" - desc = "A commanding slouch hat adorned with a offier's badge, used by the Colonial Minutemen." + desc = "A commanding slouch hat adorned with a officer's badge, used by the Colonial Minutemen." icon_state = "minuteman_officer_hat" - /obj/item/clothing/head/cowboy/sec/roumain name = "hunter's hat" desc = "A fancy hat with a nice feather. The way it covers your eyes makes you feel like a badass." diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index db934aaa9761..27d89d1b7226 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -1,4 +1,4 @@ -/datum/outfit/centcom/ert/frontiersmen +/datum/outfit/job/frontiersmen/ert name = "ERT - Frontiersman Basic" head = /obj/item/clothing/head/beret/sec/frontier @@ -10,15 +10,113 @@ 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 + id = null // lol + backpack_contents = list(/obj/item/ammo_box/a762=5, /obj/item/grenade/frag=1) - id_role = "Grunt" +/datum/outfit/job/frontiersmen/ert/random + name = "ERT - Frontiersman Randomized" + + head = null + mask = null + suit = null + suit_store = null + back = null + l_pocket = null + r_pocket = /obj/item/radio + backpack_contents = list() + +/datum/outfit/job/frontiersmen/ert/random/pre_equip(mob/living/carbon/human/H, visualsOnly, client/preference_source) + . = ..() + if(visualsOnly) + return + + if(prob(90)) + head = pickweight(list( + /obj/item/clothing/head/beret/sec/frontier = 10, + /obj/item/clothing/head/helmet/bulletproof/x11/frontier = 5, + /obj/item/reagent_containers/glass/bucket = 1)) + + if(prob(60)) + suit = pickweight(list( + /obj/item/clothing/suit/armor/vest = 5, + /obj/item/clothing/suit/armor/vest/bulletproof/frontier = 5, + /obj/item/clothing/suit/armor/vest/scrap_armor = 1)) -/datum/outfit/centcom/ert/frontiersmen/leader + if(prob(30)) + mask = pickweight(list( + /obj/item/clothing/mask/gas = 5, + /obj/item/clothing/mask/gas/sechailer/minutemen = 5, + /obj/item/clothing/mask/breath = 5, + /obj/item/clothing/mask/whistle = 3)) + + if(prob(90)) + back = pickweight(list( + /obj/item/storage/backpack = 20, + /obj/item/storage/backpack/satchel = 20, + /obj/item/storage/backpack/messenger = 20, + /obj/item/melee/baton/cattleprod/loaded = 5, + /obj/item/reagent_containers/food/snacks/baguette = 2, // yes you can put this on your back + /obj/item/deployable_turret_folded = 1, + )) + + if(prob(90)) + shoes = pickweight(list( + /obj/item/clothing/shoes/jackboots = 10, + /obj/item/clothing/shoes/sneakers = 5, + )) + + var/extra_class = pick(list("Doctor", "Breacher", "Ammo Carrier")) + switch(extra_class) + if("Doctor") + backpack_contents += list(/obj/item/storage/firstaid/regular = 1) + gloves = /obj/item/clothing/gloves/color/latex + if(prob(50)) + belt = /obj/item/storage/belt/medical/surgery + if(prob(30)) + glasses = /obj/item/clothing/glasses/hud/health + if("Breacher") + backpack_contents += list(/obj/item/grenade/c4 = 2) + if(prob(10)) + belt = /obj/item/storage/belt/grenade/full + if("Ammo Carrier") + backpack_contents += list(/obj/item/ammo_box/a762_39 = 1) + + var/weapon = pick(list("Bolt-Action", "Pistol", "Melee")) + switch(weapon) + if("Bolt-Action") + r_hand = /obj/item/gun/ballistic/rifle/boltaction + if(prob(70) && istype(back, /obj/item/storage/backpack)) + backpack_contents += list(/obj/item/ammo_box/a762 = rand(1,4)) + if(prob(55)) + l_pocket = /obj/item/ammo_box/a762 + if("Pistol") + r_hand = pick(list( + /obj/item/gun/ballistic/automatic/pistol/disposable, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/revolver/pepperbox, + /obj/item/gun/energy/e_gun/mini)) + if(prob(30)) + l_hand = pick(list( + /obj/item/gun/ballistic/automatic/pistol/disposable, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/revolver/pepperbox, + /obj/item/gun/energy/e_gun/mini)) + if("Melee") + r_hand = pickweight(list( + /obj/item/kitchen/knife = 15, + /obj/item/melee/baseball_bat = 10, + /obj/item/melee/cleric_mace = 7, + /obj/item/melee/roastingstick = 2, + /obj/item/kitchen/fork = 1, + /obj/item/melee/flyswatter = 1, + )) + + +/datum/outfit/job/frontiersmen/ert/leader name = "ERT - Frontiersman Officer" uniform = /obj/item/clothing/under/rank/security/officer/frontier/officer @@ -31,9 +129,7 @@ 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 +/datum/outfit/job/frontiersmen/ert/medic name = "ERT - Frontiersman Medic" back = /obj/item/storage/backpack/medic @@ -45,9 +141,8 @@ 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 +/datum/outfit/job/frontiersmen/ert/engineer name = "ERT - Frontiersman Engineer" back = /obj/item/storage/backpack/industrial @@ -57,4 +152,3 @@ 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 index 18b611d1183d..f64e7f86a99a 100644 --- a/code/modules/clothing/outfits/ert/indie_ert.dm +++ b/code/modules/clothing/outfits/ert/indie_ert.dm @@ -1,4 +1,4 @@ -/datum/outfit/centcom/ert/independent +/datum/outfit/job/independent/ert name = "ERT - Independent Security Officer" head = /obj/item/clothing/head/helmet/sec @@ -12,9 +12,7 @@ belt = /obj/item/storage/belt/security/full id = /obj/item/card/id - id_role = "Security Officer" - -/datum/outfit/centcom/ert/independent/emt +/datum/outfit/job/independent/ert/emt name = "ERT - Independent Paramedic" head = /obj/item/clothing/head/soft/paramedic @@ -27,9 +25,7 @@ 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 +/datum/outfit/job/independent/ert/firefighter name = "ERT - Independent Firefighter (Standard)" head = /obj/item/clothing/head/hardhat/red @@ -45,9 +41,7 @@ l_pocket = /obj/item/crowbar/red r_pocket = /obj/item/radio - id_role = "Firefighter" - -/datum/outfit/centcom/ert/independent/firefighter/medic +/datum/outfit/job/independent/ert/firefighter/medic name = "ERT - Independent Firefighter (Medic)" mask = /obj/item/clothing/mask/breath/medical @@ -60,9 +54,7 @@ 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 +/datum/outfit/job/independent/ert/firefighter/leader name = "ERT - Independent Firefighter (Group Captain)" back = /obj/item/fireaxe @@ -72,12 +64,11 @@ belt = /obj/item/storage/belt/utility/atmostech gloves = /obj/item/clothing/gloves/color/yellow - id_role = "Group Captain" - -/datum/outfit/centcom/ert/independent/technician +/datum/outfit/job/independent/ert/technician name = "ERT - Independent Technician" head = /obj/item/clothing/head/hardhat + uniform = /obj/item/clothing/under/rank/engineering/engineer belt = /obj/item/storage/belt/utility/full/engi suit = /obj/item/clothing/suit/toggle/hazard shoes = /obj/item/clothing/shoes/workboots diff --git a/code/modules/clothing/outfits/ert/inteq_ert.dm b/code/modules/clothing/outfits/ert/inteq_ert.dm index 05d4f22eb69a..f9a0aec2dc57 100644 --- a/code/modules/clothing/outfits/ert/inteq_ert.dm +++ b/code/modules/clothing/outfits/ert/inteq_ert.dm @@ -1,4 +1,4 @@ -/datum/outfit/centcom/ert/inteq +/datum/outfit/job/inteq/ert name = "ERT - Inteq Rifleman" mask = /obj/item/clothing/mask/gas/sechailer/inteq @@ -17,9 +17,8 @@ backpack_contents = list(/obj/item/radio=1) - id_role = "Enforcer" -/datum/outfit/centcom/ert/inteq/shotgun +/datum/outfit/job/inteq/ert/shotgun name = "ERT - Inteq Shotgunner" suit_store = /obj/item/gun/ballistic/shotgun/automatic/combat/compact @@ -27,9 +26,7 @@ backpack_contents = list(/obj/item/storage/box/lethalshot=2, /obj/item/radio=1) - id_role = "Enforcer" - -/datum/outfit/centcom/ert/inteq/medic +/datum/outfit/job/inteq/ert/medic name = "ERT - Inteq Corpsman" uniform = /obj/item/clothing/under/syndicate/inteq/corpsman @@ -38,16 +35,12 @@ 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 +/datum/outfit/job/inteq/ert/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 index 6ec68e0799ca..6fc4821784b5 100644 --- a/code/modules/clothing/outfits/ert/minutemen_ert.dm +++ b/code/modules/clothing/outfits/ert/minutemen_ert.dm @@ -1,5 +1,5 @@ -/datum/outfit/centcom/ert/minutemen - name = "ERT - Minutemen Basic" +/datum/outfit/job/minutemen/ert + name = "ERT - Minuteman" head = /obj/item/clothing/head/helmet/bulletproof/minutemen uniform = /obj/item/clothing/under/rank/security/officer/minutemen @@ -7,24 +7,23 @@ ears = /obj/item/radio/headset/minutemen/alt back = /obj/item/storage/backpack/security/cmm suit = /obj/item/clothing/suit/armor/vest/bulletproof + suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen id = /obj/item/card/id + belt = /obj/item/storage/belt/military/minutemen/p16 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" +/datum/outfit/job/minutemen/ert/leader + name = "ERT - Minuteman Sergeant" ears = /obj/item/radio/headset/minutemen/alt/captain back = /obj/item/storage/backpack/satchel/sec/cmm + head = /obj/item/clothing/head/beret/command - id_role = "Sergeant" - -/datum/outfit/centcom/ert/minutemen/bard - name = "ERT - Minutemen BARD" +/datum/outfit/job/minutemen/ert/bard + name = "ERT - Minuteman (BARD)" suit = /obj/item/clothing/suit/armor/vest/marine/medium suit_store = /obj/item/gun/ballistic/automatic/smg/cm5 @@ -41,10 +40,9 @@ /obj/item/flashlight/flare = 2 ) - id_role = "Minutemen" -/datum/outfit/centcom/ert/minutemen/bard/leader - name = "ERT - Minutemen BARD Sergeant" +/datum/outfit/job/minutemen/ert/bard/leader + name = "ERT - Minuteman Sergeant (BARD)" belt = /obj/item/storage/belt/military/assault/minutemen uniform = /obj/item/clothing/under/rank/command/minutemen @@ -60,10 +58,8 @@ /obj/item/flashlight/seclite = 1 ) - id_role = "Sergeant" - -/datum/outfit/centcom/ert/minutemen/riot - name = "ERT - Minutemen Riot Officer" +/datum/outfit/job/minutemen/ert/riot + name = "ERT - Minuteman (Riot Officer)" suit = /obj/item/clothing/suit/armor/riot/minutemen head = /obj/item/clothing/head/helmet/riot/minutemen @@ -76,25 +72,22 @@ backpack_contents = null box = null - id_role = "Minutemen" - -/datum/outfit/centcom/ert/minutemen/riot/leader - name = "ERT - Minutemen Riot Officer Sergeant" +/datum/outfit/job/minutemen/ert/riot/leader + name = "ERT - Minutemen Sergeant (Riot Officer)" 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" +/datum/outfit/job/minutemen/ert/inspector + name = "ERT - Inspector (Minutemen GOLD)" - head = null + head = /obj/item/clothing/head/cowboy/sec/minutemen 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 + suit_store = null ears = /obj/item/radio/headset/minutemen/alt/captain back = /obj/item/storage/backpack/satchel/leather id = /obj/item/card/id/silver @@ -102,25 +95,18 @@ l_pocket = null r_pocket = null - id_role = "Lieutenant" - -/datum/outfit/centcom/ert/minutemen/piratehunters - name = "ERT - Minutemen Pirate Hunter" +/datum/outfit/job/minutemen/ert/pirate_hunter + name = "ERT - Minuteman (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" +/datum/outfit/job/minutemen/ert/pirate_hunter/leader + name = "ERT - Minutemen Sergeant (Pirate Hunter)" 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" + backpack_contents = list(/obj/item/ammo_box/magazine/gal=4) diff --git a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm index 6fb533504715..2d397b8de828 100644 --- a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm +++ b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm @@ -7,8 +7,6 @@ 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/human, visualsOnly = FALSE) if(visualsOnly) @@ -17,7 +15,6 @@ var/obj/item/card/id/id = human.wear_id if(id) id.registered_name = human.real_name - id.assignment = id_role id.update_label() ..() @@ -34,8 +31,6 @@ /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) ..() @@ -103,8 +98,6 @@ /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) ..() @@ -140,7 +133,6 @@ /obj/item/melee/baton/loaded=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) ..() @@ -214,8 +206,6 @@ /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) ..() @@ -304,8 +294,6 @@ 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) ..() @@ -353,8 +341,6 @@ 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) ..() @@ -382,8 +368,6 @@ 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) ..() @@ -395,9 +379,9 @@ headset.recalculateChannels() // Loss Prevention - -/datum/outfit/centcom/ert/lp +/datum/outfit/job/nanotrasen/ert/lp name = "ERT - Loss Prevention Security Specialist" + jobtype = /datum/job/officer head = null implants = list(/obj/item/implant/mindshield) @@ -418,10 +402,10 @@ 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 +/datum/outfit/job/nanotrasen/ert/lp/medic name = "ERT - Loss Prevention Medical Specialist" + jobtype = /datum/job/doctor head = null uniform = /obj/item/clothing/under/rank/medical/paramedic/lp @@ -437,10 +421,10 @@ backpack_contents = list(/obj/item/storage/firstaid/medical=1, /obj/item/radio=1) - id_role = "Medical Specialist" -/datum/outfit/centcom/ert/lp/engineer +/datum/outfit/job/nanotrasen/ert/lp/engineer name = "ERT - Loss Prevention Engineering Specialist" + jobtype = /datum/job/engineer head = null uniform = /obj/item/clothing/under/rank/engineering/engineer/nt/lp @@ -455,12 +439,11 @@ 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 +/datum/outfit/job/nanotrasen/ert/lp/lieutenant name = "ERT - Loss Prevention Lieutenant" + jobtype = /datum/job/captain head = null ears = /obj/item/radio/headset/nanotrasen/alt/captain @@ -476,5 +459,3 @@ 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 index fbae8101728d..9962f1d9c74c 100644 --- a/code/modules/clothing/outfits/ert/solgov_ert.dm +++ b/code/modules/clothing/outfits/ert/solgov_ert.dm @@ -1,5 +1,7 @@ -/datum/outfit/centcom/ert/solgov +/datum/outfit/job/solgov/ert name = "ERT - SolGov Sonnensöldner" + jobtype = /datum/job/officer + job_icon = "sonnensoldner" id = /obj/item/card/id/solgov uniform = /obj/item/clothing/under/solgov @@ -14,10 +16,10 @@ box = /obj/item/storage/box/survival l_hand = /obj/item/energyhalberd - id_role = "Sonnensöldner" -/datum/outfit/centcom/ert/solgov/inspector +/datum/outfit/job/solgov/ert/inspector name = "ERT - SolGov Inspector" + jobtype = /datum/job/head_of_personnel uniform = /obj/item/clothing/under/solgov/formal belt = /obj/item/clipboard @@ -34,5 +36,3 @@ 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 index 5ec318f41d24..3ef6cea0e53b 100644 --- a/code/modules/clothing/outfits/ert/syndicate_ert.dm +++ b/code/modules/clothing/outfits/ert/syndicate_ert.dm @@ -1,7 +1,6 @@ -/datum/outfit/centcom/ert/syndicate +/datum/outfit/job/syndicate/ert 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 @@ -10,7 +9,7 @@ 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 + back = /obj/item/storage/backpack/security belt = /obj/item/storage/belt/military/c20r r_pocket = /obj/item/kitchen/knife/combat @@ -18,11 +17,10 @@ implants = list(/obj/item/implant/weapons_auth) backpack_contents = list(/obj/item/radio=1) - box = /obj/item/storage/box/survival/syndie - id_role = "Squaddie" + jobtype = /datum/job/officer // most of these are Shooty Shooty People anyway -/datum/outfit/centcom/ert/syndicate/leader +/datum/outfit/job/syndicate/ert/leader name = "ERT - Syndicate Basic Leader" head = /obj/item/clothing/head/HoS/beret/syndicate @@ -30,11 +28,9 @@ 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 +/datum/outfit/job/syndicate/ert/gorlex name = "ERT - Syndicate Gorlex Loyalist Trooper" head = /obj/item/clothing/head/helmet/swat @@ -44,15 +40,13 @@ 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 +/datum/outfit/job/syndicate/ert/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 +/datum/outfit/job/syndicate/ert/gorlex/medic name = "ERT - Syndicate Gorlex Loyalist Medic" head = /obj/item/clothing/head/soft/black @@ -67,9 +61,7 @@ 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 +/datum/outfit/job/syndicate/ert/gorlex/sniper name = "ERT - Syndicate Gorlex Loyalist Sniper" head = /obj/item/clothing/head/beret/black @@ -85,9 +77,7 @@ 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 +/datum/outfit/job/syndicate/ert/gorlex/leader name = "ERT - Syndicate Gorlex Loyalist Sergeant" uniform = /obj/item/clothing/under/syndicate/gorlex @@ -99,11 +89,9 @@ l_pocket = /obj/item/megaphone/sec - id_role = "Sergeant" - // commandos -/datum/outfit/centcom/ert/syndicate/cybersun +/datum/outfit/job/syndicate/ert/cybersun name = "ERT - Syndicate Cybersun Commando" head = null @@ -115,23 +103,19 @@ 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" + backpack_contents = list(/obj/item/autosurgeon/syndicate/laser_arm, /obj/item/radio=1) -/datum/outfit/centcom/ert/syndicate/cybersun/leader +/datum/outfit/job/syndicate/ert/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" + backpack_contents = list(/obj/item/autosurgeon/syndicate/laser_arm=1, /obj/item/antag_spawner/nuke_ops/borg_tele/medical/unlocked=1, /obj/item/radio=1) // paramedics -/datum/outfit/centcom/ert/syndicate/cybersun/medic +/datum/outfit/job/syndicate/ert/cybersun/medic name = "ERT - Syndicate Cybersun Paramedic" uniform = /obj/item/clothing/under/syndicate/medic @@ -149,9 +133,10 @@ backpack_contents = list(/obj/item/storage/firstaid/tactical=1, /obj/item/holosign_creator/medical=1, /obj/item/radio=1) - id_role = "Medical Technician" + jobtype = /datum/job/paramedic + job_icon = "paramedic" -/datum/outfit/centcom/ert/syndicate/cybersun/medic/leader +/datum/outfit/job/syndicate/ert/cybersun/medic/leader name = "ERT - Syndicate Cybersun Lead Paramedic" head = /obj/item/clothing/head/beret/cmo @@ -161,4 +146,29 @@ 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" +// inspector + +/datum/outfit/job/syndicate/ert/inspector + name = "ERT - Inspector (Syndicate)" + + uniform = /obj/item/clothing/under/syndicate/officer + head = /obj/item/clothing/head/HoS/beret/syndicate + mask = null + belt = /obj/item/clipboard + back = /obj/item/storage/backpack/satchel/leather + ears = /obj/item/radio/headset/syndicate/captain + shoes = /obj/item/clothing/shoes/laceup + gloves = /obj/item/clothing/gloves/color/white + suit = /obj/item/clothing/suit/armor/hos + suit_store = null + + job_icon = "syndicate" + jobtype = /datum/job/head_of_personnel + +/datum/outfit/job/syndicate/ert/inspector/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + var/obj/item/card/id/W = H.wear_id + if(W) + W.registered_name = H.real_name + W.assignment = "Inspector" + W.update_label() diff --git a/code/modules/clothing/outfits/factions/frontiersmen.dm b/code/modules/clothing/outfits/factions/frontiersmen.dm new file mode 100644 index 000000000000..7e97c7341fe7 --- /dev/null +++ b/code/modules/clothing/outfits/factions/frontiersmen.dm @@ -0,0 +1,184 @@ +/datum/outfit/job/frontiersmen + name = "Frontiersmen - Base Outfit" + + // faction_icon = "bg_frontiersmen" + + uniform = /obj/item/clothing/under/rank/security/officer/frontier + r_pocket = /obj/item/radio + shoes = /obj/item/clothing/shoes/jackboots + ears = /obj/item/radio/headset/pirate + box = /obj/item/storage/box/survival + id = /obj/item/card/id + + backpack = /obj/item/storage/backpack + satchel = /obj/item/storage/backpack/satchel + duffelbag = /obj/item/storage/backpack/duffelbag + courierbag = /obj/item/storage/backpack/messenger + +/datum/outfit/job/frontiersmen/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.faction |= list(FACTION_PLAYER_FRONTIERSMEN) + +// Assistant + +/datum/outfit/job/frontiersmen/assistant + name = "Frontiersmen - Rookie" + job_icon = "assistant" + jobtype = /datum/job/assistant + + head = /obj/item/clothing/head/beret/sec/frontier + +// Atmospheric Technician + +/datum/outfit/job/frontiersmen/atmos + name = "Frontiersmen - Atmospheric Specialist" + job_icon = "atmospherictechnician" + jobtype = /datum/job/atmos + + accessory = /obj/item/clothing/accessory/armband/engine + head = /obj/item/clothing/head/hardhat + +// Cargo Technician + +/datum/outfit/job/frontiersmen/cargo_tech + name = "Frontiersmen - Cargo Tech" + job_icon = "cargotechnician" + jobtype = /datum/job/cargo_tech + + accessory = /obj/item/clothing/accessory/armband/cargo + suit = /obj/item/clothing/suit/hazardvest + shoes = /obj/item/clothing/shoes/workboots + head = /obj/item/clothing/head/soft + backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo) + +// Captain + +/datum/outfit/job/frontiersmen/captain + name = "Frontiersmen - Captain" + job_icon = "captain" + jobtype = /datum/job/captain + + ears = /obj/item/radio/headset/pirate/alt/captain + uniform = /obj/item/clothing/under/rank/security/officer/frontier/officer + head = /obj/item/clothing/head/caphat/frontier + mask = /obj/item/clothing/mask/gas/sechailer + suit = /obj/item/clothing/suit/armor/frontier + shoes = /obj/item/clothing/shoes/cowboy/black + gloves = /obj/item/clothing/gloves/combat + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch + +/datum/outfit/job/frontiersmen/captain/admiral + name = "Frontiersmen - Admiral" + + uniform = /obj/item/clothing/under/rank/security/officer/frontier/admiral + head = /obj/item/clothing/head/caphat/frontier/admiral + shoes = /obj/item/clothing/shoes/cowboy/white + ears = /obj/item/radio/headset/pirate/captain + gloves = /obj/item/clothing/gloves/color/evening + suit = null + mask = null + glasses = null + +// Chief Engineer +/datum/outfit/job/frontiersmen/ce + name = "Frontiersmen - Senior Sapper" + job_icon = "chiefengineer" + jobtype = /datum/job/chief_engineer + + accessory = /obj/item/clothing/accessory/armband/engine + ears = /obj/item/radio/headset/pirate/captain + uniform = /obj/item/clothing/under/rank/security/officer/frontier/officer + head = /obj/item/clothing/head/hardhat/weldhat/white + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + belt = /obj/item/storage/belt/utility/full + +// Engineer +/datum/outfit/job/frontiersmen/engineer + name = "Frontiersmen - Sapper" + job_icon = "stationengineer" + jobtype = /datum/job/engineer + + accessory = /obj/item/clothing/accessory/armband/engine + belt = /obj/item/storage/belt/utility/full/engi + suit = /obj/item/clothing/suit/toggle/industrial + shoes = /obj/item/clothing/shoes/workboots + glasses = /obj/item/clothing/glasses/welding + head = /obj/item/clothing/head/beret/sec/frontier + + l_pocket = /obj/item/radio + r_pocket = /obj/item/analyzer + +// Cook + +/datum/outfit/job/frontiersmen/cook + name = "Frontiersmen - Steward" + job_icon = "cook" + jobtype = /datum/job/cook + + uniform = /obj/item/clothing/under/rank/security/officer/frontier + head = /obj/item/clothing/head/chefhat + suit = /obj/item/clothing/suit/apron/chef + +// Head of Personnel + +/datum/outfit/job/frontiersmen/hop + name = "Frontiersmen - Helmsman" + job_icon = "headofpersonnel" + jobtype = /datum/job/head_of_personnel + + ears = /obj/item/radio/headset/pirate/alt + uniform = /obj/item/clothing/under/rank/security/officer/frontier/officer + shoes = /obj/item/clothing/shoes/cowboy/black + head = /obj/item/clothing/head/beret/sec/frontier/officer + gloves = /obj/item/clothing/gloves/combat + r_pocket = /obj/item/kitchen/knife/combat/survival + +// Head of Security +/datum/outfit/job/frontiersmen/hos + name = "Frontiersmen - Shipswain" + job_icon = "headofsecurity" + jobtype = /datum/job/hos + + accessory = /obj/item/clothing/accessory/armband + uniform = /obj/item/clothing/under/rank/security/officer/frontier/officer + head = /obj/item/clothing/head/beret/sec/frontier/officer + suit = /obj/item/clothing/suit/armor/vest/bulletproof/frontier + shoes = /obj/item/clothing/shoes/cowboy/black + gloves = /obj/item/clothing/gloves/combat + backpack_contents = list(/obj/item/melee/baton/loaded=1) + suit_store = null + +// Security Officer + +/datum/outfit/job/frontiersmen/security + name = "Frontiersmen - Boarder" + job_icon = "securityofficer" + jobtype = /datum/job/officer + + accessory = /obj/item/clothing/accessory/armband + head = /obj/item/clothing/head/beret/sec/frontier + mask = /obj/item/clothing/mask/gas/sechailer/minutemen + suit = null + 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 + + l_pocket = /obj/item/flashlight/seclite + r_pocket = /obj/item/tank/internals/emergency_oxygen/double + +// Medical Doctor + +/datum/outfit/job/frontiersmen/doctor + name = "Frontiersmen - Aidman" + job_icon = "medicaldoctor" + jobtype = /datum/job/doctor + + accessory = /obj/item/clothing/accessory/armband/med + uniform = /obj/item/clothing/under/rank/security/officer/frontier + glasses = /obj/item/clothing/glasses/hud/health/prescription + r_pocket = /obj/item/kitchen/knife/combat/survival + backpack_contents = list(/obj/item/storage/firstaid/medical) diff --git a/code/modules/clothing/outfits/gezena.dm b/code/modules/clothing/outfits/factions/gezena.dm similarity index 74% rename from code/modules/clothing/outfits/gezena.dm rename to code/modules/clothing/outfits/factions/gezena.dm index b9fc26afeff1..b5b077fa63f7 100644 --- a/code/modules/clothing/outfits/gezena.dm +++ b/code/modules/clothing/outfits/factions/gezena.dm @@ -1,14 +1,17 @@ /datum/outfit/job/gezena + name = "PGF - Base Outfit" + // faction_icon = "bg_pgf" /datum/outfit/job/gezena/post_equip(mob/living/carbon/human/H, visualsOnly) . = ..() if(visualsOnly) return - H.faction |= list("playergezena") + H.faction |= list(FACTION_PLAYER_GEZENA) /datum/outfit/job/gezena/assistant - name = "Deckhand (PGF)" + name = "PGF - Deckhand" jobtype = /datum/job/assistant + job_icon = "assistant" head = /obj/item/clothing/head/gezena uniform = /obj/item/clothing/under/gezena diff --git a/code/modules/clothing/outfits/factions/independent.dm b/code/modules/clothing/outfits/factions/independent.dm new file mode 100644 index 000000000000..97b806ec4b5b --- /dev/null +++ b/code/modules/clothing/outfits/factions/independent.dm @@ -0,0 +1,830 @@ +/datum/outfit/job/independent + name = "Independent - Base Outfit" + faction_icon = "bg_independent" + + uniform = /obj/item/clothing/under/utility + box = /obj/item/storage/box/survival + id = /obj/item/card/id + + r_pocket = /obj/item/storage/wallet + +// Assistant + +/datum/outfit/job/independent/assistant + name = "Independent - Assistant" + jobtype = /datum/job/assistant + job_icon = "assistant" + + shoes = /obj/item/clothing/shoes/sneakers/black + +/datum/outfit/job/independent/assistant/waiter + name = "Independent - Assistant (Waiter)" + uniform = /obj/item/clothing/under/suit/waiter + shoes = /obj/item/clothing/shoes/laceup + +/datum/outfit/job/independent/assistant/fancy + name = "Independent - Assistant (Formal Uniform)" + + shoes = /obj/item/clothing/shoes/laceup + uniform = /obj/item/clothing/under/misc/assistantformal + head = /obj/item/clothing/head/beret/grey + +/datum/outfit/job/independent/assistant/pirate + name = "Independent - Assistant (Pirate)" + + uniform = /obj/item/clothing/under/costume/pirate + suit = /obj/item/clothing/suit/pirate + head = /obj/item/clothing/head/bandana + +/datum/outfit/job/independent/assistant/pirate/jupiter + name = "Independent - Assistant (Nodesman)" // technically, this is part of SEC, but we have jackshit for SEC + + uniform = /obj/item/clothing/under/utility + head = /obj/item/clothing/head/soft/black + shoes = /obj/item/clothing/shoes/combat + l_pocket = /obj/item/kitchen/knife/combat/survival + gloves = /obj/item/clothing/gloves/combat + implants = list(/obj/item/implant/radio) + +/datum/outfit/job/independent/assistant/artist + name = "Independent - Assistant (Artist)" + + uniform = /obj/item/clothing/under/suit/burgundy + suit = /obj/item/clothing/suit/toggle/suspenders + head = /obj/item/clothing/head/beret/black + shoes = /obj/item/clothing/shoes/laceup + gloves = /obj/item/clothing/gloves/color/white + accessory = /obj/item/clothing/neck/scarf/darkblue + +/datum/outfit/job/independent/assistant/pharma + name = "Independent - Assistant (Pharmacology Student)" + + uniform = /obj/item/clothing/under/rank/medical/chemist + shoes = /obj/item/clothing/shoes/sneakers/white + accessory = /obj/item/clothing/neck/scarf/orange + l_pocket = /obj/item/reagent_containers/pill/floorpill + belt = /obj/item/reagent_scanner + backpack_contents = list(/obj/item/book/manual/wiki/chemistry=1) + +// Captain + +/datum/outfit/job/independent/captain + name = "Independent - Captain" + job_icon = "captain" + jobtype = /datum/job/captain + + id = /obj/item/card/id/gold + gloves = /obj/item/clothing/gloves/color/captain + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/rank/command/captain + dcoat = /obj/item/clothing/suit/hooded/wintercoat/captain //WS Edit - Alt Uniforms + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/caphat + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) + + backpack = /obj/item/storage/backpack/captain + satchel = /obj/item/storage/backpack/satchel/cap + duffelbag = /obj/item/storage/backpack/duffelbag/captain + courierbag = /obj/item/storage/backpack/messenger/com + + accessory = /obj/item/clothing/accessory/medal/gold/captain + + chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain) + +/datum/outfit/job/independent/captain/western + name = "Independent - Captain (Western)" + head = /obj/item/clothing/head/caphat/cowboy + shoes = /obj/item/clothing/shoes/cowboy/fancy + glasses = /obj/item/clothing/glasses/sunglasses + +/datum/outfit/job/independent/captain/masinyane + name = "Independent - Captain (Masinyane)" + uniform = /obj/item/clothing/under/suit/black + head = null + belt = null + gloves = null + shoes = /obj/item/clothing/shoes/laceup + + backpack_contents = list(/obj/item/clothing/accessory/medal/gold/captain=1, /obj/item/spacecash/bundle/c10000=1) + + backpack = /obj/item/storage/backpack + satchel = /obj/item/storage/backpack/satchel/ + duffelbag = /obj/item/storage/backpack/duffelbag + courierbag = /obj/item/storage/backpack/messenger + +/datum/outfit/job/independent/captain/pirate + name = "Captain (Pirate)" + + ears = /obj/item/radio/headset/pirate/captain + uniform = /obj/item/clothing/under/costume/pirate + shoes = /obj/item/clothing/shoes/jackboots + head = /obj/item/clothing/head/pirate/captain + suit = /obj/item/clothing/suit/pirate/captain + +/datum/outfit/job/independent/captain/pirate/jupiter + name = "Independent - Captain (Nodesman)" // technically, this is part of SEC, but we have jackshit for SEC + + uniform = /obj/item/clothing/under/utility + gloves = /obj/item/clothing/gloves/combat + suit = /obj/item/clothing/suit/armor/vest/marine/medium + head = /obj/item/clothing/head/soft/black + shoes = /obj/item/clothing/shoes/combat + l_pocket = /obj/item/kitchen/knife/combat + implants = list(/obj/item/implant/radio) + accessory = null + +// Head of Personnel + +/datum/outfit/job/independent/hop + name = "Independent - Head of Personnel" + job_icon = "headofpersonnel" + jobtype = /datum/job/head_of_personnel + + id = /obj/item/card/id/silver + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/rank/command/head_of_personnel + dcoat = /obj/item/clothing/suit/hooded/wintercoat/captain + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/hopcap + + backpack_contents = list(/obj/item/storage/box/ids=1,\ + /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) + + backpack = /obj/item/storage/backpack/captain + satchel = /obj/item/storage/backpack/satchel/cap + duffelbag = /obj/item/storage/backpack/duffelbag/captain + courierbag = /obj/item/storage/backpack/messenger/com + + chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/head_of_personnel) + +/datum/outfit/job/independent/hop/western + name = "Independent - Head of Personnel (Western)" + + uniform = /obj/item/clothing/under/rank/security/detective/grey + shoes = /obj/item/clothing/shoes/cowboy/black + accessory = /obj/item/clothing/accessory/waistcoat + head = /obj/item/clothing/head/cowboy + +/datum/outfit/job/independent/hop/pirate + name = "Independent - Head of Personnel (Pirate)" + + ears = /obj/item/radio/headset/pirate + uniform = /obj/item/clothing/under/costume/pirate + shoes = /obj/item/clothing/shoes/jackboots + head = /obj/item/clothing/head/pirate + suit = /obj/item/clothing/suit/pirate + +// Head of Security + +/datum/outfit/job/independent/hos + name = "Independent - Head of Security" + job_icon = "headofsecurity" + jobtype = /datum/job/hos + + id = /obj/item/card/id/silver + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/rank/security/head_of_security + alt_uniform = null + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/hos/trenchcoat + alt_suit = /obj/item/clothing/suit/armor/vest/security/hos + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/beret/sec/hos + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + suit_store = null + l_pocket = /obj/item/restraints/handcuffs + backpack_contents = list(/obj/item/melee/classic_baton=1) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + courierbag = /obj/item/storage/backpack/messenger/sec + box = /obj/item/storage/box/survival/security + + chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos) + +// Roboticist + +/datum/outfit/job/independent/roboticist + name = "Independent - Roboticist" + job_icon = "roboticist" + jobtype = /datum/job/roboticist + + belt = /obj/item/storage/belt/utility/full + ears = /obj/item/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/rnd/roboticist + suit = /obj/item/clothing/suit/toggle/labcoat + alt_suit = /obj/item/clothing/suit/toggle/suspenders/gray + dcoat = /obj/item/clothing/suit/hooded/wintercoat/science + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + courierbag = /obj/item/storage/backpack/messenger/tox + +// Security Officer + +/datum/outfit/job/independent/security + name = "Independent - Security Officer" + jobtype = /datum/job/officer + job_icon = "securityofficer" + + ears = /obj/item/radio/headset/alt + uniform = /obj/item/clothing/under/rank/security/officer + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/helmet/sec + suit = /obj/item/clothing/suit/armor/vest/alt + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + shoes = /obj/item/clothing/shoes/jackboots + l_pocket = /obj/item/restraints/handcuffs + backpack_contents = null + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + courierbag = /obj/item/storage/backpack/messenger/sec + box = /obj/item/storage/box/survival/security + + chameleon_extras = list(/obj/item/gun/energy/disabler, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet) + //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state + +/datum/outfit/job/independent/security/western + name = "Independent - Security Officer (Western)" + + uniform = /obj/item/clothing/under/rank/security/officer/blueshirt + shoes = /obj/item/clothing/shoes/jackboots + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + head = /obj/item/clothing/head/cowboy/sec + +/datum/outfit/job/independent/security/pirate + name = "Independent - Security Officer (Pirate)" + + uniform = /obj/item/clothing/under/syndicate/camo + shoes = /obj/item/clothing/shoes/jackboots + head = /obj/item/clothing/head/bandana + suit = /obj/item/clothing/suit/armor/vest + +/datum/outfit/job/independent/security/pirate/jupiter + name = "Independent - Security Officer (Nodesman)" // technically, this is part of SEC, but we have jackshit for SEC + + uniform = /obj/item/clothing/under/utility + head = /obj/item/clothing/head/soft/black + shoes = /obj/item/clothing/shoes/combat + l_pocket = /obj/item/kitchen/knife/combat + + backpack_contents = list(/obj/item/melee/baton/loaded=1) + + implants = list(/obj/item/implant/radio) + +// Engineer + +/datum/outfit/job/independent/engineer + name = "Independent - Engineer" + job_icon = "stationengineer" + jobtype = /datum/job/engineer + + belt = /obj/item/storage/belt/utility/full/engi + l_pocket = /obj/item/storage/wallet + gloves = /obj/item/clothing/gloves/color/yellow + ears = /obj/item/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/engineering/engineer + alt_uniform = /obj/item/clothing/under/rank/engineering/engineer/hazard + dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering + shoes = /obj/item/clothing/shoes/workboots + head = /obj/item/clothing/head/hardhat/dblue + l_pocket = /obj/item/t_scanner + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + courierbag = /obj/item/storage/backpack/messenger/engi + + box = /obj/item/storage/box/survival/engineer + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + +/datum/outfit/job/independent/engineer/salvage + name = "Independent - Engineer (Salvager)" + + belt = null + l_pocket = null + +/datum/outfit/job/independent/engineer/pirate + name = "Independent - Engineer (Pirate)" + + uniform = /obj/item/clothing/under/costume/sailor + head = /obj/item/clothing/head/bandana + shoes = /obj/item/clothing/shoes/jackboots + +/datum/outfit/job/independent/engineer/pirate/jupiter + name = "Independent - Engineer (Nodesman)" // technically, this is part of SEC, but we have jackshit for SEC + + uniform = /obj/item/clothing/under/utility + head = /obj/item/clothing/head/soft/black + shoes = /obj/item/clothing/shoes/combat + l_pocket = /obj/item/kitchen/knife/combat/survival + gloves = /obj/item/clothing/gloves/combat + + implants = list(/obj/item/implant/radio) + +// Warden + +/datum/outfit/job/independent/warden + name = "Independent - Warden" + job_icon = "warden" + jobtype = /datum/job/warden + + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/security/warden + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/vest/security/warden + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/warden + glasses = /obj/item/clothing/glasses/hud/security + l_pocket = /obj/item/restraints/handcuffs + suit_store = null + backpack_contents = list(/obj/item/melee/classic_baton) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + courierbag = /obj/item/storage/backpack/messenger/sec + box = /obj/item/storage/box/survival/security + + chameleon_extras = /obj/item/gun/ballistic/shotgun/automatic/combat/compact + +// Chief Engineer + +/datum/outfit/job/independent/ce + name = "Independent - Chief Engineer" + jobtype = /datum/job/chief_engineer + job_icon = "chiefengineer" + + id = /obj/item/card/id/silver + belt = /obj/item/storage/belt/utility/chief/full + l_pocket = /obj/item/storage/wallet + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/rank/engineering/chief_engineer + dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/hardhat/white + gloves = /obj/item/clothing/gloves/color/black + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1) + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + courierbag = /obj/item/storage/backpack/messenger/engi + + box = /obj/item/storage/box/survival/engineer + chameleon_extras = /obj/item/stamp/ce + +// Medical Doctor + +/datum/outfit/job/independent/doctor + name = "Independent - Medical Doctor" + job_icon = "medicaldoctor" + jobtype = /datum/job/doctor + + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical/doctor/blue + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/apron/surgical + dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/med + + box = /obj/item/storage/box/survival/medical + + chameleon_extras = /obj/item/gun/syringe + +/datum/outfit/job/independent/doctor/pirate + +// Cargo Tech + +/datum/outfit/job/independent/cargo_tech + name = "Independent - Cargo Tech" + jobtype = /datum/job/cargo_tech + job_icon = "cargotechnician" + + ears = /obj/item/radio/headset/headset_cargo + uniform = /obj/item/clothing/under/color/khaki + dcoat = /obj/item/clothing/suit/hooded/wintercoat/cargo + backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) + +// Atmos Tech + +/datum/outfit/job/independent/atmos + name = "Independent - Atmos Tech" + jobtype = /datum/job/atmos + job_icon = "atmospherictechnician" + + belt = /obj/item/storage/belt/utility/atmostech + ears = /obj/item/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/engineering/engineer/hazard + dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering + l_pocket = /obj/item/analyzer + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + courierbag = /obj/item/storage/backpack/messenger/engi + + box = /obj/item/storage/box/survival/engineer + + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + +// Scientist + +/datum/outfit/job/independent/scientist + name = "Independent - Scientist" + jobtype = /datum/job/scientist + job_icon = "scientist" + + ears = /obj/item/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/rnd/scientist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/science + alt_suit = /obj/item/clothing/suit/toggle/suspenders/blue + dcoat = /obj/item/clothing/suit/hooded/wintercoat/science + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + courierbag = /obj/item/storage/backpack/messenger/tox + +// Brig Physician + +/datum/outfit/job/independent/brig_phys + name = "Independent - Brig Physician" + jobtype = /datum/job/brig_phys + job_icon = "brigphysician" + + ears = /obj/item/radio/headset/headset_medsec/alt + uniform = /obj/item/clothing/under/rank/security/brig_phys + shoes = /obj/item/clothing/shoes/sneakers/white + glasses = /obj/item/clothing/glasses/hud/health + suit = /obj/item/clothing/suit/toggle/labcoat/brig_phys + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + head = /obj/item/clothing/head/soft/sec/brig_phys + +// Paramedic + +/datum/outfit/job/independent/paramedic + name = "Independent - Paramedic" + jobtype = /datum/job/paramedic + job_icon = "paramedic" + + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical/paramedic/emt + head = /obj/item/clothing/head/soft/paramedic + shoes = /obj/item/clothing/shoes/sneakers/blue + suit = /obj/item/clothing/suit/toggle/labcoat/paramedic + dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical/paramedic + gloves = /obj/item/clothing/gloves/color/latex + + backpack_contents = list(/obj/item/roller=1) + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/para + + box = /obj/item/storage/box/survival/medical + + chameleon_extras = /obj/item/gun/syringe + +// Quartermaster + +/datum/outfit/job/independent/quartermaster + name = "Independent - Quartermaster" + jobtype = /datum/job/qm + job_icon = "quartermaster" + + ears = /obj/item/radio/headset/headset_cargo + uniform = /obj/item/clothing/under/rank/cargo/qm + head = /obj/item/clothing/head/supply_chief + dcoat = /obj/item/clothing/suit/hooded/wintercoat/cargo + shoes = /obj/item/clothing/shoes/sneakers/brown + glasses = /obj/item/clothing/glasses/sunglasses + l_hand = /obj/item/clipboard + backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) + + chameleon_extras = /obj/item/stamp/qm + +/datum/outfit/job/independent/quartermaster/western + name = "Independent - Quartermaster (Western)" + + uniform = /obj/item/clothing/under/rank/cargo/qm + suit = /obj/item/clothing/suit/toggle/hazard + shoes = /obj/item/clothing/shoes/workboots + glasses = /obj/item/clothing/glasses/sunglasses + head = /obj/item/clothing/head/cowboy/sec + +/datum/outfit/job/independent/miner + name = "Independent - Miner" + jobtype = /datum/job/mining + job_icon = "shaftminer" + + ears = /obj/item/radio/headset/headset_cargo/mining + shoes = /obj/item/clothing/shoes/workboots/mining + gloves = /obj/item/clothing/gloves/explorer + uniform = /obj/item/clothing/under/rank/cargo/miner + suit = /obj/item/clothing/suit/hazardvest + dcoat = /obj/item/clothing/suit/hooded/wintercoat/miner + l_pocket = /obj/item/storage/bag/ore + backpack_contents = list( + /obj/item/flashlight/seclite=1,\ + /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/stack/marker_beacon/ten=1,\ + /obj/item/radio/weather_monitor=1) + + backpack = /obj/item/storage/backpack/explorer + satchel = /obj/item/storage/backpack/satchel/explorer + duffelbag = /obj/item/storage/backpack/duffelbag + box = /obj/item/storage/box/survival/mining + + chameleon_extras = /obj/item/gun/energy/kinetic_accelerator + +/datum/outfit/job/independent/miner/hazard + name = "Independent - Miner (Hazard Uniform)" + + uniform = /obj/item/clothing/under/rank/cargo/miner/hazard + alt_uniform = null + alt_suit = /obj/item/clothing/suit/toggle/hazard + +/datum/outfit/job/independent/miner/scientist + name = "Independent - Miner (Minerologist)" + + uniform = /obj/item/clothing/under/rank/cargo/miner/hazard + alt_uniform = /obj/item/clothing/under/rank/rnd/roboticist + suit = /obj/item/clothing/suit/toggle/labcoat/science + alt_suit = /obj/item/clothing/suit/toggle/hazard + dcoat = /obj/item/clothing/suit/hooded/wintercoat/science + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + courierbag = /obj/item/storage/backpack/messenger/tox + +// Cook + +/datum/outfit/job/independent/cook + name = "Independent - Cook" + jobtype = /datum/job/cook + job_icon = "cook" + + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/civilian/chef //WS Edit - Alt Uniforms + suit = /obj/item/clothing/suit/toggle/chef + alt_suit = /obj/item/clothing/suit/apron/chef + head = /obj/item/clothing/head/chefhat + mask = /obj/item/clothing/mask/fakemoustache/italian + backpack_contents = list(/obj/item/sharpener = 1) + +/datum/outfit/job/independent/cook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + var/list/possible_boxes = subtypesof(/obj/item/storage/box/ingredients) + var/chosen_box = pick(possible_boxes) + var/obj/item/storage/box/I = new chosen_box(src) + H.equip_to_slot_or_del(I,ITEM_SLOT_BACKPACK) + var/datum/martial_art/cqc/under_siege/justacook = new + justacook.teach(H) + +// Bartender + +/datum/outfit/job/independent/bartender + name = "Independent - Bartender" + + glasses = /obj/item/clothing/glasses/sunglasses/reagent + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/civilian/bartender + alt_uniform = /obj/item/clothing/under/rank/civilian/bartender/purple + alt_suit = /obj/item/clothing/suit/apron/purple_bartender + suit = /obj/item/clothing/suit/armor/vest + backpack_contents = list(/obj/item/storage/box/beanbag=1) + shoes = /obj/item/clothing/shoes/laceup + +/datum/outfit/job/independent/bartender/pharma + name = "Independent - Bartender (Mixologist)" + + backpack_contents = list(/obj/item/storage/box/syringes=1, /obj/item/storage/box/drinkingglasses = 1) + ears = /obj/item/radio/headset/headset_med + suit = /obj/item/clothing/suit/toggle/labcoat + l_pocket = /obj/item/reagent_containers/food/drinks/shaker + belt = /obj/item/storage/belt + gloves = /obj/item/clothing/gloves/color/latex/nitrile + uniform = /obj/item/clothing/under/suit/black + +// Lawyer + +/datum/outfit/job/independent/lawyer + name = "Independent - Lawyer" + job_icon = "lawyer" + jobtype = /datum/job/lawyer + + ears = /obj/item/radio/headset/headset_srvsec + uniform = /obj/item/clothing/under/rank/civilian/lawyer/bluesuit + suit = /obj/item/clothing/suit/toggle/lawyer + shoes = /obj/item/clothing/shoes/laceup + l_hand = /obj/item/storage/briefcase/lawyer + l_pocket = /obj/item/clothing/accessory/lawyers_badge + + chameleon_extras = /obj/item/stamp/law + +// Curator + +/datum/outfit/job/independent/curator + name = "Independent - Curator" + job_icon = "curator" + jobtype = /datum/job/curator + + shoes = /obj/item/clothing/shoes/laceup + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/civilian/curator + l_hand = /obj/item/storage/bag/books + l_pocket = /obj/item/key/displaycase + accessory = /obj/item/clothing/accessory/pocketprotector/full + backpack_contents = list( + /obj/item/choice_beacon/hero = 1, + /obj/item/barcodescanner = 1 + ) + +/datum/outfit/job/independent/curator/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + + if(visualsOnly) + return + + H.grant_all_languages(TRUE, TRUE, TRUE, LANGUAGE_CURATOR) + +/datum/outfit/job/independent/curator/dungeonmaster + + +// Chaplain + +/datum/outfit/job/independent/chaplain + name = "Independent - Chaplain" + job_icon = "chaplain" + jobtype = /datum/job/chaplain + + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/civilian/chaplain + backpack_contents = list( + /obj/item/stamp/chap = 1, + /obj/item/camera/spooky = 1 + ) + + backpack = /obj/item/storage/backpack/cultpack + satchel = /obj/item/storage/backpack/cultpack + + chameleon_extras = /obj/item/stamp/chap + +// Chemist + +/datum/outfit/job/independent/chemist + name = "Independent - Chemist" + job_icon = "chemist" + jobtype = /datum/job/chemist + + glasses = /obj/item/clothing/glasses/science + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical/chemist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/chemist + dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical + + backpack = /obj/item/storage/backpack/chemistry + satchel = /obj/item/storage/backpack/satchel/chem + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/chem + + box = /obj/item/storage/box/survival/medical + + chameleon_extras = /obj/item/gun/syringe + +/datum/outfit/job/independent/chemist/pharma + +// Janitor + +/datum/outfit/job/independent/janitor + name = "Independent - Janitor" + job_icon = "janitor" + jobtype = /datum/job/janitor + + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/civilian/janitor + + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + +// Research Director + +/datum/outfit/job/independent/rd + name = "Independent - Research Director" + job_icon = "researchdirector" + jobtype = /datum/job/rd + + id = /obj/item/card/id/silver + ears = /obj/item/radio/headset/heads/rd + uniform = /obj/item/clothing/under/rank/rnd/research_director/turtleneck + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat + alt_suit = /obj/item/clothing/suit/toggle/suspenders + dcoat = /obj/item/clothing/suit/hooded/wintercoat/science //WS Edit - Alt Uniforms + l_hand = /obj/item/clipboard + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1) + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + courierbag = /obj/item/storage/backpack/messenger/tox + + chameleon_extras = /obj/item/stamp/rd + +// Chief Medical Officer + +/datum/outfit/job/independent/cmo + name = "Independent - Chief Medical Officer" + job_icon = "chiefmedicalofficer" + jobtype = /datum/job/cmo + + id = /obj/item/card/id/silver + l_pocket = /obj/item/pinpointer/crew + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/rank/medical/doctor/blue + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat/cmo + dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/med + + box = /obj/item/storage/box/survival/medical + + chameleon_extras = list(/obj/item/gun/syringe, /obj/item/stamp/cmo) + +/datum/outfit/job/independent/cmo/pharma + +// Detective + +/datum/outfit/job/independent/detective + name = "Independent - Detective" + job_icon = "detective" + jobtype = /datum/job/detective + + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/security/detective + neck = /obj/item/clothing/neck/tie/detective + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/det_suit + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/fedora/det_hat + l_pocket = /obj/item/toy/crayon/white + backpack_contents = list(/obj/item/storage/box/evidence=1,\ + /obj/item/detective_scanner=1,\ + /obj/item/melee/classic_baton=1) + mask = /obj/item/clothing/mask/cigarette + + implants = list(/obj/item/implant/mindshield) + + chameleon_extras = list(/obj/item/gun/ballistic/revolver/detective, /obj/item/clothing/glasses/sunglasses) + +/datum/outfit/job/independent/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/clothing/mask/cigarette/cig = H.wear_mask + if(istype(cig)) //Some species specfic changes can mess this up (plasmamen) + cig.light("") + + if(visualsOnly) + return + +// Botanist + +/datum/outfit/job/independent/botanist + name = "Independent - Botanist" + job_icon = "botanist" + jobtype = /datum/job/hydro + + ears = /obj/item/radio/headset/headset_srv + uniform = /obj/item/clothing/under/color/green + dcoat = /obj/item/clothing/suit/hooded/wintercoat/hydro + suit = /obj/item/clothing/suit/apron/overalls + gloves =/obj/item/clothing/gloves/botanic_leather + suit_store = /obj/item/plant_analyzer + + backpack = /obj/item/storage/backpack/botany + satchel = /obj/item/storage/backpack/satchel/hyd + courierbag = /obj/item/storage/backpack/messenger/hyd + +/datum/outfit/job/independent/botanist/pharma + name = "Independent - Botanist (Herbalist)" + + ears = /obj/item/radio/headset/headset_med + belt = /obj/item/storage/bag/plants + suit = /obj/item/clothing/suit/apron/overalls + uniform = /obj/item/clothing/under/utility diff --git a/code/modules/clothing/outfits/factions/inteq.dm b/code/modules/clothing/outfits/factions/inteq.dm new file mode 100644 index 000000000000..79acfa569804 --- /dev/null +++ b/code/modules/clothing/outfits/factions/inteq.dm @@ -0,0 +1,195 @@ +/datum/outfit/job/inteq + name = "IRMG - Base Outfit" + faction_icon = "bg_inteq" + + uniform = /obj/item/clothing/under/syndicate/inteq + box = /obj/item/storage/box/survival + + backpack = /obj/item/storage/backpack + satchel = /obj/item/storage/backpack/satchel + duffelbag = /obj/item/storage/backpack/duffelbag + courierbag = /obj/item/storage/backpack/messenger/inteq + +/datum/outfit/job/inteq/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.faction |= list(FACTION_PLAYER_INTEQ) + +///assistants + +/datum/outfit/job/inteq/assistant + name = "IRMG - Recruit" + jobtype = /datum/job/assistant + job_icon = "assistant" + + r_pocket = /obj/item/radio + +///captains + +/datum/outfit/job/inteq/captain + name = "IRMG - Vanguard (Naked)" + jobtype = /datum/job/captain + job_icon = "captain" + + ears = /obj/item/radio/headset/inteq/alt/captain + shoes = /obj/item/clothing/shoes/combat + r_pocket = /obj/item/assembly/flash/handheld + l_pocket = /obj/item/restraints/handcuffs + jobtype = /datum/job/captain + id = /obj/item/card/id/gold + + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) + +/datum/outfit/job/inteq/captain/geared + name = "IRMG - Vanguard" + + head = /obj/item/clothing/head/beret/sec/hos/inteq + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq + mask = /obj/item/clothing/mask/gas/sechailer/inteq + belt = /obj/item/storage/belt/security/webbing/inteq + suit = /obj/item/clothing/suit/armor/hos/inteq + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq + gloves = /obj/item/clothing/gloves/combat + accessory = null + +/datum/outfit/job/inteq/captain/honorable + name = "IRMG - Honorable Vanguard" + + head = /obj/item/clothing/head/beret/sec/hos/inteq/honorable + uniform = /obj/item/clothing/under/syndicate/inteq/honorable + suit = /obj/item/clothing/suit/armor/hos/inteq/honorable + gloves = /obj/item/clothing/gloves/combat + shoes = /obj/item/clothing/shoes/combat + ears = /obj/item/radio/headset/inteq/alt/captain + belt = /obj/item/storage/belt/military/assault + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq + +/datum/outfit/job/inteq/captain/honorable/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + if(visualsOnly) + return + + var/obj/item/card/id/W = H.wear_id + W.assignment = "Honorable Vanguard" + W.update_label() + ..() + +///Chief Engineer + +/datum/outfit/job/inteq/ce + name = "IRMG - Artificer Class II" + job_icon = "chiefengineer" + jobtype = /datum/job/chief_engineer + + ears = /obj/item/radio/headset/inteq + uniform = /obj/item/clothing/under/syndicate/inteq/artificer + head = /obj/item/clothing/head/hardhat/white + mask = /obj/item/clothing/mask/gas/sechailer/inteq + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + belt = /obj/item/storage/belt/utility/full + + id = /obj/item/card/id/silver + belt = /obj/item/storage/belt/utility/chief/full + + courierbag = /obj/item/storage/backpack/messenger/inteq + + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1) + +///paramedic + +/datum/outfit/job/inteq/paramedic + name = "IRMG - Corpsman" + job_icon = "paramedic" + jobtype = /datum/job/paramedic + + uniform = /obj/item/clothing/under/syndicate/inteq/corpsman + head = /obj/item/clothing/head/soft/inteq/corpsman + suit = /obj/item/clothing/suit/armor/inteq/corpsman + shoes = /obj/item/clothing/shoes/combat + belt = /obj/item/storage/belt/medical/webbing/paramedic + ears = /obj/item/radio/headset/headset_medsec/alt + + suit_store = /obj/item/flashlight/pen + backpack_contents = list(/obj/item/roller=1) + +///Security Officers + +/datum/outfit/job/inteq/security + name = "IRMG - Enforcer" + jobtype = /datum/job/officer + job_icon = "securityofficer" + + head = /obj/item/clothing/head/helmet/inteq + suit = /obj/item/clothing/suit/armor/vest/alt + belt = /obj/item/storage/belt/security/webbing/inteq + mask = /obj/item/clothing/mask/gas/sechailer/inteq + uniform = /obj/item/clothing/under/syndicate/inteq + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq + shoes = /obj/item/clothing/shoes/combat + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq + gloves = /obj/item/clothing/gloves/combat + + backpack = /obj/item/storage/backpack/messenger/inteq + satchel = /obj/item/storage/backpack/messenger/inteq + courierbag = /obj/item/storage/backpack/messenger/inteq + +/datum/outfit/job/inteq/security/beluga + name = "IRMG - Enforcer (Beluga)" + + head = /obj/item/clothing/head/beret/sec/inteq + accessory = /obj/item/clothing/accessory/waistcoat + suit = null + belt = null + mask = null + shoes = /obj/item/clothing/shoes/laceup + glasses = null + gloves = /obj/item/clothing/gloves/color/evening + + backpack = /obj/item/storage/backpack/messenger/inteq + satchel = /obj/item/storage/backpack/messenger/inteq + courierbag = /obj/item/storage/backpack/messenger/inteq + +/datum/outfit/job/inteq/security/empty + name = "IRMG - Enforcer (Naked)" + head = null + suit = null + belt = null + mask = null + gloves = null + +///engineers + +/datum/outfit/job/inteq/engineer + name = "IRMG - Artificer" + job_icon = "stationengineer" + jobtype = /datum/job/engineer + + uniform = /obj/item/clothing/under/syndicate/inteq/artificer + head = /obj/item/clothing/head/soft/inteq + shoes = /obj/item/clothing/shoes/combat + belt = /obj/item/storage/belt/utility/full/engi + r_pocket = /obj/item/t_scanner + +//wardens + +/datum/outfit/job/inteq/warden + name = "IRMG - Master At Arms" + jobtype = /datum/job/warden + job_icon = "warden" + + ears = /obj/item/radio/headset/inteq/alt + uniform = /obj/item/clothing/under/syndicate/inteq + head = /obj/item/clothing/head/beret/sec/hos/inteq + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq + mask = /obj/item/clothing/mask/gas/sechailer/inteq + belt = /obj/item/storage/belt/military/assault + suit = /obj/item/clothing/suit/armor/vest/alt + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + suit_store = null + + courierbag = /obj/item/storage/backpack/messenger/inteq + backpack_contents = list(/obj/item/melee/classic_baton=1) diff --git a/code/modules/clothing/outfits/factions/minutemen.dm b/code/modules/clothing/outfits/factions/minutemen.dm new file mode 100644 index 000000000000..0b991268c408 --- /dev/null +++ b/code/modules/clothing/outfits/factions/minutemen.dm @@ -0,0 +1,352 @@ +//top outfit of everything Minuteman. Touch at own risk. + +/datum/outfit/job/minutemen + name = "Minutemen - Base Outfit" + + uniform = /obj/item/clothing/under/rank/security/officer/minutemen + alt_uniform = null + + faction_icon = "bg_minutemen" + + backpack = /obj/item/storage/backpack/security/cmm + satchel = /obj/item/storage/backpack/satchel/sec/cmm + duffelbag = /obj/item/storage/backpack/duffelbag //to-do: bug rye for cmm duffles // rye. rye. give me 20 pound bag of ice + satchel = /obj/item/storage/backpack/messenger //and these + + box = /obj/item/storage/box/survival + +/datum/outfit/job/minutemen/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.faction |= list(FACTION_PLAYER_MINUTEMAN) + +///assistant + +/datum/outfit/job/minutemen/assistant + name = "Minutemen - Volunteer" + job_icon = "assistant" + jobtype = /datum/job/assistant + + r_pocket = /obj/item/radio + +///captains + +/datum/outfit/job/minutemen/captain + name = "Minutemen - Captain" + job_icon = "captain" + jobtype = /datum/job/captain + + id = /obj/item/card/id/gold + gloves = /obj/item/clothing/gloves/color/captain + + + backpack = /obj/item/storage/backpack/captain + satchel = /obj/item/storage/backpack/satchel/cap + duffelbag = /obj/item/storage/backpack/duffelbag/captain + courierbag = /obj/item/storage/backpack/messenger/com + + accessory = /obj/item/clothing/accessory/medal/gold/captain + + ears = /obj/item/radio/headset/minutemen/alt/captain + uniform = /obj/item/clothing/under/rank/command/minutemen + alt_uniform = null + suit = /obj/item/clothing/suit/toggle/lawyer/minutemen + alt_suit = null + dcoat = /obj/item/clothing/suit/hooded/wintercoat/captain + + shoes = /obj/item/clothing/shoes/combat + head = /obj/item/clothing/head/cowboy/sec/minutemen + backpack = /obj/item/storage/backpack + backpack_contents = list(/obj/item/storage/box/ids=1,\ + /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) + +/datum/outfit/job/minutemen/captain/general + name = "Minutemen - General" + + head = /obj/item/clothing/head/caphat/minutemen + ears = /obj/item/radio/headset/minutemen/alt/captain + uniform = /obj/item/clothing/under/rank/command/minutemen + suit = /obj/item/clothing/suit/armor/vest/capcarapace/minutemen + shoes = /obj/item/clothing/shoes/combat + + box = /obj/item/storage/box/survival/engineer/radio + backpack = /obj/item/storage/backpack + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/gun/ballistic/revolver/mateba=1) + +///chemist + +/datum/outfit/job/minutemen/chemist + name = "Minutemen - Chemical Scientist" + job_icon = "chemist" + jobtype = /datum/job/chemist + + glasses = /obj/item/clothing/glasses/science + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/chemist + + backpack = /obj/item/storage/backpack/chemistry + satchel = /obj/item/storage/backpack/satchel/chem + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/chem + + box = /obj/item/storage/box/survival/medical + chameleon_extras = /obj/item/gun/syringe + +///Chief Engineer + +/datum/outfit/job/minutemen/ce + name = "Minutemen - Foreman" + job_icon = "chiefengineer" + jobtype = /datum/job/chief_engineer + + id = /obj/item/card/id/silver + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + courierbag = /obj/item/storage/backpack/messenger/engi + + box = /obj/item/storage/box/survival/engineer + + chameleon_extras = /obj/item/stamp/ce + + + ears = /obj/item/radio/headset/minutemen/alt + uniform = /obj/item/clothing/under/rank/command/minutemen + alt_uniform = null + suit = /obj/item/clothing/suit/toggle/lawyer/minutemen + alt_suit = null + gloves = /obj/item/clothing/gloves/combat + belt = /obj/item/storage/belt/utility/full + shoes = /obj/item/clothing/shoes/combat + head = /obj/item/clothing/head/cowboy/sec/minutemen + backpack = /obj/item/storage/backpack + backpack_contents = list( + /obj/item/melee/classic_baton/telescopic=1, + /obj/item/modular_computer/tablet/preset/advanced = 1 + ) + +/// Head Of Personnel + +/datum/outfit/job/minutemen/head_of_personnel + name = "Minutemen - Bridge Officer" + job_icon = "headofpersonnel" + jobtype = /datum/job/head_of_personnel + + id = /obj/item/card/id/silver + + backpack = /obj/item/storage/backpack/captain + satchel = /obj/item/storage/backpack/satchel/cap + duffelbag = /obj/item/storage/backpack/duffelbag/captain + courierbag = /obj/item/storage/backpack/messenger/com + + chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/head_of_personnel) + + ears = /obj/item/radio/headset/minutemen/alt + uniform = /obj/item/clothing/under/rank/command/minutemen + alt_uniform = null + suit = /obj/item/clothing/suit/toggle/lawyer/minutemen + alt_suit = null + + shoes = /obj/item/clothing/shoes/combat + head = /obj/item/clothing/head/cowboy/sec/minutemen + backpack = /obj/item/storage/backpack + backpack_contents = list(/obj/item/storage/box/ids=1,\ + /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) + +/// Medical Doctor +/datum/outfit/job/minutemen/doctor + name = "Minutemen - Field Medic" + job_icon = "medicaldoctor" + jobtype = /datum/job/doctor + + l_hand = /obj/item/storage/firstaid/medical + suit_store = /obj/item/flashlight/pen + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/med + box = /obj/item/storage/box/survival/medical + + chameleon_extras = /obj/item/gun/syringe + + uniform = /obj/item/clothing/under/rank/security/officer/minutemen + accessory = /obj/item/clothing/accessory/armband/medblue + shoes = /obj/item/clothing/shoes/sneakers/white + head = /obj/item/clothing/head/beret/med + suit = null + suit_store = null + +///paramedic +/datum/outfit/job/minutemen/paramedic + name = "Minutemen - BARD Combat Medic" + job_icon = "paramedic" + jobtype = /datum/job/paramedic + + + uniform = /obj/item/clothing/under/rank/medical/paramedic/emt + head = /obj/item/clothing/head/soft/paramedic + suit = /obj/item/clothing/suit/armor/vest + shoes = /obj/item/clothing/shoes/sneakers/blue + gloves = /obj/item/clothing/gloves/color/latex/nitrile + belt = /obj/item/storage/belt/medical/paramedic + suit_store = /obj/item/flashlight/pen + backpack_contents = list(/obj/item/roller=1) + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/para + + box = /obj/item/storage/box/survival/medical + +///roboticist +/datum/outfit/job/minutemen/roboticist + name = "Minutemen - Mech Technician" + job_icon = "roboticist" + jobtype = /datum/job/roboticist + + belt = /obj/item/storage/belt/utility/full + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + courierbag = /obj/item/storage/backpack/messenger/tox + + + uniform = /obj/item/clothing/under/rank/security/officer/minutemen + shoes = /obj/item/clothing/shoes/combat + ears = /obj/item/radio/headset/minutemen + suit = /obj/item/clothing/suit/toggle/labcoat/science + alt_suit = /obj/item/clothing/suit/toggle/suspenders/gray + +///scientist +/datum/outfit/job/minutemen/scientist + name = "Minutemen - Scientist" + job_icon = "scientist" + jobtype = /datum/job/scientist + + uniform = /obj/item/clothing/under/rank/security/officer/minutemen + backpack = /obj/item/storage/backpack/security/cmm + + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/science + alt_suit = /obj/item/clothing/suit/toggle/suspenders/blue + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + courierbag = /obj/item/storage/backpack/messenger/tox + +//security officers + +/datum/outfit/job/minutemen/security + name = "Minutemen - Minuteman" + job_icon = "securityofficer" + jobtype = /datum/job/officer + + head = /obj/item/clothing/head/helmet/bulletproof/minutemen + mask = /obj/item/clothing/mask/gas/sechailer/minutemen + suit = /obj/item/clothing/suit/armor/vest/bulletproof + alt_suit = null + uniform = /obj/item/clothing/under/rank/security/officer/minutemen + alt_uniform = null + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/radio/headset/alt + + belt = /obj/item/storage/belt/military/minutemen + + l_pocket = /obj/item/flashlight/seclite + r_pocket = /obj/item/tank/internals/emergency_oxygen/double + box = /obj/item/storage/box/survival/engineer/radio + backpack_contents = null + +/datum/outfit/job/minutemen/security/armed + name = "Minutemen - Minuteman (Armed)" + + suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen + belt = /obj/item/storage/belt/military/minutemen/p16 + +/datum/outfit/job/minutemen/security/mech_pilot + name = "Minutemen - Mech Pilot" + + suit = /obj/item/clothing/suit/armor/vest/alt + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + glasses = /obj/item/clothing/glasses/hud/diagnostic + +///miners + +/datum/outfit/job/minutemen/miner + name = "Minutemen - Industrial Miner" + job_icon = "shaftminer" + jobtype = /datum/job/mining + + l_pocket = /obj/item/reagent_containers/hypospray/medipen/survival + uniform = /obj/item/clothing/under/rank/cargo/miner/hazard + alt_uniform = null + alt_suit = /obj/item/clothing/suit/toggle/hazard + + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/combat + backpack_contents = list( + /obj/item/flashlight/seclite=1, + /obj/item/stack/marker_beacon/ten=1, + /obj/item/weldingtool=1 + ) + +///engineers + +/datum/outfit/job/minutemen/engineer + name = "Minutemen - Mechanic" + job_icon = "stationengineer" + jobtype = /datum/job/engineer + + belt = /obj/item/storage/belt/utility/full/engi + shoes = /obj/item/clothing/shoes/workboots + r_pocket = /obj/item/t_scanner + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + courierbag = /obj/item/storage/backpack/messenger/engi + + uniform = /obj/item/clothing/under/rank/security/officer/minutemen + accessory = /obj/item/clothing/accessory/armband/engine + head = /obj/item/clothing/head/hardhat/dblue + suit = /obj/item/clothing/suit/hazardvest + + box = /obj/item/storage/box/survival/engineer + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + + +///warden + +/datum/outfit/job/minutemen/warden + name = "Minutemen - Field Commander" + job_icon = "warden" + jobtype = /datum/job/warden + + glasses = /obj/item/clothing/glasses/sunglasses + ears = /obj/item/radio/headset/minutemen/alt + uniform = /obj/item/clothing/under/rank/security/officer/minutemen + accessory = /obj/item/clothing/accessory/armband + head = /obj/item/clothing/head/cowboy/sec/minutemen + suit = /obj/item/clothing/suit/armor/vest/bulletproof + belt = /obj/item/storage/belt/military/minutemen + shoes = /obj/item/clothing/shoes/combat + + l_pocket = /obj/item/flashlight/seclite + r_pocket = /obj/item/tank/internals/emergency_oxygen/double + + box = /obj/item/storage/box/survival/engineer/radio + backpack = /obj/item/storage/backpack + backpack_contents = null + +/datum/outfit/job/minutemen/warden/armed + name = "Minutemen - Field Commander (Armed)" + + suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen + 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/clothing/outfits/factions/nanotrasen.dm b/code/modules/clothing/outfits/factions/nanotrasen.dm new file mode 100644 index 000000000000..409a8dd55d47 --- /dev/null +++ b/code/modules/clothing/outfits/factions/nanotrasen.dm @@ -0,0 +1,546 @@ +/datum/outfit/job/nanotrasen + name = "Nanotrasen - Base Outfit" + faction_icon = "bg_nanotrasen" + + box = /obj/item/storage/box/survival + id = /obj/item/card/id + + +/datum/outfit/job/nanotrasen/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.faction |= list(FACTION_PLAYER_NANOTRASEN) + +// Assistant + +/datum/outfit/job/nanotrasen/assistant + name = "Nanotrasen - Assistant" + jobtype = /datum/job/assistant + job_icon = "assistant" + + uniform = /obj/item/clothing/under/color/grey + shoes = /obj/item/clothing/shoes/sneakers/black + belt = /obj/item/pda + +// Captain + +/datum/outfit/job/nanotrasen/captain + name = "Nanotrasen - Captain" + job_icon = "captain" + jobtype = /datum/job/captain + + id = /obj/item/card/id/gold + belt = /obj/item/pda/captain + gloves = /obj/item/clothing/gloves/color/captain/nt + ears = /obj/item/radio/headset/nanotrasen/captain + uniform = /obj/item/clothing/under/rank/command/captain/nt + alt_uniform = /obj/item/clothing/under/rank/command/captain/parade + dcoat = /obj/item/clothing/suit/hooded/wintercoat/captain + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/caphat/nt + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) + + backpack = /obj/item/storage/backpack/captain + satchel = /obj/item/storage/backpack/satchel/cap + duffelbag = /obj/item/storage/backpack/duffelbag/captain + courierbag = /obj/item/storage/backpack/messenger/com + + accessory = /obj/item/clothing/accessory/medal/gold/captain + + chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain) + +/datum/outfit/job/nanotrasen/captain/lp + name = "Nanotrasen - Loss Prevention Lieutenant" + + implants = list(/obj/item/implant/mindshield) + ears = /obj/item/radio/headset/nanotrasen/alt/captain + id = /obj/item/card/id/lplieu + belt = /obj/item/pda/captain + gloves = /obj/item/clothing/gloves/color/black + uniform = /obj/item/clothing/under/rank/security/head_of_security/alt/lp + alt_uniform = /obj/item/clothing/under/rank/security/head_of_security/alt/skirt/lp + dcoat = /obj/item/clothing/suit/jacket + shoes = /obj/item/clothing/shoes/jackboots + head = /obj/item/clothing/head/beret/command + + satchel = /obj/item/storage/backpack/satchel/cap + duffelbag = /obj/item/storage/backpack/duffelbag/captain + courierbag = /obj/item/storage/backpack/messenger/com + +/datum/outfit/job/nanotrasen/captain/centcom + name = "Nanotrasen - Captain (Central Command)" + + uniform = /obj/item/clothing/under/rank/centcom/officer + gloves = /obj/item/clothing/gloves/combat + head = /obj/item/clothing/head/centhat + +// Head of Personnel + +/datum/outfit/job/nanotrasen/hop + name = "Nanotrasen - Head of Personnel" + job_icon = "headofpersonnel" + jobtype = /datum/job/head_of_personnel + + belt = /obj/item/pda/heads/head_of_personnel + id = /obj/item/card/id/silver + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/rank/command/head_of_personnel/nt + alt_suit = /obj/item/clothing/suit/ianshirt + dcoat = /obj/item/clothing/suit/hooded/wintercoat/captain + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/hopcap/nt + backpack_contents = list(/obj/item/storage/box/ids=1,\ + /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) + + backpack = /obj/item/storage/backpack/captain + satchel = /obj/item/storage/backpack/satchel/cap + duffelbag = /obj/item/storage/backpack/duffelbag/captain + courierbag = /obj/item/storage/backpack/messenger/com + + chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/head_of_personnel) + +// Head of Security + +/datum/outfit/job/nanotrasen/hos + name = "Nanotrasen - Head of Security" + job_icon = "headofsecurity" + jobtype = /datum/job/hos + + id = /obj/item/card/id/silver + belt = /obj/item/pda/heads/hos + ears = /obj/item/radio/headset/nanotrasen/alt + uniform = /obj/item/clothing/under/rank/security/head_of_security/nt + alt_uniform = null + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/hos/trenchcoat + alt_suit = /obj/item/clothing/suit/armor/vest/security/hos + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/beret/sec/hos + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + suit_store = null + r_pocket = /obj/item/assembly/flash/handheld + l_pocket = /obj/item/restraints/handcuffs + backpack_contents = list(/obj/item/melee/classic_baton=1) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + courierbag = /obj/item/storage/backpack/messenger/sec + box = /obj/item/storage/box/survival/security + + implants = list(/obj/item/implant/mindshield) + + chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos) + +// Roboticist + +/datum/outfit/job/nanotrasen/roboticist + name = "Nanotrasen - Mech Technician" + job_icon = "roboticist" + jobtype = /datum/job/roboticist + + uniform = /obj/item/clothing/under/rank/rnd/roboticist + suit = /obj/item/clothing/suit/longcoat/robowhite + ears = /obj/item/radio/headset/nanotrasen + glasses = /obj/item/clothing/glasses/welding + + backpack_contents = list(/obj/item/weldingtool/hugetank) + +// Pilot. idk + +/datum/outfit/job/nanotrasen/pilot + name = "Nanotrasen - Pilot" + + uniform = /obj/item/clothing/under/rank/security/officer/military + suit = /obj/item/clothing/suit/jacket/leather/duster + glasses = /obj/item/clothing/glasses/hud/spacecop + accessory = /obj/item/clothing/accessory/holster + head = /obj/item/clothing/head/beret/command + +// Lawyer + +/datum/outfit/job/nanotrasen/lawyer + name = "Nanotrasen - Lawyer" + job_icon = "lawyer" + jobtype = /datum/job/lawyer + + ears = /obj/item/radio/headset/headset_srvsec + uniform = /obj/item/clothing/under/suit/navy + suit = /obj/item/clothing/suit/toggle/lawyer/navy + shoes = /obj/item/clothing/shoes/laceup + l_hand = /obj/item/storage/briefcase/lawyer + l_pocket = /obj/item/laser_pointer + r_pocket = /obj/item/clothing/accessory/lawyers_badge + + chameleon_extras = /obj/item/stamp/law + +/datum/outfit/job/nanotrasen/lawyer/corporaterepresentative + name = "Nanotrasen - Lawyer (Corporate Representative)" + job_icon = "nanotrasen" + + + uniform = /obj/item/clothing/under/rank/command/head_of_personnel/suit + suit = null + ears = /obj/item/radio/headset/headset_cent + l_hand = /obj/item/clipboard + r_pocket = /obj/item/pen/fountain + +// Security Officer + +/datum/outfit/job/nanotrasen/security + name = "Nanotrasen - Security Officer" + jobtype = /datum/job/officer + job_icon = "securityofficer" + + ears = /obj/item/radio/headset/alt + uniform = /obj/item/clothing/under/rank/security/officer/nt + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/helmet/sec + suit = /obj/item/clothing/suit/armor/vest + alt_suit = /obj/item/clothing/suit/armor/vest/security/officer + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + shoes = /obj/item/clothing/shoes/jackboots + l_pocket = /obj/item/restraints/handcuffs + r_pocket = /obj/item/assembly/flash/handheld + backpack_contents = null + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + courierbag = /obj/item/storage/backpack/messenger/sec + box = /obj/item/storage/box/survival/security + + chameleon_extras = list(/obj/item/gun/energy/disabler, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet) + //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state + +/datum/outfit/job/nanotrasen/security/ert + name = "Nanotrasen - ERT Officer" + + uniform = /obj/item/clothing/under/rank/security/officer/camo + head = null + backpack = /obj/item/storage/backpack/ert/security + belt = /obj/item/storage/belt/military + id = /obj/item/card/id/ert/security + r_pocket = /obj/item/kitchen/knife/combat/survival + backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) + +/datum/outfit/job/nanotrasen/security/ert/engi + name = "Nanotrasen - ERT Engineering Officer" + + uniform = /obj/item/clothing/under/rank/security/officer/camo + head = null + backpack = /obj/item/storage/backpack/ert/engineer + belt = /obj/item/storage/belt/utility/full/ert + id = /obj/item/card/id/ert/security + r_pocket = /obj/item/kitchen/knife/combat/survival + backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) + accessory = /obj/item/clothing/accessory/armband/engine + glasses = /obj/item/clothing/glasses/hud/diagnostic/sunglasses + +/datum/outfit/job/nanotrasen/security/ert/med + name = "Nanotrasen - ERT Medical Officer" + + uniform = /obj/item/clothing/under/rank/security/officer/camo + head = /obj/item/clothing/head/beret/med + backpack = /obj/item/storage/backpack/ert/medical + belt = /obj/item/storage/belt/medical/webbing/paramedic + id = /obj/item/card/id/ert/security + r_pocket = /obj/item/kitchen/knife/combat/survival + backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) + accessory = /obj/item/clothing/accessory/armband/med + glasses = /obj/item/clothing/glasses/hud/health/night + +/datum/outfit/job/nanotrasen/security/mech_pilot + name = "Nanotrasen - Mech Pilot" + + uniform = /obj/item/clothing/under/rank/security/officer/military/eng + head = /obj/item/clothing/head/beret/sec/officer + suit = /obj/item/clothing/suit/armor/vest/bulletproof + backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) + +/datum/outfit/job/nanotrasen/security/lp + name = "Nanotrasen - LP Security Specialist" + + implants = list(/obj/item/implant/mindshield) + ears = /obj/item/radio/headset/nanotrasen/alt/captain + id = /obj/item/card/id/lpsec + belt = /obj/item/pda/security + gloves = /obj/item/clothing/gloves/color/black + uniform = /obj/item/clothing/under/rank/security/head_of_security/nt/lp + alt_uniform = /obj/item/clothing/under/rank/security/head_of_security/nt/skirt/lp + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + shoes = /obj/item/clothing/shoes/jackboots + head = /obj/item/clothing/head/beret/sec + + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + courierbag = /obj/item/storage/backpack/messenger/sec + +// Engineer + +/datum/outfit/job/nanotrasen/engineer + name = "Nanotrasen - Engineer" + job_icon = "stationengineer" + jobtype = /datum/job/engineer + + belt = /obj/item/storage/belt/utility/full/engi + l_pocket = /obj/item/pda/engineering + ears = /obj/item/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/engineering/engineer/nt + dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering + shoes = /obj/item/clothing/shoes/workboots + head = /obj/item/clothing/head/hardhat + r_pocket = /obj/item/t_scanner + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + courierbag = /obj/item/storage/backpack/messenger/engi + + box = /obj/item/storage/box/survival/engineer + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + +/datum/outfit/job/nanotrasen/engineer/lp + name = "Nanotrasen - LP Engineering Specialist" + + implants = list(/obj/item/implant/mindshield) + ears = /obj/item/radio/headset/nanotrasen/alt/captain + id = /obj/item/card/id/lpengie + gloves = /obj/item/clothing/gloves/color/yellow + uniform = /obj/item/clothing/under/rank/engineering/engineer/nt/lp + alt_uniform = /obj/item/clothing/under/rank/engineering/engineer/nt/skirt/lp + dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering + shoes = /obj/item/clothing/shoes/jackboots + head = /obj/item/clothing/head/beret/eng + + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + courierbag = /obj/item/storage/backpack/messenger/engi + +// Warden + +/datum/outfit/job/nanotrasen/warden + name = "Nanotrasen - Warden" + job_icon = "warden" + jobtype = /datum/job/warden + + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/security/warden/nt + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/vest/security/warden/alt/nt + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/warden/red + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + r_pocket = /obj/item/assembly/flash/handheld + l_pocket = /obj/item/restraints/handcuffs + suit_store = null + backpack_contents = list(/obj/item/melee/classic_baton) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + courierbag = /obj/item/storage/backpack/messenger/sec + box = /obj/item/storage/box/survival/security + + chameleon_extras = /obj/item/gun/ballistic/shotgun/automatic/combat/compact + +// Chief Engineer + +/datum/outfit/job/nanotrasen/ce + name = "Nanotrasen - Chief Engineer" + jobtype = /datum/job/chief_engineer + job_icon = "chiefengineer" + + id = /obj/item/card/id/silver + belt = /obj/item/storage/belt/utility/chief/full + l_pocket = /obj/item/storage/wallet + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/rank/engineering/chief_engineer + dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/hardhat/white + gloves = /obj/item/clothing/gloves/color/black + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1) + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + courierbag = /obj/item/storage/backpack/messenger/engi + + box = /obj/item/storage/box/survival/engineer + chameleon_extras = /obj/item/stamp/ce + +// Medical Doctor + +/datum/outfit/job/nanotrasen/doctor + name = "Nanotrasen - Medical Doctor" + job_icon = "medicaldoctor" + jobtype = /datum/job/doctor + + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical/doctor + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat + alt_suit = /obj/item/clothing/suit/apron/surgical + dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/med + box = /obj/item/storage/box/survival/medical + +/datum/outfit/job/nanotrasen/doctor/lp + name = "Nanotrasen - LP Medical Specialist" + + implants = list(/obj/item/implant/mindshield) + ears = /obj/item/radio/headset/nanotrasen/alt/captain + id = /obj/item/card/id/lpmed + belt = /obj/item/pda/medical + gloves = /obj/item/clothing/gloves/color/latex/nitrile + uniform = /obj/item/clothing/under/rank/medical/paramedic/lp + alt_uniform = /obj/item/clothing/under/rank/medical/paramedic/skirt/lp + dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical + shoes = /obj/item/clothing/shoes/sneakers/white + head = /obj/item/clothing/head/beret/med + + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/med + box = /obj/item/storage/box/survival/medical + +// Cargo Tech + +/datum/outfit/job/nanotrasen/cargo_tech + name = "Nanotrasen - Cargo Tech" + jobtype = /datum/job/cargo_tech + job_icon = "cargotechnician" + + belt = /obj/item/pda/cargo + ears = /obj/item/radio/headset/headset_cargo + uniform = /obj/item/clothing/under/rank/cargo/tech + dcoat = /obj/item/clothing/suit/hooded/wintercoat/cargo + backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) + +// Atmos Tech + +/datum/outfit/job/nanotrasen/atmos + name = "Nanotrasen - Atmos Tech" + jobtype = /datum/job/atmos + job_icon = "atmospherictechnician" + + belt = /obj/item/storage/belt/utility/atmostech + ears = /obj/item/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/engineering/atmospheric_technician + alt_suit = /obj/item/clothing/suit/hazardvest + dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + courierbag = /obj/item/storage/backpack/messenger/engi + box = /obj/item/storage/box/survival/engineer + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + +// Scientist + +/datum/outfit/job/nanotrasen/scientist + name = "Nanotrasen - Scientist" + jobtype = /datum/job/scientist + job_icon = "scientist" + + ears = /obj/item/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/rnd/scientist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/science + dcoat = /obj/item/clothing/suit/hooded/wintercoat/science + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + courierbag = /obj/item/storage/backpack/messenger/tox + +// Brig Physician + +/datum/outfit/job/nanotrasen/brig_phys + name = "Nanotrasen - Brig Physician" + jobtype = /datum/job/brig_phys + job_icon = "brigphysician" + + ears = /obj/item/radio/headset/headset_medsec/alt + uniform = /obj/item/clothing/under/rank/security/brig_phys/nt + shoes = /obj/item/clothing/shoes/jackboots + glasses = /obj/item/clothing/glasses/hud/health/sunglasses + suit = /obj/item/clothing/suit/toggle/labcoat/brig_phys + dcoat = /obj/item/clothing/suit/hooded/wintercoat/security + head = /obj/item/clothing/head/soft/sec/brig_phys + implants = list(/obj/item/implant/mindshield) + +// Paramedic + +/datum/outfit/job/nanotrasen/paramedic + name = "Nanotrasen - Paramedic" + jobtype = /datum/job/paramedic + job_icon = "paramedic" + + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical/paramedic + head = /obj/item/clothing/head/soft/paramedic + shoes = /obj/item/clothing/shoes/sneakers/blue + suit = /obj/item/clothing/suit/toggle/labcoat/paramedic + dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical/paramedic + gloves = /obj/item/clothing/gloves/color/latex/nitrile + id = /obj/item/card/id + backpack_contents = list(/obj/item/roller=1) + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + courierbag = /obj/item/storage/backpack/messenger/para + box = /obj/item/storage/box/survival/medical + + chameleon_extras = /obj/item/gun/syringe + +// Quartermaster + +/datum/outfit/job/nanotrasen/quartermaster + name = "Nanotrasen - Quartermaster" + jobtype = /datum/job/qm + job_icon = "quartermaster" + + ears = /obj/item/radio/headset/headset_cargo + uniform = /obj/item/clothing/under/rank/cargo/qm + dcoat = /obj/item/clothing/suit/hooded/wintercoat/cargo + shoes = /obj/item/clothing/shoes/sneakers/brown + glasses = /obj/item/clothing/glasses/sunglasses + l_hand = /obj/item/clipboard + backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) + + chameleon_extras = /obj/item/stamp/qm + +/datum/outfit/job/nanotrasen/miner + name = "Nanotrasen - Miner" + jobtype = /datum/job/mining + job_icon = "shaftminer" + + ears = /obj/item/radio/headset/headset_cargo/mining + shoes = /obj/item/clothing/shoes/workboots/mining + gloves = /obj/item/clothing/gloves/explorer + uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland + suit = /obj/item/clothing/suit/hazardvest + dcoat = /obj/item/clothing/suit/hooded/wintercoat/miner + r_pocket = /obj/item/storage/bag/ore + backpack_contents = list( + /obj/item/flashlight/seclite=1,\ + /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/stack/marker_beacon/ten=1,\ + /obj/item/radio/weather_monitor=1) + + backpack = /obj/item/storage/backpack/explorer + satchel = /obj/item/storage/backpack/satchel/explorer + duffelbag = /obj/item/storage/backpack/duffelbag + box = /obj/item/storage/box/survival/mining + + chameleon_extras = /obj/item/gun/energy/kinetic_accelerator diff --git a/code/modules/clothing/outfits/factions/roumain.dm b/code/modules/clothing/outfits/factions/roumain.dm new file mode 100644 index 000000000000..4cf4e56005e9 --- /dev/null +++ b/code/modules/clothing/outfits/factions/roumain.dm @@ -0,0 +1,92 @@ +/datum/outfit/job/roumain + name = "Saint-Roumain Militia - Base Outfit" + + uniform = /obj/item/clothing/under/suit/roumain + id = /obj/item/card/id + faction_icon = "bg_srm" + + box = null + +/datum/outfit/job/roumain/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(visualsOnly) + return + H.faction |= list(FACTION_PLAYER_ROUMAIN) + +// Assistant + +/datum/outfit/job/roumain/assistant + name = "Saint-Roumain Militia - Shadow" + jobtype = /datum/job/assistant + job_icon = "assistant" + + uniform = /obj/item/clothing/under/suit/roumain + alt_uniform = null + shoes = /obj/item/clothing/shoes/workboots/mining + suit = /obj/item/clothing/suit/armor/roumain/shadow + + head = /obj/item/clothing/head/cowboy/sec/roumain/shadow + +// Captain + +/datum/outfit/job/roumain/captain + name = "Saint-Roumain Militia - Hunter Montagne" + job_icon = "captain" + jobtype = /datum/job/captain + + ears = /obj/item/radio/headset/headset_com + uniform = /obj/item/clothing/under/suit/roumain + shoes = /obj/item/clothing/shoes/workboots/mining + suit = /obj/item/clothing/suit/armor/hos/roumain/montagne + head = /obj/item/clothing/head/HoS/cowboy/montagne + id = /obj/item/card/id/silver + + duffelbag = /obj/item/storage/backpack/cultpack + courierbag = /obj/item/storage/backpack/cultpack + backpack = /obj/item/storage/backpack/cultpack + satchel = /obj/item/storage/backpack/cultpack + + backpack_contents = list(/obj/item/book/manual/srmlore=1, + /obj/item/stamp/chap = 1, + /obj/item/melee/classic_baton/telescopic=1, + ) + chameleon_extras = null + +/datum/outfit/job/roumain/security + name = "Saint-Roumain Militia - Hunter" + jobtype = /datum/job/officer + job_icon = "securityofficer" + + uniform = /obj/item/clothing/under/suit/roumain + alt_uniform = null + shoes = /obj/item/clothing/shoes/workboots/mining + suit = /obj/item/clothing/suit/armor/roumain + head = /obj/item/clothing/head/cowboy/sec/roumain + gloves = null + + backpack = /obj/item/storage/backpack + satchel = /obj/item/storage/backpack/satchel + duffelbag = /obj/item/storage/backpack/duffelbag + courierbag = /obj/item/storage/backpack/messenger + + backpack_contents = null + +// Medical Doctor + +/datum/outfit/job/roumain/doctor + name = "Saint-Roumain Militia - Hunter Doctor" + job_icon = "medicaldoctor" + jobtype = /datum/job/doctor + + uniform = /obj/item/clothing/under/suit/roumain + alt_uniform = null + shoes = /obj/item/clothing/shoes/workboots/mining + suit = /obj/item/clothing/suit/toggle/labcoat/roumain_med + head = /obj/item/clothing/head/cowboy/sec/roumain/med + mask = /obj/item/clothing/mask/gas/plaguedoctor + gloves = null + + backpack = /obj/item/storage/backpack + satchel = /obj/item/storage/backpack/satchel + duffelbag = /obj/item/storage/backpack/duffelbag + courierbag = /obj/item/storage/backpack/messenger diff --git a/code/modules/clothing/outfits/solgov.dm b/code/modules/clothing/outfits/factions/solgov.dm similarity index 89% rename from code/modules/clothing/outfits/solgov.dm rename to code/modules/clothing/outfits/factions/solgov.dm index f6a4b03324de..33463c498581 100644 --- a/code/modules/clothing/outfits/solgov.dm +++ b/code/modules/clothing/outfits/factions/solgov.dm @@ -1,14 +1,18 @@ /datum/outfit/job/solgov + name = "SolGov Base Outfit" + + faction_icon = "bg_solgov" /datum/outfit/job/solgov/post_equip(mob/living/carbon/human/H, visualsOnly) . = ..() if(visualsOnly) return - H.faction |= list("playerSolgov") + H.faction |= list(FACTION_PLAYER_SOLGOV) /datum/outfit/job/solgov/assistant - name = "Scribe (SolGov)" + name = "SolGov - Scribe" jobtype = /datum/job/assistant + job_icon = "scribe" head = /obj/item/clothing/head/beret/solgov/plain uniform = /obj/item/clothing/under/solgov/formal @@ -16,14 +20,14 @@ suit = /obj/item/clothing/suit/solgov /datum/outfit/job/solgov/bureaucrat - name = "Bureaucrat (SolGov)" + name = "SolGov - Bureaucrat" jobtype = /datum/job/curator + job_icon = "curator" head = /obj/item/clothing/head/beret/solgov uniform = /obj/item/clothing/under/solgov/formal shoes = /obj/item/clothing/shoes/laceup suit = /obj/item/clothing/suit/solgov/bureaucrat - belt = /obj/item/pda/curator l_hand = /obj/item/storage/bag/books r_pocket = /obj/item/key/displaycase l_pocket = /obj/item/laser_pointer @@ -33,11 +37,11 @@ ) /datum/outfit/job/solgov/captain - name = "Captain (SolGov)" + name = "SolGov - Captain" jobtype = /datum/job/captain + job_icon = "solgovrepresentative" // idk id = /obj/item/card/id/gold - belt = /obj/item/pda/captain gloves = /obj/item/clothing/gloves/combat ears = /obj/item/radio/headset/solgov/alt/captain uniform = /obj/item/clothing/under/solgov/formal/captain @@ -56,8 +60,9 @@ chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain) /datum/outfit/job/solgov/sonnensoldner - name = "Sonnensöldner (SolGov)" + name = "SolGov - Sonnensöldner" jobtype = /datum/job/officer + job_icon = "sonnensoldner" id = /obj/item/card/id/solgov uniform = /obj/item/clothing/under/solgov @@ -73,9 +78,9 @@ backpack_contents = list(/obj/item/crowbar/power) /datum/outfit/job/solgov/representative - name = "Solarian Representative (SolGov)" - job_icon = "solgovrepresentative" + name = "SolGov - Solarian Representative" jobtype = /datum/job/solgov + job_icon = "solgovrepresentative" id = /obj/item/card/id/solgov head = /obj/item/clothing/head/solgov @@ -89,7 +94,6 @@ shoes = /obj/item/clothing/shoes/laceup ears = /obj/item/radio/headset/solgov/captain glasses = /obj/item/clothing/glasses/sunglasses - belt = /obj/item/pda/solgov implants = list(/obj/item/implant/mindshield) @@ -98,11 +102,11 @@ ) /datum/outfit/job/solgov/overseer - name = "Overseer (SolGov)" + name = "SolGov - Overseer" jobtype = /datum/job/head_of_personnel + job_icon = "headofpersonnel" id = /obj/item/card/id/solgov - belt = /obj/item/pda/heads/head_of_personnel ears = /obj/item/radio/headset/solgov/captain uniform = /obj/item/clothing/under/solgov/formal head = /obj/item/clothing/head/solgov @@ -116,10 +120,10 @@ chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/head_of_personnel) /datum/outfit/job/solgov/doctor - name = "Medical Doctor (SolGov)" + name = "SolGov - Medical Doctor" jobtype = /datum/job/doctor + job_icon = "medicaldoctor" - belt = /obj/item/pda/medical ears = /obj/item/radio/headset/headset_med uniform = /obj/item/clothing/under/solgov/formal accessory = /obj/item/clothing/accessory/armband/medblue @@ -135,10 +139,10 @@ box = /obj/item/storage/box/survival/medical /datum/outfit/job/solgov/miner - name = "Field Engineer (SolGov)" + name = "SolGov - Field Engineer" jobtype = /datum/job/mining + job_icon = "shaftminer" - belt = /obj/item/pda/shaftminer ears = /obj/item/radio/headset/headset_cargo/mining shoes = /obj/item/clothing/shoes/workboots/mining gloves = /obj/item/clothing/gloves/explorer @@ -159,8 +163,9 @@ box = /obj/item/storage/box/survival/mining /datum/outfit/job/solgov/psychologist - name = "Psychologist (SolGov)" + name = "SolGov - Psychologist" jobtype = /datum/job/psychologist + job_icon = "psychologist" head = /obj/item/clothing/head/fedora/solgov suit = /obj/item/clothing/suit/solgov/suit @@ -168,8 +173,6 @@ uniform = /obj/item/clothing/under/solgov/formal shoes = /obj/item/clothing/shoes/laceup id = /obj/item/card/id - belt = /obj/item/pda/medical - pda_slot = ITEM_SLOT_BELT l_hand = /obj/item/clipboard backpack = /obj/item/storage/backpack/medic @@ -177,8 +180,9 @@ duffelbag = /obj/item/storage/backpack/duffelbag/med /datum/outfit/job/solgov/patient - name = "Attentive Care Patient (SolGov)" + name = "SolGov - Attentive Care Patient" jobtype = /datum/job/prisoner + job_icon = "assistant" // todo: bug rye for patient icon id = /obj/item/card/id/patient uniform = /obj/item/clothing/under/rank/medical/gown @@ -186,11 +190,11 @@ shoes = /obj/item/clothing/shoes/sandal/slippers /datum/outfit/job/solgov/engineer - name = "Ship Engineer (SolGov)" + name = "SolGov - Ship Engineer" jobtype = /datum/job/engineer + job_icon = "stationengineer" belt = /obj/item/storage/belt/utility/full/engi - l_pocket = /obj/item/pda/engineering ears = /obj/item/radio/headset/headset_eng uniform = /obj/item/clothing/under/solgov/formal accessory = /obj/item/clothing/accessory/armband/engine @@ -205,15 +209,13 @@ courierbag = /obj/item/storage/backpack/messenger/engi box = /obj/item/storage/box/survival/engineer - pda_slot = ITEM_SLOT_LPOCKET backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) /datum/outfit/job/solgov/quartermaster - name = "Logistics Deck Officer (SolGov)" - job_icon = "quartermaster" + name = "SolGov - Logistics Deck Officer" jobtype = /datum/job/qm + job_icon = "quartermaster" - belt = /obj/item/pda/quartermaster ears = /obj/item/radio/headset/solgov/captain uniform = /obj/item/clothing/under/solgov/formal suit = /obj/item/clothing/suit/solgov/overcoat diff --git a/code/modules/clothing/outfits/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm similarity index 89% rename from code/modules/clothing/outfits/syndicate.dm rename to code/modules/clothing/outfits/factions/syndicate.dm index d1ba5c1ce35b..75158dd577ff 100644 --- a/code/modules/clothing/outfits/syndicate.dm +++ b/code/modules/clothing/outfits/factions/syndicate.dm @@ -1,12 +1,14 @@ //top outfit of everything syndicate. Don't change this. /datum/outfit/job/syndicate - name = "Syndicate (mostly) Empty" + name = "Syndicate - Base Outfit" - uniform = /obj/item/clothing/under/syndicate + uniform = /obj/item/clothing/under/color/black box = /obj/item/storage/box/survival/syndie id = /obj/item/card/id/syndicate_command/crew_id + faction_icon = "bg_syndicate" + backpack = /obj/item/storage/backpack/security satchel = /obj/item/storage/backpack/satchel/sec duffelbag = /obj/item/storage/backpack/duffelbag/syndie @@ -28,8 +30,9 @@ //and now, for the Assistants /datum/outfit/job/syndicate/assistant - name = "Junior Agent (Assistant)" + name = "Syndicate - Junior Agent" jobtype = /datum/job/assistant + job_icon = "assistant" uniform = /obj/item/clothing/under/syndicate/intern alt_uniform = null @@ -41,7 +44,6 @@ id = /obj/item/card/id/syndicate_command/crew_id r_pocket = /obj/item/radio - belt = /obj/item/pda backpack = /obj/item/storage/backpack/security satchel = /obj/item/storage/backpack/satchel/sec @@ -51,13 +53,13 @@ box = /obj/item/storage/box/survival/syndie /datum/outfit/job/syndicate/assistant/gorlex - name = "Junior Agent (Gorlex Marauders)" + name = "Syndicate - Junior Agent (Gorlex Marauders)" uniform = /obj/item/clothing/under/syndicate/gorlex alt_uniform = /obj/item/clothing/under/syndicate /datum/outfit/job/syndicate/assistant/gec - name = "Deckhand (GEC)" + name = "Syndicate - Deckhand (GEC)" uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/toggle/hazard @@ -65,7 +67,7 @@ head = /obj/item/clothing/head/safety_helmet /datum/outfit/job/syndicate/assistant/cybersun - name = "Junior Agent (Cybersun)" + name = "Syndicate - Junior Agent (Cybersun)" uniform = /obj/item/clothing/under/syndicate/cybersun shoes = /obj/item/clothing/shoes/jackboots @@ -73,7 +75,7 @@ head = /obj/item/clothing/head/soft/cybersun /datum/outfit/job/syndicate/assistant/twink - name = "Deck Assistant (Twinkleshine)" + name = "Syndicate - Deck Assistant (Twinkleshine)" uniform = /obj/item/clothing/under/syndicate/intern shoes = /obj/item/clothing/shoes/combat @@ -100,10 +102,10 @@ //atmos techs -//Shiptest /datum/outfit/job/syndicate/atmos - name = "Atmospheric Technician (Syndicate)" + name = "Syndicate - Atmospheric Technician" jobtype = /datum/job/atmos + job_icon = "atmospherictechnician" belt = /obj/item/storage/belt/utility/atmostech @@ -113,7 +115,6 @@ dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering r_pocket = /obj/item/analyzer - l_pocket = /obj/item/pda/atmos backpack = /obj/item/storage/backpack/industrial satchel = /obj/item/storage/backpack/satchel/eng @@ -126,7 +127,7 @@ backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) /datum/outfit/job/syndicate/atmos/gec - name = "Atmospheric Technician (GEC)" + name = "Syndicate - Atmospheric Technician (GEC)" uniform = /obj/item/clothing/under/syndicate/gec/atmos_tech suit = /obj/item/clothing/suit/toggle/hazard @@ -137,13 +138,13 @@ //bartenders /datum/outfit/job/syndicate/bartender - name = "Bartender (Syndicate)" + name = "Syndicate - Bartender" jobtype = /datum/job/bartender + job_icon = "bartender" id = /obj/item/card/id/syndicate_command/crew_id head = /obj/item/clothing/head/HoS/beret/syndicate glasses = /obj/item/clothing/glasses/sunglasses/reagent - belt = /obj/item/pda/bar uniform = /obj/item/clothing/under/rank/civilian/bartender alt_uniform = /obj/item/clothing/under/rank/civilian/bartender/purple alt_suit = /obj/item/clothing/suit/apron/purple_bartender @@ -162,7 +163,7 @@ /datum/outfit/job/syndicate/bartender/twink - name = "Bartender (Twinkleshine)" + name = "Syndicate - Bartender (Twinkleshine)" uniform = /obj/item/clothing/under/syndicate/donk shoes = /obj/item/clothing/shoes/laceup @@ -186,16 +187,17 @@ //botanist /datum/outfit/job/syndicate/botanist - name = "Botanist (Syndicate)" + name = "Syndicate - Botanist" jobtype = /datum/job/hydro - belt = /obj/item/pda/botanist + job_icon = "botanist" + suit = /obj/item/clothing/suit/apron alt_suit = /obj/item/clothing/suit/apron/overalls gloves =/obj/item/clothing/gloves/botanic_leather suit_store = /obj/item/plant_analyzer /datum/outfit/job/syndicate/botanist/suns - name = "Botanist-Chemist (SUNS)" + name = "Syndicate - Botanist-Chemist (SUNS)" id = /obj/item/card/id/syndicate_command/crew_id shoes = /obj/item/clothing/shoes/jackboots @@ -203,11 +205,12 @@ suit = /obj/item/clothing/suit/toggle/labcoat/chemist suit_store = null -//Capitan (Captain) +//Capitan /datum/outfit/job/syndicate/captain - name = "Captain (Syndicate)" + name = "Syndicate - Captain" jobtype = /datum/job/captain + job_icon = "captain" id = /obj/item/card/id/syndicate_command/captain_id ears = /obj/item/radio/headset/syndicate/alt/captain @@ -216,7 +219,7 @@ head = /obj/item/clothing/head/HoS/syndicate gloves = /obj/item/clothing/gloves/combat suit = /obj/item/clothing/suit/armor/vest/capcarapace/syndicate - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/pda/captain) + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) backpack = /obj/item/storage/backpack/security satchel = /obj/item/storage/backpack/satchel/sec @@ -226,11 +229,10 @@ box = /obj/item/storage/box/survival/syndie /datum/outfit/job/syndicate/captain/aclf - name = "Captain (ACLF)" - + name = "Syndicate - Captain (ACLF)" /datum/outfit/job/syndicate/captain/twink - name = "Captain (Twinkleshine)" + name = "Syndicate - Captain (Twinkleshine)" uniform = /obj/item/clothing/under/syndicate/officer gloves = /obj/item/clothing/gloves/combat @@ -246,20 +248,20 @@ implants = list(/obj/item/implant/weapons_auth) -/datum/outfit/job/syndicate/captain/sbc/post_equip(mob/living/carbon/human/H) +/datum/outfit/job/syndicate/captain/twink/post_equip(mob/living/carbon/human/H) . = ..() assign_codename(H) /datum/outfit/job/syndicate/captain/gorlex - name = "Captain (Gorlex Marauders)" + name = "Syndicate - Captain (Gorlex Marauders)" uniform = /obj/item/clothing/under/syndicate/officer head = /obj/item/clothing/head/gorlexcap suit = /obj/item/clothing/suit/gorlex /datum/outfit/job/syndicate/captain/cybersun - name = "Captain (Cybersun)" + name = "Syndicate - Captain (Cybersun)" uniform = /obj/item/clothing/under/syndicate/cybersun/officer suit = /obj/item/clothing/suit/armor/vest/capcarapace/cybersun @@ -270,61 +272,59 @@ //cargo tech /datum/outfit/job/syndicate/cargo_tech - name = "Cargo Tech (Syndicate)" + name = "Syndicate - Cargo Tech" jobtype = /datum/job/cargo_tech + job_icon = "cargotechnician" id = /obj/item/card/id/syndicate_command/crew_id uniform = /obj/item/clothing/under/syndicate/donk suit = /obj/item/clothing/suit/hazardvest/donk - belt = /obj/item/pda/cargo alt_suit = /obj/item/clothing/suit/hazardvest l_hand = /obj/item/export_scanner backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) /datum/outfit/job/syndicate/cargo_tech/donk - name = "Customer Associate (Donk! Co)" + name = "Syndicate - Customer Associate (Donk)" //chemist /datum/outfit/job/syndicate/chemist - name = "Chemist (Syndicate)" + name = "Syndicate - Chemist" jobtype = /datum/job/chemist + job_icon = "chemist" - uniform = /obj/item/clothing/under/syndicate/intern + uniform = /obj/item/clothing/under/syndicate id = /obj/item/card/id/syndicate_command/crew_id - l_pocket =/obj/item/pda/chemist glasses = /obj/item/clothing/glasses/science - belt = /obj/item/pda/chemist shoes = /obj/item/clothing/shoes/sneakers/white suit = /obj/item/clothing/suit/toggle/labcoat/chemist box = /obj/item/storage/box/survival/medical /datum/outfit/job/syndicate/chemist/gec - name = "Chemist (GEC)" + name = "Syndicate - Chemist (GEC)" uniform = /obj/item/clothing/under/syndicate/intern suit = /obj/item/clothing/suit/toggle/hazard head = /obj/item/clothing/head/hardhat belt = /obj/item/storage/belt/utility/full/engi id = /obj/item/card/id/syndicate_command/crew_id - l_pocket =/obj/item/pda/chemist //Chief Engineer /datum/outfit/job/syndicate/ce - name = "Chief Engineer (Syndicate)" + name = "Syndicate - Chief Engineer" jobtype = /datum/job/chief_engineer + job_icon = "chiefengineer" id = /obj/item/card/id/syndicate_command/crew_id ears = /obj/item/radio/headset/syndicate/alt glasses = /obj/item/clothing/glasses/sunglasses belt = /obj/item/storage/belt/utility/chief/full - l_pocket = /obj/item/pda/heads/ce uniform = /obj/item/clothing/under/rank/engineering/chief_engineer shoes = /obj/item/clothing/shoes/sneakers/brown head = /obj/item/clothing/head/hardhat/white @@ -341,7 +341,7 @@ /datum/outfit/job/syndicate/ce/gec - name = "Chief Engineer (GEC)" + name = "Syndicate - Chief Engineer (GEC)" uniform = /obj/item/clothing/under/syndicate/gec/chief_engineer suit = /obj/item/clothing/suit/toggle/hazard @@ -352,7 +352,7 @@ gloves = /obj/item/clothing/gloves/combat /datum/outfit/job/syndicate/ce/gorlex - name = "Foreman (Gorlex Marauders)" + name = "Syndicate - Foreman (Gorlex Marauders)" ears = /obj/item/radio/headset/syndicate/alt uniform = /obj/item/clothing/under/syndicate/gorlex @@ -365,14 +365,14 @@ //Chief Medical Officer /datum/outfit/job/syndicate/cmo - name = "Medical Director (Cybersun)" + name = "Syndicate - Medical Director (Cybersun)" jobtype = /datum/job/cmo + job_icon = "chiefmedicalofficer" uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer/cybersun ears = /obj/item/radio/headset/syndicate/alt/captain id = /obj/item/card/id/syndicate_command/captain_id shoes = /obj/item/clothing/shoes/jackboots - belt = /obj/item/pda/heads/cmo l_pocket = /obj/item/pinpointer/crew head = /obj/item/clothing/head/beret/cmo/cybersun suit = /obj/item/clothing/suit/toggle/labcoat/raincoat @@ -381,13 +381,12 @@ backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) /datum/outfit/job/syndicate/cmo/suns - name = "Medical Director (SUNS)" + name = "Syndicate - Medical Director (SUNS)" uniform = /obj/item/clothing/under/syndicate ears = /obj/item/radio/headset/syndicate/alt/captain id = /obj/item/card/id/syndicate_command/captain_id shoes = /obj/item/clothing/shoes/jackboots - belt = /obj/item/pda/heads/cmo l_pocket = /obj/item/pinpointer/crew shoes = /obj/item/clothing/shoes/sneakers/brown suit = /obj/item/clothing/suit/toggle/labcoat/cmo @@ -398,8 +397,9 @@ //"Head Of Personnel" /datum/outfit/job/syndicate/head_of_personnel - name = "Bridge Officer (Syndicate)" + name = "Syndicate - Bridge Officer" jobtype = /datum/job/head_of_personnel + job_icon = "headofpersonnel" ears = /obj/item/radio/headset/syndicate/alt uniform = /obj/item/clothing/under/syndicate/aclfgrunt @@ -409,12 +409,11 @@ id = /obj/item/card/id/syndicate_command/crew_id r_pocket = /obj/item/kitchen/knife/combat/survival glasses = /obj/item/clothing/glasses/hud/health - belt = /obj/item/pda/heads/head_of_personnel backpack_contents = list(/obj/item/storage/box/ids=1,\ /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) /datum/outfit/job/syndicate/head_of_personnel/cybersun - name = "Intelligence Officer (Cybersun)" + name = "Syndicate - Intelligence Officer (Cybersun)" ears = /obj/item/radio/headset/syndicate/alt uniform = /obj/item/clothing/under/syndicate/cybersun/officer @@ -429,15 +428,15 @@ //head of security /datum/outfit/job/syndicate/hos - name = "Head Of Security (Syndicate)" + name = "Syndicate - Head Of Security" jobtype = /datum/job/hos + job_icon = "headofsecurity" ears = /obj/item/radio/headset/syndicate/alt uniform = /obj/item/clothing/under/syndicate/combat head = /obj/item/clothing/head/HoS/syndicate suit = /obj/item/clothing/suit/armor/vest/syndie id = /obj/item/card/id/syndicate_command/crew_id - belt = /obj/item/pda/heads/hos shoes = /obj/item/clothing/shoes/jackboots glasses = /obj/item/clothing/glasses/hud/security/sunglasses suit_store = /obj/item/gun/energy/e_gun @@ -446,10 +445,10 @@ backpack_contents = list(/obj/item/melee/baton/loaded=1) /datum/outfit/job/syndicate/hos/gorlex - name = "Sergeant (Syndicate)" + name = "Syndicate - Sergeant (Gorlex)" /datum/outfit/job/syndicate/hos/twink - name = "Lieutenant (Twinkleshine)" + name = "Syndicate - Lieutenant (Twinkleshine)" uniform = /obj/item/clothing/under/syndicate/officer head = /obj/item/clothing/head/HoS/beret/syndicate @@ -480,29 +479,29 @@ //medical doctors (assorted) /datum/outfit/job/syndicate/doctor - name = "Medical Doctor (Syndicate)" + name = "Syndicate - Medical Doctor" jobtype = /datum/job/doctor + job_icon = "medicaldoctor" uniform = /obj/item/clothing/under/syndicate id = /obj/item/card/id/syndicate_command/crew_id shoes = /obj/item/clothing/shoes/jackboots - belt = /obj/item/pda/medical shoes = /obj/item/clothing/shoes/sneakers/white alt_suit = /obj/item/clothing/suit/apron/surgical l_hand = /obj/item/storage/firstaid/medical /datum/outfit/job/syndicate/doctor/suns - name = "Medical Doctor (SUNS)" + name = "Syndicate - Medical Doctor (SUNS)" /datum/outfit/job/syndicate/doctor/cybersun - name = "Medical Doctor (Cybersun)" + name = "Syndicate - Medical Doctor (Cybersun)" uniform = /obj/item/clothing/under/syndicate/medic accessory = /obj/item/clothing/accessory/armband/medblue shoes = /obj/item/clothing/shoes/jackboots /datum/outfit/job/syndicate/doctor/gorlex - name = "Medical Doctor (Gorlex)" + name = "Syndicate - Medical Doctor (Gorlex)" uniform = /obj/item/clothing/under/syndicate/gorlex glasses = /obj/item/clothing/glasses/hud/health/prescription @@ -515,9 +514,9 @@ /datum/outfit/job/syndicate/paramedic - name = "Paramedic (Syndicate)" + name = "Syndicate - Paramedic" jobtype = /datum/job/paramedic - + job_icon = "paramedic" id = /obj/item/card/id/syndicate_command/crew_id uniform = /obj/item/clothing/under/syndicate/gorlex @@ -530,16 +529,15 @@ gloves = /obj/item/clothing/gloves/color/latex/nitrile/evil belt = /obj/item/storage/belt/medical/paramedic id = /obj/item/card/id - l_pocket = /obj/item/pda/medical suit_store = /obj/item/flashlight/pen backpack_contents = list(/obj/item/roller=1) pda_slot = ITEM_SLOT_LPOCKET /datum/outfit/job/syndicate/paramedic/gorlex - name = "Paramedic (Gorlex)" + name = "Syndicate - Paramedic (Gorlex)" /datum/outfit/job/syndicate/paramedic/cybersun - name = "Field Medic (Cybersun Industries)" + name = "Syndicate - Field Medic (Cybersun Industries)" uniform = /obj/item/clothing/under/syndicate/medic head = /obj/item/clothing/head/soft/cybersun/medical @@ -547,7 +545,7 @@ suit = /obj/item/clothing/suit/toggle/labcoat/raincoat /datum/outfit/job/syndicate/paramedic/twink - name = "Medic (Twinkleshine)" + name = "Syndicate - Medic (Twinkleshine)" gloves = /obj/item/clothing/gloves/color/latex/nitrile/evil uniform = /obj/item/clothing/under/syndicate/medic @@ -562,7 +560,6 @@ mask = /obj/item/clothing/mask/chameleon id = /obj/item/card/id/syndicate_command/crew_id/med implants = list(/obj/item/implant/weapons_auth) - backpack_contents = list(/obj/item/pda/brig_phys) backpack = /obj/item/storage/backpack/security satchel = /obj/item/storage/backpack/satchel/sec @@ -578,8 +575,9 @@ //psychologist /datum/outfit/job/syndicate/psychologist - name = "Psychologist (Syndicate)" + name = "Syndicate - Psychologist" jobtype = /datum/job/psychologist + job_icon = "psychologist" id = /obj/item/card/id/syndicate_command/crew_id uniform = /obj/item/clothing/under/rank/medical/psychiatrist @@ -587,7 +585,6 @@ shoes = /obj/item/clothing/shoes/laceup alt_uniform = null l_hand = /obj/item/clipboard - belt = /obj/item/pda/medical pda_slot = ITEM_SLOT_BELT /datum/outfit/job/syndicate/psychologist/suns @@ -596,8 +593,9 @@ //patient (prisoner) /datum/outfit/job/syndicate/patient - name = "Long Term Patient" + name = "Syndicate - Long Term Patient" jobtype = /datum/job/prisoner + job_icon = "assistant" id = /obj/item/card/id/patient uniform = /obj/item/clothing/under/rank/medical/gown @@ -607,8 +605,9 @@ //Quartermaster /datum/outfit/job/syndicate/quartermaster - name = "Quartermaster (Syndicate)" + name = "Syndicate - Quartermaster" jobtype = /datum/job/qm + job_icon = "quartermaster" id = /obj/item/card/id/syndicate_command/captain_id @@ -617,13 +616,12 @@ suit = /obj/item/clothing/suit/hazardvest/donk/qm ears = /obj/item/radio/headset/syndicate/alt shoes = /obj/item/clothing/shoes/laceup - belt = /obj/item/pda/quartermaster glasses = /obj/item/clothing/glasses/sunglasses l_hand = /obj/item/clipboard backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) /datum/outfit/job/syndicate/quartermaster/donk - name = "Manager (Donk! Co.)" + name = "Syndicate - Manager (Donk)" id = /obj/item/card/id/syndicate_command/captain_id ears = /obj/item/radio/headset/syndicate/alt @@ -635,9 +633,9 @@ //security officers /datum/outfit/job/syndicate/security - name = "Operative (Syndicate)" + name = "Syndicate - Operative" jobtype = /datum/job/officer - + job_icon = "securityofficer" uniform = /obj/item/clothing/under/syndicate r_pocket = /obj/item/kitchen/knife/combat/survival @@ -659,10 +657,10 @@ /datum/outfit/job/syndicate/security/gorlex - name = "Assault Operative (Gorlex)" + name = "Syndicate - Assault Operative (Gorlex)" /datum/outfit/job/syndicate/security/twink - name = "Operative (Twinkleshine)" + name = "Syndicate - Operative (Twinkleshine)" uniform = /obj/item/clothing/under/syndicate/combat ears = /obj/item/radio/headset/syndicate/alt mask = /obj/item/clothing/mask/chameleon @@ -690,10 +688,10 @@ //Miners /datum/outfit/job/syndicate/miner - name = "Miner (Syndicate)" + name = "Syndicate - Miner" jobtype = /datum/job/mining + job_icon = "shaftminer" - belt = /obj/item/pda/shaftminer ears = /obj/item/radio/headset/headset_cargo/mining shoes = /obj/item/clothing/shoes/workboots/mining gloves = /obj/item/clothing/gloves/explorer @@ -707,14 +705,14 @@ /obj/item/stack/marker_beacon/ten=1) /datum/outfit/job/syndicate/miner/gorlex - name = "Wrecker (Gorlex Marauders)" + name = "Syndicate - Wrecker (Gorlex Marauders)" uniform = /obj/item/clothing/under/syndicate/gorlex shoes = /obj/item/clothing/shoes/workboots ears = /obj/item/radio/headset/alt /datum/outfit/job/syndicate/miner/twink - name = "Miner (Twinkleshine)" + name = "Syndicate - Miner (Twinkleshine)" uniform = /obj/item/clothing/under/syndicate/gorlex shoes = /obj/item/clothing/shoes/workboots @@ -739,7 +737,7 @@ assign_codename(H) /datum/outfit/job/syndicate/miner/cybersun - name = "Field Agent (Cybersun)" + name = "Syndicate - Field Agent (Cybersun)" id = /obj/item/card/id/syndicate_command/crew_id ears = /obj/item/radio/headset @@ -749,7 +747,7 @@ r_pocket = /obj/item/radio /datum/outfit/job/syndicate/miner/gec - name = "Shaft Miner (GEC)" + name = "Syndicate - Shaft Miner (GEC)" id = /obj/item/card/id/syndicate_command/crew_id ears = /obj/item/radio/headset @@ -765,8 +763,9 @@ //"station" engineers /datum/outfit/job/syndicate/engineer - name = "Ship Technician (Syndicate)" + name = "Syndicate - Ship Technician" jobtype = /datum/job/engineer + job_icon = "stationengineer" id = /obj/item/card/id/syndicate_command/crew_id uniform = /obj/item/clothing/under/syndicate/aclfgrunt @@ -775,7 +774,6 @@ shoes = /obj/item/clothing/shoes/jackboots belt = /obj/item/storage/belt/utility/full/engi - l_pocket = /obj/item/pda/engineering head = /obj/item/clothing/head/hardhat/dblue r_pocket = /obj/item/t_scanner @@ -784,7 +782,7 @@ backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) /datum/outfit/job/syndicate/engineer/gec - name = "Ship Engineer (GEC)" + name = "Syndicate - Ship Engineer (GEC)" uniform = /obj/item/clothing/under/syndicate/gec suit = /obj/item/clothing/suit/toggle/hazard @@ -792,7 +790,7 @@ id = /obj/item/card/id/syndicate_command/crew_id /datum/outfit/job/syndicate/engineer/gorlex - name = "Mechanic (Gorlex Marauders)" + name = "Syndicate - Mechanic (Gorlex Marauders)" uniform = /obj/item/clothing/under/syndicate/gorlex shoes = /obj/item/clothing/shoes/workboots @@ -800,7 +798,7 @@ glasses = null /datum/outfit/job/syndicate/engineer/twink - name = "Ship Engineer (Twinkleshine)" + name = "Syndicate - Ship Engineer (Twinkleshine)" uniform = /obj/item/clothing/under/syndicate/gec accessory = null @@ -825,7 +823,7 @@ assign_codename(H) /datum/outfit/job/syndicate/engineer/cybersun - name = "Engineer (Cybersun)" + name = "Syndicate - Engineer (Cybersun)" uniform = /obj/item/clothing/under/syndicate/cybersun/research shoes = /obj/item/clothing/shoes/workboots diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index db8c198ec06d..72127bbaf7df 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -5,95 +5,6 @@ var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H)//hmm lets have centcom officials become revs L.implant(H, null, 1) -/datum/outfit/centcom/spec_ops - name = "Special Ops Officer" - - uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/space/officer - shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - glasses = /obj/item/clothing/glasses/thermal/eyepatch - ears = /obj/item/radio/headset/headset_cent/commander - mask = /obj/item/clothing/mask/cigarette/cigar/havana - head = /obj/item/clothing/head/helmet/space/beret - belt = /obj/item/gun/energy/pulse/pistol/m1911 - r_pocket = /obj/item/lighter - back = /obj/item/storage/backpack/satchel/leather - id = /obj/item/card/id/centcom - -/datum/outfit/centcom/spec_ops/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/card/id/W = H.wear_id - W.access = get_all_accesses() - W.access += get_centcom_access("Special Ops Officer") - W.assignment = "Special Ops Officer" - W.registered_name = H.real_name - W.update_label() - - var/obj/item/radio/headset/R = H.ears - R.set_frequency(FREQ_CENTCOM) - R.freqlock = TRUE - ..() - -/datum/outfit/space - name = "Standard Space Gear" - - uniform = /obj/item/clothing/under/color/grey - shoes = /obj/item/clothing/shoes/sneakers/black - suit = /obj/item/clothing/suit/space - head = /obj/item/clothing/head/helmet/space - back = /obj/item/tank/jetpack/oxygen - mask = /obj/item/clothing/mask/breath - -/datum/outfit/tournament - name = "tournament standard red" - - uniform = /obj/item/clothing/under/color/red - shoes = /obj/item/clothing/shoes/sneakers/black - suit = /obj/item/clothing/suit/armor/vest - head = /obj/item/clothing/head/helmet/thunderdome - r_hand = /obj/item/gun/energy/pulse/destroyer - l_hand = /obj/item/kitchen/knife - r_pocket = /obj/item/grenade/smokebomb - -/datum/outfit/tournament/green - name = "tournament standard green" - - uniform = /obj/item/clothing/under/color/green - -/datum/outfit/tournament/gangster - name = "tournament gangster" - - uniform = /obj/item/clothing/under/rank/security/detective - suit = /obj/item/clothing/suit/det_suit - glasses = /obj/item/clothing/glasses/thermal/monocle - head = /obj/item/clothing/head/fedora/det_hat - r_hand = /obj/item/gun/ballistic - l_hand = null - r_pocket = /obj/item/ammo_box/c10mm - -/datum/outfit/tournament/janitor - name = "tournament janitor" - - uniform = /obj/item/clothing/under/rank/civilian/janitor - back = /obj/item/storage/backpack - suit = null - head = null - r_hand = /obj/item/mop - l_hand = /obj/item/reagent_containers/glass/bucket - r_pocket = /obj/item/grenade/chem_grenade/cleaner - l_pocket = /obj/item/grenade/chem_grenade/cleaner - backpack_contents = list(/obj/item/stack/tile/plasteel=6) - -/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/reagent_containers/glass/bucket/bucket = H.get_item_for_held_index(1) - bucket.reagents.add_reagent(/datum/reagent/water,70) - /datum/outfit/laser_tag name = "Laser Tag Red" @@ -149,48 +60,6 @@ W.registered_name = H.real_name W.update_label() -/datum/outfit/assassin - name = "Assassin" - - uniform = /obj/item/clothing/under/suit/black - shoes = /obj/item/clothing/shoes/sneakers/black - gloves = /obj/item/clothing/gloves/color/black - ears = /obj/item/radio/headset - glasses = /obj/item/clothing/glasses/sunglasses - l_pocket = /obj/item/melee/transforming/energy/sword/saber - l_hand = /obj/item/storage/secure/briefcase - id = /obj/item/card/id/syndicate - belt = /obj/item/pda/heads - -/datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - var/obj/item/clothing/under/U = H.w_uniform - U.attach_accessory(new /obj/item/clothing/accessory/waistcoat(H)) - - if(visualsOnly) - return - - //Could use a type - var/obj/item/storage/secure/briefcase/sec_briefcase = H.get_item_for_held_index(1) - for(var/obj/item/briefcase_item in sec_briefcase) - qdel(briefcase_item) - for(var/i = 3 to 0 step -1) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/spacecash/bundle/mediumrand, null, TRUE, TRUE) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/kinetic_accelerator/crossbow, null, TRUE, TRUE) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/c4/x4, null, TRUE, TRUE) - - var/obj/item/pda/heads/pda = H.belt - pda.owner = H.real_name - pda.ownjob = "Reaper" - pda.update_label() - - var/obj/item/card/id/syndicate/W = H.wear_id - W.access = get_all_accesses() - W.assignment = "Reaper" - W.registered_name = H.real_name - W.update_label() - /datum/outfit/centcom/commander name = "CentCom Commander" @@ -269,27 +138,6 @@ shoes = /obj/item/clothing/shoes/sandal/marisa head = /obj/item/clothing/head/wizard/marisa -/datum/outfit/mobster - name = "Mobster" - - uniform = /obj/item/clothing/under/suit/black_really - head = /obj/item/clothing/head/fedora - shoes = /obj/item/clothing/shoes/laceup - gloves = /obj/item/clothing/gloves/color/black - ears = /obj/item/radio/headset - glasses = /obj/item/clothing/glasses/sunglasses - r_hand = /obj/item/gun/ballistic/automatic/smg/thompson/drum - id = /obj/item/card/id - -/datum/outfit/mobster/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/card/id/W = H.wear_id - W.assignment = "Assistant" - W.registered_name = H.real_name - W.update_label() - /datum/outfit/plasmaman name = "Plasmaman" @@ -381,26 +229,3 @@ var/obj/item/card/id/W = H.wear_id W.registered_name = H.real_name W.update_label() - -/datum/outfit/job/hos/inteq_honorable - name = "Inteq Honorable vanguard" - head = /obj/item/clothing/head/beret/sec/hos/inteq/honorable - uniform = /obj/item/clothing/under/syndicate/inteq/honorable - suit = /obj/item/clothing/suit/armor/hos/inteq/honorable - mask = /obj/item/clothing/mask/gas/sechailer/inteq - gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/combat - ears = /obj/item/radio/headset/inteq/alt - belt = /obj/item/storage/belt/military/assault - glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq - -/datum/outfit/job/hos/inteq_honorable/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/card/id/W = H.wear_id - W.access = get_all_accesses() - W.assignment = "Honorable Vanguard" - W.registered_name = H.real_name - W.update_label() - ..() diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index 65d19b1cdeb3..1b05de78e96d 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -1,11 +1,6 @@ /obj/item/clothing/shoes/sneakers dying_key = DYE_REGISTRY_SNEAKERS supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION - -/obj/item/clothing/shoes/sneakers/black - name = "black shoes" - icon_state = "black" - desc = "A pair of black shoes." custom_price = 50 cold_protection = FEET @@ -13,6 +8,11 @@ heat_protection = FEET max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT +/obj/item/clothing/shoes/sneakers/black + name = "black shoes" + icon_state = "black" + desc = "A pair of black shoes." + /obj/item/clothing/shoes/sneakers/brown name = "brown shoes" desc = "A pair of brown shoes." diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 8d9cab360203..a738bee8f8ed 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -145,7 +145,7 @@ /obj/item/clothing/shoes/jackboots name = "jackboots" - desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." + desc = "Ankle-high combat boots for combat scenarios or combat situations. All combat, all the time." icon_state = "jackboots" item_state = "jackboots" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' @@ -434,7 +434,7 @@ /obj/item/clothing/shoes/cowboy/fancy name = "bilton wrangler boots" - desc = "A pair of authentic haute couture boots from Japanifornia. You doubt they have ever been close to cattle." + desc = "A pair of authentic haute couture boots. You doubt they have ever been close to cattle." icon_state = "cowboy_fancy" permeability_coefficient = 0.08 diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index b93db688fa02..9c363c11551a 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -341,7 +341,7 @@ /obj/item/clothing/suit/armor/hos/inteq/honorable //Basically CC higherup clothing for inteq name = "honorable vanguard battlecoat" - desc = "A sleek black coat with snow white fur trims made to order for honorable vanguards of the IRMG, It feels even tougher than the typical battlecoat." + desc = "A sleek black coat with snow white fur trims made to order for honorable vanguards of the IRMG. It feels even tougher than the typical battlecoat." icon_state = "armor_inteq_honorable_battlecoat" item_state = "inteq_honorable_battlecoat" armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm index 7d1eaa30190d..c5426e63883e 100644 --- a/code/modules/clothing/under/jobs/cargo.dm +++ b/code/modules/clothing/under/jobs/cargo.dm @@ -29,7 +29,7 @@ /obj/item/clothing/under/rank/cargo/tech/skirt name = "cargo technician's jumpskirt" - desc = "Skiiiiirts! They're comfy and easy to wear" + desc = "Skiiiiirts! They're comfy and easy to wear!" icon_state = "cargo_skirt" item_state = "lb_suit" body_parts_covered = CHEST|GROIN|ARMS diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 251743a5cdad..de9cb15258e5 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -85,12 +85,12 @@ // Brig Physician // /obj/item/clothing/under/rank/security/brig_phys name = "brig physician jumpsuit" - desc = "A lightly armored jumpsuit worn by Nanotrasen's Asset Protection Medical Corps." + desc = "A lightly armored jumpsuit, worn by practitioners entrusted to the care of prisoners around the frontier." icon_state = "brig_phys" /obj/item/clothing/under/rank/security/brig_phys/skirt name = "brig physician jumpskirt" - desc = "A lightly armored jumpsuit worn by Nanotrasen's Asset Protection Medical Corps." + desc = "A lightly armored jumpskirt, worn by practitioners entrusted to the care of prisoners around the frontier." icon_state = "brig_phys_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE @@ -98,13 +98,13 @@ /obj/item/clothing/under/rank/security/brig_phys/nt name = "security medic's uniform" - desc = "A lightly armored uniform worn by medics ensuring the health of prisoners." + desc = "A lightly armored uniform worn by members of Nanotrasen's Asset Protection Medical Corps." icon_state = "rbrig_phys" item_state = "r_suit" /obj/item/clothing/under/rank/security/brig_phys/nt/skirt name = "security medic's uniform" - desc = "A lightly armored uniform, with a skirt, worn by medics ensuring the health of prisoners." + desc = "A lightly armored uniform, with a skirt, worn by members of Nanotrasen's Asset Protection Medical Corps." icon_state = "rbrig_phys_skirt" body_parts_covered = CHEST|GROIN|ARMS supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON @@ -129,30 +129,18 @@ /obj/item/clothing/under/rank/security/warden/nt name = "warden's red security suit" - desc = "A formal security suit for officers complete with Nanotrasen belt buckle." + desc = "A formal security suit for wardens, complete with Nanotrasen belt buckle." icon_state = "rwarden" item_state = "r_suit" /obj/item/clothing/under/rank/security/warden/nt/skirt name = "warden's red suitskirt" - desc = "A formal security suitskirt for officers complete with Nanotrasen belt buckle." + desc = "A formal security suitskirt for wardens, complete with Nanotrasen belt buckle." icon_state = "rwarden_skirt" item_state = "r_suit" body_parts_covered = CHEST|GROIN|ARMS supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON -/obj/item/clothing/under/rank/security/head_of_security/nt - name = "red head of security's jumpsuit" - icon_state = "rhos" - item_state = "r_suit" - -/obj/item/clothing/under/rank/security/head_of_security/nt/skirt - name = "head of security's red jumpskirt" - desc = "A security jumpskirt decorated for those few with the dedication to achieve the position of Head of Security." - icon_state = "rhos_skirt" - body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON - // Head of Security // /obj/item/clothing/under/rank/security/head_of_security name = "head of security's jumpsuit" @@ -186,6 +174,18 @@ body_parts_covered = CHEST|GROIN|ARMS supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON +/obj/item/clothing/under/rank/security/head_of_security/nt + name = "red head of security's jumpsuit" + icon_state = "rhos" + item_state = "r_suit" + +/obj/item/clothing/under/rank/security/head_of_security/nt/skirt + name = "head of security's red jumpskirt" + desc = "A security jumpskirt decorated for those few with the dedication to achieve the position of Head of Security." + icon_state = "rhos_skirt" + body_parts_covered = CHEST|GROIN|ARMS + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON + /obj/item/clothing/under/rank/security/head_of_security/parade name = "head of security's parade uniform" desc = "A male head of security's luxury-wear, for special occasions." @@ -201,7 +201,7 @@ // Prisoner // /obj/item/clothing/under/rank/prisoner name = "prison jumpsuit" - desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." + desc = "It's standardised prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon = 'icons/obj/clothing/under/security.dmi' icon_state = "prisoner" item_state = "o_suit" @@ -212,7 +212,7 @@ /obj/item/clothing/under/rank/prisoner/skirt name = "prison jumpskirt" - desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." + desc = "It's standardised prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "prisoner_skirt" item_state = "o_suit" body_parts_covered = CHEST|GROIN|ARMS @@ -221,12 +221,12 @@ /obj/item/clothing/under/rank/prisoner/protected_custody name = "protected custody jumpsuit" - desc = "It's standardised Nanotrasen prisoner-wear worn by those in protected custody. Its suit sensors are stuck in the \"Fully On\" position." + desc = "It's standardised prisoner-wear worn by those in protected custody. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "protected_custody" /obj/item/clothing/under/rank/prisoner/protected_custody/skirt name = "protected custody jumpskirt" - desc = "It's standardised Nanotrasen prisoner-wear worn by those in protected custody. Its suit sensors are stuck in the \"Fully On\" position." + desc = "It's standardised prisoner-wear worn by those in protected custody. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "protected_custody_skirt" supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON @@ -254,7 +254,7 @@ /obj/item/clothing/under/rank/security/officer/mallcop name = "NT mall cop uniform" - desc = "The radio and badge are sewn on, what a crappy knock off. Secway not included." + desc = "The radio and badge are sewn on. What a crappy knock off! Secway not included." icon_state = "mallcop" can_adjust = FALSE @@ -293,14 +293,16 @@ /obj/item/clothing/under/rank/security/officer/frontier name = "\improper Frontiersmen uniform" - desc = "Worn by members of the Frontiersmen pirate fleet. It's less comfortable than it looks." + desc = "Worn by members of the Frontiersmen pirate fleet. It's very uncomfortable to move around in." icon_state = "frontier" item_state = "gy_suit" /obj/item/clothing/under/rank/security/officer/frontier/officer name = "\improper Frontiersmen officer's uniform" + desc = "Worn by officers of the Frontiersmen pirate fleet. It's less comfortable than it looks." icon_state = "frontier_officer" /obj/item/clothing/under/rank/security/officer/frontier/admiral name = "\improper Frontiersmen admiral's uniform" + desc = "Worn by admirals of the Frontiersmen pirate fleet. It's the only Frontiersman uniform that isn't mass produced." icon_state = "frontier_admiral" diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 74598b3eb678..2bd5c2fd4667 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -192,6 +192,8 @@ ///The icon this outfit's ID will have when shown on a sechud and ID cards. See [icons\mob\hud.dmi] for a list of icons. Leave null for default. var/job_icon + // the background of the job icon + var/faction_icon var/alt_uniform @@ -277,6 +279,7 @@ if(H.age) C.registered_age = H.age C.job_icon = job_icon + C.faction_icon = faction_icon C.update_label() for(var/A in SSeconomy.bank_accounts) var/datum/bank_account/B = A diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index 8035212c27c6..42ca9b6de9fc 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -45,153 +45,3 @@ Assistant uniform = /obj/item/clothing/under/utility/skirt else uniform = /obj/item/clothing/under/utility - -/datum/outfit/job/assistant/entertainer - name = "Assistant (Entertainer)" - r_hand = /obj/item/bikehorn //comedy - -/datum/outfit/job/assistant/engineeringspecialist - name = "Assistant (Engineering Specialist)" - accessory = /obj/item/clothing/accessory/armband/engine - -/datum/outfit/job/assistant/medicalspecialist - name = "Assistant (Medical Specialist)" - uniform = /obj/item/clothing/under/color/white - accessory = /obj/item/clothing/accessory/armband/med - -/datum/outfit/job/assistant/sciencespecialist - name = "Assistant (Science Specialist)" - uniform = /obj/item/clothing/under/color/white - accessory = /obj/item/clothing/accessory/armband/science - -/datum/outfit/job/assistant/deckhand - name = "Assistant (Deckhand)" - accessory = /obj/item/clothing/accessory/armband/cargo - -//Shiptest outfits - -/datum/outfit/job/assistant/minutemen - name = "Volunteer (Minutemen)" - - uniform = /obj/item/clothing/under/rank/security/officer/minutemen - backpack = /obj/item/storage/backpack/security/cmm - -/datum/outfit/job/assistant/inteq - name = "IRMG Recruit (Inteq)" - uniform = /obj/item/clothing/under/syndicate/inteq - -/datum/outfit/job/assistant/intern - name = "Assistant (Intern)" - uniform = /obj/item/clothing/under/suit/black - neck = /obj/item/clothing/neck/tie - shoes = /obj/item/clothing/shoes/laceup - r_pocket = /obj/item/pen/fountain - -/datum/outfit/job/assistant/receptionist - name = "Assistant (Receptionist)" - uniform = /obj/item/clothing/under/suit/beige - glasses = /obj/item/clothing/glasses/regular/hipster - shoes = /obj/item/clothing/shoes/laceup - r_pocket = /obj/item/pen/fourcolor - l_pocket = /obj/item/clipboard - -/datum/outfit/job/assistant/receptionist/pre_equip(mob/living/carbon/human/H) - ..() - switch(H.jumpsuit_style) - if(PREF_SUIT) - uniform = initial(uniform) - if(PREF_ALTSUIT) - uniform = /obj/item/clothing/under/suit/blacktwopiece - if(PREF_SKIRT) - uniform = /obj/item/clothing/under/dress/skirt/plaid - else - uniform = /obj/item/clothing/under/suit/beige - -/datum/outfit/job/assistant/pirate - name = "Assistant (Pirate)" - - uniform = /obj/item/clothing/under/costume/sailor - shoes = /obj/item/clothing/shoes/jackboots - -/datum/outfit/job/assistant/corporate - name = "Business Associate" - - uniform = /obj/item/clothing/under/suit/black - shoes = /obj/item/clothing/shoes/laceup - suit = /obj/item/clothing/suit/toggle/lawyer/black - -/datum/outfit/job/assistant/independent/crewmatefancy - name = "Crewmate (Independent)" - - uniform = /obj/item/clothing/under/misc/assistantformal - shoes = /obj/item/clothing/shoes/laceup - gloves = /obj/item/clothing/gloves/color/white - -/datum/outfit/job/assistant/ex_prisoner - name = "Assistant (Ex-Prisoner)" - - glasses = /obj/item/clothing/glasses/sunglasses - uniform = /obj/item/clothing/under/rank/prisoner - shoes = /obj/item/clothing/shoes/sneakers/orange - accessory = /obj/item/clothing/accessory/armband/deputy - -/datum/outfit/job/assistant/waiter - name = "Assistant (Waiter)" - - uniform = /obj/item/clothing/under/suit/waiter - shoes = /obj/item/clothing/shoes/laceup - ears = /obj/item/radio/headset/headset_srv - gloves = /obj/item/clothing/gloves/color/white - -/datum/outfit/job/assistant/artist - name = "Assistant (Artist)" - - uniform = /obj/item/clothing/under/suit/burgundy - suit = /obj/item/clothing/suit/toggle/suspenders - head = /obj/item/clothing/head/beret/black - shoes = /obj/item/clothing/shoes/laceup - gloves = /obj/item/clothing/gloves/color/white - accessory = /obj/item/clothing/neck/scarf/darkblue - -/datum/outfit/job/assistant/roumain - name = "Shadow (Saint-Roumain Militia)" - - uniform = /obj/item/clothing/under/suit/roumain - alt_uniform = null - shoes = /obj/item/clothing/shoes/workboots/mining - suit = /obj/item/clothing/suit/armor/roumain/shadow - - head = /obj/item/clothing/head/cowboy/sec/roumain/shadow - -/datum/outfit/job/assistant/roumain/post_equip(mob/living/carbon/human/H) - H.faction |= list("roumain") - -/datum/outfit/job/assistant/pharma - name = "Pharmacology Student" - - uniform = /obj/item/clothing/under/rank/medical/ - shoes = /obj/item/clothing/shoes/sneakers/white - accessory = /obj/item/clothing/neck/scarf/orange - l_pocket = /obj/item/pda/medical - r_pocket = /obj/item/reagent_containers/pill/floorpill - belt = /obj/item/reagent_scanner - backpack_contents = list(/obj/item/book/manual/wiki/chemistry=1) - -/datum/outfit/job/assistant/aipirate - name = "Nodesman" - - uniform = /obj/item/clothing/under/utility - head = /obj/item/clothing/head/soft/black - shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat/survival - gloves = /obj/item/clothing/gloves/combat - implants = list(/obj/item/implant/radio) - -/datum/outfit/job/assistant/frontiersmen - name = "Deckhand (frontiersmen)" - - uniform = /obj/item/clothing/under/rank/security/officer/frontier - shoes = /obj/item/clothing/shoes/jackboots - r_pocket = /obj/item/radio - head = /obj/item/clothing/head/beret/sec/frontier - ears = /obj/item/radio/headset/pirate diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index f00d87eb6ba4..3dc911b137ac 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -31,20 +31,3 @@ box = /obj/item/storage/box/survival/engineer pda_slot = ITEM_SLOT_LPOCKET backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) - -/datum/outfit/job/atmos/rig - name = "Atmospheric Technician (Hardsuit)" - - mask = /obj/item/clothing/mask/gas/atmos - suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos - suit_store = /obj/item/tank/internals/oxygen - internals_slot = ITEM_SLOT_SUITSTORE - -/datum/outfit/job/atmos/frontiersmen - name = "Atmospheric Technician (Frontiersmen)" - - uniform = /obj/item/clothing/under/rank/security/officer/frontier - suit = /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos - head = /obj/item/clothing/head/hardhat - ears = /obj/item/radio/headset/pirate - mask = /obj/item/clothing/mask/gas/atmos diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm index f704f1c62139..9c5d28e693e8 100644 --- a/code/modules/jobs/job_types/bartender.dm +++ b/code/modules/jobs/job_types/bartender.dm @@ -31,16 +31,3 @@ if(H.age < AGE_MINOR) W.registered_age = AGE_MINOR to_chat(H, "You're not technically old enough to access or serve alcohol, but your ID has been discreetly modified to display your age as [AGE_MINOR]. Try to keep that a secret!") - -/datum/outfit/job/bartender/pharma - name = "Mixologist" - - backpack_contents = list(/obj/item/storage/box/syringes=1, /obj/item/storage/box/drinkingglasses = 1) - ears = /obj/item/radio/headset/headset_med - suit = /obj/item/clothing/suit/toggle/labcoat - alt_suit = /obj/item/clothing/suit/armor/vest - l_pocket = /obj/item/pda/bar - r_pocket = /obj/item/reagent_containers/food/drinks/shaker - belt = /obj/item/storage/belt - gloves = /obj/item/clothing/gloves/color/latex/nitrile - uniform = /obj/item/clothing/under/suit/black diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 17820864e57f..130385df95f1 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -26,12 +26,3 @@ backpack = /obj/item/storage/backpack/botany satchel = /obj/item/storage/backpack/satchel/hyd courierbag = /obj/item/storage/backpack/messenger/hyd - -/datum/outfit/job/botanist/pharma - name = "Herbalist" - - ears = /obj/item/radio/headset/headset_med - belt = /obj/item/storage/bag/plants - l_pocket = /obj/item/pda/botanist - suit = /obj/item/clothing/suit/apron/overalls - uniform = /obj/item/clothing/under/utility diff --git a/code/modules/jobs/job_types/brig_physician.dm b/code/modules/jobs/job_types/brig_physician.dm index d27f2df6b859..124c1ec791df 100644 --- a/code/modules/jobs/job_types/brig_physician.dm +++ b/code/modules/jobs/job_types/brig_physician.dm @@ -28,20 +28,3 @@ l_hand = /obj/item/storage/firstaid/regular head = /obj/item/clothing/head/soft/sec/brig_phys implants = list(/obj/item/implant/mindshield) - - -/datum/outfit/job/brig_phys/securitymedic - name = "Brig Physician (Security Medic)" - - uniform = /obj/item/clothing/under/rank/security/brig_phys/nt - suit = /obj/item/clothing/suit/toggle/labcoat/brig_phys - suit_store = /obj/item/flashlight/pen - alt_suit = null - -/datum/outfit/job/brig_phys/executionsupervisor - name = "Brig Physician (Execution Supervisor)" - - uniform = /obj/item/clothing/under/rank/security/brig_phys/nt - suit = /obj/item/clothing/suit/toggle/labcoat/brig_phys - l_pocket = /obj/item/reagent_containers/syringe - alt_suit = null diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 78e7eb8dde74..786f9e798e43 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -41,175 +41,3 @@ accessory = /obj/item/clothing/accessory/medal/gold/captain chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain) - -/datum/outfit/job/captain/hardsuit - name = "Captain (Hardsuit)" - - mask = /obj/item/clothing/mask/gas/atmos/captain - suit = /obj/item/clothing/suit/space/hardsuit/swat/captain - suit_store = /obj/item/tank/internals/oxygen - -/datum/outfit/job/captain/nt - name = "Captain (Nanotrasen)" - - ears = /obj/item/radio/headset/nanotrasen/captain - uniform = /obj/item/clothing/under/rank/command/captain/nt - gloves = /obj/item/clothing/gloves/color/captain/nt - shoes = /obj/item/clothing/shoes/laceup - head = /obj/item/clothing/head/caphat/nt - -/datum/outfit/job/captain/nt/heron - name = "Captain (Nanotrasen)" - - uniform = /obj/item/clothing/under/rank/centcom/officer - gloves = /obj/item/clothing/gloves/combat - head = /obj/item/clothing/head/centhat - suit = /obj/item/clothing/suit/armor/vest/bulletproof - -/datum/outfit/job/captain/pirate - name = "Captain (Pirate)" - - ears = /obj/item/radio/headset/pirate/captain - uniform = /obj/item/clothing/under/costume/pirate - shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/pirate/captain - suit = /obj/item/clothing/suit/pirate/captain - -/datum/outfit/job/captain/corporate - name = "Captain (Corporate)" - uniform = /obj/item/clothing/under/suit/navy - shoes = /obj/item/clothing/shoes/laceup - glasses = /obj/item/clothing/glasses/sunglasses - gloves = null - -/datum/outfit/job/captain/western - name = "Captain (Western)" - alt_uniform = null - shoes = /obj/item/clothing/shoes/cowboy/white - head = /obj/item/clothing/head/caphat/cowboy - glasses = /obj/item/clothing/glasses/sunglasses - alt_suit = null - -/datum/outfit/job/captain/minutemen - name = "Captain (Colonial Minutemen)" - - ears = /obj/item/radio/headset/heads/captain/alt - uniform = /obj/item/clothing/under/rank/command/minutemen - alt_uniform = null - suit = /obj/item/clothing/suit/toggle/lawyer/minutemen - alt_suit = null - - shoes = /obj/item/clothing/shoes/combat - head = /obj/item/clothing/head/cowboy/sec/minutemen - backpack = /obj/item/storage/backpack - backpack_contents = list(/obj/item/storage/box/ids=1,\ - /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) - -/datum/outfit/job/captain/minutemen/general - name = "General (Colonial Minutemen)" - - head = /obj/item/clothing/head/caphat/minutemen - ears = /obj/item/radio/headset/heads/captain - uniform = /obj/item/clothing/under/rank/command/minutemen - suit = /obj/item/clothing/suit/armor/vest/capcarapace/minutemen - shoes = /obj/item/clothing/shoes/combat - - box = /obj/item/storage/box/survival/engineer/radio - backpack = /obj/item/storage/backpack - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/gun/ballistic/revolver/mateba=1) - -/datum/outfit/job/captain/independent/owner - name = "Private Ship Owner (Independent)" - - id = /obj/item/card/id/gold - uniform = /obj/item/clothing/under/suit/black - shoes = /obj/item/clothing/shoes/laceup - head = null - belt = null - gloves = null - accessory = null - ears = /obj/item/radio/headset/heads/captain - box = /obj/item/storage/box/survival - backpack = /obj/item/storage/backpack - satchel = /obj/item/storage/backpack/satchel/ - duffelbag = /obj/item/storage/backpack/duffelbag - courierbag = /obj/item/storage/backpack/messenger - backpack_contents = list(/obj/item/clothing/accessory/medal/gold/captain=1, /obj/item/spacecash/bundle/c10000=1) - -/datum/outfit/job/captain/inteq - name = "IRMG Vanguard (Inteq)" - - ears = /obj/item/radio/headset/inteq/alt/captain - uniform = /obj/item/clothing/under/syndicate/inteq - head = /obj/item/clothing/head/beret/sec/hos/inteq - glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq - mask = /obj/item/clothing/mask/gas/sechailer/inteq - belt = /obj/item/storage/belt/security/webbing/inteq - suit = /obj/item/clothing/suit/armor/hos/inteq - dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - r_pocket = /obj/item/assembly/flash/handheld - l_pocket = /obj/item/restraints/handcuffs - accessory = null - - courierbag = /obj/item/storage/backpack/messenger/inteq - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/pda/captain) - -/datum/outfit/job/captain/inteq/naked - name = "IRMG Vanguard (Inteq) (Naked)" - head = null - mask = null - glasses = null - belt = null - suit = null - gloves = null - suit_store = null - -/datum/outfit/job/captain/aipirate - name = "Nodesman (Command)" - - uniform = /obj/item/clothing/under/utility - alt_uniform = null - gloves = /obj/item/clothing/gloves/combat - suit = /obj/item/clothing/suit/armor/vest/marine/medium - alt_suit = null - dcoat = null - head = /obj/item/clothing/head/soft/black - shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat - implants = list(/obj/item/implant/radio) - accessory = null - -/datum/outfit/job/captain/frontiersmen - name = "Captain (Frontiersmen)" - - ears = /obj/item/radio/headset/pirate/alt/captain - uniform = /obj/item/clothing/under/rank/security/officer/frontier/admiral - head = /obj/item/clothing/head/caphat/frontier/admiral - glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq - mask = /obj/item/clothing/mask/gas/sechailer - suit = /obj/item/clothing/suit/armor/frontier - shoes = /obj/item/clothing/shoes/cowboy - gloves = /obj/item/clothing/gloves/combat - glasses = /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch - - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/pda/captain) - -/datum/outfit/job/captain/nt/lp_lieutenant - name = "LP Lieutenant" - - implants = list(/obj/item/implant/mindshield) - ears = /obj/item/radio/headset/nanotrasen/alt/captain - id = /obj/item/card/id/lplieu - belt = /obj/item/pda/captain - gloves = /obj/item/clothing/gloves/color/black - uniform = /obj/item/clothing/under/rank/security/head_of_security/alt/lp - alt_uniform = /obj/item/clothing/under/rank/security/head_of_security/alt/skirt/lp - dcoat = /obj/item/clothing/suit/jacket - shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/beret/command - - satchel = /obj/item/storage/backpack/satchel/cap - duffelbag = /obj/item/storage/backpack/duffelbag/captain - courierbag = /obj/item/storage/backpack/messenger/com diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index 22f85ed9f57a..3fa729969013 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -23,27 +23,4 @@ l_hand = /obj/item/export_scanner backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) -//Shiptest outfits -/datum/outfit/job/cargo_tech/pilot - name = "Pilot" - - uniform = /obj/item/clothing/under/syndicate/camo - accessory = /obj/item/clothing/accessory/armband/cargo - suit = /obj/item/clothing/suit/jacket - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/fingerless - glasses = /obj/item/clothing/glasses/sunglasses/big - - -/datum/outfit/job/cargo_tech/frontiersmen - name = "Cargo Tech (frontiersmen)" - - uniform = /obj/item/clothing/under/rank/security/officer/frontier - suit = /obj/item/clothing/suit/hazardvest - ears = /obj/item/radio/headset/pirate - shoes = /obj/item/clothing/shoes/workboots - head = /obj/item/clothing/head/soft - backpack_contents = list( - /obj/item/modular_computer/tablet/preset/cargo = 1, - ) diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index 9dd36c1e201a..870697476794 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -124,18 +124,3 @@ satchel = /obj/item/storage/backpack/cultpack chameleon_extras = /obj/item/stamp/chap - -/datum/outfit/job/chaplain/monk - name = "Chaplain (Monk)" - suit = /obj/item/clothing/suit/hooded/chaplainsuit/monkhabit - l_hand = /obj/item/storage/book/bible - -/datum/outfit/job/chaplain/imam - name = "Chaplain (Imam)" - head = /obj/item/clothing/head/taqiyahwhite - l_hand = /obj/item/storage/book/bible/koran - -/datum/outfit/job/chaplain/rabbi - name = "Chaplain (Rabbi)" - head = /obj/item/clothing/head/kippah - l_hand = /obj/item/storage/book/bible/torah diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index d98181af7324..c93b6d3119a2 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -29,70 +29,3 @@ box = /obj/item/storage/box/survival/medical chameleon_extras = /obj/item/gun/syringe - -//Alt jobs - -/datum/outfit/job/chemist/pharmacist - name = "Chemist (Pharmacist)" - jobtype = /datum/job/chemist - - glasses = null - alt_uniform = null - - backpack_contents = list(/obj/item/clothing/glasses/science=1) - -/datum/outfit/job/chemist/pharmacologist - name = "Chemist (Pharmacologist)" - - glasses = null - alt_uniform = null - suit = /obj/item/clothing/suit/toggle/labcoat/chemist/side - - backpack_contents = list(/obj/item/clothing/glasses/science=1) - -/datum/outfit/job/chemist/juniorchemist - name = "Chemist (Junior Chemist)" - - glasses = null - alt_uniform = null - suit = null - alt_suit = null - - backpack_contents = list(/obj/item/clothing/glasses/science=1) - -/datum/outfit/job/chemist/seniorchemist - name = "Chemist (Senior Chemist)" - - glasses = null - alt_uniform = null - shoes = /obj/item/clothing/shoes/laceup - suit = /obj/item/clothing/suit/toggle/lawyer/orange - alt_suit = /obj/item/clothing/suit/toggle/labcoat/chemist - dcoat = null - l_hand = null - suit_store = null - neck = /obj/item/clothing/neck/tie/orange - - backpack_contents = list(/obj/item/clothing/glasses/science=1) - -//Shiptest - -/datum/outfit/job/chemist/pharma - name = "Pharmacist" - - belt = /obj/item/storage/bag/chemistry - l_pocket =/obj/item/pda/chemist - r_pocket = /obj/item/storage/pill_bottle - suit = /obj/item/clothing/suit/longcoat/chemist - alt_suit = /obj/item/clothing/suit/toggle/labcoat/chemist/side - dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical - box = /obj/item/storage/box/survival/medical - gloves = /obj/item/clothing/gloves/color/latex - glasses = /obj/item/clothing/glasses/sunglasses - -/datum/outfit/job/chemist/minutemen - name = "Chemical Scientist(minutemen)" - - suit = /obj/item/clothing/suit/toggle/labcoat/chemist - ears = /obj/item/radio/headset/minutemen - diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 5b862731db49..b828f2357159 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -45,78 +45,3 @@ box = /obj/item/storage/box/survival/engineer pda_slot = ITEM_SLOT_LPOCKET chameleon_extras = /obj/item/stamp/ce - -/datum/outfit/job/ce/rig - name = "Chief Engineer (Hardsuit)" - - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/hardsuit/engine/elite - shoes = /obj/item/clothing/shoes/magboots/advance - suit_store = /obj/item/tank/internals/oxygen - glasses = /obj/item/clothing/glasses/meson/engine - gloves = /obj/item/clothing/gloves/color/yellow - head = null - internals_slot = ITEM_SLOT_SUITSTORE - -/datum/outfit/job/ce/engineeringcoordinator - name = "Chief Engineer (Engineering Coordinator)" - - belt = null - uniform = /obj/item/clothing/under/rank/engineering/chief_engineer - alt_uniform = null - alt_suit = /obj/item/clothing/suit/hazardvest - dcoat = null - shoes = /obj/item/clothing/shoes/laceup - head = /obj/item/clothing/head/hardhat/white - gloves = null - neck = /obj/item/clothing/neck/tie/green - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1, /obj/item/clothing/gloves/color/black=1) - -/datum/outfit/job/ce/inteq - name = "IRMG Artificer Class II (Inteq)" - - ears = /obj/item/radio/headset/inteq - uniform = /obj/item/clothing/under/syndicate/inteq/artificer - head = /obj/item/clothing/head/hardhat/white - mask = /obj/item/clothing/mask/gas/sechailer/inteq - dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - belt = /obj/item/storage/belt/utility/full - - courierbag = /obj/item/storage/backpack/messenger/inteq - -/datum/outfit/job/ce/nt - name = "Chief Engineer (NT)" - - head = /obj/item/clothing/head/beret/ce - belt = /obj/item/storage/belt/utility/full - suit = /obj/item/clothing/suit/hazardvest - -/datum/outfit/job/ce/frontiersmen - name = "Head Carpenter (Frontiersmen)" - - ears = /obj/item/radio/headset/pirate - uniform = /obj/item/clothing/under/rank/security/officer/frontier/officer - head = /obj/item/clothing/head/hardhat/white - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - belt = /obj/item/storage/belt/utility/full - -/datum/outfit/job/ce/minutemen - name = "Foreman (Colonial Minutemen)" - - ears = /obj/item/radio/headset/minutemen/alt - uniform = /obj/item/clothing/under/rank/command/minutemen - alt_uniform = null - suit = /obj/item/clothing/suit/toggle/lawyer/minutemen - alt_suit = null - gloves = /obj/item/clothing/gloves/combat - belt = /obj/item/storage/belt/utility/full - shoes = /obj/item/clothing/shoes/combat - head = /obj/item/clothing/head/cowboy/sec/minutemen - backpack = /obj/item/storage/backpack - backpack_contents = list( - /obj/item/melee/classic_baton/telescopic=1, - /obj/item/modular_computer/tablet/preset/advanced = 1 - ) diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index f614aab080a0..d09b9ee6aa50 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -42,55 +42,3 @@ box = /obj/item/storage/box/survival/medical chameleon_extras = list(/obj/item/gun/syringe, /obj/item/stamp/cmo) - -/datum/outfit/job/cmo/hardsuit - name = "Chief Medical Officer (Hardsuit)" - - mask = /obj/item/clothing/mask/breath/medical - suit = /obj/item/clothing/suit/space/hardsuit/medical/cmo - suit_store = /obj/item/tank/internals/oxygen - r_pocket = /obj/item/flashlight/pen - -/datum/outfit/job/cmo/medicaldirector - name = "Chief Medical Officer (Medical Director)" - - alt_uniform = null - shoes = /obj/item/clothing/shoes/laceup - suit = /obj/item/clothing/suit/toggle/lawyer/cmo - alt_suit = /obj/item/clothing/suit/toggle/labcoat/cmo - neck = /obj/item/clothing/neck/tie/blue - l_hand = null - suit_store = null - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/storage/firstaid/medical=1, /obj/item/flashlight/pen=1) - -/datum/outfit/job/cmo/surgeongeneral - name = "Chief Medical Officer (Surgeon-General)" - - uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer - alt_uniform = null - shoes = /obj/item/clothing/shoes/laceup - suit = /obj/item/clothing/suit/toggle/labcoat/cmo - alt_suit = null - l_hand = null - suit_store = null - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/storage/firstaid/medical=1, /obj/item/flashlight/pen=1) - - -/datum/outfit/job/cmo/pharma - name = "Chief Pharmacist" - - glasses = /obj/item/clothing/glasses/science/prescription/fake//chief pharma is this kind of person - neck = /obj/item/clothing/neck/tie/orange//the Horrible Tie was genuinely too hard to look at - l_pocket = /obj/item/reagent_containers/glass/filter - ears = /obj/item/radio/headset/heads/cmo - uniform = /obj/item/clothing/under/suit/tan - alt_uniform = /obj/item/clothing/under/rank/medical/doctor/green - shoes = /obj/item/clothing/shoes/sneakers/brown - suit = /obj/item/clothing/suit/toggle/suspenders/gray - suit_store = null - dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical - l_hand = /obj/item/reagent_containers/glass/maunamug - backpack = /obj/item/storage/backpack/chemistry - satchel = /obj/item/storage/backpack/satchel/chem - courierbag = /obj/item/storage/backpack/messenger/chem - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/storage/bag/chemistry=1) diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index d1006a5b154f..1c3d318eeffb 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -35,23 +35,3 @@ H.equip_to_slot_or_del(I,ITEM_SLOT_BACKPACK) var/datum/martial_art/cqc/under_siege/justacook = new justacook.teach(H) - -//WS Edit Start - Alt-Job Titles -/datum/outfit/job/cook/grillmaster - uniform = /obj/item/clothing/under/rank/civilian/cookjorts - suit = null - head = null - mask = null - r_hand = /obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy - l_pocket = /obj/item/stack/sheet/mineral/coal -//WS Edit End - Alt-Job Titles - -//shiptest outfits - -/datum/outfit/job/cook/frontiersmen - name = "Steward (frontiersmen)" - - uniform = /obj/item/clothing/under/rank/security/officer/frontier - ears = /obj/item/radio/headset/pirate - head = /obj/item/clothing/head/flatcap - suit = /obj/item/clothing/suit/apron/chef diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm index d069e3411bbc..3fb642e9e469 100644 --- a/code/modules/jobs/job_types/curator.dm +++ b/code/modules/jobs/job_types/curator.dm @@ -36,38 +36,3 @@ return H.grant_all_languages(TRUE, TRUE, TRUE, LANGUAGE_CURATOR) - -/datum/outfit/job/curator/journalist - name = "Curator (Journalist)" - uniform = /obj/item/clothing/under/suit/checkered - head = /obj/item/clothing/head/fedora - neck = /obj/item/camera - l_hand = /obj/item/taperecorder - l_pocket = /obj/item/newspaper - backpack_contents = list( - /obj/item/choice_beacon/hero = 1, - /obj/item/tape = 1 - ) - -/datum/outfit/job/curator/librarian - name = "Curator (Librarian)" - uniform = /obj/item/clothing/under/suit/tan - neck = /obj/item/clothing/neck/tie/brown - backpack_contents = list( - /obj/item/choice_beacon/hero = 1, - /obj/item/tape = 1, - /obj/item/paper_bin/bundlenatural = 1, - /obj/item/pen/fountain = 1 - ) -/datum/outfit/job/curator/dungeonmaster - name = "Dungeon Master" - uniform = /obj/item/clothing/under/misc/pj/red - suit = /obj/item/clothing/suit/nerdshirt - backpack_contents = list( - /obj/item/choice_beacon/hero = 1, - /obj/item/tape = 1, - /obj/item/storage/pill_bottle/dice = 1, - /obj/item/toy/cards/deck/cas = 1, - /obj/item/toy/cards/deck/cas/black = 1, - /obj/item/hourglass = 1 - ) diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 0e53b00c1670..a1071d7d3ce4 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -49,78 +49,3 @@ courierbag = /obj/item/storage/backpack/messenger/com chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/head_of_personnel) - -/datum/outfit/job/head_of_personnel/pre_equip(mob/living/carbon/human/H) - ..() - -/datum/outfit/job/head_of_personnel/nt - name = "First Officer (Nanotrasen)" - ears = /obj/item/radio/headset/nanotrasen - uniform = /obj/item/clothing/under/rank/command/head_of_personnel/nt - alt_uniform = null - alt_suit = null - shoes = /obj/item/clothing/shoes/laceup - head = /obj/item/clothing/head/hopcap/nt - -/datum/outfit/job/head_of_personnel/pirate - name = "First Mate (Pirate)" - ears = /obj/item/radio/headset/pirate - uniform = /obj/item/clothing/under/costume/pirate - shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/pirate - suit = /obj/item/clothing/suit/pirate - -/datum/outfit/job/head_of_personnel/western - name = "First Mate (Western)" - uniform = /obj/item/clothing/under/rank/security/detective/grey - alt_uniform = null - suit = null - alt_suit = null - shoes = /obj/item/clothing/shoes/cowboy/black - accessory = /obj/item/clothing/accessory/waistcoat - head = /obj/item/clothing/head/HoS/cowboy - -/datum/outfit/job/head_of_personnel/minutemen - name = "Bridge Officer (Colonial Minutemen)" - - ears = /obj/item/radio/headset/minutemen/alt - uniform = /obj/item/clothing/under/rank/command/minutemen - alt_uniform = null - suit = /obj/item/clothing/suit/toggle/lawyer/minutemen - alt_suit = null - - shoes = /obj/item/clothing/shoes/combat - head = /obj/item/clothing/head/cowboy/sec/minutemen - backpack = /obj/item/storage/backpack - backpack_contents = list(/obj/item/storage/box/ids=1,\ - /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) - -/datum/outfit/job/head_of_personnel/beluga - - uniform = /obj/item/clothing/under/rank/command/head_of_personnel - glasses = /obj/item/clothing/glasses/sunglasses/big - shoes = /obj/item/clothing/shoes/cowboy/fancy - head = /obj/item/clothing/head/beret/hop - backpack_contents = list(/obj/item/storage/box/ids=1,\ - /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) - -/datum/outfit/job/head_of_personnel/frontiersmen - name = "Bridge Officer (frontiersmen)" - - ears = /obj/item/radio/headset/pirate/alt - uniform = /obj/item/clothing/under/rank/security/officer/frontier/officer - shoes = /obj/item/clothing/shoes/cowboy/black - head = /obj/item/clothing/head/beret/sec/frontier/officer - gloves = /obj/item/clothing/gloves/combat - r_pocket = /obj/item/kitchen/knife/combat/survival - glasses = /obj/item/clothing/glasses/sunglasses - suit = /obj/item/clothing/suit/armor/vest/bulletproof/frontier - -/datum/outfit/job/head_of_personnel/pilot/heron - name = "pilot" - - uniform = /obj/item/clothing/under/rank/security/officer/military - suit = /obj/item/clothing/suit/jacket/leather/duster - glasses = /obj/item/clothing/glasses/hud/spacecop - accessory = /obj/item/clothing/accessory/holster - head = /obj/item/clothing/head/beret/command diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index a122b4249b98..52bdd0b505c9 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -52,69 +52,3 @@ implants = list(/obj/item/implant/mindshield) chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos) - -/datum/outfit/job/hos/hardsuit - name = "Head of Security (Hardsuit)" - - mask = /obj/item/clothing/mask/gas/sechailer - suit = /obj/item/clothing/suit/space/hardsuit/security/hos - suit_store = /obj/item/tank/internals/oxygen - backpack_contents = list(/obj/item/melee/baton/loaded=1, /obj/item/gun/energy/e_gun=1, /obj/item/ammo_box/magazine/co9mm=1) //WS edit - free lethals - -/datum/outfit/job/hos/nanotrasen - name = "Head of Security (Nanotrasen)" - - ears = /obj/item/radio/headset/nanotrasen/alt - uniform = /obj/item/clothing/under/rank/security/head_of_security/nt - alt_uniform = null - head = /obj/item/clothing/head/beret/sec/hos - -/datum/outfit/job/hos/frontiersmen - name = "Master At Arms (frontiersmen)" - - ears = /obj/item/radio/headset/syndicate/alt - uniform = /obj/item/clothing/under/rank/security/officer/frontier/officer - head = /obj/item/clothing/head/caphat/frontier - suit = /obj/item/clothing/suit/armor/vest/bulletproof/frontier - shoes = /obj/item/clothing/shoes/cowboy/black - gloves = /obj/item/clothing/gloves/combat - backpack_contents = list(/obj/item/melee/baton/loaded=1) - suit_store = null - -/datum/outfit/job/hos/roumain - jobtype = /datum/job/hos/roumain - name = "Hunter Montagne (Saint-Roumain Militia)" - ears = /obj/item/radio/headset/headset_com - uniform = /obj/item/clothing/under/suit/roumain - alt_uniform = null - shoes = /obj/item/clothing/shoes/workboots/mining - suit = /obj/item/clothing/suit/armor/hos/roumain/montagne - alt_suit = null - dcoat = null - head = /obj/item/clothing/head/HoS/cowboy/montagne - gloves = null - id = /obj/item/card/id/silver - belt = null - glasses = null - suit_store = null - r_pocket = null - l_pocket = null - duffelbag = /obj/item/storage/backpack/cultpack - courierbag = /obj/item/storage/backpack/cultpack - backpack = /obj/item/storage/backpack/cultpack - satchel = /obj/item/storage/backpack/cultpack - box = null - implants = null - chameleon_extras = null - backpack_contents = list( - /obj/item/book/manual/srmlore, - /obj/item/stamp/chap = 1, - /obj/item/melee/classic_baton/telescopic=1 - ) - -/datum/outfit/job/hos/roumain/post_equip(mob/living/carbon/human/H) - H.faction |= list("roumain") - -/datum/job/hos/roumain - outfit = /datum/outfit/job/hos/roumain - mind_traits = null diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index 6f673a06195d..8293c2bd663b 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -24,7 +24,3 @@ if(GARBAGEDAY in SSevents.holidays) l_pocket = /obj/item/gun/ballistic/revolver r_pocket = /obj/item/ammo_box/a357 - -/datum/outfit/job/janitor/maid - name = "Maid" - uniform = /obj/item/clothing/under/rank/civilian/janitor/maid diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm index d0777a8af2f8..b43c00caed3e 100644 --- a/code/modules/jobs/job_types/lawyer.dm +++ b/code/modules/jobs/job_types/lawyer.dm @@ -27,21 +27,3 @@ r_pocket = /obj/item/clothing/accessory/lawyers_badge chameleon_extras = /obj/item/stamp/law - -/datum/outfit/job/lawyer/corporaterepresentative - uniform = /obj/item/clothing/under/suit/navy - suit = /obj/item/clothing/suit/toggle/lawyer/navy - ears = /obj/item/radio/headset/headset_cent - neck = /obj/item/clothing/neck/tie/blue - l_hand = /obj/item/clipboard - r_pocket = /obj/item/pen/fountain - -/datum/outfit/job/lawyer/passenger - uniform = /obj/item/clothing/under/suit/black - suit = null - ears = /obj/item/radio/headset/headset_cent - neck = null - glasses = /obj/item/clothing/glasses/sunglasses/big - l_hand = null - r_pocket = /obj/item/spacecash/bundle/mediumrand - diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index f46b1f243582..f1eb3c028696 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -32,125 +32,3 @@ box = /obj/item/storage/box/survival/medical chameleon_extras = /obj/item/gun/syringe - -/datum/outfit/job/doctor/surgeon - name = "Medical Doctor (Surgeon)" - - uniform = /obj/item/clothing/under/rank/medical/doctor/blue - suit = /obj/item/clothing/suit/apron/surgical - mask = /obj/item/clothing/mask/surgical - suit_store = null - -/datum/outfit/job/doctor/nurse - name = "Medical Doctor (Nurse)" - - head = /obj/item/clothing/head/nursehat - suit = null - suit_store = null - alt_uniform = /obj/item/clothing/under/rank/medical/doctor/nurse - accessory = /obj/item/clothing/accessory/armband/medblue - -/datum/outfit/job/doctor/juniordoctor - name = "Medical Doctor (Junior Doctor)" - - alt_uniform = null - shoes = /obj/item/clothing/shoes/sneakers/blue - suit = null - alt_suit = null - l_hand = null - suit_store = null - - backpack_contents = list(/obj/item/storage/firstaid/medical=1, /obj/item/flashlight/pen=1) - -/datum/outfit/job/doctor/seniordoctor - name = "Medical Doctor (Senior Doctor)" - - uniform = /obj/item/clothing/under/rank/medical/doctor - alt_uniform = null - shoes = /obj/item/clothing/shoes/laceup - suit = /obj/item/clothing/suit/toggle/lawyer/medical - alt_suit = /obj/item/clothing/suit/toggle/labcoat - dcoat = null - l_hand = null - suit_store = null - neck = /obj/item/clothing/neck/tie/blue - - backpack_contents = list(/obj/item/storage/firstaid/medical=1, /obj/item/flashlight/pen=1) - -/datum/outfit/job/doctor/psychiatrist - name = "Medical Doctor (Psychiatrist)" - - uniform = /obj/item/clothing/under/rank/medical/psychiatrist - shoes = /obj/item/clothing/shoes/laceup - suit = null - alt_suit = null - l_hand = null - suit_store = null - - backpack_contents = list(/obj/item/clipboard=1, /obj/item/folder/white=1, /obj/item/taperecorder=1) - -//Shiptest outfits - -/datum/outfit/job/doctor/minutemen - name = "Field Medic (Colonial Minutemen)" - uniform = /obj/item/clothing/under/rank/security/officer/minutemen - accessory = /obj/item/clothing/accessory/armband/medblue - shoes = /obj/item/clothing/shoes/sneakers/white - head = /obj/item/clothing/head/beret/med - suit = null - suit_store = null - -/datum/outfit/job/doctor/pirate - name = "Ship's Doctor (Pirate)" - - uniform = /obj/item/clothing/under/costume/sailor - shoes = /obj/item/clothing/shoes/jackboots - - -/datum/outfit/job/doctor/roumain - name = "Hunter Doctor (Saint-Roumain Militia)" - - uniform = /obj/item/clothing/under/suit/roumain - alt_uniform = null - shoes = /obj/item/clothing/shoes/workboots/mining - suit = /obj/item/clothing/suit/toggle/labcoat/roumain_med - - head = /obj/item/clothing/head/cowboy/sec/roumain/med - mask = /obj/item/clothing/mask/gas/plaguedoctor - gloves = null - backpack = /obj/item/storage/backpack - satchel = /obj/item/storage/backpack/satchel - duffelbag = /obj/item/storage/backpack/duffelbag - courierbag = /obj/item/storage/backpack/messenger - backpack_contents = list(/obj/item/storage/firstaid/roumain=1) - -/datum/outfit/job/doctor/roumain/post_equip(mob/living/carbon/human/H) - H.faction |= list("roumain") - -/datum/outfit/job/doctor/frontiersmen - name = "Surgeon (frontiersmen)" - - uniform = /obj/item/clothing/under/rank/security/officer/frontier - glasses = /obj/item/clothing/glasses/hud/health/prescription - ears = /obj/item/radio/headset/pirate - r_pocket = /obj/item/kitchen/knife/combat/survival - backpack_contents = list(/obj/item/storage/firstaid/medical,) - -/datum/outfit/job/doctor/lp - name = "LP Medical specialist" - - implants = list(/obj/item/implant/mindshield) - ears = /obj/item/radio/headset/nanotrasen/alt/captain - id = /obj/item/card/id/lpmed - belt = /obj/item/pda/medical - gloves = /obj/item/clothing/gloves/color/latex/nitrile - uniform = /obj/item/clothing/under/rank/medical/paramedic/lp - alt_uniform = /obj/item/clothing/under/rank/medical/paramedic/skirt/lp - dcoat = /obj/item/clothing/suit/hooded/wintercoat/medical - shoes = /obj/item/clothing/shoes/sneakers/white - head = /obj/item/clothing/head/beret/med - - satchel = /obj/item/storage/backpack/satchel/med - duffelbag = /obj/item/storage/backpack/duffelbag/med - courierbag = /obj/item/storage/backpack/messenger/med - box = /obj/item/storage/box/survival/medical diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index 1b989c847ba6..35d353ac6b52 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -37,27 +37,3 @@ box = /obj/item/storage/box/survival/medical chameleon_extras = /obj/item/gun/syringe - -/datum/outfit/job/paramedic/emt - name = "Paramedic (Emergency Medical Technician)" - - uniform = /obj/item/clothing/under/rank/medical/paramedic/emt - -//Shiptest outfits - -/datum/outfit/job/paramedic/inteq - name = "IRMG Corpsman (Inteq)" - - uniform = /obj/item/clothing/under/syndicate/inteq/corpsman - head = /obj/item/clothing/head/soft/inteq/corpsman - suit = /obj/item/clothing/suit/armor/inteq/corpsman - shoes = /obj/item/clothing/shoes/combat - belt = /obj/item/storage/belt/medical/webbing/paramedic - ears = /obj/item/radio/headset/headset_medsec/alt - -/datum/outfit/job/paramedic/minutemen - name = "BARD Combat Medic (Minutemen)" - - uniform = /obj/item/clothing/under/rank/medical/paramedic/emt - head = /obj/item/clothing/head/soft/paramedic - suit = /obj/item/clothing/suit/armor/ diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index aca27ae4acbf..4d2d6927d9df 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -16,16 +16,3 @@ id = /obj/item/card/id/prisoner ears = null belt = null - -/datum/outfit/job/prisoner/protectedcustody - name = "Prisoner (Protected Custody)" - - uniform = /obj/item/clothing/under/rank/prisoner/protected_custody - alt_uniform = /obj/item/clothing/under/rank/prisoner/protected_custody - alt_suit = null - shoes = /obj/item/clothing/shoes/sneakers/orange - -/datum/outfit/job/prisoner/shotcaller - name = "Shotcaller" - l_pocket = /obj/item/kitchen/knife/shiv - diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 68380b99fa05..48b810cff6d7 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -27,21 +27,3 @@ backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) chameleon_extras = /obj/item/stamp/qm - -/datum/outfit/job/quartermaster/western - name = "Foreman (Western)" - uniform = /obj/item/clothing/under/rank/cargo/qm - suit = /obj/item/clothing/suit/toggle/hazard - shoes = /obj/item/clothing/shoes/workboots - glasses = /obj/item/clothing/glasses/sunglasses - head = /obj/item/clothing/head/cowboy/sec - -/datum/outfit/job/quartermaster/requisitionsofficer - name = "Requisitions Officer" - suit = /obj/item/clothing/suit/jacket/miljacket - head = /obj/item/clothing/head/soft/black - -/datum/outfit/job/quartermaster/chiefeconomist - name = "Chief Economist" - uniform = /obj/item/clothing/under/suit/tan - neck = /obj/item/clothing/neck/tie/brown diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 7a91f58996a4..dbe1f02e0198 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -45,12 +45,3 @@ courierbag = /obj/item/storage/backpack/messenger/tox chameleon_extras = /obj/item/stamp/rd - -/datum/outfit/job/rd/rig - name = "Research Director (Hardsuit)" - - l_hand = null - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/hardsuit/rd - suit_store = /obj/item/tank/internals/oxygen - internals_slot = ITEM_SLOT_SUITSTORE diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index d842f57edf37..928b1dfc1a5e 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -28,21 +28,3 @@ pda_slot = ITEM_SLOT_LPOCKET -/datum/outfit/job/roboticist/technician/minutemen - name = "Mech Technician (Minutemen)" - - uniform = /obj/item/clothing/under/rank/security/officer/minutemen - shoes = /obj/item/clothing/shoes/combat - ears = /obj/item/radio/headset/minutemen - suit = /obj/item/clothing/suit/toggle/labcoat/science - -/datum/outfit/job/roboticist/heron - name = "Mech Technician (Nanotrasen)" - - uniform = /obj/item/clothing/under/rank/rnd/roboticist - suit = /obj/item/clothing/suit/longcoat/robowhite - ears = /obj/item/radio/headset/nanotrasen - glasses = /obj/item/clothing/glasses/welding - - backpack_contents = list(/obj/item/weldingtool/hugetank) - diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 78f0407d2604..47ba27ce24b8 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -31,9 +31,3 @@ ..() if(prob(0.4)) neck = /obj/item/clothing/neck/tie/horrible - -/datum/outfit/job/scientist/minutemen - name = "Scientist (Minutemen)" - - uniform = /obj/item/clothing/under/rank/security/officer/minutemen - backpack = /obj/item/storage/backpack/security/cmm diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 16a42b26211c..4dbe20d2465b 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -99,242 +99,3 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S chameleon_extras = list(/obj/item/gun/energy/disabler, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet) //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state - -/datum/outfit/job/security/pirate - name = "Buccaneer (Pirate)" - - uniform = /obj/item/clothing/under/syndicate/camo - shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/bandana - suit = /obj/item/clothing/suit/armor/vest - -/datum/outfit/job/security/corporate - name = "Corporate Security" - - uniform = /obj/item/clothing/under/syndicate/combat - shoes = /obj/item/clothing/shoes/jackboots - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - head = /obj/item/clothing/head/beret/sec/officer - suit = /obj/item/clothing/suit/armor/vest/security/officer - -/datum/outfit/job/security/western - name = "Security Detail (Western)" - - uniform = /obj/item/clothing/under/rank/security/officer/blueshirt - alt_uniform = null - shoes = /obj/item/clothing/shoes/jackboots - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - head = /obj/item/clothing/head/cowboy/sec - -/datum/outfit/job/security/minutemen - name = "Minuteman (Colonial Minutemen)" - - head = /obj/item/clothing/head/helmet/bulletproof/minutemen - mask = /obj/item/clothing/mask/gas/sechailer/minutemen - suit = /obj/item/clothing/suit/armor/vest/bulletproof - uniform = /obj/item/clothing/under/rank/security/officer/minutemen - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - - belt = /obj/item/storage/belt/military/minutemen - - l_pocket = /obj/item/flashlight/seclite - r_pocket = /obj/item/tank/internals/emergency_oxygen/double - - backpack = /obj/item/storage/backpack/security/cmm - box = /obj/item/storage/box/survival/engineer/radio - backpack_contents = null - -/datum/outfit/job/security/minutemen/naked - name = "Minuteman (Colonial Minutemen) (Naked)" - - head = null - suit = null - mask = null - shoes = null - gloves = null - ears = null - - belt = null - - l_pocket = null - r_pocket = null - -/datum/outfit/job/security/minutemen/armed - name = "Minuteman (Colonial Minutemen) (Armed)" - - suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen - belt = /obj/item/storage/belt/military/minutemen/p16 - -/datum/outfit/job/security/minutemen/mechpilot - name = "Mech Pilot (Colonial Minutemen)" - - suit = /obj/item/clothing/suit/armor/vest/alt - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - glasses = /obj/item/clothing/glasses/hud/diagnostic - - backpack_contents = list(/obj/item/melee/classic_baton=1, /obj/item/restraints/handcuffs=1) - -/datum/outfit/job/security/inteq - name = "IRMG Enforcer (Inteq)" - - head = /obj/item/clothing/head/helmet/inteq - suit = /obj/item/clothing/suit/armor/vest/alt - belt = /obj/item/storage/belt/security/webbing/inteq - mask = /obj/item/clothing/mask/gas/sechailer/inteq - uniform = /obj/item/clothing/under/syndicate/inteq - dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq - shoes = /obj/item/clothing/shoes/combat - glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq - gloves = /obj/item/clothing/gloves/combat - - backpack = /obj/item/storage/backpack/messenger/inteq - satchel = /obj/item/storage/backpack/messenger/inteq - courierbag = /obj/item/storage/backpack/messenger/inteq - backpack_contents = list(/obj/item/pda/security) - -/datum/outfit/job/security/inteq/beluga - name = "IRMG Enforcer (Beluga)" - - head = /obj/item/clothing/head/beret/sec/inteq - suit = null - belt = null - mask = null - uniform = /obj/item/clothing/under/syndicate/inteq - dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq - shoes = /obj/item/clothing/shoes/sneakers/black - glasses = null - gloves = /obj/item/clothing/gloves/color/evening - - backpack = /obj/item/storage/backpack/messenger/inteq - satchel = /obj/item/storage/backpack/messenger/inteq - courierbag = /obj/item/storage/backpack/messenger/inteq - backpack_contents = list(/obj/item/pda/security) - -/datum/outfit/job/security/inteq/naked - name = "IRMG Enforcer (Inteq) (Naked)" - head = null - suit = null - belt = null - mask = null - gloves = null - -/datum/outfit/job/security/nanotrasen - name = "Security Officer (Nanotrasen)" - - uniform = /obj/item/clothing/under/rank/security/officer/nt - alt_uniform = null - backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) - -/datum/outfit/job/security/nanotrasen/ert - name = "ERT Officer (Nanotrasen)" - - uniform = /obj/item/clothing/under/rank/security/officer/camo - head = null - backpack = /obj/item/storage/backpack/ert/security - belt = /obj/item/storage/belt/military - id = /obj/item/card/id/ert/security - r_pocket = /obj/item/kitchen/knife/combat/survival - backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) - -/datum/outfit/job/security/nanotrasen/ert/engi - name = "ERT Engineering Officer (Nanotrasen)" - - uniform = /obj/item/clothing/under/rank/security/officer/camo - head = null - backpack = /obj/item/storage/backpack/ert/engineer - belt = /obj/item/storage/belt/utility/full/ert - id = /obj/item/card/id/ert/security - r_pocket = /obj/item/kitchen/knife/combat/survival - backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) - accessory = /obj/item/clothing/accessory/armband/engine - glasses = /obj/item/clothing/glasses/hud/diagnostic/sunglasses - -/datum/outfit/job/security/nanotrasen/ert/med - name = "ERT Medical Officer (Nanotrasen)" - - uniform = /obj/item/clothing/under/rank/security/officer/camo - head = /obj/item/clothing/head/beret/med - backpack = /obj/item/storage/backpack/ert/medical - belt = /obj/item/storage/belt/medical/webbing/paramedic - id = /obj/item/card/id/ert/security - r_pocket = /obj/item/kitchen/knife/combat/survival - backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) - accessory = /obj/item/clothing/accessory/armband/med - glasses = /obj/item/clothing/glasses/hud/health/night - -/datum/outfit/job/security/nanotrasen/mech_pilot - name = "Mech Pilot (Nanotrasen)" - - uniform = /obj/item/clothing/under/rank/security/officer/military/eng - head = /obj/item/clothing/head/beret/sec/officer - suit = /obj/item/clothing/suit/armor/vest/bulletproof - backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) - -/datum/outfit/job/security/roumain - name = "Hunter (Saint-Roumain Militia)" - - uniform = /obj/item/clothing/under/suit/roumain - alt_uniform = null - shoes = /obj/item/clothing/shoes/workboots/mining - suit = /obj/item/clothing/suit/armor/roumain - - head = /obj/item/clothing/head/cowboy/sec/roumain - gloves = null - backpack = /obj/item/storage/backpack - satchel = /obj/item/storage/backpack/satchel - duffelbag = /obj/item/storage/backpack/duffelbag - courierbag = /obj/item/storage/backpack/messenger - backpack_contents = null - -/datum/outfit/job/security/roumain/post_equip(mob/living/carbon/human/H) - H.faction |= list("roumain") - -/datum/outfit/job/security/aipirate - name = "Nodesman (Security)" - - uniform = /obj/item/clothing/under/utility - head = /obj/item/clothing/head/soft/black - shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat - - backpack_contents = list(/obj/item/melee/baton/loaded=1) - - implants = list(/obj/item/implant/radio) - - -/datum/outfit/job/security/Frontiersmen - name = "Buccaneer (Frontiersmen)" - - head = /obj/item/clothing/head/beret/sec/frontier - mask = /obj/item/clothing/mask/gas/sechailer/minutemen - suit = null - uniform = /obj/item/clothing/under/rank/security/officer/frontier - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/pirate/alt - - belt = /obj/item/storage/belt/security/webbing - - l_pocket = /obj/item/flashlight/seclite - r_pocket = /obj/item/tank/internals/emergency_oxygen/double - -/datum/outfit/job/security/lp - name = "LP Security Specialist" - - implants = list(/obj/item/implant/mindshield) - ears = /obj/item/radio/headset/nanotrasen/alt/captain - id = /obj/item/card/id/lpsec - belt = /obj/item/pda/security - gloves = /obj/item/clothing/gloves/color/black - uniform = /obj/item/clothing/under/rank/security/head_of_security/nt/skirt/lp - alt_uniform = /obj/item/clothing/under/rank/security/head_of_security/nt/lp - dcoat = /obj/item/clothing/suit/hooded/wintercoat/security - shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/beret/sec - - satchel = /obj/item/storage/backpack/satchel/sec - duffelbag = /obj/item/storage/backpack/duffelbag/sec - courierbag = /obj/item/storage/backpack/messenger/sec - -//Shiptest outfits end diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index cc5ec142932e..2cf67b9bbf70 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -36,103 +36,3 @@ box = /obj/item/storage/box/survival/mining chameleon_extras = /obj/item/gun/energy/kinetic_accelerator - -/datum/outfit/job/miner/classic - uniform = /obj/item/clothing/under/rank/cargo/miner - gloves = /obj/item/clothing/gloves/color/black - shoes = /obj/item/clothing/shoes/workboots - -/datum/outfit/job/miner/equipped - name = "Shaft Miner (Equipment)" - suit = /obj/item/clothing/suit/hooded/explorer - mask = /obj/item/clothing/mask/gas/explorer - glasses = /obj/item/clothing/glasses/meson - suit_store = /obj/item/tank/internals/oxygen - internals_slot = ITEM_SLOT_SUITSTORE - backpack_contents = list( - /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1, - /obj/item/mining_scanner=1, - /obj/item/stack/marker_beacon/ten=1) - belt = /obj/item/gun/energy/kinetic_accelerator - -/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - if(istype(H.wear_suit, /obj/item/clothing/suit/hooded)) - var/obj/item/clothing/suit/hooded/S = H.wear_suit - S.ToggleHood() - -/datum/outfit/job/miner/equipped/hardsuit - name = "Shaft Miner (Equipment + Hardsuit)" - suit = /obj/item/clothing/suit/space/hardsuit/mining - mask = /obj/item/clothing/mask/breath - -//Shiptest Outfits - -/datum/outfit/job/miner/hazard - name = "Asteroid Miner (Hazard)" - uniform = /obj/item/clothing/under/rank/cargo/miner/hazard - alt_uniform = null - alt_suit = /obj/item/clothing/suit/toggle/hazard - -/datum/outfit/job/miner/scientist - name = "Minerologist" - - belt = /obj/item/pda/toxins - uniform = /obj/item/clothing/under/rank/cargo/miner/hazard - alt_uniform = /obj/item/clothing/under/rank/rnd/roboticist - suit = /obj/item/clothing/suit/toggle/labcoat/science - alt_suit = /obj/item/clothing/suit/toggle/hazard - dcoat = /obj/item/clothing/suit/hooded/wintercoat/science - - backpack = /obj/item/storage/backpack/science - satchel = /obj/item/storage/backpack/satchel/tox - courierbag = /obj/item/storage/backpack/messenger/tox - -/datum/outfit/job/miner/old - name = "Shaft Miner (Legacy)" - suit = /obj/item/clothing/suit/hooded/explorer/old - mask = /obj/item/clothing/mask/gas/explorer/old - glasses = /obj/item/clothing/glasses/meson - suit_store = /obj/item/tank/internals/oxygen - gloves = /obj/item/clothing/gloves/explorer/old - uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland/old - internals_slot = ITEM_SLOT_SUITSTORE - backpack_contents = list( - /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1, - /obj/item/mining_scanner=1, - /obj/item/reagent_containers/hypospray/medipen/survival, - /obj/item/reagent_containers/hypospray/medipen/survival,\ - /obj/item/stack/marker_beacon/ten=1) - belt = /obj/item/gun/energy/kinetic_accelerator/old - -/datum/outfit/job/miner/righand - name = "Righand" - backpack_contents = list( - /obj/item/flashlight/seclite=1, - /obj/item/kitchen/knife/combat/survival=1, - /obj/item/mining_scanner=1, - /obj/item/wrench=1 - ) - -/datum/outfit/job/miner/seniorminer - backpack_contents = list( - /obj/item/flashlight/seclite=1, - /obj/item/kitchen/knife/combat/survival=1, - /obj/item/stack/marker_beacon/ten=1, - /obj/item/borg/upgrade/modkit/aoe=1 - ) - -/datum/outfit/job/miner/hazard/minutemen - name = "Industrial Miner (Minutemen)" - gloves = /obj/item/clothing/gloves/color/black - shoes = /obj/item/clothing/shoes/combat - backpack_contents = list( - /obj/item/flashlight/seclite=1, - /obj/item/stack/marker_beacon/ten=1, - /obj/item/weldingtool=1 - ) - diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index a347965d9323..767684db2ec2 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -12,7 +12,7 @@ display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER /datum/outfit/job/engineer - name = "Mechanic" + name = "Engineer" job_icon = "stationengineer" jobtype = /datum/job/engineer @@ -34,116 +34,3 @@ box = /obj/item/storage/box/survival/engineer pda_slot = ITEM_SLOT_LPOCKET backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) - -/datum/outfit/job/engineer/gloved - name = "Mechanic (Gloves)" - gloves = /obj/item/clothing/gloves/color/yellow - -/datum/outfit/job/engineer/gloved/rig - name = "Mechanic (Space suit)" - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/engineer - head = /obj/item/clothing/head/helmet/space/light/engineer - suit_store = /obj/item/tank/internals/oxygen - head = null - internals_slot = ITEM_SLOT_SUITSTORE - -/datum/outfit/job/engineer/nt - name = "Engineer (Nanotrasen)" - uniform = /obj/item/clothing/under/rank/engineering/engineer/nt - head = /obj/item/clothing/head/hardhat - -/datum/outfit/job/engineer/minutemen - name = "Mechanic (Colonial Minutemen)" - - uniform = /obj/item/clothing/under/rank/security/officer/minutemen - accessory = /obj/item/clothing/accessory/armband/engine - head = /obj/item/clothing/head/hardhat/dblue - suit = /obj/item/clothing/suit/hazardvest - -/datum/outfit/job/engineer/inteq - name = "IRMG Artificer (Inteq)" - - uniform = /obj/item/clothing/under/syndicate/inteq/artificer - head = /obj/item/clothing/head/soft/inteq - shoes = /obj/item/clothing/shoes/combat - -/datum/outfit/job/engineer/pirate - name = "Ship's Engineer (Pirate)" - - uniform = /obj/item/clothing/under/costume/sailor - head = /obj/item/clothing/head/bandana - shoes = /obj/item/clothing/shoes/jackboots - -/datum/outfit/job/engineer/hazard - name = "Ship's Engineer (Hazard)" - - uniform = /obj/item/clothing/under/rank/engineering/engineer/hazard - alt_uniform = null - head = /obj/item/clothing/head/hardhat - suit = /obj/item/clothing/suit/toggle/hazard - alt_suit = /obj/item/clothing/suit/hazardvest - -/datum/outfit/job/engineer/independent/ship_engineer - name = "Ship Engineer (Independent)" - - belt = /obj/item/storage/belt/utility/full/engi - uniform = /obj/item/clothing/under/rank/security/officer/military/eng - suit = /obj/item/clothing/suit/toggle/hazard - shoes = /obj/item/clothing/shoes/workboots - - head = null - backpack = /obj/item/storage/backpack - satchel = /obj/item/storage/backpack/satchel - duffelbag = /obj/item/storage/backpack/duffelbag - courierbag = /obj/item/storage/backpack/messenger - l_pocket = /obj/item/radio - r_pocket = /obj/item/analyzer - glasses = /obj/item/clothing/glasses/welding - -/datum/outfit/job/engineer/independent/ship_engineer/salvage - belt = null - r_pocket = null - glasses = null - -/datum/outfit/job/engineer/aipirate - name = "Nodesman (Engineer)" - - uniform = /obj/item/clothing/under/utility - head = /obj/item/clothing/head/soft/black - shoes = /obj/item/clothing/shoes/combat - r_pocket = /obj/item/kitchen/knife/combat/survival - gloves = /obj/item/clothing/gloves/combat - - implants = list(/obj/item/implant/radio) - -/datum/outfit/job/engineer/independent/frontiersmen - name = "Carpenter (frontiersmen)" - - belt = /obj/item/storage/belt/utility/full/engi - uniform = /obj/item/clothing/under/rank/security/officer/frontier - suit = /obj/item/clothing/suit/toggle/industrial - shoes = /obj/item/clothing/shoes/workboots - glasses = /obj/item/clothing/glasses/welding - head = /obj/item/clothing/head/helmet/space/pirate/bandana - - l_pocket = /obj/item/radio - r_pocket = /obj/item/analyzer - -/datum/outfit/job/engineer/lp - name = "LP Engineering Specialist" - - implants = list(/obj/item/implant/mindshield) - ears = /obj/item/radio/headset/nanotrasen/alt/captain - id = /obj/item/card/id/lpengie - belt = /obj/item/pda/engineering - gloves = /obj/item/clothing/gloves/color/yellow - uniform = /obj/item/clothing/under/rank/engineering/engineer/nt/lp - alt_uniform = /obj/item/clothing/under/rank/engineering/engineer/nt/skirt/lp - dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering - shoes = /obj/item/clothing/shoes/jackboots - head = /obj/item/clothing/head/beret/eng - - satchel = /obj/item/storage/backpack/satchel/eng - duffelbag = /obj/item/storage/backpack/duffelbag/engineering - courierbag = /obj/item/storage/backpack/messenger/engi diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index ac0a3986634d..2a3bd87d5ba2 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -30,10 +30,3 @@ duffelbag = /obj/item/storage/backpack/duffelbag/med courierbag = /obj/item/storage/backpack/messenger/viro box = /obj/item/storage/box/survival/medical - -/datum/outfit/job/virologist/pathologist - name = "Virologist (Pathologist)" - - alt_uniform = null - shoes = /obj/item/clothing/shoes/laceup - neck = /obj/item/clothing/neck/tie/green diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index 7be829dbe619..4feaed96faf1 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -48,64 +48,3 @@ implants = list(/obj/item/implant/mindshield) chameleon_extras = /obj/item/gun/ballistic/shotgun/automatic/combat/compact - -/datum/outfit/job/warden/chiefmastersergeant - name = "Chief Master Sergeant" - r_pocket = /obj/item/gun/ballistic/automatic/pistol/solgov - l_pocket = /obj/item/ammo_box/magazine/pistol556mm - chameleon_extras = null - -/datum/outfit/job/warden/minutemen - name = "Field Commander (Colonial Minutemen)" - - glasses = /obj/item/clothing/glasses/sunglasses - ears = /obj/item/radio/headset/minutemen/alt - uniform = /obj/item/clothing/under/rank/security/officer/minutemen - accessory = /obj/item/clothing/accessory/armband - head = /obj/item/clothing/head/cowboy/sec/minutemen - suit = /obj/item/clothing/suit/armor/vest/bulletproof - belt = /obj/item/storage/belt/military/minutemen - shoes = /obj/item/clothing/shoes/combat - - l_pocket = /obj/item/flashlight/seclite - r_pocket = /obj/item/tank/internals/emergency_oxygen/double - - box = /obj/item/storage/box/survival/engineer/radio - backpack = /obj/item/storage/backpack - backpack_contents = null - -/datum/outfit/job/warden/minutemen/armed - name = "Field Commander (Colonial Minutemen) (Armed)" - - suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen - 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) - -/datum/outfit/job/warden/inteq - name = "Master At Arms (Inteq)" - - ears = /obj/item/radio/headset/inteq/alt - uniform = /obj/item/clothing/under/syndicate/inteq - head = /obj/item/clothing/head/beret/sec/hos/inteq - glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq - mask = /obj/item/clothing/mask/gas/sechailer/inteq - belt = /obj/item/storage/belt/military/assault - suit = /obj/item/clothing/suit/armor/vest/alt - dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - suit_store = null - - courierbag = /obj/item/storage/backpack/messenger/inteq - backpack_contents = list(/obj/item/melee/classic_baton=1, /obj/item/pda/warden) - -/datum/outfit/job/warden/nanotrasen - name = "Warden (Nanotrasen)" - - ears = /obj/item/radio/headset/nanotrasen/alt - head = /obj/item/clothing/head/warden/red - uniform = /obj/item/clothing/under/rank/security/warden/nt - suit = /obj/item/clothing/suit/armor/vest/security/warden/alt/nt - alt_uniform = null - alt_suit = null diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index caf465140231..d43d744e2800 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -90,7 +90,7 @@ icon_state = "combatbear" icon_living = "combatbear" icon_dead = "combatbear_dead" - faction = list("frontiersman") + faction = list(FACTION_ANTAG_FRONTIERSMEN) butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1, /obj/item/bear_armor = 1) melee_damage_lower = 25 melee_damage_upper = 35 @@ -141,7 +141,7 @@ icon_living = "butterbear" icon_dead = "butterbear_dead" desc = "I can't believe its not a bear!" - faction = list("neutral", "frontiersmen") + faction = list("neutral", FACTION_ANTAG_FRONTIERSMEN) obj_damage = 11 melee_damage_lower = 1 melee_damage_upper = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/frontiersman.dm b/code/modules/mob/living/simple_animal/hostile/frontiersman.dm index feeecdb5b43d..1a71ed52da78 100644 --- a/code/modules/mob/living/simple_animal/hostile/frontiersman.dm +++ b/code/modules/mob/living/simple_animal/hostile/frontiersman.dm @@ -23,7 +23,7 @@ /obj/item/kitchen/knife) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 - faction = list("frontiersman") + faction = list(FACTION_ANTAG_FRONTIERSMEN) status_flags = CANPUSH del_on_death = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 72b6b25187ba..b98d14128e12 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -40,7 +40,7 @@ loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 - faction = list(ROLE_SYNDICATE) + faction = list(FACTION_ANTAG_SYNDICATE) check_friendly_fire = 1 status_flags = CANPUSH del_on_death = 1 diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index aee25733cdbe2505eea7a7e72440a5e039cc05c8..e55252e102df1a662d6e79fe8f94cea0f6670b8b 100644 GIT binary patch literal 19255 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 literal 17933 zcmb`v2Ut_V_AeSlL_tBNNml_8X#!FNX(A;eT|qjC^b(|n9za2*hy>}qNbkKSh|)U< zp@-ffKxhGyyv;f1U+($tyWhL--h51E&+I)jYi6%mv*!1k@KsY?`340O1qcMX0akgT z4FZwOU4*MwfE>TSh!_xv?2-5Dw{9;iT`gQ}o!x99P9TtHa*F;hC+4Tur8`W`tMs_P zZ2wWCuBTn6*H1S#s~z7A;P_xQZj;T^R=$Zpl^%CmxZB@!&E-RY@=NR=<*2`B>$wA_ zJ4iJQVpe0UNMAd7R=rd}fZLjRZ|oH$x2J8X$UL8U3LhO2o?ANtRl_jnnDrgaEcJ%1 ztZ%!?JT3fTFpKx6;6E#P?tHtI>r2wdI!}$601TEj)A3H ztEs#^06ZGZX&ytut>?J2Z;p1i{pC>_Us~`QRJ*tG{DUn!W8DDuA z6mK9mi%n(Q7v~%9B)u72`5z9_7k{wH?J2xDqz(;Q`TJdLki2^MImvD%x9C`GMIgI| zLGFji%w#U+_#{?k*J}k%^_Im?8;V_aw0j+16{|X`u7TN>+?^jkxBC3*Ub+9rLz(hs zTVo4R__#}z_&6_lKGz}cM$MUAjJV^ph<>FkYu?EEYnMxv_U!EU^TOjP0$m_KPClle zPz5b(qBM)1suY>G?hmkSO6qh_#Bnj>B57Twv>!%4KXc^yZZ;v4?*5G@BVWra+0GL3^-LT(keS@SKp zZla@dZayw@G3&lFrs{FSHX?)4wy{;zcOgikEqvd5uyMb^<~yUtY`gjQ&EL+SP_*`I z3&lKRiU}@kFM@`1N_4(GaFQ^6n?)Nk)jj=PgZW9lB}WmjaD{8zJB~MRzF*~%8(7Nd zS`4Ap-j*+Wd&SpycHmInT@|TmlXCl^Q~`57vnOR zQ&i?1>m@B~YW!6Wh}jbPo%*1t7UmT;FEWm}$1Wrss}C#IzWbkAdAKGQqmo5-^K=iZ ziS6}y5j)WgtTy3*Z zde}LX`6Zykxu9djuKH)@7@Hx#XH@_l)n9t);LuUKn<`qbHNQ@Ox*NjuJ?V<=-B~RJ zQdX=oVP-2NAOQpYjYy4DW)qQ$?(?w{#7+ztiQNOADy^1V?PeP;)$T)&!El)(PrmE` z2}^L9Ygh(klX@dYa}HM-cdQmqw8I%ld;9I;3Qf1t9utcX zF>4#lXzFLM?FeI<6$m;ZLr4R`>g(_1)Ovoyr(ttrAntOitiyQOCmg)W7q{Pn?Xa?X z&<87OIIS}!zV1Qp9|#_Fz@F5`%8H4MOiwqs_g0~|(1Kn4SXlpf>`KE2V~ZSVVQ3QP z`e6svl~jy&ySQYeD6^@r9Q^O`w8@5#lOPx_&Tqp&uxnli63xf0fi?(n|4Cf&rGYe~ z;f{lyG5s)8lib-E$sSpml_r_M)d7=P)WNf?XcKb#4quebW0y0hWx;?X-0B0V!&I1}4~{d|Mj z3RtJIOylD0Cw8c-9gaVrx_i|FSu~zCv=b-lQwP*D(+$;x?;{GZ&h?BW!`iVbHDVbY zQ%qd8C>>gilr8CChZ)61Hn&fnQZtM77J0i?3$Xh{=r-3I5I!*A^im1I?S2087jcX) z1{X)`x2;-nbe<+s^Am^kx!*Q6MF7TO+cQqcbC^G|$qbsp7|pPy>#KMDvUwY}xOxFM z28NJt7nHn7MDp```w(jQj7O`x4G5t{MQb4%p$=E|-dm2kMz+5ZtuswIFZhKoS|)DP zQWwrGL=8=mF+~0?^*<}CK0m{x6bFSVZxDQ}JHn^>iD{~*w$ob-PoS;1)AQ+TWBWfl zXH#D+)-)L)#O6=-1QbHIeQ9QD%nyn`(tMlR$J)1ZveYgoh9Tmdr(nZ7JI^>uzF$1KIYme zbOo>hDCzO3a z`$8#Y#rLbsHK4$ty?nFH;Wax*FNnnEg>msnR#~pQawXyhn;!`Z#$~S!TKOyFkS%{) zKfV|kPVk}?GF{AZa^sWUmit`l2@2`BH-&T?G%DctG+A9245{|sl)|QC=>}@Qc{CF~7#i&a37k&a*-izlmFyNa=;p847mjLp zc#u-_z+Pdo?d?k!7pgv~PF%1FcyOZU$0yhfAJM&#G@BKLV>=*g12xcpDtp|zIONMS z9C2~M)K-DT%XgUp&6gCw>@$9OG)CKkY&TR2;RP0r_|yI zL7DWRua-h0^nJZ3eFgvb?&e0cCXrz?{r>Aslm^-<#)CEWwsvRSB^)%?^{u40j2}bq5 zOom)!B_7Y^|0^#{5O3A$%N%zXJlsU1#AO1b1TMP-KbC*E7W(5{n3Fj!U1bL)`)2>M z|8C$*^`~v#gz?^2A`6wS7CHRVdvx{##HSX9i6$SZ+h0wURV;siUAql`+{N{(^}E zHv2I*(W$v{4KTiW2=n`-Ax%u4{(har4IJ!j`RjvPA9hD{g*w4pA=%4zWWdySU0ltn z-`o+f&C|)hmEF+@YA5@B99I2~rFZp|%d6wGI8lFi35NN|oi5o1rusgb6Ep%L&AiFw|yD?oV=6?Nd>;p3m#(OiyoZ9E>bHC9s9?%l0k-H~3v2X&(nmc}1+b8U)TBx=(^J`o=FOJ)*qhLU}~{8>J)aGoLr2Xs`z&59}$Bz*EqHS@+D%o zvbrEAA{See|J$E$YHKP;v;DIq3&NshDcc@~y=!uM+M*xR=y#^qZ;c=E!IRv5*cW*~ zxhXU2^9ois&^6KFhV*1Ua+A$DJG86)skN_9JTQTQuD%S}B>Q*q0@7pY@cL5vU0YY}_9Od)vHYYmX~IrTOj~FX;r3d`9@U-;6%o z-sA#HSrZC5d8`-GIKgR1q*{yyfp75G#wrby7>kF^@u87~S>d{FXfvS%yZCeD^vo1G zTNmM5LVATovVL_p8!Izg#kYGN-H^-#_4WDRK?FT15lc)%cT=r?0s|C(;q$2)CTJ2uURuK~LudJtfBL@zh8Vz6! zxUU}axxcX**sLsuU3ft1&o3i{lXNqS0kQyY^$f=g)AK)y@rM8 zA7@o{Lh&cLKK>1|#8Fw@*7IId9{zm@^OTf1K{~Ry7A~vy6-A_)&?ma}Q>RG1Z?c^! zuTJ&f(mUN5XIIsB^CdQ(kqWk=5f%trG@_Yvz5MHMPOycwKpf}xY_rsEM2nvv+hc_* z$5EVq_U&ZwY*eVO3f#n~USKyOT^5ZkW@K2a&ZN`bUu1`2%Hy`45lj%WQ_QsqXYo%4cI)9xx#WEm!W0v3hj9GR%lbTrTv(z42 zduaga=l~f(DjOQRY!0tgAqg&@IM+w}VgecFZQ+b5?@h{s1fQGu%UV=Dp#8ev?zrM} znxMj86N3g;**Xo`BVKUmw=^ihUEV4yMDIkpl&*NN*2*ZI;jE+*!MCS4u4|QPs{lJ9 z=k77{!H>++LB{A!h;^1iZ7AW=wU@(OwE_|Kj!DQnll|^I1O>VB;Er^!xoZ;lOR;+= zjrR-}q%^@}6lT7^T;G5?`i)X|e+S%{{VV{P&N*?f!Jnh%-G6%=wLCb8V0Rk&EL)z2 zp+l=W85iggiwB}GgDMMQX~mb8296kHlW+oUv}O>7DoQ{>bC^qa8)iYO>l0)Rj}Y+N zJ3;D(l>J5gt+Bp~pAFxI2uPairIc>=k3>`S+#;Iawdvz(+wwme=WE|1Lv6lrfL(%C z4`HD)gqfil5BUx#qQpbKaic|g{Uk%dg?QdUYXq5IaIyh9=tNPvC)zI2U+2d#L| zqk2kulB99VpJw~iwOq)pn)2}*Np`(PGo5AJXN5ho<52NpOpyA|1^dc7xzFbhJ*3WZ zCl(4$UK)jPcHu4WmSBx#3G1n8I|Ingo&cj&S4M5`Rnq@`h5z>wYHBL*9PopoUMag3 z@;-M$r!vi|EQ}ww6b)-yMdqMxufSB%6>w8c&F_z4Lz#-Y7g|5{10$K&M8&_%PC%p4 z<*{itr@$jR%b zrPUJl9F_o~dY?*i4`1>Gi!PRK9=3!z%gYC@4`zJK(MV$x@$3GWs9^lJ>O zcX@&Ogf*ElV)VS#^e=_C#+9%W!|xJ3bt=-4`IWaSQebU`8EcV+mb=uBE2kpHvJ55l zp6A8_ACKobjMdU)jCFEeeVt7ewtSfqbn^$$@vOzT>4w)pc;emYi<0N2N4+cNZnH~T);L>wcV2neu%*Cie1eTo8bSn$6Dq{xRKF!cr1HFm=bG)fy(Ny z@6D7_?oHHCW@0<;W>1ouQ_=rI{;I9si@UEVrcb^h*e{P|@CTo63M#+tIU4t!mhR&k zojBaOF#YK-vzdIH%1WaLl1cwW^rE#wS(XV>z!5n8LLj{W&z*#!RY=Ujqdt zCF#JC;zAq7kukLqoqmBI=OhXQch?%xOra?bY89%Fg0)}zIod2$q z|Esj~`}5!CAi3|i3BP^x3uN^H029n4c`Ex_`+REcpdj+tpbIS_A~JuPCR(0&N(s6e ze(m#bt6xE6ITaPduXS}3$tdaLoh2N8G(8qiEQ+pF8|#`_sp#1e#kZor5YUvPJ6kAFD0Sy5qf;Eq?|=e=%EIC2o8jWy&k_zA^m}JXyBESFD{cY;E<3qth8A z=RKvTpYH%Je9ma_M#uN~jjlnDtkiUd{7BGn?bem;H~A(>t|=GcsNl6Wyqt>Y<8%KhIQ1n^=2}t+#>(@35 zf4&ZVNb2r+Df(d{Io_fL=+W3dYDG3XP_zRn4anS`oX};d0t%4(zzEN7!j{50V~~$c zwU>mmzjIn1;hb8@^Soz9bm_nQ?ssXR&vlCpxO!!s=K^BRgMxxS;lk+oD@M~L_%)q# zy)Jw#nn`yJ2@xG(dE_-6E*QF!SS-eXkK$A=REfF~NxX4~Xmvd?Zq<}(s^?}JCJ1@;SL%yWSW@Z73kk3& zV}+c1cTD!SQKf08hnw7B;Rm~zFLD%}-)Tp@vN>R@(T^g7`+QMkDh2${1!O**q#eJg zb>#oJiAshwJC+aup=hW^f|0xToBt$}ZM$&HRggkcHV3|;Z-gGq!-(~s1pLHVDjrh3 z_Cdcc>LG^3C+2b9PZ;qEMNME%{-z=H%C*smD zZm=!mJxTLW$mti4mOW;(DI*VG!c3Y#9Jg`f>j<0v8k% zg!Yb5SY%vH3JSWE;=Pe?H4_~2T$$L|%3l4pD1s)!8pG7-A^;u!9x6>pac=B)M=jY6-k`2~u$Y*bYt~i3RN&wLJzo|Y7B-rrmbCU~{`Y5l-2SrIe&E6A z*@4vxT~~Y(M68nb;%{XosgD;99%B?2*1<1!4(xIM{()Dcvk4#S6nT{yxDL?gD4)EzfcdeV_oa)^}KIZh{ z^HFcdes_2_aIv8;Cbul;Q2kxN4;yOA%eTH~*;8dV`Uo#KoE1eS;e0Q~ZZn78AYEmZ z7fd#YeU`L-7XdVa*uk-ZdJH%>J}#*@JF!Ann?Q`{cQlFhsTONLI zG8-2icPTJY0BH1?fj$qPFRlWgO!NNe)Y$OHz~d34jBnl1_S7op6fc56eXl1@5L&?} zA!cuPH2u@w|7MX}3;cj^hT&$Zou9x8zIpQ|rk$EG6VR}Ajb>zVQ4wFUepTm7e_YOO zONMg}@9Pd|gx};@>$+|Qm+ff58-q7)saM9_S_(t^M=}&X7rAjNne&e^T&SYJOq~h* zU`f9@3%j7vPti)0seR~ueVloWg;ZS%uw1$yK9tAu8|G+s?#%066%K8Eb3Ul#aU*((yLf+59U)ob!IeXbY78)5C7-XeSxgG;?taMucATnN{y@$t zT`?NphLXYoAOyS7?=`YZCyo?p+|Iti#O155M3R#^w#)V?nm zH=Fb%3*jYaQRZ=*9@G-^qR}Zbk|rThnBp;r1=ZRfuMf}G%u5T`*Aek=&bZoWxy@$- z3XsasM8@Bn&H|CPd=NmaX@Alo1s2tBuCq?7?`!9;bOew{U;!a!!2KQsThsN10IVT? zu0tDc55I^{SEFUGd0yKRvQq06GE*7hbXA7;eArAvy_En_gF2-9gVf(AzHjGFIQ9X{ zGnh%5fh2ac9HP5QCP*q#$0@uM?JD$$kHHo#AW&Y-ovG&}S3oT!fV_7dy&6+1BZg)* zA4*mQ0=EOIRs`#6LQDVX4}t=oi1Bw>+Q_Go-1v9n{U7P{E9e7~%h?Y(vSwk$!i&4} zW@s47QP_KFVAws5cV1J6v=53P$P|lcgbDNzHjayyzcGnETDK^B-vyV8TO2clh^F}+ zCCqwn7RRs8G`Np^#z{$7YPxnv8p z`1=*$vCg6s;8C~CZYA0^pov&-n1$+u)p}HF;F2;*whIZB8gHuKdEEZ;mQ#vXV*Ntn z?}Niqm@&KGK@|P7=INKW*hKAqboKVWwz9HH@fsZ+Ehs6WD!PgWqdh8`}krEGx|FEKDNN}0fN?($b+{F#T&$bOID&u}v$V-o7{n`CJzm9F0ANTlr8 zs;Pgz*6QIXJPyUgbK(RzpE|B9&mMsrRub(k+6xN{Nqg{Hl><-S{ke+YvX+hJls@16 z4bSe1=2nI8G-1`HvArUJ%c#|^u;-6>9Kz>4+Hj}myzekJkgQJch z5e+Ac62!i?@iV)!qo#7jo>?DdpV{%uFy$L#qk1L)Qai`L~vG~|_sHBVz@@)CPg>FyuQw;L~vKJcGuIj%C# zkU3_M%8WO8^+u{O%g*NFsFgf$9&F==zcn^9`$>IN;VZHyd1C%e0~`C}8~!>GdcMYc zp^!(JAX55q0hzrvQ3E$TpIeK7hqTXgZ5tw(d;PbD%upO${VCSXkLMo=LbST}mqNLs zwI>gR`FP`$@VOt))l=@{EG?NV_v#=D&bR5A+G3NQ-z&vVyF}wFH*2S9DZ0%46<8c* zjrfr#&w+6Ngr=MgS4j({cOw7@n=^s5pq|CnuB<0&i*L=UuV^cja4>k!?_jUvbZbQ8 zaGpCYPd|))XkF~Jo*ru5_oEDnYN(N26~xr>Gluo-kOk1?i;0FN9Mu9d5YU!k#cD;* zu2L?Z_m1KRjT$?HRHO9sT&l5aUR^6rYnryUJaP9(#8}sbvp@DFlKC+9yC=OmK4&{5 zbjK$7XQY>q33PWp9{E=0Rqn+&98lR{ci8T@A5x><;^NNg{KzQeV2KsasVIql;bd6$ zV6f-A`iz#(w0M+`QbdIpzw>iiv%7b9kYC;vfKRztP{wTIqAhI4o2G^CE4Eg!L!WyP z8(tI_;tPi*;>-VtQ{4PA)qbSzo%7ZY%ha=cOi&#TKV1=x9i;mlZS_|iY{TWD;;x{L(9Htp|X&j9PLzKe-d*$ z_>E{+z#OL1&%3z%Hl~U58Jk6Zs(%4!ToUJ33#pBRS)dwl)J_(7oj=u)fAO&XNE3#N z8s8E$JLsDlmV?->XVp6I+{*a#=T9Z&hpo}7r||$UTUd5DV^BxT9hzUd&B)B0P+ec2 zgRM-8c_Z;eve?f2>zK*k-{TLT+e5bO`s>!&SRbXbq>Q~g_-#-)1vt<@Z15Z-mX7$w zgFNl9A?i)dy`?p0fQ~LMB1RdVeGxKEZdQdK%uP7@xrUc(eQG}b%&FFyYATiWUghH~ zyUCu(`M%^f;`b!^e%?gSnUd_YS9fa0ya^i&XUbUe>t3VYgd~lzl{Bw>yf5*yAp?e+ z_}M3keM9;I@@S7bW&(EZNNZNi!~X_ZcfTp8>Mx-Yf5(!J>dj~?JU&B>(7JfzCm#Ue zk2Ugm?QYdH>_v31ZLe&YiNc;A`S#7mwA=Ol$5{ZMQ7!ZU?=1YFY)o|FwrFqRvOO0V zk3BUQh|TU!k>Uh9x=KFnLL<2L<5xW}iw|JdOQx->D=Z#xfD(a%wM#t=lb1@*B=!ZJ z&yu%R*e_X*Uri`b`E^*t!$0~r>ztYLnE1rXCP~lNh%RG%!9GpzlU5w^M8?x&s!m

Yz7L{)Gx=39d9_^FdU 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 diff --git a/shiptest.dme b/shiptest.dme index 86c3e10672b8..543b4322394d 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1948,11 +1948,8 @@ #include "code\modules\clothing\masks\miscellaneous.dm" #include "code\modules\clothing\neck\_neck.dm" #include "code\modules\clothing\outfits\event.dm" -#include "code\modules\clothing\outfits\gezena.dm" #include "code\modules\clothing\outfits\plasmaman.dm" -#include "code\modules\clothing\outfits\solgov.dm" #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" @@ -1961,6 +1958,15 @@ #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\outfits\factions\frontiersmen.dm" +#include "code\modules\clothing\outfits\factions\gezena.dm" +#include "code\modules\clothing\outfits\factions\independent.dm" +#include "code\modules\clothing\outfits\factions\inteq.dm" +#include "code\modules\clothing\outfits\factions\minutemen.dm" +#include "code\modules\clothing\outfits\factions\nanotrasen.dm" +#include "code\modules\clothing\outfits\factions\roumain.dm" +#include "code\modules\clothing\outfits\factions\solgov.dm" +#include "code\modules\clothing\outfits\factions\syndicate.dm" #include "code\modules\clothing\shoes\_shoes.dm" #include "code\modules\clothing\shoes\bananashoes.dm" #include "code\modules\clothing\shoes\colour.dm" From 4cec2f261fdbb3b3c33cb7f5ab951c4009b7c93c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 17 Jan 2024 14:23:04 -0600 Subject: [PATCH 02/68] Automatic changelog generation for PR #2628 [ci skip] --- html/changelogs/AutoChangeLog-pr-2628.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2628.yml diff --git a/html/changelogs/AutoChangeLog-pr-2628.yml b/html/changelogs/AutoChangeLog-pr-2628.yml new file mode 100644 index 000000000000..c810d8e71ed1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2628.yml @@ -0,0 +1,9 @@ +author: MeeMOfCourse, retlaw34 +changes: + - {tweak: 'Repathed almost every faction outfit, and they now apply factions upon + being used.'} + - {tweak: SecHud icons have been redone. Sprites by retlaw34.} + - {tweak: Descriptions of multiple clothing items.} + - {rscadd: SecHuds now identify factions. Somewhat.} + - {rscadd: More desperate groups of Frontiersmen have been spotted roaming the frontier.} +delete-after: true From 8e509996d6aecc35b00727e3bdffcc61711bdde2 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 18 Jan 2024 00:50:35 +0000 Subject: [PATCH 03/68] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2628.yml | 9 --------- html/changelogs/archive/2024-01.yml | 8 ++++++++ 2 files changed, 8 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2628.yml diff --git a/html/changelogs/AutoChangeLog-pr-2628.yml b/html/changelogs/AutoChangeLog-pr-2628.yml deleted file mode 100644 index c810d8e71ed1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2628.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: MeeMOfCourse, retlaw34 -changes: - - {tweak: 'Repathed almost every faction outfit, and they now apply factions upon - being used.'} - - {tweak: SecHud icons have been redone. Sprites by retlaw34.} - - {tweak: Descriptions of multiple clothing items.} - - {rscadd: SecHuds now identify factions. Somewhat.} - - {rscadd: More desperate groups of Frontiersmen have been spotted roaming the frontier.} -delete-after: true diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml index de6904e7e829..ff71392c0ea0 100644 --- a/html/changelogs/archive/2024-01.yml +++ b/html/changelogs/archive/2024-01.yml @@ -47,3 +47,11 @@ tmtmtl30: - rscdel: Holodeck code has been removed. - bugfix: Outposts should end up erroneously spaced less frequently. +2024-01-18: + MeeMOfCourse, retlaw34: + - tweak: Repathed almost every faction outfit, and they now apply factions upon + being used. + - tweak: SecHud icons have been redone. Sprites by retlaw34. + - tweak: Descriptions of multiple clothing items. + - rscadd: SecHuds now identify factions. Somewhat. + - rscadd: More desperate groups of Frontiersmen have been spotted roaming the frontier. From e0676a5700743f244a3dc774695437dc85b3c4c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 18 Jan 2024 09:59:13 -0600 Subject: [PATCH 04/68] Automatic TGS DMAPI Update (#2644) This pull request updates the TGS DMAPI to the latest version. Please note any breaking or unimplemented changes before merging. Co-authored-by: github-actions --- code/__DEFINES/tgs.dm | 5 +++- code/modules/tgs/v5/api.dm | 54 ++++++++++++++++++++++---------------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index c561a64ebf58..fdfec5e8ca08 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "7.0.1" +#define TGS_DMAPI_VERSION "7.0.2" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -426,6 +426,7 @@ /** * Send a message to connected chats. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. @@ -435,6 +436,7 @@ /** * Send a private message to a specific user. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * user: The [/datum/tgs_chat_user] to PM. @@ -444,6 +446,7 @@ /** * Send a message to connected chats that are flagged as game-related in TGS. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 25d49b3e3bdb..a5c064a8eaf1 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -8,8 +8,12 @@ var/reboot_mode = TGS_REBOOT_MODE_NORMAL + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call var/list/intercepted_message_queue + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call + var/list/offline_message_queue + var/list/custom_commands var/list/test_merges @@ -194,17 +198,7 @@ var/datum/tgs_chat_channel/channel = I ids += channel.id - message2 = UpgradeDeprecatedChatMessage(message2) - - if (!length(channels)) - return - - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids - if(intercepted_message_queue) - intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatMessageRaw(message2, ids) /datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message2, admin_only) var/list/channels = list() @@ -213,26 +207,42 @@ if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id + SendChatMessageRaw(message2, channels) + +/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) + SendChatMessageRaw(message2, list(user.channel.id)) + +/datum/tgs_api/v5/proc/SendChatMessageRaw(datum/tgs_message_content/message2, list/channel_ids) message2 = UpgradeDeprecatedChatMessage(message2) - if (!length(channels)) + if (!length(channel_ids)) return var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channel_ids if(intercepted_message_queue) intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + return -/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) - message2 = UpgradeDeprecatedChatMessage(message2) - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id) - if(intercepted_message_queue) - intercepted_message_queue += list(data) + if(offline_message_queue) + offline_message_queue += list(data) + return + + if(detached) + offline_message_queue = list(data) + + WaitForReattach(FALSE) + + data = offline_message_queue + offline_message_queue = null + + for(var/queued_message in data) + SendChatDataRaw(queued_message) else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatDataRaw(data) + +/datum/tgs_api/v5/proc/SendChatDataRaw(list/data) + Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) /datum/tgs_api/v5/ChatChannelInfo() RequireInitialBridgeResponse() From 97ac42636a9d77be448382d26336aeb2c896ef74 Mon Sep 17 00:00:00 2001 From: Theos Date: Thu, 18 Jan 2024 11:00:54 -0500 Subject: [PATCH 05/68] Tend wounds surgery variants no longer attempt to heal the wrong type of damage (#2646) ## About The Pull Request ![image](https://github.com/shiptest-ss13/Shiptest/assets/24857008/2e267cd6-7b43-4900-8a20-09e3b8879d30) ![image](https://github.com/shiptest-ss13/Shiptest/assets/24857008/75dad61e-84ac-4bd3-b285-a37e43a49d41) ## Why It's Good For The Game Prevents a tend wounds heal cycle from targeting a limb that won't benefit from its flat healing bonus. ## Changelog :cl: tweak: tend brute/burns can no longer attempt to (very ineffectively) heal the other damage type /:cl: Signed-off-by: Theos --- code/modules/surgery/healing.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm index 956768c09aa4..8d3eecb3ead3 100644 --- a/code/modules/surgery/healing.dm +++ b/code/modules/surgery/healing.dm @@ -65,11 +65,11 @@ var/urhealedamt_burn = burnhealing if(missinghpbonus) if(target.stat != DEAD) - urhealedamt_brute += round((target.getBruteLoss()/ missinghpbonus),0.1) - urhealedamt_burn += round((target.getFireLoss()/ missinghpbonus),0.1) + urhealedamt_brute += brutehealing ? round((target.getBruteLoss()/ missinghpbonus),0.1) : 0 + urhealedamt_burn += burnhealing ? round((target.getFireLoss()/ missinghpbonus),0.1) : 0 else //less healing bonus for the dead since they're expected to have lots of damage to begin with (to make TW into defib not TOO simple) - urhealedamt_brute += round((target.getBruteLoss()/ (missinghpbonus*5)),0.1) - urhealedamt_burn += round((target.getFireLoss()/ (missinghpbonus*5)),0.1) + urhealedamt_brute += brutehealing ? round((target.getBruteLoss()/ (missinghpbonus*5)),0.1) : 0 + urhealedamt_burn += burnhealing ? round((target.getFireLoss()/ (missinghpbonus*5)),0.1) : 0 if(!get_location_accessible(target, target_zone)) urhealedamt_brute *= 0.55 urhealedamt_burn *= 0.55 From 2918caf0ceedcfcf9bf3d05943d0b1a6aea3736f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 18 Jan 2024 10:15:29 -0600 Subject: [PATCH 06/68] Automatic changelog generation for PR #2646 [ci skip] --- html/changelogs/AutoChangeLog-pr-2646.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2646.yml diff --git a/html/changelogs/AutoChangeLog-pr-2646.yml b/html/changelogs/AutoChangeLog-pr-2646.yml new file mode 100644 index 000000000000..82e356149677 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2646.yml @@ -0,0 +1,5 @@ +author: SomeguyManperson +changes: + - {tweak: tend brute/burns can no longer attempt to (very ineffectively) heal the + other damage type} +delete-after: true From 3693e631086046749d5cc86c82f99a0bdd9b8f93 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 19 Jan 2024 00:52:14 +0000 Subject: [PATCH 07/68] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2646.yml | 5 ----- html/changelogs/archive/2024-01.yml | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2646.yml diff --git a/html/changelogs/AutoChangeLog-pr-2646.yml b/html/changelogs/AutoChangeLog-pr-2646.yml deleted file mode 100644 index 82e356149677..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2646.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: SomeguyManperson -changes: - - {tweak: tend brute/burns can no longer attempt to (very ineffectively) heal the - other damage type} -delete-after: true diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml index ff71392c0ea0..59fdbb9e32b1 100644 --- a/html/changelogs/archive/2024-01.yml +++ b/html/changelogs/archive/2024-01.yml @@ -55,3 +55,7 @@ - tweak: Descriptions of multiple clothing items. - rscadd: SecHuds now identify factions. Somewhat. - rscadd: More desperate groups of Frontiersmen have been spotted roaming the frontier. +2024-01-19: + SomeguyManperson: + - tweak: tend brute/burns can no longer attempt to (very ineffectively) heal the + other damage type From 1e4201aba066df063a491211e282ce2b00fe8c20 Mon Sep 17 00:00:00 2001 From: Theos Date: Mon, 22 Jan 2024 15:05:22 -0500 Subject: [PATCH 08/68] Fixes 2647 (#2648) ## About The Pull Request Arcane machine tried to smelt up to 10 sheets of material but the alloy smelting proc didn't get a smelting number passed so it just spawned 1 sheet and called it a day. ## Why It's Good For The Game fixes #2647 ## Changelog :cl: fix: ore smelter no longer obliterates materials when smelting alloys /:cl: Signed-off-by: Theos --- code/modules/mining/machine_processing.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 10f43aad4580..bbc84ec7ee68 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -253,7 +253,7 @@ var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) materials.use_materials(alloy.materials, amount) - generate_mineral(alloy.build_path) + generate_mineral(alloy.build_path, amount) /obj/machinery/mineral/processing_unit/proc/can_smelt(datum/design/D) if(D.make_reagents.len) @@ -271,8 +271,8 @@ return build_amount -/obj/machinery/mineral/processing_unit/proc/generate_mineral(P) - var/O = new P(src) +/obj/machinery/mineral/processing_unit/proc/generate_mineral(P, amount) + var/O = new P(src, amount) unload_mineral(O) /obj/machinery/mineral/processing_unit/on_deconstruction() From 929b143d3f313dcfe9947a939f0f878da83976d0 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 22 Jan 2024 14:19:51 -0600 Subject: [PATCH 09/68] Automatic changelog generation for PR #2648 [ci skip] --- html/changelogs/AutoChangeLog-pr-2648.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2648.yml diff --git a/html/changelogs/AutoChangeLog-pr-2648.yml b/html/changelogs/AutoChangeLog-pr-2648.yml new file mode 100644 index 000000000000..3349aabe7c9c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2648.yml @@ -0,0 +1,4 @@ +author: SomeguyManperson +changes: + - {bugfix: ore smelter no longer obliterates materials when smelting alloys} +delete-after: true From 808526d1a274dc52e4c5e407cccb5d536eccd181 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 23 Jan 2024 00:52:20 +0000 Subject: [PATCH 10/68] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2648.yml | 4 ---- html/changelogs/archive/2024-01.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2648.yml diff --git a/html/changelogs/AutoChangeLog-pr-2648.yml b/html/changelogs/AutoChangeLog-pr-2648.yml deleted file mode 100644 index 3349aabe7c9c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2648.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: SomeguyManperson -changes: - - {bugfix: ore smelter no longer obliterates materials when smelting alloys} -delete-after: true diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml index 59fdbb9e32b1..71fd490bb992 100644 --- a/html/changelogs/archive/2024-01.yml +++ b/html/changelogs/archive/2024-01.yml @@ -59,3 +59,6 @@ SomeguyManperson: - tweak: tend brute/burns can no longer attempt to (very ineffectively) heal the other damage type +2024-01-23: + SomeguyManperson: + - bugfix: ore smelter no longer obliterates materials when smelting alloys From 4b6c1abe16e10fe5d3be97021182bab2217a1641 Mon Sep 17 00:00:00 2001 From: Apogee-dev <60533805+Apogee-dev@users.noreply.github.com> Date: Wed, 24 Jan 2024 19:44:11 -0800 Subject: [PATCH 11/68] Updates syndicate ship prefixes (#2665) ## About The Pull Request Changes the prefixes on Syndicate ships to reflect subfaction more strongly. - 2nd Battlegroup uses NGRV (New Gorlex Republic Vessel) - Hardliners use ISV (They don't have a unique registration because they aren't an organized group and aren't officially part of Cybersun. this puts them in a similar position to non-Frontiersman pirates, using ISV while not being normal independents.) - Cybersun uses CSSV (CyberSun Space Vessel) - SUNS uses SUNS (SUNS, lol) - ACLF still uses SSV - The Lugol, as GEC's only ship and an adminspawn ship, uses XSV (Experimental Space Vessel) ## Why It's Good For The Game the syndicate kind of Isn't anymore and pushing faction distinctions is good, especially between the gorlex splinters ## Changelog :cl: tweak: Changed prefixes on Syndicate ships to reflect subfaction /:cl: --- _maps/configs/syndicate_aegis.json | 2 +- _maps/configs/syndicate_cybersun_kansatsu.json | 2 +- _maps/configs/syndicate_gorlex_hyena.json | 2 +- _maps/configs/syndicate_gorlex_komodo.json | 2 +- _maps/configs/syndicate_litieguai.json | 2 +- _maps/configs/syndicate_lugol.json | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/_maps/configs/syndicate_aegis.json b/_maps/configs/syndicate_aegis.json index 9dc307f7f091..6863c4e11279 100644 --- a/_maps/configs/syndicate_aegis.json +++ b/_maps/configs/syndicate_aegis.json @@ -1,5 +1,5 @@ { - "prefix": "SSV", + "prefix": "SUNS", "map_name": "Aegis-class Long Term Care Ship", "map_short_name": "Aegis-class", "map_path": "_maps/shuttles/syndicate/syndicate_aegis.dmm", diff --git a/_maps/configs/syndicate_cybersun_kansatsu.json b/_maps/configs/syndicate_cybersun_kansatsu.json index fbde6dc608d6..a9c9fcb94349 100644 --- a/_maps/configs/syndicate_cybersun_kansatsu.json +++ b/_maps/configs/syndicate_cybersun_kansatsu.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", - "prefix": "SSV", + "prefix": "CSSV", "namelists": [ "CYBERSUN", "SPACE", diff --git a/_maps/configs/syndicate_gorlex_hyena.json b/_maps/configs/syndicate_gorlex_hyena.json index 4e9086139275..51b046d114b7 100644 --- a/_maps/configs/syndicate_gorlex_hyena.json +++ b/_maps/configs/syndicate_gorlex_hyena.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", - "prefix": "SSV", + "prefix": "NGRV", "namelists": [ "GORLEX", "NATURAL_AGGRESSIVE", diff --git a/_maps/configs/syndicate_gorlex_komodo.json b/_maps/configs/syndicate_gorlex_komodo.json index 5692eaf44a14..595b61b079d9 100644 --- a/_maps/configs/syndicate_gorlex_komodo.json +++ b/_maps/configs/syndicate_gorlex_komodo.json @@ -1,5 +1,5 @@ { - "prefix": "SSV", + "prefix": "ISV", "namelists": [ "GORLEX", "NATURAL_AGGRESSIVE", diff --git a/_maps/configs/syndicate_litieguai.json b/_maps/configs/syndicate_litieguai.json index 887828e28176..685a53187422 100644 --- a/_maps/configs/syndicate_litieguai.json +++ b/_maps/configs/syndicate_litieguai.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Li Tieguai-class Rescue Ship", - "prefix": "SSV", + "prefix": "CSSV", "map_short_name": "Li Tieguai-class", "description": "A small, nimble, and exceptionally well-built medical response vessel, the Li Tieguai is a recent addition to Cybersun’s fleet, forming a critical component of their Frontier stabilization program. Li Tieguais come equipped with high-end medical equipment, including a selection of Cybersun augments and prosthetics, as well as weaponry and armor sufficient to protect its personnel in the often-dangerous Frontier sectors, so that they can offer premium healthcare (at premium prices) in even the most dangerous of scenarios.", "tags": [ diff --git a/_maps/configs/syndicate_lugol.json b/_maps/configs/syndicate_lugol.json index 26599d93a8ee..673d9be16ff5 100644 --- a/_maps/configs/syndicate_lugol.json +++ b/_maps/configs/syndicate_lugol.json @@ -1,6 +1,6 @@ { "map_name": "Lugol-class GEC Engineering Project", - "prefix": "SEV", + "prefix": "XSV", "map_short_name": "Lugol-class", "description": "The Lugol is effectively an enormous Galactic Engineers Concordat research barge, used as a test bed for refinements to power systems, new technologies, and so on. As it offers freedom from the usual constraints of working aboard vessels belonging to other Syndicate factions, Lugols are especially popular among the GEC’s more radical members. Accordingly, they have a reputation for either accomplishing the impossible or generating the equivalent of a new star when they inevitably melt down. Lugols are generally only found on the Frontier, where the collateral damage from potential accidents can be kept to a minimum and secrecy, when needed, can be better maintained.", "tags": [ @@ -14,7 +14,7 @@ ], "map_path": "_maps/shuttles/syndicate/syndicate_gec_lugol.dmm", "map_id": "gec_lugol", - "limit": 2, + "limit": 1, "job_slots": { "Project Overseer": { "outfit": "/datum/outfit/job/syndicate/ce/gec", From 73362102eb1900409702861556bfa5289e28d6f8 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 24 Jan 2024 21:58:19 -0600 Subject: [PATCH 12/68] Automatic changelog generation for PR #2665 [ci skip] --- html/changelogs/AutoChangeLog-pr-2665.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2665.yml diff --git a/html/changelogs/AutoChangeLog-pr-2665.yml b/html/changelogs/AutoChangeLog-pr-2665.yml new file mode 100644 index 000000000000..a025323feb59 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2665.yml @@ -0,0 +1,4 @@ +author: Apogee-dev +changes: + - {tweak: Changed prefixes on Syndicate ships to reflect subfaction} +delete-after: true From 236cbef3127759829bb5debad678e8ce15f994c2 Mon Sep 17 00:00:00 2001 From: Theos Date: Wed, 24 Jan 2024 23:10:07 -0500 Subject: [PATCH 13/68] fixes crusher loot for icemoon ruin dragon not dropping a key (#2650) ## About The Pull Request adds the key to the crusher loot list since the default loot list is overridden by that ## Why It's Good For The Game Dragon lair could be locked off without admin intervention if the dragon is killed with a crusher ## Changelog :cl: fix: you can no longer lock yourself out of the icemoon dragon lair by killing the dragon with a crusher /:cl: --- _maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm index 4c8ccc99dfcb..f089a09b8fba 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm @@ -127,7 +127,8 @@ "iT" = ( /obj/structure/stone_tile/slab, /mob/living/simple_animal/hostile/megafauna/dragon/icemoon{ - loot = list(/obj/structure/closet/crate/necropolis/dragon,/obj/item/keycard/gatedrop/drakelair) + loot = list(/obj/structure/closet/crate/necropolis/dragon,/obj/item/keycard/gatedrop/drakelair); + crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher,/obj/item/keycard/gatedrop/drakelair) }, /turf/open/indestructible/boss, /area/ruin) From 709a12c14b45d875f89dfef89bb363b9222c9485 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 24 Jan 2024 22:23:47 -0600 Subject: [PATCH 14/68] Automatic changelog generation for PR #2650 [ci skip] --- html/changelogs/AutoChangeLog-pr-2650.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2650.yml diff --git a/html/changelogs/AutoChangeLog-pr-2650.yml b/html/changelogs/AutoChangeLog-pr-2650.yml new file mode 100644 index 000000000000..be0a14f8ee04 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2650.yml @@ -0,0 +1,5 @@ +author: SomeguyManperson +changes: + - {bugfix: you can no longer lock yourself out of the icemoon dragon lair by killing + the dragon with a crusher} +delete-after: true From 286941e4258ecf39b4bc2c6562f5f6cc9a147299 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 26 Jan 2024 00:47:37 +0000 Subject: [PATCH 15/68] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2650.yml | 5 ----- html/changelogs/AutoChangeLog-pr-2665.yml | 4 ---- html/changelogs/archive/2024-01.yml | 6 ++++++ 3 files changed, 6 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2650.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2665.yml diff --git a/html/changelogs/AutoChangeLog-pr-2650.yml b/html/changelogs/AutoChangeLog-pr-2650.yml deleted file mode 100644 index be0a14f8ee04..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2650.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: SomeguyManperson -changes: - - {bugfix: you can no longer lock yourself out of the icemoon dragon lair by killing - the dragon with a crusher} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2665.yml b/html/changelogs/AutoChangeLog-pr-2665.yml deleted file mode 100644 index a025323feb59..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2665.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Apogee-dev -changes: - - {tweak: Changed prefixes on Syndicate ships to reflect subfaction} -delete-after: true diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml index 71fd490bb992..9ee67f626bd5 100644 --- a/html/changelogs/archive/2024-01.yml +++ b/html/changelogs/archive/2024-01.yml @@ -62,3 +62,9 @@ 2024-01-23: SomeguyManperson: - bugfix: ore smelter no longer obliterates materials when smelting alloys +2024-01-26: + Apogee-dev: + - tweak: Changed prefixes on Syndicate ships to reflect subfaction + SomeguyManperson: + - bugfix: you can no longer lock yourself out of the icemoon dragon lair by killing + the dragon with a crusher From 7096415fac7fe84112a68a77918fda48492d0396 Mon Sep 17 00:00:00 2001 From: Skies-Of-Blue <86762641+Skies-Of-Blue@users.noreply.github.com> Date: Fri, 26 Jan 2024 21:59:28 -0800 Subject: [PATCH 16/68] Murders The Devil from The Bible in the form of a bee (#2672) ## About The Pull Request Removes chem bees from the jungle and beach spawn pools, replacing them with normal bees. ## Why It's Good For The Game Walking off of a ship onto one of the relatively "peaceful" planets, only to be loaded up with admin chemicals was a pretty awful experience. We inherited these little guys from Voidcrew, honestly that should be enough reason to remove them. ## Changelog :cl: balance: planetary chem bees have been replaced with the garden variety /:cl: --- code/datums/mapgen/planetary/BeachGenerator.dm | 2 +- code/datums/mapgen/planetary/JungleGenerator.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/mapgen/planetary/BeachGenerator.dm b/code/datums/mapgen/planetary/BeachGenerator.dm index ca1d70b929fa..7999d76f3a11 100644 --- a/code/datums/mapgen/planetary/BeachGenerator.dm +++ b/code/datums/mapgen/planetary/BeachGenerator.dm @@ -119,7 +119,7 @@ /mob/living/simple_animal/butterfly = 4, /mob/living/simple_animal/hostile/retaliate/poison/snake = 5, - /mob/living/simple_animal/hostile/poison/bees/toxin = 3, + /mob/living/simple_animal/hostile/poison/bees = 3, ) mob_spawn_chance = 2 feature_spawn_chance = 0.1 diff --git a/code/datums/mapgen/planetary/JungleGenerator.dm b/code/datums/mapgen/planetary/JungleGenerator.dm index dd5635d4841f..45ae4a7120cc 100644 --- a/code/datums/mapgen/planetary/JungleGenerator.dm +++ b/code/datums/mapgen/planetary/JungleGenerator.dm @@ -228,7 +228,7 @@ ) mob_spawn_chance = 1 mob_spawn_list = list( - /mob/living/simple_animal/hostile/poison/bees/toxin = 1, + /mob/living/simple_animal/hostile/poison/bees = 1, /mob/living/simple_animal/hostile/mushroom = 1, /mob/living/simple_animal/pet/dog/corgi/capybara = 1 ) From 7eb3bdfa7643c681a466ed0c0f042f062a5e09c3 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 27 Jan 2024 00:13:07 -0600 Subject: [PATCH 17/68] Automatic changelog generation for PR #2672 [ci skip] --- html/changelogs/AutoChangeLog-pr-2672.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2672.yml diff --git a/html/changelogs/AutoChangeLog-pr-2672.yml b/html/changelogs/AutoChangeLog-pr-2672.yml new file mode 100644 index 000000000000..88151cbed8ce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2672.yml @@ -0,0 +1,4 @@ +author: Skies-Of-Blue +changes: + - {balance: planetary chem bees have been replaced with the garden variety} +delete-after: true From 36aefeb9fcc036f171de1cf5b7aeb72984378f02 Mon Sep 17 00:00:00 2001 From: Fest1v3 <154591738+Fest1v3@users.noreply.github.com> Date: Sat, 27 Jan 2024 02:40:41 -0700 Subject: [PATCH 18/68] Vox Sprite Update (#2668) ## About The Pull Request Updates a few Vox sprites, mostly backpacks. Adds a proper icon for the tail hold action. ## Why It's Good For The Game We love vox in this house ## Changelog :cl: imageadd: Added vox sprites & a tailhold icon. /:cl: --- .../living/carbon/human/species_types/vox.dm | 1 + icons/mob/actions.dmi | Bin 11110 -> 11861 bytes icons/mob/species/vox/onmob_back_vox.dmi | Bin 45978 -> 48271 bytes icons/mob/species/vox/onmob_belt_vox.dmi | Bin 8617 -> 11722 bytes 4 files changed, 1 insertion(+) diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index e1a0107bc0ad..1f3a00e8641b 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -118,6 +118,7 @@ /datum/action/innate/tail_hold name = "Tail Hold" desc = "Store an item in your tail's grip." + button_icon_state = "tail_hold" var/obj/item/held_item var/mutable_appearance/held_item_overlay diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index ea2c5c556db0d3e5dccda0403f27787cfda11486..bc600528d82591e2fda135a58196bcd1c7af4a12 100644 GIT binary patch literal 11861 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 literal 11110 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 literal 45978 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 R5cn0KuWPJRal`)EzX1_IqlEwf From 1050716d724129a252a2195c8e5be0374ecb8d23 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 27 Jan 2024 03:54:33 -0600 Subject: [PATCH 19/68] Automatic changelog generation for PR #2668 [ci skip] --- html/changelogs/AutoChangeLog-pr-2668.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2668.yml diff --git a/html/changelogs/AutoChangeLog-pr-2668.yml b/html/changelogs/AutoChangeLog-pr-2668.yml new file mode 100644 index 000000000000..8b719168401e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2668.yml @@ -0,0 +1,4 @@ +author: Fest1v3 +changes: + - {imageadd: Added vox sprites & a tailhold icon.} +delete-after: true From 7d193fc3d239aec5091e98b664b2e2076b8a5d14 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 28 Jan 2024 00:50:30 +0000 Subject: [PATCH 20/68] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2668.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2672.yml | 4 ---- html/changelogs/archive/2024-01.yml | 5 +++++ 3 files changed, 5 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2668.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2672.yml diff --git a/html/changelogs/AutoChangeLog-pr-2668.yml b/html/changelogs/AutoChangeLog-pr-2668.yml deleted file mode 100644 index 8b719168401e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2668.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Fest1v3 -changes: - - {imageadd: Added vox sprites & a tailhold icon.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2672.yml b/html/changelogs/AutoChangeLog-pr-2672.yml deleted file mode 100644 index 88151cbed8ce..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2672.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Skies-Of-Blue -changes: - - {balance: planetary chem bees have been replaced with the garden variety} -delete-after: true diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml index 9ee67f626bd5..bdd50c40a640 100644 --- a/html/changelogs/archive/2024-01.yml +++ b/html/changelogs/archive/2024-01.yml @@ -68,3 +68,8 @@ SomeguyManperson: - bugfix: you can no longer lock yourself out of the icemoon dragon lair by killing the dragon with a crusher +2024-01-28: + Fest1v3: + - imageadd: Added vox sprites & a tailhold icon. + Skies-Of-Blue: + - balance: planetary chem bees have been replaced with the garden variety From dada3c6c1f417089ba3012d01eb1b23824fa2bbf Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Mon, 29 Jan 2024 15:21:54 -0600 Subject: [PATCH 21/68] Syndi suit balance (#2600) ## About The Pull Request Reverts an unintended buff to some ruins with syndicate hard suits and makes them the lesser hard suit again Cleans up some redundant code Fixes the description for the Ramzi Clique hardsuit Kills the owl suit cause he looked at my funny (and also cruft) ## Why It's Good For The Game Blood red hard suit should mostly be reserved for its faction. ## Changelog :cl: balance: reverts some blood red hard suits back to ramzi /:cl: --- .../RandomRuins/JungleRuins/jungle_demon.dmm | 2 +- .../whitesands_surface_starfurycrash.dmm | 2 +- _maps/RandomRuins/SpaceRuins/onehalf.dmm | 2 +- code/modules/clothing/spacesuits/hardsuit.dm | 39 ++----------------- 4 files changed, 7 insertions(+), 38 deletions(-) diff --git a/_maps/RandomRuins/JungleRuins/jungle_demon.dmm b/_maps/RandomRuins/JungleRuins/jungle_demon.dmm index adbb037af38c..523c618d2244 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_demon.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_demon.dmm @@ -515,7 +515,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/suit_storage_unit/inherit, /obj/item/tank/internals/oxygen/red, -/obj/item/clothing/suit/space/hardsuit/syndi, +/obj/item/clothing/suit/space/hardsuit/syndi/ramzi, /obj/item/clothing/mask/gas/syndicate, /turf/open/floor/plasteel/dark, /area/ruin/powered) diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_starfurycrash.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_starfurycrash.dmm index 00a0e830f8c2..bc8616028058 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_starfurycrash.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_starfurycrash.dmm @@ -637,7 +637,7 @@ /area/overmap_encounter/planetoid/cave/explored) "KT" = ( /obj/structure/safe/floor, -/obj/item/clothing/suit/space/hardsuit/syndi, +/obj/item/clothing/suit/space/hardsuit/syndi/ramzi, /obj/item/documents/syndicate, /turf/open/floor/plating{ icon_state = "panelscorched"; diff --git a/_maps/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index d613f4bcf8f8..ed19285b586e 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -920,7 +920,7 @@ /obj/structure/safe/floor, /obj/item/tank/internals/oxygen/red, /obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/suit/space/hardsuit/syndi, +/obj/item/clothing/suit/space/hardsuit/syndi/ramzi, /obj/item/reagent_containers/food/drinks/bottle/rum, /obj/item/reagent_containers/food/drinks/bottle/rum, /obj/item/folder/syndicate/mining, diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index aa153b233c46..517a51982e7f 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -423,8 +423,8 @@ //Ramzi Syndie suit /obj/item/clothing/head/helmet/space/hardsuit/syndi/ramzi name = "rusted-red hardsuit helmet" - desc = "A beat-up standardized dual-mode helmet derived from more advanced special operations helmets, its red rusted into a dirty brown. It is in EVA mode. Manufactured by Gorlex Marauders." - alt_desc = "A beat-up standardized dual-mode helmet derived from more advanced special operations helmets, its red rusted into a dirty brown. It is in combat mode. Manufactured by Gorlex Marauders." + desc = "A beat-up standardized dual-mode helmet derived from more advanced special operations helmets, its red rusted into a dirty brown. It is in EVA mode. Manufactured by Ramzi Clique." + alt_desc = "A beat-up standardized dual-mode helmet derived from more advanced special operations helmets, its red rusted into a dirty brown. It is in combat mode. Manufactured by Ramzi Clique." icon_state = "hardsuit1-ramzi" item_state = "hardsuit1-ramzi" hardsuit_type = "ramzi" @@ -432,8 +432,8 @@ /obj/item/clothing/suit/space/hardsuit/syndi/ramzi name = "rusted-red hardsuit" - desc = "A beat-up standardized dual-mode hardsuit derived from more advanced special operations hardsuits, its red rusted into a dirty brown. It is in EVA mode. Manufactured by Gorlex Marauders." - alt_desc = "A beat-up standardized dual-mode hardsuit derived from more advanced special operations hardsuits, its red rusted into a dirty brown. It is in combat mode. Manufactured by Gorlex Marauders." + desc = "A beat-up standardized dual-mode hardsuit derived from more advanced special operations hardsuits, its red rusted into a dirty brown. It is in EVA mode. Manufactured by Ramzi Clique." + alt_desc = "A beat-up standardized dual-mode hardsuit derived from more advanced special operations hardsuits, its red rusted into a dirty brown. It is in combat mode. Manufactured by Ramzi Clique." icon_state = "hardsuit1-ramzi" item_state = "hardsuit1-ramzi" hardsuit_type = "ramzi" @@ -452,7 +452,6 @@ icon_state = "hardsuit1-sbg" item_state = "hardsuit1-sbg" hardsuit_type = "sbg" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) /obj/item/clothing/suit/space/hardsuit/syndi/sbg name = "beige-red hardsuit" @@ -464,10 +463,6 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/sbg lightweight = 1 jetpack = null - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) - combat_slowdown = 0 - jetpack = null - //Hardliner Syndie suit /obj/item/clothing/head/helmet/space/hardsuit/syndi/hl @@ -477,7 +472,6 @@ icon_state = "hardsuit1-hl" item_state = "hardsuit1-hl" hardsuit_type = "hl" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) /obj/item/clothing/suit/space/hardsuit/syndi/hl name = "white-red hardsuit" @@ -489,9 +483,6 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/hl lightweight = 1 jetpack = null - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) - combat_slowdown = 0 - jetpack = null //Elite Syndie suit @@ -530,28 +521,6 @@ /obj/item/clothing/suit/space/hardsuit/syndi/elite/debug helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug -//The Owl Hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/syndi/owl - name = "owl hardsuit helmet" - desc = "A dual-mode advanced helmet designed for any crime-fighting situation. It is in travel mode." - alt_desc = "A dual-mode advanced helmet designed for any crime-fighting situation. It is in combat mode." - icon_state = "hardsuit0-owl" - item_state = "s_helmet" - hardsuit_type = "owl" - visor_flags_inv = 0 - visor_flags = 0 - on = FALSE - full_retraction = TRUE - -/obj/item/clothing/suit/space/hardsuit/syndi/owl - name = "owl hardsuit" - desc = "A dual-mode advanced hardsuit designed for any crime-fighting situation. It is in travel mode." - alt_desc = "A dual-mode advanced hardsuit designed for any crime-fighting situation. It is in combat mode." - icon_state = "hardsuit1-owl" - item_state = "s_suit" - hardsuit_type = "owl" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl - //Cybersun Hardsuit /obj/item/clothing/suit/space/hardsuit/syndi/cybersun name = "neutron-star combat hardsuit" From 449dfa806b08e2b3b64595a31de50547d8110d60 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 29 Jan 2024 15:35:17 -0600 Subject: [PATCH 22/68] Automatic changelog generation for PR #2600 [ci skip] --- html/changelogs/AutoChangeLog-pr-2600.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2600.yml diff --git a/html/changelogs/AutoChangeLog-pr-2600.yml b/html/changelogs/AutoChangeLog-pr-2600.yml new file mode 100644 index 000000000000..87f8cfbab00c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2600.yml @@ -0,0 +1,4 @@ +author: FalloutFalcon +changes: + - {balance: reverts some blood red hard suits back to ramzi} +delete-after: true From 86d819395fefac976aff483de486b6b6f489ffee Mon Sep 17 00:00:00 2001 From: goober3 <118859017+goober3@users.noreply.github.com> Date: Mon, 29 Jan 2024 21:34:39 +0000 Subject: [PATCH 23/68] Mudskipper Tweaks (#2355) ## About The Pull Request some little fixes. ## Why It's Good For The Game yeah it's some little tweaks and fixes. ## Changelog :cl: tweak: Added more light switches to the Mudskipper. fix: The Mudskipper bridge now has proper access applied. /:cl: Co-authored-by: spockye <79304582+spockye@users.noreply.github.com> Co-authored-by: meem <75212565+meemofcourse@users.noreply.github.com> --- _maps/shuttles/independent/independent_mudskipper.dmm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/_maps/shuttles/independent/independent_mudskipper.dmm b/_maps/shuttles/independent/independent_mudskipper.dmm index 4c67eadac91e..e3ff8985e3d1 100644 --- a/_maps/shuttles/independent/independent_mudskipper.dmm +++ b/_maps/shuttles/independent/independent_mudskipper.dmm @@ -171,6 +171,10 @@ dir = 8 }, /obj/effect/turf_decal/corner/transparent/neutral, +/obj/machinery/light_switch{ + pixel_y = 23; + pixel_x = -3 + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "dQ" = ( @@ -970,7 +974,7 @@ "uW" = ( /obj/machinery/door/airlock/grunge{ name = "Bridge"; - req_one_access_txt = "7" + req_one_access_txt = "20" }, /obj/effect/turf_decal/industrial/warning, /obj/effect/turf_decal/industrial/warning{ @@ -1058,6 +1062,11 @@ /obj/structure/dresser, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 22; + pixel_y = -6 + }, /turf/open/floor/wood/walnut{ icon_state = "wood-broken7" }, From 2ba968553b2df6db7dcf3062a626044e6fa0a61b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 29 Jan 2024 15:52:17 -0600 Subject: [PATCH 24/68] Automatic changelog generation for PR #2355 [ci skip] --- html/changelogs/AutoChangeLog-pr-2355.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2355.yml diff --git a/html/changelogs/AutoChangeLog-pr-2355.yml b/html/changelogs/AutoChangeLog-pr-2355.yml new file mode 100644 index 000000000000..2b8155004757 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2355.yml @@ -0,0 +1,5 @@ +author: goober3 +changes: + - {tweak: Added more light switches to the Mudskipper.} + - {bugfix: The Mudskipper bridge now has proper access applied.} +delete-after: true From d41cb1f70da3f416bae6ed687c992aecc761a3dc Mon Sep 17 00:00:00 2001 From: Moon <64121399+MoonTheBird@users.noreply.github.com> Date: Mon, 29 Jan 2024 15:27:31 -0700 Subject: [PATCH 25/68] Poster Printer (#2557) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request Adds poster printers. Currently unmapped, so there's no way to get them at the moment, and I recommend one gets added to the outpost. HOW TO USE: get a sheet of paper and a printer ![image](https://github.com/shiptest-ss13/Shiptest/assets/64121399/44bf348e-3971-4bba-8f90-8166ca893ece) put the paper in the printer ![image](https://github.com/shiptest-ss13/Shiptest/assets/64121399/7b157f7d-35f0-4d7b-a3aa-1a66c734c75b) click on the printer and select the kind of poster you want to print ![image](https://github.com/shiptest-ss13/Shiptest/assets/64121399/ecab5df3-9536-464b-a0db-b3dc4ae49320) print the poster, and then remove it ![image](https://github.com/shiptest-ss13/Shiptest/assets/64121399/b59950ab-a68a-4fd2-921b-f0baeeb0f0f0) tada! free* poster! ![image](https://github.com/shiptest-ss13/Shiptest/assets/64121399/ba917741-2b3a-494a-923f-bee6aec7ea5a) *actually uses some toner with each use, as well as a sheet of paper ## Why It's Good For The Game A lot of people were complaining about how there's no easy way to get posters at the moment, so I made a convenient printing device. ## Changelog 🆑 add: Added a poster printer. Please map this later, I didn't want to mess with mapping for now so /🆑 --------- Signed-off-by: Moon <64121399+MoonTheBird@users.noreply.github.com> Signed-off-by: meem <75212565+meemofcourse@users.noreply.github.com> Co-authored-by: meem <75212565+meemofcourse@users.noreply.github.com> --- .../circuitboards/machine_circuitboards.dm | 9 + code/game/objects/structures/printer.dm | 185 ++++++++++++++++++ code/modules/library/lib_machines.dm | 7 - icons/obj/printer.dmi | Bin 0 -> 1003 bytes shiptest.dme | 1 + .../packages/tgui/interfaces/PosterPrinter.js | 126 ++++++++++++ 6 files changed, 321 insertions(+), 7 deletions(-) create mode 100644 code/game/objects/structures/printer.dm create mode 100644 icons/obj/printer.dmi create mode 100644 tgui/packages/tgui/interfaces/PosterPrinter.js diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index faa366f893b0..7056c7a38d97 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -1496,6 +1496,15 @@ /obj/item/stock_parts/capacitor = 2 ) +/obj/item/circuitboard/machine/printer + name = "Poster Printer (Machine Board)" + build_path = /obj/machinery/printer + req_components = list( + /obj/item/stock_parts/scanning_module = 2, + /obj/item/stock_parts/micro_laser = 1, + /obj/item/stock_parts/manipulator = 2, + ) + /obj/item/circuitboard/machine/coffeemaker name = "Modello 3 Coffeemaker" build_path = /obj/machinery/coffeemaker diff --git a/code/game/objects/structures/printer.dm b/code/game/objects/structures/printer.dm new file mode 100644 index 000000000000..c4c1abea9cf7 --- /dev/null +++ b/code/game/objects/structures/printer.dm @@ -0,0 +1,185 @@ +/obj/machinery/printer + name = "poster printer" + desc = "Used to print out various posters using toner cartridges." + icon = 'icons/obj/printer.dmi' + icon_state = "printer" + density = TRUE + power_channel = AREA_USAGE_EQUIP + max_integrity = 100 + pass_flags = PASSTABLE + circuit = /obj/item/circuitboard/machine/printer + var/busy = FALSE + var/datum/weakref/loaded_item_ref + var/datum/weakref/printed_poster + var/obj/item/toner/toner_cartridge + var/poster_type + +/obj/machinery/printer/Initialize() + . = ..() + toner_cartridge = new(src) + +/obj/machinery/printer/update_overlays() + . = ..() + if(panel_open) + . += mutable_appearance(icon, "printer_panel") + var/obj/item/loaded = loaded_item_ref?.resolve() + var/obj/item/poster = printed_poster?.resolve() + if(loaded) + . += mutable_appearance(icon, "contain_paper") + if(poster) + . += mutable_appearance(icon, "contain_poster") + +/obj/machinery/printer/screwdriver_act(mob/living/user, obj/item/screwdriver) + . = ..() + default_deconstruction_screwdriver(user, icon_state, icon_state, screwdriver) + update_icon() + return TRUE + +/obj/machinery/printer/Destroy() + QDEL_NULL(toner_cartridge) + QDEL_NULL(loaded_item_ref) + QDEL_NULL(printed_poster) + return ..() + +/obj/machinery/printer/attackby(obj/item/item, mob/user, params) + if(panel_open) + if(is_wire_tool(item)) + wires.interact(user) + return + if(can_load_item(item)) + if(!loaded_item_ref?.resolve()) + loaded_item_ref = WEAKREF(item) + item.forceMove(src) + update_icon() + return + else if(istype(item, /obj/item/toner)) + if(toner_cartridge) + to_chat(user, "[src] already has a toner cartridge inserted. Remove that one first.") + return + item.forceMove(src) + toner_cartridge = item + to_chat(user, "You insert [item] into [src].") + else return ..() + +/obj/machinery/printer/proc/can_load_item(obj/item/item) + if(busy) + return FALSE //no loading the printer if there's already a print job happening! + if(!istype(item, /obj/item/paper)) + return FALSE + if(!istype(item, /obj/item/stack)) + return TRUE + var/obj/item/stack/stack_item = item + return stack_item.amount == 1 + +/obj/machinery/printer/ui_data(mob/user) + var/list/data = list() + data["has_paper"] = !!loaded_item_ref?.resolve() + data["has_poster"] = !!printed_poster?.resolve() + + if(toner_cartridge) + data["has_toner"] = TRUE + data["current_toner"] = toner_cartridge.charges + data["max_toner"] = toner_cartridge.max_charges + data["has_enough_toner"] = has_enough_toner() + else + data["has_toner"] = FALSE + data["has_enough_toner"] = FALSE + + return data + +/obj/machinery/printer/proc/has_enough_toner() + return toner_cartridge.charges >= 1 + +/obj/machinery/printer/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PosterPrinter") + ui.open() + +/obj/machinery/printer/ui_act(action, list/params) + . = ..() + if(.) + return + var/obj/item/poster = printed_poster?.resolve() + var/obj/item/loaded = loaded_item_ref?.resolve() + switch(action) + if("remove") + if(!loaded) + return + loaded.forceMove(drop_location()) + loaded_item_ref = null + update_icon() + return TRUE + if("remove_poster") + if(!poster) + to_chat(usr, span_warning("No poster! waddaheeeeell")) + return + if(busy) + to_chat(usr, span_warning("[src] is still printing your poster! Please wait until it is finished.")) + return FALSE + poster.forceMove(drop_location()) + printed_poster = null + update_icon() + return TRUE + if("choose_type") + poster_type = params["poster_type"] + return TRUE + if("print") + if(busy) + to_chat(usr, span_warning("[src] is currently busy printing a poster. Please wait until it is finished.")) + return FALSE + if(toner_cartridge.charges - 1 < 0) + to_chat(usr, span_warning("There is not enough toner in [src] to print the poster, please replace the cartridge.")) + return FALSE + if(!loaded) + to_chat(usr, span_warning("[src] has no paper in it! Please insert a sheet of paper.")) + return FALSE + if(!poster_type) + to_chat(usr, span_warning("[src] has no poster type selected! Please select a type first!")) + return FALSE + if(poster) + to_chat(usr, span_warning("[src] ejects its current poster before printing a new one.")) + poster.forceMove(drop_location()) + printed_poster = null + update_icon() + print_poster() + return TRUE + if("remove_toner") + if(issilicon(usr) || (ishuman(usr) && !usr.put_in_hands(toner_cartridge))) + toner_cartridge.forceMove(drop_location()) + toner_cartridge = null + return TRUE + +/obj/machinery/printer/proc/print_poster() + busy = TRUE + loaded_item_ref = null + playsound(src, 'sound/items/poster_being_created.ogg', 20, FALSE) + toner_cartridge.charges -= 1 + icon_state = "print" + var/mutable_appearance/overlay = mutable_appearance(icon, "print_poster") + overlays += overlay + update_icon() + addtimer(CALLBACK(src, PROC_REF(print_complete), overlay), 2.6 SECONDS) + +/obj/machinery/printer/proc/print_complete(mutable_appearance/remove_overlay) + icon_state = "printer" + overlays -= remove_overlay + switch(poster_type) + if("Syndicate") + var/obj/item/poster/random_contraband/poster = new() + printed_poster = WEAKREF(poster) + if("SolGov") + var/obj/item/poster/random_solgov/poster = new() + printed_poster = WEAKREF(poster) + if("Nanotrasen") + var/obj/item/poster/random_official/poster = new() + printed_poster = WEAKREF(poster) + if("RILENA") + var/obj/item/poster/random_rilena/poster = new() + printed_poster = WEAKREF(poster) + if("Nanotrasen (Retro)") + var/obj/item/poster/random_retro/poster = new() + printed_poster = WEAKREF(poster) + update_icon() + busy = FALSE + poster_type = null diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index c8265205cac5..71de02b3ca1c 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -341,7 +341,6 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums dat += "

NTGanda(tm) Universal Printing Module

" dat += "What would you like to print?
" dat += "
\[Bible\]
" - dat += "\[Poster\]
" dat += "(Return to main menu)
" if(8) dat += "

Accessing Forbidden Lore Vault v 1.3

" @@ -524,12 +523,6 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums cooldown = world.time + PRINTER_COOLDOWN else say("Printer currently unavailable, please wait a moment.") - if(href_list["printposter"]) - if(cooldown < world.time) - new /obj/item/poster/random_official(src.loc) - cooldown = world.time + PRINTER_COOLDOWN - else - say("Printer currently unavailable, please wait a moment.") add_fingerprint(usr) updateUsrDialog() diff --git a/icons/obj/printer.dmi b/icons/obj/printer.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6b0ea97e29f4fe321788460f499bb2ceff9f8d49 GIT binary patch literal 1003 zcmV005u}0{{R3yb+fl0000vP)t-sz`($- zudo0A|6XB$j*_dav%)<+R3xESP~}|>fKVeLGfglJ&)3=j000>o880s{5D*YbN=j8# zRRTHkY5)KL0d!JMQvg8b*k%9#0JwToSad{Xb7OL8aCB*JZU6vyoPCkO3c@f9hR@AY zlA{=S{Eh^$jyoeesu^9IEirocnSFOB|D!5JR5L@i-jdn>YRz<9`*eVWW(%K|&woWW~)?GYuuwpLAY17s7BR=(j zaABgGi6Q_10-Q-iK~#90?VQ_k!Y~X(X&sU#v;q46AKRqE#g;FMk!2UUhrYm0XO115 zA$r)|t`cvA++1Jq-N6@R@|_{%=Gua$+dFh7FIN}rJ3^nA*ATQXU`Q~TR}s9w3k#<5 z|1C%lC_SoNu8rA8FR*@OBD1=g+&%1aoyP zf%U3cf1Y44uPGS2#L2vZ;Ae!ZU^-XF`>98M^l^C|!QR6aOyrdWCju3W=amGF>F;;o z^&Jt6=amGPTk-w7WqvF7W(<+9O=CVCxyQcm&*f0b(#jZw-d%&EZPR zv~$)^*iWe5Zz%02RPQ&G_7kf28%pc{)awKPv>-iT^r&g)te>#H)>fwp?bfew4YGD-%#35Sg7AH{#+{UCoI%&7=N;t z_7fKBH{=8#? { + const { act, data } = useBackend(context); + const { has_paper, has_toner, has_poster } = data; + + return ( + + + {has_toner ? ( + + ) : ( +
+ No inserted toner cartridge. +
+ )} + {has_paper ? ( + + ) : ( +
+ No inserted paper. +
+ )} + {has_poster ? ( +
+ +
+ ) : ( +
+ No poster printed! +
+ )} +
+
+ ); +}; + +const Toner = (props, context) => { + const { act, data } = useBackend(context); + const { has_toner, max_toner, current_toner } = data; + + const average_toner = max_toner * 0.66; + const bad_toner = max_toner * 0.33; + + return ( +
act('remove_toner')} + icon="eject" + > + Eject + + } + > + +
+ ); +}; + +const Options = (props, context) => { + const { act, data } = useBackend(context); + const { has_toner, poster_type } = data; + + const posterTypes = [ + 'Syndicate', + 'Nanotrasen', + 'Nanotrasen (Retro)', + 'RILENA', + 'SolGov', + ]; + const selectedType = poster_type ?? 'No Poster Selected'; + + return ( +
+ + act('choose_type', { + poster_type: value, + }) + } + /> + + +
+ ); +}; From a8c38dfba528b080aeaf5687f10518eb6bb45f35 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 30 Jan 2024 00:47:14 +0000 Subject: [PATCH 26/68] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2355.yml | 5 ----- html/changelogs/AutoChangeLog-pr-2600.yml | 4 ---- html/changelogs/archive/2024-01.yml | 6 ++++++ 3 files changed, 6 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2355.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2600.yml diff --git a/html/changelogs/AutoChangeLog-pr-2355.yml b/html/changelogs/AutoChangeLog-pr-2355.yml deleted file mode 100644 index 2b8155004757..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2355.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: goober3 -changes: - - {tweak: Added more light switches to the Mudskipper.} - - {bugfix: The Mudskipper bridge now has proper access applied.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2600.yml b/html/changelogs/AutoChangeLog-pr-2600.yml deleted file mode 100644 index 87f8cfbab00c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2600.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: FalloutFalcon -changes: - - {balance: reverts some blood red hard suits back to ramzi} -delete-after: true diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml index bdd50c40a640..f2a29eb77d49 100644 --- a/html/changelogs/archive/2024-01.yml +++ b/html/changelogs/archive/2024-01.yml @@ -73,3 +73,9 @@ - imageadd: Added vox sprites & a tailhold icon. Skies-Of-Blue: - balance: planetary chem bees have been replaced with the garden variety +2024-01-30: + FalloutFalcon: + - balance: reverts some blood red hard suits back to ramzi + goober3: + - tweak: Added more light switches to the Mudskipper. + - bugfix: The Mudskipper bridge now has proper access applied. From 0ab62db4c77c3dd8818c7cb90ddb5ab7cc30ef74 Mon Sep 17 00:00:00 2001 From: Martinpachu <86135885+Martinpachu@users.noreply.github.com> Date: Thu, 1 Feb 2024 02:38:17 -0300 Subject: [PATCH 27/68] Updates shotgun ammo boxes in ships to the new version. (#2676) ## About The Pull Request Updates shotgun ammo boxes in ships to the new version. Hyena, Halftrack, Cepheus and Twinkleshine. ## Why It's Good For The Game The new version is a lot better to use and this probably overdue. ## Changelog :cl: fix: updated ship shotgun ammo boxes /:cl: --- .../independent/independent_halftrack.dmm | 20 +++++++++---------- .../shuttles/minutemen/minutemen_cepheus.dmm | 10 ++-------- .../syndicate/syndicate_gorlex_hyena.dmm | 2 +- .../syndicate/syndicate_twinkleshine.dmm | 6 +++--- 4 files changed, 16 insertions(+), 22 deletions(-) diff --git a/_maps/shuttles/independent/independent_halftrack.dmm b/_maps/shuttles/independent/independent_halftrack.dmm index f82d26ffd66d..50988838c657 100644 --- a/_maps/shuttles/independent/independent_halftrack.dmm +++ b/_maps/shuttles/independent/independent_halftrack.dmm @@ -200,16 +200,16 @@ /obj/machinery/airalarm/directional/south, /obj/machinery/firealarm/directional/west, /obj/structure/closet/crate/secure/weapon, -/obj/item/storage/box/lethalshot, -/obj/item/storage/box/lethalshot, -/obj/item/storage/box/lethalshot, -/obj/item/storage/box/lethalshot, -/obj/item/storage/box/lethalshot, -/obj/item/storage/box/beanbag, -/obj/item/storage/box/beanbag, -/obj/item/storage/box/beanbag, -/obj/item/storage/box/beanbag, -/obj/item/storage/box/beanbag, +/obj/item/ammo_box/a12g, +/obj/item/ammo_box/a12g, +/obj/item/ammo_box/a12g, +/obj/item/ammo_box/a12g, +/obj/item/ammo_box/a12g, +/obj/item/ammo_box/a12g/beanbag, +/obj/item/ammo_box/a12g/beanbag, +/obj/item/ammo_box/a12g/beanbag, +/obj/item/ammo_box/a12g/beanbag, +/obj/item/ammo_box/a12g/beanbag, /obj/effect/turf_decal/box/red, /turf/open/floor/plasteel/dark, /area/ship/security) diff --git a/_maps/shuttles/minutemen/minutemen_cepheus.dmm b/_maps/shuttles/minutemen/minutemen_cepheus.dmm index 9686aff53035..0a77ee2ca4ed 100644 --- a/_maps/shuttles/minutemen/minutemen_cepheus.dmm +++ b/_maps/shuttles/minutemen/minutemen_cepheus.dmm @@ -4108,15 +4108,9 @@ /obj/item/ammo_box/magazine/m45{ pixel_x = 6 }, -/obj/item/storage/box/rubbershot{ - pixel_x = 3; - pixel_y = -3 - }, +/obj/item/ammo_box/a12g/rubbershot, /obj/item/ammo_box/magazine/cm15_mag, -/obj/item/storage/box/rubbershot{ - pixel_x = 3; - pixel_y = -3 - }, +/obj/item/ammo_box/a12g/rubbershot, /turf/open/floor/plasteel/tech/grid, /area/ship/security) "RN" = ( diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm index dae3f0a86b96..46bd016425f1 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm @@ -300,7 +300,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/industrial/outline, -/obj/item/storage/box/lethalshot, +/obj/item/ammo_box/a12g, /obj/item/ammo_box/c10mm, /turf/open/floor/mineral/plastitanium, /area/ship/security/armory) diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 6c14c9503772..7914b314998c 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -3719,9 +3719,9 @@ /obj/item/ammo_casing/caseless/rocket, /obj/item/ammo_casing/caseless/rocket/hedp, /obj/item/ammo_casing/caseless/rocket/hedp, -/obj/item/storage/box/lethalshot, -/obj/item/storage/box/lethalshot, -/obj/item/storage/box/lethalshot, +/obj/item/ammo_box/a12g, +/obj/item/ammo_box/a12g, +/obj/item/ammo_box/a12g, /obj/item/gun/ballistic/rocketlauncher, /obj/item/gun/ballistic/automatic/ebr, /obj/item/gun/ballistic/automatic/ebr{ From 05bf997b5ab0896e239a738cac5f177d0bd2f4db Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 31 Jan 2024 23:52:26 -0600 Subject: [PATCH 28/68] Automatic changelog generation for PR #2676 [ci skip] --- html/changelogs/AutoChangeLog-pr-2676.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2676.yml diff --git a/html/changelogs/AutoChangeLog-pr-2676.yml b/html/changelogs/AutoChangeLog-pr-2676.yml new file mode 100644 index 000000000000..59fda4e62156 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2676.yml @@ -0,0 +1,4 @@ +author: Martinpachu +changes: + - {bugfix: updated ship shotgun ammo boxes} +delete-after: true From 9d329c914b00a2f6d7ca03eb7dddc46e82fc7985 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 2 Feb 2024 00:46:53 +0000 Subject: [PATCH 29/68] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2676.yml | 4 ---- html/changelogs/archive/2024-02.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2676.yml create mode 100644 html/changelogs/archive/2024-02.yml diff --git a/html/changelogs/AutoChangeLog-pr-2676.yml b/html/changelogs/AutoChangeLog-pr-2676.yml deleted file mode 100644 index 59fda4e62156..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2676.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Martinpachu -changes: - - {bugfix: updated ship shotgun ammo boxes} -delete-after: true diff --git a/html/changelogs/archive/2024-02.yml b/html/changelogs/archive/2024-02.yml new file mode 100644 index 000000000000..855c28c0800a --- /dev/null +++ b/html/changelogs/archive/2024-02.yml @@ -0,0 +1,3 @@ +2024-02-02: + Martinpachu: + - bugfix: updated ship shotgun ammo boxes From 7ef9bda6706a773a5ac2446a3a24e45e99ab015e Mon Sep 17 00:00:00 2001 From: Theos Date: Fri, 2 Feb 2024 08:09:35 -0500 Subject: [PATCH 30/68] Adds co-op cigarette lighting (#2686) ## About The Pull Request If you have a cigarette equipped, and someone else has an un-lit cigarette equipped, you can light theirs via help intent+target mouth ![image](https://github.com/shiptest-ss13/Shiptest/assets/24857008/c1a352a4-5ae5-41e3-91c7-37780cbb8535) ## Why It's Good For The Game New co-op interaction ## Changelog :cl: add: If you are smoking a cigarette, you can light someone else's cigarette via help intent while targeting the mouth /:cl: --- code/modules/mob/living/carbon/carbon_defense.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index df9b5c22704d..9b50d1827724 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -391,6 +391,14 @@ if(M == src && check_self_for_injuries()) return + if(M.zone_selected == BODY_ZONE_PRECISE_MOUTH) + var/obj/item/clothing/mask/cigarette/theircig = wear_mask + var/obj/item/clothing/mask/cigarette/ourcig = M.wear_mask + if(istype(ourcig) && istype(theircig)) + if(ourcig.lit && !theircig.lit) + theircig.light(span_notice("[M] leans towards [src], lighting [p_their()] [theircig.name] with [M.p_their()] own.")) + return + if(body_position == LYING_DOWN) if(buckled) to_chat(M, "You need to unbuckle [src] first to do that!") From 197fb53ce9f5613a31d7ffde2b5bb6e8e0b39bc0 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 2 Feb 2024 07:24:02 -0600 Subject: [PATCH 31/68] Automatic changelog generation for PR #2686 [ci skip] --- html/changelogs/AutoChangeLog-pr-2686.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2686.yml diff --git a/html/changelogs/AutoChangeLog-pr-2686.yml b/html/changelogs/AutoChangeLog-pr-2686.yml new file mode 100644 index 000000000000..dbc6db844c34 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2686.yml @@ -0,0 +1,5 @@ +author: SomeguyManperson +changes: + - {rscadd: "If you are smoking a cigarette, you can light someone else's cigarette + via help intent while targeting the mouth"} +delete-after: true From e19bc3b001d99c73939db40d466653ed4a01f728 Mon Sep 17 00:00:00 2001 From: GenericDM <34109002+GenericDM@users.noreply.github.com> Date: Fri, 2 Feb 2024 05:11:23 -0800 Subject: [PATCH 32/68] Kills Mutation Toxin (#2659) ## About The Pull Request Kills mutation toxin. Simple as. ## Why It's Good For The Game 1. Xenobio content. Ew. 2. I've only seen this used for griefing or accidentally. 3. Admins already have a dedicated species change button if need be. ## Changelog :cl: del: mutation toxin /:cl: --- .../carbon/human/species_types/spider.dm | 15 -- .../hostile/mining_mobs/hivelord.dm | 1 - .../chemistry/reagents/other_reagents.dm | 223 ------------------ .../reagents/chemistry/recipes/others.dm | 6 - .../chemistry/recipes/slime_extracts.dm | 4 +- .../reagents/reagent_containers/pill.dm | 8 - code/modules/research/experimentor.dm | 2 +- .../xenobiology/crossbreeding/regenerative.dm | 2 - 8 files changed, 3 insertions(+), 258 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/spider.dm b/code/modules/mob/living/carbon/human/species_types/spider.dm index f7ae4f6bef10..e93ef5baaead 100644 --- a/code/modules/mob/living/carbon/human/species_types/spider.dm +++ b/code/modules/mob/living/carbon/human/species_types/spider.dm @@ -228,18 +228,3 @@ GLOBAL_LIST_INIT(spider_last, world.file2list("strings/names/spider_last.txt")) A.forceMove(C) H.visible_message("[H] wraps [A] into a cocoon!") return - -/datum/reagent/mutationtoxin/arachnid - name = "Arachnid Mutation Toxin" - description = "A glowing toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/spider - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "silk" - -/datum/chemical_reaction/mutationtoxin/arachnid - results = list(/datum/reagent/mutationtoxin/arachnid = 1) - required_reagents = list( - /datum/reagent/mutationtoxin/unstable = 1, - /datum/reagent/toxin/heparin = 10 - ) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 474c9c5d9ca6..087c538a8c3e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -885,7 +885,6 @@ ) if("Shadow") mob_species = /datum/species/shadow - r_pocket = /obj/item/reagent_containers/pill/shadowtoxin neck = /obj/item/clothing/accessory/medal/plasma/nobel_science uniform = /obj/item/clothing/under/color/black shoes = /obj/item/clothing/shoes/sneakers/black diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 05d91f17fe47..d727cbfd0fa6 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -505,221 +505,6 @@ ..() return -#define MUT_MSG_IMMEDIATE 1 -#define MUT_MSG_EXTENDED 2 -#define MUT_MSG_ABOUT2TURN 3 - -/datum/reagent/mutationtoxin - name = "Stable Mutation Toxin" - description = "A humanizing toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - metabolization_rate = 0.2 //metabolizes to prevent micro-dosage - taste_description = "slime" - var/race = /datum/species/human - var/list/mutationtexts = list( "You don't feel very well." = MUT_MSG_IMMEDIATE, - "Your skin feels a bit abnormal." = MUT_MSG_IMMEDIATE, - "Your limbs begin to take on a different shape." = MUT_MSG_EXTENDED, - "Your appendages begin morphing." = MUT_MSG_EXTENDED, - "You feel as though you're about to change at any moment!" = MUT_MSG_ABOUT2TURN) - var/cycles_to_turn = 20 //the current_cycle threshold / iterations needed before one can transform - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - -/datum/reagent/mutationtoxin/on_mob_life(mob/living/carbon/human/H) - . = TRUE - if(!istype(H)) - return - if(!(H.dna?.species) || !(H.mob_biotypes & MOB_ORGANIC)) - return - var/datum/species/mutation = pick(race) //I honestly feel extremely uncomfortable. I do not like the fact that this works. - var/current_species = H.dna.species.type - if(mutation && mutation != current_species) - H.set_species(mutation) - else - to_chat(H, "The pain vanishes suddenly. You feel no different.") - H.reagents.del_reagent(type) - - if(prob(10)) - var/list/pick_ur_fav = list() - var/filter = NONE - if(current_cycle <= (cycles_to_turn*0.3)) - filter = MUT_MSG_IMMEDIATE - else if(current_cycle <= (cycles_to_turn*0.8)) - filter = MUT_MSG_EXTENDED - else - filter = MUT_MSG_ABOUT2TURN - - for(var/i in mutationtexts) - if(mutationtexts[i] == filter) - pick_ur_fav += i - to_chat(H, "[pick(pick_ur_fav)]") - - if(current_cycle >= cycles_to_turn) - var/datum/species/species_type = race - H.set_species(species_type) - H.reagents.del_reagent(type) - to_chat(H, "You've become \a [lowertext(initial(species_type.name))]!") - ..() - -/datum/reagent/mutationtoxin/classic //The one from plasma on green slimes - name = "Mutation Toxin" - description = "A corruptive toxin." - color = "#13BC5E" // rgb: 19, 188, 94 - race = /datum/species/jelly/slime - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - -/datum/reagent/mutationtoxin/unstable - name = "Unstable Mutation Toxin" - description = "A mostly safe mutation toxin." - color = "#13BC5E" // rgb: 19, 188, 94 - race = list(/datum/species/jelly/slime, - /datum/species/human, - /datum/species/lizard, - /datum/species/fly, - /datum/species/moth, - /datum/species/pod, - /datum/species/jelly, - /datum/species/abductor - ) - process_flags = ORGANIC | SYNTHETIC - -/datum/reagent/mutationtoxin/lizard - name = "Sarathi Mutation Toxin" - description = "A lizarding toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/lizard - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "dragon's breath but not as cool" - -/datum/reagent/mutationtoxin/fly - name = "Fly Mutation Toxin" - description = "An insectifying toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/fly - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "trash" - -/datum/reagent/mutationtoxin/moth - name = "Moth Mutation Toxin" - description = "A glowing toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/moth - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "clothing" - -/datum/reagent/mutationtoxin/pod - name = "Podperson Mutation Toxin" - description = "A vegetalizing toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/pod - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "flowers" - -/datum/reagent/mutationtoxin/jelly - name = "Imperfect Mutation Toxin" - description = "A jellyfying toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/jelly - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "grandma's gelatin" - -/datum/reagent/mutationtoxin/jelly/on_mob_life(mob/living/carbon/human/H) - if(isjellyperson(H)) - to_chat(H, "Your jelly shifts and morphs, turning you into another subspecies!") - var/species_type = pick(subtypesof(/datum/species/jelly)) - H.set_species(species_type) - H.reagents.del_reagent(type) - return TRUE - if(current_cycle >= cycles_to_turn) //overwrite since we want subtypes of jelly - var/datum/species/species_type = pick(subtypesof(race)) - H.set_species(species_type) - H.reagents.del_reagent(type) - to_chat(H, "You've become \a [initial(species_type.name)]!") - return TRUE - return ..() - -/datum/reagent/mutationtoxin/abductor - name = "Abductor Mutation Toxin" - description = "An alien toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/abductor - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "something out of this world... no, universe!" - -/datum/reagent/mutationtoxin/android - name = "Android Mutation Toxin" - description = "A robotic toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/android - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "circuitry and steel" - -/datum/reagent/mutationtoxin/ipc - name = "IPC Mutation Toxin" - description = "An integrated positronic toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/ipc - process_flags = ORGANIC | SYNTHETIC - -/datum/reagent/mutationtoxin/kepi //crying - name = "Kepori Mutation Toxin" - description = "A feathery toxin." - race = /datum/species/kepori - process_flags = ORGANIC | SYNTHETIC - taste_description = "a familiar white meat" - -//BLACKLISTED RACES -/datum/reagent/mutationtoxin/skeleton - name = "Skeleton Mutation Toxin" - description = "A scary toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/skeleton - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "milk... and lots of it" - -/datum/reagent/mutationtoxin/zombie - name = "Zombie Mutation Toxin" - description = "An undead toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/zombie //Not the infectious kind. The days of xenobio zombie outbreaks are long past. - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "brai...nothing in particular" - -/datum/reagent/mutationtoxin/goofzombie - name = "Krokodil Zombie Mutation Toxin" - description = "An undead toxin... kinda..." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/human/krokodil_addict //Not the infectious kind. The days of xenobio zombie outbreaks are long past. - process_flags = ORGANIC | SYNTHETIC - -/datum/reagent/mutationtoxin/ash - name = "Ash Mutation Toxin" - description = "An ashen toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/lizard/ashwalker - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "savagery" - -//DANGEROUS RACES -/datum/reagent/mutationtoxin/shadow - name = "Shadow Mutation Toxin" - description = "A dark toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/shadow - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "the night" - -/datum/reagent/mutationtoxin/plasma - name = "Plasma Mutation Toxin" - description = "A plasma-based toxin." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/plasmaman - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "plasma" - -#undef MUT_MSG_IMMEDIATE -#undef MUT_MSG_EXTENDED -#undef MUT_MSG_ABOUT2TURN - /datum/reagent/mulligan name = "Mulligan Toxin" description = "This toxin will rapidly change the DNA of human beings. Commonly used by Syndicate spies and assassins in need of an emergency ID change." @@ -2765,14 +2550,6 @@ if(prob(min(current_cycle/4, 10))) M.adjustOrganLoss(ORGAN_SLOT_STOMACH,3*REM) -/datum/reagent/mutationtoxin/kobold - name = "Kobold Mutation Toxin" - description = "An ashen toxin. Something about this seems lesser." - color = "#5EFF3B" //RGB: 94, 255, 59 - race = /datum/species/lizard/ashwalker/kobold - process_flags = ORGANIC | SYNTHETIC //WS Edit - IPCs - taste_description = "short savagery" - /datum/reagent/polar_bear_fur //used for icewine crafting name = "Polar Bear Fur" description = "Fur obtained from griding up a polar bears hide" diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index d50605dcd7f6..10cd8ffc72eb 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -149,12 +149,6 @@ required_reagents = list(/datum/reagent/ammonia = 2, /datum/reagent/nitrogen = 1, /datum/reagent/oxygen = 2) required_temp = 525 -//Technically a mutation toxin -/datum/chemical_reaction/mulligan - results = list(/datum/reagent/mulligan = 1) - required_reagents = list(/datum/reagent/mutationtoxin/jelly = 1, /datum/reagent/toxin/mutagen = 1) - - ////////////////////////////////// VIROLOGY ////////////////////////////////////////// /datum/chemical_reaction/virus_food diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 07753cea4a15..97290d54213f 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -44,13 +44,13 @@ //Green /datum/chemical_reaction/slime/slimemutate - results = list(/datum/reagent/mutationtoxin/jelly = 1) + results = list(/datum/reagent/consumable/berryjuice = 1) // Removal of mutation toxins. This used to be jellyperson toxin, but is now just jelly. required_reagents = list(/datum/reagent/toxin/plasma = 1) required_other = TRUE required_container = /obj/item/slime_extract/green /datum/chemical_reaction/slime/unstabletoxin - results = list(/datum/reagent/mutationtoxin/unstable = 1) + results = list(/datum/reagent/toxin/mutagen = 1) // Removal of mutation toxins. This used to be unstable toxin, but is now unstable mutagen. required_reagents = list(/datum/reagent/uranium/radium = 1) required_other = TRUE required_container = /obj/item/slime_extract/green diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 187935fa0b25..58476c423275 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -182,14 +182,6 @@ icon_state = "pill22" rename_with_volume = TRUE -///////////////////////////////////////// this pill is used only in a legion mob drop -/obj/item/reagent_containers/pill/shadowtoxin - name = "black pill" - desc = "I wouldn't eat this if I were you." - icon_state = "pill9" - color = "#454545" - list_reagents = list(/datum/reagent/mutationtoxin/shadow = 5) - ///////////////////////////////////////// Psychologist inventory pills /obj/item/reagent_containers/pill/happinesspsych name = "mood stabilizer pill" diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index f714f65f154d..9016d60515e7 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -322,7 +322,7 @@ ejectItem(TRUE) else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) visible_message("[src]'s chemical chamber has sprung a leak!") - chosenchem = pick(/datum/reagent/mutationtoxin/classic,/datum/reagent/nanomachines,/datum/reagent/toxin/acid) + chosenchem = pick(/datum/reagent/nanomachines,/datum/reagent/toxin/acid) var/datum/reagents/R = new/datum/reagents(50) R.my_atom = src R.add_reagent(chosenchem , 50) diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index 8e71efc3177d..7cb7f8677408 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -265,8 +265,6 @@ Regenerative extracts: target.visible_message("The [target] suddenly changes color!") var/mob/living/simple_animal/slime/S = target S.random_colour() - if(isjellyperson(target)) - target.reagents.add_reagent(/datum/reagent/mutationtoxin/jelly,5) organ_loss += 17 From 8d3186dae51896ec98d13aa36e0325951c75c9f4 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 2 Feb 2024 07:40:47 -0600 Subject: [PATCH 33/68] Automatic changelog generation for PR #2659 [ci skip] --- html/changelogs/AutoChangeLog-pr-2659.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2659.yml diff --git a/html/changelogs/AutoChangeLog-pr-2659.yml b/html/changelogs/AutoChangeLog-pr-2659.yml new file mode 100644 index 000000000000..38e82309d6bf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2659.yml @@ -0,0 +1,4 @@ +author: GenericDM +changes: + - {rscdel: mutation toxin} +delete-after: true From 22610d687448b8dc1312eb05467b22e4cc6f4569 Mon Sep 17 00:00:00 2001 From: meem <75212565+meemofcourse@users.noreply.github.com> Date: Fri, 2 Feb 2024 10:14:04 -0300 Subject: [PATCH 34/68] Fixes #2628 (#2674) ## About The Pull Request Continuation of #2628, which was merged without a testmerge. This fixes some ERT outfits, adds a Syndicate Inspector ERT (which had the outfit defined but not the ERT), and fixes the independent sechud background. Also messes with the CMM Inspector's icon. ![imagen](https://github.com/shiptest-ss13/Shiptest/assets/75212565/a3ac82d6-e5c2-4028-9992-f2565604ac0b) ## Why It's Good For The Game blame zephyr ## Changelog :cl: add: ACLF Syndicate Inspector ERT fix: Independent background icons fix: ERT Outfits not having access and proper names /:cl: --- code/datums/ert.dm | 11 +++++++++++ code/modules/antagonists/ert/ert.dm | 12 ++++++++++++ .../modules/clothing/outfits/ert/indie_ert.dm | 12 ++++++++++++ .../modules/clothing/outfits/ert/inteq_ert.dm | 6 ++++++ .../clothing/outfits/ert/minutemen_ert.dm | 11 +++++++++++ .../clothing/outfits/ert/nanotrasen_ert.dm | 4 ++++ .../clothing/outfits/ert/solgov_ert.dm | 3 ++- .../clothing/outfits/ert/syndicate_ert.dm | 18 ++++++++++++++---- .../clothing/outfits/factions/independent.dm | 2 +- .../clothing/outfits/factions/nanotrasen.dm | 1 + icons/mob/hud.dmi | Bin 19255 -> 19376 bytes 11 files changed, 74 insertions(+), 6 deletions(-) diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 2c84f254cd6f..844548748824 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -210,6 +210,17 @@ rename_team = "Cybersun Medical Intervention Team" polldesc = "a Cybersun paramedic team" +/datum/ert/syndicate/inspector + teamsize = 1 + leader_role = /datum/antagonist/ert/official/syndicate + roles = list(/datum/antagonist/ert/official/syndicate) + rename_team = "Syndicate Inspector" + polldesc = "a syndicate inspector" + spawn_at_outpost = FALSE + +/datum/ert/syndicate/inspector/New() + mission = "Conduct a routine review on [station_name()]'s vessels." + // Frontiersmen /datum/ert/frontier teamsize = 4 diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index f529c19901a3..f9741d39e572 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -461,6 +461,18 @@ outfit = /datum/outfit/job/syndicate/ert/cybersun/medic/leader role = "Lead Medical Technician" +/datum/antagonist/ert/official/syndicate + name = "Syndicate Inspector" + outfit = /datum/outfit/job/syndicate/ert/inspector + role = "Syndicate Inspector" + +/datum/antagonist/ert/official/solgov/greet() + to_chat(owner, "You are a Syndicate Inspector.") + if (ert_team) + to_chat(owner, "The Syndicate Coalition is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") + else + to_chat(owner, "The Syndicate Coalition is sending you to [station_name()] with the task: [mission.explanation_text]") + // ******************************************************************** // ** Frontiersmen ** // ******************************************************************** diff --git a/code/modules/clothing/outfits/ert/indie_ert.dm b/code/modules/clothing/outfits/ert/indie_ert.dm index f64e7f86a99a..6a8b228aec94 100644 --- a/code/modules/clothing/outfits/ert/indie_ert.dm +++ b/code/modules/clothing/outfits/ert/indie_ert.dm @@ -1,5 +1,7 @@ /datum/outfit/job/independent/ert name = "ERT - Independent Security Officer" + jobtype = /datum/job/officer + job_icon = "securityofficer" head = /obj/item/clothing/head/helmet/sec ears = /obj/item/radio/headset/alt @@ -14,6 +16,8 @@ /datum/outfit/job/independent/ert/emt name = "ERT - Independent Paramedic" + jobtype = /datum/job/paramedic + job_icon = "paramedic" head = /obj/item/clothing/head/soft/paramedic mask = null @@ -27,6 +31,8 @@ /datum/outfit/job/independent/ert/firefighter name = "ERT - Independent Firefighter (Standard)" + jobtype = /datum/job/atmos + job_icon = "atmospherictechnician" head = /obj/item/clothing/head/hardhat/red uniform = /obj/item/clothing/under/utility @@ -43,6 +49,8 @@ /datum/outfit/job/independent/ert/firefighter/medic name = "ERT - Independent Firefighter (Medic)" + jobtype = /datum/job/paramedic + job_icon = "paramedic" mask = /obj/item/clothing/mask/breath/medical back = /obj/item/storage/backpack/fireproof @@ -56,6 +64,8 @@ /datum/outfit/job/independent/ert/firefighter/leader name = "ERT - Independent Firefighter (Group Captain)" + jobtype = /datum/job/chief_engineer + job_icon = "chiefengineer" back = /obj/item/fireaxe suit = /obj/item/clothing/suit/space/hardsuit/engine @@ -66,6 +76,8 @@ /datum/outfit/job/independent/ert/technician name = "ERT - Independent Technician" + jobtype = /datum/job/engineer + job_icon = "stationengineer" head = /obj/item/clothing/head/hardhat uniform = /obj/item/clothing/under/rank/engineering/engineer diff --git a/code/modules/clothing/outfits/ert/inteq_ert.dm b/code/modules/clothing/outfits/ert/inteq_ert.dm index f9a0aec2dc57..5a39d3ea3da4 100644 --- a/code/modules/clothing/outfits/ert/inteq_ert.dm +++ b/code/modules/clothing/outfits/ert/inteq_ert.dm @@ -1,5 +1,7 @@ /datum/outfit/job/inteq/ert name = "ERT - Inteq Rifleman" + jobtype = /datum/job/officer + job_icon = "securityofficer" mask = /obj/item/clothing/mask/gas/sechailer/inteq glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq @@ -28,6 +30,8 @@ /datum/outfit/job/inteq/ert/medic name = "ERT - Inteq Corpsman" + jobtype = /datum/job/paramedic + job_icon = "paramedic" uniform = /obj/item/clothing/under/syndicate/inteq/corpsman belt = /obj/item/storage/belt/medical/webbing/paramedic @@ -39,6 +43,8 @@ /datum/outfit/job/inteq/ert/leader name = "ERT - Inteq Vanguard" + jobtype = /datum/job/hos + job_icon = "headofsecurity" ears = /obj/item/radio/headset/inteq/alt/captain back = /obj/item/storage/backpack/messenger/inteq diff --git a/code/modules/clothing/outfits/ert/minutemen_ert.dm b/code/modules/clothing/outfits/ert/minutemen_ert.dm index 6fc4821784b5..8acb733e48f0 100644 --- a/code/modules/clothing/outfits/ert/minutemen_ert.dm +++ b/code/modules/clothing/outfits/ert/minutemen_ert.dm @@ -1,5 +1,7 @@ /datum/outfit/job/minutemen/ert name = "ERT - Minuteman" + jobtype = /datum/job/officer + job_icon = "securityofficerOld" head = /obj/item/clothing/head/helmet/bulletproof/minutemen uniform = /obj/item/clothing/under/rank/security/officer/minutemen @@ -17,6 +19,7 @@ /datum/outfit/job/minutemen/ert/leader name = "ERT - Minuteman Sergeant" + job_icon = "lieutenant" ears = /obj/item/radio/headset/minutemen/alt/captain back = /obj/item/storage/backpack/satchel/sec/cmm @@ -24,6 +27,7 @@ /datum/outfit/job/minutemen/ert/bard name = "ERT - Minuteman (BARD)" + job_icon = "securityofficerOld" suit = /obj/item/clothing/suit/armor/vest/marine/medium suit_store = /obj/item/gun/ballistic/automatic/smg/cm5 @@ -43,6 +47,7 @@ /datum/outfit/job/minutemen/ert/bard/leader name = "ERT - Minuteman Sergeant (BARD)" + job_icon = "lieutenant" belt = /obj/item/storage/belt/military/assault/minutemen uniform = /obj/item/clothing/under/rank/command/minutemen @@ -60,6 +65,7 @@ /datum/outfit/job/minutemen/ert/riot name = "ERT - Minuteman (Riot Officer)" + job_icon = "securityofficerOld" suit = /obj/item/clothing/suit/armor/riot/minutemen head = /obj/item/clothing/head/helmet/riot/minutemen @@ -74,12 +80,15 @@ /datum/outfit/job/minutemen/ert/riot/leader name = "ERT - Minutemen Sergeant (Riot Officer)" + job_icon = "lieutenant" ears = /obj/item/radio/headset/minutemen/alt/captain back = /obj/item/shield/riot/flash /datum/outfit/job/minutemen/ert/inspector name = "ERT - Inspector (Minutemen GOLD)" + jobtype = /datum/job/head_of_personnel + job_icon = "minutemen" head = /obj/item/clothing/head/cowboy/sec/minutemen mask = null @@ -97,12 +106,14 @@ /datum/outfit/job/minutemen/ert/pirate_hunter name = "ERT - Minuteman (Pirate Hunter)" + job_icon = "securityofficerOld" head = null suit = /obj/item/clothing/suit/space/hardsuit/security/independent/minutemen /datum/outfit/job/minutemen/ert/pirate_hunter/leader name = "ERT - Minutemen Sergeant (Pirate Hunter)" + job_icon = "lieutenant" uniform = /obj/item/clothing/under/rank/command/minutemen ears = /obj/item/radio/headset/minutemen/alt/captain diff --git a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm index 2d397b8de828..97c4756bee9a 100644 --- a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm +++ b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm @@ -382,6 +382,7 @@ /datum/outfit/job/nanotrasen/ert/lp name = "ERT - Loss Prevention Security Specialist" jobtype = /datum/job/officer + job_icon = "securityresponseofficer" head = null implants = list(/obj/item/implant/mindshield) @@ -406,6 +407,7 @@ /datum/outfit/job/nanotrasen/ert/lp/medic name = "ERT - Loss Prevention Medical Specialist" jobtype = /datum/job/doctor + job_icon = "medicalresponseofficer" head = null uniform = /obj/item/clothing/under/rank/medical/paramedic/lp @@ -425,6 +427,7 @@ /datum/outfit/job/nanotrasen/ert/lp/engineer name = "ERT - Loss Prevention Engineering Specialist" jobtype = /datum/job/engineer + job_icon = "engineeringresponseofficer" head = null uniform = /obj/item/clothing/under/rank/engineering/engineer/nt/lp @@ -444,6 +447,7 @@ /datum/outfit/job/nanotrasen/ert/lp/lieutenant name = "ERT - Loss Prevention Lieutenant" jobtype = /datum/job/captain + job_icon = "emergencyresponseteamcommander" head = null ears = /obj/item/radio/headset/nanotrasen/alt/captain diff --git a/code/modules/clothing/outfits/ert/solgov_ert.dm b/code/modules/clothing/outfits/ert/solgov_ert.dm index 9962f1d9c74c..bc09a74c1786 100644 --- a/code/modules/clothing/outfits/ert/solgov_ert.dm +++ b/code/modules/clothing/outfits/ert/solgov_ert.dm @@ -18,8 +18,9 @@ /datum/outfit/job/solgov/ert/inspector - name = "ERT - SolGov Inspector" + name = "ERT - Inspector (SolGov)" jobtype = /datum/job/head_of_personnel + job_icon = "solgovrepresentative" uniform = /obj/item/clothing/under/solgov/formal belt = /obj/item/clipboard diff --git a/code/modules/clothing/outfits/ert/syndicate_ert.dm b/code/modules/clothing/outfits/ert/syndicate_ert.dm index 3ef6cea0e53b..ab256d094a38 100644 --- a/code/modules/clothing/outfits/ert/syndicate_ert.dm +++ b/code/modules/clothing/outfits/ert/syndicate_ert.dm @@ -1,5 +1,7 @@ /datum/outfit/job/syndicate/ert name = "ERT - Syndicate Basic" + jobtype = /datum/job/officer + job_icon = "securityofficer" suit = /obj/item/clothing/suit/armor/vest/syndie suit_store = /obj/item/gun/ballistic/automatic/smg/c20r @@ -18,10 +20,9 @@ implants = list(/obj/item/implant/weapons_auth) backpack_contents = list(/obj/item/radio=1) - jobtype = /datum/job/officer // most of these are Shooty Shooty People anyway - /datum/outfit/job/syndicate/ert/leader name = "ERT - Syndicate Basic Leader" + job_icon = "lieutenant" head = /obj/item/clothing/head/HoS/beret/syndicate ears = /obj/item/radio/headset/syndicate/captain @@ -48,6 +49,8 @@ /datum/outfit/job/syndicate/ert/gorlex/medic name = "ERT - Syndicate Gorlex Loyalist Medic" + jobtype = /datum/job/paramedic + job_icon = "paramedic" head = /obj/item/clothing/head/soft/black mask = null @@ -79,6 +82,7 @@ /datum/outfit/job/syndicate/ert/gorlex/leader name = "ERT - Syndicate Gorlex Loyalist Sergeant" + job_icon = "lieutenant" uniform = /obj/item/clothing/under/syndicate/gorlex head = /obj/item/clothing/head/HoS/beret/syndicate @@ -93,6 +97,7 @@ /datum/outfit/job/syndicate/ert/cybersun name = "ERT - Syndicate Cybersun Commando" + job_icon = "syndicate" head = null uniform = /obj/item/clothing/under/syndicate/combat @@ -117,6 +122,7 @@ /datum/outfit/job/syndicate/ert/cybersun/medic name = "ERT - Syndicate Cybersun Paramedic" + job_icon = "paramedic" uniform = /obj/item/clothing/under/syndicate/medic suit = /obj/item/clothing/suit/space/hardsuit/syndi/cybersun/paramed @@ -138,6 +144,7 @@ /datum/outfit/job/syndicate/ert/cybersun/medic/leader name = "ERT - Syndicate Cybersun Lead Paramedic" + job_icon = "chiefmedicalofficer" head = /obj/item/clothing/head/beret/cmo glasses = /obj/item/clothing/glasses/hud/security/night @@ -150,6 +157,8 @@ /datum/outfit/job/syndicate/ert/inspector name = "ERT - Inspector (Syndicate)" + jobtype = /datum/job/head_of_personnel + job_icon = "syndicate" uniform = /obj/item/clothing/under/syndicate/officer head = /obj/item/clothing/head/HoS/beret/syndicate @@ -160,10 +169,11 @@ shoes = /obj/item/clothing/shoes/laceup gloves = /obj/item/clothing/gloves/color/white suit = /obj/item/clothing/suit/armor/hos + l_pocket = null + r_pocket = null suit_store = null - job_icon = "syndicate" - jobtype = /datum/job/head_of_personnel + backpack_contents = list(/obj/item/stamp/syndicate) /datum/outfit/job/syndicate/ert/inspector/post_equip(mob/living/carbon/human/H, visualsOnly) . = ..() diff --git a/code/modules/clothing/outfits/factions/independent.dm b/code/modules/clothing/outfits/factions/independent.dm index 97b806ec4b5b..e31e03e10eba 100644 --- a/code/modules/clothing/outfits/factions/independent.dm +++ b/code/modules/clothing/outfits/factions/independent.dm @@ -1,6 +1,6 @@ /datum/outfit/job/independent name = "Independent - Base Outfit" - faction_icon = "bg_independent" + faction_icon = "bg_indie" uniform = /obj/item/clothing/under/utility box = /obj/item/storage/box/survival diff --git a/code/modules/clothing/outfits/factions/nanotrasen.dm b/code/modules/clothing/outfits/factions/nanotrasen.dm index 409a8dd55d47..28ff486e4dc6 100644 --- a/code/modules/clothing/outfits/factions/nanotrasen.dm +++ b/code/modules/clothing/outfits/factions/nanotrasen.dm @@ -380,6 +380,7 @@ job_icon = "medicaldoctor" jobtype = /datum/job/doctor + belt = /obj/item/pda/medical ears = /obj/item/radio/headset/headset_med uniform = /obj/item/clothing/under/rank/medical/doctor shoes = /obj/item/clothing/shoes/sneakers/white diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index e55252e102df1a662d6e79fe8f94cea0f6670b8b..a54640fc17ba2ed2726a844b480cc944463acac5 100644 GIT binary patch literal 19376 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 NJzf1=);T3K0RYFqDaHT* literal 19255 zcmb@u2UJsC(8s&C!b8*0uE|8mKIM1`0M+vwx7UH}X}`FO8p+ z{VPDsFK{s{OWP*Ps#QEdE=z4eqWpItH%D$RR_mD73zQzp!c*tW`L$Ayb}6mLrgzjE zt`xeoNGkUx#JIf5h-OqfBQ5;>S2>SNB^h?woMDr3LF?ZazH!xkcPuDaBP6b* zHy`%!=jkSex5r<+_;M<3?)n9B9o<+Tg!=XvrY;fKBk@S}nHbF&dv51E&5Av{JSc65 zI+9zfvxxBtFV7j!IOu&yQ8HZSs8emn8;{GRqxTx+3!iW0%zO~}=E_q0hwmL5ZO`^V zVWqF}p_=6Db8jnWjh(xKzVJ(NJX=ySeru?Z&l+g;1riW`sqnVRSa-D8?M*}sJbYY# z$ZqnRuRuw5`R&@mJA-;1%`XNBc@a0X8UnjG#WMsny{@HxG)VX6nXKf{cQ3Wt`@k(^ zg!e=r6^v?n*=Tg-eC4`xMBc{XB{!)cbVG+Tq;U2LA;B!}7=&;BY!&977~$Ha+{31p zvyOFZCORC&V+q2?7jfD{2W~A%ai6R#%jdtL!+nKs9vxQ7=ZWGbr%F>&`3*4-N~-_b z@#WX9xOnE*>(O_Ei2UZh=U2Ml@;eXImjP}cE-vj|T#!HeJ_$QMXgow3WvegFTah;M zjOV03f!(ogcC0~M^{z&oDYUS~GSlZ&Uube~^#Y8y=U4w<)5yAL^hHCM%k z`YzQZ`qD~|Qf$QJkxo^W``q^TeE}IPMQ7=&d;!{yFxpv z?=X=@doe&B==xI=cOaWpsP`e#$3YzM449iR_8e@H6;)+OqYS zMF@|?@s7_=qe^ZZ>HlHfu{S6qdwS^YPI&Dzm+-*!mGA6M_bbkaIYaH5G#+|Ns8cI` zb*q%sJPLfi#l$5wEw$+r z26{vy-NZ9*PWtKA;Jb?ORNhHkre4sqH|HzLg-6qNqi0qo`5yH#P;uoGTObtzzx+{BC*X#oi}@+O7lOsWCCIxO&+K@&jo24S$onzZ)r8?jdGZu5N%nxBUlpUc*30k2tGG{+ zKWMS6Gd?HqIa6;?_h#LF$#ljp)Kgk}NS2|(1_0*(?K`)O{XeWtg#;VVXEK@OJ0*1( ztx&F>OtuT`tUa-}&6-&*zsYf_ANjG?lNrq_I$n|Ah#PZ`uCI;G=QVj}_ml-ze}8Gr zWWDdA^T8A@jq`6la?I&RD7+wZp$YNbX&=%)9Axn-bLnc%iq{nOS~&D4WFSorzh{NM z>2NGD59WK;p2HfRM6(ID`wUsiUDg!k{+*8u>}TtTlV9U@U5X7}F5Mt{c^x21 z`;tdSZ7=bu!WRcWhEovRlU}G-Sx|9h<);iWD!G1_WKd802QZPU3lO>I!Syc#hzqb}2%VG|@)2K99p~2-qk_y%X>Goxxh1LX_1g8u zYF+Q%GxXI3(kLZ2b>it~LS|-Qt9E6@|3Mw*)?Ei@8JF7HOVp*?GHZ^e?EsL*l zMr$_K7wN2wmGY=sMxCV*#&;FzU-g78FHh=5E0KrdF*U!=3NfEuz*#b-JFRjhvi$!t zP}zK0cE&5VmL#I&{pBH1BW?d_toeaBvnKj)+HGEtb=*E}Ytc={!nHR;Y!S6&CdOX> z8Z*SNq>>y52dU8OErucpz@pRlzHZO+>M@wr`!oMprM37QkC8Agf9?UxxkIRO$6UNw zjW$Kab+&QT`OnygUE(WCuj^%&rL{D?m*)(pjg;@XP&J8yM4Y2dZ3M^luJW_j+bkI6 zp~{-F8|L5sRh+n3`z_za%eSf(GrrsRS_xkue4 zEs@Gc!R4B`5lyGKbOr7N(mIdG=itgpbb54Zj}VM|Cz<|g9fyWIJ5Uy;xS zgTUQ1D0}P46p&Mt)#&3doK@>`ls0NBTrr6!vh~*~R9l{CWPP=Vi~e`5u+psiAj1fv zOHFIf+6Q2BFWZEo|D@^~(tf2Rqf(Z?Q3(%BOp+l#Mcft?pW2vXWwQ#wiPl1Nq&DZ& zxnY)E;FXH3f3&eoH(fQx`QXyLJr49r09DA|QiJAwKVrUOsV*{AT%}%>dt*Zm9z~|n zhwD^8e6U2a0cML9rLdWWgioAIEdZigZN%Nqo`RmZ3eGh6@R_Ab?hy3r^3ltELP-hx zh0@iK*U2=KUICXa<0TNYU;A{7AmeiPtJ(nN73M0B!4D!hr$4G?RX%#5&NyCRmQBHy zMn$ZOtLxvbERck}{g|PRE@UMailM8B$5M)}%ZCMrB2!C+f)n)LpLJg!cwAmK#~`7eUWH8O}u2=`I2fj*K5o zd|c1sOGx(r)t#bu!PK4QU0$`Ue%ATHJBi14`VWG=*qsi!Ad~3l3>~3Z1A6h@i#mJzpTl(`n%7Q@YoJwJ^R``63Qezt%a2d?)lm~f|6kLPqFFASj8ej5~Isr`jGCTtt9lhw|!F{fY@V2(osdEHR_ZKW2o(!4X7 z*kV&q!wt{jT-IrB%2jcTUEz5N$p;5E*sN=SPrT-PM!M?u+3b$m z`_WDR8``78FVR*(Bqb?BhRAbI{ZM3`I==GO&3dy; zDYzhXBE{REnZ)-sS0gT=rfYop)d`g4lPK|+U#pSAiI5X|r^LX;Mit9|8D%V;NaTYM zYo%~w%a!wpyl>I1rLqe&lR8bn%A%>U#2p!}hxv;Iz$5rnWCS0Z@!BPT&@RHS4h}U0 zGo$gBuVKT{a&CKvRO=Q)S7MQV)7h7U?uME9>qHS?0<R3hQuq`4b@k65fiNRWv*zMbY4>4vB<=3^V1d}|Vh%L?$WGnu&m~CY26y0P z*J1Iv*b-~iQ7yyGlG9tNf|hr~(7Vva4K?kd#pjBSb+L9A+?jKzoY*znI&s~Ig1pfF z*WRbY(-cBp_utUw2RvK{`=Ydph*J^IUfa?O&b(;-F>qu%T9I^>AzXnxT35-CsX|bK zvKaWfUBNy7^LE8t?-icAJ{cJ=T=?~h?6mz=2%?RxDP{eUL{l60_${JvCo8dU`tAdq zRM`0TQ~0>u{I4pcuebtY-UQk zPpbpi@n&?TMr@|wo@b1p^5`l1V^uE}UP&#=*{!JhFZ6`|Crj+5NmCy_nyA0#31ndD)=aS6;P#!IXsVT4lQ!*uc@fiG>uyW{GFP!yk3m*QlxAUf+_F7VXZy zX-WO0$U3bmj;gLabPI#I8$bC|>VKDo|60w^Lx|(E&E~t$CVo_gm%r*ZkvUf15>5W- zj}@JTuV2KG7uZTZd0NMV*l*&qSMXL1g;_oj6 zgY9G9-Vrt3I)IIcIek#Ob{Mn#)*pinDqq=QmuSg(Ag1X!v3(km=f%M{ax;R{;y2$| znauFS=+n(f@SRo_nnxeY>57+FXuRq+Gu|~ZTFHU*AB))ywbLEM+pR5MBaVNfT5dn@ zB5ii|7U9T`sV$=qB+K_s$@>;13ESQ08}WhliNiAU$2n2+l3~Tm(8bOU&)xbKehfpV zK7xGOd-TAzryI!AG}2J~ZG-GbuH=<&jS5gPGLx9%SAFc*65 z=4$Qc8krOGYu24h6^+6jkj#?5%}4|=z0;`LN_v6b8KE=<)yhsw6_?kp@@fp9OW^yT z)z8>kPbx5X{B9oma{`&$Id#sm1x{!&2(3A99S3EEpn{lgbM=DYU;{w35RW<4U=}{N zHy;t$e3+mk!t@+J6SyUa&3k0`TZz5G*C)*w4d_-it}|#H#7moM8(7Y^1(r4pvza_e zJv4ri6_gWa8fP%G5i`Np{PaC2)xwtE@EN{uXMH(4 zqGyXuLhQU&B5;5I>~9;vuZSf-~OBi~}?MnA2f-}G)EXlvKA#DS7a zxht|%aY*K?4Gi8I{Zt#fWDVo7?47oS39Pt!S!eY8yw)(m9C}18Xs?uT3>9x-%2cuZ z*M#lgztZwMisnfu0cB0jZN^-pcc0x8^X~PM!LeZpTp0N59I#>3B8~ssFKj!oDt$?nroZo<=Mqc~~f(lzU_60r@Ri?JT62Llcb@bgMRUK^N+C@3h`^bAt`;F+~ zC*NgQ*Qw7qy&jNPr_ps?FRj^v6`|ysh4)$bd zDFK$yQ+q-z8F$t1&(6xSUE5Tj+^{>9#UG2T4Y322Q(|p#LHf)?xw%HJjk>1(4g+WN zV1KJK2bw$JBV9*9!RfR3{O;@2@JC6u?_hqKrRb2crRK=|-y)Qwf-!6dWYz*iM|pw!)+l?9i< zJ^DE-+aN`fLkZ}Y^=>vXZ!P1xT+RnA43oVRUl_2c5SM~J;?cp|X?fE|KqdM+iCikH z%dN(KB(k74Q4dWj<@){+rPUlVN54o}^+Gc+1y8Jf% z%IF4lUpWfB-Kaw%|J1k8TVCT9Ucn99XE3uSCim}h^0Wg;%3M<~Y^u@6ju9ymdMYrqc+(*Zw&zWYY!m2Q2?m+|$eLXD zhcTpEl$k_YMRb_ib`+(q_44V_Yv9{zM%m$)%{cxXw9{sbv(4$gFSW+TyDb38_eO z8q*ll%eal08CD>wGUh8X_p9DPBq&Q2bn8-PD~Wj=bkerXg-5`uH&c%Zg<`}{S_uX$#`i*ga}WE-*JxK zNP^pqBDBRZI00E1@JP-F5>x=>?O}Jmi17c21~ODV%DFbTL_k<&d#TbTv0+-ygFwTy zC)>FI{+EeieY3JJtTqTi3aKAK>V(HDTwy);Gmvgrf)~+FcL+z%W-GW^H2(p^6X!``%R2JaPiO$M?XTI@uIizuwrC^pT#-+~S z)-H~4Z(^s^N><%s<25r0|8ORgNLJh{(*Ph%E%12sM#pPx1R;tm!|(EoXd^%-sQH$v ztQotOIQR1NXG3*b>po2?XQ!V!^z6iI4OJvjIfOmTTAAs|5q36I_@Tb?2_knr%Xe<3 zW5ikqj^w5_mt@e|6r5VmvcG%we{hAp7A+HKJC^jgHJOB>XatFA-`1ct>7>#X)Q~$# zs-|1E@GHt5bX0mXPA3#67st~FUxRVFt-D-S##zuUIL_blT9j~aSX-u4T8-dKBRk4E*GYOo!)H_JW}cyy2)GkXs+EQ^55 z&&_EeoLyWlXb0g!u^LD1xVgE#d!z~$cW2{MA!l!Rs1sVqSt*wuioT*T{8}BK7DZ%3 zoH~i^fA#N&E0?e>O`w_NpBc2?U{U=nHg8;Eyy|ImtZ19okdXt)gbv?*zLSXArTRI+R#=lmr%NkHN4|F_>#_)Rj6c=hF2U~ zn=}RBLng_|$sb`%l!Tv|vCcSS9-;5=p}UCLpPXmkUmn~WGa+BBf0kxiYLO4K_9;Jk zGP68ZNb$7|aO!UVP<87_rmai9W$UgXsA9xyVfk-*Zo`>q#s*Wck5=xGx)@$Wh4Ap^ zT>U0*2RT-Wur)Hu1w(zyGtsi9Zf>PxrIz^XIBAaMsIYsE5kscZXdb(EY`S1A46W}X z`Vh3?R~Dp9St8e09VOPLFdkWo+(+sd$wsvj%+QuC4_7uj0|tHB_NIx6?4=q6a&d2k zv{#;uhV#Y70*h#rOFIdz+pGH*iV=djv}Wb=0^-yzQE9J-gsrAPrp$?-%XmW$=3$c$ zm}J?0HWSX0)V_$4H6rwc7X?0we&xMnX*N~-B~QY%bSPckWxE^^3ZD*3UVYP3`*e0Q z&he1KZHTs_t#uJ+s9$z6jpYD`mf>IR_}CY} zYn(@mc54&`o!j3W6?>PIH2Wm;*VhNro>%tqHFn0-8GToA z*;&7@KX2?rIIOMnzV1aPC>iq7~5g~=0^%EitGRlbV z6n3AE$!Fgycd#EmYmhcE?XCX#>+Vc6>Bn&c$f2K@8F_|w3w)(F{LbkIfU%ibam9v? z>h5#|;xYRzAD`OMr(cN!%A;l0s}W{K)n=*IN?03z%z#BU9RB?hArPgZC7aMYTcRGR`OyK$GO~?Q&<1$P5G(MKAOo| z(Lv(k66|@ysvdQMB}u{{&H!U<^02HsN#t-d*Whasg}gG^xFVtgGFwmR70kpn{*xy= zWYwiFT^hN~r~2eF^_`Kvb{Ao)ss6CJAZu#g4m*6Bx=bT8i&c3^v*E#b-9VF0zS;yAGAvR3oT1so{_+t~RCt%+Uzzl5A5%) zj^VYQgvD&OaxE(*&3je?fcmazBFn*e#2wJ#Qs-HKZPQWvkq^gj&5xLK_(={fz~co5 zaMKFl1#EwSO?poT3xv_Z#E<{~*Yx{#+yRb3(GyRfveS6C1FQMYa+7xzpXdH+hH4!z zH=fRY_A;FiOb?lOk}YVP!ncETx$L*Q@kgru+tz&VZR@yf#&*F15d}qOz*^I;AT{HK zmHxauzTIofxHdv_^tR3=zyl~@Tfb+01xEFWahPu(tXJTslnNB4~nzG%=U5WYhtAqI< zpuytR(Zhh#`7bOrzX)mm`H;dbOT$V5I4yNQ^#O`J&)wsKn zjKO%Ktyh1o=@vGas8{QTF*PjN%)a(C>hry{W3p@(_3l&CBkJQ>jh75@yRf$*9C2R& z^MWrA3%`;|&Hwo#m#BG~$1z!1y=8qaOf`78AW1Mg%&NvhOExum##s$8}NYTRQ<+KMOC}=2m+jp+E zR@2gBp{{}Sq!x?artyRzv=?=G#>l`7yz3xNGS-6JA-0?(Fkq`c#)b_TG&c5^BN^@Au$%|K`8}C<&PQH3}H#M=cv*)7I zZtUA~`3B%r&ej|B0g)Wf71$(@tl4~&OMs%Tgi%pFw)DF^GjPYHpnrG`H&q=F2&pQt zm@v95LDBnjf<+>P@^tqROKek;3t)JNPEcM?%l$s|pSb{EH>xj$_)dqZG3JhkFn&Ai zEe;!yC=S_6vj%Fv95@e~cjJ(7ctjR_TmaCiw50E>mx}y(FXy07qapd5j^}_9^-(5* ze}xXS6_jRujg!2LG;3@MqIb$&hJFDyOwOz;w1sq@6l~uPBDQ+D-r`_H~NI-nWLax{qg0w05Ev1fhqdo zwD^1~px1n@h5&4QwPgmnRT;>Otily%R400TmdtlWbFL8oEdcc0EArizPIrfmi;QCY zQpUC1eaAhSOoL0w2?mum+$mFfw_j(WqXvBaZhPQejq=^w%!GUzbSmVz9b-aI-gFDT zxmp-b$*`e**9k2uj|(A|`%c)RDZn%;*(%%sd; zk^YUiZvP|eH8G{OJ_Wa!eXl<(81M*3vM1!Vv?J}epvW^PVY?AgFDm-Y$JDSJoF~{H z@z9bA4{s6Sv*IFv>tnWavAaSc8DfAiJQwE0);0_CUJ5^;{#6p-7utitVkU%+XJcol z329#)x9L{b_d*$1_PQcnvOE|37qe!lS?FpR0YOS|6e0+OUd8KU>7v zi^6rBkQ_*;Ll=h&&ahrhvHn&l(+#sa&#bU)r{Ub5(uaT45(OCt`*8*}Psb8K2NaB z&Twf|tJc2x>h=uLSs>M!{NaIFJgU|Fc$vQXoeUka#eH1r@HbN7e^`FwY8*_ zxzyt9Lwj>mslru<_8e^c@FBCk!8hxwZB~mBV!NptL$SHqp>cFNL=EC(NPR_;eRtS> z2;VL(yr1mRAX}J1qf^3;}a273- zCnJ;FAZ1NmI}l&EX7QZtS)8`g(|e%6&7sNSb-8GP#~To9ohW%mckH9_=GO*>%`7$D zNCwvqh{RH4`PdJ*YsN_EN1dIRXy$bjoUrw1y{1{L3extCZtBED5y`@`7OPzc8C@MO zOFxUroQGkWZ-Kjx9;rw%U5xJyCyoo+`-vcr{R|u^rf6DbLEQ@YE3T?COr2Djd{*-; z?|ofzrd8OPrE8ZM(+&sY>jGk1L05B@KyOq(nvjm(4H|wc#`1?K2!|;>f=pkr397az zZ+TdnFWcnu5-=+{0T5J96koHx&OmI}z)mri+A}k_&Ii3FP-4W)U+?ezKFVl1ws4}Z zp?89%w^-jrAhiQdBepM?;2GyVn6wHCdf1k2+y-90u_N@R7U<`-Mw3KL&B)~EeBK327jiFpK9QYXe#KCq z-p4RoT$W9->=vPnSSIE-{?u|?b}0LLS1dcQcVf?FW#dP2UuikBKE`xXv@o_=({crV zBYt2YRtpmYu}0d(H+PQHHuk&MSL)Upa#PaA+8aSdu3&M6o~=dOZI#xwJ@Me6A1Jp9Lr|3NV3|QIkL9_ zQdMQT0%F<{id(SnJ)B|f&sA9~p6iw*{on$uxO~{cIE2-e?Ad^{zMi{bKtkLp7Ikq@ zyCzirt8guZEyo&f&N8#L687gXXd1;NFNp!a8lidSWikj~OH`yKXcb;F{TvUxL({+A z(EzR;-*5Gk3lIa+Vpsw7j>l|aN5k%EumI=mud=pr{R@JJGHU`xZpYz$z1src)dux{ z8ch4L<+MA61f#|*P$=*HzE6q)?wWuv(&+r#qkx$t06e**0i0s#dh#DHV}K{uz|`W? z(MJIg`ssh5t3Qhe=6u!odvS^L5S;u!@5B0pS#GqLxlI|zkygF`17N~$F#raOlBdOh zX6frk`^cWs09VA^DFzrUD#CD!?`?vt$o(q7LwpXdQ0)JO~&3 zX)*2WmR4(!jcQvj*|b9Fp^sk%Zy<_@m!8e)6Mi&=2OfO&Ivt7Xl$ zvZTwqpuBiv=DnCxgqa+6Ae3ut5&jIy{ovM|E&eRKQ*3NuzfvS zjkXt<`QU$&GKVn(!9ohbZGQbN&O4|$gL3~p)ag_aD2LzpCAVr}kuq(KsJ+j+tD}mW z9rZHMt%}43@neLyn66aF-3!Bt$Fd!yZHruJk%!*urKWU519$!P0s4dH9zFa4Y)FyWow-WP{yYi$l3urH0cfzKan9j_CrRO#dud2E^Wg>a zrCv6`6_77IaR>Y|agQ|t9Z?dVnQzYb6(VZ=1jdC`X0Fd;1YbbcB&46N7YcbWtICcn zuAoFt?p?dXzp~j0`l(-yobLZmoqW;+Xm`VY5}Ahdo6Oe&EECG?iT7V_*ZOgbwjL^y zWu;l-0zjP9RS7e)8s`$;T9MnV@%2BBhMh(6MgM@c69*`^PY4QM_aD8-bi5`EOgn_E zU=zNripT8a{$?bsTbSQyf738IoyZDu=yo@!mFLv{01Pz&*C|5QI)x-adj(x3`1NMp zmO}pnZ*T5^Ov8G3(*W$P7@!3k-~k0>NJ7M;+h?CNx@TF`_dNHBk)TEi(=7{{E+d|1 z33K~jo2iKb75#r>zc=S4!1@nV6c^z7HyPE{&NUD~01j+G-A!3gO3sNSOzw|PjupUs z5CCF;1U{|x|E1?HP6%1m15Jqm+7$5Ypq7|BfS?M0T?y6z>@xNT2W+WMzDoH0H?LF7<4Av)B^%mMg-%H&E&!PXJ1gKZec^?%z?^lPqc8du6 z?bYSXK&1#HAXD}8HL?PIR^w_t8_MbW+ z2AB%{2V&ia-Y|^5$3yHtd9~XdJ|3&lKN}BqcXoD;fsBrfyzdl&Pu|I`oadHn&dF)x zKXD@M()1}qS=gS!pr82j57XooTQZZ*0 zLEBBKn|blm!-qrPWb@y^*xG&sGJnllEX_A2hE=@(ay8vp(He2%tW^9!v>bv0(ma2Upu%chUtfE&P}p*=q$G(VZj_nYD&L!3t)y z2H`OIvvJD$P1v%bxT(sf4>lO%kJieMhff-?>nDeM|GvHT8fPsN*=zGDc9<`1f@ghYYP@6>payN4gt1d57_P0aoCg@ZS4)w%^$?W~8` zg5gb5A0MAD4YynsLHjv+MR9S5liHb`Jy{m9g}QN-F^QD|;76yekK6s>SAX2fFU^)N z3rCkmc@Jsx$}Eig6lWUUV+1pA{eH%9vzT~Hv@XYineOq9D;wjCQ6{(cO%n0)#u(0$ zoT*4KDrhpOLNa`K8PIZOE~9{XVr-0Ae36_zOD;QbB{EMdrRTCtq#4_|EA0Y|?VK-f z7#JT}jRCYOMeVlcx-FV_`33~x%$sn`t2UHGdAtFRVFyoMr`_{AX|nvW6A#8jV}pS- zsbSawtAa1uK0J2Um9!JLR=!)okC!&Bm$;zIipt93pgJJ)H}KEw$Vy6Hi58GO+&ql} zW59iuEO_3F3dhUR5nDbk?4UM0yrBw6nNx(p;{W}XZU9*g10$bF%eCNc@XIV*qtD7a zib&}0dCFW8!SS@~yzbCq*|m7nNO<$@+h7nO7Rdy|23!6DyXuzy^jraoF-{cR!R^fhlDft9|m(xWPb=*KEa?R*#?rh%emCM*uy$qXwgwo*MoLk`?FM) zZP>;u3abnomp=apkaM_L;Nv1qAxh(m+hY#DB|hszZ;Z8<&Y79I4^1|_C6+b0Ct1`F zR3<^;t>MGR#)*fV6w_>wAyehGw2X;3zn`IAiqBY8LN8 zWH*jT##8ZPcYNBJ8VIS27o(W|L_uZM!82fx&@JXkpPphGjYfMZ;x(-Ix$@7ig&tX> zwBHK$mJu{Jxw?nlsWEBF=<8kC%INWKS!p@BI(ZOf%%xIfVw%f>f)!j2JwUY;uXe+f z^5U3o^%mW-7cX9;P$3?ypWUjc(2E$uBsDrv8=lW z>|aM#mI^W#;{82e4%2Xqy3}Esgysz!rVY|39s2mkW0!}~7o|z>^7Ii|MM3VEPoF-G zbE!W_bd8~cU{@$m`nzrKhHb}MQG?XZEI*-BLG)r8(<)&i_f|l2s)!ka)(bj8beTufF-%mlf)XrBQGuP1iI89r&T_Ly=Ldg$19HWb? zy3?D_sV`J$LTD`o?@OQPe(BlkB~}N{N&WeN?EfprEVNaj|3jgkHX3kTxYzw%9+)L| zx-eoW77AjO-!Q87^-uordxwU~TKi3j_h)8|Puu!sCXbpib~n?ng1iQi-<9(v)K%{F z5R%JR6s!vxG7x1fgFen~j}CUkqtG;ppX2YUA1;6|q4l<@Z`k$9FY83utYDaC@rl!y z(|VDzKA24ZP22jo%A;WggmT$Kad+A~n7-OW1DVR0>jaCMGn`4nV3acRp%j3S-6hI! z)cllYMc|##GSU>AqX{YozB99T)wfi1i$!F?`iD{R0xaD`--i~g4lbPL=Eix? zTTz(5q6MZycmG5tvh$oYNAhm`a=t4g8-0SsvKOMgu;o~?iL)3x6AM=rWNO^WM?tBV z{yea}CJ8c-Dgf^9hepqmc8JO&ihEf5`Sl-02lS4P>;~Ot@&kpn-D;zUREjegWFm4g zTmOc^({fntjy0fR;pw?kXa>O}k<2NmMjm*a4gfsblsln~#eFDL^wh!WY@9LHgwb&) z1nSkWg?zhQwpZ^-f?p%J1G3r0%;UA=pq}-Q+v$bBh@{^n!!K zcrkLalxFy&N+ROl}E8NhqJkqE& zYgrJ`;7GV6D~k%=>=Ia3t}ch9DPsNGmzT)kxfeOd!Ev&qqwIRsVm1(#mZCY|aURZU8V#US< zsAVeo?AcM1NT})o=ur7y=DUr)CcDAgR}*eFXCWEq=!+eMB}FnryU}o2rKNgj4O0MS z@qkDqWn>f|JTC6IIrH=4KO2a7;D(1Wb!Tl>1^_mQLFDz9 z!C?Hs@l(#H9H{~xN7_Ew^i?+Rti;0YDPR!8;~m04fb9fuouOqG%m)Bx@-vnF>YPd* z6>MtmM`wW67sj|#TC?%qogk>-yWIjDL%Xx)VEh8mlv@0xE(kv(eFI!IHNUyg=mJci z_2$UeBAtgom^c2q&Tu^V_q*^8kxnHrt})GZA)8vT`9H^W!=$a){13f1oIpWP8FEh| zYRT>)?(PvZ@C?PnUI+R^=3GEp4Fec@x#{F;zlecwEqL`{}|8>*e|l3m7v$; z&!or8VByT%QW9S~S=>0|`|sM%9=@eXJ{wite%ZL5pR8w!n>o~uy@ePvv0k9Wg|^(h z_aD|e8IE~U8?BpcbmND19ehfn*49xKhg=7%O7THp?9{7KWRCyv^C}U4Lc>2s{Cp50 z;QK7-B+V<<&r;{UxMkDzQ~#*ny-aaRFkl(HQz!^WYC(=2tmfJnR|CYWLx62Xe;Gk2 zJOclTOGhTqNX(c8OP6moJpXv0R`jip(xw+|&SETbUt2F}jj3tiVituBrycBdy4zKprP|So`ipJSigx(l##z zbn6k&v%K)2;kx-K-m-37_lX~Vkd!p z$v;w%|2!DlCSxz}PHb>c%;1%i7HTV~Jqc8A9tr0Ds@f%1k#%GGZoxy_c<(OqKsa;h zW7+9U6qmYK`fL$n;S_sCKn2gto?Yi&HA4opMB!e#AaZ55wD>^&PPk=ddth407NHb# zQ$}GkVfd#<9P6~?h4{lS14g01bpf>M#yymQ1V5lDIqDR?pn~TE9zCBrfZC>c{{_y6 zUW@R#n0?i=Fw@9+FLZB`{ZTE@)!Qovo=*IP^`GUHXqgl1C$BFVkkXj}M$EIo*SWtN z#;BW116x~LeU>JQg%x(MAg3{R)h{7+Ua_<5^}tFbL`J?8Ts(P09yphocbo4$?T{eL zh9LZM(#iO*cV4k0E}dktnJv$7ADT&%6S~Zre(h!U{-TRp zSrXJ$lUwUh?cTg(G05el)}~L@`btZX%z%ZokJ+*)5L4MPdB(h)gO1`<9u@Sm`=CQa zvL;agXwU${bU80N*Vc<#21!?Sqc&*!-a=84sNVv;eCfug)Yl+7Rt?%09Ox#XW~%nQ ztPY+Xd~)9=E8y|My}PhR?Vx7^#@_<)@?FsM*Ay)cfcBkXe+x*6S`n6{EG5C_`Tzbv z2YXM>;fLPEn<$%E0*Z-l6wQ&$*)&*yeW2eaGhSnvuopHwf?EY-J}?UvpVMuS9qb~& z5_q@mEp>8|eHz?3E;RWLE{OiRXO;2oA zhlqNkP60S*ccK(9vduv)#&Y;yXCD3+9tJEPFXQH9*;v&Zwg0nS+}q%sW+I z_5Rk>f)TKLW}PP_eb0<}m`vqA2w45AZ7>bDg&u*+%3nGpNDUE$12XwWeD8wmK^3l@ zz9qmw2yNz4&H^6iGXrzx9BkA;#U5iLHTc5X;~Tq_X1-0}QvM*62~X^kuYMf8v9WFb zfk_ECFA@$aw_pczt9SPF*mKZoqTEk*0V}%! zHR@^y<89>ww$;|lzO9=Rv|yj5p}UCzEj6HDR$)IY<2Gf17iRv{wRbVR|v?fqHwCxce!DkS^I5bvzfCv{63a@a{fPCa~Tw2(7 z8BGP2K7Omt*L+Ouc<1`-l%BjT3JD#ForckHX{3S7N6*+Fmb&o@Qpwk`C1VPh=uffi znR?|(1_@~+{jPybuYgy801NA7b8>95p!Xw#%oOzPh1vKSA~baCq5SIc*PSlGimgFf z3!J*6^WBN2d=a-OMI|-$fZV-yJdb{TDj^I_ggb7mzI?=dOOZ+K$@#jCa(6CU)4r7=C?Vg_5B?buaIU%a41@CsC-XhI7E`1QjcD)^GCp1j#qqcNHt8 z9q4BC%6Dzt=>kp}G#;qF{h6T+HYI9#T}fiKA=I5+mq%LzRL=RJ@`qQ&44Jd4D7GXp z|MZg#bp0_6`e^>r*pXS)lSS7(L9pB=f}1ElY2}CDaJBq}rG5+IDB#wZMFn50oH0+9 z)d_g0XVc*x=1-f3PW4A%;9C|(Euip6XHe*vtmmj!Jz&_G^Ky$`SYi$j8p)VWNe zfe<5_`TY{mEX=f<*C~P$vQ==ewYtZ;I$jKDIQyRk*nz?CE%09n;L?#=U| z$nK&t>#SddcH*r8$)Ci|cdm($S0TJ%635gIUFO29M70f4BFs9kBlX-uC-^p#=;K zQ7d*u|Cv+Af8g26i5`2V$6kM+X3u}QGDszK-B)V{qbo8vyc(*{b#-T-cIAn7x&HH&)HwjxZrH@ zf4Te}_Aja#c5nk{nUpHO|F3@jJGWkOLixk{)l&I?mb1ioF_oH1H*yN9vQ}hx%>RFnl*y)Vs93jC*_U+bPJfNsDUOD^YvcLUlLFSKrZwpL$9&g7mGa)GUu>HwcMunZZJzBf2 zt>67s=|J`$)tg#O_ukJ*Z<5P3TK4dtn2CN)>u2j(`Mm#^Y0kNC_)plaZ~w-xQc>^K ze{MDS)U0Cu&E%g$)rn2hLV&GWo2V!GU)(+X{_E{FXEJ!SR--`|pE^?3L3_M6t9>=sqfh$erTp#P zyZZC{e@q9;%o-9N&S%o-bP1VfvOXrvpH=6(@9q~r`zx|tRCXTU|N6(%mH#R&R`Gq_ zGqY!c(#hw4_TRNE`*+a({;`!a9Glr(_uQ*n(r3@aZuTDiGH#Q*vWnGMI{wzuB1XUGQbUVOicq1?OGN3869yw{$m=k4u( uUURr@@tvQ+;Y8E9uf>d17@~}7`!9b}Mka60GQSI;r0ePG=d#Wzp$PzKkVKdO From 3fa7f15d81536777bda395c1135f48f875865707 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 2 Feb 2024 07:57:02 -0600 Subject: [PATCH 35/68] Automatic changelog generation for PR #2674 [ci skip] --- html/changelogs/AutoChangeLog-pr-2674.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2674.yml diff --git a/html/changelogs/AutoChangeLog-pr-2674.yml b/html/changelogs/AutoChangeLog-pr-2674.yml new file mode 100644 index 000000000000..110fc871e171 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2674.yml @@ -0,0 +1,6 @@ +author: meemofcourse +changes: + - {rscadd: ACLF Syndicate Inspector ERT} + - {bugfix: Independent background icons} + - {bugfix: ERT Outfits not having access and proper names} +delete-after: true From 559c6ca075e7f189f3abc3146c85f1c389765931 Mon Sep 17 00:00:00 2001 From: Bokkiewokkie <43698041+Bokkiewokkie@users.noreply.github.com> Date: Fri, 2 Feb 2024 14:17:41 +0100 Subject: [PATCH 36/68] Adds more underwear for Kepori and digitigrades (#2690) ## About The Pull Request Adds a bunch of new socks and shirts for Kepori, and digitigrade versions of the pride and grayscale thigh-highs. I also updated some of the already existing socks (like bee and bisexual socks) to use the sprites of their grayscale counterparts as a base so they're not just a flat sprite. On top of this I noticed Kepori their left arms and legs also had right arm and leg sprites and vice versa when facing east/west, so I removed the extra parts from those. In practice there will be no noticeable difference in this outside of amputees now showing their sides correctly. ## Why It's Good For The Game Now you can express your pride as a Kepori or with digitigrade legs! ## Images Kepori with the tank top and the bee socks ![image](https://github.com/shiptest-ss13/Shiptest/assets/43698041/413f292b-10c2-4423-9fa2-fec28ace4efb) Kepori with a polo shirt and nonbinary socks ![image](https://github.com/shiptest-ss13/Shiptest/assets/43698041/750a5ce0-e162-4d5a-9507-47f026e7cc59) Lizard with the trans socks ![image](https://github.com/shiptest-ss13/Shiptest/assets/43698041/c296e97a-e636-4257-b50a-6743b60dc4c3) ## Changelog :cl: imageadd: Added more Kepori socks imageadd: Added more Kepori shirts imageadd: Added digitigrade pride thigh-highs fix: Fixed Kepori arms having both left and right sprites per single arm /:cl: --- .../species/underwear_socks_kepori.dmi | Bin 1636 -> 2905 bytes .../species/underwear_torso_kepori.dmi | Bin 1241 -> 1514 bytes .../clothing/underwear/underwear_socks.dmi | Bin 20805 -> 27123 bytes icons/mob/species/kepori/bodyparts.dmi | Bin 1375 -> 1368 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi b/icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi index d182ee4c238a4baa02893209ec62893efc856e65..7548aeb3a70243b3bd08e61788cd61aa0a6975e6 100644 GIT binary patch literal 2905 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 diff --git a/icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi b/icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi index 5574cfb965b7e63121580f08c58f90c5246955ac..19813d4e29462c2bdbfa412239f4f4023e165de9 100644 GIT binary patch delta 1432 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%0DNiLUhMQ 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 MboFyt=akR{0PE`WU;qFB diff --git a/icons/mob/species/kepori/bodyparts.dmi b/icons/mob/species/kepori/bodyparts.dmi index 177efcbbf51ab3b3067421c686061f579a580192..f19aaeacbe08ebafdf5c90f7fe8fd985e6ba2dfc 100644 GIT binary patch delta 1108 zcmV-a1grbs3fKy;6ajxPNkl`*^AS z64VgS##i-uMcX}!)agB3t{-ZU=i;mS6m6C$@A0bWkIEe+#MgiIC5m!~B7l?7I>k6i zqqX)NpZf6=Yx=b4Re~5`meMO4W<`S-U)7fkD>$K>65**Sx3kn<;iB}X)a9zaenZeFPy8t* zko9W`5D|X{e)!ffark61xef!+Ev9%A637{_CL%xh@{Q8^d(RXT-PrQXK7^mBJ?R^Inyw~*s001~K!}kBd zgmWkGalM51qeaL#*}MC=UgO`+VBFt7m~nsqV8;FZgBkbtk7n54Kb&EI9{>OV004jk z5vmZo7bxC1C}mQmy+FNE>MvASD6mo{mD_6{?(`wOz&8q)I;c>{(b_9Sol0sRymyt6 zYaLfeKxuz3)LL+F1=J$(Af-+ngk8>#h}>g)Ej`|a_4Pkwuo`8h&M&lct+e+OaJ79M zq3jqg_4z7i(cim??-`W7Wz5z+)tdhy0q*_MVhNCkhp-M%V&+xhMb7eDf^Gs!b4{7^ za*E4soPR~BB};!Pnw9nT-OaIj(gMoY1g{Pc)VN}oC{ZUxhJZ00hT>JaR zNTPqg?>ZT5sLpgsRMfJA*Z#gKy6o@A)IP7ag{wbNfc`;Cr^%iZ+%)wss_I}?`zfz7>i(i{AXOW!)jMEY3=>-=qs z{cijOocPjBSB?CZzpqLdT7gnPFn$1DK1R_o@^?4)?f(7ge?$+T9{>OV00000002w? z0MMr8?;D54^aAH}VE%=czi%As!wX7e1M@Gm{C(rlm|jrq9GHKhQr aS@;KFB^A&t%D~~ delta 1115 zcmV-h1f=`e3f~H_6ajxWNkl;dYxa425ecxT%5W{oi)7X||Htl8B)+=iKin zvZbpSHjprVdjkLf00000006+t6Nnt6h{B;N+Wt*_fn5o(n!v^3;z|FezJVMW$e2O1 zU!rD>+~MEUHyGOPUbI2)@pAo8=0@xMQ~aCy3~e4S@9EmspCf-zGBQy7+xkXI`T!yE zs92|zCT+H57ys1uKeDCI@?IpU4rVRAtYJ1ZsQyiTqhkeBg_GqWjn)ci{!M+|D=^6l zC6HyYRXJyRO##-3;P zE{18I=c)bJCr^}u_1Idn9M`x0X&lSpJydE8ax<*y8ytW7^Ho68<2}0^prfyV%rMyc z0002IFx}<ZqLM9Ed19+Dq&4F08Hp zA%oQ{FD1TW=hA6!ClHE#?IE8rocr@d&Z56{5#KY&WAmJ?=Tt5JLjv4-(_(QT)8oV2 z&)KJ}3NLb&cL|yaEas9j%W|sA?To)7_mZ`LDXM>+_AH)4`1(n;tK_daFPO~8No>*o z)dSb;qEI_Ase0muA~=*B7J&^};hur04<(_kTPdvTrY`WCU03Y@*Aw{`#$vgerROi>(0pR#&)s1!K{+Oy1wrTVbu52SQp^j#TGbM zxvP6AS#(yGU{&AugfQy+L$OxE_`XY&mDKv2Ia-cdoARx`?+Ibl_tVI=lZd_D0GS*r zHGC?Ebr;UUy*aEFKMQc~krVf|2#v#sP`!VaJev@IIWM08000000000006>FRuk1VP z-&UP}bA5j|e6?MrgHhO8-`@}SyV&X`l+E@1-4Oqd&rW}hY#X=N_y3J>#%~194FX^F zGH74$f1ihos{mZ{Zk2*g9002_} z000000001>POZN0oSMcRDyJRs7i#r==hPwY@HeYE;xE+d`_8Fp+@aao5r3gp-+x-o h6Pz6%006+N@CTMX7MS%pB*y>%002ovPDHLkV1j!_Kehk> From 05e51b4c184d0590b61f35ba9f355738e36e44a3 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 2 Feb 2024 08:13:05 -0600 Subject: [PATCH 37/68] Automatic changelog generation for PR #2690 [ci skip] --- html/changelogs/AutoChangeLog-pr-2690.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2690.yml diff --git a/html/changelogs/AutoChangeLog-pr-2690.yml b/html/changelogs/AutoChangeLog-pr-2690.yml new file mode 100644 index 000000000000..fe04b30d40ff --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2690.yml @@ -0,0 +1,7 @@ +author: Bokkiewokkie +changes: + - {imageadd: Added more Kepori socks} + - {imageadd: Added more Kepori shirts} + - {imageadd: Added digitigrade pride thigh-highs} + - {bugfix: Fixed Kepori arms having both left and right sprites per single arm} +delete-after: true From 878a80ddc83dda69a2c8c9702643de0f9026c2f5 Mon Sep 17 00:00:00 2001 From: meem <75212565+meemofcourse@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:36:16 -0300 Subject: [PATCH 38/68] Ports the Requests Manager, Minor Fax QOL, Adds factional offices to CentCom (#2653) ## About The Pull Request This pull requests ports: * https://github.com/BeeStation/BeeStation-Hornet/pull/9408 * https://github.com/BeeStation/BeeStation-Hornet/pull/9236 This pull request reverts: * https://github.com/tgstation/tgstation/pull/70072 The requests manager is now a thing. ![264860380-6d27a710-8ac1-4864-9abe-4c13f4885cba](https://github.com/shiptest-ss13/Shiptest/assets/75212565/dc3277d3-9770-4450-97a8-6b4b918cf25b) It also adds little offices with fax machines for factions to CentCom, which recieve the physical paper and can send faxes back (though admins can still make use of the fax panel). ![imagen](https://github.com/shiptest-ss13/Shiptest/assets/75212565/1abb223f-1914-4ab9-8240-e2969a4e47f5) They can also fax each other, if ever needed. ![imagen](https://github.com/shiptest-ss13/Shiptest/assets/75212565/1d551e8e-cbea-4116-a608-f319411484b6) ## Why It's Good For The Game * Gives admins the ability to see a very easy to use recap of all requests that occur in a round. This system is readily extendible to support other types of requests, should someone care to add it. * Better admin tools, admins can now send faxes directly via the new Fax Manager verb, and faxes are show in the request panel instead of its own panel. * You can now LARP as a Cybersun minimum wage intern handling faxes. ## Changelog :cl: bobbahbrown, itsmeow, meemofcourse add: CentCom now has some small offices, which recieve physical faxes. add: Fax machines now announce that they have received a fax over radio. add: Fax machines announce important faxes VERY LOUDLY. balance: Faxes no longer require a subspace ansible crystal. code: Faxes now use typepath instead of varedit. tweak: Changed how special/faction faxes work. Login is no longer required to use special faxes. admin: Add Requests Manager to view all fax messages/prayers/centcom and syndicate requests/and nuke code requests within a round. admin: Removed old fax manager in favor of Requests Manager, added "Send Fax Message" verb to send admin faxes via a menu. fix: Fixed runtime when ghosts tried to view paper. /:cl: --- .../JungleRuins/jungle_cavecrew.dmm | 2 +- .../JungleRuins/jungle_syndicate.dmm | 2 +- .../SpaceRuins/corporate_mining.dmm | 2 +- .../wasteplanet_fortress_of_solitide.dmm | 2 +- _maps/map_files/generic/CentCom.dmm | 1711 ++++++++++++++--- _maps/outpost/hangar/nt_asteroid_20x20.dmm | 2 +- _maps/outpost/hangar/nt_asteroid_40x20.dmm | 2 +- _maps/outpost/nanotrasen_asteroid.dmm | 2 +- _maps/outpost/nanotrasen_ice.dmm | 2 +- code/__DEFINES/admin.dm | 2 + code/_globalvars/lists/faxes.dm | 26 - code/_globalvars/lists/objects.dm | 1 + .../machinery/telecomms/machines/relay.dm | 30 + .../circuitboards/machine_circuitboards.dm | 1 - code/game/turfs/closed/_closed.dm | 2 +- code/modules/admin/admin_fax_panel.dm | 145 ++ code/modules/admin/admin_verbs.dm | 6 +- code/modules/admin/topic.dm | 8 +- code/modules/admin/verbs/fax_manager.dm | 9 - code/modules/admin/verbs/pray.dm | 8 +- code/modules/admin/verbs/requests.dm | 7 + code/modules/client/client_procs.dm | 2 + code/modules/paperwork/fax.dm | 200 +- code/modules/paperwork/fax_manager.dm | 154 -- code/modules/paperwork/paper.dm | 20 +- code/modules/requests/request.dm | 37 + code/modules/requests/requests_manager.dm | 249 +++ shiptest.dme | 7 +- tgui/packages/tgui/interfaces/AdminFax.js | 263 +++ tgui/packages/tgui/interfaces/Fax.tsx | 86 +- tgui/packages/tgui/interfaces/FaxManager.tsx | 317 --- tgui/packages/tgui/interfaces/PaperSheet.tsx | 133 +- .../tgui/interfaces/RequestManager.js | 184 ++ 33 files changed, 2546 insertions(+), 1078 deletions(-) delete mode 100644 code/_globalvars/lists/faxes.dm create mode 100644 code/modules/admin/admin_fax_panel.dm delete mode 100644 code/modules/admin/verbs/fax_manager.dm create mode 100644 code/modules/admin/verbs/requests.dm delete mode 100644 code/modules/paperwork/fax_manager.dm create mode 100644 code/modules/requests/request.dm create mode 100644 code/modules/requests/requests_manager.dm create mode 100644 tgui/packages/tgui/interfaces/AdminFax.js delete mode 100644 tgui/packages/tgui/interfaces/FaxManager.tsx create mode 100644 tgui/packages/tgui/interfaces/RequestManager.js diff --git a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm index cca97a317ce2..afa21c752a75 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm @@ -3119,7 +3119,7 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/machinery/fax/frontiersmen, +/obj/machinery/fax/ruin, /turf/open/floor/plasteel/tech, /area/ruin/jungle/cavecrew/bridge) "Ls" = ( diff --git a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm index 018739e20dc4..ebd333289382 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm @@ -1330,7 +1330,7 @@ "OW" = ( /obj/structure/table/reinforced, /obj/item/trash/syndi_cakes, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/plating, /area/ruin/jungle/syndifort/jerry) "Ph" = ( diff --git a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm index 6ed5ed67825f..3585b4dcc1e3 100644 --- a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm +++ b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm @@ -956,7 +956,7 @@ /area/ruin/space) "xK" = ( /obj/structure/table/wood, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/wood, /area/ruin/space/has_grav/corporatemine/crewquarters) "xT" = ( diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm index 66ab48f18a92..e931e0091d26 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm @@ -401,7 +401,7 @@ /area/ruin/powered) "dT" = ( /obj/structure/table/wood, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/plating, /area/ruin/powered) "dU" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index e2b1ff97158c..0eccbd8fc0d0 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -1096,6 +1096,18 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"apm" = ( +/obj/structure/rack, +/obj/item/gun/ballistic/automatic/gal/inteq{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/gun/ballistic/automatic/gal/inteq{ + pixel_x = -4; + pixel_y = -2 + }, +/turf/open/floor/plasteel, +/area/centcom) "apt" = ( /obj/structure/closet/secure_closet/security, /obj/item/storage/belt/security/full, @@ -3419,6 +3431,17 @@ /obj/machinery/light/directional/west, /turf/open/floor/plating/asteroid, /area/tdome/tdomeadmin) +"aIF" = ( +/obj/structure/table/reinforced, +/obj/item/storage/ration/crayons{ + pixel_x = 9; + pixel_y = 5 + }, +/obj/item/storage/ration/shredded_beef{ + pixel_x = -2 + }, +/turf/open/floor/plasteel, +/area/centcom) "aIH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -4560,6 +4583,9 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) +"aPu" = ( +/turf/closed/indestructible/reinforced, +/area/centcom) "aPw" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; @@ -6202,6 +6228,13 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"bbf" = ( +/obj/machinery/door/airlock/command{ + dir = 4; + req_access_txt = "109" + }, +/turf/open/floor/plasteel, +/area/centcom) "bbL" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -6470,6 +6503,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supply) +"bFc" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/wideband/table{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "bIh" = ( /obj/structure/chair{ dir = 4 @@ -6484,6 +6524,16 @@ /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel, /area/centcom/control) +"bIJ" = ( +/obj/structure/sign/minutemen{ + pixel_y = -28 + }, +/obj/machinery/light/directional/west, +/obj/machinery/telecomms/relay/preset/minutemen{ + autolinkers = list("relay") + }, +/turf/open/floor/plasteel, +/area/centcom) "bMY" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 1 @@ -6526,6 +6576,28 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"bRF" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/minutemen/bard{ + pixel_y = -32 + }, +/obj/item/ammo_box/magazine/p16{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/ammo_box/magazine/p16{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/ammo_casing{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/ammo_casing{ + pixel_x = 11 + }, +/turf/open/floor/plasteel, +/area/centcom) "bRK" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law, @@ -6542,6 +6614,26 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"bSy" = ( +/obj/structure/table/wood/fancy/blue, +/obj/structure/sign/solgov_seal{ + pixel_y = 28 + }, +/obj/item/clothing/head/beret/solgov{ + pixel_x = 11; + pixel_y = -1 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) +"bUH" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 1 + }, +/obj/structure/chair/comfy{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "bVe" = ( /obj/structure/table/reinforced, /obj/item/restraints/handcuffs/cable/zipties, @@ -6664,6 +6756,21 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"ciU" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/contraband/gec{ + pixel_x = 32 + }, +/obj/item/paper_bin/construction, +/obj/item/pen, +/turf/open/floor/mineral/plastitanium, +/area/centcom) +"cjo" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/centcom) "ckq" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -6813,6 +6920,16 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) +"cxm" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 10 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central6, +/obj/structure/chair/comfy{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/centcom) "cyx" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -6848,6 +6965,12 @@ }, /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) +"cCK" = ( +/obj/machinery/telecomms/relay/preset/syndicate{ + autolinkers = list("relay") + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "cDe" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -6937,6 +7060,15 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/evac) +"cIS" = ( +/obj/structure/rack, +/obj/item/gun/ballistic/shotgun/bulldog/inteq, +/obj/item/gun/ballistic/shotgun/bulldog/inteq{ + pixel_x = -5; + pixel_y = -5 + }, +/turf/open/floor/plasteel, +/area/centcom) "cKk" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 8 @@ -6980,6 +7112,15 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership/control) +"cUG" = ( +/obj/structure/sign/poster/contraband/syndicate_recruitment{ + pixel_x = -32 + }, +/obj/machinery/computer/secure_data/syndie{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "cVC" = ( /obj/structure/noticeboard{ dir = 8; @@ -7047,6 +7188,11 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"cZi" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/centcom) "dhD" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -7115,6 +7261,16 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"dom" = ( +/obj/structure/sign/solgov_seal{ + pixel_y = 28 + }, +/obj/structure/table/wood/fancy/blue, +/obj/item/flashlight/lamp/green{ + pixel_y = 3 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) "dop" = ( /obj/structure/table/reinforced, /obj/item/storage/firstaid/regular, @@ -7185,6 +7341,18 @@ }, /turf/open/floor/plasteel, /area/centcom/evac) +"duw" = ( +/obj/effect/decal/cleanable/blood{ + icon_state = "floor5-old"; + pixel_y = -6; + pixel_x = -3 + }, +/obj/item/restraints/handcuffs/cable/zipties/used{ + pixel_x = -3; + pixel_y = -4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "dvo" = ( /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel/dark, @@ -7205,6 +7373,9 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"dER" = ( +/turf/open/floor/carpet/royalblue, +/area/centcom) "dGb" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -7270,6 +7441,15 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"dKW" = ( +/obj/structure/closet/crate/bin, +/obj/structure/sign/minutemen{ + pixel_y = 28 + }, +/obj/machinery/light/directional/east, +/obj/item/reagent_containers/food/snacks/pancakes/blueberry, +/turf/open/floor/plasteel, +/area/centcom) "dMa" = ( /obj/item/radio{ pixel_x = 5; @@ -7582,6 +7762,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"emF" = ( +/obj/effect/turf_decal/corner/opaque/yellow/full, +/turf/open/floor/plasteel, +/area/centcom) "enx" = ( /obj/item/kirbyplants{ icon_state = "plant-21"; @@ -7620,6 +7804,19 @@ }, /turf/open/floor/plasteel/white, /area/centcom/holding) +"eqM" = ( +/obj/effect/turf_decal/solgov/wood/bottom_left, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/centcom) +"etl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "etp" = ( /obj/structure/table, /obj/item/paper_bin, @@ -7730,6 +7927,9 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"eAJ" = ( +/turf/closed/indestructible/wood, +/area/centcom) "eCK" = ( /obj/effect/turf_decal/corner/opaque/red{ dir = 1 @@ -7862,6 +8062,13 @@ heat_capacity = 1e+006 }, /area/tdome/tdomeobserve) +"eLy" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4; + req_access = "109" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "eSx" = ( /obj/structure/noticeboard{ dir = 8; @@ -7961,6 +8168,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"eWz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/catwalk/over, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/centcom) "eYx" = ( /obj/item/kirbyplants{ icon_state = "plant-21" @@ -8005,6 +8219,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"fau" = ( +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/centcom) "fda" = ( /obj/machinery/modular_computer/console/preset/command{ dir = 8 @@ -8242,6 +8462,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"fKt" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen/edagger, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "fLD" = ( /obj/structure/closet/secure_closet/courtroom, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -8385,6 +8611,16 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"fTU" = ( +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/centcom) +"fUc" = ( +/obj/machinery/door/airlock/security, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "fUK" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/corner/transparent/bar, @@ -8449,6 +8685,12 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"gaU" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "gba" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, @@ -8485,6 +8727,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"gfJ" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) "ggX" = ( /obj/machinery/pdapainter, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -8596,6 +8844,16 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"gsx" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/sign/solgov_seal{ + pixel_y = -28 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood/walnut, +/area/centcom) "gwE" = ( /obj/effect/turf_decal/corner/opaque/blue{ dir = 1 @@ -8653,6 +8911,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"gDV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/catwalk/over, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/centcom) "gFU" = ( /obj/machinery/computer/helm, /obj/effect/turf_decal/industrial/warning{ @@ -8805,6 +9070,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"gTo" = ( +/obj/structure/table/wood/fancy/blue, +/obj/machinery/light/directional/north, +/obj/machinery/fax/admin/solgov, +/turf/open/floor/carpet/royalblue, +/area/centcom) "gUp" = ( /obj/structure/chair{ dir = 1 @@ -8845,6 +9116,20 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/plasteel, /area/centcom/supply) +"hba" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 5 + }, +/obj/item/clothing/head/cowboy/sec/minutemen{ + pixel_y = 8; + pixel_x = -4 + }, +/obj/item/pen/fourcolor{ + pixel_x = 5 + }, +/turf/open/floor/plasteel, +/area/centcom) "hbh" = ( /obj/structure/table/wood, /obj/item/phone{ @@ -9008,6 +9293,9 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"hzJ" = ( +/turf/closed/indestructible/riveted, +/area/centcom) "hzR" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -9043,6 +9331,12 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"hBf" = ( +/obj/effect/turf_decal/minutemen/edge{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "hDn" = ( /obj/effect/turf_decal/corner/opaque/blue{ dir = 1 @@ -9200,6 +9494,10 @@ /obj/machinery/vending/wardrobe/cent_wardrobe, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"hYV" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/ship/dirt, +/area/centcom) "hZs" = ( /obj/structure/table/reinforced, /obj/item/folder/red{ @@ -9246,6 +9544,26 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel/dark, /area/centcom/supply) +"ibc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/paper/stack{ + dir = 5; + pixel_y = 25; + layer = 2.89 + }, +/obj/structure/fluff/paper/stack{ + dir = 4; + pixel_y = -4; + pixel_x = 11 + }, +/obj/structure/fluff/paper/stack{ + dir = 1; + pixel_x = -16; + pixel_y = -2 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central4, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "ieA" = ( /obj/item/kirbyplants{ icon_state = "plant-22" @@ -9302,6 +9620,26 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"igC" = ( +/obj/structure/sign/minutemen{ + pixel_y = -28 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/head/helmet/bulletproof/minutemen{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/clothing/head/helmet/bulletproof/minutemen{ + pixel_x = 3; + pixel_y = 11 + }, +/obj/machinery/light/directional/east, +/obj/item/reagent_containers/food/drinks/bottle/rum{ + pixel_x = -9; + pixel_y = 3 + }, +/turf/open/floor/plasteel, +/area/centcom) "igW" = ( /obj/structure/bed/roller, /obj/machinery/iv_drip, @@ -9431,6 +9769,16 @@ }, /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) +"iti" = ( +/obj/effect/decal/fakelattice{ + color = "#808080"; + layer = 2.038 + }, +/obj/effect/turf_decal/corner_steel_grid/full, +/turf/open/floor/plasteel/elevatorshaft{ + color = "#808080" + }, +/area/centcom) "iuo" = ( /obj/machinery/computer/auxillary_base{ pixel_y = 32 @@ -9472,6 +9820,14 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) +"iwJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9; + color = "#543C30" + }, +/obj/machinery/light/directional/west, +/turf/open/floor/wood/walnut, +/area/centcom) "iyp" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 1 @@ -9521,6 +9877,15 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"iyJ" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/hardhat{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "izl" = ( /obj/machinery/computer/secure_data{ dir = 1 @@ -9573,6 +9938,9 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/plasteel/dark, /area/centcom/control) +"iDo" = ( +/turf/open/floor/ship/dirt, +/area/centcom) "iDE" = ( /obj/effect/turf_decal/corner/transparent/bar, /obj/effect/turf_decal/corner/transparent/bar{ @@ -9627,6 +9995,27 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) +"iRP" = ( +/obj/structure/table/glass, +/obj/item/desk_flag{ + pixel_x = -7; + pixel_y = 6; + name = "white flag"; + desc = "Show in case of Minutemen patrols." + }, +/obj/item/radio/intercom/wideband/directional/north, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) +"iSo" = ( +/obj/machinery/door/airlock/solgov{ + req_access_txt = "109" + }, +/turf/open/floor/wood/walnut, +/area/centcom) +"iWI" = ( +/obj/effect/turf_decal/minutemen/middle, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "iWU" = ( /obj/effect/turf_decal/corner/opaque/brown{ dir = 8 @@ -9650,6 +10039,9 @@ }, /turf/open/floor/plasteel/white, /area/centcom/holding) +"iZr" = ( +/turf/open/floor/mineral/plastitanium, +/area/centcom) "iZH" = ( /obj/machinery/vending/snack, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -9747,6 +10139,14 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"jja" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9; + color = "#543C30" + }, +/obj/effect/turf_decal/solgov/wood/center_left, +/turf/open/floor/wood/walnut, +/area/centcom) "jjE" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -9760,6 +10160,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/ert) +"jly" = ( +/obj/machinery/computer/med_data/syndie{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "jlB" = ( /obj/item/cardboard_cutout{ desc = "They seem to be ignoring you... Typical."; @@ -9870,6 +10276,17 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"jyy" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/bundlenatural{ + pixel_y = 4 + }, +/obj/item/pen/charcoal{ + pixel_x = -5; + pixel_y = -4 + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "jCA" = ( /obj/effect/turf_decal/industrial/warning{ dir = 5 @@ -9898,6 +10315,26 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"jDt" = ( +/obj/item/shard{ + icon_state = "small"; + pixel_x = 9; + pixel_y = -7 + }, +/obj/item/shard{ + icon_state = "medium"; + pixel_x = -10; + pixel_y = 11 + }, +/obj/machinery/fax/admin/frontiersmen, +/obj/structure/table_frame, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) +"jEn" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/mahogany, +/area/centcom) "jEB" = ( /obj/item/kirbyplants{ icon_state = "plant-22" @@ -9910,6 +10347,14 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"jFa" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/HoS/cybersun{ + pixel_x = 2 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "jGz" = ( /obj/item/clipboard, /obj/item/folder/red, @@ -9966,6 +10411,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supply) +"jPn" = ( +/obj/effect/turf_decal/syndicateemblem/middle/middle, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "jPL" = ( /obj/machinery/vending/cola, /obj/effect/turf_decal/corner/transparent/bar, @@ -10196,6 +10645,12 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"kiC" = ( +/obj/effect/turf_decal/minutemen/edge{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "kjt" = ( /obj/machinery/computer/communications{ dir = 8 @@ -10243,12 +10698,27 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"kkC" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/minutemen/gold{ + pixel_y = 32 + }, +/obj/machinery/fax/admin/minutemen, +/turf/open/floor/plasteel, +/area/centcom) "kkV" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 4 }, /turf/open/floor/plasteel, /area/tdome/arena_source) +"kmQ" = ( +/obj/effect/turf_decal/syndicateemblem/middle/right, +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "kqM" = ( /obj/machinery/shower{ dir = 4 @@ -10346,6 +10816,14 @@ /obj/machinery/light/directional/south, /turf/open/floor/plasteel, /area/centcom/control) +"kFX" = ( +/obj/item/clothing/head/intern{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "kHH" = ( /obj/effect/turf_decal/corner/opaque/red{ dir = 1 @@ -10458,6 +10936,10 @@ }, /turf/open/floor/plasteel/grimy, /area/centcom/control) +"kXn" = ( +/obj/effect/turf_decal/syndicateemblem/bottom/left, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "laX" = ( /obj/structure/chair/office/light{ dir = 8 @@ -10525,6 +11007,11 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"lfi" = ( +/obj/structure/table/wood, +/obj/machinery/fax/admin/roumain, +/turf/open/floor/wood/mahogany, +/area/centcom) "lfw" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -10542,6 +11029,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"lfK" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "lfS" = ( /obj/effect/turf_decal/corner/opaque/green, /turf/open/floor/plasteel, @@ -10659,6 +11150,11 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"lmY" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/centcom) "lnt" = ( /obj/effect/turf_decal/industrial/warning{ dir = 6 @@ -10875,6 +11371,19 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"lHR" = ( +/obj/item/paper_bin, +/obj/item/clothing/head/beret/sec/frontier/officer{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = -8; + pixel_y = -3 + }, +/obj/structure/table/glass, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "lIm" = ( /obj/structure/table, /obj/item/paper/pamphlet/centcom/visitor_info, @@ -10903,6 +11412,23 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"lJp" = ( +/turf/closed/indestructible/syndicate, +/area/centcom) +"lKP" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/telecomms/relay/preset/inteq{ + autolinkers = list("relay") + }, +/turf/open/floor/plasteel, +/area/centcom) "lMB" = ( /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel, @@ -10933,6 +11459,18 @@ }, /turf/open/floor/plasteel, /area/tdome/arena_source) +"lQr" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/structure/sign/minutemen{ + pixel_y = 28 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel, +/area/centcom) "lQv" = ( /obj/effect/turf_decal/corner/opaque/brown, /obj/effect/turf_decal/corner/opaque/brown{ @@ -10995,6 +11533,28 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"lXI" = ( +/obj/item/ammo_casing/spent{ + pixel_x = -6; + pixel_y = -10 + }, +/obj/item/ammo_casing/spent{ + pixel_x = 9; + pixel_y = -6 + }, +/obj/item/ammo_casing/spent{ + pixel_x = 3 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) +"lXQ" = ( +/obj/effect/decal/cleanable/blood{ + icon_state = "floor3-old"; + pixel_x = -9; + pixel_y = -11 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "lYC" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -11004,6 +11564,12 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"lYF" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/centcom) "mbm" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -11130,6 +11696,22 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"moE" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/secure_data/laptop{ + dir = 4; + pixel_y = 6; + pixel_x = -4 + }, +/turf/open/floor/plasteel, +/area/centcom) +"mpi" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4; + req_access_txt = "109" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "mpw" = ( /obj/effect/landmark/prisonwarp, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -11161,6 +11743,15 @@ /obj/machinery/light/directional/west, /turf/open/floor/plasteel, /area/centcom/control) +"msQ" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/contraband/cybersun{ + pixel_y = -32 + }, +/obj/item/paper_bin/carbon, +/obj/item/pen/fountain, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "mtq" = ( /obj/effect/turf_decal/corner/transparent/bar, /obj/effect/turf_decal/corner/transparent/bar{ @@ -11222,6 +11813,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"myU" = ( +/obj/effect/turf_decal/syndicateemblem/middle/left, +/obj/structure/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "mzM" = ( /obj/structure/fans/tiny, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -11236,6 +11834,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supply) +"mAL" = ( +/obj/structure/table/reinforced, +/obj/machinery/fax/admin/syndicate, +/obj/machinery/light/directional/west, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "mBc" = ( /obj/structure/table/reinforced, /obj/item/stack/packageWrap, @@ -11259,6 +11863,21 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"mDT" = ( +/obj/effect/decal/fakelattice{ + color = "#808080"; + layer = 2.038 + }, +/obj/effect/turf_decal/corner_steel_grid/diagonal, +/obj/machinery/light/directional/east, +/obj/effect/decal/cleanable/garbage{ + pixel_x = 5; + pixel_y = -5 + }, +/turf/open/floor/plasteel/elevatorshaft{ + color = "#808080" + }, +/area/centcom) "mEC" = ( /obj/structure/sink{ dir = 8; @@ -11293,6 +11912,32 @@ luminosity = 2 }, /area/ctf) +"mGE" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/centcom) +"mJl" = ( +/obj/effect/turf_decal/syndicateemblem/top/left, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) +"mJP" = ( +/obj/effect/decal/fakelattice{ + color = "#808080"; + layer = 2.038 + }, +/obj/effect/turf_decal/corner_steel_grid/full{ + dir = 4 + }, +/obj/machinery/light/broken/directional/west, +/turf/open/floor/plasteel/elevatorshaft{ + color = "#808080" + }, +/area/centcom) "mKb" = ( /obj/machinery/button/door/indestructible{ id = "thunderdomegen"; @@ -11365,6 +12010,10 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) +"mPN" = ( +/obj/effect/turf_decal/syndicateemblem/top/right, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "mUb" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -11409,6 +12058,10 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"mVC" = ( +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/mahogany, +/area/centcom) "mYG" = ( /obj/machinery/airalarm/directional/east, /obj/structure/filingcabinet/filingcabinet, @@ -11442,6 +12095,14 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"naB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5; + color = "#543C30" + }, +/obj/machinery/light/directional/east, +/turf/open/floor/wood/walnut, +/area/centcom) "ncR" = ( /obj/machinery/door/poddoor{ id = "XCCQMLoaddoor2"; @@ -11515,6 +12176,13 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"njp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/centcom) "njY" = ( /obj/machinery/status_display/evac{ pixel_y = 32 @@ -11553,6 +12221,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) +"nos" = ( +/obj/structure/catwalk/over, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/centcom) "noV" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -11824,6 +12498,41 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"nYl" = ( +/obj/structure/table/wood/fancy/blue, +/obj/item/paper_bin/carbon, +/obj/item/pen/solgov, +/obj/item/pen/fourcolor{ + pixel_x = -9; + pixel_y = -3 + }, +/obj/item/desk_flag/solgov{ + pixel_y = 12; + pixel_x = -8 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) +"nYZ" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/machinery/computer/secure_data, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel, +/area/centcom) +"oaQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/centcom) "oba" = ( /obj/structure/table/wood, /obj/structure/safe/floor, @@ -11883,6 +12592,24 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"odH" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/gun/ballistic/automatic/assault/ak47/inteq{ + pixel_y = 3 + }, +/obj/item/gun/ballistic/automatic/assault/ak47/inteq{ + pixel_y = -1; + pixel_x = -5 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel, +/area/centcom) "odV" = ( /obj/structure/chair/office{ dir = 8 @@ -12028,6 +12755,12 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"ouD" = ( +/obj/machinery/door/airlock/grunge{ + req_access = "109" + }, +/turf/open/floor/plasteel, +/area/centcom) "ouO" = ( /obj/effect/turf_decal/corner/opaque/green, /turf/open/floor/plasteel, @@ -12160,6 +12893,13 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"oHB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/mahogany, +/area/centcom) "oHU" = ( /obj/machinery/computer/communications{ dir = 8 @@ -12338,6 +13078,16 @@ /obj/effect/turf_decal/corner/opaque/blue, /turf/open/floor/plasteel, /area/centcom/control) +"phf" = ( +/obj/structure/table/wood/fancy/blue, +/obj/structure/sign/poster/solgov/paperwork{ + pixel_y = 32 + }, +/obj/item/radio/intercom/wideband/table{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) "phB" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -12428,6 +13178,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"plP" = ( +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters, +/turf/open/floor/plasteel, +/area/centcom) "pmP" = ( /obj/effect/turf_decal/corner/opaque/green, /obj/effect/turf_decal/corner/opaque/green{ @@ -12435,6 +13189,19 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) +"psm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10; + color = "#543C30" + }, +/obj/structure/sign/solgov_seal{ + pixel_y = -28 + }, +/obj/machinery/telecomms/relay/preset/solgov{ + autolinkers = list("relay") + }, +/turf/open/floor/wood/walnut, +/area/centcom) "psp" = ( /obj/structure/chair{ dir = 8 @@ -12496,11 +13263,30 @@ /obj/effect/spawner/xmastree, /turf/open/floor/plasteel, /area/syndicate_mothership/control) +"pvN" = ( +/obj/machinery/light/directional/east, +/obj/machinery/telecomms/relay/preset/frontiersmen{ + autolinkers = list("relay") + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "pvV" = ( /obj/machinery/igniter/on, /obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plasteel, /area/tdome/arena_source) +"pvW" = ( +/obj/effect/turf_decal/minutemen/edge, +/turf/open/floor/mineral/plastitanium, +/area/centcom) +"pwr" = ( +/obj/effect/turf_decal/solgov/wood/top_right, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30"; + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/centcom) "pwJ" = ( /obj/structure/chair/comfy/brown{ color = "#596479" @@ -12724,6 +13510,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"pLM" = ( +/obj/effect/turf_decal/siding/wood{ + color = "#543C30" + }, +/obj/effect/turf_decal/solgov/wood/bottom_right, +/turf/open/floor/wood/walnut, +/area/centcom) "pOL" = ( /obj/effect/turf_decal/industrial/warning{ dir = 9 @@ -12819,6 +13612,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"pTR" = ( +/obj/effect/turf_decal/minutemen/edge{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "pVF" = ( /obj/machinery/computer/card/centcom{ dir = 8 @@ -12896,6 +13695,11 @@ /obj/effect/turf_decal/corner/opaque/red, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"qju" = ( +/obj/structure/table/wood/fancy/blue, +/obj/item/papercutter, +/turf/open/floor/carpet/royalblue, +/area/centcom) "qkb" = ( /obj/item/kirbyplants{ icon_state = "plant-21" @@ -12913,6 +13717,16 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"qkP" = ( +/obj/effect/turf_decal/solgov/wood/bottom_left{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30"; + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/centcom) "qmm" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -12927,6 +13741,13 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"qoL" = ( +/turf/open/floor/wood/mahogany, +/area/centcom) +"qqj" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "qsu" = ( /obj/structure/sink{ dir = 4; @@ -13048,6 +13869,27 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"qLN" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/structure/table, +/obj/structure/sign/poster/contraband/inteq{ + pixel_y = 32 + }, +/obj/item/desk_flag/trans{ + pixel_x = 12; + pixel_y = 2 + }, +/obj/item/radio/intercom/wideband/table{ + dir = 1; + pixel_x = -1 + }, +/turf/open/floor/plasteel, +/area/centcom) "qNc" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -13064,6 +13906,14 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"qQe" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/ship/dirt, +/area/centcom) +"qQA" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/mahogany, +/area/centcom) "qSb" = ( /obj/machinery/keycard_auth{ pixel_y = -25 @@ -13094,6 +13944,9 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"qVq" = ( +/turf/open/floor/plasteel, +/area/centcom) "qXd" = ( /obj/structure/table/wood, /obj/item/taperecorder, @@ -13324,6 +14177,14 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/plasteel/dark, /area/centcom/control) +"rjV" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/centcom) "rln" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Supply"; @@ -13347,6 +14208,16 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"rmj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/paper/stack, +/obj/item/chair/plastic{ + dir = 1; + pixel_x = -9; + pixel_y = 6 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "roJ" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -13451,6 +14322,14 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"rvC" = ( +/obj/structure/table/reinforced, +/obj/item/radio/headset/minutemen/alt/captain{ + pixel_y = 2; + pixel_x = 1 + }, +/turf/open/floor/plasteel, +/area/centcom) "rvW" = ( /obj/structure/sink{ dir = 4; @@ -13684,6 +14563,16 @@ }, /turf/open/floor/plasteel, /area/tdome/arena_source) +"rUa" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/centcom) "rUH" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/snacks/mint, @@ -13967,6 +14856,10 @@ /obj/effect/turf_decal/corner/opaque/blue, /turf/open/floor/plasteel/dark, /area/ctf) +"sMn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "sMK" = ( /obj/effect/turf_decal/corner/opaque/brown, /obj/effect/turf_decal/corner/opaque/brown{ @@ -13991,6 +14884,13 @@ }, /turf/open/floor/plasteel/white, /area/centcom/holding) +"sQw" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/turf/open/floor/plasteel, +/area/centcom) "sRB" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/corner/transparent/bar, @@ -14051,6 +14951,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"sVJ" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/centcom) "sWb" = ( /obj/item/storage/briefcase{ pixel_x = -3; @@ -14070,6 +14976,22 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"sZJ" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/structure/table, +/obj/item/clothing/head/helmet/inteq{ + pixel_x = -12; + pixel_y = 7 + }, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/plasteel, +/area/centcom) "sZS" = ( /obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plasteel, @@ -14272,12 +15194,44 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/evac) +"ttK" = ( +/obj/effect/decal/fakelattice{ + color = "#808080"; + layer = 2.038 + }, +/obj/effect/turf_decal/corner_steel_grid/full{ + dir = 8 + }, +/obj/item/trash/can{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/floor/plasteel/elevatorshaft{ + color = "#808080" + }, +/area/centcom) "tuw" = ( /obj/effect/turf_decal/industrial/loading{ dir = 8 }, /turf/open/floor/plasteel, /area/centcom/supply) +"tvO" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/structure/rack, +/obj/item/gun/ballistic/automatic/smg/inteq{ + pixel_x = 2 + }, +/obj/item/gun/ballistic/automatic/smg/inteq{ + pixel_x = -1; + pixel_y = -6 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel, +/area/centcom) "tyg" = ( /obj/effect/turf_decal/corner/opaque/blue{ dir = 1 @@ -14307,6 +15261,25 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"tAe" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood{ + icon_state = "floor1-old"; + pixel_y = 10; + pixel_x = -8 + }, +/obj/effect/decal/cleanable/blood{ + icon_state = "floor2-old" + }, +/obj/effect/decal/cleanable/shreds{ + pixel_y = 11; + pixel_x = 4 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central5, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "tAB" = ( /obj/structure/filingcabinet/medical, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -14321,6 +15294,21 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"tBa" = ( +/obj/structure/table/wood, +/obj/item/book/manual/srmlore{ + pixel_y = 4; + pixel_x = -4 + }, +/obj/item/flashlight/lantern{ + pixel_x = 8; + pixel_y = 13 + }, +/obj/item/book/manual/trickwines_4_brewers{ + pixel_x = -1 + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "tBL" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -14378,6 +15366,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"tGR" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "tHd" = ( /obj/effect/turf_decal/industrial/warning{ dir = 5 @@ -14410,6 +15404,11 @@ }, /turf/open/floor/plasteel, /area/centcom/evac) +"tOf" = ( +/obj/effect/turf_decal/solgov/wood/center, +/obj/machinery/light/floor, +/turf/open/floor/wood/walnut, +/area/centcom) "tOg" = ( /obj/machinery/computer/prisoner/management{ dir = 1 @@ -14481,6 +15480,10 @@ }, /turf/open/floor/plasteel, /area/tdome/arena_source) +"tUy" = ( +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/centcom) "tWM" = ( /obj/structure/table/reinforced, /obj/item/radio{ @@ -14573,6 +15576,34 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"unc" = ( +/obj/effect/turf_decal/siding/wood{ + color = "#543C30" + }, +/obj/effect/turf_decal/solgov/wood/bottom_center, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/centcom) +"unP" = ( +/obj/structure/table, +/obj/item/crowbar{ + pixel_y = 8; + pixel_x = -4 + }, +/obj/item/electropack{ + pixel_x = 7; + pixel_y = -2 + }, +/obj/item/kitchen/knife{ + pixel_y = -5; + pixel_x = -5 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/centcom) "uqL" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -14586,6 +15617,10 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"uuY" = ( +/obj/effect/turf_decal/syndicateemblem/bottom/right, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "uzX" = ( /obj/structure/table, /obj/item/toy/katana, @@ -14709,6 +15744,9 @@ heat_capacity = 1e+006 }, /area/tdome/tdomeobserve) +"uKW" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "uLr" = ( /obj/item/storage/firstaid/toxin, /obj/item/storage/firstaid/o2{ @@ -14751,6 +15789,11 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/four) +"uOa" = ( +/obj/effect/turf_decal/syndicateemblem/bottom/middle, +/obj/structure/chair/office/dark, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "uRu" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -14847,6 +15890,10 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership/control) +"veN" = ( +/obj/structure/sign/syndicate, +/turf/closed/indestructible/syndicate, +/area/centcom) "veT" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/corner/transparent/bar, @@ -15124,6 +16171,10 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"vFM" = ( +/obj/machinery/telecomms/hub/preset, +/turf/open/floor/plasteel, +/area/centcom) "vGf" = ( /obj/effect/turf_decal/industrial/warning{ dir = 10 @@ -15133,6 +16184,18 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"vIg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9; + color = "#543C30" + }, +/obj/effect/turf_decal/solgov/wood/top, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30"; + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/centcom) "vKH" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -15164,6 +16227,12 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"vQk" = ( +/obj/structure/chair/wood/wings{ + dir = 1 + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "vQM" = ( /obj/structure/table/wood, /obj/machinery/recharger, @@ -15196,6 +16265,13 @@ }, /turf/open/floor/plasteel, /area/centcom/evac) +"wad" = ( +/obj/effect/turf_decal/minutemen/corner, +/obj/structure/chair/comfy{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "wbj" = ( /obj/effect/turf_decal/corner/transparent/neutral, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -15255,6 +16331,15 @@ }, /turf/open/floor/circuit/red, /area/ctf) +"weV" = ( +/obj/structure/fluff/paper/stack{ + dir = 6; + pixel_y = 11; + pixel_x = 7 + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/centcom) "wfQ" = ( /obj/structure/trap/ctf/red, /obj/effect/turf_decal/corner/opaque/red{ @@ -15399,6 +16484,28 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"wAh" = ( +/obj/machinery/fax/admin/inteq, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/structure/table, +/turf/open/floor/plasteel, +/area/centcom) +"wCp" = ( +/obj/structure/table/wood/fancy/blue, +/obj/item/folder/solgov/red{ + pixel_x = -3 + }, +/obj/item/folder/solgov{ + pixel_y = 5; + pixel_x = 2 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) "wEF" = ( /obj/effect/turf_decal/corner/opaque/red, /obj/effect/turf_decal/corner/opaque/red{ @@ -15553,6 +16660,7 @@ name = "CentCom Stand"; req_access_txt = "109" }, +/obj/machinery/fax/admin, /turf/open/floor/plasteel/grimy, /area/centcom/control) "xaO" = ( @@ -15680,6 +16788,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"xxi" = ( +/obj/effect/turf_decal/syndicateemblem/top/middle, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "xEx" = ( /obj/structure/chair, /obj/effect/turf_decal/industrial/warning{ @@ -15779,6 +16891,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"xTt" = ( +/obj/effect/turf_decal/solgov/wood/center_right, +/turf/open/floor/wood/walnut, +/area/centcom) "xWv" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 1 @@ -15829,6 +16945,13 @@ dir = 1 }, /area/centcom/supply) +"yhk" = ( +/obj/machinery/door/airlock/wood{ + dir = 4; + req_access = "109" + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "yhL" = ( /obj/effect/turf_decal/corner/opaque/red{ dir = 1 @@ -25311,21 +26434,21 @@ aaa aaa aaa aaa +aPu +aPu +aPu +aPu +aPu +aPu +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hzJ +hzJ +hzJ +bbf +hzJ +hzJ aaa aaa aaa @@ -25568,21 +26691,21 @@ aaa aaa aaa aaa +aPu +bSy +wCp +iwJ +njp +psm +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +lQr +moE +qVq +qVq +bIJ +hzJ aaa aaa aaa @@ -25825,21 +26948,21 @@ aaa aaa aaa aaa +aPu +nYl +dER +qkP +jja +eqM +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hba +wad +pTR +gaU +vFM +hzJ aaa aaa aaa @@ -26082,21 +27205,21 @@ aaa aaa aaa aaa +aPu +gTo +gfJ +vIg +tOf +unc +iSo aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +kkC +pvW +iWI +hBf +rvC +hzJ aaa aaa aaa @@ -26339,21 +27462,21 @@ aaa aaa aaa aaa +aPu +phf +dER +pwr +xTt +pLM +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +qVq +tGR +kiC +bUH +bRF +hzJ aaa aaa aaa @@ -26596,21 +27719,21 @@ aaa aaa aaa aaa +aPu +dom +qju +naB +oaQ +gsx +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +dKW +qVq +qVq +aIF +igC +hzJ aaa aaa aaa @@ -26853,21 +27976,21 @@ aaa aaa aaa aaa +aPu +aPu +aPu +aPu +aPu +aPu +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hzJ +hzJ +hzJ +hzJ +hzJ +hzJ aaa aaa aaa @@ -27367,21 +28490,21 @@ aaa aaa aaa aaa +lJp +lJp +lJp +lJp +lJp +lJp +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hzJ +hzJ +mpi +hzJ +hzJ +hzJ aaa aaa aaa @@ -27624,21 +28747,21 @@ aaa aaa aaa aaa +veN +cCK +cUG +mAL +fKt +iZr +veN aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +mJP +lmY +tUy +sMn +kFX +hzJ aaa aaa aaa @@ -27881,21 +29004,21 @@ aaa aaa aaa aaa +fUc +uKW +mJl +myU +kXn +msQ +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +lHR +rmj +weV +lXI +tAe +hzJ aaa aaa aaa @@ -28138,21 +29261,21 @@ aaa aaa aaa aaa +lJp +qqj +xxi +jPn +uOa +jFa +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +jDt +ibc +eWz +lXQ +duw +hzJ aaa aaa aaa @@ -28395,21 +29518,21 @@ aaa aaa aaa aaa +fUc +uKW +mPN +kmQ +uuY +jly +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +iRP +fau +gDV +iti +unP +hzJ aaa aaa aaa @@ -28652,21 +29775,21 @@ aaa aaa aaa aaa +veN +lfK +ciU +iyJ +bFc +iZr +veN aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +mDT +ttK +nos +cZi +pvN +hzJ aaa aaa aaa @@ -28909,21 +30032,21 @@ aaa aaa aaa aaa +lJp +lJp +lJp +lJp +lJp +lJp +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hzJ +hzJ +eLy +hzJ +hzJ +hzJ aaa aaa aaa @@ -29423,21 +30546,21 @@ aaa aaa aaa aaa +aPu +aPu +aPu +aPu +aPu +aPu +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +eAJ +eAJ +eAJ +eAJ +eAJ +eAJ aaa aaa aaa @@ -29680,21 +30803,21 @@ aaa aaa aaa aaa +aPu +nYZ +mGE +rUa +mGE +odH +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +mVC +qoL +jEn +etl +oHB +eAJ aaa aaa aaa @@ -29937,21 +31060,21 @@ aaa aaa aaa aaa +aPu +qLN +fTU +emF +sVJ +apm +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +tBa +qoL +qQA +iDo +hYV +eAJ aaa aaa aaa @@ -30194,21 +31317,21 @@ aaa aaa aaa aaa +aPu +wAh +cxm +emF +emF +cjo +ouD aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +lfi +vQk +qQA +iDo +qQe +eAJ aaa aaa aaa @@ -30451,21 +31574,21 @@ aaa aaa aaa aaa +aPu +sZJ +plP +emF +lYF +cIS +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +jyy +qoL +qQA +iDo +qQe +eAJ aaa aaa aaa @@ -30708,21 +31831,21 @@ aaa aaa aaa aaa +aPu +lKP +sQw +rjV +sQw +tvO +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +mVC +qoL +qQA +iDo +hYV +eAJ aaa aaa aaa @@ -30965,21 +32088,21 @@ aaa aaa aaa aaa +aPu +aPu +aPu +aPu +aPu +aPu +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +eAJ +eAJ +yhk +eAJ +eAJ +eAJ aaa aaa aaa diff --git a/_maps/outpost/hangar/nt_asteroid_20x20.dmm b/_maps/outpost/hangar/nt_asteroid_20x20.dmm index c3d35afcea10..159af62d17cf 100644 --- a/_maps/outpost/hangar/nt_asteroid_20x20.dmm +++ b/_maps/outpost/hangar/nt_asteroid_20x20.dmm @@ -1037,7 +1037,7 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/plasteel/dark{ planetary_atmos = 1 }, diff --git a/_maps/outpost/hangar/nt_asteroid_40x20.dmm b/_maps/outpost/hangar/nt_asteroid_40x20.dmm index 959b27a5dd98..0d229e5d7af9 100644 --- a/_maps/outpost/hangar/nt_asteroid_40x20.dmm +++ b/_maps/outpost/hangar/nt_asteroid_40x20.dmm @@ -1233,7 +1233,7 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /obj/effect/turf_decal/techfloor{ dir = 4 }, diff --git a/_maps/outpost/nanotrasen_asteroid.dmm b/_maps/outpost/nanotrasen_asteroid.dmm index 8f5c38ded0ea..d5ccb5e0af68 100644 --- a/_maps/outpost/nanotrasen_asteroid.dmm +++ b/_maps/outpost/nanotrasen_asteroid.dmm @@ -3558,7 +3558,7 @@ /area/outpost/crew/library) "mZ" = ( /obj/structure/table/wood, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/plasteel, /area/outpost/crew/canteen) "na" = ( diff --git a/_maps/outpost/nanotrasen_ice.dmm b/_maps/outpost/nanotrasen_ice.dmm index bc92fdbc20c0..04b8040a6275 100644 --- a/_maps/outpost/nanotrasen_ice.dmm +++ b/_maps/outpost/nanotrasen_ice.dmm @@ -7463,7 +7463,7 @@ /area/outpost/security/armory) "XG" = ( /obj/structure/table/reinforced, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /obj/machinery/light/directional/south, /turf/open/floor/plasteel/telecomms_floor, /area/outpost/security) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 1adec75b74ac..44f0893cd9a5 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -67,6 +67,8 @@ #define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" #define ADMIN_VERBOSEJMP(src) "[src ? "[AREACOORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" #define ADMIN_INDIVIDUALLOG(user) "(LOGS)" +/// Displays "(SHOW)" in the chat, when clicked it tries to show atom(paper). First you need to set the request_state variable to TRUE for the paper. +#define ADMIN_SHOW_PAPER(atom) "(SHOW)" #define ADMIN_PUNISHMENT_BREAK_BONES "Break all bones" #define ADMIN_PUNISHMENT_LIGHTNING "Lightning bolt" diff --git a/code/_globalvars/lists/faxes.dm b/code/_globalvars/lists/faxes.dm deleted file mode 100644 index 5c78629de283..000000000000 --- a/code/_globalvars/lists/faxes.dm +++ /dev/null @@ -1,26 +0,0 @@ -/** - * This defines the list of faxes managed by the server administrators. They are not physically present in - * the game, but are shown in the fax list as existing. - * Lists: - * * additional_faxes_list - A list of "legal" faxes available with authorization. - * * frontier_faxes_list - List of faxes available after hacking. - * - * The list consists of the following elements: - * * fax_name - The name displayed in the fax list. - * * button_color - The color of this fax button in the list of all faxes. - */ -GLOBAL_LIST_INIT(additional_faxes_list, list( - list("fax_name" = "Nanotrasen Central Command", "button_color" = "#46B946"), - list("fax_name" = "Inteq Management Field Command", "button_color" = "#FACE65"), - list("fax_name" = "Colonial Minutemen Headquarters", "button_color" = "#538ACF"), - list("fax_name" = "Saint-Roumain Council of Huntsmen", "button_color" = "#6B443D"), - list("fax_name" = "SolGov Department of Administrative Affairs", "button_color" = "#536380"), - list("fax_name" = "Syndicate Coordination Center", "button_color" = "#B22C20"), - list("fax_name" = "Outpost Administration", "button_color" = "#dddfc9"), -)) - -GLOBAL_LIST_INIT(frontier_faxes_list, list( - list("fax_name" = "Frontiersmen Communications Outpost", "button_color" = "#70654C") -)) - -GLOBAL_LIST_EMPTY(fax_machines) //list of all fax machines diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 82258dfdcd43..ac54c7a39b33 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -11,6 +11,7 @@ GLOBAL_LIST_EMPTY(wayfindingbeacons) //list of all navigation beacons used GLOBAL_LIST_EMPTY(nuke_list) GLOBAL_LIST_EMPTY(alarmdisplay) //list of all machines or programs that can display station alerts GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the station (actually technically all engines) +GLOBAL_LIST_EMPTY(fax_machines) //list of all fax machines GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm index 15f96e69022b..773faec875f4 100644 --- a/code/game/machinery/telecomms/machines/relay.dm +++ b/code/game/machinery/telecomms/machines/relay.dm @@ -73,6 +73,36 @@ toggled = FALSE autolinkers = list("r_relay") +/obj/machinery/telecomms/relay/preset/nanotrasen + freq_listening = list(FREQ_COMMAND, FREQ_NANOTRASEN, FREQ_COMMON) + id = "Nanotrasen Relay" + network = "nt_commnet" + +/obj/machinery/telecomms/relay/preset/inteq + freq_listening = list(FREQ_COMMAND, FREQ_INTEQ, FREQ_COMMON) + id = "IRMG Relay" + network = "irmg_commnet" + +/obj/machinery/telecomms/relay/preset/minutemen + freq_listening = list(FREQ_COMMAND, FREQ_MINUTEMEN, FREQ_COMMON) + id = "CMM Relay" + network = "cmm_commnet" + +/obj/machinery/telecomms/relay/preset/solgov + freq_listening = list(FREQ_COMMAND, FREQ_SOLGOV, FREQ_COMMON) + id = "SolGov Relay" + network = "solgov_commnet" + +/obj/machinery/telecomms/relay/preset/syndicate + freq_listening = list(FREQ_COMMAND, FREQ_SYNDICATE, FREQ_COMMON) + id = "Syndicate Relay" + network = "synd_commnet" + +/obj/machinery/telecomms/relay/preset/frontiersmen + freq_listening = list(FREQ_COMMAND, FREQ_PIRATE, FREQ_COMMON) + id = "Frontiersmen Relay" + network = "frontier_commnet" + //Generic preset relay /obj/machinery/telecomms/relay/preset/auto hide = TRUE diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 7056c7a38d97..306634a639fc 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -687,7 +687,6 @@ name = "Fax Machine" build_path = /obj/machinery/fax req_components = list( - /obj/item/stock_parts/subspace/crystal = 1, /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/manipulator = 1,) diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm index d179a2930d2f..c7a1d9dd6f29 100644 --- a/code/game/turfs/closed/_closed.dm +++ b/code/game/turfs/closed/_closed.dm @@ -230,7 +230,7 @@ /turf/closed/indestructible/fakedoor name = "CentCom Access" icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - icon_state = "fake_door" + icon_state = "fakedoor" /turf/closed/indestructible/rock name = "dense rock" diff --git a/code/modules/admin/admin_fax_panel.dm b/code/modules/admin/admin_fax_panel.dm new file mode 100644 index 000000000000..32f523584a39 --- /dev/null +++ b/code/modules/admin/admin_fax_panel.dm @@ -0,0 +1,145 @@ +/** + * If client have R_ADMIN flag, opens an admin fax panel. + */ +/client/proc/fax_panel() + set name = "Send Fax Message" + set category = "Admin" + + if(!check_rights(R_ADMIN)) + return + + var/datum/fax_panel_interface/ui = new(usr) + ui.ui_interact(usr) + +/// Admin Fax Panel. Tool for sending fax messages faster. +/datum/fax_panel_interface + /// All faxes in from machinery list() + var/available_faxes = list() + /// List with available stamps + var/stamp_list = list() + + /// Paper which admin edit and send. + var/obj/item/paper/fax_paper = new /obj/item/paper(null) + + /// Default name of fax. Used when field with fax name not edited. + var/sending_fax_name = "Secret" + /// Default name of paper. paper - bluh-bluh. Used when field with paper name not edited. + var/default_paper_name = "Standard Report" + +/datum/fax_panel_interface/New() + //Get all faxes, and save them to our list. + for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) + available_faxes += WEAKREF(fax) + + //Get all stamps + for(var/stamp in subtypesof(/obj/item/stamp)) + var/obj/item/stamp/real_stamp = new stamp() + if(!istype(real_stamp, /obj/item/stamp/chameleon)) + var/stamp_detail = real_stamp.get_writing_implement_details() + stamp_list += list(list(real_stamp.name, real_stamp.icon_state, stamp_detail["stamp_class"])) + + //Give our paper special status, to read everywhere. + fax_paper.request_state = TRUE + +/** + * Return fax if name exists + * Arguments: + * * name - Name of fax what we try to find. + */ +/datum/fax_panel_interface/proc/get_fax_by_name(name) + if(!length(available_faxes)) + return null + + for(var/datum/weakref/weakrefed_fax as anything in available_faxes) + var/obj/machinery/fax/potential_fax = weakrefed_fax.resolve() + if(potential_fax && istype(potential_fax)) + if(potential_fax.fax_name == name) + return potential_fax + return null + +/datum/fax_panel_interface/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AdminFax") + ui.open() + +/datum/fax_panel_interface/ui_state(mob/user) + return GLOB.admin_state + +/datum/fax_panel_interface/ui_static_data(mob/user) + var/list/data = list() + + data["faxes"] = list() + data["stamps"] = list() + + for(var/stamp in stamp_list) + data["stamps"] += list(stamp[1]) // send only names. + + for(var/datum/weakref/weakrefed_fax as anything in available_faxes) + var/obj/machinery/fax/another_fax = weakrefed_fax.resolve() + if(another_fax && istype(another_fax)) + data["faxes"] += list(another_fax.fax_name) + + return data + +/datum/fax_panel_interface/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + if(..()) + return + + if(!check_rights(R_ADMIN)) + return + + var/obj/machinery/fax/action_fax + + if(params["faxName"]) + action_fax = get_fax_by_name(params["faxName"]) + + switch(action) + + if("follow") + if(!isobserver(usr)) + usr.client?.admin_ghost() + + usr.client?.holder?.admin_follow(action_fax) + + if("preview") // see saved variant + if(!fax_paper) + return + fax_paper.ui_interact(usr) + + if("save") // save paper + if(params["paperName"]) + default_paper_name = params["paperName"] + if(params["fromWho"]) + sending_fax_name = params["fromWho"] + + fax_paper.clear_paper() + var/stamp + var/stamp_class + + for(var/needed_stamp in stamp_list) + if(needed_stamp[1] == params["stamp"]) + stamp = needed_stamp[2] + stamp_class = needed_stamp[3] + break + + fax_paper.name = "paper — [default_paper_name]" + fax_paper.add_raw_text(params["rawText"], advanced_html = TRUE) + + if(stamp) + fax_paper.add_stamp(stamp_class, params["stampX"], params["stampY"], params["stampAngle"], stamp) + + fax_paper.update_static_data(usr) // OK, it's work, and update UI. + + if("send") + //copy + var/obj/item/paper/our_fax = fax_paper.copy(/obj/item/paper) + our_fax.name = fax_paper.name + //send + action_fax.receive(our_fax, sending_fax_name, important = TRUE) + message_admins("[key_name_admin(usr)] has sent a custom fax message to [action_fax.name][ADMIN_FLW(action_fax)][ADMIN_SHOW_PAPER(fax_paper)].") + log_admin("[key_name(usr)] has sent a custom fax message to [action_fax.name]") + + if("createPaper") + var/obj/item/paper/our_paper = fax_paper.copy(/obj/item/paper, usr.loc) + our_paper.name = fax_paper.name diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 929cf33f3315..a853f66963af 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -26,7 +26,9 @@ GLOBAL_PROTECT(admin_verbs_default) /client/proc/resetasaycolor, /client/proc/fix_air, /*resets air in designated radius to its default atmos composition*/ /client/proc/addbunkerbypass, - /client/proc/revokebunkerbypass + /client/proc/revokebunkerbypass, + /client/proc/requests, + /client/proc/fax_panel, /*send a paper to fax*/ ) GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin()) GLOBAL_PROTECT(admin_verbs_admin) @@ -119,7 +121,6 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/polymorph_all, /client/proc/show_tip, /client/proc/smite, - /client/proc/fax_manager, /client/proc/spawn_ruin, )) GLOBAL_PROTECT(admin_verbs_fun) @@ -283,7 +284,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/cmd_display_del_log, /client/proc/toggle_combo_hud, /client/proc/debug_huds, - /client/proc/fax_manager )) GLOBAL_PROTECT(admin_verbs_hideable) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index bb46d7250b0b..b917501d0bb8 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2218,10 +2218,14 @@ return GLOB.interviews.ui_interact(usr) - else if(href_list["open_fax_manager"]) + else if(href_list["show_paper"]) if(!check_rights(R_ADMIN)) return - usr.client.fax_manager() + + var/obj/item/paper/paper_to_show = locate(href_list["show_paper"]) + if(!istype(paper_to_show)) + return + paper_to_show.ui_interact(usr) /datum/admins/proc/HandleCMode() if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/verbs/fax_manager.dm b/code/modules/admin/verbs/fax_manager.dm deleted file mode 100644 index 6c6de9d5d100..000000000000 --- a/code/modules/admin/verbs/fax_manager.dm +++ /dev/null @@ -1,9 +0,0 @@ -/client/proc/fax_manager() - set category = "Fun" - set name = "Fax Manager" - set desc = "Open the manager panel to view all requests during the round in progress." - if(!check_rights(R_ADMIN)) - return - - SSblackbox.record_feedback("tally", "admin_verb", 1, "Fax Manager") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - GLOB.fax_manager.ui_interact(usr) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 05dccfc0ca75..c2be9649d7c3 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -44,23 +44,21 @@ deity = "Ashen Hunter" var/msg_tmp = msg + GLOB.requests.pray(usr.client, msg, usr.job == "Chaplain") msg = "[icon2html(cross, GLOB.admins)][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" for(var/client/C in GLOB.admins) if(C.prefs.chat_toggles & CHAT_PRAYER) to_chat(C, msg, confidential = TRUE) - if(C.prefs.toggles & SOUND_PRAYERS) - if(usr.job == "Chaplain") - SEND_SOUND(C, sound('sound/effects/pray.ogg')) to_chat(usr, "You pray to the gods: \"[msg_tmp]\"", confidential = TRUE) SSredbot.send_discord_message("admin", "Prayer from [src.key]/([src.name]): [msg]") SSblackbox.record_feedback("tally", "admin_verb", 1, "Prayer") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - //log_admin("HELP: [key_name(src)]: [msg]") /// Used by communications consoles to message CentCom /proc/message_centcom(text, mob/sender) var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN) + GLOB.requests.message_centcom(sender.client, msg) msg = "CENTCOM:[ADMIN_FULLMONTY(sender)] [ADMIN_CENTCOM_REPLY(sender)]: [msg]" to_chat(GLOB.admins, msg, confidential = TRUE) for(var/obj/machinery/computer/communications/console in GLOB.machines) @@ -69,6 +67,7 @@ /// Used by communications consoles to message the Syndicate /proc/message_syndicate(text, mob/sender) var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN) + GLOB.requests.message_syndicate(sender.client, msg) msg = "SYNDICATE:[ADMIN_FULLMONTY(sender)] [ADMIN_SYNDICATE_REPLY(sender)]: [msg]" to_chat(GLOB.admins, msg, confidential = TRUE) for(var/obj/machinery/computer/communications/console in GLOB.machines) @@ -77,6 +76,7 @@ /// Used by communications consoles to request the nuclear launch codes /proc/nuke_request(text, mob/sender) var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN) + GLOB.requests.nuke_request(sender.client, msg) msg = "NUKE CODE REQUEST:[ADMIN_FULLMONTY(sender)] [ADMIN_CENTCOM_REPLY(sender)] [ADMIN_SET_SD_CODE]: [msg]" to_chat(GLOB.admins, msg, confidential = TRUE) for(var/obj/machinery/computer/communications/console in GLOB.machines) diff --git a/code/modules/admin/verbs/requests.dm b/code/modules/admin/verbs/requests.dm new file mode 100644 index 000000000000..94aa976dbd1a --- /dev/null +++ b/code/modules/admin/verbs/requests.dm @@ -0,0 +1,7 @@ +/// Verb for opening the requests manager panel +/client/proc/requests() + set name = "Requests Manager" + set desc = "Open the request manager panel to view all requests during this round" + set category = "Admin" + SSblackbox.record_feedback("tally", "admin_verb", 1, "Request Manager") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + GLOB.requests.ui_interact(usr) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 06d96d7229cc..8db2e8454828 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -231,6 +231,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( GLOB.ahelp_tickets.client_login(src) GLOB.interviews.client_login(src) + GLOB.requests.client_login(src) var/connecting_admin = FALSE //because de-admined admins connecting should be treated like admins. //Admin Authorisation holder = GLOB.admin_datums[ckey] @@ -501,6 +502,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( log_access("Logout: [key_name(src)]") GLOB.ahelp_tickets.client_logout(src) GLOB.interviews.client_logout(src) + GLOB.requests.client_logout(src) SSserver_maint.UpdateHubStatus() if(credits) QDEL_LIST(credits) diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index b1696a27fca0..a4881fdfee38 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -18,10 +18,6 @@ var/seconds_electrified = MACHINE_NOT_ELECTRIFIED /// If true, the fax machine is jammed and needs cleaning var/jammed = FALSE - /// Determines the possibility of sending papers to the additional faxes. - var/access_additional_faxes = FALSE - /// Defines a list of accesses whose owners can open a connection with the additional faxes. - var/static/access_additional_faxes_required = list(ACCESS_HEADS, ACCESS_LAWYER, ACCESS_SECURITY) /// Necessary to hide syndicate faxes from the general list. Doesn't mean he's EMAGGED! var/frontier_network = FALSE /// True if the fax machine should be visible to other fax machines in general. @@ -53,23 +49,47 @@ /obj/item/holochip, /obj/item/card, ) + /// Internal radio for announcing over comms + var/obj/item/radio/radio + /// Radio channel to speak into + var/radio_channel + /// Cooldown for aformentioned radio, prevents radio spam + COOLDOWN_DECLARE(radio_cooldown) + + /// List with a fake-networks(not a fax actually), for request manager. + var/list/special_networks = list( + list(fax_name = "Nanotrasen Central Command", fax_id = "nanotrasen", color = "green", emag_needed = FALSE), + list(fax_name = "IRMG Mothership", fax_id = "inteq", color = "yellow", emag_needed = FALSE), + list(fax_name = "Solarian Confederation Frontier Affairs", fax_id = "solgov", color = "teal", emag_needed = FALSE), + list(fax_name = "Roumain Council of Huntsmen", fax_id = "roumain", color = "brown", emag_needed = FALSE), + list(fax_name = "Colonial League Leadership", fax_id = "minutemen", color = "blue", emag_needed = FALSE), + list(fax_name = "Syndicate Coalition Coordination Center", fax_id = "syndicate", color = "red", emag_needed = FALSE), + list(fax_name = "Frontiersmen Communications Quartermaster", fax_id = "frontiersmen", color = "black", emag_needed = TRUE) + ) + // should we make our message be important and be recieved in admin faxes + var/admin_fax_id /obj/machinery/fax/Initialize(mapload) . = ..() GLOB.fax_machines += src if(!fax_id) fax_id = SSnetworks.make_address() - if(fax_name == initial(fax_name)) + if(fax_name == initial(fax_name) && !admin_fax_id) fax_name = "[get_area_name(src)] Fax Machine" wires = new /datum/wires/fax(src) -/obj/machinery/fax/hacked - set_obj_flags = "EMAGGED" - allow_exotic_faxes = TRUE - access_additional_faxes = TRUE + radio = new(src) + radio.subspace_transmission = TRUE + radio.canhear_range = 0 + // Override in subtypes // no + radio.on = TRUE -/obj/machinery/fax/frontiersmen - frontier_network = TRUE +/obj/machinery/fax/ruin + visible_to_network = FALSE + +/obj/machinery/fax/ruin/Initialize(mapload) + . = ..() + fax_name = "Unregistered Fax Machine " + fax_id /obj/machinery/fax/Destroy() GLOB.fax_machines -= src @@ -113,6 +133,20 @@ obj_flags |= EMAGGED to_chat(user, "The screen of the [src] flickers!") +/** + * EMP Interaction + */ +/obj/machinery/fax/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + allow_exotic_faxes = !allow_exotic_faxes + visible_message("[src] [allow_exotic_faxes ? "starts beeping" : "stops beeping"] ominously[allow_exotic_faxes ? "..." : "."]") + +/** + * Unanchor/anchor + */ + /obj/machinery/fax/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) @@ -161,27 +195,6 @@ return return ..() -// Checks if the card has access to switch "legal" faxes of administrators. -/obj/machinery/fax/proc/access_additional_faxes_check(mob/living/user) - if(isAdminObserver(user)) - return TRUE - - var/obj/item/card/id/used_card = user.get_idcard(TRUE) - if(used_card) - // We check if it makes sense to check access at all. - if(!access_additional_faxes_required || !used_card.access) - return FALSE - - for(var/requested_access in access_additional_faxes_required) - if(requested_access in used_card.access) - return TRUE - return FALSE - -// Switches access to the "legal" administrator's fax list. Access to the "illegal" is switched by hacking. -/obj/machinery/fax/proc/access_additional_faxes_toggle() - access_additional_faxes = !access_additional_faxes - say("Bluespace channel communication [access_additional_faxes ? "opened" : "closed"].") - /** * Attempts to clean out a jammed machine using a passed item. * Returns true if successful. @@ -237,12 +250,6 @@ ui.open() ui.set_autoupdate(TRUE) -/obj/machinery/fax/ui_static_data(mob/user) - var/list/data = list() - data["additional_faxes_list"] = GLOB.additional_faxes_list - data["frontier_faxes_list"] = GLOB.frontier_faxes_list - return data - /obj/machinery/fax/ui_data(mob/user) var/list/data = list() //Record a list of all existing faxes. @@ -264,12 +271,11 @@ data["fax_id"] = fax_id data["fax_name"] = fax_name data["visible"] = visible_to_network - data["access_additional_faxes"] = access_additional_faxes - data["сan_switch_access"] = access_additional_faxes_check(user) // In this case, we don't care if the fax is hacked or in the syndicate's network. The main thing is to check the visibility of other faxes. data["frontier_network"] = (frontier_network || (obj_flags & EMAGGED)) data["has_paper"] = !!loaded_item_ref?.resolve() data["fax_history"] = fax_history + data["special_faxes"] = special_networks return data /obj/machinery/fax/ui_act(action, list/params) @@ -287,8 +293,6 @@ loaded_item_ref = null update_icon() return TRUE - if("access_additional_faxes_toggle") - access_additional_faxes_toggle() if("send") var/obj/item/loaded = loaded_item_ref?.resolve() if(!loaded) @@ -299,17 +303,31 @@ loaded_item_ref = null update_icon() return TRUE - if("send_to_additional_fax") - var/obj/item/loaded = loaded_item_ref?.resolve() - if(!loaded) + if("send_special") + var/obj/item/paper/fax_paper = loaded_item_ref?.resolve() + if(!fax_paper) + return + if(!istype(fax_paper)) + to_chat(usr, icon2html(src.icon, usr) + "ERROR: Failed to send fax.") return - if(istype(loaded, /obj/item/paper)) - if(send_to_additional_faxes(loaded, usr, params["name"], params["color"])) - loaded_item_ref = null - update_icon() - return TRUE - else - say("The destination fax blocks the reception of this item.") + + fax_paper.request_state = TRUE + fax_paper.loc = null + + INVOKE_ASYNC(src, PROC_REF(animate_object_travel), fax_paper, "fax_receive", find_overlay_state(fax_paper, "send")) + history_add("Send", params["name"]) + + GLOB.requests.fax_request(usr.client, "sent a fax message from [fax_name]/[fax_id] to [params["name"]]", fax_paper) + to_chat(GLOB.admins, "[icon2html(src.icon, GLOB.admins)]FAX REQUEST: [ADMIN_FULLMONTY(usr)]: sent a fax message from [fax_name]/[fax_id][ADMIN_FLW(src)] to [html_encode(params["name"])] [ADMIN_SHOW_PAPER(fax_paper)]") + log_fax(fax_paper, params["id"], params["name"]) + loaded_item_ref = null + + for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) + if(fax.admin_fax_id == params["id"]) + fax.receive(fax_paper, fax_name) + break + update_appearance() + if("history_clear") history_clear() return TRUE @@ -349,40 +367,12 @@ balloon_alert(usr, "destination port jammed") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, -9) return FALSE - fax.receive(loaded, fax_name) - playback_sending(loaded, fax.fax_name) + fax.receive(loaded, fax_name, important = admin_fax_id) + history_add("Send", fax.fax_name) + INVOKE_ASYNC(src, PROC_REF(animate_object_travel), loaded, "fax_receive", find_overlay_state(loaded, "send")) return TRUE return FALSE -/** - * The procedure for sending a item to virtual admins fax machine. - * - * This procedure is similar to the send procedure except that it sends the item to - * a "virtual" fax to a special administrator list. - * Arguments: - * * loaded - The item to be sent. - * * sender - Reference to the sender's substance. - * * receiver_name - The recipient's fax name, which will be displayed in the administrator's list. - * * receiver_color - The color the receiver_name will be colored in. - */ -/obj/machinery/fax/proc/send_to_additional_faxes(obj/item/loaded, mob/sender, receiver_name, receiver_color) - GLOB.fax_manager.receive_request(sender, src, receiver_name, loaded, receiver_color) - playback_sending(loaded, receiver_name) - log_fax(loaded, "ADDITIONAL", receiver_name) - return TRUE - -/** - * The procedure for playing the animation. - * - * Procedure called to add to the history of sending messages, playing the sending animation. - * Arguments: - * * loaded - Sending item to determine the animation.. - * * receiver_name - Recipient's name to be added to the message history. - */ -/obj/machinery/fax/proc/playback_sending(obj/item/loaded, receiver_name) - history_add("Send", receiver_name) - INVOKE_ASYNC(src, PROC_REF(animate_object_travel), loaded, "fax_receive", find_overlay_state(loaded, "send")) - /** * Procedure for accepting papers from another fax machine. * @@ -391,7 +381,7 @@ * * loaded - The object to be printed. * * sender_name - The sender's name, which will be displayed in the message and recorded in the history of operations. */ -/obj/machinery/fax/proc/receive(obj/item/loaded, sender_name) +/obj/machinery/fax/proc/receive(obj/item/loaded, sender_name, important = FALSE) playsound(src, 'sound/items/poster_being_created.ogg', 20, FALSE) INVOKE_ASYNC(src, PROC_REF(animate_object_travel), loaded, "fax_receive", find_overlay_state(loaded, "receive")) say("Received correspondence from [sender_name].") @@ -504,3 +494,45 @@ do_sparks(5, TRUE, src) var/check_range = TRUE return electrocute_mob(user, get_area(src), src, 0.7, check_range) + +/obj/machinery/fax/frontiersmen + frontier_network = TRUE + visible_to_network = FALSE + +/obj/machinery/fax/admin + name = "Central Command Fax Machine" + fax_name = "Nanotrasen Central Command" + radio_channel = RADIO_CHANNEL_CENTCOM + visible_to_network = FALSE + admin_fax_id = "nanotrasen" + +/obj/machinery/fax/admin/solgov + name = "SolGov Frontier Affairs Fax Machine" + fax_name = "Solarian Confederation Frontier Affairs" + admin_fax_id = "solgov" + +/obj/machinery/fax/admin/syndicate + name = "Syndicate Coordination Fax Machine" + fax_name = "Syndicate Coordination Center" + admin_fax_id = "syndicate" + +/obj/machinery/fax/admin/inteq + name = "IRMG Fax Machine" + fax_name = "IRMG Mothership" + admin_fax_id = "inteq" + +/obj/machinery/fax/admin/minutemen + name = "CLIP HiComm Fax Machine" + fax_name = "Colonial League Leadership" + admin_fax_id = "minutemen" + +/obj/machinery/fax/admin/roumain + name = "Huntsman Council Fax Machine" + fax_name = "Saint-Roumain Council of Huntsmen" + admin_fax_id = "roumain" + +/obj/machinery/fax/admin/frontiersmen + name = "old fax machine" + fax_name = "Frontiersmen Communications Quartermaster" + admin_fax_id = "frontiersmen" + frontier_network = TRUE diff --git a/code/modules/paperwork/fax_manager.dm b/code/modules/paperwork/fax_manager.dm deleted file mode 100644 index 0107e440bec2..000000000000 --- a/code/modules/paperwork/fax_manager.dm +++ /dev/null @@ -1,154 +0,0 @@ -GLOBAL_DATUM_INIT(fax_manager, /datum/fax_manager, new) - -/** - * Fax Request Manager - * - * In its functionality it is similar to the usual Request Manager, but respectively for faxes. - * This manager allows you to send faxes on behalf of certain virtual faxes to all existing faxes, - * as well as receive faxes in their name from the players. - */ -/datum/fax_manager - /// A list that contains faxes from players and other related information. You can view the filling of its fields in the procedure receive_request. - var/list/requests = list() - -/datum/fax_manager/Destroy(force, ...) - QDEL_LIST(requests) - return ..() - -/datum/fax_manager/ui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "FaxManager") - ui.open() - ui.set_autoupdate(TRUE) - -/datum/fax_manager/ui_state(mob/user) - return GLOB.admin_state - -/datum/fax_manager/ui_static_data(mob/user) - var/list/data = list() - //Record additional faxes on a separate list - data["additional_faxes"] = GLOB.additional_faxes_list + GLOB.frontier_faxes_list - return data - -/datum/fax_manager/ui_data(mob/user) - var/list/data = list() - //Record a list of all existing faxes. - for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) - var/list/fax_data = list() - fax_data["fax_name"] = fax.fax_name - fax_data["fax_id"] = fax.fax_id - fax_data["frontier_network"] = fax.frontier_network - data["faxes"] += list(fax_data) - for(var/list/requested in requests) - var/list/request = list() - request["id_message"] = requested["id_message"] - request["time"] = requested["time"] - var/mob/sender = requested["sender"] - request["sender_name"] = sender.name - request["sender_fax_id"] = requested["sender_fax_id"] - request["sender_fax_name"] = requested["sender_fax_name"] - request["receiver_fax_name"] = requested["receiver_fax_name"] - data["requests"] += list(request) - return data - -/datum/fax_manager/ui_act(action, list/params) - . = ..() - if(.) - return - var/datum/admins/admin_datum = GLOB.admin_datums[usr.ckey] - - switch(action) - if("send") - for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) - if(fax.fax_id == params["fax_id"]) - var/obj/item/paper/paper = new() - paper.add_raw_text(params["message"]) - paper.update_appearance() - fax.receive(paper, params["fax_name"]) - return TRUE - if("flw_fax") - for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) - if(fax.fax_id == params["fax_id"]) - admin_datum.admin_follow(fax) - return TRUE - if("read_message") - var/list/request = get_request(params["id_message"]) - var/obj/item/paper/request/paper = request["paper"] - paper.ui_interact(usr) - return TRUE - if("flw") - var/list/request = get_request(params["id_message"]) - admin_datum.admin_follow(request["sender"]) - return TRUE - if("pp") - var/list/request = get_request(params["id_message"]) - usr.client.holder.show_player_panel(request["sender"]) - return TRUE - if("vv") - var/list/request = get_request(params["id_message"]) - usr.client.debug_variables(request["sender"]) - return TRUE - if("sm") - var/list/request = get_request(params["id_message"]) - usr.client.cmd_admin_subtle_message(request["sender"]) - return TRUE - if("logs") - var/list/request = get_request(params["id_message"]) - if(!ismob(request["sender"])) - to_chat(usr, "This can only be used on instances of type /mob.") - return TRUE - show_individual_logging_panel(request["sender"], null, null) - return TRUE - if("smite") - var/list/request = get_request(params["id_message"]) - if(!check_rights(R_FUN)) - to_chat(usr, "Insufficient permissions to smite, you require +FUN") - return TRUE - var/mob/living/carbon/human/H = request["sender"] - if (!H || !istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return TRUE - usr.client.smite(H) - return TRUE - -/datum/fax_manager/proc/get_request(id_message) - for(var/list/request in requests) - if(request["id_message"] == id_message) - return request - -/datum/fax_manager/proc/receive_request(mob/sender, obj/machinery/fax/sender_fax, receiver_fax_name, obj/item/paper/paper, receiver_color) - var/list/request = list() - var/obj/item/paper/request/message = new() - request["id_message"] = requests.len - request["time"] = game_timestamp() - request["sender"] = sender - request["sender_fax_id"] = sender_fax.fax_id - request["sender_fax_name"] = sender_fax.fax_name - request["receiver_fax_name"] = receiver_fax_name - message.copy_properties(paper) - request["paper"] = message - requests += list(request) - var/msg = "\"[sanitize(receiver_fax_name)]\" fax received a message from \"[sanitize(sender_fax.fax_name)]\" fax SENT BY [ADMIN_FULLMONTY(sender)] (Open Fax Manager)" - for(var/client/C in GLOB.admins) - if(C.prefs.chat_toggles & CHAT_PRAYER) - to_chat(C, msg) - for(var/client/admin in GLOB.admins) - if((admin.prefs.chat_toggles & CHAT_PRAYER) && (admin.prefs.toggles & SOUND_PRAYERS)) - SEND_SOUND(admin, sound('sound/items/poster_being_created.ogg')) - -// A special piece of paper for the administrator that will open the interface no matter what. -/obj/item/paper/request/ui_status() - return UI_INTERACTIVE - -// I'm sure there's a better way to transfer it, I just couldn't find it -/obj/item/paper/request/proc/copy_properties(obj/item/paper/paper) - raw_text_inputs = paper.raw_text_inputs - raw_stamp_data = paper.raw_stamp_data - raw_field_input_data = paper.raw_field_input_data - show_written_words = paper.show_written_words - stamp_cache = paper.stamp_cache - contact_poison = paper.contact_poison - contact_poison_volume = paper.contact_poison_volume - default_raw_text = paper.default_raw_text - input_field_count = paper.input_field_count diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 4080f68c5d74..e30a2bdd9737 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -60,6 +60,9 @@ /// state checking on if it should be shown to a viewer. var/datum/weakref/camera_holder + ///If TRUE, staff can read paper everywhere, but usually from requests panel. + var/request_state = FALSE + /// The (text for the) stamps on the paper. var/list/stamps /// Positioning for the stamp in tgui var/list/stamped /// Overlay info @@ -161,12 +164,13 @@ * * bold - Whether this text should be rendered completely bold. */ -/obj/item/paper/proc/add_raw_text(text, font, color, bold) +/obj/item/paper/proc/add_raw_text(text, font, color, bold, advanced_html) var/new_input_datum = new /datum/paper_input( text, font, color, bold, + advanced_html, ) input_field_count += get_input_field_count(text) @@ -320,7 +324,7 @@ // Are we on fire? Hard to read if so if(resistance_flags & ON_FIRE) return UI_CLOSE - if(camera_holder && can_show_to_mob_through_camera(user)) + if(camera_holder && can_show_to_mob_through_camera(user) || request_state) return UI_UPDATE if(!in_range(user, src) && !isobserver(user)) return UI_CLOSE @@ -373,7 +377,7 @@ return // Handle writing items. - var/writing_stats = attacking_item.get_writing_implement_details() + var/writing_stats = istype(attacking_item) ? attacking_item.get_writing_implement_details() : null if(!writing_stats) ui_interact(user) @@ -576,7 +580,7 @@ // Safe to assume there are writing implement details as user.can_write(...) fails with an invalid writing implement. var/writing_implement_data = holding.get_writing_implement_details() - add_raw_text(paper_input, writing_implement_data["font"], writing_implement_data["color"], writing_implement_data["use_bold"]) + add_raw_text(paper_input, writing_implement_data["font"], writing_implement_data["color"], writing_implement_data["use_bold"], check_rights_for(user?.client, R_FUN)) log_paper("[key_name(user)] wrote to [name]: \"[paper_input]\"") to_chat(user, "You have added to your paper masterpiece!"); @@ -663,15 +667,18 @@ var/colour = "" /// Whether to render the font bold or not. var/bold = FALSE + /// Whether the creator of this input field has the R_FUN permission, thus allowing less sanitization + var/advanced_html = FALSE -/datum/paper_input/New(_raw_text, _font, _colour, _bold) +/datum/paper_input/New(_raw_text, _font, _colour, _bold, _advanced_html) raw_text = _raw_text font = _font colour = _colour bold = _bold + advanced_html = _advanced_html /datum/paper_input/proc/make_copy() - return new /datum/paper_input(raw_text, font, colour, bold); + return new /datum/paper_input(raw_text, font, colour, bold, advanced_html); /datum/paper_input/proc/to_list() return list( @@ -679,6 +686,7 @@ font = font, color = colour, bold = bold, + advanced_html = advanced_html, ) /// A single instance of a saved stamp on paper. diff --git a/code/modules/requests/request.dm b/code/modules/requests/request.dm new file mode 100644 index 000000000000..0ac37f63187e --- /dev/null +++ b/code/modules/requests/request.dm @@ -0,0 +1,37 @@ +/** + * # Request + * + * A representation of an in-game request, such as a prayer. + */ +/datum/request + /// Unique ID of the request + var/id + /// Atomic ID for increment unique request IDs + var/static/atomic_id = 0 + /// The type of request + var/req_type + /// The owner of the request, the player who created it + var/client/owner + /// The ckey of the owner, used for re-binding variables on login + var/owner_ckey + /// The name of the owner, in format /, assigned at time of request creation + var/owner_name + /// The message associated with the request + var/message + /// Just any information, which you can to send with request. For example paper datum. + var/additional_information + /// When the request was created + var/timestamp + +/datum/request/New(client/requestee, type, request, additional_info) + if (!requestee) + qdel(src) + return + id = ++atomic_id + owner = requestee + owner_ckey = owner.ckey + req_type = type + message = request + timestamp = world.time + additional_information = additional_info + owner_name = key_name(requestee, FALSE) diff --git a/code/modules/requests/requests_manager.dm b/code/modules/requests/requests_manager.dm new file mode 100644 index 000000000000..e33da846d4de --- /dev/null +++ b/code/modules/requests/requests_manager.dm @@ -0,0 +1,249 @@ +/// Requests from prayers +#define REQUEST_PRAYER "request_prayer" +/// Requests for Centcom +#define REQUEST_CENTCOM "request_centcom" +/// Requests for the Syndicate +#define REQUEST_SYNDICATE "request_syndicate" +/// Requests for the nuke code +#define REQUEST_NUKE "request_nuke" +/// Requests somebody from fax +#define REQUEST_FAX "request_fax" + +GLOBAL_DATUM_INIT(requests, /datum/request_manager, new) + +/** + * # Request Manager + * + * Handles all player requests (prayers, centcom requests, syndicate requests) + * that occur in the duration of a round. + */ +/datum/request_manager + /// Associative list of ckey -> list of requests + var/list/requests = list() + /// List where requests can be accessed by ID + var/list/requests_by_id = list() + +/datum/request_manager/Destroy(force, ...) + QDEL_LIST(requests) + return ..() + +/** + * Used in the new client pipeline to catch when clients are reconnecting and need to have their + * reference re-assigned to the 'owner' variable of any requests + * + * Arguments: + * * C - The client who is logging in + */ +/datum/request_manager/proc/client_login(client/C) + if (!requests[C.ckey]) + return + for (var/datum/request/request as anything in requests[C.ckey]) + request.owner = C + +/** + * Used in the destroy client pipeline to catch when clients are disconnecting and need to have their + * reference nulled on the 'owner' variable of any requests + * + * Arguments: + * * C - The client who is logging out + */ +/datum/request_manager/proc/client_logout(client/C) + if (!requests[C.ckey]) + return + for (var/datum/request/request as anything in requests[C.ckey]) + request.owner = null + +/** + * Creates a request for a prayer, and notifies admins who have the sound notifications enabled when appropriate + * + * Arguments: + * * C - The client who is praying + * * message - The prayer + * * is_chaplain - Boolean operator describing if the prayer is from a chaplain + */ +/datum/request_manager/proc/pray(client/C, message, is_chaplain) + request_for_client(C, REQUEST_PRAYER, message) + for(var/client/admin in GLOB.admins) + if(is_chaplain && admin.prefs.chat_toggles & CHAT_PRAYER && admin.prefs.toggles & SOUND_PRAYERS) + SEND_SOUND(admin, sound('sound/effects/pray.ogg')) + +/** + * Creates a request for a Centcom message + * + * Arguments: + * * C - The client who is sending the request + * * message - The message + */ +/datum/request_manager/proc/message_centcom(client/C, message) + request_for_client(C, REQUEST_CENTCOM, message) + +/** + * Creates a request for a Syndicate message + * + * Arguments: + * * C - The client who is sending the request + * * message - The message + */ +/datum/request_manager/proc/message_syndicate(client/C, message) + request_for_client(C, REQUEST_SYNDICATE, message) + +/** + * Creates a request for the nuclear self destruct codes + * + * Arguments: + * * C - The client who is sending the request + * * message - The message + */ +/datum/request_manager/proc/nuke_request(client/C, message) + request_for_client(C, REQUEST_NUKE, message) + +/** + * Creates a request for fax answer + * + * Arguments: + * * requester - The client who is sending the request + * * message - Paper with text.. some stamps.. and another things. + */ +/datum/request_manager/proc/fax_request(client/requester, message, additional_info) + request_for_client(requester, REQUEST_FAX, message, additional_info) + +/** + * Creates a request and registers the request with all necessary internal tracking lists + * + * Arguments: + * * C - The client who is sending the request + * * type - The type of request, see defines + * * message - The message + */ +/datum/request_manager/proc/request_for_client(client/C, type, message, additional_info) + var/datum/request/request = new(C, type, message, additional_info) + if (!requests[C.ckey]) + requests[C.ckey] = list() + requests[C.ckey] += request + requests_by_id.len++ + requests_by_id[request.id] = request + +/datum/request_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "RequestManager") + ui.open() + +/datum/request_manager/ui_state(mob/user) + return GLOB.admin_state + +/datum/request_manager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + if (..()) + return + + // Only admins should be sending actions + if (!check_rights(R_ADMIN)) + to_chat(usr, "You do not have permission to do this, you require +ADMIN") + return + + // Get the request this relates to + var/id = params["id"] != null ? text2num(params["id"]) : null + if (!id) + to_chat(usr, "Failed to find a request ID in your action, please report this") + CRASH("Received an action without a request ID, this shouldn't happen!") + var/datum/request/request = !id ? null : requests_by_id[id] + var/datum/admins/admin_datum = GLOB.admin_datums[usr.ckey] + + switch(action) + if ("pp") + var/mob/M = request.owner?.mob + usr.client.holder.show_player_panel(M) + return TRUE + if ("vv") + var/mob/M = request.owner?.mob + usr.client.debug_variables(M) + return TRUE + if ("sm") + var/mob/M = request.owner?.mob + usr.client.cmd_admin_subtle_message(M) + return TRUE + if ("flw") + var/mob/M = request.owner?.mob + admin_datum.admin_follow(M) + return TRUE + if ("tp") + if(!SSticker.HasRoundStarted()) + to_chat(usr,"The game hasn't started yet!") + return TRUE + var/mob/M = request.owner?.mob + if(!ismob(M)) + var/datum/mind/D = M + if(!istype(D)) + to_chat(usr, "This can only be used on instances of type /mob and /mind") + return TRUE + else + D.traitor_panel() + return TRUE + else + usr.client.holder.show_traitor_panel(M) + return TRUE + if ("logs") + var/mob/M = request.owner?.mob + if(!ismob(M)) + to_chat(usr, "This can only be used on instances of type /mob.") + return TRUE + show_individual_logging_panel(M, null, null) + return TRUE + if ("smite") + if(!check_rights(R_FUN)) + to_chat(usr, "Insufficient permissions to smite, you require +FUN") + return TRUE + var/mob/living/carbon/human/H = request.owner?.mob + if (!H || !istype(H)) + to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + return TRUE + usr.client.smite(H) + return TRUE + if ("rply") + if (request.req_type == REQUEST_PRAYER) + to_chat(usr, "Cannot reply to a prayer") + return TRUE + var/mob/M = request.owner?.mob + usr.client.admin_headset_message(M, request.req_type == REQUEST_SYNDICATE ? RADIO_CHANNEL_SYNDICATE : RADIO_CHANNEL_CENTCOM) + return TRUE + if ("setcode") + if (request.req_type != REQUEST_NUKE) + to_chat(usr, "You cannot set the nuke code for a non-nuke-code-request request!") + return TRUE + var/code = random_nukecode() + for(var/obj/machinery/nuclearbomb/selfdestruct/SD in GLOB.nuke_list) + SD.r_code = code + message_admins("[key_name_admin(usr)] has set the self-destruct code to \"[code]\".") + return TRUE + if ("show") + if(request.req_type != REQUEST_FAX) + to_chat(usr, "Request doesn't have a paper to read.") + return TRUE + var/obj/item/paper/request_message = request.additional_information + request_message.ui_interact(usr) + return TRUE + +/datum/request_manager/ui_data(mob/user) + . = list( + "requests" = list() + ) + for (var/ckey in requests) + for (var/datum/request/request as anything in requests[ckey]) + var/list/data = list( + "id" = request.id, + "req_type" = request.req_type, + "owner" = request.owner ? "[REF(request.owner)]" : null, + "owner_ckey" = request.owner_ckey, + "owner_name" = request.owner_name, + "message" = request.message, + "additional_info" = request.additional_information, + "timestamp" = request.timestamp, + "timestamp_str" = station_time_timestamp(wtime = request.timestamp) + ) + .["requests"] += list(data) + +#undef REQUEST_PRAYER +#undef REQUEST_CENTCOM +#undef REQUEST_SYNDICATE +#undef REQUEST_NUKE +#undef REQUEST_FAX diff --git a/shiptest.dme b/shiptest.dme index 23e855ca6200..4f42a582878f 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -222,7 +222,6 @@ #include "code\_globalvars\lists\achievements.dm" #include "code\_globalvars\lists\admin.dm" #include "code\_globalvars\lists\client.dm" -#include "code\_globalvars\lists\faxes.dm" #include "code\_globalvars\lists\flavor_misc.dm" #include "code\_globalvars\lists\jobs.dm" #include "code\_globalvars\lists\keybindings.dm" @@ -1466,6 +1465,7 @@ #include "code\game\turfs\open\space\space.dm" #include "code\game\turfs\open\space\transit.dm" #include "code\modules\admin\admin.dm" +#include "code\modules\admin\admin_fax_panel.dm" #include "code\modules\admin\admin_follow.dm" #include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_ranks.dm" @@ -1510,7 +1510,6 @@ #include "code\modules\admin\verbs\deadsay.dm" #include "code\modules\admin\verbs\debug.dm" #include "code\modules\admin\verbs\diagnostics.dm" -#include "code\modules\admin\verbs\fax_manager.dm" #include "code\modules\admin\verbs\fix_air.dm" #include "code\modules\admin\verbs\fps.dm" #include "code\modules\admin\verbs\getlogs.dm" @@ -1531,6 +1530,7 @@ #include "code\modules\admin\verbs\randomverbs.dm" #include "code\modules\admin\verbs\reestablish_db_connection.dm" #include "code\modules\admin\verbs\rejuvenate.dm" +#include "code\modules\admin\verbs\requests.dm" #include "code\modules\admin\verbs\secrets.dm" #include "code\modules\admin\verbs\selectequipment.dm" #include "code\modules\admin\verbs\shuttlepanel.dm" @@ -2863,7 +2863,6 @@ #include "code\modules\paperwork\clipboard.dm" #include "code\modules\paperwork\contract.dm" #include "code\modules\paperwork\fax.dm" -#include "code\modules\paperwork\fax_manager.dm" #include "code\modules\paperwork\filingcabinet.dm" #include "code\modules\paperwork\folders.dm" #include "code\modules\paperwork\handlabeler.dm" @@ -3121,6 +3120,8 @@ #include "code\modules\religion\religion_sects.dm" #include "code\modules\religion\religion_structures.dm" #include "code\modules\religion\rites.dm" +#include "code\modules\requests\request.dm" +#include "code\modules\requests\requests_manager.dm" #include "code\modules\research\bepis.dm" #include "code\modules\research\designs.dm" #include "code\modules\research\destructive_analyzer.dm" diff --git a/tgui/packages/tgui/interfaces/AdminFax.js b/tgui/packages/tgui/interfaces/AdminFax.js new file mode 100644 index 000000000000..8245bc4a9ad3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AdminFax.js @@ -0,0 +1,263 @@ +import { useBackend, useLocalState } from '../backend'; +import { + Section, + Box, + Dropdown, + Button, + Input, + TextArea, + Divider, + NumberInput, + Tooltip, + Knob, +} from '../components'; +import { Window } from '../layouts'; + +export const AdminFax = (props, context) => { + return ( + + + + + + ); +}; + +export const FaxMainPanel = (props, context) => { + const { act, data } = useBackend(context); + + const [fax, setFax] = useLocalState(context, 'fax', ''); + const [saved, setSaved] = useLocalState(context, 'saved', false); + const [paperName, setPaperName] = useLocalState(context, 'paperName', ''); + const [fromWho, setFromWho] = useLocalState(context, 'fromWho', ''); + const [rawText, setRawText] = useLocalState(context, 'rawText', ''); + const [stamp, setStamp] = useLocalState(context, 'stampType', ''); + const [stampCoordX, setStampCoordX] = useLocalState( + context, + 'stampCoordX', + 0 + ); + const [stampCoordY, setStampCoordY] = useLocalState( + context, + 'stampCoordY', + 0 + ); + const [stampAngle, setStampAngle] = useLocalState(context, 'stampAngle', 0); + if (stamp && data.stamps[0] !== 'None') { + data.stamps.unshift('None'); + } + return ( + <> +

+ + + } + > + + setFax(value)} + /> + +
+
+ act('preview', { + faxName: fax, + }) + } + > + Preview + + } + > + + setPaperName(v)} + /> + + + + + + + setFromWho(v)} + /> + + + + + + +