diff --git a/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm b/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm
index bbac1ae4e8d9..29ad64707d84 100644
--- a/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm
+++ b/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm
@@ -237,14 +237,6 @@
light_range = 2
},
/area/ruin/beach/float_resort/villa)
-"gr" = (
-/obj/structure/table/wood,
-/obj/structure/curtain/cloth,
-/obj/item/nullrod/tribal_knife,
-/turf/open/floor/wood{
- light_range = 2
- },
-/area/ruin/beach/float_resort/villa)
"gQ" = (
/obj/structure/flora/ausbushes/genericbush,
/turf/open/floor/plating/grass/beach,
@@ -2502,7 +2494,7 @@ kp
kp
kp
kp
-gr
+ar
OH
OH
OH
diff --git a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm
index dee3343b8d78..83f661365941 100644
--- a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm
+++ b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm
@@ -5611,7 +5611,7 @@
/area/overmap_encounter/planetoid/jungle/explored)
"LM" = (
/obj/structure/closet,
-/obj/item/clothing/suit/armor/vest/capcarapace/ngr_captain,
+/obj/item/clothing/suit/armor/ngr/captain,
/obj/item/clothing/under/syndicate/ngr/officer,
/obj/item/gun/ballistic/automatic/pistol,
/obj/item/ammo_box/magazine/m10mm,
@@ -7296,7 +7296,7 @@
/obj/effect/decal/remains/human,
/obj/effect/decal/cleanable/vomit/old,
/obj/item/clothing/under/syndicate/ngr/officer,
-/obj/item/clothing/suit/armor/vest/capcarapace/ngr_captain,
+/obj/item/clothing/suit/armor/ngr/captain,
/obj/item/clothing/shoes/combat,
/turf/open/floor/mineral/plastitanium,
/area/ruin/jungle/starport/tower)
diff --git a/_maps/RandomRuins/SpaceRuins/DJstation.dmm b/_maps/RandomRuins/SpaceRuins/DJstation.dmm
deleted file mode 100644
index 63659db94417..000000000000
--- a/_maps/RandomRuins/SpaceRuins/DJstation.dmm
+++ /dev/null
@@ -1,932 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"aa" = (
-/turf/template_noop,
-/area/template_noop)
-"ab" = (
-/obj/structure/grille,
-/turf/open/floor/plating/airless,
-/area/ruin/space/djstation/solars)
-"ac" = (
-/obj/machinery/power/solar/fake,
-/obj/effect/turf_decal/solarpanel,
-/turf/open/floor/plasteel/airless,
-/area/ruin/space/djstation/solars)
-"ad" = (
-/turf/open/floor/plating/airless,
-/area/ruin/space/djstation/solars)
-"ae" = (
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
-"af" = (
-/turf/closed/wall,
-/area/ruin/space/djstation)
-"ag" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"ah" = (
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"ai" = (
-/obj/machinery/telecomms/relay/preset/ruskie,
-/obj/machinery/light/directional/north,
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"aj" = (
-/obj/machinery/power/terminal,
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"ak" = (
-/obj/item/multitool,
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"al" = (
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
- },
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"am" = (
-/obj/item/extinguisher,
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"as" = (
-/obj/structure/rack,
-/obj/item/clothing/suit/space/syndicate/orange,
-/obj/item/clothing/head/helmet/space/syndicate/orange,
-/obj/item/clothing/mask/breath,
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"at" = (
-/obj/machinery/door/airlock/maintenance_hatch,
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"au" = (
-/obj/structure/closet/emcloset,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"av" = (
-/obj/machinery/vending/snack,
-/obj/machinery/light/small/directional/north,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aw" = (
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"ax" = (
-/obj/machinery/light_switch{
- pixel_y = 28
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"ay" = (
-/obj/machinery/newscaster/directional/north{
- pixel_y = 32
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"az" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/effect/turf_decal/corner/transparent/bar,
-/obj/effect/turf_decal/corner/transparent/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aA" = (
-/obj/effect/turf_decal/corner/transparent/bar,
-/obj/effect/turf_decal/corner/transparent/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aB" = (
-/obj/effect/spawner/lootdrop/crate_spawner,
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aC" = (
-/obj/machinery/light_switch{
- pixel_y = 28
- },
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aD" = (
-/obj/structure/bed,
-/obj/item/bedsheet,
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aE" = (
-/obj/structure/table,
-/obj/item/flashlight/lamp,
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aF" = (
-/obj/structure/table,
-/obj/machinery/microwave{
- pixel_y = 8
- },
-/obj/effect/turf_decal/corner/transparent/bar,
-/obj/effect/turf_decal/corner/transparent/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aG" = (
-/obj/machinery/door/airlock/public/glass{
- name = "Kitchen";
- dir = 8
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aH" = (
-/obj/structure/table,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/obj/item/radio/intercom/table{
- dir = 8;
- freerange = 1
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aI" = (
-/obj/structure/chair/office/light,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aJ" = (
-/obj/machinery/door/airlock/public/glass{
- name = "Rest Room";
- dir = 8
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aK" = (
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aL" = (
-/obj/machinery/sleeper{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aM" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk,
-/obj/effect/turf_decal/corner/transparent/bar,
-/obj/effect/turf_decal/corner/transparent/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aN" = (
-/obj/machinery/light/small/directional/south,
-/obj/effect/turf_decal/corner/transparent/bar,
-/obj/effect/turf_decal/corner/transparent/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aO" = (
-/obj/structure/chair{
- dir = 1
- },
-/obj/effect/turf_decal/corner/transparent/bar,
-/obj/effect/turf_decal/corner/transparent/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aP" = (
-/obj/structure/table,
-/obj/effect/spawner/lootdrop/maintenance,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aQ" = (
-/obj/structure/table,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/obj/item/radio/intercom/table{
- freerange = 1
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aS" = (
-/obj/structure/frame/computer{
- anchored = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aT" = (
-/obj/structure/chair{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aU" = (
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aV" = (
-/obj/structure/closet,
-/turf/open/floor/plasteel/grimy,
-/area/ruin/space/djstation)
-"aW" = (
-/obj/structure/disposalpipe/segment,
-/turf/closed/wall,
-/area/ruin/space/djstation)
-"aX" = (
-/obj/machinery/door/airlock/hatch{
- name = "Washroom"
- },
-/turf/open/floor/plasteel/freezer,
-/area/ruin/space/djstation)
-"aY" = (
-/obj/machinery/light/directional/east,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"aZ" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
-"ba" = (
-/turf/open/floor/plasteel/freezer,
-/area/ruin/space/djstation)
-"bb" = (
-/obj/structure/chair{
- dir = 4
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"bc" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/machinery/space_heater,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"bd" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/rack,
-/obj/item/clothing/under/costume/pirate,
-/obj/item/clothing/head/bandana,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"be" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = -12;
- pixel_y = 2
- },
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/plasteel/freezer,
-/area/ruin/space/djstation)
-"bf" = (
-/obj/structure/toilet{
- pixel_y = 8
- },
-/turf/open/floor/plasteel/freezer,
-/area/ruin/space/djstation)
-"bg" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
- },
-/obj/item/pen,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"bh" = (
-/obj/structure/sign/warning/vacuum/external{
- pixel_y = -32
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"bi" = (
-/obj/machinery/door/airlock/external{
- name = "Ruskie DJ Station"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"bj" = (
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/structure/disposaloutlet,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
-"hc" = (
-/obj/machinery/power/smes/magical{
- desc = "A high-capacity superconducting magnetic energy storage (SMES) unit.";
- name = "power storage unit"
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"lU" = (
-/obj/structure/table,
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 1
- },
-/obj/effect/turf_decal/corner/opaque/white{
- dir = 2
- },
-/obj/item/paper/fluff/ruins/djstation,
-/turf/open/floor/plasteel,
-/area/ruin/space/djstation)
-"nM" = (
-/obj/item/storage/box/lights/mixed,
-/obj/structure/sign/warning/electricshock{
- pixel_y = -32
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"uK" = (
-/obj/machinery/power/apc{
- name = "Worn-out APC";
- pixel_y = -25
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"zO" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"Co" = (
-/obj/machinery/door/airlock/external{
- name = "Ruskie DJ Station"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-"Gg" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/ruin/space/djstation)
-
-(1,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-af
-ag
-ag
-ag
-af
-aa
-ae
-aa
-aa
-aa
-"}
-(2,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ad
-ac
-ad
-ac
-ab
-aa
-af
-az
-aF
-aM
-aW
-aZ
-aZ
-aZ
-bj
-aa
-"}
-(3,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ad
-ac
-ad
-ac
-ab
-aa
-af
-aA
-aA
-aN
-af
-ae
-ae
-aa
-aa
-aa
-"}
-(4,1,1) = {"
-aa
-aa
-aa
-aa
-ae
-ab
-ac
-ad
-ac
-ad
-ac
-ab
-aa
-af
-aA
-aA
-aO
-af
-af
-af
-af
-aa
-aa
-"}
-(5,1,1) = {"
-aa
-aa
-aa
-ae
-ae
-ab
-ac
-ad
-ac
-ad
-ac
-ab
-aa
-af
-aA
-aA
-aA
-aX
-ba
-be
-af
-aa
-aa
-"}
-(6,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-af
-ag
-ag
-af
-ag
-ag
-af
-af
-af
-ag
-aG
-ag
-af
-af
-bf
-af
-aa
-aa
-"}
-(7,1,1) = {"
-ab
-ac
-ac
-ac
-ac
-ag
-ah
-ah
-ah
-am
-ah
-uK
-af
-au
-aw
-aw
-aw
-aw
-af
-af
-af
-aa
-aa
-"}
-(8,1,1) = {"
-ab
-ad
-ad
-ad
-ad
-ag
-ah
-ah
-ah
-ah
-ah
-nM
-af
-av
-aw
-aH
-aP
-aw
-bb
-bg
-af
-aa
-aa
-"}
-(9,1,1) = {"
-ab
-ac
-ac
-ac
-ac
-af
-ai
-ah
-aj
-hc
-Gg
-zO
-at
-aw
-aw
-aI
-aQ
-aw
-aw
-aw
-af
-aa
-aa
-"}
-(10,1,1) = {"
-ab
-ad
-ad
-ad
-ad
-ag
-ah
-ah
-ak
-ah
-ah
-ah
-af
-ax
-aw
-lU
-aQ
-aw
-bc
-bh
-af
-af
-af
-"}
-(11,1,1) = {"
-ab
-ac
-ac
-ac
-ac
-ag
-ah
-ah
-al
-ah
-ah
-as
-af
-ay
-aw
-aw
-aw
-aY
-bd
-aw
-bi
-ah
-Co
-"}
-(12,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-af
-ag
-ag
-af
-ag
-ag
-af
-af
-af
-ag
-aJ
-ag
-af
-af
-af
-af
-af
-af
-"}
-(13,1,1) = {"
-aa
-aa
-ae
-ae
-ae
-ab
-ac
-ad
-ac
-ad
-ac
-ab
-aa
-af
-aB
-aK
-aS
-af
-aa
-aa
-aa
-aa
-aa
-"}
-(14,1,1) = {"
-aa
-aa
-aa
-aa
-ae
-ab
-ac
-ad
-ac
-ad
-ac
-ab
-aa
-af
-aC
-aK
-aT
-af
-aa
-aa
-aa
-aa
-aa
-"}
-(15,1,1) = {"
-aa
-aa
-aa
-aa
-ae
-ab
-ac
-ad
-ac
-ad
-ac
-ab
-aa
-af
-aD
-aK
-aU
-af
-ae
-ae
-aa
-aa
-aa
-"}
-(16,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ad
-ac
-ad
-ac
-ab
-aa
-af
-aE
-aL
-aV
-af
-aa
-aa
-aa
-aa
-aa
-"}
-(17,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-af
-ag
-ag
-ag
-af
-aa
-aa
-aa
-aa
-aa
-"}
-(18,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-ae
-aa
-ae
-aa
-aa
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-"}
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm
index 8a63378ced3c..b6298e29f39d 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm
@@ -35,7 +35,6 @@
/area/ruin/wasteplanet)
"bL" = (
/obj/structure/fluff/divine/convertaltar,
-/obj/item/nullrod/tribal_knife,
/obj/item/clothing/accessory/pandora_hope,
/turf/open/indestructible/hierophant/two/waste,
/area/ruin/wasteplanet)
diff --git a/_maps/configs/syndicate_gorlex_hyena.json b/_maps/configs/syndicate_gorlex_hyena.json
index 7b72cf208e0d..a835e00b1eba 100644
--- a/_maps/configs/syndicate_gorlex_hyena.json
+++ b/_maps/configs/syndicate_gorlex_hyena.json
@@ -18,25 +18,25 @@
"map_path": "_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm",
"job_slots": {
"Captain": {
- "outfit": "/datum/outfit/job/syndicate/captain/gorlex",
+ "outfit": "/datum/outfit/job/syndicate/captain/ngr",
"officer": true,
"slots": 1
},
"Foreman": {
- "outfit": "/datum/outfit/job/syndicate/ce/gorlex/ngr",
+ "outfit": "/datum/outfit/job/syndicate/ce/ngr",
"officer": true,
"slots": 1
},
"Mechanic": {
- "outfit": "/datum/outfit/job/syndicate/engineer/gorlex",
+ "outfit": "/datum/outfit/job/syndicate/engineer/ngr",
"slots": 1
},
"Wrecker": {
- "outfit": "/datum/outfit/job/syndicate/miner/gorlex",
+ "outfit": "/datum/outfit/job/syndicate/miner/ngr",
"slots": 2
},
- "Junior Agent": {
- "outfit": "/datum/outfit/job/syndicate/assistant/gorlex/ngr",
+ "Initiate": {
+ "outfit": "/datum/outfit/job/syndicate/assistant/ngr",
"slots": 2
}
},
diff --git a/_maps/map_catalogue.txt b/_maps/map_catalogue.txt
index f3fbe957688c..a8538ae59aeb 100644
--- a/_maps/map_catalogue.txt
+++ b/_maps/map_catalogue.txt
@@ -302,10 +302,6 @@ Find the key for using this catalogue in "map_catalogue_key.txt"
SpaceRuins:
- File Name = "_maps\RandomRuins\SpaceRuins\.dmm"
- Size = (x = 18)(y = 23)(z = 1)
- Tags = "No Combat", "Minor Loot", "Shelter"
-
File Name = "_maps\RandomRuins\SpaceRuins\astraeus.dmm"
Size = (x = 47)(y = 35)(z = 1)
Tags = "Minor Combat Challenge", "Medium Loot", "Inhospitable"
diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
index 93600539c4b4..ce77d98f5833 100644
--- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
+++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm
@@ -56,11 +56,11 @@
},
/obj/item/storage/backpack/security,
/obj/item/clothing/under/syndicate/ngr/officer,
-/obj/item/clothing/suit/armor/vest/capcarapace/ngr_captain,
-/obj/item/clothing/shoes/jackboots,
+/obj/item/clothing/suit/armor/ngr/captain,
+/obj/item/clothing/shoes/combat,
/obj/item/clothing/gloves/combat,
/obj/item/clothing/glasses/hud/security/sunglasses/eyepatch,
-/obj/item/clothing/head/ngrcap,
+/obj/item/clothing/head/ngr/peaked,
/obj/effect/decal/cleanable/dirt/dust,
/obj/item/gun/ballistic/revolver,
/obj/item/ammo_box/a357/match,
@@ -75,10 +75,6 @@
icon_state = "syndicate";
name = "armor locker"
},
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/suit/armor/vest/syndie,
-/obj/item/clothing/head/helmet/operator,
-/obj/item/clothing/head/helmet/operator,
/obj/effect/decal/cleanable/dirt/dust,
/obj/item/radio/intercom/directional/west{
pixel_y = -5
@@ -91,6 +87,12 @@
/obj/machinery/light/small/directional/west{
pixel_y = 7
},
+/obj/item/clothing/glasses/hud/security/sunglasses/ngr,
+/obj/item/clothing/glasses/hud/security/sunglasses/ngr,
+/obj/item/clothing/suit/armor/ngr,
+/obj/item/clothing/suit/armor/ngr,
+/obj/item/clothing/head/helmet/ngr,
+/obj/item/clothing/head/helmet/ngr,
/turf/open/floor/mineral/plastitanium,
/area/ship/security/armory)
"bN" = (
@@ -882,14 +884,10 @@
"pt" = (
/obj/effect/turf_decal/industrial/outline,
/obj/item/clothing/shoes/workboots/mining,
-/obj/item/clothing/under/syndicate/gorlex,
-/obj/item/clothing/gloves/explorer,
/obj/item/clothing/accessory/armband/cargo,
/obj/item/storage/belt/mining,
/obj/item/clothing/glasses/meson,
/obj/item/clothing/glasses/welding,
-/obj/item/clothing/head/hardhat/orange,
-/obj/item/clothing/head/soft/grey,
/obj/machinery/light/small/directional/north,
/obj/structure/closet/secure_closet{
anchored = 1;
@@ -899,15 +897,9 @@
},
/obj/machinery/firealarm/directional/east,
/obj/effect/turf_decal/industrial/outline,
-/obj/item/clothing/shoes/workboots/mining,
-/obj/item/clothing/under/syndicate/gorlex,
-/obj/item/clothing/gloves/explorer,
-/obj/item/clothing/accessory/armband/cargo,
-/obj/item/storage/belt/mining,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/welding,
-/obj/item/clothing/head/hardhat/orange,
-/obj/item/clothing/head/soft/grey,
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/suit/hazardvest/ngr,
+/obj/item/clothing/head/hardhat/ngr,
/turf/open/floor/plasteel/tech/grid,
/area/ship/storage)
"pu" = (
@@ -1028,14 +1020,10 @@
req_access = list(11)
},
/obj/item/clothing/shoes/workboots,
-/obj/item/clothing/under/syndicate/gorlex,
/obj/item/clothing/accessory/armband/engine,
-/obj/item/clothing/suit/hazardvest,
/obj/item/storage/belt/utility,
/obj/item/clothing/glasses/meson,
/obj/item/clothing/glasses/welding,
-/obj/item/clothing/head/hardhat,
-/obj/item/clothing/head/soft/yellow,
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/south,
/obj/machinery/light_switch{
@@ -1043,6 +1031,9 @@
pixel_y = -16;
pixel_x = -12
},
+/obj/item/clothing/under/syndicate/ngr,
+/obj/item/clothing/suit/hazardvest/ngr,
+/obj/item/clothing/head/hardhat/ngr,
/turf/open/floor/plasteel/tech/grid,
/area/ship/storage)
"rM" = (
@@ -1154,15 +1145,14 @@
req_access = list(48)
},
/obj/item/clothing/shoes/workboots/mining,
-/obj/item/clothing/under/syndicate/gorlex,
-/obj/item/clothing/gloves/explorer,
/obj/item/clothing/accessory/armband/cargo,
/obj/item/storage/belt/mining,
/obj/item/clothing/glasses/meson,
/obj/item/clothing/glasses/welding,
-/obj/item/clothing/head/hardhat/orange,
-/obj/item/clothing/head/soft/grey,
/obj/machinery/airalarm/directional/north,
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/suit/hazardvest/ngr,
+/obj/item/clothing/head/hardhat/ngr,
/turf/open/floor/plasteel/tech/grid,
/area/ship/storage)
"tI" = (
@@ -1340,6 +1330,18 @@
/area/ship/crew)
"wP" = (
/obj/effect/turf_decal/industrial/outline,
+/obj/structure/closet/crate{
+ name = "desert equipment crate";
+ desc = "A rectangular steel crate containing supplies to survive a desert environment more easily."
+ },
+/obj/item/clothing/neck/shemagh/ngr,
+/obj/item/clothing/neck/shemagh/ngr,
+/obj/item/clothing/neck/shemagh/ngr,
+/obj/item/clothing/neck/shemagh/ngr,
+/obj/item/clothing/head/ngr/flap,
+/obj/item/clothing/head/ngr/flap,
+/obj/item/clothing/head/ngr/flap,
+/obj/item/clothing/head/ngr/flap,
/turf/open/floor/plasteel/mono/dark,
/area/ship/cargo)
"xm" = (
@@ -1489,25 +1491,32 @@
/obj/structure/closet/wall/red/directional/east{
name = "uniform closet"
},
-/obj/item/clothing/under/syndicate/gorlex,
-/obj/item/clothing/under/syndicate/gorlex,
-/obj/item/clothing/under/syndicate/gorlex,
-/obj/item/clothing/under/syndicate/gorlex,
-/obj/item/clothing/shoes/jackboots,
-/obj/item/clothing/shoes/jackboots,
-/obj/item/clothing/shoes/jackboots,
-/obj/item/clothing/shoes/jackboots,
+/obj/item/tank/jetpack/suit,
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/shoes/combat,
+/obj/item/clothing/shoes/combat,
/obj/item/clothing/under/syndicate/ngr,
/obj/item/clothing/under/syndicate/ngr,
/obj/item/clothing/under/syndicate/ngr,
/obj/item/clothing/under/syndicate/ngr,
-/obj/item/clothing/head/soft/black,
-/obj/item/clothing/head/soft/black,
-/obj/item/clothing/head/soft/black,
-/obj/item/clothing/head/soft/black,
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 9
+ },
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/under/syndicate/ngr/jumpsuit,
+/obj/item/clothing/head/ngr,
+/obj/item/clothing/head/ngr,
+/obj/item/clothing/head/ngr,
+/obj/item/clothing/head/ngr,
/obj/item/radio,
/obj/item/radio,
/obj/item/radio,
@@ -1515,12 +1524,6 @@
/obj/item/radio,
/obj/item/radio,
/obj/item/radio,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 9
- },
/turf/open/floor/plasteel/dark,
/area/ship/crew/dorm)
"zA" = (
@@ -1642,19 +1645,14 @@
name = "foreman's locker";
req_access = list(56)
},
-/obj/item/clothing/shoes/jackboots,
+/obj/item/clothing/shoes/combat,
/obj/item/clothing/under/syndicate/ngr/officer,
-/obj/item/clothing/suit/toggle/industrial,
/obj/item/clothing/gloves/combat,
/obj/item/storage/belt/utility/chief{
name = "\improper Foreman's toolbelt"
},
/obj/item/clothing/glasses/meson,
/obj/item/clothing/glasses/welding,
-/obj/item/clothing/head/hardhat/white,
-/obj/item/clothing/head/beret/ce{
- name = "foreman beret"
- },
/obj/item/storage/toolbox/syndicate,
/obj/item/wrench/combat,
/obj/item/ammo_box/magazine/m10mm,
@@ -1662,6 +1660,8 @@
/obj/item/clothing/accessory/holster,
/obj/item/grenade/chem_grenade/metalfoam,
/obj/machinery/airalarm/directional/west,
+/obj/item/clothing/suit/ngr,
+/obj/item/clothing/head/hardhat/ngr/foreman,
/obj/item/tank/jetpack/suit,
/turf/open/floor/carpet/red,
/area/ship/cargo/office)
@@ -1692,7 +1692,7 @@
dir = 4;
pixel_x = -20
},
-/obj/item/clothing/suit/space/hardsuit/syndi/sbg,
+/obj/item/clothing/suit/space/hardsuit/syndi/ngr,
/obj/item/clothing/mask/gas/syndicate,
/turf/open/floor/carpet/black,
/area/ship/bridge)
diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
index 5878f667db1e..f420ba047123 100644
--- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
+++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm
@@ -101,8 +101,8 @@
req_access = list(3,150)
},
/obj/item/clothing/under/syndicate/ngr/officer,
-/obj/item/clothing/suit/armor/vest/capcarapace/ngr_captain,
-/obj/item/clothing/head/ngrcap,
+/obj/item/clothing/suit/armor/ngr/captain,
+/obj/item/clothing/head/ngr/peaked,
/obj/item/clothing/shoes/combat,
/obj/item/megaphone/sec{
name = "syndicate megaphone"
@@ -2367,7 +2367,7 @@
dir = 8
},
/obj/machinery/suit_storage_unit/syndicate{
- suit_type = /obj/item/clothing/suit/space/hardsuit/syndi/sbg;
+ suit_type = /obj/item/clothing/suit/space/hardsuit/syndi/ngr;
name = "lieutenant's suit storage unit"
},
/turf/open/floor/mineral/plastitanium,
@@ -6100,10 +6100,6 @@
/obj/machinery/camera/autoname{
dir = 6
},
-/obj/item/reagent_containers/spray/syndicate{
- pixel_y = 11;
- pixel_x = -2
- },
/turf/open/floor/wood/walnut,
/area/ship/crew/janitor)
"IE" = (
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index d9edeb83202c..0ae530f47913 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -773,3 +773,6 @@
///called in /obj/item/gun/process_chamber (src)
#define COMSIG_GUN_CHAMBER_PROCESSED "gun_chamber_processed"
+
+///called when an elzu should unroot
+#define COMSIG_DIGOUT "dig_out"
diff --git a/code/__DEFINES/sight.dm b/code/__DEFINES/sight.dm
index a0ce649dd04d..ba4589985015 100644
--- a/code/__DEFINES/sight.dm
+++ b/code/__DEFINES/sight.dm
@@ -13,6 +13,8 @@
#define INVISIBILITY_OBSERVER 60
#define SEE_INVISIBLE_OBSERVER 60
+#define INVISIBILITY_INVINISMIN 80 //invisible admins
+
#define INVISIBILITY_MAXIMUM 100 //the maximum allowed for "real" objects
#define INVISIBILITY_ABSTRACT 101 //only used for abstract objects (e.g. spacevine_controller), things that are not really there.
diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index bd0a59f85f42..ce224d44e4e5 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -83,10 +83,16 @@
/datum/component/storage/concrete/pockets/helmet/Initialize()
. = ..()
set_holdable(list(
- /obj/item/reagent_containers/food/drinks/bottle/vodka,
- /obj/item/reagent_containers/food/drinks/bottle/molotov,
- /obj/item/reagent_containers/food/drinks/drinkingglass,
- /obj/item/ammo_box/magazine/illestren_a850r
+ /obj/item/clothing/glasses/cold,
+ /obj/item/clothing/glasses/heat,
+ /obj/item/clothing/glasses/welding,
+ /obj/item/clothing/glasses/thermal,
+ /obj/item/clothing/glasses/night,
+ /obj/item/clothing/glasses/hud/health/night,
+ /obj/item/clothing/glasses/hud/security/night,
+ /obj/item/clothing/glasses/hud/security/sunglasses/inteq,
+ /obj/item/ammo_casing,
+ /obj/item/ammo_box/magazine/illestren_a850r,
))
/datum/component/storage/concrete/pockets/holster
diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm
index dbaac99c4296..d79847ea04c8 100644
--- a/code/datums/mood_events/generic_positive_events.dm
+++ b/code/datums/mood_events/generic_positive_events.dm
@@ -239,3 +239,8 @@
description = "Fishing is relaxing"
mood_change = 5
timeout = 3 MINUTES
+
+/datum/mood_event/root
+ description = span_nicegreen("I rooted recently, it feels good to charge naturally.\n")
+ mood_change = 5
+ timeout = 5 MINUTES
diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm
index 7872ba58a3a4..fefb250a1208 100644
--- a/code/datums/ruins/space.dm
+++ b/code/datums/ruins/space.dm
@@ -39,13 +39,6 @@
description = "In the darkest times, we will find our way home."
*/
-/datum/map_template/ruin/space/djstation
- id = "djstation"
- suffix = "djstation.dmm"
- name = "DJ Station"
- description = "Until very recently this pirate radio station was used to harangue local space stations over a variety of perceived \"ethics violations\". \
- It seems like someone finally got sick of it, but the equipment still works."
-
/datum/map_template/ruin/space/crashedship
id = "crashedship"
suffix = "crashedship.dmm"
diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm
index 76a33319631f..c7765ff772ac 100644
--- a/code/datums/status_effects/neutral.dm
+++ b/code/datums/status_effects/neutral.dm
@@ -275,3 +275,29 @@
/atom/movable/screen/alert/status_effect/surrender/Click(location, control, params)
. = ..()
owner.emote("surrender")
+
+/datum/status_effect/rooted
+ id = "rooted"
+ alert_type = /atom/movable/screen/alert/status_effect/rooted
+
+/datum/status_effect/rooted/on_apply()
+ . = ..()
+ ADD_TRAIT(owner,TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id))
+ ADD_TRAIT(owner,TRAIT_PUSHIMMUNE, TRAIT_STATUS_EFFECT(id))
+ SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "root", /datum/mood_event/root)
+
+/datum/status_effect/rooted/on_remove()
+ . = ..()
+ REMOVE_TRAIT(owner,TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id))
+ REMOVE_TRAIT(owner,TRAIT_PUSHIMMUNE, TRAIT_STATUS_EFFECT(id))
+
+/atom/movable/screen/alert/status_effect/rooted
+ name = "Rooted"
+ desc = "You're currently rooted into the ground and can't move. Click here to start digging yourself out."
+ icon_state = "dig_out"
+
+/atom/movable/screen/alert/status_effect/rooted/Click(location, control, params)
+ . = ..()
+ to_chat(owner, span_notice("You begin digging yourself free."))
+ SEND_SIGNAL(owner,COMSIG_DIGOUT)
+
diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm
index e6034e412198..de546d164c96 100644
--- a/code/game/area/areas/ruins/space.dm
+++ b/code/game/area/areas/ruins/space.dm
@@ -167,18 +167,6 @@
name = "Derelict Atmospherics"
icon_state = "red"
-//DJSTATION
-
-/area/ruin/space/djstation
- name = "Ruskie DJ Station"
- icon_state = "DJ"
- has_gravity = STANDARD_GRAVITY
-
-/area/ruin/space/djstation/solars
- name = "DJ Station Solars"
- icon_state = "DJ"
- has_gravity = STANDARD_GRAVITY
-
//OLD AI SAT
/area/tcommsat/oldaisat
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 6a36a0ee01d6..17e3fc0116b8 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -306,8 +306,8 @@
mechsyringe.forceMove(get_turf(chassis))
reagents.trans_to(mechsyringe, min(mechsyringe.volume, reagents.total_volume), transfered_by = chassis.occupant)
syringes -= mechsyringe
- mechsyringe.icon = 'icons/obj/chemical.dmi'
- mechsyringe.icon_state = "syringeproj"
+ mechsyringe.icon = 'icons/obj/chemical/misc.dmi'
+ mechsyringe.icon_state = "potgreen"
playsound(chassis, 'sound/items/syringeproj.ogg', 50, TRUE)
log_message("Launched [mechsyringe] from [src], targeting [target].", LOG_MECHA)
var/mob/originaloccupant = chassis.occupant
diff --git a/code/game/objects/effects/anomalies/anomalies_static.dm b/code/game/objects/effects/anomalies/anomalies_static.dm
index a00babe5844a..ab574ee475dd 100644
--- a/code/game/objects/effects/anomalies/anomalies_static.dm
+++ b/code/game/objects/effects/anomalies/anomalies_static.dm
@@ -39,19 +39,19 @@
playsound(src, 'sound/effects/walkietalkie.ogg', 75)
if(stored_mob && looking.stat != DEAD && prob(25))
say_fucky_things()
- if (!HAS_TRAIT(looking, TRAIT_MINDSHIELD) && looking.stat != DEAD || !looking.research_scanner && looking.stat != DEAD || !HAS_TRAIT(looking, TRAIT_DEAF))
- looking.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 200)
- playsound(src, 'sound/effects/stall.ogg', 50)
- if(looking.getOrganLoss(ORGAN_SLOT_BRAIN) >= 150 && looking.stat != DEAD)
- if(prob(20))
- var/mob/living/carbon/victim = looking
- var/obj/effect/anomaly/tvstatic/planetary/expansion
- expansion = new(get_turf(victim))
- visible_message(span_warning("The static overtakes [victim], taking their place!"))
- victim.death()
- expansion.stored_mob = victim
- victim.forceMove(expansion)
- return
+ if(HAS_TRAIT(looking, TRAIT_MINDSHIELD) || looking.stat == DEAD || looking.research_scanner || HAS_TRAIT(looking, TRAIT_DEAF))
+ continue
+ looking.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 200)
+ playsound(src, 'sound/effects/stall.ogg', 50)
+ if(looking.getOrganLoss(ORGAN_SLOT_BRAIN) >= 150 && looking.stat != DEAD)
+ if(prob(20))
+ var/mob/living/carbon/victim = looking
+ var/obj/effect/anomaly/tvstatic/planetary/expansion
+ expansion = new(get_turf(victim))
+ visible_message(span_warning("The static overtakes [victim], [expansion] taking their place!"))
+ victim.death()
+ expansion.stored_mob = victim
+ victim.forceMove(expansion)
/obj/effect/anomaly/tvstatic/Bumped(atom/movable/AM)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 240c4c3c640e..7e4256ccaa4c 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -706,6 +706,9 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
/obj/item/proc/get_belt_overlay() //Returns the icon used for overlaying the object on a belt
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', icon_state)
+/obj/item/proc/get_helmet_overlay() // returns the icon for overlaying on a helmet
+ return mutable_appearance('icons/mob/clothing/helmet_overlays.dmi', icon_state)
+
/obj/item/proc/update_slot_icon()
if(!ismob(loc))
return
diff --git a/code/game/objects/items/devices/portable_chem_mixer.dm b/code/game/objects/items/devices/portable_chem_mixer.dm
index fa777fec1124..1964e2dbd04a 100644
--- a/code/game/objects/items/devices/portable_chem_mixer.dm
+++ b/code/game/objects/items/devices/portable_chem_mixer.dm
@@ -1,7 +1,7 @@
/obj/item/storage/portable_chem_mixer
name = "Portable Chemical Mixer"
desc = "A portable device that dispenses and mixes chemicals. Can be upgraded to hold more beakers by inserting a vortex anomaly core. All necessary reagents need to be supplied with beakers. A label indicates that a screwdriver is required to open it for refills. This device can be worn on a belt. The letters 'S&T' are imprinted on the side."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "portablechemicalmixer_open"
w_class = WEIGHT_CLASS_HUGE
slot_flags = ITEM_SLOT_BELT
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index e44cf557b9a2..3afd539d4c97 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -22,6 +22,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
custom_materials = list(/datum/material/iron=75)
subspace_transmission = TRUE
headset = TRUE
+ listening = TRUE
canhear_range = 0 // can't hear headsets from very far away
slot_flags = ITEM_SLOT_EARS
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 2c7262139b17..944fe7462583 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -4,6 +4,7 @@
icon = 'icons/obj/radio.dmi'
icon_state = "intercom"
anchored = TRUE
+ listening = TRUE
w_class = WEIGHT_CLASS_BULKY
canhear_range = 2
dog_fashion = null
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index cd01cef70503..872d81323cf3 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -671,33 +671,6 @@
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
-/obj/item/nullrod/tribal_knife
- icon_state = "crysknife"
- item_state = "crysknife"
- lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
- name = "arrhythmic knife"
- w_class = WEIGHT_CLASS_HUGE
- desc = "They say fear is the true mind killer, but stabbing them in the head works too. Honour compels you to not sheathe it once drawn."
- sharpness = IS_SHARP
- slot_flags = null
- hitsound = 'sound/weapons/bladeslice.ogg'
- attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
- item_flags = SLOWS_WHILE_IN_HAND
-
-/obj/item/nullrod/tribal_knife/Initialize(mapload)
- . = ..()
- START_PROCESSING(SSobj, src)
- AddComponent(/datum/component/butchering, 50, 100)
-
-/obj/item/nullrod/tribal_knife/Destroy()
- STOP_PROCESSING(SSobj, src)
- . = ..()
-
-/obj/item/nullrod/tribal_knife/process()
- slowdown = rand(-2, 2)
-
-
/obj/item/nullrod/pitchfork
icon_state = "pitchfork0"
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index 2732e0d37719..1475ae88f8dd 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -66,10 +66,13 @@
/obj/item/kitchen/knife
name = "kitchen knife"
- icon_state = "knife"
- item_state = "knife"
+ icon = 'icons/obj/item/knife.dmi'
+ lefthand_file = 'icons/mob/inhands/weapons/knifes_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/knifes_righthand.dmi'
+ icon_state = "kitchenknife"
+ item_state = "kitchenknife"
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
- pickup_sound = 'sound/items/handling/knife1_pickup.ogg'
+ pickup_sound = 'sound/items/handling/knife1_pickup.ogg'
drop_sound = 'sound/items/handling/knife3_drop.ogg'
flags_1 = CONDUCT_1
force = 10
@@ -97,7 +100,6 @@
/obj/item/kitchen/knife/plastic
name = "plastic knife"
icon_state = "plastic_knife"
- item_state = "knife"
desc = "A very safe, barely sharp knife made of plastic. Good for cutting food and not much else."
force = 0
w_class = WEIGHT_CLASS_TINY
@@ -155,8 +157,8 @@
/obj/item/kitchen/knife/butcher
name = "butcher's cleaver"
- icon_state = "butch"
- item_state = "butch"
+ icon_state = "cleaver"
+ item_state = "cleaver"
desc = "A huge thing used for chopping and chopping up meat."
flags_1 = CONDUCT_1
force = 15
@@ -177,7 +179,8 @@
/obj/item/kitchen/knife/combat
name = "combat knife"
- icon_state = "buckknife"
+ icon_state = "combatknife"
+ item_state = "combatknife"
desc = "A military combat utility survival knife."
embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE)
force = 20
@@ -188,6 +191,7 @@
/obj/item/kitchen/knife/combat/survival
name = "survival knife"
icon_state = "survivalknife"
+ item_state = "survivalknife"
embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10)
desc = "A hunting grade survival knife."
force = 15
diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm
index 4505f596907f..bac896c0b8d5 100644
--- a/code/game/objects/items/storage/firstaid.dm
+++ b/code/game/objects/items/storage/firstaid.dm
@@ -306,7 +306,7 @@
name = "pill bottle"
desc = "It's an airtight container for storing medication."
icon_state = "pill_canister"
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/medicine.dmi'
item_state = "contsolid"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm
index 63d9b6552c16..cdd98f22196f 100644
--- a/code/game/objects/structures/crates_lockers/crates/secure.dm
+++ b/code/game/objects/structures/crates_lockers/crates/secure.dm
@@ -105,7 +105,7 @@
else ..()
/obj/structure/closet/crate/secure/exo
- desc = "A lock-enabled crate used to carry EXOCON merchandise destined for export to potential buyers."
- name = "EXOCON storage crate"
+ desc = "A lock-enabled crate used to carry EXOCOM merchandise destined for export to potential buyers."
+ name = "EXOCOM storage crate"
icon = 'icons/obj/crates.dmi'
icon_state = "exocrate"
diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm
index ed177c72d34e..224a11206d9f 100644
--- a/code/game/objects/structures/lavaland/geyser.dm
+++ b/code/game/objects/structures/lavaland/geyser.dm
@@ -51,6 +51,8 @@
name = "plunger"
desc = "It's a plunger for plunging."
icon = 'icons/obj/watercloset.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
+ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
icon_state = "plunger"
slot_flags = ITEM_SLOT_MASK
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 0539dca13e25..ef2bfae400e4 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -403,11 +403,13 @@ GLOBAL_PROTECT(admin_verbs_hideable)
set category = "Admin.Game"
set desc = "Toggles ghost-like invisibility (Don't abuse this)"
if(holder && mob)
- if(mob.invisibility == INVISIBILITY_OBSERVER)
+ if(mob.invisibility == INVISIBILITY_INVINISMIN)
mob.invisibility = initial(mob.invisibility)
+ mob.remove_from_all_data_huds()
to_chat(mob, "Invisimin off. Invisibility reset.", confidential = TRUE)
else
- mob.invisibility = INVISIBILITY_OBSERVER
+ mob.invisibility = INVISIBILITY_INVINISMIN
+ mob.add_to_all_human_data_huds()
to_chat(mob, "Invisimin on. You are now as invisible as a ghost.", confidential = TRUE)
/client/proc/check_antagonists()
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index 537afd8d4ff5..4b4ca9bd96ec 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -292,7 +292,7 @@
/obj/item/antag_spawner/syndi_borer
name = "syndicate brain-slug container"
desc = "Releases a modified cortical borer to assist the user."
- icon = 'icons/obj/chemical.dmi' //Temporary? //The most permanent type of solution lol
+ icon = 'icons/obj/chemical/hypovial.dmi'
icon_state = "hypoviallarge-b"
var/polling = FALSE
diff --git a/code/modules/antagonists/borer/borer.dm b/code/modules/antagonists/borer/borer.dm
index d4af47670412..511bbbec1fd5 100644
--- a/code/modules/antagonists/borer/borer.dm
+++ b/code/modules/antagonists/borer/borer.dm
@@ -1053,7 +1053,7 @@ GLOBAL_VAR_INIT(total_borer_hosts_needed, 3)
/datum/action/innate/borer/make_chems
name = "Secrete Chemicals"
desc = "Push some chemicals into your host's bloodstream."
- icon_icon = 'icons/obj/chemical.dmi'
+ icon_icon = 'icons/obj/chemical/chem_machines.dmi'
button_icon_state = "minidispenser"
/datum/action/innate/borer/make_chems/Activate()
diff --git a/code/modules/autowiki/pages/reactions.dm b/code/modules/autowiki/pages/reactions.dm
new file mode 100644
index 000000000000..2e1a07b806e4
--- /dev/null
+++ b/code/modules/autowiki/pages/reactions.dm
@@ -0,0 +1,65 @@
+/*
+Templates:
+
+Autowiki/Reaction
+{{{chems|ERROR}}} {{#if: {{{temperature|}}} |
Temperature {{{temperature}}} | }} {{#if: {{{container|}}} |
Needs container "{{{container}}}" | }}
Makes {{{volume|1}}}u
+
+Autowiki/Reagent
+{{#if: {{{tooltip|}}} | {{Tooltip|{{{volume}}} part [[#{{{name}}}|{{{name}}}]]|{{{tooltip}}}|FEF6E7}} | {{{volume}}} part {{{name}}} }}
+
+*/
+
+/datum/autowiki/reactions
+ page = "Template:Autowiki/Content/Reactions"
+
+/datum/autowiki/reactions/generate()
+ var/list/output = list()
+
+ var/list/mixable_reagents = list()
+ var/list/all_reactions = list()
+ for(var/type in subtypesof(/datum/chemical_reaction))
+ var/datum/chemical_reaction/reaction = new type
+ all_reactions += reaction
+ mixable_reagents |= reaction.results
+
+ for(var/datum/chemical_reaction/reaction as anything in all_reactions)
+ var/required_chems = ""
+ for(var/datum/reagent/required_chem_type as anything in reaction.required_reagents)
+ var/has_tooltip = (required_chem_type in mixable_reagents) && !(required_chem_type in reaction.results) && !(required_chem_type in GLOB.base_reagents)
+ required_chems += format_required_reagent(required_chem_type, reaction.required_reagents[required_chem_type], has_tooltip)
+
+ for(var/datum/reagent/required_catalyst_type as anything in reaction.required_catalysts)
+ var/has_tooltip = (required_catalyst_type in mixable_reagents) && !(required_catalyst_type in reaction.results) && !(required_catalyst_type in GLOB.base_reagents)
+ required_chems += format_required_reagent(required_catalyst_type, reaction.required_catalysts[required_catalyst_type], has_tooltip, "Catalyst")
+
+ for(var/datum/reagent/result_chem_type as anything in reaction.results)
+ var/result_name = escape_value(initial(result_chem_type.name))
+ var/list/details = list("volume" = reaction.results[result_chem_type], "chems" = required_chems, "name" = result_name)
+
+ if(reaction.required_temp > 0)
+ details["temperature"] = "[reaction.is_cold_recipe ? "below" : "above"] [reaction.required_temp]K"
+
+ if(reaction.required_container)
+ details["container"] = "[escape_value(initial(reaction.required_container.name))]"
+
+ var/description = include_template("Autowiki/Reaction", details)
+ if(result_name in output)
+ output[result_name] += "
OR
[description]"
+ else
+ output[result_name] = description
+
+ return output
+
+/datum/autowiki/reactions/proc/format_required_reagent(datum/reagent/required_reagent_type, volume, has_tooltip = FALSE, type)
+ var/list/details = list(
+ "volume" = volume,
+ "name" = escape_value(initial(required_reagent_type.name))
+ )
+
+ if(has_tooltip)
+ details["tooltip"] = include_template("Autowiki/Content/Reactions/[initial(required_reagent_type.name)]")
+
+ if(type)
+ details["type"] = type
+
+ return include_template("Autowiki/Reagent", details)
diff --git a/code/modules/autowiki/pages/reagents.dm b/code/modules/autowiki/pages/reagents.dm
index d10137d07f53..885c64665c20 100644
--- a/code/modules/autowiki/pages/reagents.dm
+++ b/code/modules/autowiki/pages/reagents.dm
@@ -1,65 +1,52 @@
-/*
-Templates:
-
-Autowiki/Reaction
-{{{chems|ERROR}}} {{#if: {{{temperature|}}} |
Temperature {{{temperature}}} | }} {{#if: {{{container|}}} |
Needs container "{{{container}}}" | }}
Makes {{{volume|1}}}u
-
-Autowiki/Reagent
-{{#if: {{{tooltip|}}} | {{Tooltip|{{{volume}}} part [[#{{{name}}}|{{{name}}}]]|{{{tooltip}}}|FEF6E7}} | {{{volume}}} part {{{name}}} }}
-
-*/
-
/datum/autowiki/reagents
- page = "Template:Autowiki/Content/Reactions"
+ page = "Template:Autowiki/Content/Reagents"
/datum/autowiki/reagents/generate()
- var/list/output = list()
+ var/output = ""
var/list/mixable_reagents = list()
- var/list/all_reactions = list()
for(var/type in subtypesof(/datum/chemical_reaction))
var/datum/chemical_reaction/reaction = new type
- all_reactions += reaction
mixable_reagents |= reaction.results
+ qdel(reaction)
- for(var/datum/chemical_reaction/reaction as anything in all_reactions)
- var/required_chems = ""
- for(var/datum/reagent/required_chem_type as anything in reaction.required_reagents)
- var/has_tooltip = (required_chem_type in mixable_reagents) && !(required_chem_type in reaction.results) && !(required_chem_type in GLOB.base_reagents)
- required_chems += format_required_reagent(required_chem_type, reaction.required_reagents[required_chem_type], has_tooltip)
+ var/list/categories = list()
- for(var/datum/reagent/required_catalyst_type as anything in reaction.required_catalysts)
- var/has_tooltip = (required_catalyst_type in mixable_reagents) && !(required_catalyst_type in reaction.results) && !(required_catalyst_type in GLOB.base_reagents)
- required_chems += format_required_reagent(required_catalyst_type, reaction.required_catalysts[required_catalyst_type], has_tooltip, "Catalyst")
+ for(var/reagent in mixable_reagents)
+ var/datum/reagent/chem = new reagent
- for(var/datum/reagent/result_chem_type as anything in reaction.results)
- var/result_name = escape_value(initial(result_chem_type.name))
- var/list/details = list("volume" = reaction.results[result_chem_type], "chems" = required_chems, "name" = result_name)
+ LAZYINITLIST(categories[chem.category])
+ categories[chem.category] += list(chem)
- if(reaction.required_temp > 0)
- details["temperature"] = "[reaction.is_cold_recipe ? "below" : "above"] [reaction.required_temp]K"
+ for(var/category in sortList(categories))
+ output += "\n"
+ output += generate_category(category, categories[category])
- if(reaction.required_container)
- details["container"] = "[escape_value(initial(reaction.required_container.name))]"
+ return output
- var/description = include_template("Autowiki/Reaction", details)
- if(result_name in output)
- output[result_name] += "
OR
[description]"
- else
- output[result_name] = description
+/datum/autowiki/reagents/proc/generate_category(name, list/datum/reagent/reagents)
+ var/output = "== [escape_value(name)] ==\n"
- return output
+ output += "{| class='wikitable sortable' style=width:100%; text-align:left; border: 3px solid #FFDD66; cellspacing=0; cellpadding=2; background-color:white;'\n"
+ output += "! scope='col' style='width:150px; background-color:#FFDD66;' |Name\n"
+ output += "! class='unsortable' scope='col' style='width:150px; background-color:#FFDD66;' |Recipe\n"
+ output += "! class='unsortable' scope='col' style='background-color:#FFDD66;' |Description\n"
+ output += "! scope='col' | Metabolization Rate\n"
+ output += "! scope='col' | Overdose Threshold\n"
+ output += "! scope='col' | Addiction Threshold\n"
+ output += "|-\n"
-/datum/autowiki/reagents/proc/format_required_reagent(datum/reagent/required_reagent_type, volume, has_tooltip = FALSE, type)
- var/list/details = list(
- "volume" = volume,
- "name" = escape_value(initial(required_reagent_type.name))
- )
+ reagents = sortList(reagents, /proc/cmp_typepaths_asc)
- if(has_tooltip)
- details["tooltip"] = include_template("Autowiki/Content/Reactions/[initial(required_reagent_type.name)]")
+ for(var/datum/reagent/reagent as anything in reagents)
+ output += "! style='background-color: #FFEE88;' | [include_template("anchor", list("1" = escape_value(reagent.name)))][escape_value(reagent.name)] _\n"
+ output += "|[include_template("Autowiki/Content/Reactions/[escape_value(reagent.name)]")]\n"
+ output += "|[escape_value(reagent.description)]\n"
+ output += "|data-sort-value=[reagent.metabolization_rate]|[reagent.metabolization_rate] units per tick\n"
+ output += "|[reagent.overdose_threshold || "data-sort-value=0|N/A"]\n"
+ output += "|[reagent.addiction_threshold || "data-sort-value=0|N/A"]\n"
+ output += "|-\n"
- if(type)
- details["type"] = type
+ output += "|}\n"
- return include_template("Autowiki/Reagent", details)
+ return output
diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm
index 53bfd35974e7..f1e46fe88cc8 100644
--- a/code/modules/cargo/packs/ammo.dm
+++ b/code/modules/cargo/packs/ammo.dm
@@ -143,6 +143,12 @@
contains = list(/obj/item/ammo_box/amagpellet_claris)
cost = 1000
+/datum/supply_pack/ammo/a300
+ name = ".300 Magnum Stripper Clip Crate"
+ desc = "Contains a five round .300 Magnum stripper clip for sniper rifles such as the HP Scout."
+ contains = list(/obj/item/ammo_box/a300)
+ cost = 750
+
/datum/supply_pack/ammo/ebr_ammo
name = "M514 EBR .308 Magazine Crate"
desc = "Contains a .308 magazine for the M514 EBR rifle, containing ten rounds."
@@ -173,6 +179,12 @@
contains = list(/obj/item/ammo_box/a762_40)
cost = 500
+/datum/supply_pack/ammo/a357_ammo_box
+ name = ".357 Ammo Box Crate"
+ desc = "Contains a fifty-round .357 box for revolvers such as the Scarborough Revolver and the HP Firebrand."
+ contains = list(/obj/item/ammo_box/a357_box)
+ cost = 250
+
/datum/supply_pack/ammo/c556mmHITP_ammo_box
name = "5.56 Caseless Ammo Box Crate"
desc = "Contains a fifty-round 5.56mm caseless box for SolGov sidearms like the Pistole C."
@@ -209,6 +221,12 @@
contains = list(/obj/item/ammo_box/c9mm/ap)
cost = 500
+/datum/supply_pack/ammo/a357match_ammo_box
+ name = ".357 Match Ammo Box Crate"
+ desc = "Contains a fifty-round .357 match box for better performance against armor."
+ contains = list(/obj/item/ammo_box/a357_box/match)
+ cost = 500
+
/datum/supply_pack/ammo/c556mmHITPap_ammo_box
name = "5.56 caseless AP Ammo Box Crate"
desc = "Contains a fifty-round 5.56mm caseless boxloaded with armor piercing ammo."
@@ -233,6 +251,12 @@
contains = list(/obj/item/ammo_box/c9mm/hp)
cost = 500
+/datum/supply_pack/ammo/a357hp_ammo_box
+ name = ".357 HP Ammo Box Crate"
+ desc = "Contains a fifty-round .357 box loaded with hollow point ammo, great against unarmored targets."
+ contains = list(/obj/item/ammo_box/a357_box/hp)
+ cost = 500
+
/datum/supply_pack/ammo/c10mmhp_ammo_box
name = "10mm HP Ammo Box Crate"
desc = "Contains a fifty-round 10mm box loaded with hollow point ammo, great against unarmored targets."
@@ -305,6 +329,18 @@
contains = list(/obj/item/ammo_box/c8x50mmhp_box)
cost = 500
+/datum/supply_pack/ammo/a300_box
+ name = ".300 Ammo Box Crate"
+ desc = "Contains a twenty-round .300 Magnum ammo box for sniper rifles such as the HP Scout."
+ contains = list(/obj/item/ammo_box/a300_box)
+ cost = 500
+
+/datum/supply_pack/ammo/a4570_box
+ name = ".45-70 Ammo Box Crate"
+ desc = "Contains a twelve-round box containing devastatingly powerful .45-70 caliber ammunition."
+ contains = list(/obj/item/ammo_box/a4570)
+ cost = 500
+
/datum/supply_pack/ammo/ferropelletboxcrate
name = "Ferromagnetic Pellet Box Crate"
desc = "Contains a fifty-round ferromagnetic pellet ammo box for gauss guns such as the Claris."
diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm
index 85a1cb0e0c3c..4025db76d300 100644
--- a/code/modules/cargo/packs/gun.dm
+++ b/code/modules/cargo/packs/gun.dm
@@ -7,16 +7,19 @@
*/
/datum/supply_pack/gun/disposable
- name = "Disposable Guns Crate"
- desc = "In some sectors, these disposable pistols are the only firearms that can be legally sold for less than 400cr. That price is still far too high; this pack contains five."
- cost = 750
- contains = list(/obj/item/gun/ballistic/automatic/pistol/disposable,
- /obj/item/gun/ballistic/automatic/pistol/disposable,
- /obj/item/gun/ballistic/automatic/pistol/disposable,
- /obj/item/gun/ballistic/automatic/pistol/disposable,
- /obj/item/gun/ballistic/automatic/pistol/disposable)
+ name = "Disposable Gun Crate"
+ desc = "In some sectors, these disposable pistols are the only firearms that can be legally sold for less than 200cr. That price is still far too high."
+ cost = 150
+ contains = list(/obj/item/gun/ballistic/automatic/pistol/disposable)
crate_name = "disposable gun crate"
+/datum/supply_pack/gun/derringer
+ name = ".38 Derringer Crate"
+ desc = "A cheap, concealable pistol manufactured by the reputable Hunter's Pride. At least it's better than a disposable pistol. Chambered in .38 rounds."
+ cost = 350
+ contains = list(/obj/item/gun/ballistic/derringer)
+ crate_name = "derringer crate"
+
/datum/supply_pack/gun/commanders
name = "Commander Pistol Crate"
desc = "Contains a modified Candor 'Commander' pistol, produced by Nanotrasen and chambered in 9mm."
@@ -30,16 +33,22 @@
contains = list(/obj/item/gun/ballistic/automatic/pistol,
/obj/item/gun/ballistic/automatic/pistol)
-/datum/supply_pack/gun/revolver
- name = "Scarborough Revolver Crate"
- desc = "Contains a concealable Scarborough revolver, chambered in .357."
+/datum/supply_pack/gun/candors
+ name = "Candor Pistol Crate"
+ desc = "Contains a Candor pistol, the trusty sidearm of any spacer, produced by Hunter's Pride and chambered in .45 ACP."
+ cost = 1000
+ contains = list(/obj/item/gun/ballistic/automatic/pistol/candor)
+
+/datum/supply_pack/gun/pepperbox
+ name = "HP Firebrand Pepperbox Revolver Crate"
+ desc = "Contains a concealable pepperbox revolver manufactured by the Saint Roumain Militia, chambered in .357."
cost = 1250
- contains = list(/obj/item/gun/ballistic/revolver)
+ contains = list(/obj/item/gun/ballistic/revolver/firebrand)
/datum/supply_pack/gun/detrevolver
name = "Hunter's Pride Detective Revolver Crate"
- desc = "Contains a concealable Solarian revolver, chambered in .38."
- cost = 1000
+ desc = "Contains a concealable revolver favored by police departments around the sector, chambered in .38."
+ cost = 600
contains = list(/obj/item/gun/ballistic/revolver/detective)
/datum/supply_pack/gun/shadowrevolver
@@ -101,6 +110,13 @@
Shotguns
*/
+/datum/supply_pack/gun/doublebarrel_shotgun
+ name = "Double Barrel Shotgun Crate"
+ desc = "For when you need to deal with 2 drunkards the old-fashioned way. Contains a double-barreled shotgun, favored by Bartenders. Warranty voided if sawed off."
+ cost = 1000
+ contains = list(/obj/item/gun/ballistic/shotgun/doublebarrel)
+ crate_name = "shotguns crate"
+
/datum/supply_pack/gun/hellfire_shotgun
name = "Hellfire Shotgun Crate"
desc = "For when you need to deal with 7 hooligans. Contains a pump shotgun, with a 8-round capacity."
@@ -126,13 +142,6 @@
contains = list(/obj/item/gun/ballistic/shotgun/flamingarrow)
crate_name = "rifle crate"
-/datum/supply_pack/gun/cobra20
- name = "Cobra-20 SMG Crate"
- desc = "Contains a .45 submachine gun, manufactured by Scarborough Arms and chambered in .45"
- cost = 3000
- contains = list(/obj/item/gun/ballistic/automatic/smg/c20r/cobra)
- crate_name = "SMG crate"
-
/datum/supply_pack/gun/illestren
name = "Illestren Rifle Crate"
desc = "Contains a expertly made bolt action rifle intended for hunting wildlife. Chambered in 8x50mmR rounds."
@@ -140,6 +149,27 @@
contains = list(/obj/item/gun/ballistic/rifle/illestren)
crate_name = "rifle crate"
+/datum/supply_pack/gun/beacon
+ name = "Contender Break Action Rifle Crate"
+ desc = "Contains a single shot break action rifle to hunt wildlife that annoys you in particular. Chambered in devastating .45-70 rounds. Warranty voided if sawed off."
+ cost = 2250
+ contains = list(/obj/item/gun/ballistic/shotgun/doublebarrel/beacon)
+ crate_name = "rifle crate"
+
+/datum/supply_pack/gun/scout
+ name = "Scout Sniper Rifle Crate"
+ desc = "Contains a traditional scoped rifle to hunt wildlife and big game from a respectful distance. Chambered in powerful .300 Magnum."
+ cost = 5500
+ contains = list(/obj/item/gun/ballistic/rifle/scout)
+ crate_name = "rifle crate"
+
+/datum/supply_pack/gun/cobra20
+ name = "Cobra-20 SMG Crate"
+ desc = "Contains a .45 submachine gun, manufactured by Scarborough Arms and chambered in .45"
+ cost = 3000
+ contains = list(/obj/item/gun/ballistic/automatic/smg/c20r/cobra)
+ crate_name = "SMG crate"
+
/datum/supply_pack/gun/wt550
name = "WT-550 Auto Rifle Crate"
desc = "Contains a high-powered, automatic personal defense weapon chambered in 4.6x30mm."
diff --git a/code/modules/cargo/packs/sec_supply.dm b/code/modules/cargo/packs/sec_supply.dm
index 023ab5ee853f..8ff09a5dc38a 100644
--- a/code/modules/cargo/packs/sec_supply.dm
+++ b/code/modules/cargo/packs/sec_supply.dm
@@ -56,11 +56,9 @@
/datum/supply_pack/sec_supply/riotshields
name = "Riot Shields Crate"
- desc = "For when the greytide gets really uppity. Contains three riot shields."
- cost = 2000
- contains = list(/obj/item/shield/riot,
- /obj/item/shield/riot,
- /obj/item/shield/riot)
+ desc = "Contains a riot shield, effective at holding back hostile fauna, xenofauna, or large crowds."
+ cost = 600
+ contains = list(/obj/item/shield/riot)
crate_name = "riot shields crate"
/datum/supply_pack/sec_supply/survknives
diff --git a/code/modules/client/loadout/loadout_suit.dm b/code/modules/client/loadout/loadout_suit.dm
index ec9fc916723e..8c758145f71e 100644
--- a/code/modules/client/loadout/loadout_suit.dm
+++ b/code/modules/client/loadout/loadout_suit.dm
@@ -111,3 +111,7 @@
display_name = "worn shirt"
path = /obj/item/clothing/suit/ianshirt
+/datum/gear/suit/hawaiian
+ display_name = "floral shirt"
+ description = "From grills to guns, this shirt's seen it all."
+ path = /obj/item/clothing/suit/hawaiian
diff --git a/code/modules/clothing/factions/ngr.dm b/code/modules/clothing/factions/ngr.dm
new file mode 100644
index 000000000000..7892a098b50d
--- /dev/null
+++ b/code/modules/clothing/factions/ngr.dm
@@ -0,0 +1,244 @@
+//////////////
+//Jumpsuits//
+/////////////
+
+/obj/item/clothing/under/syndicate/ngr
+ name = "\improper NGR uniform"
+ desc = "A button-up in a tasteful beige with black pants, used as the basic uniform of the New Gorlex Republic."
+ icon_state = "ngr"
+ item_state = "ngr"
+ armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
+ can_adjust = FALSE
+ icon = 'icons/obj/clothing/faction/ngr/uniforms.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/uniforms.dmi'
+
+/obj/item/clothing/under/syndicate/ngr/fatigues
+ name = "\improper NGR fatigues"
+ desc = "Beige fatigues used primarily by the ship and mech pilots of the New Gorlex Republic."
+ icon_state = "ngr_fatigues"
+ item_state = "ngr_fatigues"
+
+/obj/item/clothing/under/syndicate/ngr/jumpsuit
+ name = "\improper NGR jumpsuit"
+ desc = "A beige jumpsuit with black overalls used by wreckers of the New Gorlex Republic. A reminder of Gorlex VII's history as a mining colony, prior to its destruction."
+ icon_state = "ngr_jumpsuit"
+ item_state = "ngr_jumpsuit"
+
+/obj/item/clothing/under/syndicate/ngr/officer
+ name = "\improper NGR officer uniform"
+ desc = "A button-up in a tasteful black with beige pants, used by officers of the New Gorlex Republic."
+ icon_state = "ngr_officer"
+ item_state = "ngr_officer"
+
+/obj/item/clothing/under/plasmaman/ngr
+ name = "\improper NGR phorid envirosuit"
+ desc = "A button-up envirosuit with use intended for phorids of the New Gorlex Republic. Ensures they don't die of combustion."
+ icon_state = "ngr_envirosuit"
+ item_state = "ngr_envirosuit"
+ icon = 'icons/obj/clothing/faction/ngr/uniforms.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/uniforms.dmi'
+
+
+////////////////////
+//Unarmored suits//
+///////////////////
+
+/obj/item/clothing/suit/ngr
+ name = "foreman's jacket"
+ desc = "A beige high-visibility jacket worn by the Foreman of the New Gorlex Republic."
+ icon = 'icons/obj/clothing/faction/ngr/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/suits.dmi'
+ icon_state = "ngr_foreman"
+ item_state = "blackcloth"
+
+/obj/item/clothing/suit/ngr/smock
+ name = "blood red smock"
+ desc = "A blood-red surgical smock typically worn by field medics of the New Gorlex Republic. It hides red blood really well!"
+ icon_state = "ngr_apron"
+ item_state = "redcloth"
+
+/obj/item/clothing/suit/hazardvest/ngr
+ name = "blood-red hazard vest"
+ desc = "A blood-red high-visibility vest typically used in work zones by the New Gorlex Republic."
+ icon = 'icons/obj/clothing/faction/ngr/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/suits.dmi'
+ icon_state = "ngr_hazard"
+ item_state = "redcloth"
+
+//////////////////
+//Armored suits//
+/////////////////
+
+/obj/item/clothing/suit/armor/ngr
+ name = "NGR armor vest"
+ desc = "A slim Type I armored vest, utilized by the 2nd Battlegroup of the New Gorlex Republic that provides decent protection against most types of damage."
+ icon_state = "ngr_vest"
+ item_state = "armor"
+ icon = 'icons/obj/clothing/faction/ngr/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/suits.dmi'
+ blood_overlay_type = "armor"
+
+/obj/item/clothing/suit/armor/ngr/lieutenant
+ name = "\improper 2nd Battlegroup overcoat"
+ desc = "An armored overcoat worn by the lieutenants of the New Gorlex Republic's 2nd Battlegroup."
+ body_parts_covered = CHEST|GROIN|ARMS
+ icon_state = "ngr_lieutenant"
+ item_state = "ngr_lieutenant"
+ blood_overlay_type = "coat"
+ armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+
+/obj/item/clothing/suit/armor/ngr/captain
+ name = "\improper 2nd Battlegroup coat"
+ desc = "An armored coat worn by captains the New Gorlex Republic's 2nd Battlegroup."
+ body_parts_covered = CHEST|GROIN|ARMS
+ icon_state = "ngr_captain"
+ item_state = "ngr_captain"
+ blood_overlay_type = "coat"
+ armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+
+///////////////
+//Spacesuits//
+//////////////
+
+/obj/item/clothing/head/helmet/space/hardsuit/syndi/ngr
+ name = "beige-red hardsuit helmet"
+ desc = "A standardized dual-mode helmet derived from ICW-era advanced special operations helmets, its red partly replaced by beige. It is in EVA mode. Manufactured by Second Battlegroup."
+ alt_desc = "A standardized dual-mode helmet derived from ICW-era advanced special operations helmets, its red partly replaced by beige. It is in combat mode. Manufactured by Second Battlegroup."
+ icon_state = "hardsuit1-ngr"
+ item_state = "hardsuit1-ngr"
+ icon = 'icons/obj/clothing/faction/ngr/head.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/head.dmi'
+ hardsuit_type = "ngr"
+
+/obj/item/clothing/suit/space/hardsuit/syndi/ngr
+ name = "beige-red hardsuit"
+ desc = "A standardized dual-mode hardsuit derived from ICW-era advanced special operations hardsuits, its red partly replaced by beige. It is in EVA mode. Manufactured by Second Battlegroup."
+ alt_desc = "A standardized dual-mode hardsuit derived from ICW-era advanced special operations hardsuits, its red partly replaced by beige. It is in combat mode. Manufactured by the Second Battlegroup."
+ icon_state = "hardsuit1-ngr"
+ item_state = "hardsuit1-ngr"
+ hardsuit_type = "ngr"
+ icon = 'icons/obj/clothing/faction/ngr/suits.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/suits.dmi'
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/ngr
+ lightweight = 1
+ jetpack = null
+
+/obj/item/clothing/head/helmet/space/plasmaman/ngr
+ name = "NGR phorid envirosuit helmet"
+ desc = "An envirohelmet designed for phorids of the New Gorlex Republic, with intimidating blood-red stripes."
+ icon_state = "ngr_envirohelm"
+ item_state = "ngr_envirohelm"
+ icon = 'icons/obj/clothing/faction/ngr/head.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/head.dmi'
+
+/////////
+//Hats//
+////////
+
+/obj/item/clothing/head/ngr
+ name = "beige garrison cap"
+ desc = "A garrison cap used by low-ranking members of the New Gorlex Republic's 2nd Battlegroup when off-duty."
+ icon_state = "ngr_garrison"
+ icon = 'icons/obj/clothing/faction/ngr/head.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/head.dmi'
+ armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+
+/obj/item/clothing/head/ngr/flap
+ name = "beige flap cap"
+ desc = "A flap cap used by soldiers of the New Gorlex Republic's 2nd Battlegroup in desert environments."
+ icon_state = "ngr_flap"
+
+/obj/item/clothing/head/ngr/surgical
+ name = "blood-red surgical cap"
+ desc = "A surgical cap used by field medics of the New Gorlex Republic's 2nd Battlegroup."
+ icon_state = "ngr_surgery"
+
+/obj/item/clothing/head/hardhat/ngr
+ name = "blood-red hard hat"
+ desc = "A blood-red hardhat typically used by Wreckers and Ship Engineers of the New Gorlex Republic."
+ icon_state = "ngr_hardhat"
+ icon = 'icons/obj/clothing/faction/ngr/head.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/head.dmi'
+
+/obj/item/clothing/head/hardhat/ngr/foreman
+ name = "beige hard hat"
+ desc = "A beige hardhat used exclusively by the Foreman of the New Gorlex Republic."
+ icon_state = "ngr_foreman"
+
+/obj/item/clothing/head/ngr/peaked
+ name = "2nd Battlegroup peaked cap"
+ desc = "A cap worn by officers of the New Gorlex Republic's 2nd Battlegroup."
+ icon_state = "ngr_officer"
+ item_state = "ngr_officer"
+
+/obj/item/clothing/head/helmet/ngr
+ name = "\improper NGR X-11 helmet"
+ desc = "A well-armored helmet utilized by the New Gorlex Republic's 2nd Battlegroup, far better at protecting one's head than the softer caps."
+ icon = 'icons/obj/clothing/faction/ngr/head.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/head.dmi'
+ armor = list("melee" = 40, "bullet" = 60, "laser" = 35, "energy" = 35, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) // The guys who specialize in ballistics would probably have better bullet armor. Maybe.
+ icon_state = "ngr_x11"
+ item_state = "ngr_x11"
+
+/obj/item/clothing/head/helmet/ngr/swat
+ name = "\improper NGR pilot helmet"
+ desc = "A modified X-11 helmet utilized by the pilots of the New Gorlex Republic's 2nd Battlegroup. The attached visor helps protect against sudden flashes from explosions."
+ flash_protect = FLASH_PROTECTION_WELDER
+ icon_state = "ngr_pilot"
+ item_state = "ngr_pilot"
+
+////////////
+//Glasses//
+///////////
+
+/obj/item/clothing/glasses/hud/security/sunglasses/ngr
+ name = "NGR modified mesons"
+ desc = "A modified version of widely-used optical meson scanners, with a flash-proof tint and integrated security HUD. Unfortunately, the opaque visor disables the meson functionality."
+ icon_state = "ngr_goggles"
+ item_state = "ngr_goggles"
+ icon = 'icons/obj/clothing/faction/ngr/eyes.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/eyes.dmi'
+ glass_colour_type = /datum/client_colour/glass_colour/green
+
+//////////
+//Masks//
+/////////
+
+/obj/item/clothing/mask/gas/sechailer/balaclava/ngr
+ name = "NGR combat balaclava"
+ desc = "A surprisingly advanced balaclava. while it doesn't muffle your voice it has a miniature rebreather for internals. Comfy to boot! This version is commonly used by the soldiers of the New Gorlex Republic to protect against sandstorms."
+ icon_state = "ngr_balaclava"
+ item_state = "ngr_balaclava"
+ icon = 'icons/obj/clothing/faction/ngr/mask.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/mask.dmi'
+
+/obj/item/clothing/mask/gas/syndicate/ngr
+ name = "NGR face mask"
+ desc = "A face mask that covers the nose, mouth and neck of those who wear it. Favored by field medics over the balaclava due to lessened heat while wearing."
+ icon_state = "ngr_facemask"
+ item_state = "ngr_facemask"
+ icon = 'icons/obj/clothing/faction/ngr/mask.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/mask.dmi'
+
+//////////
+//Neck//
+/////////
+
+/obj/item/clothing/neck/shemagh/ngr
+ name = "shemagh"
+ desc = "An oversized shemagh, in a tacticool blood-red for use in the 2nd Battlegroup."
+ icon_state = "ngr_shemagh"
+ icon = 'icons/obj/clothing/faction/ngr/neck.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/neck.dmi'
+
+//////////
+//Belts//
+/////////
+
+/obj/item/storage/belt/security/webbing/ngr
+ name = "NGR webbing"
+ desc = "A set of tactical webbing for operators of the New Gorlex Republic, can hold security gear."
+ icon_state = "ngr_webbing"
+ item_state = "ngr_webbing"
+ icon = 'icons/obj/clothing/faction/ngr/belt.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/belt.dmi'
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 60d6ae18c6a5..dee6b0d0c9ee 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -18,10 +18,15 @@
dog_fashion = /datum/dog_fashion/head/helmet
- var/can_flashlight = FALSE //if a flashlight can be mounted. if it has a flashlight and this is false, it is permanently attached.
+ //if a flashlight can be mounted. if it has a flashlight and this is false, it is permanently attached.
+ var/can_flashlight = FALSE
var/obj/item/flashlight/seclite/attached_light
var/datum/action/item_action/toggle_helmet_flashlight/action_light
+ pocket_storage_component_path = /datum/component/storage/concrete/pockets/helmet
+ // should we overlay the items inside our helmet
+ var/content_overlays = FALSE
+
/obj/item/clothing/head/helmet/Initialize()
. = ..()
if(attached_light)
@@ -173,16 +178,21 @@
var/mutable_appearance/flashlightlight_overlay
if(isinhands)
return
- if(!attached_light)
- return
- if(attached_light.on)
- flashlightlight_overlay = mutable_appearance('icons/mob/clothing/head.dmi', "[flashlight_state]_on")
+ if(attached_light)
+ if(attached_light.on)
+ flashlightlight_overlay = mutable_appearance('icons/mob/clothing/head.dmi', "[flashlight_state]_on")
+ else
+ flashlightlight_overlay = mutable_appearance('icons/mob/clothing/head.dmi', flashlight_state)
+ . += flashlightlight_overlay
+ if(content_overlays)
+ for(var/obj/item/I in contents)
+ . += I.get_helmet_overlay()
else
- flashlightlight_overlay = mutable_appearance('icons/mob/clothing/head.dmi', flashlight_state)
- . += flashlightlight_overlay
+ return
/obj/item/clothing/head/helmet/sec
can_flashlight = TRUE
+ content_overlays = TRUE
/obj/item/clothing/head/helmet/sec/attackby(obj/item/I, mob/user, params)
if(issignaler(I))
@@ -216,6 +226,7 @@
"Snow" = "helmetalt_snow",
"Urban" = "helmetalt_urban",
)
+ content_overlays = TRUE
/obj/item/clothing/head/helmet/marine
name = "tactical combat helmet"
@@ -489,6 +500,7 @@
icon_state = "inteq_swat"
item_state = "inteq_swat"
flags_inv = HIDEHAIR
+ content_overlays = TRUE
/obj/item/clothing/head/helmet/inteq
name = "inteq helmet"
@@ -496,6 +508,7 @@
icon_state = "inteq_helmet"
icon_state = "inteq_helmet"
can_flashlight = TRUE
+ content_overlays = TRUE
/obj/item/clothing/head/solgov
name = "\improper SolGov officer's cap"
@@ -537,6 +550,7 @@
desc = "A robust combat helmet commonly employed by Syndicate forces, regardless of alignment."
icon_state = "operator"
item_state = "operator"
+ content_overlays = TRUE
/obj/item/clothing/head/helmet/medical
name = "\improper trauma team helmet"
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 0e9e09ee0fdd..61f032b5ef61 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -452,13 +452,6 @@
icon_state = "JackFrostHat"
item_state = "JackFrostHat"
-/obj/item/clothing/head/ngrcap
- name = "2nd Battlegroup peaked cap"
- desc = "A cap worn by officers of the New Gorlex Republic's 2nd Battlegroup."
- icon_state = "ngrcap"
- item_state = "ngrcap"
- flags_inv = 0
-
/obj/item/clothing/head/maidheadband/syndicate
name = "tactical maid headband"
desc = "Tacticute."
diff --git a/code/modules/clothing/outfits/factions/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm
index 8f98f29a6b1f..8f13554f4b00 100644
--- a/code/modules/clothing/outfits/factions/syndicate.dm
+++ b/code/modules/clothing/outfits/factions/syndicate.dm
@@ -59,10 +59,14 @@
uniform = /obj/item/clothing/under/syndicate/gorlex
alt_uniform = /obj/item/clothing/under/syndicate
-/datum/outfit/job/syndicate/assistant/gorlex/ngr
- name = "Syndicate - Junior Agent (New Gorlex Republic)"
+/datum/outfit/job/syndicate/assistant/ngr
+ name = "Syndicate - Initiate (New Gorlex Republic)"
+ id_assignment = "Initiate"
+ head = /obj/item/clothing/head/ngr
uniform = /obj/item/clothing/under/syndicate/ngr
+ shoes = /obj/item/clothing/shoes/combat
+
alt_uniform = null
/datum/outfit/job/syndicate/assistant/gec
@@ -305,8 +309,16 @@
name = "Syndicate - Captain (Gorlex Marauders)"
uniform = /obj/item/clothing/under/syndicate/ngr/officer
- head = /obj/item/clothing/head/ngrcap
- suit = /obj/item/clothing/suit/armor/vest/capcarapace/ngr_captain
+ head = /obj/item/clothing/head/ngr/peaked
+ suit = /obj/item/clothing/suit/armor/ngr/captain
+
+/datum/outfit/job/syndicate/captain/ngr
+ name = "Syndicate - Captain (New Gorlex Republic)"
+
+ uniform = /obj/item/clothing/under/syndicate/ngr/officer
+ head = /obj/item/clothing/head/ngr/peaked
+ suit = /obj/item/clothing/suit/armor/ngr/captain
+ shoes = /obj/item/clothing/shoes/combat
/datum/outfit/job/syndicate/captain/cybersun
name = "Syndicate - Captain (Cybersun)"
@@ -427,10 +439,18 @@
shoes = /obj/item/clothing/shoes/jackboots
gloves = /obj/item/clothing/gloves/combat
-/datum/outfit/job/syndicate/ce/gorlex/ngr
+/datum/outfit/job/syndicate/ce/ngr
name = "Syndicate - Foreman (New Gorlex Republic)"
+ head = /obj/item/clothing/head/hardhat/ngr/foreman
+ ears = /obj/item/radio/headset/syndicate/alt
uniform = /obj/item/clothing/under/syndicate/ngr/officer
+ alt_uniform = null
+ suit = /obj/item/clothing/suit/ngr
+ alt_suit = null
+ shoes = /obj/item/clothing/shoes/combat
+ gloves = /obj/item/clothing/gloves/combat
+
//Chief Medical Officer
@@ -549,6 +569,22 @@
name = "Syndicate - Sergeant (Gorlex)"
id_assignment = "Sergeant"
+/datum/outfit/job/syndicate/hos/ngr
+ name = "Syndicate - Lieutenant (New Gorlex Republic)"
+ id_assignment = "Lieutenant"
+
+ ears = /obj/item/radio/headset/syndicate/alt
+ uniform = /obj/item/clothing/under/syndicate/ngr/officer
+ head = /obj/item/clothing/head/ngr/peaked
+ suit =/obj/item/clothing/suit/armor/ngr/lieutenant
+ id = /obj/item/card/id/syndicate_command/crew_id
+ shoes = /obj/item/clothing/shoes/combat
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ suit_store = /obj/item/gun/ballistic/automatic/pistol
+ r_pocket = /obj/item/assembly/flash/handheld
+ l_pocket = /obj/item/restraints/handcuffs
+ backpack_contents = list(/obj/item/melee/baton/loaded=1)
+
/datum/outfit/job/syndicate/hos/twink
name = "Syndicate - Lieutenant (Twinkleshine, NGR)"
id_assignment = "Lieutenant"
@@ -667,6 +703,18 @@
id = /obj/item/card/id/syndicate_command/crew_id
backpack_contents = list(/obj/item/storage/box/survival/syndie=1, /obj/item/storage/firstaid/medical,)
+/datum/outfit/job/syndicate/doctor/ngr
+ name = "Syndicate - Medical Doctor (New Gorlex Republic)"
+
+ uniform = /obj/item/clothing/under/syndicate/ngr
+ head = /obj/item/clothing/head/ngr/surgical
+ suit = /obj/item/clothing/suit/ngr/smock
+ glasses = /obj/item/clothing/glasses/hud/health
+ r_pocket = /obj/item/kitchen/knife/combat/survival
+ back = /obj/item/storage/backpack/duffelbag/syndie/med
+ id = /obj/item/card/id/syndicate_command/crew_id
+ backpack_contents = list(/obj/item/storage/box/survival/syndie=1, /obj/item/storage/firstaid/medical,)
+
//paramedics
@@ -858,6 +906,20 @@
/datum/outfit/job/syndicate/security/gorlex
name = "Syndicate - Assault Operative (Gorlex)"
+/datum/outfit/job/syndicate/security/ngr
+ name = "Syndicate - Operative (New Gorlex Republic)"
+ id_assignment = "Operative"
+ job_icon = "securityofficer"
+
+ uniform = /obj/item/clothing/under/syndicate/ngr
+ belt = /obj/item/storage/belt/security/webbing/ngr
+ suit = /obj/item/clothing/suit/armor/ngr
+ gloves = /obj/item/clothing/gloves/color/black
+ head = /obj/item/clothing/head/helmet/ngr
+ shoes = /obj/item/clothing/shoes/combat
+ l_pocket = /obj/item/restraints/handcuffs
+ r_pocket = /obj/item/assembly/flash/handheld
+
/datum/outfit/job/syndicate/security/twink
name = "Syndicate - Operative (Twinkleshine)"
@@ -933,6 +995,17 @@
shoes = /obj/item/clothing/shoes/workboots
ears = /obj/item/radio/headset/alt
+/datum/outfit/job/syndicate/miner/ngr
+ name = "Syndicate - Wrecker (New Gorlex Republic)"
+ id_assignment = "Wrecker"
+
+ head = /obj/item/clothing/head/hardhat/ngr
+ suit = /obj/item/clothing/suit/hazardvest/ngr
+ uniform = /obj/item/clothing/under/syndicate/ngr/jumpsuit
+ accessory = /obj/item/clothing/accessory/armband/cargo
+ shoes = /obj/item/clothing/shoes/workboots
+ ears = /obj/item/radio/headset/alt
+
/datum/outfit/job/syndicate/miner/twink
name = "Syndicate - Miner (Twinkleshine, SUNS)"
@@ -1024,6 +1097,16 @@
shoes = /obj/item/clothing/shoes/workboots
glasses = null
+/datum/outfit/job/syndicate/engineer/ngr
+ name = "Syndicate - Mechanic (New Gorlex Republic)"
+ id_assignment = "Mechanic"
+
+ head = /obj/item/clothing/head/hardhat/ngr
+ suit = /obj/item/clothing/suit/hazardvest/ngr
+ uniform = /obj/item/clothing/under/syndicate/ngr
+ shoes = /obj/item/clothing/shoes/workboots
+ glasses = null
+
/datum/outfit/job/syndicate/engineer/twink
name = "Syndicate - Ship Engineer (Twinkleshine, GEC)"
diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm
index ba38a4a9240b..05b8c0e1a42c 100644
--- a/code/modules/clothing/outfits/plasmaman.dm
+++ b/code/modules/clothing/outfits/plasmaman.dm
@@ -217,3 +217,9 @@
head = /obj/item/clothing/head/helmet/space/plasmaman/solgov
uniform = /obj/item/clothing/under/plasmaman/solgov
gloves = /obj/item/clothing/gloves/color/plasmaman/white
+
+/datum/outfit/plasmaman/ngr
+ name = "Plasmangr"
+ head = /obj/item/clothing/head/helmet/space/plasmaman/ngr
+ uniform= /obj/item/clothing/under/plasmaman/ngr
+ gloves = /obj/item/clothing/gloves/color/plasmaman/black
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index 98a360a48ae2..bd1817e1bf45 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -21,6 +21,8 @@
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
resistance_flags = NONE
dog_fashion = null
+ content_overlays = FALSE
+ pocket_storage_component_path = null
/obj/item/clothing/suit/space
name = "space suit"
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 1ea5af9f1ea4..c07841cdba5a 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -444,26 +444,6 @@
combat_slowdown = 0.5
jetpack = null
-//2nd Battlegroup Syndie suit
-/obj/item/clothing/head/helmet/space/hardsuit/syndi/sbg
- name = "beige-red hardsuit helmet"
- desc = "A standardized dual-mode helmet derived from ICW-era advanced special operations helmets, its red partly replaced by beige. It is in EVA mode. Manufactured by Second Battlegroup."
- alt_desc = "A standardized dual-mode helmet derived from ICW-era advanced special operations helmets, its red partly replaced by beige. It is in combat mode. Manufactured by Second Battlegroup."
- icon_state = "hardsuit1-sbg"
- item_state = "hardsuit1-sbg"
- hardsuit_type = "sbg"
-
-/obj/item/clothing/suit/space/hardsuit/syndi/sbg
- name = "beige-red hardsuit"
- desc = "A standardized dual-mode hardsuit derived from ICW-era advanced special operations hardsuits, its red partly replaced by beige. It is in EVA mode. Manufactured by Second Battlegroup."
- alt_desc = "A standardized dual-mode hardsuit derived from ICW-era advanced special operations hardsuits, its red partly replaced by beige. It is in combat mode. Manufactured by the Second Battlegroup."
- icon_state = "hardsuit1-sbg"
- item_state = "hardsuit1-sbg"
- hardsuit_type = "sbg"
- helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/sbg
- lightweight = 1
- jetpack = null
-
//Hardliner Syndie suit
/obj/item/clothing/head/helmet/space/hardsuit/syndi/hl
name = "white-red hardsuit helmet"
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index ae8f11ed0387..889bcc0420f2 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -159,15 +159,6 @@
desc = "An extraordinarily fashionable haori, utilized by Cybersun captains. Weaved with armored fabric to protect the user from gunshots."
icon_state = "carapace_cybersun"
-/obj/item/clothing/suit/armor/vest/capcarapace/ngr_captain
- name = "\improper 2nd Battlegroup jacket"
- desc = "An armored jacket worn by the New Gorlex Republic's 2nd Battlegroup."
- body_parts_covered = CHEST|GROIN|ARMS|HANDS
- icon_state = "carapace_ngr"
- item_state = "carapace_ngr"
- blood_overlay_type = "coat"
- armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
-
/obj/item/clothing/suit/armor/vest/capcarapace/captunic
name = "captain's parade coat"
desc = "Worn by a captain to show their class."
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index a99a1e2937fb..f8e8c3f69909 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -663,8 +663,8 @@
flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR|HIDEFACE|HIDEMASK
/obj/item/clothing/suit/hawaiian
- name = "hawaiian overshirt"
- desc = "A cool shirt for chilling on the beach."
+ name = "floral shirt"
+ desc = "From grills to guns, this shirt's seen it all."
icon_state = "hawaiian_blue"
item_state = "hawaiian_blue"
diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm
index c5426e63883e..2341da5567a9 100644
--- a/code/modules/clothing/under/jobs/cargo.dm
+++ b/code/modules/clothing/under/jobs/cargo.dm
@@ -46,7 +46,7 @@
supports_variations = KEPORI_VARIATION
/obj/item/clothing/under/rank/cargo/miner/lavaland
- desc = "A light uniform for operating in hazardous environments, manufactured en-masse by EXOCON for the profitable frontier prospector market. Adventurous khaki jeans included."
+ desc = "A light uniform for operating in hazardous environments, manufactured en-masse by EXOCOM for the profitable frontier prospector market. Adventurous khaki jeans included."
name = "prospector jumpsuit"
icon_state = "explorer"
item_state = "explorer"
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 36cc7c96220e..9eb76ee6bf5e 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -93,22 +93,6 @@
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
alt_covers_chest = TRUE
-/obj/item/clothing/under/syndicate/ngr/officer
- name = "NGR officer uniform"
- desc = "A black uniform worn by officers of the New Gorlex Republic."
- icon_state = "ngr_officer"
- can_adjust = FALSE
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/syndicate/ngr
- name = "NGR uniform"
- desc = "A button-up in a tasteful shade of gray with red pants, used as the basic uniform of the New Gorlex Republic."
- icon_state = "ngr_grunt"
- can_adjust = FALSE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
- alt_covers_chest = TRUE
-
/obj/item/clothing/under/syndicate/gorlex
name = "Gorlex Marauder uniform"
desc = "Originally worn by the miners of the Gorlex VII colony, it is now donned by veteran Gorlex Marauders."
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index 41fce675bf70..6955bd23d66b 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -1,7 +1,7 @@
/****************Explorer's Suit and Mask****************/
/obj/item/clothing/suit/hooded/explorer
name = "explorer suit"
- desc = "A light, armor-plated softsuit, designed for exploration of dangerous planetary enviroments. An NT design by origin, later reappropriated by EXOCON for mass retail production."
+ desc = "A light, armor-plated softsuit, designed for exploration of dangerous planetary enviroments. An NT design by origin, later reappropriated by EXOCOM for mass retail production."
icon_state = "explorer"
item_state = "explorer"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -36,7 +36,7 @@
/obj/item/clothing/mask/gas/explorer
name = "explorer gas mask"
- desc = "An advanced atmospheric scrubbing mask with a built-in pressure seal, manufactured by EXOCON. Can be connected to an air supply."
+ desc = "An advanced atmospheric scrubbing mask with a built-in pressure seal, manufactured by EXOCOM. Can be connected to an air supply."
icon_state = "gas_mining"
visor_flags = BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS
visor_flags_inv = HIDEFACIALHAIR
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index debdb2e2ea02..278fccd0fcd1 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -6,7 +6,7 @@
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
name = "proto-magnetic crusher"
- desc = "A multipurpose disembarkation and self-defense tool designed by EXOCON using an incomplete Nanotrasen prototype. \
+ desc = "A multipurpose disembarkation and self-defense tool designed by EXOCOM using an incomplete Nanotrasen prototype. \
Found in the grime-stained hands of wannabee explorers across the frontier, it cuts rock and hews flora using magnetic osscilation and a heavy cleaving edge."
force = 0 //You can't hit stuff unless wielded
w_class = WEIGHT_CLASS_BULKY
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index d334b0ce3de4..ed8be5000a66 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -79,7 +79,7 @@
icon_state = "diamonddrill"
item_state = "diamonddrill"
toolspeed = 0.2
- desc = "EXOCON's improvement on the NT autodrill design, featuring a premium diamond cutting head. Yours is the drill that will pierce the heavens!"
+ desc = "EXOCOM's improvement on the NT autodrill design, featuring a premium diamond cutting head. Yours is the drill that will pierce the heavens!"
force = 20
/obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version!
@@ -94,7 +94,7 @@
toolspeed = 0.1 //the epitome of powertools. extremely fast mining
usesound = 'sound/weapons/sonic_jackhammer.ogg'
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
- desc = "The epitome of conventional rock-smashing technology, invented by NT and cost-optimized by EXOCON. Smashes rocks, objects, and unfortunate wildlife with sonic blasts."
+ desc = "The epitome of conventional rock-smashing technology, invented by NT and cost-optimized by EXOCOM. Smashes rocks, objects, and unfortunate wildlife with sonic blasts."
force = 25
attack_verb = list("blasted", "smashed", "slammed", "hammered")
diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm
index 87736c3438e4..4bd6824327f3 100644
--- a/code/modules/mining/equipment/regenerative_core.dm
+++ b/code/modules/mining/equipment/regenerative_core.dm
@@ -1,7 +1,7 @@
/*********************Hivelord stabilizer****************/
/obj/item/hivelordstabilizer
name = "stabilizing serum"
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/medicine.dmi'
icon_state = "bottle19"
desc = "Inject certain types of monster organs with this stabilizer to preserve their healing powers indefinitely."
w_class = WEIGHT_CLASS_TINY
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index c84d61ab7cf2..15cde601689e 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -1,7 +1,7 @@
/* Mining Points Equipment Vendor */
/obj/machinery/vending/mining_equipment
name = "frontier equipment vendor"
- desc = "An equipment vendor for miners, prospectors, and all manner of far reach scroungers. Ore Redemption Points can be spent here to purchase rough-and-tumble goods. Sold by EXOCON."
+ desc = "An equipment vendor for miners, prospectors, and all manner of far reach scroungers. Ore Redemption Points can be spent here to purchase rough-and-tumble goods. Sold by EXOCOM."
icon_state = "mining"
icon_deny = "mining-deny"
max_integrity = 500 // A bit more durable than your average snack vendor
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 380b1e8f61fc..ae867d518eb5 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -239,7 +239,8 @@
message_param = "beeps at %t."
/datum/emote/living/carbon/human/robot_tongue/beep/run_emote(mob/user, params)
- if(..())
+ . = ..()
+ if(.)
playsound(user.loc, 'sound/machines/twobeep.ogg', 50)
/datum/emote/living/carbon/human/robot_tongue/buzz
@@ -249,7 +250,8 @@
message_param = "buzzes at %t."
/datum/emote/living/carbon/human/robot_tongue/buzz/run_emote(mob/user, params)
- if(..())
+ . = ..()
+ if(.)
playsound(user.loc, 'sound/machines/buzz-sigh.ogg', 50)
/datum/emote/living/carbon/human/robot_tongue/buzz2
@@ -257,7 +259,8 @@
message = "buzzes twice."
/datum/emote/living/carbon/human/robot_tongue/buzz2/run_emote(mob/user, params)
- if(..())
+ . = ..()
+ if(.)
playsound(user.loc, 'sound/machines/buzz-two.ogg', 50)
/datum/emote/living/carbon/human/robot_tongue/chime
@@ -266,7 +269,8 @@
message = "chimes."
/datum/emote/living/carbon/human/robot_tongue/chime/run_emote(mob/user, params)
- if(..())
+ . = ..()
+ if(.)
playsound(user.loc, 'sound/machines/chime.ogg', 50)
/datum/emote/living/carbon/human/robot_tongue/no
@@ -275,7 +279,8 @@
message = "emits an negative blip."
/datum/emote/living/carbon/human/robot_tongue/no/run_emote(mob/user, params)
- if(..())
+ . = ..()
+ if(.)
playsound(user.loc, 'sound/machines/synth_no.ogg', 50)
/datum/emote/living/carbon/human/robot_tongue/ping
@@ -285,7 +290,8 @@
message_param = "pings at %t."
/datum/emote/living/carbon/human/robot_tongue/ping/run_emote(mob/user, params)
- if(..())
+ . = ..()
+ if(.)
playsound(user.loc, 'sound/machines/ping.ogg', 50)
/datum/emote/living/carbon/human/robot_tongue/warn
@@ -294,7 +300,8 @@
message = "blares an alarm!"
/datum/emote/living/carbon/human/robot_tongue/warn/run_emote(mob/user, params)
- if(..())
+ . = ..()
+ if(.)
playsound(user.loc, 'sound/machines/warning-buzzer.ogg', 50)
/datum/emote/living/carbon/human/robot_tongue/yes
@@ -303,7 +310,8 @@
message = "emits an affirmative blip."
/datum/emote/living/carbon/human/robot_tongue/yes/run_emote(mob/user, params)
- if(..())
+ . = ..()
+ if(.)
playsound(user.loc, 'sound/machines/synth_yes.ogg', 50)
// the following emote were originally clown-locked and synthetic exclusive
@@ -315,7 +323,8 @@
message = "plays a sad trombone..."
/datum/emote/living/carbon/human/robot_tongue/sad/run_emote(mob/user, params)
- if(..())
+ . = ..()
+ if(.)
playsound(user.loc, 'sound/misc/sadtrombone.ogg', 50)
//kepi (plus one vox i guess)
diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm
index 248e9f413795..6aa59e824169 100644
--- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm
+++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm
@@ -1,4 +1,8 @@
#define ELZUOSE_EMAG_COLORS list("#00ffff", "#ffc0cb", "#9400D3", "#4B0082", "#0000FF", "#00FF00", "#FFFF00", "#FF7F00", "#FF0000")
+#define GOOD_SOIL list(/turf/open/floor/plating/grass, /turf/open/floor/plating/dirt, /turf/open/floor/ship/dirt, /turf/open/floor/grass/ship, /turf/open/floor/plating/asteroid/whitesands/grass, /turf/open/floor/grass/fairy/beach)
+#define DIG_TIME (7.5 SECONDS)
+#define ROOT_TIME (3 SECONDS)
+#define ROOT_CHARGE_GAIN (5 * ELZUOSE_CHARGE_SCALING_MULTIPLIER)
/datum/species/elzuose
name = "\improper Elzuose"
@@ -14,6 +18,7 @@
attack_type = BURN //burn bish
exotic_bloodtype = "E"
damage_overlay_type = "" //We are too cool for regular damage overlays
+ species_age_max = 300
species_traits = list(DYNCOLORS, EYECOLOR, HAIR, FACEHAIR)
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
species_language_holder = /datum/language_holder/ethereal
@@ -46,35 +51,118 @@
loreblurb = "Elzuosa are an uncommon and unusual species best described as crystalline, electrically-powered plantpeople. They hail from the warm planet Kalixcis, where they evolved alongside the Sarathi. Kalixcian culture places no importance on blood-bonds, and those from it tend to consider their family anyone they are sufficiently close to, and choose their own names."
var/drain_time = 0 //used to keep ethereals from spam draining power sources
var/obj/effect/dummy/lighting_obj/ethereal_light
+ var/datum/action/innate/root/rooting
/datum/species/elzuose/Destroy(force)
if(ethereal_light)
QDEL_NULL(ethereal_light)
return ..()
-/datum/species/elzuose/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load)
+/datum/species/elzuose/on_species_gain(mob/living/carbon/_carbon, datum/species/old_species, pref_load)
. = ..()
- if(!ishuman(C))
+ if(!ishuman(_carbon))
return
- var/mob/living/carbon/human/ethereal = C
+ var/mob/living/carbon/human/ethereal = _carbon
default_color = "#[ethereal.dna.features["ethcolor"]]"
RegisterSignal(ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act))
RegisterSignal(ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act))
ethereal_light = ethereal.mob_light()
spec_updatehealth(ethereal)
+ rooting = new
+ rooting.Grant(_carbon)
+ RegisterSignal(ethereal, COMSIG_DIGOUT, PROC_REF(digout))
+ RegisterSignal(ethereal, COMSIG_MOVABLE_MOVED, PROC_REF(uproot))
//The following code is literally only to make admin-spawned ethereals not be black.
- C.dna.features["mcolor"] = C.dna.features["ethcolor"] //Ethcolor and Mut color are both dogshit and will be replaced
- for(var/obj/item/bodypart/BP as anything in C.bodyparts)
+ _carbon.dna.features["mcolor"] = _carbon.dna.features["ethcolor"] //Ethcolor and Mut color are both dogshit and will be replaced
+ for(var/obj/item/bodypart/BP as anything in _carbon.bodyparts)
if(BP.limb_id == SPECIES_ELZUOSE)
BP.update_limb(is_creating = TRUE)
-/datum/species/elzuose/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
- UnregisterSignal(C, COMSIG_ATOM_EMAG_ACT)
- UnregisterSignal(C, COMSIG_ATOM_EMP_ACT)
+/datum/species/elzuose/on_species_loss(mob/living/carbon/human/_carbon, datum/species/new_species, pref_load)
+ UnregisterSignal(_carbon, COMSIG_ATOM_EMAG_ACT)
+ UnregisterSignal(_carbon, COMSIG_ATOM_EMP_ACT)
+ UnregisterSignal(_carbon, COMSIG_DIGOUT)
+ UnregisterSignal(_carbon, COMSIG_MOVABLE_MOVED)
QDEL_NULL(ethereal_light)
+ if(rooting)
+ rooting.Remove(_carbon)
return ..()
+/datum/action/innate/root
+ name = "Root"
+ desc = "Root into good soil to gain charge."
+ check_flags = AB_CHECK_CONSCIOUS
+ button_icon_state = "plant-22"
+ icon_icon = 'icons/obj/flora/plants.dmi'
+ background_icon_state = "bg_alien"
+
+/datum/action/innate/root/Activate()
+ var/mob/living/carbon/human/_human = owner
+ var/datum/species/elzuose/_elzu = _human.dna.species
+ // this is healthy for elzu, they shouldnt be able to overcharge and get heart attacks from this
+ var/obj/item/organ/stomach/ethereal/stomach = _human.getorganslot(ORGAN_SLOT_STOMACH)
+
+ if(_human.wear_suit && istype(_human.wear_suit, /obj/item/clothing))
+ var/obj/item/clothing/CS = _human.wear_suit
+ if (CS.clothing_flags & THICKMATERIAL)
+ to_chat(_human, span_warning("Your [CS.name] is too thick to root in!"))
+ return
+
+ if(stomach.crystal_charge > ELZUOSE_CHARGE_FULL)
+ to_chat(_human,span_warning("Your charge is full!"))
+ return
+ _elzu.drain_time = world.time + ROOT_TIME
+ _human.visible_message(span_notice("[_human] is digging into the ground"),span_warning("You start to dig yourself into the ground to root. You won't won't be able to move once you start the process."),span_notice("You hear digging."))
+ if(!do_after(_human,DIG_TIME, target = _human))
+ to_chat(_human,span_warning("You were interupted!"))
+ return
+ _human.apply_status_effect(/datum/status_effect/rooted)
+ to_chat(_human, span_notice("You root into the ground and begin to feed."))
+
+ while(do_after(_human, ROOT_TIME, target = _human))
+ if(istype(stomach))
+ to_chat(_human, span_notice("You receive some charge from rooting."))
+ stomach.adjust_charge(ROOT_CHARGE_GAIN)
+ _human.adjustBruteLoss(-3)
+ _human.adjustFireLoss(-3)
+
+ if(stomach.crystal_charge > ELZUOSE_CHARGE_FULL)
+ stomach.crystal_charge = ELZUOSE_CHARGE_FULL
+ to_chat(_human, span_notice("You're full on charge!"))
+ break
+
+ else
+ to_chat(_human,span_warning("You're missing your biological battery and can't recieve charge from rooting!"))
+ break
+
+/datum/species/elzuose/proc/digout(mob/living/carbon/human/_human)
+ if(do_after(_human, DIG_TIME,target = _human))
+ to_chat(_human,span_notice("You finish digging yourself out."))
+ _human.remove_status_effect(/datum/status_effect/rooted)
+ return
+
+/datum/species/elzuose/proc/uproot(mob/living/carbon/human/_human)
+ //You got moved and uprooted, time to suffer the consequences.
+ if(_human.has_status_effect(/datum/status_effect/rooted))
+ _human.visible_message(span_warning("[_human] is forcefully uprooted. That looked like it hurt."),span_warning("You're forcefully unrooted! Ouch!"),span_warning("You hear someone scream in pain."))
+ _human.apply_damage(8,BRUTE,BODY_ZONE_CHEST)
+ _human.apply_damage(8,BRUTE,BODY_ZONE_L_LEG)
+ _human.apply_damage(8,BRUTE,BODY_ZONE_R_LEG)
+ _human.emote("scream")
+ _human.remove_status_effect(/datum/status_effect/rooted)
+ return
+
+/datum/action/innate/root/IsAvailable()
+ if(..())
+ var/mob/living/carbon/human/_human = owner
+ var/turf/terrain = get_turf(_human)
+ if(_human.has_status_effect(/datum/status_effect/rooted))
+ return FALSE
+ if(is_type_in_list(terrain,GOOD_SOIL))
+ return TRUE
+ return FALSE
+
/datum/species/elzuose/random_name(gender,unique,lastname)
if(unique)
return random_unique_lizard_name(gender)
@@ -86,30 +174,30 @@
return randname
-/datum/species/elzuose/spec_updatehealth(mob/living/carbon/human/H)
+/datum/species/elzuose/spec_updatehealth(mob/living/carbon/human/_human)
. = ..()
if(!ethereal_light)
return
- if(H.stat != DEAD && !EMPeffect)
+ if(_human.stat != DEAD && !EMPeffect)
if(!emag_effect)
- current_color = health_adjusted_color(H, default_color)
- set_ethereal_light(H, current_color)
+ current_color = health_adjusted_color(_human, default_color)
+ set_ethereal_light(_human, current_color)
ethereal_light.set_light_on(TRUE)
fixed_mut_color = copytext_char(current_color, 2)
else
ethereal_light.set_light_on(FALSE)
fixed_mut_color = rgb(128,128,128)
- for(var/obj/item/bodypart/parts_to_update as anything in H.bodyparts)
+ for(var/obj/item/bodypart/parts_to_update as anything in _human.bodyparts)
parts_to_update.species_color = fixed_mut_color
parts_to_update.update_limb()
- H.update_body()
- H.update_hair()
+ _human.update_body()
+ _human.update_hair()
-/datum/species/elzuose/proc/health_adjusted_color(mob/living/carbon/human/H, default_color)
- var/health_percent = max(H.health, 0) / 100
+/datum/species/elzuose/proc/health_adjusted_color(mob/living/carbon/human/_human, default_color)
+ var/health_percent = max(_human.health, 0) / 100
var/static/unhealthy_color_red_part = GETREDPART(unhealthy_color)
var/static/unhealthy_color_green_part = GETGREENPART(unhealthy_color)
@@ -126,130 +214,129 @@
)
return result
-/datum/species/elzuose/proc/set_ethereal_light(mob/living/carbon/human/H, current_color)
+/datum/species/elzuose/proc/set_ethereal_light(mob/living/carbon/human/_human, current_color)
if(!ethereal_light)
return
- var/health_percent = max(H.health, 0) / 100
+ var/health_percent = max(_human.health, 0) / 100
var/light_range = 1 + (1 * health_percent)
var/light_power = 1 + round(0.5 * health_percent)
ethereal_light.set_light_range_power_color(light_range, light_power, current_color)
-/datum/species/elzuose/proc/on_emp_act(mob/living/carbon/human/H, severity)
+/datum/species/elzuose/proc/on_emp_act(mob/living/carbon/human/_human, severity)
EMPeffect = TRUE
- spec_updatehealth(H)
- to_chat(H, "You feel the light of your body leave you.")
+ spec_updatehealth(_human)
+ to_chat(_human, span_notice("You feel the light of your body leave you."))
switch(severity)
if(EMP_LIGHT)
- addtimer(CALLBACK(src, PROC_REF(stop_emp), H), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 10 seconds
+ addtimer(CALLBACK(src, PROC_REF(stop_emp), _human), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 10 seconds
if(EMP_HEAVY)
- addtimer(CALLBACK(src, PROC_REF(stop_emp), H), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds
+ addtimer(CALLBACK(src, PROC_REF(stop_emp), _human), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds
-/datum/species/elzuose/proc/on_emag_act(mob/living/carbon/human/H, mob/user)
+/datum/species/elzuose/proc/on_emag_act(mob/living/carbon/human/_human, mob/user)
if(emag_effect)
return
emag_effect = TRUE
if(user)
- to_chat(user, "You tap [H] on the back with your card.")
- H.visible_message("[H] starts flickering in an array of colors!")
- handle_emag(H)
- addtimer(CALLBACK(src, PROC_REF(stop_emag), H), 30 SECONDS) //Disco mode for 30 seconds! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass.
+ to_chat(user, span_notice("You tap [_human] on the back with your card."))
+ _human.visible_message(span_danger("[_human] starts flickering in an array of colors!"))
+ handle_emag(_human)
+ addtimer(CALLBACK(src, PROC_REF(stop_emag), _human), 30 SECONDS) //Disco mode for 30 seconds! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass.
-/datum/species/elzuose/spec_life(mob/living/carbon/human/H)
+/datum/species/elzuose/spec_life(mob/living/carbon/human/_human)
.=..()
- handle_charge(H)
+ handle_charge(_human)
-/datum/species/elzuose/proc/stop_emp(mob/living/carbon/human/H)
+/datum/species/elzuose/proc/stop_emp(mob/living/carbon/human/_human)
EMPeffect = FALSE
- spec_updatehealth(H)
- to_chat(H, "You feel more energized as your shine comes back.")
+ spec_updatehealth(_human)
+ to_chat(_human, span_notice("You feel more energized as your shine comes back."))
-/datum/species/elzuose/proc/handle_emag(mob/living/carbon/human/H)
+/datum/species/elzuose/proc/handle_emag(mob/living/carbon/human/_human)
if(!emag_effect)
return
current_color = pick(ELZUOSE_EMAG_COLORS)
- spec_updatehealth(H)
- addtimer(CALLBACK(src, PROC_REF(handle_emag), H), 5) //Call ourselves every 0.5 seconds to change color
+ spec_updatehealth(_human)
+ addtimer(CALLBACK(src, PROC_REF(handle_emag), _human), 5) //Call ourselves every 0.5 seconds to change color
-/datum/species/elzuose/proc/stop_emag(mob/living/carbon/human/H)
+/datum/species/elzuose/proc/stop_emag(mob/living/carbon/human/_human)
emag_effect = FALSE
- spec_updatehealth(H)
- H.visible_message("[H] stops flickering and goes back to their normal state!")
+ spec_updatehealth(_human)
+ _human.visible_message(span_danger("[_human] stops flickering and goes back to their normal state!"))
-/datum/species/elzuose/proc/handle_charge(mob/living/carbon/human/H)
+/datum/species/elzuose/proc/handle_charge(mob/living/carbon/human/_human)
brutemod = 1.25
- switch(get_charge(H))
+ switch(get_charge(_human))
if(ELZUOSE_CHARGE_NONE to ELZUOSE_CHARGE_LOWPOWER)
- if(get_charge(H) == ELZUOSE_CHARGE_NONE)
- H.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 3)
+ if(get_charge(_human) == ELZUOSE_CHARGE_NONE)
+ _human.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 3)
else
- H.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 2)
- if(H.health > 10.5)
- apply_damage(0.2, TOX, null, null, H)
+ _human.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 2)
+ if(_human.health > 10.5)
+ apply_damage(0.2, TOX, null, null, _human)
brutemod = 1.75
if(ELZUOSE_CHARGE_LOWPOWER to ELZUOSE_CHARGE_NORMAL)
- H.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 1)
+ _human.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 1)
brutemod = 1.5
if(ELZUOSE_CHARGE_FULL to ELZUOSE_CHARGE_OVERLOAD)
- H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 1)
+ _human.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 1)
brutemod = 1.5
if(ELZUOSE_CHARGE_OVERLOAD to ELZUOSE_CHARGE_DANGEROUS)
- H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 2)
+ _human.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 2)
brutemod = 1.75
if(prob(10)) //10% each tick for ethereals to explosively release excess energy if it reaches dangerous levels
- discharge_process(H)
+ discharge_process(_human)
else
- H.clear_alert("ELZUOSE_CHARGE")
- H.clear_alert("ethereal_overcharge")
+ _human.clear_alert("ELZUOSE_CHARGE")
+ _human.clear_alert("ethereal_overcharge")
-/datum/species/elzuose/proc/discharge_process(mob/living/carbon/human/H)
- to_chat(H, "You begin to lose control over your charge!")
- H.visible_message("[H] begins to spark violently!")
+/datum/species/elzuose/proc/discharge_process(mob/living/carbon/human/_human)
+ _human.visible_message(span_danger("[_human] begins to spark violently!"),_human,span_warning("You begin to lose control over your charge!"))
var/static/mutable_appearance/overcharge //shameless copycode from lightning spell
overcharge = overcharge || mutable_appearance('icons/effects/effects.dmi', "electricity", EFFECTS_LAYER)
- H.add_overlay(overcharge)
- if(do_mob(H, H, 50, 1))
- H.flash_lighting_fx(5, 7, current_color)
- var/obj/item/organ/stomach/ethereal/stomach = H.getorganslot(ORGAN_SLOT_STOMACH)
- playsound(H, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5)
- H.cut_overlay(overcharge)
- tesla_zap(H, 2, (stomach.crystal_charge / ELZUOSE_CHARGE_SCALING_MULTIPLIER) * 50, ZAP_OBJ_DAMAGE | ZAP_ALLOW_DUPLICATES)
+ _human.add_overlay(overcharge)
+ if(do_mob(_human, _human, 50, 1))
+ _human.flash_lighting_fx(5, 7, current_color)
+ var/obj/item/organ/stomach/ethereal/stomach = _human.getorganslot(ORGAN_SLOT_STOMACH)
+ playsound(_human, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5)
+ _human.cut_overlay(overcharge)
+ tesla_zap(_human, 2, (stomach.crystal_charge / ELZUOSE_CHARGE_SCALING_MULTIPLIER) * 50, ZAP_OBJ_DAMAGE | ZAP_ALLOW_DUPLICATES)
if(istype(stomach))
stomach.adjust_charge(ELZUOSE_CHARGE_FULL - stomach.crystal_charge)
- to_chat(H, "You violently discharge energy!")
- H.visible_message("[H] violently discharges energy!")
+ to_chat(_human,span_warning("You violently discharge energy!"))
+ _human.visible_message(span_danger("[_human] violently discharges energy!"))
if(prob(10)) //chance of developing heart disease to dissuade overcharging oneself
var/datum/disease/D = new /datum/disease/heart_failure
- H.ForceContractDisease(D)
- to_chat(H, "You're pretty sure you just felt your heart stop for a second there..")
- H.playsound_local(H, 'sound/effects/singlebeat.ogg', 100, 0)
- H.Paralyze(100)
+ _human.ForceContractDisease(D)
+ to_chat(_human, span_userdanger("You're pretty sure you just felt your heart stop for a second there."))
+ _human.playsound_local(_human, 'sound/effects/singlebeat.ogg', 100, 0)
+ _human.Paralyze(100)
return
-/datum/species/elzuose/proc/get_charge(mob/living/carbon/H) //this feels like it should be somewhere else. Eh?
- var/obj/item/organ/stomach/ethereal/stomach = H.getorganslot(ORGAN_SLOT_STOMACH)
+/datum/species/elzuose/proc/get_charge(mob/living/carbon/_human) //this feels like it should be somewhere else. Eh?
+ var/obj/item/organ/stomach/ethereal/stomach = _human.getorganslot(ORGAN_SLOT_STOMACH)
if(istype(stomach))
return stomach.crystal_charge
return ELZUOSE_CHARGE_NONE
-/datum/species/elzuose/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
+/datum/species/elzuose/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/_human)
if(istype(I, /obj/item/multitool))
if(user.a_intent == INTENT_HARM)
. = ..() // multitool beatdown
return
if (emag_effect == TRUE)
- to_chat(user, "The multitool can't get a lock on [H]'s EM frequency")
+ to_chat(user, span_warning("The multitool can't get a lock on [_human]'s EM frequency!"))
return
- if(user != H)
+ if(user != _human)
// random color change
default_color = "#" + GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)]
- current_color = health_adjusted_color(H, default_color)
- spec_updatehealth(H)
- H.visible_message("[H]'s EM frequency is scrambled to a random color.")
+ current_color = health_adjusted_color(_human, default_color)
+ spec_updatehealth(_human)
+ _human.visible_message(span_danger("[_human]'s EM frequency is scrambled to a random color."))
else
// select new color
var/new_etherealcolor = input(user, "Choose your Elzuose color:", "Character Preference",default_color) as color|null
@@ -257,10 +344,10 @@
var/temp_hsv = RGBtoHSV(new_etherealcolor)
if(ReadHSV(temp_hsv)[3] >= ReadHSV("#505050")[3]) // elzu colors should be bright ok??
default_color = sanitize_hexcolor(new_etherealcolor, 6, TRUE)
- current_color = health_adjusted_color(H, default_color)
- spec_updatehealth(H)
- H.visible_message("[H] modulates \his EM frequency to [new_etherealcolor].")
+ current_color = health_adjusted_color(_human, default_color)
+ spec_updatehealth(_human)
+ _human.visible_message(span_notice("[_human] modulates [_human.p_their()] EM frequency to [new_etherealcolor]"))
else
- to_chat(user, "Invalid color. Your color is not bright enough.")
+ to_chat(user, span_danger("Invalid color. Your color is not bright enough."))
else
. = ..()
diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
index fa7b0a133bae..0b5a7f80a837 100644
--- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
+++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
@@ -23,6 +23,28 @@
desc = "A 7-round speed loader for quickly reloading .357 revolvers. These hollow point rounds do incredible damage against soft targets, but are nearly ineffective against armored ones."
ammo_type = /obj/item/ammo_casing/a357/hp
+/obj/item/ammo_box/a357_box
+ name = "ammo box (.357)"
+ desc = "A box of standard .357 ammo."
+ icon_state = "357box"
+ ammo_type = /obj/item/ammo_casing/a357
+ max_ammo = 50
+
+/obj/item/ammo_box/a357_box/match
+ name = "ammo box (.357)"
+ desc = "A box of match .357 ammo."
+ icon_state = "357box-match"
+ ammo_type = /obj/item/ammo_casing/a357/match
+ max_ammo = 50
+
+/obj/item/ammo_box/a357_box/hp
+ name = "ammo box (.357)"
+ desc = "A box of hollow point .357 ammo."
+ icon_state = "357box-hp"
+ ammo_type = /obj/item/ammo_casing/a357/hp
+ max_ammo = 50
+
+
// .45-70 Ammo Holders (Hunting Revolver)
/obj/item/ammo_box/a4570
@@ -443,3 +465,10 @@
icon_state = "8x50mmbox-hp"
ammo_type = /obj/item/ammo_casing/a8_50rhp
max_ammo = 20
+
+/obj/item/ammo_box/a300_box
+ name = "ammo box (.300 Magnum)"
+ desc = "A box of standard .300 Magnum ammo."
+ icon_state = "300box"
+ ammo_type = /obj/item/ammo_casing/a300
+ max_ammo = 20
diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
index 43748f7afe7b..d757ddf03047 100644
--- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
@@ -28,7 +28,10 @@
/obj/item/ammo_box/magazine/internal/cylinder/pepperbox
name = "pepperbox revolver cylinder"
+ ammo_type = /obj/item/ammo_casing/a357
+ caliber = ".357"
max_ammo = 5
+ instant_load = FALSE
/obj/item/ammo_box/magazine/internal/cylinder/rev45
name = "cattleman revolver cylinder"
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index f201dfbca548..dea8c12e5a2e 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -472,6 +472,7 @@
"The Peacemaker" = "detective_peacemaker",
"Black Panther" = "detective_panther"
)
+ w_class = WEIGHT_CLASS_SMALL
manufacturer = MANUFACTURER_HUNTERSPRIDE
recoil = 0 //weaker than normal revolver, no recoil
@@ -679,6 +680,7 @@
manufacturer = MANUFACTURER_HUNTERSPRIDE
spread_unwielded = 50
fire_delay = 0
+ gate_offset = 4
semi_auto = TRUE
safety_wording = "safety"
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 5f39d407d749..ac3aa9e3d21a 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -1,6 +1,6 @@
/obj/item/gun/energy/kinetic_accelerator
name = "kinetic accelerator"
- desc = "A self recharging, ranged self-defense and rock pulverizing tool that does increased damage in low pressure. EXOCON does not condone use of this weapon against other sentient life."
+ desc = "A self recharging, ranged self-defense and rock pulverizing tool that does increased damage in low pressure. EXOCOM does not condone use of this weapon against other sentient life."
icon_state = "kineticgun"
item_state = "kineticgun"
ammo_type = list(/obj/item/ammo_casing/energy/kinetic)
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 06698ca53982..829393d4d115 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -306,7 +306,7 @@
if(firer && HAS_TRAIT(firer, TRAIT_NICE_SHOT))
best_angle += NICE_SHOT_RICOCHET_BONUS
for(var/mob/living/L in range(ricochet_auto_aim_range, src.loc))
- if(L.stat == DEAD || !isInSight(src, L))
+ if(L.stat == DEAD || !isInSight(src, L) || L == firer)
continue
var/our_angle = abs(closer_angle_difference(Angle, Get_Angle(src.loc, L.loc)))
if(our_angle < best_angle)
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 0985ce758976..290aec1f6c54 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -1,12 +1,12 @@
/proc/translate_legacy_chem_id(id)
- switch (id)
- if ("sacid")
+ switch(id)
+ if("sacid")
return "sulphuricacid"
- if ("facid")
+ if("facid")
return "fluorosulfuricacid"
- if ("co2")
+ if("co2")
return "carbondioxide"
- if ("mine_salve")
+ if("mine_salve")
return "minerssalve"
else
return ckey(id)
@@ -15,7 +15,7 @@
name = "chem dispenser"
desc = "Creates and dispenses chemicals."
density = TRUE
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/chem_machines.dmi'
icon_state = "dispenser"
base_icon_state = "dispenser"
use_power = IDLE_POWER_USE
@@ -451,7 +451,7 @@
/obj/machinery/chem_dispenser/drinks
name = "soda dispenser"
desc = "Contains a large reservoir of soft drinks."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/chem_machines.dmi'
icon_state = "soda_dispenser"
base_icon_state = "soda_dispenser"
has_panel_overlay = FALSE
@@ -509,7 +509,7 @@
name = "booze dispenser"
desc = "Contains a large reservoir of the good stuff."
base_icon_state = "booze_dispenser"
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/chem_machines.dmi'
icon_state = "booze_dispenser"
circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer
dispensable_reagents = list(
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index b3a0cfee615d..e8892390e189 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -1,7 +1,7 @@
/obj/machinery/chem_heater
name = "chemical heater"
density = TRUE
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/chem_machines.dmi'
icon_state = "mixer0b"
base_icon_state = "mixer"
use_power = IDLE_POWER_USE
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 602c37710a57..e53a7f20ae16 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -3,7 +3,7 @@
desc = "Used to separate chemicals and distribute them in a variety of forms."
density = TRUE
layer = BELOW_OBJ_LAYER
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/chem_machines.dmi'
icon_state = "mixer0"
base_icon_state = "mixer"
use_power = IDLE_POWER_USE
diff --git a/code/modules/reagents/chemistry/machinery/chem_press.dm b/code/modules/reagents/chemistry/machinery/chem_press.dm
index 80500efc78bf..43cd01e63b65 100644
--- a/code/modules/reagents/chemistry/machinery/chem_press.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_press.dm
@@ -1,7 +1,7 @@
/obj/machinery/chem_press
name = "pill press"
desc = "A press operated by hand to produce pills in a variety of forms."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/chem_machines.dmi'
icon_state = "press"
pass_flags = PASSTABLE
use_power = FALSE
@@ -26,17 +26,17 @@
/obj/machinery/chem_press/Initialize()
. = ..()
beaker = new /obj/item/reagent_containers/glass/beaker/large(src)
- beaker_overlay = image(icon = 'icons/obj/chemical.dmi', icon_state = "press_beaker")
- bottle_overlay = image(icon = 'icons/obj/chemical.dmi', icon_state = "press_bottle")
+ beaker_overlay = image(icon = 'icons/obj/chemical/chem_machines.dmi', icon_state = "press_beaker")
+ bottle_overlay = image(icon = 'icons/obj/chemical/chem_machines.dmi', icon_state = "press_bottle") //shouldn't this use mutable_appearance...?
/obj/machinery/chem_press/examine(mob/user)
. = ..()
- . += "There's a small screw that can help to adjust the pill size."
- . += "There's a small dial you could push with a screwdriver to adjust the pill color."
+ . += span_notice("There's a small screw that can help to adjust the pill size.")
+ . += span_notice("There's a small dial you could push with a screwdriver to adjust the pill color.")
if(!bottle)
- . += "The pill bottle slot is empty."
+ . += span_notice("The pill bottle slot is empty.")
if(!beaker)
- . += "The beaker slot is empty."
+ . += span_notice("The beaker slot is empty.")
/obj/machinery/chem_press/attack_hand(mob/user)
. = ..()
diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm
index 2c6f5ed38186..7b5656521209 100644
--- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm
@@ -1,7 +1,7 @@
/obj/machinery/chem_dispenser/chem_synthesizer //formerly SCP-294 made by mrty, but now only for testing purposes
name = "\improper debug chemical synthesizer"
desc = "If you see this, yell at adminbus."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/chem_machines.dmi'
icon_state = "dispenser"
base_icon_state = "dispenser"
amount = 10
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 1fefd1d55031..65bcf56ef25c 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -5,7 +5,7 @@
name = "PanD.E.M.I.C 2200"
desc = "Used to work with viruses."
density = TRUE
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "pandemic0"
base_icon_state = "pandemic"
use_power = TRUE
diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
index 7c67609593d5..e93e6f3117ca 100644
--- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm
+++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
@@ -3,7 +3,7 @@
/obj/machinery/smoke_machine
name = "smoke machine"
desc = "A machine with a centrifuge installed into it. It produces smoke with any reagents you put into the machine."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/chem_machines.dmi'
icon_state = "smoke0"
base_icon_state = "smoke"
density = TRUE
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index a35a8c91542a..66465dfafb17 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -77,6 +77,9 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
///How good of an accelerant is this reagent
var/accelerant_quality = 0
+ ///The section of the autowiki chem table this reagent will be under
+ var/category = "Misc"
+
/datum/reagent/New()
. = ..()
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index ad21aa93e745..b776a285b346 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -2,6 +2,7 @@
name = "Drug"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "bitterness"
+ category = "Drug"
var/trippy = TRUE //Does this drug make you trip?
/datum/reagent/drug/on_mob_end_metabolize(mob/living/M)
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index e17af4bd9c86..2c0ecef181a1 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -11,6 +11,7 @@
name = "Consumable"
taste_description = "generic food"
taste_mult = 4
+ category = "Food and Drink"
var/nutriment_factor = 1 * REAGENTS_METABOLISM
var/quality = 0 //affects mood, typically higher for mixed drinks with more complex recipes
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 24be546cb3f6..7fb71324d7af 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -9,6 +9,7 @@
/datum/reagent/medicine
name = "Medicine"
taste_description = "bitterness"
+ category = "Medicine"
/datum/reagent/medicine/on_mob_life(mob/living/carbon/M)
current_cycle++
diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
index 62c743558e13..313fb7475e00 100644
--- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
@@ -2,6 +2,7 @@
/datum/reagent/thermite
name = "Thermite"
description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
+ category = "Pyrotechnics"
reagent_state = SOLID
color = "#550000"
taste_description = "sweet tasting metal"
@@ -19,6 +20,7 @@
/datum/reagent/nitroglycerin
name = "Nitroglycerin"
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
+ category = "Pyrotechnics"
color = "#808080" // rgb: 128, 128, 128
taste_description = "oil"
@@ -37,6 +39,7 @@
/datum/reagent/clf3
name = "Chlorine Trifluoride"
description = "Makes a temporary 3x3 fireball when it comes into existence, so be careful when mixing. ClF3 applied to a surface burns things that wouldn't otherwise burn, including typically-robust flooring, potentially exposing it to the vacuum of space."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#FFC8C8"
metabolization_rate = 4
@@ -82,6 +85,7 @@
/datum/reagent/sorium
name = "Sorium"
description = "Sends everything flying from the detonation point."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#5A64C8"
taste_description = "air and bitterness"
@@ -89,6 +93,7 @@
/datum/reagent/liquid_dark_matter
name = "Liquid Dark Matter"
description = "Sucks everything into the detonation point."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#210021"
taste_description = "compressed bitterness"
@@ -96,6 +101,7 @@
/datum/reagent/gunpowder
name = "Gunpowder"
description = "Explodes. Violently."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#000000"
metabolization_rate = 0.05
@@ -120,6 +126,7 @@
/datum/reagent/rdx
name = "RDX"
description = "Military grade explosive"
+ category = "Pyrotechnics"
reagent_state = SOLID
color = "#FFFFFF"
taste_description = "salt"
@@ -127,6 +134,7 @@
/datum/reagent/tatp
name = "TaTP"
description = "Suicide grade explosive"
+ category = "Pyrotechnics"
reagent_state = SOLID
color = "#FFFFFF"
taste_description = "death"
@@ -134,6 +142,7 @@
/datum/reagent/flash_powder
name = "Flash Powder"
description = "Makes a very bright flash."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#C8C8C8"
taste_description = "salt"
@@ -141,6 +150,7 @@
/datum/reagent/smoke_powder
name = "Smoke Powder"
description = "Makes a large cloud of smoke that can carry reagents."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#C8C8C8"
taste_description = "smoke"
@@ -148,6 +158,7 @@
/datum/reagent/sonic_powder
name = "Sonic Powder"
description = "Makes a deafening noise."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#C8C8C8"
taste_description = "loud noises"
@@ -155,6 +166,7 @@
/datum/reagent/phlogiston
name = "Phlogiston"
description = "Catches you on fire and makes you ignite."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#FA00AF"
taste_description = "burning"
@@ -179,6 +191,7 @@
/datum/reagent/napalm
name = "Napalm"
description = "Very flammable."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#FA00AF"
taste_description = "burning"
@@ -206,6 +219,7 @@
/datum/reagent/cryostylane
name = "Cryostylane"
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Cryostylane slowly cools all other reagents in the container 0K."
+ category = "Pyrotechnics"
color = "#0000DC"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "bitterness"
@@ -227,6 +241,7 @@
/datum/reagent/pyrosium
name = "Pyrosium"
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Pyrosium slowly heats all other reagents in the container."
+ category = "Pyrotechnics"
color = "#64FAC8"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "bitterness"
@@ -242,6 +257,7 @@
/datum/reagent/teslium //Teslium. Causes periodic shocks, and makes shocks against the target much more effective.
name = "Teslium"
description = "An unstable, electrically-charged metallic slurry. Periodically electrocutes its victim, and makes electrocutions against them more deadly. Excessively heating teslium results in dangerous destabilization. Do not allow to come into contact with water."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#20324D" //RGB: 32, 50, 77
metabolization_rate = 0.5 * REAGENTS_METABOLISM
@@ -273,6 +289,7 @@
/datum/reagent/teslium/energized_jelly
name = "Energized Jelly"
description = "Electrically-charged jelly. Boosts jellypeople's nervous system, but only shocks other lifeforms."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#CAFF43"
taste_description = "jelly"
@@ -291,6 +308,7 @@
/datum/reagent/firefighting_foam
name = "Firefighting Foam"
description = "A historical fire suppressant. Originally believed to simply displace oxygen to starve fires, it actually interferes with the combustion reaction itself. Vastly superior to the cheap water-based extinguishers found on NT vessels."
+ category = "Pyrotechnics"
reagent_state = LIQUID
color = "#A6FAFF55"
taste_description = "the inside of a fire extinguisher"
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index d95bd68759c7..91927581095c 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -7,6 +7,7 @@
color = "#CF3600" // rgb: 207, 54, 0
taste_description = "bitterness"
taste_mult = 1.2
+ category = "Toxin"
var/toxpwr = 1.5
var/silent_toxin = FALSE //won't produce a pain message when processed by liver/life() if there isn't another non-silent toxin present.
diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm
index b2e275bc0631..302d05f0712b 100644
--- a/code/modules/reagents/chemistry/recipes/medicine.dm
+++ b/code/modules/reagents/chemistry/recipes/medicine.dm
@@ -315,12 +315,12 @@ WS End */
required_reagents = list(/datum/reagent/medicine/lavaland_extract = 1, /datum/reagent/medicine/bonefixingjuice = 1, /datum/reagent/titanium = 5)
/datum/chemical_reaction/pure_soulus_dust_hollow
- results = list(/datum/reagent/medicine/soulus/pure = 10,)
- required_reagents = list(/datum/reagent/medicine/soulus = 20, /datum/reagent/medicine/system_cleaner = 1, /datum/reagent/water/hollowwater = 10)
+ results = list(/datum/reagent/medicine/soulus/pure = 20,)
+ required_reagents = list(/datum/reagent/medicine/soulus = 20, /datum/reagent/water/hollowwater = 10)
/datum/chemical_reaction/pure_soulus_dust_holy
- results = list(/datum/reagent/medicine/soulus/pure = 10,)
- required_reagents = list(/datum/reagent/medicine/soulus = 20, /datum/reagent/medicine/system_cleaner = 1, /datum/reagent/water/holywater = 10)
+ results = list(/datum/reagent/medicine/soulus/pure = 20,)
+ required_reagents = list(/datum/reagent/medicine/soulus = 20, /datum/reagent/water/holywater = 10)
/datum/chemical_reaction/chartreuse
results = list(/datum/reagent/medicine/chartreuse = 10)
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index d63debc16e41..bfecd046f977 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers
name = "Container"
desc = "..."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/beakers.dmi'
icon_state = null
w_class = WEIGHT_CLASS_TINY
var/amount_per_transfer_from_this = 5
diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm
index 5645ed54957e..5916fee4b44a 100644
--- a/code/modules/reagents/reagent_containers/bottle.dm
+++ b/code/modules/reagents/reagent_containers/bottle.dm
@@ -278,6 +278,7 @@
/obj/item/reagent_containers/glass/bottle/necropolis_seed
name = "bowl of blood"
desc = "A clay bowl containing a fledgling spire, preserved in blood. When consumed, allows the user to transform into an avatar of the Necropolis. A robust virologist may be able to unlock its full potential..."
+ icon = 'icons/obj/chemical/mortar.dmi'
icon_state = "mortar_bone"
spawned_disease = /datum/disease/advance/necropolis
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 63acf014b214..248586792679 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/dropper
name = "dropper"
desc = "A dropper. Holds up to 5 units."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/beakers.dmi'
icon_state = "dropper0"
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(1, 2, 3, 4, 5)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 6682a9ba7943..58e46dcb1048 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -118,7 +118,7 @@
/obj/item/reagent_containers/glass/beaker
name = "beaker"
desc = "A beaker. It can hold up to 50 units."
- icon = 'icons/obj/chemical.dmi' //Should I modularize this? Yes. Will I do it?
+ icon = 'icons/obj/chemical/beakers.dmi'
icon_state = "beaker"
item_state = "beaker"
custom_materials = list(/datum/material/glass=500)
@@ -296,7 +296,6 @@
/obj/item/reagent_containers/glass/filter
name = "seperatory funnel"
desc = "A crude tool created by welding several beakers together. It would probably be useful for seperating reagents."
- icon = 'icons/obj/chemical.dmi'
icon_state = "beakerfilter"
item_state = "beaker"
volume = 100
diff --git a/code/modules/reagents/reagent_containers/hypovial.dm b/code/modules/reagents/reagent_containers/hypovial.dm
index f16984cd7e5b..7696bf0d950a 100644
--- a/code/modules/reagents/reagent_containers/hypovial.dm
+++ b/code/modules/reagents/reagent_containers/hypovial.dm
@@ -2,7 +2,7 @@
/obj/item/reagent_containers/glass/bottle/vial
name = "broken hypovial"
desc = "A hypovial compatible with most hyposprays."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/hypovial.dmi'
icon_state = "hypovial"
spillable = FALSE
var/comes_with = list() //Easy way of doing this.
diff --git a/code/modules/reagents/reagent_containers/jug.dm b/code/modules/reagents/reagent_containers/jug.dm
index a863be707c48..80ebcbb4d5b3 100644
--- a/code/modules/reagents/reagent_containers/jug.dm
+++ b/code/modules/reagents/reagent_containers/jug.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/glass/chem_jug
name = "chemical jug"
desc = "A large jug used for storing bulk ammounts chemicals. Provided with a tamper seal which ensures that the contents are pure"
- icon = 'icons/obj/chem_jug.dmi'
+ icon = 'icons/obj/chemical/chem_jug.dmi'
icon_state = "chem_jug"
item_state = "sheet-plastic"
w_class = WEIGHT_CLASS_BULKY
diff --git a/code/modules/reagents/reagent_containers/medigel.dm b/code/modules/reagents/reagent_containers/medigel.dm
index 7542f606a899..193d588bcbb5 100644
--- a/code/modules/reagents/reagent_containers/medigel.dm
+++ b/code/modules/reagents/reagent_containers/medigel.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/medigel
name = "medical gel"
desc = "A medical gel applicator bottle, designed for precision application, with an unscrewable cap."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/medicine.dmi'
icon_state = "medigel"
item_state = "spraycan"
lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi'
diff --git a/code/modules/reagents/reagent_containers/mortar.dm b/code/modules/reagents/reagent_containers/mortar.dm
index 3c1443bfb9d2..c139a0b6fb09 100644
--- a/code/modules/reagents/reagent_containers/mortar.dm
+++ b/code/modules/reagents/reagent_containers/mortar.dm
@@ -10,14 +10,14 @@ to accommodate additional materials.
name = "pestle"
desc = "An ancient, simple tool used in conjunction with a mortar to grind or juice items."
w_class = WEIGHT_CLASS_SMALL
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/mortar.dmi'
icon_state = "pestle"
force = 7
/obj/item/reagent_containers/glass/mortar
name = "mortar"
desc = "A specially formed bowl of ancient design. It is possible to crush or juice items placed in it using a pestle; however the process, unlike modern methods, is slow and physically exhausting. Alt click to eject the item."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/mortar.dmi'
icon_state = "mortar_wood"
fill_icon_state = "mortar"
fill_icon_thresholds = list(1, 20, 40, 80, 100)
diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm
index c8187cd8843d..d244b05f55d3 100644
--- a/code/modules/reagents/reagent_containers/patch.dm
+++ b/code/modules/reagents/reagent_containers/patch.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/pill/patch
name = "chemical patch"
desc = "A chemical patch for touch based applications."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/medicine.dmi'
icon_state = "bandaid"
item_state = "bandaid"
possible_transfer_amounts = list()
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 85853ba5096b..77b8bc8f318c 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/pill
name = "pill"
desc = "A tablet or capsule."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/medicine.dmi'
icon_state = "pill"
item_state = "pill"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 8be0bea8a313..05f68682083c 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -213,16 +213,6 @@
/obj/item/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays
return
-///Subtype used for the lavaland clown ruin.
-/obj/item/reagent_containers/spray/waterflower/superlube
- name = "clown flower"
- desc = "A delightly devilish flower... you got a feeling where this is going."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "clownflower"
- amount_per_transfer_from_this = 3 // WS edit - superlube fix
- volume = 30
- list_reagents = list(/datum/reagent/lube/superlube = 30)
-
/obj/item/reagent_containers/spray/waterflower/cyborg
reagent_flags = NONE
volume = 100
@@ -345,26 +335,9 @@
volume = 100
list_reagents = list(/datum/reagent/toxin/plantbgone = 100)
-/obj/item/reagent_containers/spray/syndicate
- name = "suspicious spray bottle"
- desc = "A spray bottle, with a high performance plastic nozzle. The color scheme makes you feel slightly uneasy."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "sprayer_sus_8"
- item_state = "sprayer_sus"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- spray_range = 4
- stream_range = 2
- volume = 100
- custom_premium_price = 900
-
-/obj/item/reagent_containers/spray/syndicate/Initialize()
- . = ..()
- icon_state = pick("sprayer_sus_1", "sprayer_sus_2", "sprayer_sus_3", "sprayer_sus_4", "sprayer_sus_5","sprayer_sus_6", "sprayer_sus_7", "sprayer_sus_8")
-
/obj/item/reagent_containers/spray/medical
name = "medical spray bottle"
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/medicine.dmi'
icon_state = "sprayer_med_red"
item_state = "sprayer_med_red"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
diff --git a/code/modules/research/xenobiology/crossbreeding/_potions.dm b/code/modules/research/xenobiology/crossbreeding/_potions.dm
index 1fb17ea4d1fd..fc9d9ef06c6a 100644
--- a/code/modules/research/xenobiology/crossbreeding/_potions.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_potions.dm
@@ -8,7 +8,7 @@ Slimecrossing Potions
/obj/item/slimepotion/extract_cloner
name = "extract cloning potion"
desc = "An more powerful version of the extract enhancer potion, capable of cloning regular slime extracts."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potpurple"
/obj/item/slimepotion/extract_cloner/afterattack(obj/item/target, mob/user , proximity)
@@ -36,7 +36,7 @@ Slimecrossing Potions
/obj/item/slimepotion/peacepotion
name = "pacification potion"
desc = "A light pink solution of chemicals, smelling like liquid peace. And mercury salts."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potlightpink"
/obj/item/slimepotion/peacepotion/attack(mob/living/M, mob/user)
@@ -70,7 +70,7 @@ Slimecrossing Potions
/obj/item/slimepotion/lovepotion
name = "love potion"
desc = "A pink chemical mix thought to inspire feelings of love."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potpink"
/obj/item/slimepotion/lovepotion/attack(mob/living/M, mob/user)
@@ -104,7 +104,7 @@ Slimecrossing Potions
/obj/item/slimepotion/spaceproof
name = "slime pressurization potion"
desc = "A potent chemical sealant that will render any article of clothing airtight. Has two uses."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potblue"
var/uses = 2
@@ -136,14 +136,14 @@ Slimecrossing Potions
/obj/item/slimepotion/enhancer/max
name = "extract maximizer"
desc = "An extremely potent chemical mix that will maximize a slime extract's uses."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potpurple"
//Lavaproofing potion - Charged Red
/obj/item/slimepotion/lavaproof
name = "slime lavaproofing potion"
desc = "A strange, reddish goo said to repel lava as if it were water, without reducing flammability. Has two uses."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potred"
resistance_flags = LAVA_PROOF | FIRE_PROOF
var/uses = 2
@@ -174,7 +174,7 @@ Slimecrossing Potions
/obj/item/slimepotion/slime_reviver
name = "slime revival potion"
desc = "Infused with plasma and compressed gel, this brings dead slimes back to life."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potsilver"
/obj/item/slimepotion/slime_reviver/attack(mob/living/simple_animal/slime/M, mob/user)
@@ -198,7 +198,7 @@ Slimecrossing Potions
/obj/item/slimepotion/slime/chargedstabilizer
name = "slime omnistabilizer"
desc = "An extremely potent chemical mix that will stop a slime from mutating completely."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potcyan"
/obj/item/slimepotion/slime/chargedstabilizer/attack(mob/living/simple_animal/slime/M, mob/user)
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 113f130562de..c907f11c1cfa 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -664,7 +664,7 @@
/obj/item/slimepotion/slime/docility
name = "docility potion"
desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potsilver"
/obj/item/slimepotion/slime/docility/attack(mob/living/simple_animal/slime/M, mob/user)
@@ -695,7 +695,7 @@
/obj/item/slimepotion/slime/sentience
name = "intelligence potion"
desc = "A miraculous chemical mix that grants human like intelligence to living beings."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potpink"
var/list/not_interested = list()
var/being_used = FALSE
@@ -754,7 +754,7 @@
/obj/item/slimepotion/transference
name = "consciousness transference potion"
desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potorange"
var/prompted = 0
var/animal_type = SENTIENCE_ORGANIC
@@ -802,7 +802,7 @@
/obj/item/slimepotion/slime/steroid
name = "slime steroid"
desc = "A potent chemical mix that will cause a baby slime to generate more extract."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potred"
/obj/item/slimepotion/slime/steroid/attack(mob/living/simple_animal/slime/M, mob/user)
@@ -826,13 +826,13 @@
/obj/item/slimepotion/enhancer
name = "extract enhancer"
desc = "A potent chemical mix that will give a slime extract an additional use."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potpurple"
/obj/item/slimepotion/slime/stabilizer
name = "slime stabilizer"
desc = "A potent chemical mix that will reduce the chance of a slime mutating."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potcyan"
/obj/item/slimepotion/slime/stabilizer/attack(mob/living/simple_animal/slime/M, mob/user)
@@ -853,7 +853,7 @@
/obj/item/slimepotion/slime/mutator
name = "slime mutator"
desc = "A potent chemical mix that will increase the chance of a slime mutating."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potgreen"
/obj/item/slimepotion/slime/mutator/attack(mob/living/simple_animal/slime/M, mob/user)
@@ -878,7 +878,7 @@
/obj/item/slimepotion/speed
name = "slime speed potion"
desc = "A potent chemical mix that will reduce the slowdown from any item."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potyellow"
/obj/item/slimepotion/speed/afterattack(obj/C, mob/user, proximity)
@@ -913,7 +913,7 @@
/obj/item/slimepotion/fireproof
name = "slime chill potion"
desc = "A potent chemical mix that will fireproof any article of clothing. Has three uses."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potblue"
resistance_flags = FIRE_PROOF
var/uses = 3
@@ -945,7 +945,7 @@
/obj/item/slimepotion/genderchange
name = "gender change potion"
desc = "An interesting chemical mix that changes the biological gender of what its applied to. Cannot be used on things that lack gender entirely."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potlightpink"
/obj/item/slimepotion/genderchange/attack(mob/living/L, mob/user)
@@ -969,7 +969,7 @@
/obj/item/slimepotion/slime/renaming
name = "renaming potion"
desc = "A potion that allows a self-aware being to change what name it subconciously presents to the world."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potgreen"
var/being_used = FALSE
@@ -1002,7 +1002,7 @@
/obj/item/slimepotion/slime/slimeradio
name = "bluespace radio potion"
desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves."
- icon = 'icons/obj/chemical.dmi'
+ icon = 'icons/obj/chemical/misc.dmi'
icon_state = "potgrey"
/obj/item/slimepotion/slime/slimeradio/attack(mob/living/M, mob/user)
diff --git a/code/modules/ruins/spaceruin_code/DJstation.dm b/code/modules/ruins/spaceruin_code/DJstation.dm
deleted file mode 100644
index 3be98b064e3e..000000000000
--- a/code/modules/ruins/spaceruin_code/DJstation.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/////////// djstation items
-
-/obj/item/paper/fluff/ruins/djstation
- name = "paper - 'DJ Listening Outpost'"
- default_raw_text = "Welcome new owner!
You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio frequencies. Here is a step by step guide to start listening in on those saucy radio channels: